{"schema":1,"platform":"c64","game":"wizball","title":"Wizball","build":"Yeti's one-file crack, WIZBALL    /YETI on the c64.com disk WWW.C64HQ.COM (with Impact's and Remember's cracks beside it); the game starts at $6389","symbols_sha256":"80ddabc095d8219ffbe741261838f51dbb7c8648bad897679f40240275e6c3ec","index":[{"a":0,"n":"cpu_port_ddr","k":"variable","len":1,"c":true},{"a":1,"n":"cpu_port","k":"table","len":3,"c":true},{"a":4,"n":"music_v1_track_lo","k":"variable","len":1,"c":true},{"a":5,"n":"music_v1_track_hi","k":"variable","len":1,"c":true},{"a":6,"n":"music_v2_track_lo","k":"variable","len":1,"c":true},{"a":7,"n":"music_v2_track_hi","k":"variable","len":1,"c":true},{"a":8,"n":"music_v3_track_lo","k":"variable","len":1,"c":true},{"a":9,"n":"music_v3_track_hi","k":"variable","len":1,"c":true},{"a":10,"n":"music_v1_note_time","k":"variable","len":1,"c":true},{"a":11,"n":"music_v2_note_time","k":"variable","len":1,"c":true},{"a":12,"n":"music_v3_note_time","k":"variable","len":1,"c":true},{"a":13,"n":"music_v1_stack_index","k":"variable","len":1,"c":true},{"a":14,"n":"music_v2_stack_index","k":"variable","len":1,"c":true},{"a":15,"n":"music_v3_stack_index","k":"variable","len":1,"c":true},{"a":16,"n":"music_v1_transpose","k":"variable","len":1,"c":true},{"a":17,"n":"music_v2_transpose","k":"variable","len":1,"c":true},{"a":18,"n":"music_v3_transpose","k":"variable","len":1,"c":true},{"a":19,"n":"music_ptr_lo","k":"variable","len":1,"c":true},{"a":20,"n":"music_ptr_hi","k":"variable","len":1,"c":true},{"a":21,"n":"music_v2_freq_lo","k":"variable","len":1,"c":true},{"a":22,"n":"music_v2_freq_hi","k":"variable","len":1,"c":true},{"a":23,"n":"music_v3_freq_lo","k":"variable","len":1,"c":true},{"a":24,"n":"music_v3_freq_hi","k":"variable","len":1,"c":true},{"a":25,"n":"music_load_y","k":"variable","len":2,"c":true},{"a":27,"n":"music_note_byte","k":"variable","len":2,"c":true},{"a":29,"n":"init_zp_stub","k":"table","len":12,"c":true},{"a":41,"n":"music_v1_pulse_lo","k":"variable","len":1,"c":true},{"a":42,"n":"music_v1_pulse_hi","k":"variable","len":1,"c":true},{"a":43,"n":"music_v2_pulse_lo","k":"variable","len":1,"c":true},{"a":44,"n":"music_v2_pulse_hi","k":"variable","len":1,"c":true},{"a":45,"n":"music_v3_pulse_lo","k":"variable","len":1,"c":true},{"a":46,"n":"music_v3_pulse_hi","k":"variable","len":1,"c":true},{"a":47,"n":"music_v1_freq_lo","k":"variable","len":1,"c":true},{"a":48,"n":"music_v1_freq_hi","k":"variable","len":1,"c":true},{"a":49,"n":"music_filter_program","k":"table","len":8,"c":true},{"a":57,"n":"music_filter_program_rest","k":"table","len":8,"c":true},{"a":65,"n":"music_filter_step1_lo","k":"variable","len":1,"c":true},{"a":66,"n":"music_filter_step1_hi","k":"variable","len":1,"c":true},{"a":67,"n":"music_filter_step2_lo","k":"variable","len":1,"c":true},{"a":68,"n":"music_filter_step2_hi","k":"variable","len":1,"c":true},{"a":69,"n":"music_filter_step3_lo","k":"variable","len":1,"c":true},{"a":70,"n":"music_filter_step3_hi","k":"variable","len":1,"c":true},{"a":71,"n":"music_filter_step4_lo","k":"variable","len":1,"c":true},{"a":72,"n":"music_filter_step4_hi","k":"variable","len":1,"c":true},{"a":73,"n":"music_filter_ticks1","k":"variable","len":1,"c":true},{"a":74,"n":"music_filter_ticks2","k":"variable","len":1,"c":true},{"a":75,"n":"music_filter_ticks3","k":"variable","len":1,"c":true},{"a":76,"n":"music_filter_ticks4","k":"variable","len":1,"c":true},{"a":77,"n":"music_filter_delay","k":"variable","len":1,"c":true},{"a":78,"n":"music_filter_sweep_mode","k":"variable","len":1,"c":true},{"a":79,"n":"music_filter_start_lo","k":"variable","len":1,"c":true},{"a":80,"n":"music_filter_start_hi","k":"variable","len":1,"c":true},{"a":81,"n":"music_filter_cutoff_lo","k":"variable","len":1,"c":true},{"a":82,"n":"music_filter_cutoff_hi","k":"variable","len":1,"c":true},{"a":83,"n":"music_filter_left1","k":"variable","len":1,"c":true},{"a":84,"n":"music_filter_left2","k":"variable","len":1,"c":true},{"a":85,"n":"music_filter_left3","k":"variable","len":1,"c":true},{"a":86,"n":"music_filter_left4","k":"variable","len":1,"c":true},{"a":87,"n":"music_filter_voice","k":"variable","len":1,"c":true},{"a":88,"n":"music_cutoff_shift","k":"variable","len":1,"c":true},{"a":89,"n":"music_v1_active","k":"variable","len":1,"c":true},{"a":90,"n":"music_v2_active","k":"variable","len":1,"c":true},{"a":91,"n":"music_v3_active","k":"variable","len":1,"c":true},{"a":92,"n":"music_load_voice","k":"variable","len":1,"c":true},{"a":93,"n":"music_load_offset","k":"variable","len":1,"c":true},{"a":94,"n":"zp_temp_5e","k":"variable","len":1,"c":true},{"a":95,"n":"zp_temp_5f","k":"variable","len":1,"c":true},{"a":96,"n":"zp_ptr_60","k":"variable","len":1,"c":true},{"a":97,"n":"zp_ptr_61","k":"variable","len":1,"c":true},{"a":98,"n":"zp_ptr_62","k":"variable","len":1,"c":true},{"a":99,"n":"zp_ptr_63","k":"variable","len":1,"c":true},{"a":100,"n":"zp_ptr_64","k":"variable","len":1,"c":true},{"a":101,"n":"zp_ptr_65","k":"variable","len":1,"c":true},{"a":102,"n":"zp_temp_66","k":"variable","len":1,"c":true},{"a":103,"n":"zp_temp_67","k":"variable","len":1,"c":true},{"a":104,"n":"display_list_lo","k":"variable","len":1,"c":true},{"a":105,"n":"display_list_hi","k":"table","len":6,"c":true},{"a":111,"n":"score_row_bars","k":"table","len":3,"c":true},{"a":114,"n":"alien_sprite_mask","k":"variable","len":1,"c":true},{"a":115,"n":"alien_sprite_number","k":"variable","len":1,"c":true},{"a":116,"n":"alien_sprite_bits","k":"variable","len":1,"c":true},{"a":117,"n":"alien_sprite_reg","k":"variable","len":1,"c":true},{"a":118,"n":"sfx_record_lo","k":"variable","len":1,"c":true},{"a":119,"n":"sfx_record_hi","k":"variable","len":1,"c":true},{"a":120,"n":"place_sprites_count","k":"variable","len":1,"c":true},{"a":121,"n":"place_sprites_reg","k":"variable","len":1,"c":true},{"a":122,"n":"saved_level","k":"variable","len":1,"c":true},{"a":123,"n":"alien_template_lo","k":"variable","len":1,"c":true},{"a":124,"n":"alien_template_hi","k":"variable","len":1,"c":true},{"a":125,"n":"wiztips_sprite_table_lo","k":"variable","len":1,"c":true},{"a":126,"n":"wiztips_sprite_table_hi","k":"variable","len":1,"c":true},{"a":127,"n":"place_sprites_row","k":"variable","len":2,"c":true},{"a":129,"n":"start_column_offset","k":"variable","len":1,"c":true},{"a":130,"n":"map_offset_lo","k":"variable","len":1,"c":true},{"a":131,"n":"map_offset_hi","k":"variable","len":2,"c":true},{"a":133,"n":"nmi_watchdog_flag","k":"variable","len":1,"c":true},{"a":134,"n":"watchdog_index","k":"variable","len":1,"c":true},{"a":135,"n":"music_v1_inst_pitch_step1_lo","k":"variable","len":1,"c":true},{"a":136,"n":"music_v1_inst_pitch_step1_hi","k":"variable","len":1,"c":true},{"a":137,"n":"music_v1_inst_pitch_step2_lo","k":"variable","len":1,"c":true},{"a":138,"n":"music_v1_inst_pitch_step2_hi","k":"variable","len":1,"c":true},{"a":139,"n":"music_v1_inst_pitch_step3_lo","k":"variable","len":1,"c":true},{"a":140,"n":"music_v1_inst_pitch_step3_hi","k":"variable","len":1,"c":true},{"a":141,"n":"music_v1_inst_pitch_step4_lo","k":"variable","len":1,"c":true},{"a":142,"n":"music_v1_inst_pitch_step4_hi","k":"variable","len":1,"c":true},{"a":143,"n":"music_v1_inst_pitch_ticks1","k":"variable","len":1,"c":true},{"a":144,"n":"music_v1_inst_pitch_ticks2","k":"variable","len":1,"c":true},{"a":145,"n":"music_v1_inst_pitch_ticks3","k":"variable","len":1,"c":true},{"a":146,"n":"music_v1_inst_pitch_ticks4","k":"variable","len":1,"c":true},{"a":147,"n":"music_v1_inst_pitch_delay","k":"variable","len":1,"c":true},{"a":148,"n":"music_v1_inst_pitch_mode","k":"variable","len":1,"c":true},{"a":149,"n":"music_v1_inst_pulse_ticks1","k":"variable","len":1,"c":true},{"a":150,"n":"music_v1_inst_pulse_ticks2","k":"variable","len":1,"c":true},{"a":151,"n":"music_v1_inst_pulse_delay","k":"variable","len":1,"c":true},{"a":152,"n":"music_v1_inst_pulse_mode","k":"variable","len":1,"c":true},{"a":153,"n":"music_v1_inst_pulse_step1_lo","k":"variable","len":1,"c":true},{"a":154,"n":"music_v1_inst_pulse_step1_hi","k":"variable","len":1,"c":true},{"a":155,"n":"music_v1_inst_pulse_step2_lo","k":"variable","len":1,"c":true},{"a":156,"n":"music_v1_inst_pulse_step2_hi","k":"variable","len":1,"c":true},{"a":157,"n":"music_v1_inst_pulse_width_lo","k":"variable","len":1,"c":true},{"a":158,"n":"music_v1_inst_pulse_width_hi","k":"variable","len":1,"c":true},{"a":159,"n":"music_v1_inst_control","k":"variable","len":1,"c":true},{"a":160,"n":"music_v1_inst_attack_decay","k":"variable","len":1,"c":true},{"a":161,"n":"music_v1_inst_sustain_release","k":"variable","len":1,"c":true},{"a":162,"n":"music_v1_inst_gate_time","k":"variable","len":1,"c":true},{"a":163,"n":"music_v1_inst_release_time","k":"variable","len":1,"c":true},{"a":164,"n":"music_v3_inst_pitch_step1_lo","k":"variable","len":1,"c":true},{"a":165,"n":"music_v3_inst_pitch_step1_hi","k":"variable","len":1,"c":true},{"a":166,"n":"music_v3_inst_pitch_step2_lo","k":"variable","len":1,"c":true},{"a":167,"n":"music_v3_inst_pitch_step2_hi","k":"variable","len":1,"c":true},{"a":168,"n":"music_v3_inst_pitch_step3_lo","k":"variable","len":1,"c":true},{"a":169,"n":"music_v3_inst_pitch_step3_hi","k":"variable","len":1,"c":true},{"a":170,"n":"music_v3_inst_pitch_step4_lo","k":"variable","len":1,"c":true},{"a":171,"n":"music_v3_inst_pitch_step4_hi","k":"variable","len":1,"c":true},{"a":172,"n":"music_v3_inst_pitch_ticks1","k":"variable","len":1,"c":true},{"a":173,"n":"music_v3_inst_pitch_ticks2","k":"variable","len":1,"c":true},{"a":174,"n":"music_v3_inst_pitch_ticks3","k":"variable","len":1,"c":true},{"a":175,"n":"music_v3_inst_pitch_ticks4","k":"variable","len":1,"c":true},{"a":176,"n":"music_v3_inst_pitch_delay","k":"variable","len":1,"c":true},{"a":177,"n":"music_v3_inst_pitch_mode","k":"variable","len":1,"c":true},{"a":178,"n":"music_v3_inst_pulse_ticks1","k":"variable","len":1,"c":true},{"a":179,"n":"music_v3_inst_pulse_ticks2","k":"variable","len":1,"c":true},{"a":180,"n":"music_v3_inst_pulse_delay","k":"variable","len":1,"c":true},{"a":181,"n":"music_v3_inst_pulse_mode","k":"variable","len":1,"c":true},{"a":182,"n":"music_v3_inst_pulse_step1_lo","k":"variable","len":1,"c":true},{"a":183,"n":"music_v3_inst_pulse_step1_hi","k":"variable","len":1,"c":true},{"a":184,"n":"music_v3_inst_pulse_step2_lo","k":"variable","len":1,"c":true},{"a":185,"n":"music_v3_inst_pulse_step2_hi","k":"variable","len":1,"c":true},{"a":186,"n":"music_v3_inst_pulse_width_lo","k":"variable","len":1,"c":true},{"a":187,"n":"music_v3_inst_pulse_width_hi","k":"variable","len":1,"c":true},{"a":188,"n":"music_v3_inst_control","k":"variable","len":1,"c":true},{"a":189,"n":"music_v3_inst_attack_decay","k":"variable","len":1,"c":true},{"a":190,"n":"music_v3_inst_sustain_release","k":"variable","len":1,"c":true},{"a":191,"n":"music_v3_inst_gate_time","k":"variable","len":1,"c":true},{"a":192,"n":"music_v3_inst_release_time","k":"variable","len":1,"c":true},{"a":193,"n":"music_v3_live_pitch_step1_lo","k":"variable","len":1,"c":true},{"a":194,"n":"music_v3_live_pitch_step1_hi","k":"variable","len":1,"c":true},{"a":195,"n":"music_v3_live_pitch_step2_lo","k":"variable","len":1,"c":true},{"a":196,"n":"music_v3_live_pitch_step2_hi","k":"variable","len":1,"c":true},{"a":197,"n":"music_v3_live_pitch_step3_lo","k":"variable","len":1,"c":true},{"a":198,"n":"music_v3_live_pitch_step3_hi","k":"variable","len":1,"c":true},{"a":199,"n":"music_v3_live_pitch_step4_lo","k":"variable","len":1,"c":true},{"a":200,"n":"music_v3_live_pitch_step4_hi","k":"variable","len":1,"c":true},{"a":201,"n":"music_v3_live_pitch_ticks1","k":"variable","len":1,"c":true},{"a":202,"n":"music_v3_live_pitch_ticks2","k":"variable","len":1,"c":true},{"a":203,"n":"music_v3_live_pitch_ticks3","k":"variable","len":1,"c":true},{"a":204,"n":"music_v3_live_pitch_ticks4","k":"variable","len":1,"c":true},{"a":205,"n":"music_v3_live_pitch_delay","k":"variable","len":1,"c":true},{"a":206,"n":"music_v3_live_pitch_mode","k":"variable","len":1,"c":true},{"a":207,"n":"music_v3_live_pulse_ticks1","k":"variable","len":1,"c":true},{"a":208,"n":"music_v3_live_pulse_ticks2","k":"variable","len":1,"c":true},{"a":209,"n":"music_v3_live_pulse_delay","k":"variable","len":1,"c":true},{"a":210,"n":"music_v3_live_pulse_mode","k":"variable","len":1,"c":true},{"a":211,"n":"music_v3_live_pulse_step1_lo","k":"variable","len":1,"c":true},{"a":212,"n":"music_v3_live_pulse_step1_hi","k":"variable","len":1,"c":true},{"a":213,"n":"music_v3_live_pulse_step2_lo","k":"variable","len":1,"c":true},{"a":214,"n":"music_v3_live_pulse_step2_hi","k":"variable","len":1,"c":true},{"a":215,"n":"music_v3_live_pulse_start_lo","k":"variable","len":1,"c":true},{"a":216,"n":"music_v3_live_pulse_start_hi","k":"variable","len":1,"c":true},{"a":217,"n":"music_v3_live_note_freq_lo","k":"variable","len":1,"c":true},{"a":218,"n":"music_v3_live_note_freq_hi","k":"variable","len":1,"c":true},{"a":219,"n":"music_v3_live_control","k":"variable","len":1,"c":true},{"a":220,"n":"music_v3_live_gate_time","k":"variable","len":1,"c":true},{"a":221,"n":"music_v3_live_release_time","k":"variable","len":1,"c":true},{"a":222,"n":"music_v3_live_pitch_left1","k":"variable","len":1,"c":true},{"a":223,"n":"music_v3_live_pitch_left2","k":"variable","len":1,"c":true},{"a":224,"n":"music_v3_live_pitch_left3","k":"variable","len":1,"c":true},{"a":225,"n":"music_v3_live_pitch_left4","k":"variable","len":1,"c":true},{"a":226,"n":"music_v3_live_pulse_left1","k":"variable","len":1,"c":true},{"a":227,"n":"music_v3_live_pulse_left2","k":"variable","len":1,"c":true},{"a":228,"n":"music_v1_return_lo_0","k":"variable","len":1,"c":true},{"a":229,"n":"music_v1_return_lo","k":"table","len":4,"c":true},{"a":233,"n":"music_v1_return_hi_0","k":"variable","len":1,"c":true},{"a":234,"n":"music_v1_return_hi","k":"table","len":4,"c":true},{"a":238,"n":"music_v1_loop_count_0","k":"variable","len":1,"c":true},{"a":239,"n":"music_v1_loop_counts","k":"table","len":4,"c":true},{"a":243,"n":"music_v2_return_lo_0","k":"variable","len":1,"c":true},{"a":244,"n":"music_v2_return_lo","k":"table","len":4,"c":true},{"a":248,"n":"music_v2_return_hi_0","k":"variable","len":1,"c":true},{"a":249,"n":"music_v2_return_hi","k":"table","len":7,"c":true},{"a":512,"n":"alien_x","k":"variable","len":1,"c":true},{"a":513,"n":"alien_x_frac","k":"variable","len":1,"c":true},{"a":514,"n":"alien_line","k":"variable","len":1,"c":true},{"a":515,"n":"alien_line_frac","k":"variable","len":1,"c":true},{"a":516,"n":"alien_dx","k":"variable","len":1,"c":true},{"a":517,"n":"alien_dx_frac","k":"variable","len":1,"c":true},{"a":518,"n":"alien_dy","k":"variable","len":1,"c":true},{"a":519,"n":"alien_dy_frac","k":"variable","len":1,"c":true},{"a":520,"n":"alien_move_mode","k":"variable","len":1,"c":true},{"a":521,"n":"alien_accel","k":"variable","len":1,"c":true},{"a":522,"n":"alien_pattern_lo","k":"variable","len":1,"c":true},{"a":523,"n":"alien_pattern_hi","k":"variable","len":1,"c":true},{"a":524,"n":"alien_pattern_rate","k":"variable","len":1,"c":true},{"a":525,"n":"alien_scenery_mode","k":"variable","len":1,"c":true},{"a":526,"n":"alien_fire_mode","k":"variable","len":1,"c":true},{"a":527,"n":"alien_fire_rate","k":"variable","len":1,"c":true},{"a":528,"n":"alien_colour","k":"variable","len":1,"c":true},{"a":529,"n":"alien_anim_mode","k":"variable","len":1,"c":true},{"a":530,"n":"alien_anim_arg","k":"variable","len":1,"c":true},{"a":531,"n":"alien_anim_lo","k":"variable","len":1,"c":true},{"a":532,"n":"alien_anim_hi","k":"variable","len":1,"c":true},{"a":533,"n":"alien_state","k":"variable","len":1,"c":true},{"a":534,"n":"alien_points","k":"variable","len":1,"c":true},{"a":535,"n":"alien_vx","k":"variable","len":1,"c":true},{"a":536,"n":"alien_vx_frac","k":"variable","len":1,"c":true},{"a":537,"n":"alien_vy","k":"variable","len":1,"c":true},{"a":538,"n":"alien_vy_frac","k":"variable","len":1,"c":true},{"a":539,"n":"alien_pattern_index","k":"variable","len":1,"c":true},{"a":540,"n":"alien_pattern_timer","k":"variable","len":1,"c":true},{"a":541,"n":"alien_box_left","k":"variable","len":1,"c":true},{"a":542,"n":"alien_box_right","k":"variable","len":1,"c":true},{"a":543,"n":"alien_box_top","k":"variable","len":1,"c":true},{"a":544,"n":"alien_box_bottom","k":"variable","len":1,"c":true},{"a":545,"n":"alien_fire_timer","k":"variable","len":1,"c":true},{"a":546,"n":"alien_fire_dir","k":"variable","len":1,"c":true},{"a":547,"n":"alien_anim_timer","k":"variable","len":1,"c":true},{"a":548,"n":"alien_frame","k":"variable","len":1,"c":true},{"a":549,"n":"alien_hit","k":"table","len":3,"c":true},{"a":552,"n":"alien_list_lo","k":"variable","len":1,"c":true},{"a":553,"n":"alien_list_hi","k":"table","len":30,"c":true},{"a":583,"n":"alien1_box_left","k":"variable","len":1,"c":true},{"a":584,"n":"alien1_box_right","k":"variable","len":1,"c":true},{"a":585,"n":"alien1_box_top","k":"variable","len":1,"c":true},{"a":586,"n":"alien1_box_bottom","k":"table","len":5,"c":true},{"a":591,"n":"alien1_hit","k":"table","len":34,"c":true},{"a":625,"n":"alien2_box_left","k":"variable","len":1,"c":true},{"a":626,"n":"alien2_box_right","k":"variable","len":1,"c":true},{"a":627,"n":"alien2_box_top","k":"variable","len":1,"c":true},{"a":628,"n":"alien2_box_bottom","k":"table","len":5,"c":true},{"a":633,"n":"alien2_hit","k":"table","len":34,"c":true},{"a":667,"n":"alien3_box_left","k":"variable","len":1,"c":true},{"a":668,"n":"alien3_box_right","k":"variable","len":1,"c":true},{"a":669,"n":"alien3_box_top","k":"variable","len":1,"c":true},{"a":670,"n":"alien3_box_bottom","k":"table","len":5,"c":true},{"a":675,"n":"alien3_hit","k":"table","len":34,"c":true},{"a":709,"n":"alien4_box_left","k":"variable","len":1,"c":true},{"a":710,"n":"alien4_box_right","k":"variable","len":1,"c":true},{"a":711,"n":"alien4_box_top","k":"variable","len":1,"c":true},{"a":712,"n":"alien4_box_bottom","k":"table","len":5,"c":true},{"a":717,"n":"alien4_hit","k":"table","len":34,"c":true},{"a":751,"n":"alien5_box_left","k":"variable","len":1,"c":true},{"a":752,"n":"alien5_box_right","k":"variable","len":1,"c":true},{"a":753,"n":"alien5_box_top","k":"variable","len":1,"c":true},{"a":754,"n":"alien5_box_bottom","k":"table","len":5,"c":true},{"a":759,"n":"alien5_hit","k":"table","len":9,"c":true},{"a":768,"n":"bullet_column","k":"variable","len":1,"c":true},{"a":769,"n":"bullet_row","k":"variable","len":1,"c":true},{"a":770,"n":"bullet_cell_x","k":"variable","len":1,"c":true},{"a":771,"n":"bullet_cell_y","k":"variable","len":1,"c":true},{"a":772,"n":"bullet_dx","k":"variable","len":1,"c":true},{"a":773,"n":"bullet_dy","k":"variable","len":1,"c":true},{"a":774,"n":"bullet_saved_char","k":"variable","len":1,"c":true},{"a":775,"n":"bullet_screen_hi","k":"variable","len":1,"c":true},{"a":776,"n":"bullet_screen_lo","k":"variable","len":1,"c":true},{"a":777,"n":"bullet_colour_page","k":"variable","len":1,"c":true},{"a":778,"n":"bullet_state","k":"variable","len":1,"c":true},{"a":779,"n":"bullet_colour_count","k":"table","len":64,"c":true},{"a":843,"n":"bullet_records_4_9","k":"table","len":94,"c":true},{"a":937,"n":"skip_operand_03a9","k":"table","len":63,"c":true},{"a":1000,"n":"copy_operand_03e8","k":"table","len":24,"c":true},{"a":1024,"n":"sfx_slot_voice","k":"variable","len":1,"c":true},{"a":1025,"n":"sfx_slot_priority","k":"variable","len":1,"c":true},{"a":1026,"n":"sfx_slot_time1","k":"variable","len":1,"c":true},{"a":1027,"n":"sfx_slot_time2","k":"variable","len":1,"c":true},{"a":1028,"n":"sfx_slot_control","k":"variable","len":1,"c":true},{"a":1029,"n":"sfx_slot_attack_decay","k":"variable","len":1,"c":true},{"a":1030,"n":"sfx_slot_started","k":"variable","len":1,"c":true},{"a":1031,"n":"sfx_slot_freq_lo","k":"variable","len":1,"c":true},{"a":1032,"n":"sfx_slot_freq_hi","k":"variable","len":1,"c":true},{"a":1033,"n":"sfx_slot_freq_step_lo","k":"variable","len":1,"c":true},{"a":1034,"n":"sfx_slot_freq_step_hi","k":"variable","len":1,"c":true},{"a":1035,"n":"sfx_slot_freq_up_frames","k":"variable","len":1,"c":true},{"a":1036,"n":"sfx_slot_freq_down_frames","k":"variable","len":1,"c":true},{"a":1037,"n":"sfx_slot_pulse_lo","k":"variable","len":1,"c":true},{"a":1038,"n":"sfx_slot_pulse_hi","k":"variable","len":1,"c":true},{"a":1039,"n":"sfx_slot_pulse_step_lo","k":"variable","len":1,"c":true},{"a":1040,"n":"sfx_slot_pulse_step_hi","k":"variable","len":1,"c":true},{"a":1041,"n":"sfx_slot_pulse_up_frames","k":"variable","len":1,"c":true},{"a":1042,"n":"sfx_slot_pulse_down_frames","k":"variable","len":1,"c":true},{"a":1043,"n":"sfx_slot_freq_dir","k":"variable","len":1,"c":true},{"a":1044,"n":"sfx_slot_freq_count","k":"variable","len":1,"c":true},{"a":1045,"n":"sfx_slot_pulse_dir","k":"variable","len":1,"c":true},{"a":1046,"n":"sfx_slot_pulse_count","k":"variable","len":1,"c":true},{"a":1047,"n":"sfx_slot_sustain_release","k":"table","len":11,"c":true},{"a":1058,"n":"sfx_slot2_time1","k":"variable","len":1,"c":true},{"a":1059,"n":"sfx_slot2_time2","k":"table","len":31,"c":true},{"a":1090,"n":"sfx_slot3_time1","k":"variable","len":1,"c":true},{"a":1091,"n":"sfx_slot3_time2","k":"table","len":29,"c":true},{"a":1120,"n":"map_row_lo","k":"table","len":16,"c":true},{"a":1136,"n":"map_row_hi","k":"table","len":16,"c":true},{"a":1152,"n":"shot_column","k":"variable","len":1,"c":true},{"a":1153,"n":"shot_row","k":"variable","len":1,"c":true},{"a":1154,"n":"shot_dx","k":"variable","len":1,"c":true},{"a":1155,"n":"shot_dy","k":"variable","len":1,"c":true},{"a":1156,"n":"shot_char","k":"variable","len":1,"c":true},{"a":1157,"n":"shot_colour","k":"variable","len":1,"c":true},{"a":1158,"n":"shot_saved_char","k":"variable","len":1,"c":true},{"a":1159,"n":"shot_screen_hi","k":"variable","len":1,"c":true},{"a":1160,"n":"shot_screen_lo","k":"variable","len":1,"c":true},{"a":1161,"n":"shot_colour_page","k":"variable","len":1,"c":true},{"a":1162,"n":"shot_second_char","k":"variable","len":1,"c":true},{"a":1163,"n":"shot_second_saved","k":"table","len":13,"c":true},{"a":1176,"n":"cat_shot_column","k":"variable","len":1,"c":true},{"a":1177,"n":"cat_shot_row","k":"variable","len":1,"c":true},{"a":1178,"n":"cat_shot_dx","k":"variable","len":1,"c":true},{"a":1179,"n":"cat_shot_dy","k":"variable","len":1,"c":true},{"a":1180,"n":"cat_shot_char","k":"variable","len":1,"c":true},{"a":1181,"n":"cat_shot_colour","k":"table","len":5,"c":true},{"a":1186,"n":"cat_shot_second_char","k":"table","len":64,"c":true},{"a":1250,"n":"shot_table_spare","k":"table","len":30,"c":true},{"a":1280,"n":"screen_row_lo","k":"table","len":25,"c":true},{"a":1305,"n":"screen_row_hi","k":"table","len":25,"c":true},{"a":1330,"n":"level_map","k":"table","len":96,"c":true},{"a":1426,"n":"level_map_row1","k":"table","len":23,"c":true},{"a":1449,"n":"skip_operand_05a9","k":"table","len":64,"c":true},{"a":1513,"n":"level_map_row1_end","k":"table","len":9,"c":true},{"a":1522,"n":"level_map_row2","k":"table","len":96,"c":true},{"a":1618,"n":"level_map_row3","k":"table","len":96,"c":true},{"a":1714,"n":"level_map_row4","k":"table","len":96,"c":true},{"a":1810,"n":"level_map_row5","k":"table","len":96,"c":true},{"a":1906,"n":"level_map_row6","k":"table","len":55,"c":true},{"a":1961,"n":"skip_operand_07a9","k":"table","len":41,"c":true},{"a":2002,"n":"level_map_row7","k":"table","len":46,"c":true},{"a":2048,"n":"level_map_row7_cols46_95","k":"table","len":50,"c":true},{"a":2098,"n":"level_map_row8","k":"table","len":96,"c":true},{"a":2194,"n":"level_map_row9","k":"table","len":96,"c":true},{"a":2290,"n":"level_map_row10","k":"table","len":96,"c":true},{"a":2386,"n":"level_map_row11","k":"table","len":96,"c":true},{"a":2482,"n":"level_map_row12","k":"table","len":96,"c":true},{"a":2578,"n":"level_map_row13","k":"table","len":96,"c":true},{"a":2674,"n":"level_map_row14","k":"table","len":96,"c":true},{"a":2770,"n":"level_map_row15","k":"table","len":96,"c":true},{"a":2866,"n":"map_glyphs_gap","k":"table","len":16,"c":true},{"a":2882,"n":"landscape_glyphs_3","k":"table","len":768,"c":true},{"a":3650,"n":"landscape_glyphs_2","k":"table","len":446,"c":true},{"a":4096,"n":"landscape_glyphs_2_part2","k":"table","len":322,"c":true},{"a":4418,"n":"landscape_glyphs_1","k":"table","len":768,"c":true},{"a":5186,"n":"landscape_glyphs_7","k":"table","len":768,"c":true},{"a":5954,"n":"landscape_glyphs_6","k":"table","len":768,"c":true},{"a":6722,"n":"landscape_glyphs_5","k":"table","len":768,"c":true},{"a":7490,"n":"landscape_glyphs_4","k":"table","len":768,"c":true},{"a":8258,"n":"landscape_glyphs_8","k":"table","len":768,"c":true},{"a":9026,"n":"landscape_glyphs_wizlab","k":"table","len":768,"c":true},{"a":9794,"n":"level_tiles_00_0a","k":"table","len":275,"c":true},{"a":10069,"n":"level_tiles_0b_20","k":"table","len":550,"c":true},{"a":10619,"n":"level_tiles_21_29","k":"table","len":225,"c":true},{"a":10844,"n":"level_tiles_2a_43","k":"table","len":650,"c":true},{"a":11494,"n":"level_tiles_44_5a","k":"table","len":575,"c":true},{"a":12069,"n":"level_tiles_5b_75","k":"table","len":675,"c":true},{"a":12744,"n":"level_tiles_76_95","k":"table","len":800,"c":true},{"a":13544,"n":"level_tiles_96_ac","k":"table","len":575,"c":true},{"a":14119,"n":"level_tiles_ad_b9","k":"table","len":325,"c":true},{"a":14444,"n":"level_tiles_ba_bf","k":"table","len":150,"c":true},{"a":14594,"n":"bonus_wave_script","k":"table","len":218,"c":true},{"a":14812,"n":"tbl_bonus_alien_templates","k":"variable","len":1,"c":true},{"a":14813,"n":"tbl_bonus_alien_templates_hi","k":"table","len":39,"c":true},{"a":14852,"n":"tbl_bonus_alien_00","k":"table","len":24,"c":true},{"a":14876,"n":"tbl_bonus_alien_01","k":"table","len":24,"c":true},{"a":14900,"n":"tbl_bonus_alien_02","k":"table","len":30,"c":true},{"a":14930,"n":"tbl_bonus_alien_03","k":"table","len":30,"c":true},{"a":14960,"n":"tbl_bonus_alien_04","k":"table","len":39,"c":true},{"a":14999,"n":"tbl_bonus_alien_05","k":"table","len":24,"c":true},{"a":15023,"n":"tbl_bonus_alien_06","k":"table","len":24,"c":true},{"a":15047,"n":"tbl_bonus_alien_07","k":"table","len":36,"c":true},{"a":15083,"n":"tbl_bonus_alien_08","k":"table","len":24,"c":true},{"a":15107,"n":"tbl_bonus_alien_09","k":"table","len":24,"c":true},{"a":15131,"n":"tbl_bonus_alien_11","k":"table","len":24,"c":true},{"a":15155,"n":"tbl_bonus_alien_12","k":"table","len":36,"c":true},{"a":15191,"n":"tbl_bonus_alien_13","k":"table","len":24,"c":true},{"a":15215,"n":"tbl_bonus_alien_14","k":"table","len":24,"c":true},{"a":15239,"n":"tbl_bonus_alien_15","k":"table","len":30,"c":true},{"a":15269,"n":"tbl_bonus_alien_16","k":"table","len":24,"c":true},{"a":15293,"n":"tbl_bonus_alien_17","k":"table","len":24,"c":true},{"a":15317,"n":"tbl_bonus_alien_18","k":"table","len":24,"c":true},{"a":15341,"n":"tbl_bonus_alien_19","k":"table","len":24,"c":true},{"a":15365,"n":"tbl_anim_ball_squash","k":"table","len":23,"c":true},{"a":15388,"n":"unused_anim_wizball_spin_fwd","k":"table","len":18,"c":true},{"a":15406,"n":"tbl_anim_dart","k":"table","len":13,"c":true},{"a":15419,"n":"tbl_anim_police_ship","k":"table","len":6,"c":true},{"a":15425,"n":"tbl_anim_arrowhead","k":"table","len":6,"c":true},{"a":15431,"n":"unused_anim_4c_4f","k":"table","len":6,"c":true},{"a":15437,"n":"tbl_anim_wizball_spin","k":"table","len":18,"c":true},{"a":15455,"n":"sfx_00_shot","k":"table","len":23,"c":true},{"a":15478,"n":"sfx_00_sustain_release","k":"variable","len":1,"c":true},{"a":15479,"n":"sfx_01_droplet_released","k":"table","len":24,"c":true},{"a":15503,"n":"sfx_02_pearl","k":"table","len":24,"c":true},{"a":15527,"n":"sfx_03_enter_tube","k":"table","len":24,"c":true},{"a":15551,"n":"sfx_04_cat_hit","k":"table","len":24,"c":true},{"a":15575,"n":"sfx_05_alien_destroyed","k":"table","len":24,"c":true},{"a":15599,"n":"sfx_06_alien_fires","k":"table","len":24,"c":true},{"a":15623,"n":"sfx_07_lvl_complete","k":"table","len":24,"c":true},{"a":15647,"n":"sfx_08_take_icon","k":"table","len":24,"c":true},{"a":15671,"n":"sfx_09_icon_lit","k":"table","len":24,"c":true},{"a":15695,"n":"sfx_record_unused_3d4f","k":"table","len":24,"c":true},{"a":15719,"n":"sfx_11_siren_fast","k":"table","len":24,"c":true},{"a":15743,"n":"sfx_12_siren_slow","k":"table","len":24,"c":true},{"a":15767,"n":"sfx_13_smart_bomb_or_bounce","k":"table","len":24,"c":true},{"a":15791,"n":"sfx_14_police_ship_destroyed","k":"table","len":24,"c":true},{"a":15815,"n":"sfx_15_cat","k":"table","len":24,"c":true},{"a":15839,"n":"sfx_16_shot_voice3","k":"table","len":23,"c":true},{"a":15862,"n":"sfx_16_sustain_release","k":"variable","len":1,"c":true},{"a":15863,"n":"sfx_17_extra_life","k":"table","len":24,"c":true},{"a":15887,"n":"sfx_18_shield_ending","k":"table","len":24,"c":true},{"a":15911,"n":"sfx_19_cat_shield_ending","k":"table","len":24,"c":true},{"a":15935,"n":"sfx_20_wave_cleared","k":"table","len":24,"c":true},{"a":15959,"n":"sfx_21_death_1","k":"table","len":24,"c":true},{"a":15983,"n":"sfx_22_death_2","k":"table","len":24,"c":true},{"a":16007,"n":"sfx_23_death_3","k":"table","len":24,"c":true},{"a":16031,"n":"sfx_24_hum","k":"table","len":6,"c":true},{"a":16037,"n":"sfx_24_random_base","k":"table","len":18,"c":true},{"a":16055,"n":"sfx_25_lab_random","k":"table","len":24,"c":true},{"a":16079,"n":"tbl_land_alien_templates","k":"variable","len":1,"c":true},{"a":16080,"n":"tbl_land_alien_templates_hi","k":"table","len":21,"c":true},{"a":16101,"n":"tbl_land_alien_templates_11_17","k":"table","len":14,"c":true},{"a":16115,"n":"tbl_land_alien_00","k":"table","len":24,"c":true},{"a":16139,"n":"tbl_land_alien_01","k":"table","len":27,"c":true},{"a":16166,"n":"tbl_land_alien_02","k":"table","len":24,"c":true},{"a":16190,"n":"tbl_land_alien_03","k":"table","len":24,"c":true},{"a":16214,"n":"tbl_land_alien_04","k":"table","len":24,"c":true},{"a":16238,"n":"tbl_land_alien_05","k":"table","len":36,"c":true},{"a":16274,"n":"tbl_land_alien_06","k":"table","len":24,"c":true},{"a":16298,"n":"tbl_land_alien_07","k":"table","len":24,"c":true},{"a":16322,"n":"tbl_land_alien_08","k":"table","len":24,"c":true},{"a":16346,"n":"tbl_land_alien_09","k":"table","len":24,"c":true},{"a":16370,"n":"tbl_land_alien_10","k":"table","len":14,"c":true},{"a":16384,"n":"tbl_alien_def_10_end","k":"table","len":10,"c":true},{"a":16394,"n":"tbl_alien_def_11","k":"table","len":27,"c":true},{"a":16421,"n":"tbl_alien_def_12","k":"table","len":36,"c":true},{"a":16457,"n":"tbl_alien_def_13","k":"table","len":24,"c":true},{"a":16481,"n":"tbl_alien_def_14","k":"table","len":24,"c":true},{"a":16505,"n":"tbl_alien_def_15","k":"table","len":24,"c":true},{"a":16529,"n":"tbl_alien_def_16","k":"table","len":36,"c":true},{"a":16565,"n":"tbl_alien_def_17","k":"table","len":27,"c":true},{"a":16592,"n":"tbl_alien_frames_40d0","k":"table","len":23,"c":true},{"a":16615,"n":"tbl_alien_frames_40e7","k":"table","len":6,"c":true},{"a":16621,"n":"tbl_alien_frames_40ed","k":"table","len":13,"c":true},{"a":16634,"n":"tbl_alien_frames_40fa","k":"table","len":6,"c":true},{"a":16640,"n":"tbl_alien_frames_4100","k":"table","len":21,"c":true},{"a":16661,"n":"tbl_move_script_4115","k":"variable","len":2,"c":true},{"a":16663,"n":"tbl_move_script_4117","k":"table","len":10,"c":true},{"a":16673,"n":"tbl_move_script_4121","k":"table","len":17,"c":true},{"a":16690,"n":"tbl_move_script_4132","k":"table","len":37,"c":true},{"a":16727,"n":"tbl_move_script_4157","k":"table","len":11,"c":true},{"a":16738,"n":"tbl_move_script_4162","k":"table","len":16,"c":true},{"a":16754,"n":"tbl_move_script_4172","k":"variable","len":2,"c":true},{"a":16756,"n":"tbl_move_script_4174","k":"table","len":12,"c":true},{"a":16768,"n":"tbl_move_script_4180","k":"table","len":5,"c":true},{"a":16773,"n":"tbl_move_script_4185","k":"table","len":9,"c":true},{"a":16782,"n":"tbl_move_script_418e","k":"table","len":11,"c":true},{"a":16793,"n":"tbl_wiztips_pages","k":"variable","len":1,"c":true},{"a":16794,"n":"tbl_wiztips_pages_1","k":"variable","len":1,"c":true},{"a":16795,"n":"tbl_wiztips_pages_2","k":"variable","len":1,"c":true},{"a":16796,"n":"tbl_wiztips_pages_3","k":"table","len":9,"c":true},{"a":16805,"n":"text_wiztips_1_heading","k":"table","len":15,"c":true},{"a":16820,"n":"text_wiztips_2_heading","k":"table","len":15,"c":true},{"a":16835,"n":"text_wiztips_3_heading","k":"table","len":17,"c":true},{"a":16852,"n":"text_wiztips_1_body","k":"table","len":216,"c":true},{"a":17068,"n":"text_wiztips_2_body","k":"table","len":267,"c":true},{"a":17335,"n":"text_wiztips_3_body","k":"table","len":412,"c":true},{"a":17747,"n":"start_sound_effect","k":"routine","len":106,"c":true},{"a":17755,"n":"b_455B","k":"branch","len":1,"c":false},{"a":17766,"n":"b_4566","k":"branch","len":1,"c":false},{"a":17789,"n":"b_457D","k":"branch","len":1,"c":false},{"a":17834,"n":"b_45AA","k":"branch","len":1,"c":false},{"a":17837,"n":"b_45AD","k":"branch","len":1,"c":false},{"a":17839,"n":"b_45AF","k":"branch","len":1,"c":false},{"a":17853,"n":"check_music_end","k":"routine","len":17,"c":true},{"a":17869,"n":"r_45CD","k":"branch","len":1,"c":false},{"a":17870,"n":"music_fade","k":"variable","len":1,"c":true},{"a":17871,"n":"music_volume","k":"variable","len":1,"c":true},{"a":17872,"n":"step_music_fade","k":"routine","len":33,"c":true},{"a":17888,"n":"b_45E0","k":"branch","len":1,"c":false},{"a":17899,"n":"b_45EB","k":"branch","len":1,"c":false},{"a":17904,"n":"r_45F0","k":"branch","len":1,"c":false},{"a":17905,"n":"start_tune","k":"routine","len":14,"c":true},{"a":17913,"n":"b_45F9","k":"branch","len":1,"c":false},{"a":17919,"n":"music_pad_45ff","k":"variable","len":1,"c":true},{"a":17920,"n":"music_cmds_voice1","k":"table","len":42,"c":true},{"a":17962,"n":"music_cmds_voice2","k":"table","len":30,"c":true},{"a":17992,"n":"music_cmds_voice2_de_e2","k":"table","len":6,"c":true},{"a":17998,"n":"music_cmds_voice2_e4","k":"variable","len":2,"c":true},{"a":18000,"n":"music_cmds_voice2_e6","k":"variable","len":2,"c":true},{"a":18002,"n":"music_cmds_voice2_e8","k":"variable","len":2,"c":true},{"a":18004,"n":"music_cmds_voice3","k":"table","len":8,"c":true},{"a":18012,"n":"music_cmds_voice3_c8","k":"variable","len":2,"c":true},{"a":18014,"n":"music_cmds_voice3_ca_e2","k":"table","len":26,"c":true},{"a":18040,"n":"music_cmds_voice3_e4_e6","k":"table","len":4,"c":true},{"a":18044,"n":"music_cmds_voice3_e8_ea","k":"table","len":4,"c":true},{"a":18048,"n":"music_v2_inst_pitch_step1_lo","k":"variable","len":1,"c":true},{"a":18049,"n":"music_v2_inst_pitch_step1_hi","k":"variable","len":1,"c":true},{"a":18050,"n":"music_v2_inst_pitch_step2_lo","k":"variable","len":1,"c":true},{"a":18051,"n":"music_v2_inst_pitch_step2_hi","k":"variable","len":1,"c":true},{"a":18052,"n":"music_v2_inst_pitch_step3_lo","k":"variable","len":1,"c":true},{"a":18053,"n":"music_v2_inst_pitch_step3_hi","k":"variable","len":1,"c":true},{"a":18054,"n":"music_v2_inst_pitch_step4_lo","k":"variable","len":1,"c":true},{"a":18055,"n":"music_v2_inst_pitch_step4_hi","k":"variable","len":1,"c":true},{"a":18056,"n":"music_v2_inst_pitch_ticks1","k":"variable","len":1,"c":true},{"a":18057,"n":"music_v2_inst_pitch_ticks2","k":"variable","len":1,"c":true},{"a":18058,"n":"music_v2_inst_pitch_ticks3","k":"variable","len":1,"c":true},{"a":18059,"n":"music_v2_inst_pitch_ticks4","k":"variable","len":1,"c":true},{"a":18060,"n":"music_v2_inst_pitch_delay","k":"variable","len":1,"c":true},{"a":18061,"n":"music_v2_inst_pitch_mode","k":"variable","len":1,"c":true},{"a":18062,"n":"music_v2_inst_pulse_ticks1","k":"variable","len":1,"c":true},{"a":18063,"n":"music_v2_inst_pulse_ticks2","k":"variable","len":1,"c":true},{"a":18064,"n":"music_v2_inst_pulse_delay","k":"variable","len":1,"c":true},{"a":18065,"n":"music_v2_inst_pulse_mode","k":"variable","len":1,"c":true},{"a":18066,"n":"music_v2_inst_pulse_step1_lo","k":"variable","len":1,"c":true},{"a":18067,"n":"music_v2_inst_pulse_step1_hi","k":"variable","len":1,"c":true},{"a":18068,"n":"music_v2_inst_pulse_step2_lo","k":"variable","len":1,"c":true},{"a":18069,"n":"music_v2_inst_pulse_step2_hi","k":"variable","len":1,"c":true},{"a":18070,"n":"music_v2_inst_pulse_width_lo","k":"variable","len":1,"c":true},{"a":18071,"n":"music_v2_inst_pulse_width_hi","k":"variable","len":1,"c":true},{"a":18072,"n":"music_v2_inst_control","k":"variable","len":1,"c":true},{"a":18073,"n":"music_v2_inst_attack_decay","k":"variable","len":1,"c":true},{"a":18074,"n":"music_v2_inst_sustain_release","k":"variable","len":1,"c":true},{"a":18075,"n":"music_v2_inst_gate_time","k":"variable","len":1,"c":true},{"a":18076,"n":"music_v2_inst_release_time","k":"variable","len":1,"c":true},{"a":18077,"n":"music_v1_live_pitch_step1_lo","k":"variable","len":1,"c":true},{"a":18078,"n":"music_v1_live_pitch_step1_hi","k":"variable","len":1,"c":true},{"a":18079,"n":"music_v1_live_pitch_step2_lo","k":"variable","len":1,"c":true},{"a":18080,"n":"music_v1_live_pitch_step2_hi","k":"variable","len":1,"c":true},{"a":18081,"n":"music_v1_live_pitch_step3_lo","k":"variable","len":1,"c":true},{"a":18082,"n":"music_v1_live_pitch_step3_hi","k":"variable","len":1,"c":true},{"a":18083,"n":"music_v1_live_pitch_step4_lo","k":"variable","len":1,"c":true},{"a":18084,"n":"music_v1_live_pitch_step4_hi","k":"variable","len":1,"c":true},{"a":18085,"n":"music_v1_live_pitch_ticks1","k":"variable","len":1,"c":true},{"a":18086,"n":"music_v1_live_pitch_ticks2","k":"variable","len":1,"c":true},{"a":18087,"n":"music_v1_live_pitch_ticks3","k":"variable","len":1,"c":true},{"a":18088,"n":"music_v1_live_pitch_ticks4","k":"variable","len":1,"c":true},{"a":18089,"n":"music_v1_live_pitch_delay","k":"variable","len":1,"c":true},{"a":18090,"n":"music_v1_live_pitch_mode","k":"variable","len":1,"c":true},{"a":18091,"n":"music_v1_live_pulse_ticks1","k":"variable","len":1,"c":true},{"a":18092,"n":"music_v1_live_pulse_ticks2","k":"variable","len":1,"c":true},{"a":18093,"n":"music_v1_live_pulse_delay","k":"variable","len":1,"c":true},{"a":18094,"n":"music_v1_live_pulse_mode","k":"variable","len":1,"c":true},{"a":18095,"n":"music_v1_live_pulse_step1_lo","k":"variable","len":1,"c":true},{"a":18096,"n":"music_v1_live_pulse_step1_hi","k":"variable","len":1,"c":true},{"a":18097,"n":"music_v1_live_pulse_step2_lo","k":"variable","len":1,"c":true},{"a":18098,"n":"music_v1_live_pulse_step2_hi","k":"variable","len":1,"c":true},{"a":18099,"n":"music_v1_live_pulse_start_lo","k":"variable","len":1,"c":true},{"a":18100,"n":"music_v1_live_pulse_start_hi","k":"variable","len":1,"c":true},{"a":18101,"n":"music_v1_live_note_freq_lo","k":"variable","len":1,"c":true},{"a":18102,"n":"music_v1_live_note_freq_hi","k":"variable","len":1,"c":true},{"a":18103,"n":"music_v1_live_control","k":"variable","len":1,"c":true},{"a":18104,"n":"music_v1_live_gate_time","k":"variable","len":1,"c":true},{"a":18105,"n":"music_v1_live_release_time","k":"variable","len":1,"c":true},{"a":18106,"n":"music_v1_live_pitch_left1","k":"variable","len":1,"c":true},{"a":18107,"n":"music_v1_live_pitch_left2","k":"variable","len":1,"c":true},{"a":18108,"n":"music_v1_live_pitch_left3","k":"variable","len":1,"c":true},{"a":18109,"n":"music_v1_live_pitch_left4","k":"variable","len":1,"c":true},{"a":18110,"n":"music_v1_live_pulse_left1","k":"variable","len":1,"c":true},{"a":18111,"n":"music_v1_live_pulse_left2","k":"variable","len":1,"c":true},{"a":18112,"n":"music_v2_live_pitch_step1_lo","k":"variable","len":1,"c":true},{"a":18113,"n":"music_v2_live_pitch_step1_hi","k":"variable","len":1,"c":true},{"a":18114,"n":"music_v2_live_pitch_step2_lo","k":"variable","len":1,"c":true},{"a":18115,"n":"music_v2_live_pitch_step2_hi","k":"variable","len":1,"c":true},{"a":18116,"n":"music_v2_live_pitch_step3_lo","k":"variable","len":1,"c":true},{"a":18117,"n":"music_v2_live_pitch_step3_hi","k":"variable","len":1,"c":true},{"a":18118,"n":"music_v2_live_pitch_step4_lo","k":"variable","len":1,"c":true},{"a":18119,"n":"music_v2_live_pitch_step4_hi","k":"variable","len":1,"c":true},{"a":18120,"n":"music_v2_live_pitch_ticks1","k":"variable","len":1,"c":true},{"a":18121,"n":"music_v2_live_pitch_ticks2","k":"variable","len":1,"c":true},{"a":18122,"n":"music_v2_live_pitch_ticks3","k":"variable","len":1,"c":true},{"a":18123,"n":"music_v2_live_pitch_ticks4","k":"variable","len":1,"c":true},{"a":18124,"n":"music_v2_live_pitch_delay","k":"variable","len":1,"c":true},{"a":18125,"n":"music_v2_live_pitch_mode","k":"variable","len":1,"c":true},{"a":18126,"n":"music_v2_live_pulse_ticks1","k":"variable","len":1,"c":true},{"a":18127,"n":"music_v2_live_pulse_ticks2","k":"variable","len":1,"c":true},{"a":18128,"n":"music_v2_live_pulse_delay","k":"variable","len":1,"c":true},{"a":18129,"n":"music_v2_live_pulse_mode","k":"variable","len":1,"c":true},{"a":18130,"n":"music_v2_live_pulse_step1_lo","k":"variable","len":1,"c":true},{"a":18131,"n":"music_v2_live_pulse_step1_hi","k":"variable","len":1,"c":true},{"a":18132,"n":"music_v2_live_pulse_step2_lo","k":"variable","len":1,"c":true},{"a":18133,"n":"music_v2_live_pulse_step2_hi","k":"variable","len":1,"c":true},{"a":18134,"n":"music_v2_live_pulse_start_lo","k":"variable","len":1,"c":true},{"a":18135,"n":"music_v2_live_pulse_start_hi","k":"variable","len":1,"c":true},{"a":18136,"n":"music_v2_live_note_freq_lo","k":"variable","len":1,"c":true},{"a":18137,"n":"music_v2_live_note_freq_hi","k":"variable","len":1,"c":true},{"a":18138,"n":"music_v2_live_control","k":"variable","len":1,"c":true},{"a":18139,"n":"music_v2_live_gate_time","k":"variable","len":1,"c":true},{"a":18140,"n":"music_v2_live_release_time","k":"variable","len":1,"c":true},{"a":18141,"n":"music_v2_live_pitch_left1","k":"variable","len":1,"c":true},{"a":18142,"n":"music_v2_live_pitch_left2","k":"variable","len":1,"c":true},{"a":18143,"n":"music_v2_live_pitch_left3","k":"variable","len":1,"c":true},{"a":18144,"n":"music_v2_live_pitch_left4","k":"variable","len":1,"c":true},{"a":18145,"n":"music_v2_live_pulse_left1","k":"variable","len":1,"c":true},{"a":18146,"n":"music_v2_live_pulse_left2","k":"variable","len":1,"c":true},{"a":18147,"n":"music_durations","k":"table","len":32,"c":true},{"a":18179,"n":"music_v2_loop_count_0","k":"variable","len":1,"c":true},{"a":18180,"n":"music_v2_loop_counts","k":"table","len":4,"c":true},{"a":18184,"n":"music_v3_return_lo_0","k":"variable","len":1,"c":true},{"a":18185,"n":"music_v3_return_lo","k":"table","len":4,"c":true},{"a":18189,"n":"music_v3_return_hi_0","k":"variable","len":1,"c":true},{"a":18190,"n":"music_v3_return_hi","k":"table","len":4,"c":true},{"a":18194,"n":"music_v3_loop_count_0","k":"variable","len":1,"c":true},{"a":18195,"n":"music_v3_loop_counts","k":"table","len":4,"c":true},{"a":18199,"n":"tbl_music_mode_offsets","k":"table","len":3,"c":true},{"a":18202,"n":"note_freq_lo","k":"table","len":91,"c":true},{"a":18293,"n":"note_freq_hi","k":"table","len":91,"c":true},{"a":18384,"n":"reset_music","k":"routine","len":34,"c":true},{"a":18386,"n":"b_47D2","k":"branch","len":1,"c":false},{"a":18418,"n":"load_tune","k":"routine","len":66,"c":true},{"a":18433,"n":"b_4801","k":"branch","len":1,"c":false},{"a":18484,"n":"build_duration_table","k":"routine","len":4,"c":true},{"a":18487,"n":"b_4837","k":"branch","len":1,"c":false},{"a":18488,"n":"op_tempo","k":"routine","len":10,"c":true},{"a":18498,"n":"restart_v1_pulse","k":"routine","len":6,"c":true},{"a":18504,"n":"set_v1_pulse","k":"routine","len":17,"c":true},{"a":18521,"n":"restart_v2_pulse","k":"routine","len":6,"c":true},{"a":18527,"n":"set_v2_pulse","k":"routine","len":17,"c":true},{"a":18544,"n":"restart_v3_pulse","k":"routine","len":4,"c":true},{"a":18548,"n":"set_v3_pulse","k":"routine","len":13,"c":true},{"a":18561,"n":"restart_filter_sweep","k":"routine","len":8,"c":true},{"a":18569,"n":"reload_filter_counts","k":"routine","len":17,"c":true},{"a":18586,"n":"restart_v1_pitch","k":"routine","len":10,"c":true},{"a":18596,"n":"reload_v1_pitch_counts","k":"routine","len":25,"c":true},{"a":18621,"n":"restart_v2_pitch","k":"routine","len":10,"c":true},{"a":18631,"n":"reload_v2_pitch_counts","k":"routine","len":25,"c":true},{"a":18656,"n":"restart_v3_pitch","k":"routine","len":8,"c":true},{"a":18664,"n":"reload_v3_pitch_counts","k":"routine","len":17,"c":true},{"a":18681,"n":"v1_cmd_call_transposed","k":"routine","len":6,"c":true},{"a":18687,"n":"v1_cmd_call","k":"routine","len":30,"c":true},{"a":18717,"n":"v1_cmd_machine_code","k":"routine","len":18,"c":true},{"a":18735,"n":"v1_cmd_set_inst_word","k":"routine","len":16,"c":true},{"a":18751,"n":"v1_cmd_set_live_word","k":"routine","len":18,"c":true},{"a":18769,"n":"v1_cmd_filter_program","k":"routine","len":12,"c":true},{"a":18780,"n":"b_495C","k":"branch","len":1,"c":false},{"a":18781,"n":"op_v1_filter_src_lo","k":"routine","len":1,"c":true},{"a":18782,"n":"op_v1_filter_src_hi","k":"routine","len":9,"c":true},{"a":18791,"n":"v1_cmd_load_inst","k":"routine","len":14,"c":true},{"a":18804,"n":"b_4974","k":"branch","len":1,"c":false},{"a":18805,"n":"op_v1_inst_src_lo","k":"routine","len":1,"c":true},{"a":18806,"n":"op_v1_inst_src_hi","k":"routine","len":11,"c":true},{"a":18817,"n":"v1_cmd_loop_start","k":"routine","len":26,"c":true},{"a":18843,"n":"v1_cmd_load_pitch","k":"routine","len":12,"c":true},{"a":18854,"n":"b_49A6","k":"branch","len":1,"c":false},{"a":18855,"n":"op_v1_pitch_src_lo","k":"routine","len":1,"c":true},{"a":18856,"n":"op_v1_pitch_src_hi","k":"routine","len":9,"c":true},{"a":18865,"n":"v1_cmd_jump_transposed","k":"routine","len":3,"c":true},{"a":18868,"n":"v1_cmd_jump","k":"routine","len":13,"c":true},{"a":18881,"n":"v1_cmd_filter_off","k":"routine","len":25,"c":true},{"a":18889,"n":"b_49C9","k":"branch","len":1,"c":false},{"a":18906,"n":"v1_cmd_filter_on","k":"routine","len":4,"c":true},{"a":18910,"n":"v1_cmd_pitch_mode7","k":"routine","len":3,"c":true},{"a":18913,"n":"v1_cmd_pitch_mode5","k":"routine","len":8,"c":true},{"a":18921,"n":"v1_cmd_set_inst_byte","k":"routine","len":9,"c":true},{"a":18930,"n":"v1_cmd_loop_end","k":"routine","len":23,"c":true},{"a":18947,"n":"b_4A03","k":"branch","len":1,"c":false},{"a":18953,"n":"v1_cmd_return","k":"routine","len":23,"c":true},{"a":18973,"n":"b_4A1D","k":"branch","len":1,"c":false},{"a":18976,"n":"v1_cmd_set_live_byte","k":"routine","len":10,"c":true},{"a":18986,"n":"v1_cmd_transpose","k":"routine","len":7,"c":true},{"a":18993,"n":"v1_cmd_load_envelope","k":"routine","len":20,"c":true},{"a":19002,"n":"b_4A3A","k":"branch","len":1,"c":false},{"a":19013,"n":"v2_cmd_call_transposed","k":"routine","len":6,"c":true},{"a":19019,"n":"v2_cmd_call","k":"routine","len":30,"c":true},{"a":19049,"n":"v2_cmd_machine_code","k":"routine","len":18,"c":true},{"a":19067,"n":"v2_cmd_set_inst_word","k":"routine","len":18,"c":true},{"a":19085,"n":"v2_cmd_set_live_word","k":"routine","len":18,"c":true},{"a":19103,"n":"v2_cmd_load_inst","k":"routine","len":14,"c":true},{"a":19116,"n":"b_4AAC","k":"branch","len":1,"c":false},{"a":19117,"n":"op_v2_inst_src_lo","k":"routine","len":1,"c":true},{"a":19118,"n":"op_v2_inst_src_hi","k":"routine","len":12,"c":true},{"a":19130,"n":"v2_cmd_loop_start","k":"routine","len":27,"c":true},{"a":19157,"n":"v2_cmd_load_pitch","k":"routine","len":12,"c":true},{"a":19168,"n":"b_4AE0","k":"branch","len":1,"c":false},{"a":19169,"n":"op_v2_pitch_src_lo","k":"routine","len":1,"c":true},{"a":19170,"n":"op_v2_pitch_src_hi","k":"routine","len":10,"c":true},{"a":19180,"n":"v2_cmd_jump_transposed","k":"routine","len":3,"c":true},{"a":19183,"n":"v2_cmd_jump","k":"routine","len":13,"c":true},{"a":19196,"n":"v2_cmd_pitch_mode5","k":"routine","len":12,"c":true},{"a":19208,"n":"v2_cmd_set_inst_byte","k":"routine","len":10,"c":true},{"a":19218,"n":"v2_cmd_loop_end","k":"routine","len":24,"c":true},{"a":19236,"n":"b_4B24","k":"branch","len":1,"c":false},{"a":19242,"n":"v2_cmd_return","k":"routine","len":23,"c":true},{"a":19262,"n":"b_4B3E","k":"branch","len":1,"c":false},{"a":19265,"n":"v2_cmd_transpose","k":"routine","len":7,"c":true},{"a":19272,"n":"v2_cmd_set_live_byte","k":"routine","len":10,"c":true},{"a":19282,"n":"v2_cmd_load_envelope","k":"routine","len":20,"c":true},{"a":19291,"n":"b_4B5B","k":"branch","len":1,"c":false},{"a":19302,"n":"v3_cmd_call_transposed","k":"routine","len":6,"c":true},{"a":19308,"n":"v3_cmd_call","k":"routine","len":32,"c":true},{"a":19340,"n":"v3_cmd_machine_code","k":"routine","len":18,"c":true},{"a":19358,"n":"v3_cmd_set_inst_word","k":"routine","len":16,"c":true},{"a":19374,"n":"v3_cmd_set_live_word","k":"routine","len":16,"c":true},{"a":19390,"n":"v3_cmd_filter_program","k":"routine","len":12,"c":true},{"a":19401,"n":"b_4BC9","k":"branch","len":1,"c":false},{"a":19402,"n":"op_v3_filter_src_lo","k":"routine","len":1,"c":true},{"a":19403,"n":"op_v3_filter_src_hi","k":"routine","len":9,"c":true},{"a":19412,"n":"v3_cmd_load_inst","k":"routine","len":14,"c":true},{"a":19425,"n":"b_4BE1","k":"branch","len":1,"c":false},{"a":19426,"n":"op_v3_inst_src_lo","k":"routine","len":1,"c":true},{"a":19427,"n":"op_v3_inst_src_hi","k":"routine","len":11,"c":true},{"a":19438,"n":"v3_cmd_loop_start","k":"routine","len":29,"c":true},{"a":19467,"n":"v3_cmd_load_pitch","k":"routine","len":12,"c":true},{"a":19478,"n":"b_4C16","k":"branch","len":1,"c":false},{"a":19479,"n":"op_v3_pitch_src_lo","k":"routine","len":1,"c":true},{"a":19480,"n":"op_v3_pitch_src_hi","k":"routine","len":9,"c":true},{"a":19489,"n":"v3_cmd_jump","k":"routine","len":13,"c":true},{"a":19502,"n":"v3_cmd_filter_off","k":"routine","len":20,"c":true},{"a":19510,"n":"b_4C36","k":"branch","len":1,"c":false},{"a":19522,"n":"v3_cmd_filter_on","k":"routine","len":9,"c":true},{"a":19531,"n":"v3_cmd_set_inst_byte","k":"routine","len":9,"c":true},{"a":19540,"n":"v3_cmd_loop_end","k":"routine","len":26,"c":true},{"a":19560,"n":"b_4C68","k":"branch","len":1,"c":false},{"a":19566,"n":"v3_cmd_return","k":"routine","len":24,"c":true},{"a":19587,"n":"b_4C83","k":"branch","len":1,"c":false},{"a":19590,"n":"v3_cmd_set_live_byte","k":"routine","len":9,"c":true},{"a":19599,"n":"v3_cmd_tempo","k":"routine","len":13,"c":true},{"a":19612,"n":"v3_cmd_transpose","k":"routine","len":7,"c":true},{"a":19619,"n":"v3_cmd_load_envelope","k":"routine","len":20,"c":true},{"a":19628,"n":"b_4CAC","k":"branch","len":1,"c":false},{"a":19639,"n":"update_filter_sweep","k":"routine","len":89,"c":true},{"a":19660,"n":"r_4CCC","k":"branch","len":1,"c":false},{"a":19661,"n":"j_4CCD","k":"branch","len":1,"c":false},{"a":19662,"n":"b_4CCE","k":"branch","len":1,"c":false},{"a":19678,"n":"b_4CDE","k":"branch","len":1,"c":false},{"a":19694,"n":"b_4CEE","k":"branch","len":1,"c":false},{"a":19710,"n":"b_4CFE","k":"branch","len":1,"c":false},{"a":19716,"n":"b_4D04","k":"branch","len":1,"c":false},{"a":19723,"n":"j_4D0B","k":"branch","len":1,"c":false},{"a":19724,"n":"b_4D0C","k":"branch","len":1,"c":false},{"a":19728,"n":"write_filter_cutoff","k":"routine","len":43,"c":true},{"a":19751,"n":"b_4D27","k":"branch","len":1,"c":false},{"a":19765,"n":"b_4D35","k":"branch","len":1,"c":false},{"a":19771,"n":"start_filter_program","k":"routine","len":19,"c":true},{"a":19773,"n":"b_4D3D","k":"branch","len":1,"c":false},{"a":19790,"n":"v1_tick","k":"routine","len":13,"c":true},{"a":19798,"n":"r_4D56","k":"branch","len":1,"c":false},{"a":19799,"n":"b_4D57","k":"branch","len":1,"c":false},{"a":19803,"n":"v1_next_event","k":"routine","len":26,"c":true},{"a":19805,"n":"j_4D5D","k":"branch","len":1,"c":false},{"a":19812,"n":"j_4D64","k":"branch","len":1,"c":false},{"a":19829,"n":"op_v1_cmd_vector","k":"routine","len":5,"c":true},{"a":19831,"n":"b_4D77","k":"branch","len":1,"c":false},{"a":19834,"n":"v1_start_note","k":"routine","len":239,"c":true},{"a":19842,"n":"b_4D82","k":"branch","len":1,"c":false},{"a":19860,"n":"b_4D94","k":"branch","len":1,"c":false},{"a":19969,"n":"b_4E01","k":"branch","len":1,"c":false},{"a":20053,"n":"b_4E55","k":"branch","len":1,"c":false},{"a":20060,"n":"b_4E5C","k":"branch","len":1,"c":false},{"a":20063,"n":"b_4E5F","k":"branch","len":1,"c":false},{"a":20073,"n":"v1_set_duration","k":"routine","len":29,"c":true},{"a":20087,"n":"b_4E77","k":"branch","len":1,"c":false},{"a":20099,"n":"b_4E83","k":"branch","len":1,"c":false},{"a":20102,"n":"v2_tick","k":"routine","len":13,"c":true},{"a":20110,"n":"r_4E8E","k":"branch","len":1,"c":false},{"a":20111,"n":"b_4E8F","k":"branch","len":1,"c":false},{"a":20115,"n":"v2_next_event","k":"routine","len":26,"c":true},{"a":20117,"n":"j_4E95","k":"branch","len":1,"c":false},{"a":20124,"n":"j_4E9C","k":"branch","len":1,"c":false},{"a":20141,"n":"op_v2_cmd_vector","k":"routine","len":5,"c":true},{"a":20143,"n":"b_4EAF","k":"branch","len":1,"c":false},{"a":20146,"n":"v2_start_note","k":"routine","len":262,"c":true},{"a":20154,"n":"b_4EBA","k":"branch","len":1,"c":false},{"a":20288,"n":"b_4F40","k":"branch","len":1,"c":false},{"a":20386,"n":"b_4FA2","k":"branch","len":1,"c":false},{"a":20393,"n":"b_4FA9","k":"branch","len":1,"c":false},{"a":20396,"n":"b_4FAC","k":"branch","len":1,"c":false},{"a":20408,"n":"v2_set_duration","k":"routine","len":29,"c":true},{"a":20422,"n":"b_4FC6","k":"branch","len":1,"c":false},{"a":20434,"n":"b_4FD2","k":"branch","len":1,"c":false},{"a":20437,"n":"v3_tick","k":"routine","len":13,"c":true},{"a":20445,"n":"r_4FDD","k":"branch","len":1,"c":false},{"a":20446,"n":"b_4FDE","k":"branch","len":1,"c":false},{"a":20450,"n":"v3_next_event","k":"routine","len":26,"c":true},{"a":20452,"n":"j_4FE4","k":"branch","len":1,"c":false},{"a":20459,"n":"j_4FEB","k":"branch","len":1,"c":false},{"a":20476,"n":"op_v3_cmd_vector","k":"routine","len":5,"c":true},{"a":20478,"n":"b_4FFE","k":"branch","len":1,"c":false},{"a":20481,"n":"v3_start_note","k":"routine","len":214,"c":true},{"a":20489,"n":"b_5009","k":"branch","len":1,"c":false},{"a":20514,"n":"b_5022","k":"branch","len":1,"c":false},{"a":20608,"n":"b_5080","k":"branch","len":1,"c":false},{"a":20678,"n":"b_50C6","k":"branch","len":1,"c":false},{"a":20684,"n":"b_50CC","k":"branch","len":1,"c":false},{"a":20687,"n":"b_50CF","k":"branch","len":1,"c":false},{"a":20695,"n":"v3_set_duration","k":"routine","len":29,"c":true},{"a":20709,"n":"b_50E5","k":"branch","len":1,"c":false},{"a":20721,"n":"b_50F1","k":"branch","len":1,"c":false},{"a":20723,"n":"r_50F3","k":"branch","len":1,"c":false},{"a":20724,"n":"v1_shape_sound","k":"routine","len":85,"c":true},{"a":20758,"n":"b_5116","k":"branch","len":1,"c":false},{"a":20776,"n":"b_5128","k":"branch","len":1,"c":false},{"a":20782,"n":"j_512E","k":"branch","len":1,"c":false},{"a":20790,"n":"b_5136","k":"branch","len":1,"c":false},{"a":20806,"n":"b_5146","k":"branch","len":1,"c":false},{"a":20809,"n":"v1_pulse_sweep","k":"routine","len":94,"c":true},{"a":20825,"n":"b_5159","k":"branch","len":1,"c":false},{"a":20851,"n":"b_5173","k":"branch","len":1,"c":false},{"a":20872,"n":"b_5188","k":"branch","len":1,"c":false},{"a":20887,"n":"b_5197","k":"branch","len":1,"c":false},{"a":20893,"n":"j_519D","k":"branch","len":1,"c":false},{"a":20903,"n":"v1_pitch_effect","k":"routine","len":30,"c":true},{"a":20932,"n":"r_51C4","k":"branch","len":1,"c":false},{"a":20933,"n":"v1_arpeggio","k":"routine","len":53,"c":true},{"a":20952,"n":"b_51D8","k":"branch","len":1,"c":false},{"a":20986,"n":"v1_pitch_steps","k":"routine","len":111,"c":true},{"a":20987,"n":"b_51FB","k":"branch","len":1,"c":false},{"a":21007,"n":"b_520F","k":"branch","len":1,"c":false},{"a":21027,"n":"b_5223","k":"branch","len":1,"c":false},{"a":21047,"n":"b_5237","k":"branch","len":1,"c":false},{"a":21055,"n":"b_523F","k":"branch","len":1,"c":false},{"a":21064,"n":"j_5248","k":"branch","len":1,"c":false},{"a":21065,"n":"b_5249","k":"branch","len":1,"c":false},{"a":21075,"n":"r_5253","k":"branch","len":1,"c":false},{"a":21076,"n":"b_5254","k":"branch","len":1,"c":false},{"a":21091,"n":"b_5263","k":"branch","len":1,"c":false},{"a":21097,"n":"v2_shape_sound","k":"routine","len":78,"c":true},{"a":21131,"n":"b_528B","k":"branch","len":1,"c":false},{"a":21149,"n":"b_529D","k":"branch","len":1,"c":false},{"a":21156,"n":"b_52A4","k":"branch","len":1,"c":false},{"a":21172,"n":"b_52B4","k":"branch","len":1,"c":false},{"a":21175,"n":"v2_pulse_sweep","k":"routine","len":94,"c":true},{"a":21191,"n":"b_52C7","k":"branch","len":1,"c":false},{"a":21217,"n":"b_52E1","k":"branch","len":1,"c":false},{"a":21238,"n":"b_52F6","k":"branch","len":1,"c":false},{"a":21253,"n":"b_5305","k":"branch","len":1,"c":false},{"a":21259,"n":"j_530B","k":"branch","len":1,"c":false},{"a":21269,"n":"v2_pitch_effect","k":"routine","len":30,"c":true},{"a":21298,"n":"r_5332","k":"branch","len":1,"c":false},{"a":21299,"n":"v2_arpeggio","k":"routine","len":53,"c":true},{"a":21318,"n":"b_5346","k":"branch","len":1,"c":false},{"a":21352,"n":"v2_pitch_steps","k":"routine","len":111,"c":true},{"a":21353,"n":"b_5369","k":"branch","len":1,"c":false},{"a":21373,"n":"b_537D","k":"branch","len":1,"c":false},{"a":21393,"n":"b_5391","k":"branch","len":1,"c":false},{"a":21413,"n":"b_53A5","k":"branch","len":1,"c":false},{"a":21421,"n":"b_53AD","k":"branch","len":1,"c":false},{"a":21430,"n":"j_53B6","k":"branch","len":1,"c":false},{"a":21431,"n":"b_53B7","k":"branch","len":1,"c":false},{"a":21441,"n":"r_53C1","k":"branch","len":1,"c":false},{"a":21442,"n":"b_53C2","k":"branch","len":1,"c":false},{"a":21457,"n":"b_53D1","k":"branch","len":1,"c":false},{"a":21463,"n":"v3_shape_sound","k":"routine","len":70,"c":true},{"a":21491,"n":"b_53F3","k":"branch","len":1,"c":false},{"a":21506,"n":"b_5402","k":"branch","len":1,"c":false},{"a":21517,"n":"b_540D","k":"branch","len":1,"c":false},{"a":21530,"n":"b_541A","k":"branch","len":1,"c":false},{"a":21533,"n":"v3_pulse_sweep","k":"routine","len":82,"c":true},{"a":21546,"n":"b_542A","k":"branch","len":1,"c":false},{"a":21568,"n":"b_5440","k":"branch","len":1,"c":false},{"a":21585,"n":"b_5451","k":"branch","len":1,"c":false},{"a":21599,"n":"b_545F","k":"branch","len":1,"c":false},{"a":21605,"n":"j_5465","k":"branch","len":1,"c":false},{"a":21615,"n":"v3_pitch_effect","k":"routine","len":26,"c":true},{"a":21640,"n":"r_5488","k":"branch","len":1,"c":false},{"a":21641,"n":"v3_arpeggio","k":"routine","len":44,"c":true},{"a":21655,"n":"b_5497","k":"branch","len":1,"c":false},{"a":21685,"n":"v3_pitch_steps","k":"routine","len":94,"c":true},{"a":21686,"n":"b_54B6","k":"branch","len":1,"c":false},{"a":21702,"n":"b_54C6","k":"branch","len":1,"c":false},{"a":21718,"n":"b_54D6","k":"branch","len":1,"c":false},{"a":21734,"n":"b_54E6","k":"branch","len":1,"c":false},{"a":21740,"n":"b_54EC","k":"branch","len":1,"c":false},{"a":21747,"n":"j_54F3","k":"branch","len":1,"c":false},{"a":21748,"n":"b_54F4","k":"branch","len":1,"c":false},{"a":21759,"n":"b_54FF","k":"branch","len":1,"c":false},{"a":21773,"n":"b_550D","k":"branch","len":1,"c":false},{"a":21779,"n":"test_music_playing","k":"routine","len":15,"c":true},{"a":21794,"n":"test_music_voice3","k":"routine","len":3,"c":true},{"a":21797,"n":"tbl_tunes","k":"variable","len":1,"c":true},{"a":21798,"n":"tune_0_raid_alarm","k":"table","len":6,"c":true},{"a":21804,"n":"tune_1_bonus","k":"table","len":7,"c":true},{"a":21811,"n":"tune_2_colour_done","k":"table","len":7,"c":true},{"a":21818,"n":"tune_3_title","k":"table","len":7,"c":true},{"a":21825,"n":"tune_4_bonus_voice3","k":"table","len":7,"c":true},{"a":21832,"n":"tune_5_get_ready","k":"table","len":7,"c":true},{"a":21839,"n":"tune_6_high_score","k":"table","len":7,"c":true},{"a":21846,"n":"tune_7_game_over","k":"table","len":7,"c":true},{"a":21853,"n":"tune_8_wiz_lab","k":"table","len":7,"c":true},{"a":21860,"n":"music_instr_5564","k":"table","len":29,"c":true},{"a":21889,"n":"music_instr_5581","k":"table","len":24,"c":true},{"a":21913,"n":"music_env_5599","k":"table","len":5,"c":true},{"a":21918,"n":"music_pitch_559e","k":"table","len":14,"c":true},{"a":21932,"n":"music_env_55ac","k":"table","len":5,"c":true},{"a":21937,"n":"music_pitch_55b1","k":"table","len":14,"c":true},{"a":21951,"n":"music_env_55bf","k":"table","len":5,"c":true},{"a":21956,"n":"music_instr_55c4","k":"table","len":29,"c":true},{"a":21985,"n":"music_pat_55e1","k":"table","len":99,"c":true},{"a":22084,"n":"music_pat_5644","k":"table","len":19,"c":true},{"a":22103,"n":"tune_6_voice2","k":"table","len":292,"c":true},{"a":22395,"n":"music_instr_577b","k":"table","len":29,"c":true},{"a":22424,"n":"music_instr_5798","k":"table","len":29,"c":true},{"a":22453,"n":"music_arp_major","k":"table","len":6,"c":true},{"a":22459,"n":"music_arp_57bb","k":"table","len":6,"c":true},{"a":22465,"n":"music_arp_57c1","k":"table","len":6,"c":true},{"a":22471,"n":"music_arp_57c7","k":"table","len":6,"c":true},{"a":22477,"n":"music_arp_57cd","k":"table","len":6,"c":true},{"a":22483,"n":"music_pat_57d3","k":"table","len":12,"c":true},{"a":22495,"n":"tune_6_voice1","k":"variable","len":2,"c":true},{"a":22497,"n":"tune_6_voice1_loop","k":"table","len":114,"c":true},{"a":22611,"n":"music_filter_5853","k":"table","len":16,"c":true},{"a":22627,"n":"music_instr_5863","k":"table","len":29,"c":true},{"a":22656,"n":"music_pitch_5880","k":"table","len":14,"c":true},{"a":22670,"n":"music_instr_588e","k":"table","len":29,"c":true},{"a":22699,"n":"music_pat_58ab","k":"table","len":23,"c":true},{"a":22722,"n":"music_pat_58c2","k":"table","len":133,"c":true},{"a":22855,"n":"tune_6_voice3","k":"table","len":65,"c":true},{"a":22920,"n":"music_arp_5988","k":"table","len":16,"c":true},{"a":22936,"n":"music_instr_5998","k":"table","len":29,"c":true},{"a":22965,"n":"tune_2_voice3","k":"variable","len":2,"c":true},{"a":22967,"n":"tune_2_voice2","k":"variable","len":2,"c":true},{"a":22969,"n":"tune_2_voice1","k":"table","len":7,"c":true},{"a":22976,"n":"music_instr_59c0","k":"table","len":29,"c":true},{"a":23005,"n":"tune_5_voice1","k":"table","len":4,"c":true},{"a":23009,"n":"tune_5_body","k":"table","len":14,"c":true},{"a":23023,"n":"music_empty_track","k":"variable","len":1,"c":true},{"a":23024,"n":"tune_5_voice2","k":"variable","len":2,"c":true},{"a":23026,"n":"tune_5_voice3","k":"table","len":5,"c":true},{"a":23031,"n":"music_pat_59f7","k":"table","len":9,"c":true},{"a":23040,"n":"tune_7_voice1","k":"variable","len":2,"c":true},{"a":23042,"n":"tune_7_voice2","k":"table","len":9,"c":true},{"a":23051,"n":"music_pitch_5a0b","k":"table","len":14,"c":true},{"a":23065,"n":"music_pitch_5a19","k":"table","len":14,"c":true},{"a":23079,"n":"music_pitch_5a27","k":"table","len":14,"c":true},{"a":23093,"n":"tune_7_voice3","k":"table","len":6,"c":true},{"a":23099,"n":"tune_7_melody","k":"table","len":80,"c":true},{"a":23179,"n":"tune_8_voice3","k":"table","len":8,"c":true},{"a":23187,"n":"tune_8_voice2","k":"variable","len":2,"c":true},{"a":23189,"n":"tune_8_voice1","k":"table","len":13,"c":true},{"a":23202,"n":"music_instr_5aa2","k":"table","len":29,"c":true},{"a":23231,"n":"music_filter_5abf","k":"table","len":16,"c":true},{"a":23247,"n":"music_pat_5acf","k":"table","len":13,"c":true},{"a":23260,"n":"music_pat_5adc","k":"table","len":13,"c":true},{"a":23273,"n":"music_pat_5ae9","k":"table","len":13,"c":true},{"a":23286,"n":"music_pat_5af6","k":"table","len":9,"c":true},{"a":23295,"n":"music_code_filter_all","k":"routine","len":17,"c":true},{"a":23312,"n":"tune_1_voice3","k":"table","len":8,"c":true},{"a":23320,"n":"tune_1_voice2","k":"variable","len":2,"c":true},{"a":23322,"n":"tune_1_voice1","k":"table","len":4,"c":true},{"a":23326,"n":"tune_1_body","k":"table","len":98,"c":true},{"a":23424,"n":"music_instr_5b80","k":"table","len":29,"c":true},{"a":23453,"n":"music_filter_5b9d","k":"table","len":16,"c":true},{"a":23469,"n":"music_pitch_5bad","k":"table","len":14,"c":true},{"a":23483,"n":"music_pitch_5bbb","k":"table","len":14,"c":true},{"a":23497,"n":"music_pat_5bc9","k":"table","len":17,"c":true},{"a":23514,"n":"music_pat_5bda","k":"table","len":108,"c":true},{"a":23622,"n":"music_pat_5c46","k":"table","len":9,"c":true},{"a":23631,"n":"tune_4_voice3","k":"table","len":437,"c":true},{"a":24068,"n":"tune_0_voice3","k":"table","len":44,"c":true},{"a":24112,"n":"music_filter_5e30","k":"table","len":16,"c":true},{"a":24128,"n":"music_instr_5e40","k":"table","len":29,"c":true},{"a":24157,"n":"music_filter_5e5d","k":"table","len":16,"c":true},{"a":24173,"n":"music_pitch_5e6d","k":"table","len":14,"c":true},{"a":24187,"n":"music_arp_5e7b","k":"table","len":8,"c":true},{"a":24195,"n":"music_arp_5e83","k":"table","len":8,"c":true},{"a":24203,"n":"music_arp_5e8b","k":"table","len":8,"c":true},{"a":24211,"n":"music_pat_5e93","k":"table","len":25,"c":true},{"a":24236,"n":"music_pat_5eac","k":"table","len":23,"c":true},{"a":24259,"n":"music_filter_5ec3","k":"table","len":16,"c":true},{"a":24275,"n":"music_instr_5ed3","k":"table","len":29,"c":true},{"a":24304,"n":"music_pitch_5ef0","k":"table","len":14,"c":true},{"a":24318,"n":"music_env_5efe","k":"table","len":5,"c":true},{"a":24323,"n":"music_pitch_5f03","k":"table","len":14,"c":true},{"a":24337,"n":"music_instr_5f11","k":"table","len":29,"c":true},{"a":24366,"n":"music_code_filter_free","k":"routine","len":5,"c":true},{"a":24371,"n":"music_pat_5f33","k":"table","len":55,"c":true},{"a":24426,"n":"music_pat_5f6a","k":"table","len":150,"c":true},{"a":24576,"n":"tune_title_arpeggio_tail","k":"table","len":67,"c":true},{"a":24643,"n":"tune_title_voice1","k":"table","len":292,"c":true},{"a":24935,"n":"tune_title_instrument_a","k":"table","len":29,"c":true},{"a":24964,"n":"tune_unused_envelope_6184","k":"table","len":5,"c":true},{"a":24969,"n":"tune_title_voice2_tables","k":"table","len":64,"c":true},{"a":25033,"n":"tune_title_voice2","k":"table","len":133,"c":true},{"a":25166,"n":"tune_title_voice3_block_624e","k":"table","len":16,"c":true},{"a":25182,"n":"tune_title_instrument_b","k":"table","len":29,"c":true},{"a":25211,"n":"tune_title_instrument_c","k":"table","len":29,"c":true},{"a":25240,"n":"tune_title_voice3_tables","k":"table","len":64,"c":true},{"a":25304,"n":"tune_title_voice3","k":"table","len":176,"c":true},{"a":25480,"n":"unused_6388","k":"variable","len":1,"c":true},{"a":25481,"n":"entry","k":"routine","len":7,"c":true},{"a":25488,"n":"entry_padding","k":"variable","len":2,"c":true},{"a":25490,"n":"start_new_game","k":"routine","len":9,"c":true},{"a":25499,"n":"play_next_life","k":"routine","len":47,"c":true},{"a":25546,"n":"prepare_life","k":"routine","len":22,"c":true},{"a":25568,"n":"play_life","k":"routine","len":46,"c":true},{"a":25614,"n":"frame_loop","k":"routine","len":97,"c":true},{"a":25631,"n":"b_641F","k":"branch","len":1,"c":false},{"a":25642,"n":"b_642A","k":"branch","len":1,"c":false},{"a":25671,"n":"b_6447","k":"branch","len":1,"c":false},{"a":25711,"n":"colour_completed","k":"routine","len":263,"c":true},{"a":25807,"n":"dematerialise_loop","k":"branch","len":1,"c":false},{"a":25866,"n":"b_650A","k":"branch","len":1,"c":false},{"a":25968,"n":"b_6570","k":"branch","len":1,"c":false},{"a":25974,"n":"bonus_stage_loop","k":"routine","len":159,"c":true},{"a":25988,"n":"b_6584","k":"branch","len":1,"c":false},{"a":26010,"n":"b_659A","k":"branch","len":1,"c":false},{"a":26024,"n":"b_65A8","k":"branch","len":1,"c":false},{"a":26035,"n":"b_65B3","k":"branch","len":1,"c":false},{"a":26054,"n":"b_65C6","k":"branch","len":1,"c":false},{"a":26091,"n":"b_65EB","k":"branch","len":1,"c":false},{"a":26104,"n":"bonus_script_done","k":"branch","len":1,"c":false},{"a":26117,"n":"bonus_wait_message","k":"branch","len":1,"c":false},{"a":26125,"n":"b_660D","k":"branch","len":1,"c":false},{"a":26133,"n":"show_bonus_message","k":"routine","len":126,"c":true},{"a":26139,"n":"b_661B","k":"branch","len":1,"c":false},{"a":26168,"n":"b_6638","k":"branch","len":1,"c":false},{"a":26179,"n":"b_6643","k":"branch","len":1,"c":false},{"a":26184,"n":"b_6648","k":"branch","len":1,"c":false},{"a":26217,"n":"b_6669","k":"branch","len":1,"c":false},{"a":26232,"n":"b_6678","k":"branch","len":1,"c":false},{"a":26258,"n":"r_6692","k":"branch","len":1,"c":false},{"a":26259,"n":"tally_bonus_alien","k":"routine","len":86,"c":true},{"a":26320,"n":"b_66D0","k":"branch","len":1,"c":false},{"a":26344,"n":"r_66E8","k":"branch","len":1,"c":false},{"a":26345,"n":"reset_bonus_tally","k":"routine","len":19,"c":true},{"a":26364,"n":"draw_bonus_message","k":"routine","len":54,"c":true},{"a":26394,"n":"b_671A","k":"branch","len":1,"c":false},{"a":26401,"n":"b_6721","k":"branch","len":1,"c":false},{"a":26418,"n":"play_text_char_offset","k":"variable","len":1,"c":true},{"a":26419,"n":"bonus_message_state","k":"variable","len":1,"c":true},{"a":26420,"n":"bonus_message_timer","k":"variable","len":1,"c":true},{"a":26421,"n":"bonus_message_page","k":"variable","len":2,"c":true},{"a":26423,"n":"bonus_message_frame","k":"variable","len":1,"c":true},{"a":26424,"n":"bonus_message_colour","k":"variable","len":1,"c":true},{"a":26425,"n":"tbl_bonus_message_pages","k":"variable","len":1,"c":true},{"a":26426,"n":"f_673A","k":"table","len":9,"c":true},{"a":26435,"n":"copy_font_to_landscape_glyphs","k":"routine","len":18,"c":true},{"a":26437,"n":"b_6745","k":"branch","len":1,"c":false},{"a":26453,"n":"ramp_bonus_scroll_speed","k":"routine","len":51,"c":true},{"a":26479,"n":"r_676F","k":"branch","len":1,"c":false},{"a":26480,"n":"b_6770","k":"branch","len":1,"c":false},{"a":26500,"n":"b_6784","k":"branch","len":1,"c":false},{"a":26504,"n":"clear_landscape_colours","k":"routine","len":2,"c":true},{"a":26506,"n":"fill_landscape_colours","k":"routine","len":23,"c":true},{"a":26513,"n":"b_6791","k":"branch","len":1,"c":false},{"a":26529,"n":"cycle_hud_colours","k":"routine","len":124,"c":true},{"a":26542,"n":"b_67AE","k":"branch","len":1,"c":false},{"a":26568,"n":"b_67C8","k":"branch","len":1,"c":false},{"a":26590,"n":"b_67DE","k":"branch","len":1,"c":false},{"a":26599,"n":"b_67E7","k":"branch","len":1,"c":false},{"a":26613,"n":"b_67F5","k":"branch","len":1,"c":false},{"a":26635,"n":"b_680B","k":"branch","len":1,"c":false},{"a":26640,"n":"b_6810","k":"branch","len":1,"c":false},{"a":26653,"n":"wait_raster_middle","k":"routine","len":19,"c":true},{"a":26672,"n":"init_sides","k":"routine","len":99,"c":true},{"a":26682,"n":"b_683A","k":"branch","len":1,"c":false},{"a":26712,"n":"b_6858","k":"branch","len":1,"c":false},{"a":26731,"n":"b_686B","k":"branch","len":1,"c":false},{"a":26758,"n":"b_6886","k":"branch","len":1,"c":false},{"a":26771,"n":"get_ready_screen","k":"routine","len":234,"c":true},{"a":26818,"n":"b_68C2","k":"branch","len":1,"c":false},{"a":26868,"n":"b_68F4","k":"branch","len":1,"c":false},{"a":26908,"n":"get_ready_loop","k":"branch","len":1,"c":false},{"a":26955,"n":"b_694B","k":"branch","len":1,"c":false},{"a":26961,"n":"b_6951","k":"branch","len":1,"c":false},{"a":27005,"n":"route_joysticks","k":"routine","len":117,"c":true},{"a":27033,"n":"b_6999","k":"branch","len":1,"c":false},{"a":27046,"n":"b_69A6","k":"branch","len":1,"c":false},{"a":27061,"n":"b_69B5","k":"branch","len":1,"c":false},{"a":27080,"n":"b_69C8","k":"branch","len":1,"c":false},{"a":27085,"n":"j_69CD","k":"branch","len":1,"c":false},{"a":27098,"n":"b_69DA","k":"branch","len":1,"c":false},{"a":27122,"n":"show_game_over","k":"routine","len":215,"c":true},{"a":27133,"n":"b_69FD","k":"branch","len":1,"c":false},{"a":27209,"n":"b_6A49","k":"branch","len":1,"c":false},{"a":27251,"n":"b_6A73","k":"branch","len":1,"c":false},{"a":27284,"n":"game_over_wait_loop","k":"branch","len":1,"c":false},{"a":27302,"n":"b_6AA6","k":"branch","len":1,"c":false},{"a":27310,"n":"b_6AAE","k":"branch","len":1,"c":false},{"a":27318,"n":"b_6AB6","k":"branch","len":1,"c":false},{"a":27326,"n":"b_6ABE","k":"branch","len":1,"c":false},{"a":27337,"n":"text_game_over","k":"table","len":10,"c":true},{"a":27347,"n":"page_player_one","k":"variable","len":2,"c":true},{"a":27349,"n":"text_player_one","k":"table","len":13,"c":true},{"a":27362,"n":"page_team_one","k":"variable","len":2,"c":true},{"a":27364,"n":"text_team_one","k":"table","len":13,"c":true},{"a":27377,"n":"page_player_two","k":"variable","len":2,"c":true},{"a":27379,"n":"text_player_two","k":"table","len":13,"c":true},{"a":27392,"n":"page_team_two","k":"variable","len":2,"c":true},{"a":27394,"n":"text_team_two","k":"table","len":13,"c":true},{"a":27407,"n":"ptr_text_game_over","k":"variable","len":1,"c":true},{"a":27408,"n":"a_6B10","k":"variable","len":1,"c":true},{"a":27409,"n":"tbl_side_name_texts","k":"variable","len":1,"c":true},{"a":27410,"n":"f_6B12","k":"table","len":7,"c":true},{"a":27417,"n":"tbl_side_name_pages","k":"variable","len":1,"c":true},{"a":27418,"n":"f_6B1A","k":"table","len":7,"c":true},{"a":27425,"n":"hs_name_page","k":"variable","len":1,"c":true},{"a":27426,"n":"hs_side_digit","k":"variable","len":1,"c":true},{"a":27427,"n":"hs_result","k":"variable","len":1,"c":true},{"a":27428,"n":"name_field_column","k":"variable","len":1,"c":true},{"a":27429,"n":"name_field_row","k":"variable","len":1,"c":true},{"a":27430,"n":"name_field_length","k":"variable","len":1,"c":true},{"a":27431,"n":"end_life","k":"routine","len":107,"c":true},{"a":27476,"n":"r_6B54","k":"branch","len":1,"c":false},{"a":27477,"n":"b_6B55","k":"branch","len":1,"c":false},{"a":27483,"n":"end_game","k":"branch","len":1,"c":false},{"a":27523,"n":"b_6B83","k":"branch","len":1,"c":false},{"a":27535,"n":"back_to_title","k":"branch","len":1,"c":false},{"a":27538,"n":"enter_high_scores","k":"routine","len":105,"c":true},{"a":27616,"n":"b_6BE0","k":"branch","len":1,"c":false},{"a":27637,"n":"b_6BF5","k":"branch","len":1,"c":false},{"a":27643,"n":"enter_side_names","k":"routine","len":193,"c":true},{"a":27661,"n":"b_6C0D","k":"branch","len":1,"c":false},{"a":27696,"n":"b_6C30","k":"branch","len":1,"c":false},{"a":27723,"n":"b_6C4B","k":"branch","len":1,"c":false},{"a":27735,"n":"b_6C57","k":"branch","len":1,"c":false},{"a":27757,"n":"b_6C6D","k":"branch","len":1,"c":false},{"a":27780,"n":"b_6C84","k":"branch","len":1,"c":false},{"a":27789,"n":"j_6C8D","k":"branch","len":1,"c":false},{"a":27821,"n":"b_6CAD","k":"branch","len":1,"c":false},{"a":27830,"n":"b_6CB6","k":"branch","len":1,"c":false},{"a":27836,"n":"read_name_field","k":"routine","len":58,"c":true},{"a":27845,"n":"b_6CC5","k":"branch","len":1,"c":false},{"a":27883,"n":"b_6CEB","k":"branch","len":1,"c":false},{"a":27893,"n":"r_6CF5","k":"branch","len":1,"c":false},{"a":27894,"n":"clear_name_buffer","k":"routine","len":17,"c":true},{"a":27901,"n":"b_6CFD","k":"branch","len":1,"c":false},{"a":27911,"n":"edit_name_buffer","k":"routine","len":61,"c":true},{"a":27940,"n":"b_6D24","k":"branch","len":1,"c":false},{"a":27954,"n":"r_6D32","k":"branch","len":1,"c":false},{"a":27955,"n":"b_6D33","k":"branch","len":1,"c":false},{"a":27966,"n":"b_6D3E","k":"branch","len":1,"c":false},{"a":27972,"n":"draw_name_field","k":"routine","len":46,"c":true},{"a":28018,"n":"name_length","k":"variable","len":1,"c":true},{"a":28019,"n":"name_cursor","k":"variable","len":1,"c":true},{"a":28020,"n":"name_record","k":"variable","len":1,"c":true},{"a":28021,"n":"name_record_row","k":"variable","len":1,"c":true},{"a":28022,"n":"name_buffer","k":"variable","len":1,"c":true},{"a":28023,"n":"f_6D77","k":"table","len":11,"c":true},{"a":28034,"n":"name_blank_record","k":"variable","len":1,"c":true},{"a":28035,"n":"name_blank_row","k":"table","len":13,"c":true},{"a":28048,"n":"ptr_name_record","k":"variable","len":1,"c":true},{"a":28049,"n":"a_6D91","k":"variable","len":1,"c":true},{"a":28050,"n":"ptr_name_blank_record","k":"variable","len":1,"c":true},{"a":28051,"n":"a_6D93","k":"variable","len":1,"c":true},{"a":28052,"n":"tbl_key_to_petscii","k":"table","len":65,"c":true},{"a":28117,"n":"band_hs_line_2c","k":"routine","len":7,"c":true},{"a":28124,"n":"band_hs_line_4e","k":"routine","len":7,"c":true},{"a":28131,"n":"band_hs_line_8e","k":"routine","len":8,"c":true},{"a":28139,"n":"band_hs_line_a6","k":"routine","len":7,"c":true},{"a":28146,"n":"band_hs_line_b6","k":"routine","len":7,"c":true},{"a":28153,"n":"band_hs_line_cf","k":"routine","len":7,"c":true},{"a":28160,"n":"band_hs_line_e6","k":"routine","len":8,"c":true},{"a":28168,"n":"save_side1_state","k":"routine","len":12,"c":true},{"a":28170,"n":"b_6E0A","k":"branch","len":1,"c":false},{"a":28180,"n":"save_side2_state","k":"routine","len":12,"c":true},{"a":28182,"n":"b_6E16","k":"branch","len":1,"c":false},{"a":28192,"n":"load_side1_state","k":"routine","len":12,"c":true},{"a":28194,"n":"b_6E22","k":"branch","len":1,"c":false},{"a":28204,"n":"load_side2_state","k":"routine","len":12,"c":true},{"a":28206,"n":"b_6E2E","k":"branch","len":1,"c":false},{"a":28216,"n":"save_side_state","k":"routine","len":10,"c":true},{"a":28226,"n":"reset_life_and_load_side","k":"routine","len":13,"c":true},{"a":28239,"n":"reapply_permanent_features","k":"routine","len":34,"c":true},{"a":28251,"n":"b_6E5B","k":"branch","len":1,"c":false},{"a":28273,"n":"wait_raster_bottom","k":"routine","len":18,"c":true},{"a":28291,"n":"wait_raster_low","k":"routine","len":15,"c":true},{"a":28306,"n":"wait_line_266_and_move_stars","k":"routine","len":22,"c":true},{"a":28308,"n":"b_6E94","k":"branch","len":1,"c":false},{"a":28328,"n":"wait_raster_top","k":"routine","len":15,"c":true},{"a":28343,"n":"check_pause","k":"routine","len":45,"c":true},{"a":28354,"n":"r_6EC2","k":"branch","len":1,"c":false},{"a":28355,"n":"pause_loop","k":"branch","len":1,"c":false},{"a":28375,"n":"quit_to_title","k":"branch","len":1,"c":false},{"a":28388,"n":"unused_complete_level","k":"table","len":41,"c":true},{"a":28429,"n":"update_shots","k":"routine","len":20,"c":true},{"a":28431,"n":"b_6F0F","k":"branch","len":1,"c":false},{"a":28439,"n":"b_6F17","k":"branch","len":1,"c":false},{"a":28449,"n":"move_draw_shot","k":"routine","len":141,"c":true},{"a":28462,"n":"b_6F2E","k":"branch","len":1,"c":false},{"a":28465,"n":"b_6F31","k":"branch","len":1,"c":false},{"a":28493,"n":"b_6F4D","k":"branch","len":1,"c":false},{"a":28499,"n":"b_6F53","k":"branch","len":1,"c":false},{"a":28583,"n":"r_6FA7","k":"branch","len":1,"c":false},{"a":28584,"n":"b_6FA8","k":"branch","len":1,"c":false},{"a":28590,"n":"test_shot_hits_alien","k":"routine","len":16,"c":true},{"a":28606,"n":"test_point_hits_alien","k":"routine","len":210,"c":true},{"a":28641,"n":"b_6FE1","k":"branch","len":1,"c":false},{"a":28676,"n":"b_7004","k":"branch","len":1,"c":false},{"a":28711,"n":"b_7027","k":"branch","len":1,"c":false},{"a":28746,"n":"b_704A","k":"branch","len":1,"c":false},{"a":28781,"n":"b_706D","k":"branch","len":1,"c":false},{"a":28815,"n":"r_708F","k":"branch","len":1,"c":false},{"a":28816,"n":"erase_bullets","k":"routine","len":20,"c":true},{"a":28818,"n":"b_7092","k":"branch","len":1,"c":false},{"a":28826,"n":"b_709A","k":"branch","len":1,"c":false},{"a":28836,"n":"erase_bullet","k":"routine","len":47,"c":true},{"a":28882,"n":"r_70D2","k":"branch","len":1,"c":false},{"a":28883,"n":"reset_scores","k":"routine","len":25,"c":true},{"a":28887,"n":"b_70D7","k":"branch","len":1,"c":false},{"a":28895,"n":"b_70DF","k":"branch","len":1,"c":false},{"a":28908,"n":"draw_score_line","k":"routine","len":31,"c":true},{"a":28910,"n":"b_70EE","k":"branch","len":1,"c":false},{"a":28927,"n":"b_70FF","k":"branch","len":1,"c":false},{"a":28939,"n":"add_score","k":"routine","len":200,"c":true},{"a":28952,"n":"b_7118","k":"branch","len":1,"c":false},{"a":28964,"n":"b_7124","k":"branch","len":1,"c":false},{"a":28976,"n":"b_7130","k":"branch","len":1,"c":false},{"a":28985,"n":"b_7139","k":"branch","len":1,"c":false},{"a":29001,"n":"b_7149","k":"branch","len":1,"c":false},{"a":29018,"n":"b_715A","k":"branch","len":1,"c":false},{"a":29025,"n":"b_7161","k":"branch","len":1,"c":false},{"a":29033,"n":"b_7169","k":"branch","len":1,"c":false},{"a":29049,"n":"b_7179","k":"branch","len":1,"c":false},{"a":29057,"n":"b_7181","k":"branch","len":1,"c":false},{"a":29072,"n":"b_7190","k":"branch","len":1,"c":false},{"a":29074,"n":"b_7192","k":"branch","len":1,"c":false},{"a":29106,"n":"b_71B2","k":"branch","len":1,"c":false},{"a":29136,"n":"b_71D0","k":"branch","len":1,"c":false},{"a":29139,"n":"hiscore_base","k":"variable","len":1,"c":true},{"a":29140,"n":"hiscore_digits","k":"table","len":5,"c":true},{"a":29145,"n":"tbl_player_score_offset","k":"variable","len":2,"c":true},{"a":29147,"n":"tbl_player_score_column","k":"variable","len":2,"c":true},{"a":29149,"n":"tbl_player_counter_column","k":"variable","len":2,"c":true},{"a":29151,"n":"tbl_player_lives_column","k":"variable","len":2,"c":true},{"a":29153,"n":"text_score_header","k":"table","len":41,"c":true},{"a":29194,"n":"hiscore_beaten","k":"variable","len":1,"c":true},{"a":29195,"n":"init_turn_icons","k":"routine","len":47,"c":true},{"a":29197,"n":"b_720D","k":"branch","len":1,"c":false},{"a":29210,"n":"b_721A","k":"branch","len":1,"c":false},{"a":29242,"n":"wiggle_expect","k":"variable","len":1,"c":true},{"a":29243,"n":"wiggle_idle","k":"variable","len":1,"c":true},{"a":29244,"n":"wiggle_count","k":"variable","len":1,"c":true},{"a":29245,"n":"detect_wiggle","k":"routine","len":44,"c":true},{"a":29270,"n":"b_7256","k":"branch","len":1,"c":false},{"a":29288,"n":"r_7268","k":"branch","len":1,"c":false},{"a":29289,"n":"flash_lit_icon","k":"routine","len":65,"c":true},{"a":29298,"n":"b_7272","k":"branch","len":1,"c":false},{"a":29300,"n":"b_7274","k":"branch","len":1,"c":false},{"a":29329,"n":"b_7291","k":"branch","len":1,"c":false},{"a":29342,"n":"b_729E","k":"branch","len":1,"c":false},{"a":29353,"n":"r_72A9","k":"branch","len":1,"c":false},{"a":29354,"n":"update_icons","k":"routine","len":53,"c":true},{"a":29365,"n":"b_72B5","k":"branch","len":1,"c":false},{"a":29374,"n":"j_72BE","k":"branch","len":1,"c":false},{"a":29389,"n":"b_72CD","k":"branch","len":1,"c":false},{"a":29394,"n":"b_72D2","k":"branch","len":1,"c":false},{"a":29407,"n":"take_lit_icon","k":"routine","len":33,"c":true},{"a":29419,"n":"r_72EB","k":"branch","len":1,"c":false},{"a":29420,"n":"b_72EC","k":"branch","len":1,"c":false},{"a":29428,"n":"b_72F4","k":"branch","len":1,"c":false},{"a":29437,"n":"b_72FD","k":"branch","len":1,"c":false},{"a":29440,"n":"rng_table","k":"routine","len":23,"c":true},{"a":29463,"n":"icon_jump_lo","k":"routine","len":1,"c":true},{"a":29464,"n":"icon_jump_hi","k":"routine","len":1,"c":true},{"a":29465,"n":"icon_none","k":"variable","len":1,"c":true},{"a":29466,"n":"take_blazers","k":"routine","len":11,"c":true},{"a":29477,"n":"take_spray","k":"routine","len":38,"c":true},{"a":29493,"n":"b_7335","k":"branch","len":1,"c":false},{"a":29509,"n":"b_7345","k":"branch","len":1,"c":false},{"a":29515,"n":"take_beam_or_double","k":"routine","len":27,"c":true},{"a":29531,"n":"b_735B","k":"branch","len":1,"c":false},{"a":29542,"n":"take_catelite","k":"routine","len":19,"c":true},{"a":29561,"n":"take_thrust_or_antigrav","k":"routine","len":27,"c":true},{"a":29577,"n":"b_7389","k":"branch","len":1,"c":false},{"a":29588,"n":"take_smart_bomb","k":"routine","len":28,"c":true},{"a":29595,"n":"b_739B","k":"branch","len":1,"c":false},{"a":29616,"n":"take_shield","k":"routine","len":36,"c":true},{"a":29652,"n":"scan_keyboard","k":"routine","len":85,"c":true},{"a":29696,"n":"b_7400","k":"branch","len":1,"c":false},{"a":29706,"n":"b_740A","k":"branch","len":1,"c":false},{"a":29711,"n":"b_740F","k":"branch","len":1,"c":false},{"a":29733,"n":"b_7425","k":"branch","len":1,"c":false},{"a":29737,"n":"scan_keys_play","k":"routine","len":85,"c":true},{"a":29781,"n":"b_7455","k":"branch","len":1,"c":false},{"a":29791,"n":"b_745F","k":"branch","len":1,"c":false},{"a":29796,"n":"b_7464","k":"branch","len":1,"c":false},{"a":29818,"n":"b_747A","k":"branch","len":1,"c":false},{"a":29822,"n":"move_stars","k":"routine","len":34,"c":true},{"a":29832,"n":"b_7488","k":"branch","len":1,"c":false},{"a":29846,"n":"b_7496","k":"branch","len":1,"c":false},{"a":29856,"n":"move_star","k":"routine","len":146,"c":true},{"a":29905,"n":"b_74D1","k":"branch","len":1,"c":false},{"a":29908,"n":"b_74D4","k":"branch","len":1,"c":false},{"a":29934,"n":"b_74EE","k":"branch","len":1,"c":false},{"a":29959,"n":"b_7507","k":"branch","len":1,"c":false},{"a":29996,"n":"b_752C","k":"branch","len":1,"c":false},{"a":30002,"n":"rng_index","k":"variable","len":1,"c":true},{"a":30003,"n":"random","k":"routine","len":13,"c":true},{"a":30016,"n":"clear_sky_and_bullets","k":"routine","len":70,"c":true},{"a":30019,"n":"b_7543","k":"branch","len":1,"c":false},{"a":30035,"n":"b_7553","k":"branch","len":1,"c":false},{"a":30046,"n":"b_755E","k":"branch","len":1,"c":false},{"a":30076,"n":"b_757C","k":"branch","len":1,"c":false},{"a":30086,"n":"choose_start_column","k":"routine","len":89,"c":true},{"a":30118,"n":"b_75A6","k":"branch","len":1,"c":false},{"a":30128,"n":"b_75B0","k":"branch","len":1,"c":false},{"a":30138,"n":"b_75BA","k":"branch","len":1,"c":false},{"a":30152,"n":"b_75C8","k":"branch","len":1,"c":false},{"a":30160,"n":"b_75D0","k":"branch","len":1,"c":false},{"a":30175,"n":"draw_jump_blocks","k":"variable","len":1,"c":true},{"a":30176,"n":"start_landscape","k":"routine","len":10,"c":true},{"a":30186,"n":"draw_landscape","k":"routine","len":255,"c":true},{"a":30225,"n":"b_7611","k":"branch","len":1,"c":false},{"a":30256,"n":"b_7630","k":"branch","len":1,"c":false},{"a":30264,"n":"b_7638","k":"branch","len":1,"c":false},{"a":30286,"n":"b_764E","k":"branch","len":1,"c":false},{"a":30310,"n":"b_7666","k":"branch","len":1,"c":false},{"a":30319,"n":"b_766F","k":"branch","len":1,"c":false},{"a":30327,"n":"b_7677","k":"branch","len":1,"c":false},{"a":30330,"n":"b_767A","k":"branch","len":1,"c":false},{"a":30346,"n":"b_768A","k":"branch","len":1,"c":false},{"a":30382,"n":"b_76AE","k":"branch","len":1,"c":false},{"a":30387,"n":"b_76B3","k":"branch","len":1,"c":false},{"a":30423,"n":"b_76D7","k":"branch","len":1,"c":false},{"a":30429,"n":"j_76DD","k":"branch","len":1,"c":false},{"a":30433,"n":"b_76E1","k":"branch","len":1,"c":false},{"a":30441,"n":"tbl_wide_pixel","k":"variable","len":1,"c":true},{"a":30442,"n":"tbl_wide_pixel_mid","k":"variable","len":1,"c":true},{"a":30443,"n":"tbl_wide_pixel_right","k":"table","len":22,"c":true},{"a":30465,"n":"tbl_digit_flash_offset","k":"table","len":9,"c":true},{"a":30474,"n":"digit_flash_frame","k":"variable","len":1,"c":true},{"a":30475,"n":"digit_flash_step","k":"variable","len":1,"c":true},{"a":30476,"n":"digit_flash_offset","k":"variable","len":1,"c":true},{"a":30477,"n":"draw_level_digit_sprite","k":"routine","len":96,"c":true},{"a":30496,"n":"b_7720","k":"branch","len":1,"c":false},{"a":30504,"n":"b_7728","k":"branch","len":1,"c":false},{"a":30544,"n":"b_7750","k":"branch","len":1,"c":false},{"a":30573,"n":"setup_level_graphics","k":"routine","len":89,"c":true},{"a":30593,"n":"b_7781","k":"branch","len":1,"c":false},{"a":30633,"n":"b_77A9","k":"branch","len":1,"c":false},{"a":30645,"n":"b_77B5","k":"branch","len":1,"c":false},{"a":30662,"n":"copy_level_glyphs","k":"routine","len":49,"c":true},{"a":30687,"n":"b_77DF","k":"branch","len":1,"c":false},{"a":30701,"n":"b_77ED","k":"branch","len":1,"c":false},{"a":30711,"n":"build_scroll_buffer","k":"routine","len":132,"c":true},{"a":30713,"n":"b_77F9","k":"branch","len":1,"c":false},{"a":30724,"n":"b_7804","k":"branch","len":1,"c":false},{"a":30740,"n":"b_7814","k":"branch","len":1,"c":false},{"a":30796,"n":"b_784C","k":"branch","len":1,"c":false},{"a":30824,"n":"b_7868","k":"branch","len":1,"c":false},{"a":30838,"n":"b_7876","k":"branch","len":1,"c":false},{"a":30842,"n":"b_787A","k":"branch","len":1,"c":false},{"a":30843,"n":"shift_src1_lo","k":"routine","len":1,"c":true},{"a":30844,"n":"shift_src1_hi","k":"routine","len":2,"c":true},{"a":30846,"n":"shift_dst1_lo","k":"routine","len":1,"c":true},{"a":30847,"n":"shift_dst1_hi","k":"routine","len":2,"c":true},{"a":30849,"n":"shift_src2_lo","k":"routine","len":1,"c":true},{"a":30850,"n":"shift_src2_hi","k":"routine","len":2,"c":true},{"a":30852,"n":"shift_dst2_lo","k":"routine","len":1,"c":true},{"a":30853,"n":"shift_dst2_hi","k":"routine","len":41,"c":true},{"a":30863,"n":"b_788F","k":"branch","len":1,"c":false},{"a":30881,"n":"b_78A1","k":"branch","len":1,"c":false},{"a":30894,"n":"fetch_right_column","k":"routine","len":33,"c":true},{"a":30922,"n":"b_78CA","k":"branch","len":1,"c":false},{"a":30927,"n":"fetch_left_column","k":"routine","len":169,"c":true},{"a":30942,"n":"j_78DE","k":"branch","len":1,"c":false},{"a":30948,"n":"j_78E4","k":"branch","len":1,"c":false},{"a":30981,"n":"b_7905","k":"branch","len":1,"c":false},{"a":30990,"n":"b_790E","k":"branch","len":1,"c":false},{"a":31017,"n":"b_7929","k":"branch","len":1,"c":false},{"a":31039,"n":"b_793F","k":"branch","len":1,"c":false},{"a":31095,"n":"r_7977","k":"branch","len":1,"c":false},{"a":31096,"n":"sky_fill_next","k":"routine","len":17,"c":true},{"a":31113,"n":"sky_fill_previous","k":"routine","len":17,"c":true},{"a":31130,"n":"sky_fill_right","k":"routine","len":160,"c":true},{"a":31145,"n":"b_79A9","k":"branch","len":1,"c":false},{"a":31157,"n":"b_79B5","k":"branch","len":1,"c":false},{"a":31170,"n":"b_79C2","k":"branch","len":1,"c":false},{"a":31173,"n":"b_79C5","k":"branch","len":1,"c":false},{"a":31182,"n":"b_79CE","k":"branch","len":1,"c":false},{"a":31203,"n":"b_79E3","k":"branch","len":1,"c":false},{"a":31206,"n":"b_79E6","k":"branch","len":1,"c":false},{"a":31215,"n":"b_79EF","k":"branch","len":1,"c":false},{"a":31236,"n":"b_7A04","k":"branch","len":1,"c":false},{"a":31239,"n":"b_7A07","k":"branch","len":1,"c":false},{"a":31248,"n":"b_7A10","k":"branch","len":1,"c":false},{"a":31269,"n":"b_7A25","k":"branch","len":1,"c":false},{"a":31272,"n":"b_7A28","k":"branch","len":1,"c":false},{"a":31281,"n":"b_7A31","k":"branch","len":1,"c":false},{"a":31290,"n":"put_column_right","k":"routine","len":6,"c":true},{"a":31296,"n":"put_column_left","k":"routine","len":3,"c":true},{"a":31299,"n":"put_column","k":"routine","len":54,"c":true},{"a":31315,"n":"b_7A53","k":"branch","len":1,"c":false},{"a":31334,"n":"b_7A66","k":"branch","len":1,"c":false},{"a":31349,"n":"b_7A75","k":"branch","len":1,"c":false},{"a":31353,"n":"put_column_row3_lo","k":"routine","len":1,"c":true},{"a":31354,"n":"put_column_row3_hi","k":"routine","len":30,"c":true},{"a":31384,"n":"scroll_landscape","k":"routine","len":224,"c":true},{"a":31467,"n":"b_7AEB","k":"branch","len":1,"c":false},{"a":31504,"n":"b_7B10","k":"branch","len":1,"c":false},{"a":31530,"n":"b_7B2A","k":"branch","len":1,"c":false},{"a":31591,"n":"b_7B67","k":"branch","len":1,"c":false},{"a":31608,"n":"find_buffer_role","k":"routine","len":9,"c":true},{"a":31610,"n":"b_7B7A","k":"branch","len":1,"c":false},{"a":31617,"n":"opposite_direction","k":"routine","len":74,"c":true},{"a":31627,"n":"b_7B8B","k":"branch","len":1,"c":false},{"a":31671,"n":"b_7BB7","k":"branch","len":1,"c":false},{"a":31691,"n":"advance_scroll_position","k":"routine","len":82,"c":true},{"a":31717,"n":"b_7BE5","k":"branch","len":1,"c":false},{"a":31736,"n":"b_7BF8","k":"branch","len":1,"c":false},{"a":31754,"n":"b_7C0A","k":"branch","len":1,"c":false},{"a":31773,"n":"screen_address_at","k":"routine","len":52,"c":true},{"a":31824,"n":"r_7C50","k":"branch","len":1,"c":false},{"a":31825,"n":"clear_screen_tops","k":"routine","len":16,"c":true},{"a":31828,"n":"b_7C54","k":"branch","len":1,"c":false},{"a":31841,"n":"nmi_handler","k":"routine","len":18,"c":true},{"a":31859,"n":"irq_handler","k":"routine","len":43,"c":true},{"a":31901,"n":"b_7C9D","k":"branch","len":1,"c":false},{"a":31902,"n":"irq_band_lo","k":"routine","len":1,"c":true},{"a":31903,"n":"irq_band_hi","k":"routine","len":21,"c":true},{"a":31910,"n":"b_7CA6","k":"branch","len":1,"c":false},{"a":31924,"n":"install_display_list","k":"routine","len":38,"c":true},{"a":31962,"n":"reset_wizball_state","k":"routine","len":64,"c":true},{"a":31965,"n":"b_7CDD","k":"branch","len":1,"c":false},{"a":31976,"n":"b_7CE8","k":"branch","len":1,"c":false},{"a":32026,"n":"set_landscape_colours","k":"routine","len":68,"c":true},{"a":32038,"n":"b_7D26","k":"branch","len":1,"c":false},{"a":32057,"n":"b_7D39","k":"branch","len":1,"c":false},{"a":32087,"n":"b_7D57","k":"branch","len":1,"c":false},{"a":32094,"n":"draw_lives","k":"routine","len":22,"c":true},{"a":32106,"n":"b_7D6A","k":"branch","len":1,"c":false},{"a":32116,"n":"spawn_debris","k":"routine","len":68,"c":true},{"a":32118,"n":"b_7D76","k":"branch","len":1,"c":false},{"a":32184,"n":"start_death_sequence","k":"routine","len":34,"c":true},{"a":32218,"n":"continue_death_sequence","k":"routine","len":25,"c":true},{"a":32226,"n":"b_7DE2","k":"branch","len":1,"c":false},{"a":32234,"n":"b_7DEA","k":"branch","len":1,"c":false},{"a":32243,"n":"hum_count","k":"variable","len":1,"c":true},{"a":32244,"n":"update_wizball","k":"routine","len":111,"c":true},{"a":32260,"n":"b_7E04","k":"branch","len":1,"c":false},{"a":32265,"n":"b_7E09","k":"branch","len":1,"c":false},{"a":32273,"n":"b_7E11","k":"branch","len":1,"c":false},{"a":32286,"n":"b_7E1E","k":"branch","len":1,"c":false},{"a":32297,"n":"b_7E29","k":"branch","len":1,"c":false},{"a":32320,"n":"b_7E40","k":"branch","len":1,"c":false},{"a":32343,"n":"b_7E57","k":"branch","len":1,"c":false},{"a":32355,"n":"check_wizball_hits","k":"routine","len":53,"c":true},{"a":32403,"n":"r_7E93","k":"branch","len":1,"c":false},{"a":32404,"n":"b_7E94","k":"branch","len":1,"c":false},{"a":32408,"n":"test_wizball_point","k":"routine","len":13,"c":true},{"a":32416,"n":"b_7EA0","k":"branch","len":1,"c":false},{"a":32421,"n":"update_shield","k":"routine","len":97,"c":true},{"a":32444,"n":"b_7EBC","k":"branch","len":1,"c":false},{"a":32464,"n":"b_7ED0","k":"branch","len":1,"c":false},{"a":32479,"n":"b_7EDF","k":"branch","len":1,"c":false},{"a":32484,"n":"r_7EE4","k":"branch","len":1,"c":false},{"a":32485,"n":"b_7EE5","k":"branch","len":1,"c":false},{"a":32505,"n":"b_7EF9","k":"branch","len":1,"c":false},{"a":32511,"n":"b_7EFF","k":"branch","len":1,"c":false},{"a":32518,"n":"shield_time","k":"variable","len":1,"c":true},{"a":32519,"n":"shield_frames","k":"variable","len":1,"c":true},{"a":32520,"n":"shield_flicker","k":"variable","len":1,"c":true},{"a":32521,"n":"shield_warned","k":"variable","len":1,"c":true},{"a":32522,"n":"wizball_hit","k":"variable","len":1,"c":true},{"a":32523,"n":"slide_on_fixed_screen","k":"routine","len":50,"c":true},{"a":32529,"n":"b_7F11","k":"branch","len":1,"c":false},{"a":32557,"n":"r_7F2D","k":"branch","len":1,"c":false},{"a":32558,"n":"b_7F2E","k":"branch","len":1,"c":false},{"a":32572,"n":"r_7F3C","k":"branch","len":1,"c":false},{"a":32573,"n":"set_wizball_x","k":"routine","len":37,"c":true},{"a":32595,"n":"b_7F53","k":"branch","len":1,"c":false},{"a":32609,"n":"r_7F61","k":"branch","len":1,"c":false},{"a":32610,"n":"bounce_wizball","k":"routine","len":136,"c":true},{"a":32621,"n":"b_7F6D","k":"branch","len":1,"c":false},{"a":32641,"n":"b_7F81","k":"branch","len":1,"c":false},{"a":32665,"n":"b_7F99","k":"branch","len":1,"c":false},{"a":32680,"n":"r_7FA8","k":"branch","len":1,"c":false},{"a":32681,"n":"b_7FA9","k":"branch","len":1,"c":false},{"a":32696,"n":"b_7FB8","k":"branch","len":1,"c":false},{"a":32720,"n":"b_7FD0","k":"branch","len":1,"c":false},{"a":32745,"n":"r_7FE9","k":"branch","len":1,"c":false},{"a":32746,"n":"animate_materialise","k":"routine","len":22,"c":true},{"a":32757,"n":"b_7FF5","k":"branch","len":1,"c":false},{"a":32768,"n":"materialise_step_tail","k":"routine","len":64,"c":true},{"a":32790,"n":"b_8016","k":"branch","len":1,"c":false},{"a":32817,"n":"b_8031","k":"branch","len":1,"c":false},{"a":32832,"n":"init_wizball","k":"routine","len":87,"c":true},{"a":32897,"n":"b_8081","k":"branch","len":1,"c":false},{"a":32918,"n":"r_8096","k":"branch","len":1,"c":false},{"a":32919,"n":"place_wizball_sprite","k":"routine","len":97,"c":true},{"a":32936,"n":"b_80A8","k":"branch","len":1,"c":false},{"a":32950,"n":"b_80B6","k":"branch","len":1,"c":false},{"a":33015,"n":"r_80F7","k":"branch","len":1,"c":false},{"a":33016,"n":"read_spin_control","k":"routine","len":150,"c":true},{"a":33049,"n":"b_8119","k":"branch","len":1,"c":false},{"a":33052,"n":"b_811C","k":"branch","len":1,"c":false},{"a":33074,"n":"b_8132","k":"branch","len":1,"c":false},{"a":33080,"n":"b_8138","k":"branch","len":1,"c":false},{"a":33109,"n":"b_8155","k":"branch","len":1,"c":false},{"a":33117,"n":"b_815D","k":"branch","len":1,"c":false},{"a":33119,"n":"b_815F","k":"branch","len":1,"c":false},{"a":33139,"n":"b_8173","k":"branch","len":1,"c":false},{"a":33154,"n":"b_8182","k":"branch","len":1,"c":false},{"a":33166,"n":"spin_to_roll_speed","k":"routine","len":59,"c":true},{"a":33172,"n":"b_8194","k":"branch","len":1,"c":false},{"a":33192,"n":"b_81A8","k":"branch","len":1,"c":false},{"a":33219,"n":"b_81C3","k":"branch","len":1,"c":false},{"a":33225,"n":"enter_tube","k":"routine","len":77,"c":true},{"a":33243,"n":"b_81DB","k":"branch","len":1,"c":false},{"a":33271,"n":"b_81F7","k":"branch","len":1,"c":false},{"a":33302,"n":"sink_into_tube","k":"routine","len":35,"c":true},{"a":33304,"n":"b_8218","k":"branch","len":1,"c":false},{"a":33337,"n":"arrive_from_tube","k":"routine","len":208,"c":true},{"a":33505,"n":"b_82E1","k":"branch","len":1,"c":false},{"a":33545,"n":"leaving_flag_copy","k":"variable","len":1,"c":true},{"a":33546,"n":"lower_tube_sprites","k":"routine","len":42,"c":true},{"a":33548,"n":"b_830C","k":"branch","len":1,"c":false},{"a":33565,"n":"b_831D","k":"branch","len":1,"c":false},{"a":33588,"n":"raise_tube_sprites","k":"routine","len":58,"c":true},{"a":33590,"n":"b_8336","k":"branch","len":1,"c":false},{"a":33604,"n":"b_8344","k":"branch","len":1,"c":false},{"a":33645,"n":"r_836D","k":"branch","len":1,"c":false},{"a":33646,"n":"check_wizball_scenery","k":"routine","len":99,"c":true},{"a":33689,"n":"b_8399","k":"branch","len":1,"c":false},{"a":33692,"n":"b_839C","k":"branch","len":1,"c":false},{"a":33702,"n":"b_83A6","k":"branch","len":1,"c":false},{"a":33705,"n":"b_83A9","k":"branch","len":1,"c":false},{"a":33707,"n":"b_83AB","k":"branch","len":1,"c":false},{"a":33722,"n":"b_83BA","k":"branch","len":1,"c":false},{"a":33745,"n":"bounce_jsr1_lo","k":"routine","len":1,"c":true},{"a":33746,"n":"bounce_jsr1_hi","k":"routine","len":16,"c":true},{"a":33762,"n":"bounce_jsr2_lo","k":"routine","len":1,"c":true},{"a":33763,"n":"bounce_jsr2_hi","k":"routine","len":4,"c":true},{"a":33767,"n":"reverse_fall_antigrav","k":"routine","len":22,"c":true},{"a":33772,"n":"b_83EC","k":"branch","len":1,"c":false},{"a":33788,"n":"r_83FC","k":"branch","len":1,"c":false},{"a":33789,"n":"reverse_rise_antigrav","k":"routine","len":7,"c":true},{"a":33796,"n":"bounce_none","k":"routine","len":1,"c":true},{"a":33797,"n":"bounce_ceiling","k":"routine","len":21,"c":true},{"a":33818,"n":"bounce_floor","k":"routine","len":21,"c":true},{"a":33839,"n":"bounce_right_wall","k":"routine","len":15,"c":true},{"a":33844,"n":"b_8434","k":"branch","len":1,"c":false},{"a":33853,"n":"r_843D","k":"branch","len":1,"c":false},{"a":33854,"n":"bounce_left_wall","k":"routine","len":6,"c":true},{"a":33860,"n":"read_fire_press","k":"routine","len":35,"c":true},{"a":33879,"n":"b_8457","k":"branch","len":1,"c":false},{"a":33894,"n":"r_8466","k":"branch","len":1,"c":false},{"a":33895,"n":"fire_wiz_shot","k":"routine","len":152,"c":true},{"a":33901,"n":"b_846D","k":"branch","len":1,"c":false},{"a":33914,"n":"b_847A","k":"branch","len":1,"c":false},{"a":33938,"n":"b_8492","k":"branch","len":1,"c":false},{"a":33955,"n":"b_84A3","k":"branch","len":1,"c":false},{"a":33974,"n":"b_84B6","k":"branch","len":1,"c":false},{"a":33987,"n":"b_84C3","k":"branch","len":1,"c":false},{"a":33993,"n":"b_84C9","k":"branch","len":1,"c":false},{"a":34034,"n":"b_84F2","k":"branch","len":1,"c":false},{"a":34047,"n":"fire_wiz_spray","k":"routine","len":11,"c":true},{"a":34052,"n":"r_8504","k":"branch","len":1,"c":false},{"a":34053,"n":"b_8505","k":"branch","len":1,"c":false},{"a":34058,"n":"launch_spray_fan","k":"routine","len":78,"c":true},{"a":34060,"n":"b_850C","k":"branch","len":1,"c":false},{"a":34085,"n":"b_8525","k":"branch","len":1,"c":false},{"a":34136,"n":"fire_cat_spray","k":"routine","len":35,"c":true},{"a":34141,"n":"r_855D","k":"branch","len":1,"c":false},{"a":34142,"n":"b_855E","k":"branch","len":1,"c":false},{"a":34171,"n":"record_wizball_trail","k":"routine","len":23,"c":true},{"a":34194,"n":"animate_beam","k":"routine","len":96,"c":true},{"a":34200,"n":"b_8598","k":"branch","len":1,"c":false},{"a":34214,"n":"b_85A6","k":"branch","len":1,"c":false},{"a":34247,"n":"b_85C7","k":"branch","len":1,"c":false},{"a":34289,"n":"r_85F1","k":"branch","len":1,"c":false},{"a":34290,"n":"beam_hit_test","k":"routine","len":33,"c":true},{"a":34323,"n":"test_point_objects","k":"routine","len":6,"c":true},{"a":34329,"n":"mutant_cat_clock","k":"variable","len":1,"c":true},{"a":34330,"n":"mutant_cat","k":"variable","len":1,"c":true},{"a":34331,"n":"mutant_cat_input","k":"variable","len":1,"c":true},{"a":34332,"n":"drive_mutant_cat","k":"routine","len":36,"c":true},{"a":34357,"n":"b_8635","k":"branch","len":1,"c":false},{"a":34368,"n":"update_cat","k":"routine","len":18,"c":true},{"a":34386,"n":"update_cat_present","k":"routine","len":461,"c":true},{"a":34391,"n":"j_8657","k":"branch","len":1,"c":false},{"a":34413,"n":"b_866D","k":"branch","len":1,"c":false},{"a":34443,"n":"b_868B","k":"branch","len":1,"c":false},{"a":34448,"n":"b_8690","k":"branch","len":1,"c":false},{"a":34467,"n":"b_86A3","k":"branch","len":1,"c":false},{"a":34470,"n":"b_86A6","k":"branch","len":1,"c":false},{"a":34483,"n":"b_86B3","k":"branch","len":1,"c":false},{"a":34486,"n":"b_86B6","k":"branch","len":1,"c":false},{"a":34505,"n":"b_86C9","k":"branch","len":1,"c":false},{"a":34516,"n":"b_86D4","k":"branch","len":1,"c":false},{"a":34527,"n":"b_86DF","k":"branch","len":1,"c":false},{"a":34541,"n":"b_86ED","k":"branch","len":1,"c":false},{"a":34574,"n":"b_870E","k":"branch","len":1,"c":false},{"a":34580,"n":"b_8714","k":"branch","len":1,"c":false},{"a":34599,"n":"b_8727","k":"branch","len":1,"c":false},{"a":34609,"n":"b_8731","k":"branch","len":1,"c":false},{"a":34629,"n":"b_8745","k":"branch","len":1,"c":false},{"a":34635,"n":"b_874B","k":"branch","len":1,"c":false},{"a":34638,"n":"b_874E","k":"branch","len":1,"c":false},{"a":34676,"n":"b_8774","k":"branch","len":1,"c":false},{"a":34693,"n":"b_8785","k":"branch","len":1,"c":false},{"a":34705,"n":"b_8791","k":"branch","len":1,"c":false},{"a":34722,"n":"b_87A2","k":"branch","len":1,"c":false},{"a":34734,"n":"b_87AE","k":"branch","len":1,"c":false},{"a":34790,"n":"b_87E6","k":"branch","len":1,"c":false},{"a":34823,"n":"b_8807","k":"branch","len":1,"c":false},{"a":34846,"n":"r_881E","k":"branch","len":1,"c":false},{"a":34847,"n":"fire_cat_shot","k":"routine","len":150,"c":true},{"a":34860,"n":"b_882C","k":"branch","len":1,"c":false},{"a":34869,"n":"b_8835","k":"branch","len":1,"c":false},{"a":34905,"n":"b_8859","k":"branch","len":1,"c":false},{"a":34911,"n":"b_885F","k":"branch","len":1,"c":false},{"a":34928,"n":"b_8870","k":"branch","len":1,"c":false},{"a":34931,"n":"b_8873","k":"branch","len":1,"c":false},{"a":34972,"n":"b_889C","k":"branch","len":1,"c":false},{"a":34992,"n":"b_88B0","k":"branch","len":1,"c":false},{"a":34997,"n":"check_cat_objects","k":"routine","len":69,"c":true},{"a":35047,"n":"b_88E7","k":"branch","len":1,"c":false},{"a":35061,"n":"r_88F5","k":"branch","len":1,"c":false},{"a":35062,"n":"b_88F6","k":"branch","len":1,"c":false},{"a":35066,"n":"test_cat_point","k":"routine","len":8,"c":true},{"a":35074,"n":"apply_droplet_effect","k":"routine","len":75,"c":true},{"a":35093,"n":"b_8915","k":"branch","len":1,"c":false},{"a":35104,"n":"b_8920","k":"branch","len":1,"c":false},{"a":35110,"n":"b_8926","k":"branch","len":1,"c":false},{"a":35121,"n":"b_8931","k":"branch","len":1,"c":false},{"a":35137,"n":"j_8941","k":"branch","len":1,"c":false},{"a":35149,"n":"get_scenery_colour","k":"routine","len":12,"c":true},{"a":35158,"n":"b_8956","k":"branch","len":1,"c":false},{"a":35161,"n":"freaky_bits","k":"variable","len":1,"c":true},{"a":35162,"n":"freaky_flash_frames","k":"variable","len":1,"c":true},{"a":35163,"n":"update_cat_shield","k":"routine","len":91,"c":true},{"a":35186,"n":"b_8972","k":"branch","len":1,"c":false},{"a":35206,"n":"b_8986","k":"branch","len":1,"c":false},{"a":35218,"n":"b_8992","k":"branch","len":1,"c":false},{"a":35224,"n":"b_8998","k":"branch","len":1,"c":false},{"a":35247,"n":"b_89AF","k":"branch","len":1,"c":false},{"a":35253,"n":"r_89B5","k":"branch","len":1,"c":false},{"a":35254,"n":"cat_shield_time","k":"variable","len":1,"c":true},{"a":35255,"n":"cat_shield_frames","k":"variable","len":1,"c":true},{"a":35256,"n":"cat_shield_blink","k":"variable","len":1,"c":true},{"a":35257,"n":"cat_shield_warned","k":"variable","len":1,"c":true},{"a":35258,"n":"cat_hit","k":"variable","len":1,"c":true},{"a":35259,"n":"band_icon_bar","k":"routine","len":106,"c":true},{"a":35261,"n":"b_89BD","k":"branch","len":1,"c":false},{"a":35291,"n":"b_89DB","k":"branch","len":1,"c":false},{"a":35355,"n":"r_8A1B","k":"branch","len":1,"c":false},{"a":35356,"n":"b_8A1C","k":"branch","len":1,"c":false},{"a":35365,"n":"band_landscape","k":"routine","len":45,"c":true},{"a":35406,"n":"b_8A4E","k":"branch","len":1,"c":false},{"a":35410,"n":"band_play_sprites","k":"routine","len":62,"c":true},{"a":35472,"n":"beam_top_ptr_page","k":"routine","len":112,"c":true},{"a":35548,"n":"b_8ADC","k":"branch","len":1,"c":false},{"a":35550,"n":"b_8ADE","k":"branch","len":1,"c":false},{"a":35579,"n":"b_8AFB","k":"branch","len":1,"c":false},{"a":35584,"n":"sprite_ptrs_page","k":"routine","len":4,"c":true},{"a":35588,"n":"nmi_watchdog","k":"table","len":10,"c":true},{"a":35598,"n":"nmi_watchdog_rts","k":"routine","len":1,"c":true},{"a":35599,"n":"band_wizball","k":"routine","len":11,"c":true},{"a":35610,"n":"wizball_ptr_page","k":"routine","len":8,"c":true},{"a":35618,"n":"band_beam_bottom","k":"routine","len":28,"c":true},{"a":35632,"n":"b_8B30","k":"branch","len":1,"c":false},{"a":35646,"n":"beam_bottom_ptr_page","k":"routine","len":8,"c":true},{"a":35654,"n":"band_cauldron_panel","k":"routine","len":117,"c":true},{"a":35686,"n":"b_8B66","k":"branch","len":1,"c":false},{"a":35751,"n":"b_8BA7","k":"branch","len":1,"c":false},{"a":35771,"n":"band_open_border","k":"routine","len":15,"c":true},{"a":35786,"n":"stray_rts","k":"variable","len":1,"c":true},{"a":35787,"n":"band_below_landscape","k":"routine","len":31,"c":true},{"a":35811,"n":"b_8BE3","k":"branch","len":1,"c":false},{"a":35818,"n":"move_antigrav","k":"routine","len":90,"c":true},{"a":35860,"n":"b_8C14","k":"branch","len":1,"c":false},{"a":35879,"n":"b_8C27","k":"branch","len":1,"c":false},{"a":35897,"n":"b_8C39","k":"branch","len":1,"c":false},{"a":35908,"n":"screen_off","k":"routine","len":12,"c":true},{"a":35920,"n":"screen_on","k":"routine","len":14,"c":true},{"a":35934,"n":"fill_four_pages","k":"routine","len":17,"c":true},{"a":35940,"n":"b_8C64","k":"branch","len":1,"c":false},{"a":35951,"n":"fill_colour_ram","k":"routine","len":21,"c":true},{"a":35961,"n":"b_8C79","k":"branch","len":1,"c":false},{"a":35972,"n":"font_text_normal","k":"routine","len":9,"c":true},{"a":35981,"n":"font_text_inverted","k":"routine","len":40,"c":true},{"a":35990,"n":"b_8C96","k":"branch","len":1,"c":false},{"a":35992,"n":"b_8C98","k":"branch","len":1,"c":false},{"a":36003,"n":"b_8CA3","k":"branch","len":1,"c":false},{"a":36021,"n":"font_large_normal","k":"routine","len":9,"c":true},{"a":36030,"n":"font_large_inverted","k":"routine","len":36,"c":true},{"a":36039,"n":"b_8CC7","k":"branch","len":1,"c":false},{"a":36049,"n":"b_8CD1","k":"branch","len":1,"c":false},{"a":36066,"n":"dead_invert_loop","k":"table","len":11,"c":true},{"a":36077,"n":"store_large_font_polarity","k":"routine","len":7,"c":true},{"a":36084,"n":"print_page_large","k":"routine","len":6,"c":true},{"a":36090,"n":"print_page","k":"routine","len":72,"c":true},{"a":36094,"n":"b_8CFE","k":"branch","len":1,"c":false},{"a":36121,"n":"b_8D19","k":"branch","len":1,"c":false},{"a":36127,"n":"b_8D1F","k":"branch","len":1,"c":false},{"a":36136,"n":"b_8D28","k":"branch","len":1,"c":false},{"a":36150,"n":"b_8D36","k":"branch","len":1,"c":false},{"a":36162,"n":"print_record","k":"routine","len":41,"c":true},{"a":36187,"n":"b_8D5B","k":"branch","len":1,"c":false},{"a":36194,"n":"b_8D62","k":"branch","len":1,"c":false},{"a":36203,"n":"print_screen_page","k":"routine","len":35,"c":true},{"a":36216,"n":"j_8D78","k":"branch","len":1,"c":false},{"a":36224,"n":"b_8D80","k":"branch","len":1,"c":false},{"a":36229,"n":"b_8D85","k":"branch","len":1,"c":false},{"a":36238,"n":"print_char_offset","k":"routine","len":86,"c":true},{"a":36249,"n":"b_8D99","k":"branch","len":1,"c":false},{"a":36318,"n":"b_8DDE","k":"branch","len":1,"c":false},{"a":36319,"n":"b_8DDF","k":"branch","len":1,"c":false},{"a":36324,"n":"print_sprite_text","k":"routine","len":42,"c":true},{"a":36327,"n":"j_8DE7","k":"branch","len":1,"c":false},{"a":36339,"n":"b_8DF3","k":"branch","len":1,"c":false},{"a":36366,"n":"next_text_glyph","k":"routine","len":36,"c":true},{"a":36378,"n":"b_8E1A","k":"branch","len":1,"c":false},{"a":36402,"n":"print_sprite_text_large","k":"routine","len":39,"c":true},{"a":36405,"n":"j_8E35","k":"branch","len":1,"c":false},{"a":36417,"n":"b_8E41","k":"branch","len":1,"c":false},{"a":36441,"n":"next_large_glyph_quarter","k":"routine","len":83,"c":true},{"a":36453,"n":"b_8E65","k":"branch","len":1,"c":false},{"a":36486,"n":"b_8E86","k":"branch","len":1,"c":false},{"a":36507,"n":"b_8E9B","k":"branch","len":1,"c":false},{"a":36524,"n":"set_sprite_text_dest","k":"routine","len":47,"c":true},{"a":36566,"n":"b_8ED6","k":"branch","len":1,"c":false},{"a":36571,"n":"print_start_offset","k":"variable","len":1,"c":true},{"a":36572,"n":"advance_sprite_text_dest","k":"routine","len":57,"c":true},{"a":36587,"n":"b_8EEB","k":"branch","len":1,"c":false},{"a":36592,"n":"j_8EF0","k":"branch","len":1,"c":false},{"a":36620,"n":"b_8F0C","k":"branch","len":1,"c":false},{"a":36629,"n":"fill_sprite_blocks","k":"routine","len":44,"c":true},{"a":36647,"n":"b_8F27","k":"branch","len":1,"c":false},{"a":36651,"n":"b_8F2B","k":"branch","len":1,"c":false},{"a":36669,"n":"b_8F3D","k":"branch","len":1,"c":false},{"a":36673,"n":"setup_text_screen","k":"routine","len":32,"c":true},{"a":36705,"n":"start_attract","k":"routine","len":20,"c":true},{"a":36725,"n":"show_title_page","k":"routine","len":162,"c":true},{"a":36772,"n":"b_8FA4","k":"branch","len":1,"c":false},{"a":36846,"n":"b_8FEE","k":"branch","len":1,"c":false},{"a":36859,"n":"b_8FFB","k":"branch","len":1,"c":false},{"a":36870,"n":"b_9006","k":"branch","len":1,"c":false},{"a":36887,"n":"show_player_menu","k":"routine","len":166,"c":true},{"a":36951,"n":"b_9057","k":"branch","len":1,"c":false},{"a":36972,"n":"b_906C","k":"branch","len":1,"c":false},{"a":36994,"n":"b_9082","k":"branch","len":1,"c":false},{"a":37000,"n":"b_9088","k":"branch","len":1,"c":false},{"a":37026,"n":"b_90A2","k":"branch","len":1,"c":false},{"a":37053,"n":"update_starfield","k":"routine","len":77,"c":true},{"a":37055,"n":"b_90BF","k":"branch","len":1,"c":false},{"a":37091,"n":"b_90E3","k":"branch","len":1,"c":false},{"a":37112,"n":"b_90F8","k":"branch","len":1,"c":false},{"a":37126,"n":"b_9106","k":"branch","len":1,"c":false},{"a":37130,"n":"move_menu_star","k":"routine","len":85,"c":true},{"a":37151,"n":"b_911F","k":"branch","len":1,"c":false},{"a":37181,"n":"b_913D","k":"branch","len":1,"c":false},{"a":37201,"n":"b_9151","k":"branch","len":1,"c":false},{"a":37209,"n":"b_9159","k":"branch","len":1,"c":false},{"a":37215,"n":"place_stars_top","k":"routine","len":4,"c":true},{"a":37219,"n":"place_stars_bottom","k":"routine","len":120,"c":true},{"a":37221,"n":"b_9165","k":"branch","len":1,"c":false},{"a":37238,"n":"b_9176","k":"branch","len":1,"c":false},{"a":37257,"n":"b_9189","k":"branch","len":1,"c":false},{"a":37263,"n":"j_918F","k":"branch","len":1,"c":false},{"a":37280,"n":"b_91A0","k":"branch","len":1,"c":false},{"a":37283,"n":"j_91A3","k":"branch","len":1,"c":false},{"a":37309,"n":"b_91BD","k":"branch","len":1,"c":false},{"a":37338,"n":"r_91DA","k":"branch","len":1,"c":false},{"a":37339,"n":"move_menu_cursor","k":"routine","len":31,"c":true},{"a":37353,"n":"b_91E9","k":"branch","len":1,"c":false},{"a":37369,"n":"r_91F9","k":"branch","len":1,"c":false},{"a":37370,"n":"read_joystick_edge","k":"routine","len":27,"c":true},{"a":37393,"n":"b_9211","k":"branch","len":1,"c":false},{"a":37396,"n":"r_9214","k":"branch","len":1,"c":false},{"a":37397,"n":"set_screen_timer","k":"routine","len":9,"c":true},{"a":37406,"n":"tick_screen_timer","k":"routine","len":14,"c":true},{"a":37419,"n":"r_922B","k":"branch","len":1,"c":false},{"a":37420,"n":"band_title_logo","k":"routine","len":91,"c":true},{"a":37451,"n":"b_924B","k":"branch","len":1,"c":false},{"a":37469,"n":"b_925D","k":"branch","len":1,"c":false},{"a":37484,"n":"b_926C","k":"branch","len":1,"c":false},{"a":37511,"n":"nmi_watchdog_check","k":"table","len":10,"c":true},{"a":37521,"n":"nmi_watchdog_pass","k":"routine","len":1,"c":true},{"a":37522,"n":"nmi_watchdog_fail","k":"table","len":16,"c":true},{"a":37538,"n":"band_title_top_score","k":"routine","len":133,"c":true},{"a":37553,"n":"b_92B1","k":"branch","len":1,"c":false},{"a":37581,"n":"b_92CD","k":"branch","len":1,"c":false},{"a":37594,"n":"b_92DA","k":"branch","len":1,"c":false},{"a":37623,"n":"b_92F7","k":"branch","len":1,"c":false},{"a":37654,"n":"b_9316","k":"branch","len":1,"c":false},{"a":37671,"n":"band_title_table_bars","k":"routine","len":67,"c":true},{"a":37738,"n":"band_score_row_2","k":"routine","len":10,"c":true},{"a":37748,"n":"colour_score_row","k":"routine","len":53,"c":true},{"a":37765,"n":"b_9385","k":"branch","len":1,"c":false},{"a":37801,"n":"band_score_row_3","k":"routine","len":7,"c":true},{"a":37808,"n":"band_score_row_4","k":"routine","len":7,"c":true},{"a":37815,"n":"band_score_row_5","k":"routine","len":7,"c":true},{"a":37822,"n":"band_score_row_6","k":"routine","len":7,"c":true},{"a":37829,"n":"band_score_row_7","k":"routine","len":7,"c":true},{"a":37836,"n":"band_menu_one_player","k":"routine","len":13,"c":true},{"a":37849,"n":"band_menu_two_player","k":"routine","len":10,"c":true},{"a":37859,"n":"band_menu_team","k":"routine","len":10,"c":true},{"a":37869,"n":"band_menu_three_player","k":"routine","len":10,"c":true},{"a":37879,"n":"band_menu_four_player","k":"routine","len":10,"c":true},{"a":37889,"n":"colour_row_blue_ramp","k":"routine","len":24,"c":true},{"a":37891,"n":"b_9403","k":"branch","len":1,"c":false},{"a":37913,"n":"band_menu_wiztips_prompt","k":"routine","len":7,"c":true},{"a":37920,"n":"read_joystick_edge_lab","k":"routine","len":22,"c":true},{"a":37940,"n":"b_9434","k":"branch","len":1,"c":false},{"a":37942,"n":"cycle_all_text_colours","k":"routine","len":21,"c":true},{"a":37963,"n":"lab_joystick_last","k":"variable","len":1,"c":true},{"a":37964,"n":"wiztips_page","k":"variable","len":1,"c":true},{"a":37965,"n":"show_wiztips","k":"routine","len":157,"c":true},{"a":37983,"n":"b_945F","k":"branch","len":1,"c":false},{"a":38078,"n":"b_94BE","k":"branch","len":1,"c":false},{"a":38101,"n":"b_94D5","k":"branch","len":1,"c":false},{"a":38104,"n":"b_94D8","k":"branch","len":1,"c":false},{"a":38114,"n":"b_94E2","k":"branch","len":1,"c":false},{"a":38122,"n":"place_sprites","k":"routine","len":79,"c":true},{"a":38132,"n":"b_94F4","k":"branch","len":1,"c":false},{"a":38163,"n":"b_9513","k":"branch","len":1,"c":false},{"a":38172,"n":"b_951C","k":"branch","len":1,"c":false},{"a":38201,"n":"tbl_sprite_bit","k":"table","len":8,"c":true},{"a":38209,"n":"tbl_sprite_clear_mask","k":"table","len":8,"c":true},{"a":38217,"n":"wiztips_one_display_list","k":"table","len":50,"c":true},{"a":38267,"n":"wiztips_two_display_list","k":"table","len":38,"c":true},{"a":38305,"n":"wiztips_three_display_list","k":"table","len":54,"c":true},{"a":38359,"n":"tbl_wiztips_one_sprites","k":"table","len":4,"c":true},{"a":38363,"n":"wiztips_one_alien1_shape","k":"table","len":5,"c":true},{"a":38368,"n":"wiztips_one_alien2_shape","k":"table","len":5,"c":true},{"a":38373,"n":"wiztips_one_alien3_shape","k":"table","len":9,"c":true},{"a":38382,"n":"wiztips_one_icon_colour","k":"table","len":17,"c":true},{"a":38399,"n":"tbl_wiztips_one_icon_rows","k":"table","len":30,"c":true},{"a":38429,"n":"tbl_wiztips_two_sprites","k":"table","len":4,"c":true},{"a":38433,"n":"wiztips_two_sphere_shape","k":"table","len":5,"c":true},{"a":38438,"n":"wiztips_two_droplet_shape","k":"table","len":5,"c":true},{"a":38443,"n":"wiztips_two_legend_shapes","k":"table","len":26,"c":true},{"a":38469,"n":"tbl_wiztips_two_last_row","k":"table","len":10,"c":true},{"a":38479,"n":"tbl_unused_sprites","k":"table","len":40,"c":true},{"a":38519,"n":"ptr_wiztips_one_sprites_lo","k":"variable","len":1,"c":true},{"a":38520,"n":"ptr_wiztips_one_sprites_hi","k":"variable","len":1,"c":true},{"a":38521,"n":"ptr_wiztips_one_icons_lo","k":"variable","len":1,"c":true},{"a":38522,"n":"ptr_wiztips_one_icons_hi","k":"variable","len":1,"c":true},{"a":38523,"n":"ptr_wiztips_two_sprites_lo","k":"variable","len":1,"c":true},{"a":38524,"n":"ptr_wiztips_two_sprites_hi","k":"variable","len":1,"c":true},{"a":38525,"n":"ptr_wiztips_two_last_row_lo","k":"variable","len":1,"c":true},{"a":38526,"n":"ptr_wiztips_two_last_row_hi","k":"variable","len":1,"c":true},{"a":38527,"n":"ptr_unused_sprites","k":"variable","len":2,"c":true},{"a":38529,"n":"band_wiztips1_top","k":"routine","len":109,"c":true},{"a":38578,"n":"b_96B2","k":"branch","len":1,"c":false},{"a":38605,"n":"b_96CD","k":"branch","len":1,"c":false},{"a":38638,"n":"wiztips_one_anim_timers","k":"table","len":3,"c":true},{"a":38641,"n":"wiztips_one_anim_frame1","k":"variable","len":1,"c":true},{"a":38642,"n":"wiztips_one_anim_frame2","k":"variable","len":1,"c":true},{"a":38643,"n":"wiztips_one_anim_frame3","k":"variable","len":1,"c":true},{"a":38644,"n":"wiztips_one_anim_periods","k":"table","len":3,"c":true},{"a":38647,"n":"wiztips_one_alien1_frames","k":"table","len":4,"c":true},{"a":38651,"n":"wiztips_one_alien2_frames","k":"table","len":4,"c":true},{"a":38655,"n":"wiztips_one_alien3_frames","k":"table","len":4,"c":true},{"a":38659,"n":"band_wiztips1_subtitle","k":"routine","len":9,"c":true},{"a":38668,"n":"band_wiztips1_body","k":"routine","len":7,"c":true},{"a":38675,"n":"unused_band_ebd7","k":"table","len":7,"c":true},{"a":38682,"n":"band_wiztips1_icon_text1","k":"routine","len":7,"c":true},{"a":38689,"n":"band_wiztips1_icon_text2","k":"routine","len":7,"c":true},{"a":38696,"n":"band_wiztips1_icon_text3","k":"routine","len":7,"c":true},{"a":38703,"n":"band_wiztips1_wiggle_row","k":"routine","len":12,"c":true},{"a":38715,"n":"colour_row_red_ramp","k":"routine","len":21,"c":true},{"a":38717,"n":"b_973D","k":"branch","len":1,"c":false},{"a":38736,"n":"band_wiztips1_icon_sprites","k":"routine","len":18,"c":true},{"a":38754,"n":"band_wiztips2_top","k":"routine","len":86,"c":true},{"a":38767,"n":"b_976F","k":"branch","len":1,"c":false},{"a":38775,"n":"b_9777","k":"branch","len":1,"c":false},{"a":38797,"n":"b_978D","k":"branch","len":1,"c":false},{"a":38840,"n":"wiztips_two_sphere_frames","k":"table","len":4,"c":true},{"a":38844,"n":"wiztips_two_droplet_frames","k":"table","len":4,"c":true},{"a":38848,"n":"wiztips_two_frame_count","k":"variable","len":1,"c":true},{"a":38849,"n":"wiztips_two_phase","k":"variable","len":1,"c":true},{"a":38850,"n":"band_wiztips2_subtitle","k":"routine","len":9,"c":true},{"a":38859,"n":"band_wiztips2_control_rows","k":"routine","len":7,"c":true},{"a":38866,"n":"band_wiztips2_shoot_row","k":"routine","len":5,"c":true},{"a":38871,"n":"band_wiztips2_legend","k":"routine","len":25,"c":true},{"a":38896,"n":"band_wiztips3_top","k":"routine","len":12,"c":true},{"a":38908,"n":"band_wiztips3_subtitle","k":"routine","len":9,"c":true},{"a":38917,"n":"band_wiztips3_hint_a","k":"routine","len":13,"c":true},{"a":38930,"n":"band_wiztips3_hint_b","k":"routine","len":15,"c":true},{"a":38945,"n":"wiztips_three_colours_a","k":"table","len":4,"c":true},{"a":38949,"n":"wiztips_three_colours_b","k":"table","len":4,"c":true},{"a":38953,"n":"title_colour_fade_in","k":"routine","len":91,"c":true},{"a":38963,"n":"b_9833","k":"branch","len":1,"c":false},{"a":39043,"n":"r_9883","k":"branch","len":1,"c":false},{"a":39044,"n":"cycle_logo_colours","k":"routine","len":58,"c":true},{"a":39055,"n":"b_988F","k":"branch","len":1,"c":false},{"a":39064,"n":"b_9898","k":"branch","len":1,"c":false},{"a":39102,"n":"cycle_blue_ramp","k":"routine","len":43,"c":true},{"a":39113,"n":"b_98C9","k":"branch","len":1,"c":false},{"a":39120,"n":"b_98D0","k":"branch","len":1,"c":false},{"a":39145,"n":"cycle_red_ramp","k":"routine","len":45,"c":true},{"a":39156,"n":"b_98F4","k":"branch","len":1,"c":false},{"a":39163,"n":"b_98FB","k":"branch","len":1,"c":false},{"a":39190,"n":"cycle_green_ramp","k":"routine","len":52,"c":true},{"a":39201,"n":"b_9921","k":"branch","len":1,"c":false},{"a":39208,"n":"b_9928","k":"branch","len":1,"c":false},{"a":39234,"n":"b_9942","k":"branch","len":1,"c":false},{"a":39242,"n":"cycle_cyan_colour","k":"routine","len":32,"c":true},{"a":39253,"n":"b_9955","k":"branch","len":1,"c":false},{"a":39274,"n":"set_orange_colour","k":"routine","len":19,"c":true},{"a":39280,"n":"b_9970","k":"branch","len":1,"c":false},{"a":39293,"n":"cycle_blue_colour","k":"routine","len":32,"c":true},{"a":39304,"n":"b_9988","k":"branch","len":1,"c":false},{"a":39325,"n":"cycle_red_colour","k":"routine","len":32,"c":true},{"a":39336,"n":"b_99A8","k":"branch","len":1,"c":false},{"a":39357,"n":"update_alien_bullets","k":"routine","len":87,"c":true},{"a":39366,"n":"b_99C6","k":"branch","len":1,"c":false},{"a":39380,"n":"b_99D4","k":"branch","len":1,"c":false},{"a":39382,"n":"b_99D6","k":"branch","len":1,"c":false},{"a":39394,"n":"b_99E2","k":"branch","len":1,"c":false},{"a":39406,"n":"b_99EE","k":"branch","len":1,"c":false},{"a":39414,"n":"b_99F6","k":"branch","len":1,"c":false},{"a":39424,"n":"b_9A00","k":"branch","len":1,"c":false},{"a":39426,"n":"b_9A02","k":"branch","len":1,"c":false},{"a":39434,"n":"b_9A0A","k":"branch","len":1,"c":false},{"a":39444,"n":"move_alien_bullet","k":"routine","len":186,"c":true},{"a":39451,"n":"b_9A1B","k":"branch","len":1,"c":false},{"a":39478,"n":"b_9A36","k":"branch","len":1,"c":false},{"a":39481,"n":"b_9A39","k":"branch","len":1,"c":false},{"a":39508,"n":"b_9A54","k":"branch","len":1,"c":false},{"a":39511,"n":"b_9A57","k":"branch","len":1,"c":false},{"a":39525,"n":"b_9A65","k":"branch","len":1,"c":false},{"a":39531,"n":"b_9A6B","k":"branch","len":1,"c":false},{"a":39621,"n":"r_9AC5","k":"branch","len":1,"c":false},{"a":39622,"n":"b_9AC6","k":"branch","len":1,"c":false},{"a":39630,"n":"wiz_box_col_end","k":"variable","len":1,"c":true},{"a":39631,"n":"wiz_box_col","k":"variable","len":1,"c":true},{"a":39632,"n":"wiz_box_row_end","k":"variable","len":1,"c":true},{"a":39633,"n":"wiz_box_row","k":"variable","len":1,"c":true},{"a":39634,"n":"cat_box_col_end","k":"variable","len":1,"c":true},{"a":39635,"n":"cat_box_col","k":"variable","len":1,"c":true},{"a":39636,"n":"cat_box_row_end","k":"variable","len":1,"c":true},{"a":39637,"n":"cat_box_row","k":"variable","len":1,"c":true},{"a":39638,"n":"erase_bullets_check_hits","k":"routine","len":125,"c":true},{"a":39725,"n":"b_9B2D","k":"branch","len":1,"c":false},{"a":39733,"n":"b_9B35","k":"branch","len":1,"c":false},{"a":39743,"n":"b_9B3F","k":"branch","len":1,"c":false},{"a":39745,"n":"b_9B41","k":"branch","len":1,"c":false},{"a":39753,"n":"b_9B49","k":"branch","len":1,"c":false},{"a":39762,"n":"r_9B52","k":"branch","len":1,"c":false},{"a":39763,"n":"erase_bullet_check_hit","k":"routine","len":98,"c":true},{"a":39832,"n":"b_9B98","k":"branch","len":1,"c":false},{"a":39860,"n":"r_9BB4","k":"branch","len":1,"c":false},{"a":39861,"n":"fire_alien_bullet","k":"routine","len":173,"c":true},{"a":39869,"n":"b_9BBD","k":"branch","len":1,"c":false},{"a":39875,"n":"b_9BC3","k":"branch","len":1,"c":false},{"a":39900,"n":"r_9BDC","k":"branch","len":1,"c":false},{"a":39901,"n":"b_9BDD","k":"branch","len":1,"c":false},{"a":39919,"n":"b_9BEF","k":"branch","len":1,"c":false},{"a":39941,"n":"b_9C05","k":"branch","len":1,"c":false},{"a":39963,"n":"b_9C1B","k":"branch","len":1,"c":false},{"a":39993,"n":"b_9C39","k":"branch","len":1,"c":false},{"a":40008,"n":"b_9C48","k":"branch","len":1,"c":false},{"a":40018,"n":"j_9C52","k":"branch","len":1,"c":false},{"a":40034,"n":"bullet_speed_from_direction","k":"routine","len":80,"c":true},{"a":40066,"n":"b_9C82","k":"branch","len":1,"c":false},{"a":40076,"n":"b_9C8C","k":"branch","len":1,"c":false},{"a":40092,"n":"b_9C9C","k":"branch","len":1,"c":false},{"a":40114,"n":"init_bonus_waves","k":"routine","len":25,"c":true},{"a":40127,"n":"b_9CBF","k":"branch","len":1,"c":false},{"a":40139,"n":"clear_alien_bullets","k":"routine","len":10,"c":true},{"a":40142,"n":"b_9CCE","k":"branch","len":1,"c":false},{"a":40149,"n":"clear_alien_table","k":"routine","len":21,"c":true},{"a":40152,"n":"b_9CD8","k":"branch","len":1,"c":false},{"a":40169,"n":"r_9CE9","k":"branch","len":1,"c":false},{"a":40170,"n":"run_bonus_wave_script","k":"routine","len":183,"c":true},{"a":40209,"n":"b_9D11","k":"branch","len":1,"c":false},{"a":40221,"n":"b_9D1D","k":"branch","len":1,"c":false},{"a":40241,"n":"b_9D31","k":"branch","len":1,"c":false},{"a":40248,"n":"b_9D38","k":"branch","len":1,"c":false},{"a":40254,"n":"b_9D3E","k":"branch","len":1,"c":false},{"a":40260,"n":"b_9D44","k":"branch","len":1,"c":false},{"a":40274,"n":"r_9D52","k":"branch","len":1,"c":false},{"a":40275,"n":"b_9D53","k":"branch","len":1,"c":false},{"a":40277,"n":"b_9D55","k":"branch","len":1,"c":false},{"a":40291,"n":"b_9D63","k":"branch","len":1,"c":false},{"a":40303,"n":"b_9D6F","k":"branch","len":1,"c":false},{"a":40324,"n":"b_9D84","k":"branch","len":1,"c":false},{"a":40328,"n":"b_9D88","k":"branch","len":1,"c":false},{"a":40343,"n":"b_9D97","k":"branch","len":1,"c":false},{"a":40353,"n":"create_alien","k":"routine","len":72,"c":true},{"a":40357,"n":"b_9DA5","k":"branch","len":1,"c":false},{"a":40372,"n":"b_9DB4","k":"branch","len":1,"c":false},{"a":40395,"n":"b_9DCB","k":"branch","len":1,"c":false},{"a":40424,"n":"r_9DE8","k":"branch","len":1,"c":false},{"a":40425,"n":"init_cauldrons","k":"routine","len":36,"c":true},{"a":40427,"n":"b_9DEB","k":"branch","len":1,"c":false},{"a":40461,"n":"update_cauldrons","k":"routine","len":116,"c":true},{"a":40463,"n":"b_9E0F","k":"branch","len":1,"c":false},{"a":40475,"n":"b_9E1B","k":"branch","len":1,"c":false},{"a":40492,"n":"b_9E2C","k":"branch","len":1,"c":false},{"a":40506,"n":"b_9E3A","k":"branch","len":1,"c":false},{"a":40517,"n":"b_9E45","k":"branch","len":1,"c":false},{"a":40538,"n":"b_9E5A","k":"branch","len":1,"c":false},{"a":40545,"n":"b_9E61","k":"branch","len":1,"c":false},{"a":40549,"n":"b_9E65","k":"branch","len":1,"c":false},{"a":40553,"n":"b_9E69","k":"branch","len":1,"c":false},{"a":40577,"n":"draw_cauldron_row","k":"routine","len":69,"c":true},{"a":40594,"n":"b_9E92","k":"branch","len":1,"c":false},{"a":40625,"n":"b_9EB1","k":"branch","len":1,"c":false},{"a":40646,"n":"cauldron_rows_red","k":"variable","len":1,"c":true},{"a":40647,"n":"cauldron_rows_green","k":"variable","len":1,"c":true},{"a":40648,"n":"cauldron_rows_blue","k":"variable","len":1,"c":true},{"a":40649,"n":"cauldron_rows_mix","k":"variable","len":1,"c":true},{"a":40650,"n":"unused_9eca","k":"table","len":5,"c":true},{"a":40655,"n":"count_landscape_aliens","k":"routine","len":46,"c":true},{"a":40681,"n":"b_9EE9","k":"branch","len":1,"c":false},{"a":40696,"n":"b_9EF8","k":"branch","len":1,"c":false},{"a":40701,"n":"show_alien_count","k":"routine","len":98,"c":true},{"a":40707,"n":"b_9F03","k":"branch","len":1,"c":false},{"a":40722,"n":"j_9F12","k":"branch","len":1,"c":false},{"a":40741,"n":"b_9F25","k":"branch","len":1,"c":false},{"a":40798,"n":"r_9F5E","k":"branch","len":1,"c":false},{"a":40799,"n":"init_landscape_aliens","k":"routine","len":39,"c":true},{"a":40806,"n":"b_9F66","k":"branch","len":1,"c":false},{"a":40837,"n":"r_9F85","k":"branch","len":1,"c":false},{"a":40838,"n":"tbl_group_sizes","k":"table","len":4,"c":true},{"a":40842,"n":"tbl_landscape_list","k":"table","len":9,"c":true},{"a":40851,"n":"tbl_group_spacing","k":"table","len":4,"c":true},{"a":40855,"n":"tbl_special_types","k":"variable","len":1,"c":true},{"a":40856,"n":"special_type_2","k":"variable","len":1,"c":true},{"a":40857,"n":"special_type_8","k":"variable","len":1,"c":true},{"a":40858,"n":"special_type_11","k":"variable","len":1,"c":true},{"a":40859,"n":"make_alien_list","k":"routine","len":101,"c":true},{"a":40876,"n":"b_9FAC","k":"branch","len":1,"c":false},{"a":40907,"n":"j_9FCB","k":"branch","len":1,"c":false},{"a":40960,"n":"write_wave_groups","k":"routine","len":112,"c":true},{"a":40963,"n":"b_A003","k":"branch","len":1,"c":false},{"a":40974,"n":"j_A00E","k":"branch","len":1,"c":false},{"a":40999,"n":"b_A027","k":"branch","len":1,"c":false},{"a":41030,"n":"b_A046","k":"branch","len":1,"c":false},{"a":41032,"n":"b_A048","k":"branch","len":1,"c":false},{"a":41064,"n":"b_A068","k":"branch","len":1,"c":false},{"a":41072,"n":"randomise_alien_type","k":"routine","len":124,"c":true},{"a":41102,"n":"b_A08E","k":"branch","len":1,"c":false},{"a":41109,"n":"b_A095","k":"branch","len":1,"c":false},{"a":41154,"n":"b_A0C2","k":"branch","len":1,"c":false},{"a":41164,"n":"b_A0CC","k":"branch","len":1,"c":false},{"a":41166,"n":"b_A0CE","k":"branch","len":1,"c":false},{"a":41195,"n":"r_A0EB","k":"branch","len":1,"c":false},{"a":41196,"n":"make_opening_wave","k":"routine","len":58,"c":true},{"a":41227,"n":"b_A10B","k":"branch","len":1,"c":false},{"a":41254,"n":"tbl_unused_a126","k":"table","len":4,"c":true},{"a":41258,"n":"tbl_fire_interval","k":"table","len":9,"c":true},{"a":41267,"n":"police_queue","k":"variable","len":1,"c":true},{"a":41268,"n":"police_queue_clock","k":"variable","len":1,"c":true},{"a":41269,"n":"run_police_queue","k":"routine","len":21,"c":true},{"a":41289,"n":"r_A149","k":"branch","len":1,"c":false},{"a":41290,"n":"update_no_kill_timer","k":"routine","len":55,"c":true},{"a":41313,"n":"b_A161","k":"branch","len":1,"c":false},{"a":41344,"n":"r_A180","k":"branch","len":1,"c":false},{"a":41345,"n":"start_police_ship","k":"routine","len":54,"c":true},{"a":41353,"n":"b_A189","k":"branch","len":1,"c":false},{"a":41368,"n":"b_A198","k":"branch","len":1,"c":false},{"a":41399,"n":"no_kill_frames","k":"variable","len":1,"c":true},{"a":41400,"n":"no_kill_seconds","k":"variable","len":1,"c":true},{"a":41401,"n":"tbl_no_kill_limit","k":"table","len":8,"c":true},{"a":41409,"n":"tbl_police_fire_interval","k":"table","len":8,"c":true},{"a":41417,"n":"clear_aliens","k":"routine","len":59,"c":true},{"a":41422,"n":"b_A1CE","k":"branch","len":1,"c":false},{"a":41458,"n":"b_A1F2","k":"branch","len":1,"c":false},{"a":41476,"n":"update_aliens","k":"routine","len":84,"c":true},{"a":41502,"n":"b_A21E","k":"branch","len":1,"c":false},{"a":41507,"n":"b_A223","k":"branch","len":1,"c":false},{"a":41518,"n":"b_A22E","k":"branch","len":1,"c":false},{"a":41526,"n":"j_A236","k":"branch","len":1,"c":false},{"a":41559,"n":"r_A257","k":"branch","len":1,"c":false},{"a":41560,"n":"update_alien","k":"routine","len":28,"c":true},{"a":41588,"n":"remove_offscreen_alien","k":"routine","len":40,"c":true},{"a":41624,"n":"b_A298","k":"branch","len":1,"c":false},{"a":41627,"n":"r_A29B","k":"branch","len":1,"c":false},{"a":41628,"n":"show_alien_sprite","k":"routine","len":170,"c":true},{"a":41659,"n":"b_A2BB","k":"branch","len":1,"c":false},{"a":41697,"n":"b_A2E1","k":"branch","len":1,"c":false},{"a":41706,"n":"b_A2EA","k":"branch","len":1,"c":false},{"a":41753,"n":"b_A319","k":"branch","len":1,"c":false},{"a":41791,"n":"r_A33F","k":"branch","len":1,"c":false},{"a":41792,"n":"b_A340","k":"branch","len":1,"c":false},{"a":41798,"n":"scroll_alien","k":"routine","len":64,"c":true},{"a":41823,"n":"b_A35F","k":"branch","len":1,"c":false},{"a":41833,"n":"r_A369","k":"branch","len":1,"c":false},{"a":41834,"n":"b_A36A","k":"branch","len":1,"c":false},{"a":41851,"n":"b_A37B","k":"branch","len":1,"c":false},{"a":41862,"n":"move_alien","k":"routine","len":443,"c":true},{"a":41891,"n":"b_A3A3","k":"branch","len":1,"c":false},{"a":41906,"n":"b_A3B2","k":"branch","len":1,"c":false},{"a":41921,"n":"b_A3C1","k":"branch","len":1,"c":false},{"a":41946,"n":"b_A3DA","k":"branch","len":1,"c":false},{"a":41957,"n":"b_A3E5","k":"branch","len":1,"c":false},{"a":41978,"n":"b_A3FA","k":"branch","len":1,"c":false},{"a":42005,"n":"b_A415","k":"branch","len":1,"c":false},{"a":42032,"n":"b_A430","k":"branch","len":1,"c":false},{"a":42042,"n":"b_A43A","k":"branch","len":1,"c":false},{"a":42061,"n":"b_A44D","k":"branch","len":1,"c":false},{"a":42071,"n":"b_A457","k":"branch","len":1,"c":false},{"a":42090,"n":"b_A46A","k":"branch","len":1,"c":false},{"a":42100,"n":"b_A474","k":"branch","len":1,"c":false},{"a":42119,"n":"b_A487","k":"branch","len":1,"c":false},{"a":42129,"n":"r_A491","k":"branch","len":1,"c":false},{"a":42130,"n":"b_A492","k":"branch","len":1,"c":false},{"a":42151,"n":"b_A4A7","k":"branch","len":1,"c":false},{"a":42161,"n":"b_A4B1","k":"branch","len":1,"c":false},{"a":42182,"n":"b_A4C6","k":"branch","len":1,"c":false},{"a":42192,"n":"b_A4D0","k":"branch","len":1,"c":false},{"a":42213,"n":"b_A4E5","k":"branch","len":1,"c":false},{"a":42223,"n":"b_A4EF","k":"branch","len":1,"c":false},{"a":42244,"n":"b_A504","k":"branch","len":1,"c":false},{"a":42254,"n":"b_A50E","k":"branch","len":1,"c":false},{"a":42269,"n":"b_A51D","k":"branch","len":1,"c":false},{"a":42294,"n":"b_A536","k":"branch","len":1,"c":false},{"a":42305,"n":"fire_alien_shots","k":"routine","len":101,"c":true},{"a":42317,"n":"b_A54D","k":"branch","len":1,"c":false},{"a":42348,"n":"r_A56C","k":"branch","len":1,"c":false},{"a":42349,"n":"b_A56D","k":"branch","len":1,"c":false},{"a":42366,"n":"b_A57E","k":"branch","len":1,"c":false},{"a":42406,"n":"play_alien_shot_sound","k":"routine","len":11,"c":true},{"a":42412,"n":"b_A5AC","k":"branch","len":1,"c":false},{"a":42417,"n":"animate_alien","k":"routine","len":168,"c":true},{"a":42429,"n":"b_A5BD","k":"branch","len":1,"c":false},{"a":42440,"n":"r_A5C8","k":"branch","len":1,"c":false},{"a":42441,"n":"b_A5C9","k":"branch","len":1,"c":false},{"a":42469,"n":"b_A5E5","k":"branch","len":1,"c":false},{"a":42508,"n":"b_A60C","k":"branch","len":1,"c":false},{"a":42523,"n":"b_A61B","k":"branch","len":1,"c":false},{"a":42538,"n":"b_A62A","k":"branch","len":1,"c":false},{"a":42566,"n":"b_A646","k":"branch","len":1,"c":false},{"a":42585,"n":"bounce_alien","k":"routine","len":115,"c":true},{"a":42607,"n":"b_A66F","k":"branch","len":1,"c":false},{"a":42626,"n":"r_A682","k":"branch","len":1,"c":false},{"a":42627,"n":"b_A683","k":"branch","len":1,"c":false},{"a":42656,"n":"b_A6A0","k":"branch","len":1,"c":false},{"a":42673,"n":"b_A6B1","k":"branch","len":1,"c":false},{"a":42700,"n":"bounce_call_lo","k":"routine","len":1,"c":true},{"a":42701,"n":"bounce_call_hi","k":"routine","len":16,"c":true},{"a":42717,"n":"bounce_jump_lo","k":"routine","len":1,"c":true},{"a":42718,"n":"bounce_jump_hi","k":"routine","len":1,"c":true},{"a":42719,"n":"bounce_off_left","k":"routine","len":6,"c":true},{"a":42724,"n":"r_A6E4","k":"branch","len":1,"c":false},{"a":42725,"n":"bounce_off_right","k":"routine","len":34,"c":true},{"a":42730,"n":"b_A6EA","k":"branch","len":1,"c":false},{"a":42758,"n":"r_A706","k":"branch","len":1,"c":false},{"a":42759,"n":"bounce_off_top","k":"routine","len":6,"c":true},{"a":42765,"n":"bounce_off_bottom","k":"routine","len":34,"c":true},{"a":42770,"n":"b_A712","k":"branch","len":1,"c":false},{"a":42798,"n":"r_A72E","k":"branch","len":1,"c":false},{"a":42799,"n":"stop_alien","k":"routine","len":21,"c":true},{"a":42820,"n":"set_alien_hitbox","k":"routine","len":31,"c":true},{"a":42851,"n":"droplet_counter","k":"variable","len":1,"c":true},{"a":42852,"n":"droplet_band","k":"variable","len":1,"c":true},{"a":42853,"n":"tbl_droplet_counter_step","k":"table","len":7,"c":true},{"a":42860,"n":"tbl_special_droplet_threshold","k":"table","len":5,"c":true},{"a":42865,"n":"tbl_special_droplet_colour","k":"table","len":6,"c":true},{"a":42871,"n":"count_alien_kill","k":"routine","len":30,"c":true},{"a":42879,"n":"b_A77F","k":"branch","len":1,"c":false},{"a":42901,"n":"no_kill_limit_operand","k":"routine","len":20,"c":true},{"a":42914,"n":"b_A7A2","k":"branch","len":1,"c":false},{"a":42920,"n":"b_A7A8","k":"branch","len":1,"c":false},{"a":42921,"n":"choose_droplet_colour","k":"routine","len":57,"c":true},{"a":42946,"n":"b_A7C2","k":"branch","len":1,"c":false},{"a":42959,"n":"b_A7CF","k":"branch","len":1,"c":false},{"a":42974,"n":"b_A7DE","k":"branch","len":1,"c":false},{"a":42978,"n":"hit_lookalike","k":"routine","len":16,"c":true},{"a":42994,"n":"run_hit_alien","k":"routine","len":49,"c":true},{"a":43000,"n":"b_A7F8","k":"branch","len":1,"c":false},{"a":43010,"n":"b_A802","k":"branch","len":1,"c":false},{"a":43038,"n":"b_A81E","k":"branch","len":1,"c":false},{"a":43043,"n":"hit_state_7","k":"routine","len":13,"c":true},{"a":43056,"n":"dispatch_hit_state","k":"routine","len":40,"c":true},{"a":43075,"n":"b_A843","k":"branch","len":1,"c":false},{"a":43082,"n":"b_A84A","k":"branch","len":1,"c":false},{"a":43089,"n":"b_A851","k":"branch","len":1,"c":false},{"a":43096,"n":"bonus_kills","k":"variable","len":1,"c":true},{"a":43097,"n":"bonus_kills_tallied","k":"variable","len":1,"c":true},{"a":43098,"n":"bonus_tally_clock","k":"variable","len":1,"c":true},{"a":43099,"n":"kill_alien","k":"routine","len":54,"c":true},{"a":43107,"n":"b_A863","k":"branch","len":1,"c":false},{"a":43124,"n":"b_A874","k":"branch","len":1,"c":false},{"a":43138,"n":"b_A882","k":"branch","len":1,"c":false},{"a":43148,"n":"b_A88C","k":"branch","len":1,"c":false},{"a":43153,"n":"explode_alien","k":"routine","len":27,"c":true},{"a":43180,"n":"run_explosion","k":"routine","len":23,"c":true},{"a":43203,"n":"finish_hit_frame","k":"routine","len":15,"c":true},{"a":43206,"n":"b_A8C6","k":"branch","len":1,"c":false},{"a":43218,"n":"release_droplet","k":"routine","len":26,"c":true},{"a":43244,"n":"drop_droplet","k":"routine","len":57,"c":true},{"a":43269,"n":"b_A905","k":"branch","len":1,"c":false},{"a":43301,"n":"splash_droplet","k":"routine","len":23,"c":true},{"a":43324,"n":"leave_pearl","k":"routine","len":31,"c":true},{"a":43355,"n":"keep_pearl","k":"routine","len":25,"c":true},{"a":43374,"n":"b_A96E","k":"branch","len":1,"c":false},{"a":43380,"n":"sound_police_siren","k":"routine","len":49,"c":true},{"a":43396,"n":"b_A984","k":"branch","len":1,"c":false},{"a":43428,"n":"r_A9A4","k":"branch","len":1,"c":false},{"a":43429,"n":"siren_clock","k":"variable","len":1,"c":true},{"a":43430,"n":"siren_tone","k":"variable","len":1,"c":true},{"a":43431,"n":"police_present","k":"variable","len":1,"c":true},{"a":43432,"n":"police_present_before","k":"variable","len":1,"c":true},{"a":43433,"n":"kills_since_pearl","k":"variable","len":1,"c":true},{"a":43434,"n":"kills_per_pearl","k":"variable","len":1,"c":true},{"a":43435,"n":"tbl_droplet_frames","k":"table","len":4,"c":true},{"a":43439,"n":"free_alien_slot","k":"routine","len":23,"c":true},{"a":43462,"n":"find_alien_landscapes","k":"routine","len":20,"c":true},{"a":43464,"n":"b_A9C8","k":"branch","len":1,"c":false},{"a":43476,"n":"b_A9D4","k":"branch","len":1,"c":false},{"a":43481,"n":"r_A9D9","k":"branch","len":1,"c":false},{"a":43482,"n":"spawn_wave_aliens","k":"routine","len":140,"c":true},{"a":43513,"n":"b_A9F9","k":"branch","len":1,"c":false},{"a":43516,"n":"b_A9FC","k":"branch","len":1,"c":false},{"a":43519,"n":"b_A9FF","k":"branch","len":1,"c":false},{"a":43529,"n":"b_AA09","k":"branch","len":1,"c":false},{"a":43542,"n":"b_AA16","k":"branch","len":1,"c":false},{"a":43552,"n":"b_AA20","k":"branch","len":1,"c":false},{"a":43555,"n":"r_AA23","k":"branch","len":1,"c":false},{"a":43556,"n":"b_AA24","k":"branch","len":1,"c":false},{"a":43572,"n":"b_AA34","k":"branch","len":1,"c":false},{"a":43587,"n":"b_AA43","k":"branch","len":1,"c":false},{"a":43607,"n":"b_AA57","k":"branch","len":1,"c":false},{"a":43622,"n":"start_alien","k":"routine","len":64,"c":true},{"a":43653,"n":"b_AA85","k":"branch","len":1,"c":false},{"a":43664,"n":"b_AA90","k":"branch","len":1,"c":false},{"a":43686,"n":"play_lab_sounds","k":"routine","len":33,"c":true},{"a":43699,"n":"b_AAB3","k":"branch","len":1,"c":false},{"a":43704,"n":"b_AAB8","k":"branch","len":1,"c":false},{"a":43718,"n":"r_AAC6","k":"branch","len":1,"c":false},{"a":43719,"n":"clear_for_lab","k":"routine","len":59,"c":true},{"a":43778,"n":"set_lab_display","k":"routine","len":30,"c":true},{"a":43808,"n":"run_wiz_lab","k":"routine","len":123,"c":true},{"a":43896,"n":"b_AB78","k":"branch","len":1,"c":false},{"a":43899,"n":"j_AB7B","k":"branch","len":1,"c":false},{"a":43921,"n":"b_AB91","k":"branch","len":1,"c":false},{"a":43931,"n":"lab_column_mode","k":"variable","len":1,"c":true},{"a":43932,"n":"landscape_load_mode","k":"variable","len":1,"c":true},{"a":43933,"n":"run_lab_cat","k":"routine","len":164,"c":true},{"a":43939,"n":"b_ABA3","k":"branch","len":1,"c":false},{"a":43997,"n":"b_ABDD","k":"branch","len":1,"c":false},{"a":44022,"n":"b_ABF6","k":"branch","len":1,"c":false},{"a":44038,"n":"b_AC06","k":"branch","len":1,"c":false},{"a":44066,"n":"b_AC22","k":"branch","len":1,"c":false},{"a":44093,"n":"b_AC3D","k":"branch","len":1,"c":false},{"a":44097,"n":"lab_cat_clock","k":"variable","len":1,"c":true},{"a":44098,"n":"lab_cat_step","k":"variable","len":1,"c":true},{"a":44099,"n":"tbl_lab_cat_moves","k":"table","len":8,"c":true},{"a":44107,"n":"tbl_lab_cat_frames","k":"variable","len":2,"c":true},{"a":44109,"n":"lab_cat_state","k":"variable","len":1,"c":true},{"a":44110,"n":"in_lab","k":"variable","len":1,"c":true},{"a":44111,"n":"run_lab_wiz","k":"routine","len":329,"c":true},{"a":44172,"n":"b_AC8C","k":"branch","len":1,"c":false},{"a":44186,"n":"b_AC9A","k":"branch","len":1,"c":false},{"a":44204,"n":"b_ACAC","k":"branch","len":1,"c":false},{"a":44220,"n":"b_ACBC","k":"branch","len":1,"c":false},{"a":44263,"n":"b_ACE7","k":"branch","len":1,"c":false},{"a":44279,"n":"b_ACF7","k":"branch","len":1,"c":false},{"a":44289,"n":"b_AD01","k":"branch","len":1,"c":false},{"a":44314,"n":"b_AD1A","k":"branch","len":1,"c":false},{"a":44335,"n":"b_AD2F","k":"branch","len":1,"c":false},{"a":44347,"n":"j_AD3B","k":"branch","len":1,"c":false},{"a":44362,"n":"b_AD4A","k":"branch","len":1,"c":false},{"a":44406,"n":"b_AD76","k":"branch","len":1,"c":false},{"a":44408,"n":"b_AD78","k":"branch","len":1,"c":false},{"a":44420,"n":"b_AD84","k":"branch","len":1,"c":false},{"a":44429,"n":"b_AD8D","k":"branch","len":1,"c":false},{"a":44439,"n":"r_AD97","k":"branch","len":1,"c":false},{"a":44440,"n":"end_lab","k":"routine","len":87,"c":true},{"a":44480,"n":"b_ADC0","k":"branch","len":1,"c":false},{"a":44493,"n":"b_ADCD","k":"branch","len":1,"c":false},{"a":44527,"n":"finish_colour","k":"routine","len":34,"c":true},{"a":44561,"n":"complete_level","k":"routine","len":271,"c":true},{"a":44641,"n":"b_AE61","k":"branch","len":1,"c":false},{"a":44686,"n":"b_AE8E","k":"branch","len":1,"c":false},{"a":44700,"n":"b_AE9C","k":"branch","len":1,"c":false},{"a":44737,"n":"b_AEC1","k":"branch","len":1,"c":false},{"a":44773,"n":"b_AEE5","k":"branch","len":1,"c":false},{"a":44787,"n":"b_AEF3","k":"branch","len":1,"c":false},{"a":44801,"n":"b_AF01","k":"branch","len":1,"c":false},{"a":44824,"n":"b_AF18","k":"branch","len":1,"c":false},{"a":44832,"n":"play_finale","k":"routine","len":91,"c":true},{"a":44884,"n":"b_AF54","k":"branch","len":1,"c":false},{"a":44889,"n":"b_AF59","k":"branch","len":1,"c":false},{"a":44923,"n":"finale_rounds","k":"variable","len":1,"c":true},{"a":44924,"n":"finale_frames","k":"variable","len":1,"c":true},{"a":44925,"n":"continue_level_max","k":"variable","len":1,"c":true},{"a":44926,"n":"start_level","k":"variable","len":1,"c":true},{"a":44927,"n":"tbl_start_level_keys","k":"table","len":6,"c":true},{"a":44933,"n":"check_title_keys","k":"routine","len":72,"c":true},{"a":44943,"n":"b_AF8F","k":"branch","len":1,"c":false},{"a":44955,"n":"b_AF9B","k":"branch","len":1,"c":false},{"a":44962,"n":"b_AFA2","k":"branch","len":1,"c":false},{"a":44968,"n":"b_AFA8","k":"branch","len":1,"c":false},{"a":44999,"n":"b_AFC7","k":"branch","len":1,"c":false},{"a":45004,"n":"r_AFCC","k":"branch","len":1,"c":false},{"a":45005,"n":"cheat_progress","k":"variable","len":1,"c":true},{"a":45006,"n":"tbl_cheat_keys","k":"table","len":7,"c":true},{"a":45013,"n":"setup_lab_weapons","k":"routine","len":89,"c":true},{"a":45015,"n":"b_AFD7","k":"branch","len":1,"c":false},{"a":45037,"n":"b_AFED","k":"branch","len":1,"c":false},{"a":45060,"n":"b_B004","k":"branch","len":1,"c":false},{"a":45083,"n":"b_B01B","k":"branch","len":1,"c":false},{"a":45102,"n":"lab_heading_line1_base","k":"routine","len":1,"c":true},{"a":45103,"n":"text_select_permanent","k":"table","len":15,"c":true},{"a":45118,"n":"lab_heading_line2_base","k":"table","len":17,"c":true},{"a":45135,"n":"lab_restore_weapons","k":"routine","len":37,"c":true},{"a":45137,"n":"b_B051","k":"branch","len":1,"c":false},{"a":45148,"n":"b_B05C","k":"branch","len":1,"c":false},{"a":45171,"n":"r_B073","k":"branch","len":1,"c":false},{"a":45172,"n":"lab_icon_mode","k":"variable","len":1,"c":true},{"a":45173,"n":"lab_chosen_icon","k":"variable","len":1,"c":true},{"a":45174,"n":"lab_choose_weapon","k":"routine","len":134,"c":true},{"a":45198,"n":"b_B08E","k":"branch","len":1,"c":false},{"a":45214,"n":"b_B09E","k":"branch","len":1,"c":false},{"a":45230,"n":"b_B0AE","k":"branch","len":1,"c":false},{"a":45232,"n":"b_B0B0","k":"branch","len":1,"c":false},{"a":45246,"n":"b_B0BE","k":"branch","len":1,"c":false},{"a":45261,"n":"b_B0CD","k":"branch","len":1,"c":false},{"a":45266,"n":"j_B0D2","k":"branch","len":1,"c":false},{"a":45269,"n":"b_B0D5","k":"branch","len":1,"c":false},{"a":45291,"n":"b_B0EB","k":"branch","len":1,"c":false},{"a":45307,"n":"r_B0FB","k":"branch","len":1,"c":false},{"a":45308,"n":"text_all_systems_go","k":"table","len":16,"c":true},{"a":45324,"n":"lab_weapon_chosen","k":"variable","len":1,"c":true},{"a":45325,"n":"tbl_continue_weapons","k":"table","len":8,"c":true},{"a":45333,"n":"player_block_base","k":"variable","len":1,"c":true},{"a":45334,"n":"permanent_weapons","k":"table","len":8,"c":true},{"a":45342,"n":"level_progress_base","k":"variable","len":1,"c":true},{"a":45343,"n":"level_colours_done","k":"table","len":9,"c":true},{"a":45352,"n":"current_level","k":"variable","len":1,"c":true},{"a":45353,"n":"levels_finished","k":"variable","len":1,"c":true},{"a":45354,"n":"rounds_finished","k":"variable","len":1,"c":true},{"a":45355,"n":"cauldron_red","k":"variable","len":1,"c":true},{"a":45356,"n":"cauldron_green","k":"variable","len":1,"c":true},{"a":45357,"n":"cauldron_blue","k":"variable","len":1,"c":true},{"a":45358,"n":"cauldron_mix","k":"variable","len":1,"c":true},{"a":45359,"n":"cycle_message_colours","k":"routine","len":41,"c":true},{"a":45384,"n":"b_B148","k":"branch","len":1,"c":false},{"a":45393,"n":"b_B151","k":"branch","len":1,"c":false},{"a":45400,"n":"assign_level_aliens","k":"routine","len":34,"c":true},{"a":45407,"n":"b_B15F","k":"branch","len":1,"c":false},{"a":45415,"n":"b_B167","k":"branch","len":1,"c":false},{"a":45420,"n":"j_B16C","k":"branch","len":1,"c":false},{"a":45433,"n":"r_B179","k":"branch","len":1,"c":false},{"a":45434,"n":"lab_frame_count","k":"variable","len":1,"c":true},{"a":45435,"n":"lab_script_index","k":"variable","len":1,"c":true},{"a":45436,"n":"lab_parking_script","k":"table","len":9,"c":true},{"a":45445,"n":"lab_phase","k":"variable","len":1,"c":true},{"a":45446,"n":"lab_pour_timer","k":"variable","len":1,"c":true},{"a":45447,"n":"lab_exit_delay","k":"variable","len":1,"c":true},{"a":45448,"n":"lab_pour_amounts","k":"table","len":3,"c":true},{"a":45451,"n":"level_droplet_colour","k":"table","len":9,"c":true},{"a":45460,"n":"level_cauldron","k":"table","len":8,"c":true},{"a":45468,"n":"alien_list_slots_base","k":"variable","len":1,"c":true},{"a":45469,"n":"level_alien_list","k":"table","len":9,"c":true},{"a":45478,"n":"alien_list_addresses","k":"variable","len":1,"c":true},{"a":45479,"n":"alien_list_addresses_hi","k":"table","len":7,"c":true},{"a":45486,"n":"alien_spawn_cursor","k":"variable","len":1,"c":true},{"a":45487,"n":"aliens_left","k":"variable","len":1,"c":true},{"a":45488,"n":"alien_page_constant","k":"variable","len":1,"c":true},{"a":45489,"n":"landscape_sprite_expand","k":"variable","len":1,"c":true},{"a":45490,"n":"landscape_sprite_multicolour","k":"variable","len":1,"c":true},{"a":45491,"n":"alien_turn_slot","k":"variable","len":1,"c":true},{"a":45492,"n":"star_table","k":"variable","len":1,"c":true},{"a":45493,"n":"star_x","k":"variable","len":1,"c":true},{"a":45494,"n":"star_layer","k":"variable","len":1,"c":true},{"a":45495,"n":"star_timer","k":"variable","len":1,"c":true},{"a":45496,"n":"star_twinkle","k":"table","len":21,"c":true},{"a":45517,"n":"raster_list_index","k":"variable","len":1,"c":true},{"a":45518,"n":"max_level","k":"variable","len":1,"c":true},{"a":45519,"n":"life_over","k":"variable","len":1,"c":true},{"a":45520,"n":"death_timer","k":"variable","len":1,"c":true},{"a":45521,"n":"level_colour_recipe","k":"table","len":32,"c":true},{"a":45553,"n":"view_column","k":"variable","len":1,"c":true},{"a":45554,"n":"scroll_fine","k":"variable","len":1,"c":true},{"a":45555,"n":"scroll_fraction","k":"variable","len":1,"c":true},{"a":45556,"n":"wizball_speed","k":"variable","len":1,"c":true},{"a":45557,"n":"bonus_unused_b1f5","k":"variable","len":1,"c":true},{"a":45558,"n":"bonus_speed","k":"variable","len":1,"c":true},{"a":45559,"n":"bonus_speed_fraction","k":"variable","len":1,"c":true},{"a":45560,"n":"bonus_flying","k":"variable","len":1,"c":true},{"a":45561,"n":"wizball_screen_offset","k":"variable","len":1,"c":true},{"a":45562,"n":"scroll_fine_previous","k":"variable","len":1,"c":true},{"a":45563,"n":"scroll_delta","k":"variable","len":1,"c":true},{"a":45564,"n":"scroll_fine_bits","k":"variable","len":1,"c":true},{"a":45565,"n":"screen_shown","k":"variable","len":1,"c":true},{"a":45566,"n":"screen_drawn","k":"variable","len":1,"c":true},{"a":45567,"n":"scroll_step","k":"variable","len":1,"c":true},{"a":45568,"n":"strip_rebuild_e000","k":"variable","len":1,"c":true},{"a":45569,"n":"strip_rebuild_e400","k":"variable","len":1,"c":true},{"a":45570,"n":"strip_rebuild_e800","k":"variable","len":1,"c":true},{"a":45571,"n":"strip_role_e000","k":"variable","len":1,"c":true},{"a":45572,"n":"strip_role_e400","k":"variable","len":1,"c":true},{"a":45573,"n":"strip_role_e800","k":"variable","len":1,"c":true},{"a":45574,"n":"strip_roles_copy","k":"variable","len":1,"c":true},{"a":45575,"n":"strip_roles_copy_e400","k":"variable","len":1,"c":true},{"a":45576,"n":"strip_roles_copy_e800","k":"variable","len":1,"c":true},{"a":45577,"n":"map_column","k":"variable","len":1,"c":true},{"a":45578,"n":"map_row_base","k":"variable","len":1,"c":true},{"a":45579,"n":"map_subcolumn","k":"variable","len":2,"c":true},{"a":45581,"n":"wizball_x","k":"variable","len":1,"c":true},{"a":45582,"n":"wizball_x_high","k":"variable","len":1,"c":true},{"a":45583,"n":"wizball_y","k":"variable","len":1,"c":true},{"a":45584,"n":"wizball_y_fraction","k":"variable","len":1,"c":true},{"a":45585,"n":"wizball_vspeed","k":"variable","len":1,"c":true},{"a":45586,"n":"wizball_vspeed_fraction","k":"variable","len":1,"c":true},{"a":45587,"n":"tube_timer","k":"variable","len":1,"c":true},{"a":45588,"n":"warp_frame","k":"variable","len":1,"c":true},{"a":45589,"n":"warp_divider","k":"variable","len":1,"c":true},{"a":45590,"n":"warp_direction","k":"variable","len":1,"c":true},{"a":45591,"n":"wizball_falling","k":"variable","len":1,"c":true},{"a":45592,"n":"antigrav_vspeed","k":"variable","len":1,"c":true},{"a":45593,"n":"antigrav_divider","k":"variable","len":1,"c":true},{"a":45594,"n":"spin_frame","k":"variable","len":1,"c":true},{"a":45595,"n":"spin_fraction","k":"variable","len":1,"c":true},{"a":45596,"n":"spin","k":"variable","len":1,"c":true},{"a":45597,"n":"spin_last","k":"variable","len":1,"c":true},{"a":45598,"n":"lab_saved_icon_pointers","k":"table","len":9,"c":true},{"a":45607,"n":"lab_saved_cursor","k":"table","len":4,"c":true},{"a":45611,"n":"lab_saved_catelite","k":"table","len":5,"c":true},{"a":45616,"n":"weapon_flags_base","k":"variable","len":1,"c":true},{"a":45617,"n":"weapon_thrust","k":"variable","len":1,"c":true},{"a":45618,"n":"weapon_antigrav","k":"variable","len":1,"c":true},{"a":45619,"n":"weapon_double","k":"variable","len":1,"c":true},{"a":45620,"n":"weapon_catelite","k":"variable","len":1,"c":true},{"a":45621,"n":"weapon_beam","k":"variable","len":1,"c":true},{"a":45622,"n":"weapon_blazers","k":"variable","len":1,"c":true},{"a":45623,"n":"weapon_spray","k":"variable","len":1,"c":true},{"a":45624,"n":"weapon_spray_on_cat","k":"variable","len":2,"c":true},{"a":45626,"n":"double_side","k":"variable","len":1,"c":true},{"a":45627,"n":"spray_set","k":"variable","len":1,"c":true},{"a":45628,"n":"fire_latch","k":"variable","len":1,"c":true},{"a":45629,"n":"fire_pressed","k":"variable","len":1,"c":true},{"a":45630,"n":"cat_input","k":"variable","len":1,"c":true},{"a":45631,"n":"wizball_input","k":"variable","len":1,"c":true},{"a":45632,"n":"wizard_port","k":"variable","len":1,"c":true},{"a":45633,"n":"solo_autofire","k":"variable","len":1,"c":true},{"a":45634,"n":"solo_fire_hold","k":"variable","len":1,"c":true},{"a":45635,"n":"trail_index","k":"variable","len":1,"c":true},{"a":45636,"n":"trail_y","k":"table","len":8,"c":true},{"a":45644,"n":"trail_x","k":"table","len":8,"c":true},{"a":45652,"n":"key_new","k":"variable","len":1,"c":true},{"a":45653,"n":"key_held","k":"variable","len":1,"c":true},{"a":45654,"n":"joystick_port2_raw","k":"variable","len":1,"c":true},{"a":45655,"n":"joystick_port1_raw","k":"variable","len":1,"c":true},{"a":45656,"n":"icon_cursor","k":"variable","len":1,"c":true},{"a":45657,"n":"pearls_pending","k":"variable","len":1,"c":true},{"a":45658,"n":"icon_pulse_timer","k":"variable","len":1,"c":true},{"a":45659,"n":"icon_pulse_step","k":"variable","len":1,"c":true},{"a":45660,"n":"background_flash","k":"variable","len":1,"c":true},{"a":45661,"n":"scroll_held","k":"variable","len":1,"c":true},{"a":45662,"n":"font_large","k":"variable","len":1,"c":true},{"a":45663,"n":"screen_timeout","k":"variable","len":1,"c":true},{"a":45664,"n":"screen_timeout_divider","k":"variable","len":1,"c":true},{"a":45665,"n":"cat_x","k":"variable","len":1,"c":true},{"a":45666,"n":"cat_y","k":"variable","len":1,"c":true},{"a":45667,"n":"cat_stick_dx","k":"variable","len":1,"c":true},{"a":45668,"n":"cat_stick_dy","k":"variable","len":1,"c":true},{"a":45669,"n":"cat_follow_dx","k":"variable","len":1,"c":true},{"a":45670,"n":"cat_follow_dy","k":"variable","len":1,"c":true},{"a":45671,"n":"cat_anim_timer","k":"variable","len":1,"c":true},{"a":45672,"n":"cat_anim_frame","k":"variable","len":1,"c":true},{"a":45673,"n":"cat_side_offset","k":"variable","len":1,"c":true},{"a":45674,"n":"cat_following","k":"variable","len":1,"c":true},{"a":45675,"n":"cat_stick_timer","k":"variable","len":1,"c":true},{"a":45676,"n":"cat_hits","k":"variable","len":1,"c":true},{"a":45677,"n":"cat_flash_timer","k":"variable","len":1,"c":true},{"a":45678,"n":"life_clear_length","k":"variable","len":2,"c":true},{"a":45680,"n":"joystick_last","k":"variable","len":1,"c":true},{"a":45681,"n":"rings_mirrored","k":"variable","len":1,"c":true},{"a":45682,"n":"game_mode","k":"variable","len":1,"c":true},{"a":45683,"n":"text_quarter","k":"variable","len":1,"c":true},{"a":45684,"n":"text_char_index","k":"variable","len":1,"c":true},{"a":45685,"n":"text_sprite_step","k":"variable","len":1,"c":true},{"a":45686,"n":"font_ink_mask","k":"variable","len":1,"c":true},{"a":45687,"n":"large_font_ink_mask","k":"variable","len":1,"c":true},{"a":45688,"n":"lives_side1","k":"variable","len":1,"c":true},{"a":45689,"n":"lives_side2","k":"variable","len":1,"c":true},{"a":45690,"n":"background_char_phase","k":"variable","len":1,"c":true},{"a":45691,"n":"background_char_saved","k":"variable","len":1,"c":true},{"a":45692,"n":"gravity","k":"variable","len":1,"c":true},{"a":45693,"n":"landscape_colour_1","k":"variable","len":1,"c":true},{"a":45694,"n":"landscape_colour_2","k":"variable","len":1,"c":true},{"a":45695,"n":"landscape_colour_3","k":"variable","len":1,"c":true},{"a":45696,"n":"bullet_half","k":"variable","len":1,"c":true},{"a":45697,"n":"bullet_fired","k":"variable","len":1,"c":true},{"a":45698,"n":"tbl_alien_drift_fraction","k":"table","len":3,"c":true},{"a":45701,"n":"tbl_alien_drift_whole","k":"table","len":3,"c":true},{"a":45704,"n":"tbl_alien_back_fraction","k":"variable","len":2,"c":true},{"a":45706,"n":"tbl_alien_back_whole","k":"variable","len":2,"c":true},{"a":45708,"n":"tbl_alien_bump_handlers","k":"variable","len":1,"c":true},{"a":45709,"n":"tbl_alien_bump_handlers_1hi","k":"variable","len":1,"c":true},{"a":45710,"n":"tbl_alien_bump_handlers_2lo","k":"variable","len":1,"c":true},{"a":45711,"n":"tbl_alien_bump_handlers_2hi","k":"table","len":29,"c":true},{"a":45740,"n":"tbl_game_mode_sides","k":"table","len":20,"c":true},{"a":45760,"n":"tbl_colour_recipes","k":"table","len":48,"c":true},{"a":45808,"n":"tbl_level_map_start","k":"variable","len":1,"c":true},{"a":45809,"n":"tbl_level_map_rows","k":"table","len":43,"c":true},{"a":45852,"n":"tbl_level_graphics","k":"variable","len":1,"c":true},{"a":45853,"n":"tbl_level_graphics_hi","k":"table","len":21,"c":true},{"a":45874,"n":"tbl_strip_quarter_lo","k":"table","len":4,"c":true},{"a":45878,"n":"tbl_strip_quarter_hi","k":"table","len":4,"c":true},{"a":45882,"n":"tbl_screen_pages","k":"table","len":3,"c":true},{"a":45885,"n":"tbl_speed_fraction","k":"table","len":7,"c":true},{"a":45892,"n":"tbl_speed_whole","k":"table","len":7,"c":true},{"a":45899,"n":"tbl_speed_back_fraction","k":"table","len":6,"c":true},{"a":45905,"n":"tbl_speed_back_whole","k":"table","len":6,"c":true},{"a":45911,"n":"tbl_unreferenced_b357","k":"table","len":78,"c":true},{"a":45989,"n":"tbl_unreferenced_probe_cells","k":"table","len":17,"c":true},{"a":46006,"n":"tbl_probe_cells","k":"table","len":8,"c":true},{"a":46014,"n":"tbl_wizball_bump_handlers","k":"variable","len":1,"c":true},{"a":46015,"n":"tbl_wizball_bump_handlers_1hi","k":"variable","len":1,"c":true},{"a":46016,"n":"tbl_wizball_bump_handlers_2lo","k":"variable","len":1,"c":true},{"a":46017,"n":"tbl_wizball_bump_handlers_2hi","k":"table","len":33,"c":true},{"a":46050,"n":"display_list_play","k":"table","len":20,"c":true},{"a":46070,"n":"play_list_wizball_line","k":"table","len":4,"c":true},{"a":46074,"n":"play_list_below_wizball_line","k":"table","len":26,"c":true},{"a":46100,"n":"ptr_display_list_play","k":"variable","len":1,"c":true},{"a":46101,"n":"ptr_display_list_play_hi","k":"variable","len":1,"c":true},{"a":46102,"n":"display_list_title","k":"table","len":58,"c":true},{"a":46160,"n":"ptr_display_list_title","k":"variable","len":1,"c":true},{"a":46161,"n":"ptr_display_list_title_hi","k":"variable","len":1,"c":true},{"a":46162,"n":"display_list_menu","k":"table","len":46,"c":true},{"a":46208,"n":"ptr_display_list_menu","k":"variable","len":1,"c":true},{"a":46209,"n":"ptr_display_list_menu_hi","k":"variable","len":1,"c":true},{"a":46210,"n":"display_list_name_entry","k":"table","len":46,"c":true},{"a":46256,"n":"ptr_display_list_name_entry","k":"variable","len":1,"c":true},{"a":46257,"n":"ptr_display_list_name_entry_hi","k":"variable","len":1,"c":true},{"a":46258,"n":"display_list_music_only","k":"table","len":18,"c":true},{"a":46276,"n":"ptr_display_list_music_only","k":"variable","len":1,"c":true},{"a":46277,"n":"icon_sprite_positions_base","k":"table","len":8,"c":true},{"a":46285,"n":"icon_sprite_positions_hi","k":"table","len":8,"c":true},{"a":46293,"n":"icon_colours_base","k":"variable","len":1,"c":true},{"a":46294,"n":"icon_colours","k":"table","len":7,"c":true},{"a":46301,"n":"icon_pointers_base","k":"variable","len":1,"c":true},{"a":46302,"n":"icon_initial_images","k":"table","len":6,"c":true},{"a":46308,"n":"message_sprite_x_base","k":"table","len":8,"c":true},{"a":46316,"n":"message_sprite_y_base","k":"table","len":8,"c":true},{"a":46324,"n":"message_sprite_colours_base","k":"table","len":8,"c":true},{"a":46332,"n":"message_sprite_images_base","k":"table","len":8,"c":true},{"a":46340,"n":"cauldron_band_positions_base","k":"table","len":8,"c":true},{"a":46348,"n":"cauldron_band_positions_hi","k":"table","len":8,"c":true},{"a":46356,"n":"cauldron_band_colours_base","k":"variable","len":1,"c":true},{"a":46357,"n":"level_number_colour","k":"table","len":5,"c":true},{"a":46362,"n":"target_colour","k":"variable","len":2,"c":true},{"a":46364,"n":"cauldron_band_images_base","k":"variable","len":2,"c":true},{"a":46366,"n":"red_cauldron_image","k":"table","len":6,"c":true},{"a":46372,"n":"landscape_sprite_images_base","k":"variable","len":1,"c":true},{"a":46373,"n":"wizball_image","k":"variable","len":1,"c":true},{"a":46374,"n":"cat_image","k":"variable","len":1,"c":true},{"a":46375,"n":"sprite2_image","k":"variable","len":1,"c":true},{"a":46376,"n":"sprite3_image","k":"variable","len":1,"c":true},{"a":46377,"n":"sprite4_image","k":"table","len":4,"c":true},{"a":46381,"n":"tbl_unreferenced_directions","k":"table","len":16,"c":true},{"a":46397,"n":"tbl_icon_pulse","k":"table","len":12,"c":true},{"a":46409,"n":"tbl_icon_handlers","k":"variable","len":1,"c":true},{"a":46410,"n":"tbl_icon_handlers_hi","k":"table","len":15,"c":true},{"a":46425,"n":"tbl_unreferenced_b559","k":"table","len":23,"c":true},{"a":46448,"n":"title_logo_positions_base","k":"table","len":10,"c":true},{"a":46458,"n":"title_best_score_positions_base","k":"table","len":15,"c":true},{"a":46473,"n":"nmi_heartbeat_decrement","k":"routine","len":8,"c":true},{"a":46481,"n":"font_large_map","k":"table","len":58,"c":true},{"a":46539,"n":"tbl_pulse_red","k":"table","len":12,"c":true},{"a":46551,"n":"tbl_pulse_green","k":"table","len":8,"c":true},{"a":46559,"n":"tbl_pulse_blue","k":"table","len":8,"c":true},{"a":46567,"n":"tbl_title_cycle_green","k":"table","len":8,"c":true},{"a":46575,"n":"tbl_title_cycle_blue","k":"table","len":4,"c":true},{"a":46579,"n":"tbl_title_cycle_brown","k":"table","len":8,"c":true},{"a":46587,"n":"tbl_title_cycle_long","k":"table","len":26,"c":true},{"a":46613,"n":"vector_check_base","k":"table","len":7,"c":true},{"a":46620,"n":"tbl_rainbow","k":"table","len":15,"c":true},{"a":46635,"n":"tile_graphics_address","k":"variable","len":1,"c":true},{"a":46636,"n":"tile_graphics_address_hi","k":"variable","len":1,"c":true},{"a":46637,"n":"hardware_vectors_source","k":"table","len":6,"c":true},{"a":46643,"n":"text_mega_display","k":"table","len":53,"c":true},{"a":46696,"n":"text_few_words","k":"table","len":24,"c":true},{"a":46720,"n":"text_wizard_feline","k":"table","len":19,"c":true},{"a":46739,"n":"text_wizball_logo","k":"table","len":8,"c":true},{"a":46747,"n":"text_best_message","k":"table","len":14,"c":true},{"a":46761,"n":"best_message_base","k":"variable","len":1,"c":true},{"a":46762,"n":"best_message","k":"table","len":12,"c":true},{"a":46774,"n":"text_player_menu","k":"table","len":101,"c":true},{"a":46875,"n":"tbl_get_ready_pages","k":"variable","len":1,"c":true},{"a":46876,"n":"tbl_get_ready_pages_hi","k":"table","len":31,"c":true},{"a":46907,"n":"text_get_ready","k":"table","len":14,"c":true},{"a":46921,"n":"text_wizard_press_fire","k":"table","len":23,"c":true},{"a":46944,"n":"text_ready_player_one","k":"table","len":27,"c":true},{"a":46971,"n":"text_ready_team_one","k":"table","len":34,"c":true},{"a":47005,"n":"text_ready_player_two","k":"table","len":27,"c":true},{"a":47032,"n":"text_ready_team_two","k":"table","len":34,"c":true},{"a":47066,"n":"ptr_text_logo","k":"variable","len":1,"c":true},{"a":47067,"n":"ptr_text_logo_hi","k":"variable","len":1,"c":true},{"a":47068,"n":"ptr_text_best_score","k":"variable","len":1,"c":true},{"a":47069,"n":"ptr_text_best_score_hi","k":"variable","len":1,"c":true},{"a":47070,"n":"ptr_text_best_message","k":"variable","len":1,"c":true},{"a":47071,"n":"ptr_text_best_message_hi","k":"variable","len":1,"c":true},{"a":47072,"n":"ptr_text_player_menu","k":"variable","len":1,"c":true},{"a":47073,"n":"ptr_text_player_menu_hi","k":"variable","len":1,"c":true},{"a":47074,"n":"ptr_text_mega_display","k":"variable","len":1,"c":true},{"a":47075,"n":"ptr_text_mega_display_hi","k":"variable","len":1,"c":true},{"a":47076,"n":"ptr_text_few_words","k":"variable","len":1,"c":true},{"a":47077,"n":"ptr_text_few_words_hi","k":"variable","len":1,"c":true},{"a":47078,"n":"ptr_text_wizard_feline","k":"variable","len":1,"c":true},{"a":47079,"n":"ptr_text_wizard_feline_hi","k":"variable","len":1,"c":true},{"a":47080,"n":"text_colour_completed","k":"table","len":43,"c":true},{"a":47123,"n":"text_congratulations","k":"table","len":19,"c":true},{"a":47142,"n":"text_bonus_tally","k":"table","len":27,"c":true},{"a":47169,"n":"tally_hundreds","k":"variable","len":1,"c":true},{"a":47170,"n":"tally_tens","k":"variable","len":1,"c":true},{"a":47171,"n":"tally_units","k":"table","len":3,"c":true},{"a":47174,"n":"text_wot_a_wizace","k":"table","len":18,"c":true},{"a":47192,"n":"text_level_completed","k":"table","len":6,"c":true},{"a":47198,"n":"level_completed_digit","k":"table","len":12,"c":true},{"a":47210,"n":"ptr_text_level_completed","k":"variable","len":1,"c":true},{"a":47211,"n":"ptr_text_level_completed_hi","k":"variable","len":1,"c":true},{"a":47212,"n":"ptr_text_wot_a_wizace","k":"variable","len":1,"c":true},{"a":47213,"n":"ptr_text_wot_a_wizace_hi","k":"variable","len":1,"c":true},{"a":47214,"n":"tbl_wiztips_display_lists","k":"variable","len":1,"c":true},{"a":47215,"n":"tbl_wiztips_display_lists_hi","k":"table","len":5,"c":true},{"a":47220,"n":"bonus_stage","k":"variable","len":1,"c":true},{"a":47221,"n":"tbl_alien_fade","k":"table","len":8,"c":true},{"a":47229,"n":"tbl_flash_colours","k":"table","len":4,"c":true},{"a":47233,"n":"tbl_beam_colours","k":"table","len":4,"c":true},{"a":47237,"n":"tbl_bullet_colours","k":"table","len":8,"c":true},{"a":47245,"n":"rings_colour_timer","k":"variable","len":1,"c":true},{"a":47246,"n":"rings_colour_step","k":"variable","len":1,"c":true},{"a":47247,"n":"hud_flash_timer","k":"variable","len":1,"c":true},{"a":47248,"n":"hud_flash_step","k":"variable","len":1,"c":true},{"a":47249,"n":"tbl_star_pixels","k":"table","len":16,"c":true},{"a":47265,"n":"tbl_star_speeds","k":"table","len":32,"c":true},{"a":47297,"n":"tbl_spray_shots","k":"variable","len":1,"c":true},{"a":47298,"n":"tbl_spray_shots_dy","k":"variable","len":1,"c":true},{"a":47299,"n":"tbl_spray_shots_char","k":"table","len":16,"c":true},{"a":47315,"n":"tbl_shot_chars","k":"table","len":8,"c":true},{"a":47323,"n":"beam_timer","k":"variable","len":1,"c":true},{"a":47324,"n":"beam_phase","k":"variable","len":1,"c":true},{"a":47325,"n":"beam_colour_step","k":"variable","len":1,"c":true},{"a":47326,"n":"beam_image_upper","k":"variable","len":1,"c":true},{"a":47327,"n":"beam_image_lower","k":"variable","len":1,"c":true},{"a":47328,"n":"beam_colour","k":"variable","len":1,"c":true},{"a":47329,"n":"tbl_bullet_chars","k":"table","len":16,"c":true},{"a":47345,"n":"music_voices","k":"variable","len":1,"c":true},{"a":47346,"n":"music_speed","k":"variable","len":1,"c":true},{"a":47347,"n":"music_tick_4x_b","k":"routine","len":9,"c":true},{"a":47356,"n":"music_tick_2x","k":"routine","len":7,"c":true},{"a":47363,"n":"music_tick_4x_a","k":"routine","len":9,"c":true},{"a":47372,"n":"sound_frame","k":"routine","len":65,"c":true},{"a":47397,"n":"b_B925","k":"branch","len":1,"c":false},{"a":47418,"n":"b_B93A","k":"branch","len":1,"c":false},{"a":47436,"n":"r_B94C","k":"branch","len":1,"c":false},{"a":47437,"n":"music_filter_mode","k":"variable","len":1,"c":true},{"a":47438,"n":"sfx_update_all_voices","k":"routine","len":7,"c":true},{"a":47445,"n":"sfx_update_voices_2_1","k":"routine","len":11,"c":true},{"a":47456,"n":"sfx_update_voice","k":"routine","len":282,"c":true},{"a":47469,"n":"b_B96D","k":"branch","len":1,"c":false},{"a":47492,"n":"b_B984","k":"branch","len":1,"c":false},{"a":47510,"n":"b_B996","k":"branch","len":1,"c":false},{"a":47528,"n":"b_B9A8","k":"branch","len":1,"c":false},{"a":47541,"n":"b_B9B5","k":"branch","len":1,"c":false},{"a":47559,"n":"b_B9C7","k":"branch","len":1,"c":false},{"a":47572,"n":"j_B9D4","k":"branch","len":1,"c":false},{"a":47595,"n":"b_B9EB","k":"branch","len":1,"c":false},{"a":47613,"n":"b_B9FD","k":"branch","len":1,"c":false},{"a":47631,"n":"b_BA0F","k":"branch","len":1,"c":false},{"a":47644,"n":"b_BA1C","k":"branch","len":1,"c":false},{"a":47662,"n":"b_BA2E","k":"branch","len":1,"c":false},{"a":47675,"n":"j_BA3B","k":"branch","len":1,"c":false},{"a":47722,"n":"b_BA6A","k":"branch","len":1,"c":false},{"a":47730,"n":"j_BA72","k":"branch","len":1,"c":false},{"a":47735,"n":"b_BA77","k":"branch","len":1,"c":false},{"a":47738,"n":"sfx_voice_offsets_base","k":"routine","len":1,"c":true},{"a":47739,"n":"tbl_sfx_voice_offsets","k":"table","len":6,"c":true},{"a":47745,"n":"firing_volume","k":"variable","len":1,"c":true},{"a":47746,"n":"adjust_firing_volume","k":"routine","len":43,"c":true},{"a":47763,"n":"b_BA93","k":"branch","len":1,"c":false},{"a":47775,"n":"b_BA9F","k":"branch","len":1,"c":false},{"a":47789,"n":"silence_sid","k":"routine","len":29,"c":true},{"a":47793,"n":"b_BAB1","k":"branch","len":1,"c":false},{"a":47818,"n":"tbl_sfx_records","k":"variable","len":1,"c":true},{"a":47819,"n":"tbl_sfx_records_hi","k":"table","len":55,"c":true},{"a":47874,"n":"sfx_requested","k":"variable","len":1,"c":true},{"a":47875,"n":"fire_sound_alternate","k":"variable","len":1,"c":true},{"a":47876,"n":"bonus_loop_marker","k":"variable","len":1,"c":true},{"a":47877,"n":"bonus_wait_count","k":"variable","len":1,"c":true},{"a":47878,"n":"bonus_script_pos","k":"variable","len":1,"c":true},{"a":47879,"n":"borewiz","k":"table","len":5,"c":true},{"a":47884,"n":"bonus_music_toggle","k":"variable","len":1,"c":true},{"a":47885,"n":"text_stale_wiztips_three","k":"table","len":147,"c":true},{"a":48032,"n":"hiscore_insert_scores","k":"routine","len":131,"c":true},{"a":48043,"n":"b_BBAB","k":"branch","len":1,"c":false},{"a":48045,"n":"b_BBAD","k":"branch","len":1,"c":false},{"a":48097,"n":"b_BBE1","k":"branch","len":1,"c":false},{"a":48099,"n":"b_BBE3","k":"branch","len":1,"c":false},{"a":48133,"n":"b_BC05","k":"branch","len":1,"c":false},{"a":48135,"n":"b_BC07","k":"branch","len":1,"c":false},{"a":48147,"n":"b_BC13","k":"branch","len":1,"c":false},{"a":48150,"n":"b_BC16","k":"branch","len":1,"c":false},{"a":48154,"n":"b_BC1A","k":"branch","len":1,"c":false},{"a":48156,"n":"b_BC1C","k":"branch","len":1,"c":false},{"a":48163,"n":"hiscore_sort_table","k":"routine","len":68,"c":true},{"a":48167,"n":"b_BC27","k":"branch","len":1,"c":false},{"a":48174,"n":"b_BC2E","k":"branch","len":1,"c":false},{"a":48186,"n":"b_BC3A","k":"branch","len":1,"c":false},{"a":48190,"n":"b_BC3E","k":"branch","len":1,"c":false},{"a":48202,"n":"r_BC4A","k":"branch","len":1,"c":false},{"a":48203,"n":"b_BC4B","k":"branch","len":1,"c":false},{"a":48210,"n":"b_BC52","k":"branch","len":1,"c":false},{"a":48231,"n":"hiscore_rank_team_side2","k":"routine","len":41,"c":true},{"a":48250,"n":"b_BC7A","k":"branch","len":1,"c":false},{"a":48254,"n":"b_BC7E","k":"branch","len":1,"c":false},{"a":48262,"n":"b_BC86","k":"branch","len":1,"c":false},{"a":48272,"n":"hiscore_find_ranks","k":"routine","len":162,"c":true},{"a":48280,"n":"b_BC98","k":"branch","len":1,"c":false},{"a":48294,"n":"j_BCA6","k":"branch","len":1,"c":false},{"a":48305,"n":"j_BCB1","k":"branch","len":1,"c":false},{"a":48311,"n":"b_BCB7","k":"branch","len":1,"c":false},{"a":48330,"n":"b_BCCA","k":"branch","len":1,"c":false},{"a":48334,"n":"b_BCCE","k":"branch","len":1,"c":false},{"a":48342,"n":"b_BCD6","k":"branch","len":1,"c":false},{"a":48352,"n":"b_BCE0","k":"branch","len":1,"c":false},{"a":48371,"n":"b_BCF3","k":"branch","len":1,"c":false},{"a":48375,"n":"b_BCF7","k":"branch","len":1,"c":false},{"a":48383,"n":"b_BCFF","k":"branch","len":1,"c":false},{"a":48393,"n":"b_BD09","k":"branch","len":1,"c":false},{"a":48412,"n":"b_BD1C","k":"branch","len":1,"c":false},{"a":48416,"n":"b_BD20","k":"branch","len":1,"c":false},{"a":48424,"n":"b_BD28","k":"branch","len":1,"c":false},{"a":48434,"n":"hiscore_store_name","k":"routine","len":70,"c":true},{"a":48438,"n":"b_BD36","k":"branch","len":1,"c":false},{"a":48452,"n":"b_BD44","k":"branch","len":1,"c":false},{"a":48454,"n":"b_BD46","k":"branch","len":1,"c":false},{"a":48480,"n":"b_BD60","k":"branch","len":1,"c":false},{"a":48499,"n":"b_BD73","k":"branch","len":1,"c":false},{"a":48504,"n":"hiscore_build_column","k":"routine","len":30,"c":true},{"a":48508,"n":"b_BD7C","k":"branch","len":1,"c":false},{"a":48512,"n":"b_BD80","k":"branch","len":1,"c":false},{"a":48534,"n":"hiscore_copy_best","k":"routine","len":15,"c":true},{"a":48536,"n":"b_BD98","k":"branch","len":1,"c":false},{"a":48549,"n":"hiscore_best_table","k":"variable","len":1,"c":true},{"a":48550,"n":"tbl_hiscore_offsets","k":"table","len":19,"c":true},{"a":48569,"n":"hiscore_tables","k":"table","len":7,"c":true},{"a":48576,"n":"hiscore_names_base","k":"table","len":7,"c":true},{"a":48583,"n":"hiscore_entry1","k":"table","len":98,"c":true},{"a":48681,"n":"hiscore_spare1","k":"variable","len":1,"c":true},{"a":48682,"n":"hiscore_spare1_plus1","k":"table","len":13,"c":true},{"a":48695,"n":"hiscore_team_top","k":"table","len":7,"c":true},{"a":48702,"n":"hiscore_team_names","k":"table","len":119,"c":true},{"a":48821,"n":"text_hiscore_page","k":"table","len":42,"c":true},{"a":48863,"n":"hiscore_page_rows","k":"table","len":241,"c":true},{"a":49104,"n":"hiscore_jump_insert","k":"routine","len":3,"c":true},{"a":49107,"n":"hiscore_jump_store_name","k":"routine","len":1,"c":true},{"a":49108,"n":"score_digits_base","k":"routine","len":1,"c":true},{"a":49109,"n":"side_flags_base","k":"routine","len":1,"c":true},{"a":49110,"n":"side1_team","k":"variable","len":1,"c":true},{"a":49111,"n":"side2_team","k":"variable","len":1,"c":true},{"a":49112,"n":"sides","k":"variable","len":1,"c":true},{"a":49113,"n":"side_playing","k":"variable","len":1,"c":true},{"a":49114,"n":"side1_score_overflow","k":"variable","len":1,"c":true},{"a":49115,"n":"side1_score","k":"table","len":6,"c":true},{"a":49121,"n":"side2_score_overflow","k":"variable","len":1,"c":true},{"a":49122,"n":"side2_score","k":"table","len":6,"c":true},{"a":49128,"n":"text_best_score","k":"variable","len":2,"c":true},{"a":49130,"n":"best_score_digits_base","k":"variable","len":1,"c":true},{"a":49131,"n":"best_score_digits","k":"table","len":7,"c":true},{"a":49138,"n":"rank_side1","k":"variable","len":1,"c":true},{"a":49139,"n":"rank_side2","k":"variable","len":1,"c":true},{"a":49140,"n":"hiscore_name_buffer","k":"table","len":3,"c":true},{"a":49143,"n":"name_buffer_cat_base","k":"table","len":7,"c":true},{"a":49150,"n":"ptr_text_hiscore_page","k":"variable","len":1,"c":true},{"a":49151,"n":"ptr_text_hiscore_page_hi","k":"variable","len":1,"c":true},{"a":49152,"n":"sprites_icons_0_4","k":"table","len":320,"c":true},{"a":49472,"n":"sprite_blank_5","k":"table","len":33,"c":true},{"a":49505,"n":"sprite_blank_5_dot","k":"table","len":31,"c":true},{"a":49536,"n":"sprites_icons_6_11","k":"table","len":384,"c":true},{"a":49920,"n":"sprite_ring_12","k":"table","len":64,"c":true},{"a":49984,"n":"sprites_catelite_13_15","k":"table","len":192,"c":true},{"a":50176,"n":"sprites_wizball_spin_16_31","k":"table","len":1024,"c":true},{"a":51200,"n":"sprites_wizball_appear_32_47","k":"table","len":1024,"c":true},{"a":52224,"n":"sprites_wizball_appear_48_55","k":"table","len":511,"c":true},{"a":52735,"n":"cauldron_empty_minus_1","k":"variable","len":1,"c":true},{"a":52736,"n":"sprite_cauldron_empty","k":"variable","len":1,"c":true},{"a":52737,"n":"sprite_cauldron_empty_b1","k":"variable","len":1,"c":true},{"a":52738,"n":"sprite_cauldron_empty_b2","k":"table","len":62,"c":true},{"a":52800,"n":"sprite_cauldron_full","k":"table","len":63,"c":true},{"a":52863,"n":"pipe_left_minus_1","k":"variable","len":1,"c":true},{"a":52864,"n":"sprite_pipe_left","k":"table","len":63,"c":true},{"a":52927,"n":"pipe_right_minus_1","k":"variable","len":1,"c":true},{"a":52928,"n":"sprite_pipe_right","k":"table","len":64,"c":true},{"a":52992,"n":"sprites_60_63","k":"table","len":255,"c":true},{"a":53247,"n":"vic_regs_minus_1","k":"variable","len":1,"c":true},{"a":53248,"n":"sprites_beam_arcs","k":"table","len":384,"c":true},{"a":53632,"n":"sprites_police_ship","k":"table","len":256,"c":true},{"a":53888,"n":"sprites_unused_4a_4b","k":"table","len":128,"c":true},{"a":54016,"n":"sprites_molecule","k":"table","len":256,"c":true},{"a":54272,"n":"sprites_droplet","k":"table","len":192,"c":true},{"a":54464,"n":"sprites_splash","k":"table","len":576,"c":true},{"a":55040,"n":"sprites_explosion","k":"table","len":256,"c":true},{"a":55296,"n":"sprite_bonus_tally","k":"table","len":64,"c":true},{"a":55360,"n":"sprite_alien_16","k":"table","len":64,"c":true},{"a":55424,"n":"sprite_alien_15","k":"table","len":64,"c":true},{"a":55488,"n":"sprites_unused_63_64","k":"table","len":128,"c":true},{"a":55616,"n":"sprites_alien_12","k":"table","len":192,"c":true},{"a":55808,"n":"sprites_lab_wiz","k":"table","len":448,"c":true},{"a":56256,"n":"sprite_lab_cat","k":"table","len":64,"c":true},{"a":56320,"n":"sprite_bonus_cross_ball","k":"table","len":64,"c":true},{"a":56384,"n":"sprite_bonus_textured_ball","k":"table","len":64,"c":true},{"a":56448,"n":"sprites_dart","k":"table","len":384,"c":true},{"a":56832,"n":"sprite_pearl","k":"table","len":64,"c":true},{"a":56896,"n":"sprites_colour_sphere","k":"table","len":320,"c":true},{"a":57216,"n":"sprite_lab_cat_2","k":"table","len":64,"c":true},{"a":57280,"n":"sprite_unused_7f","k":"table","len":64,"c":true},{"a":58304,"n":"player1_save","k":"table","len":23,"c":true},{"a":58327,"n":"player2_save_minus_1","k":"variable","len":1,"c":true},{"a":58328,"n":"player2_save","k":"table","len":24,"c":true},{"a":59290,"n":"scroll_column","k":"variable","len":1,"c":true},{"a":59291,"n":"scroll_column_row4","k":"variable","len":1,"c":true},{"a":59292,"n":"scroll_column_row5","k":"variable","len":1,"c":true},{"a":59293,"n":"scroll_column_row6","k":"variable","len":1,"c":true},{"a":59294,"n":"scroll_column_row7","k":"variable","len":1,"c":true},{"a":59295,"n":"scroll_column_rows8_12","k":"table","len":4,"c":true},{"a":59299,"n":"scroll_column_row12","k":"variable","len":1,"c":true},{"a":59300,"n":"scroll_column_rows13_17","k":"table","len":4,"c":true},{"a":59304,"n":"scroll_column_row17","k":"variable","len":1,"c":true},{"a":59305,"n":"scroll_column_rows18_22","k":"table","len":5,"c":true},{"a":59332,"n":"vic_shadow_spr0_x","k":"variable","len":1,"c":true},{"a":59333,"n":"vic_shadow_spr0_y","k":"variable","len":1,"c":true},{"a":59334,"n":"vic_shadow_spr1_x","k":"variable","len":1,"c":true},{"a":59335,"n":"vic_shadow_spr1_y","k":"variable","len":1,"c":true},{"a":59336,"n":"vic_shadow_spr2_x","k":"variable","len":1,"c":true},{"a":59337,"n":"vic_shadow_spr2_y","k":"variable","len":1,"c":true},{"a":59338,"n":"vic_shadow_spr3_x","k":"variable","len":1,"c":true},{"a":59339,"n":"vic_shadow_spr3_y","k":"variable","len":1,"c":true},{"a":59340,"n":"vic_shadow_spr4_x","k":"variable","len":1,"c":true},{"a":59341,"n":"vic_shadow_spr4_y","k":"table","len":7,"c":true},{"a":59348,"n":"vic_shadow_x_msb","k":"table","len":5,"c":true},{"a":59353,"n":"vic_shadow_sprite_on","k":"variable","len":2,"c":true},{"a":59355,"n":"vic_shadow_y_expand","k":"table","len":4,"c":true},{"a":59359,"n":"vic_shadow_priority","k":"variable","len":1,"c":true},{"a":59360,"n":"vic_shadow_multicolour","k":"table","len":9,"c":true},{"a":59369,"n":"vic_shadow_spr_mc0","k":"variable","len":1,"c":true},{"a":59370,"n":"vic_shadow_spr_mc1","k":"variable","len":1,"c":true},{"a":59371,"n":"vic_shadow_spr0_colour","k":"variable","len":1,"c":true},{"a":59372,"n":"vic_shadow_spr1_colour","k":"variable","len":1,"c":true},{"a":59373,"n":"vic_shadow_spr2_colour","k":"variable","len":1,"c":true},{"a":59374,"n":"vic_shadow_spr3_colour","k":"variable","len":1,"c":true},{"a":59375,"n":"vic_shadow_spr4_colour","k":"table","len":4,"c":true},{"a":60314,"n":"menu_stars","k":"variable","len":1,"c":true},{"a":60315,"n":"menu_star_x_frac","k":"variable","len":1,"c":true},{"a":60316,"n":"menu_star_y","k":"variable","len":1,"c":true},{"a":60317,"n":"menu_star_y_frac","k":"variable","len":1,"c":true},{"a":60318,"n":"menu_star_x_speed","k":"variable","len":1,"c":true},{"a":60319,"n":"menu_star_y_speed","k":"table","len":18,"c":true},{"a":60337,"n":"title_colours_minus_1","k":"variable","len":1,"c":true},{"a":60338,"n":"logo_bar_delay","k":"variable","len":1,"c":true},{"a":60339,"n":"colours_d7_delay","k":"variable","len":1,"c":true},{"a":60340,"n":"colours_e4_delay","k":"variable","len":1,"c":true},{"a":60341,"n":"colours_d2_delay","k":"variable","len":2,"c":true},{"a":60343,"n":"colours_e4_step","k":"variable","len":1,"c":true},{"a":60344,"n":"colours_d7_step","k":"variable","len":1,"c":true},{"a":60345,"n":"colours_d1_step","k":"variable","len":1,"c":true},{"a":60346,"n":"colours_d1_delay","k":"variable","len":1,"c":true},{"a":60347,"n":"colours_d2_step","k":"variable","len":1,"c":true},{"a":60348,"n":"colours_f1_delay","k":"variable","len":1,"c":true},{"a":60349,"n":"colours_f1_step","k":"variable","len":1,"c":true},{"a":60350,"n":"colours_f2_delay","k":"variable","len":1,"c":true},{"a":60351,"n":"colours_f2_step","k":"variable","len":1,"c":true},{"a":60352,"n":"logo_bar_step","k":"variable","len":1,"c":true},{"a":60353,"n":"logo_bar","k":"variable","len":1,"c":true},{"a":60354,"n":"logo_bar_2","k":"table","len":7,"c":true},{"a":60361,"n":"logo_bar_mid","k":"variable","len":1,"c":true},{"a":60362,"n":"logo_bar_mid2","k":"table","len":7,"c":true},{"a":60369,"n":"title_band_bg","k":"variable","len":1,"c":true},{"a":60370,"n":"colours_d2","k":"variable","len":1,"c":true},{"a":60371,"n":"colours_d3","k":"variable","len":2,"c":true},{"a":60373,"n":"colours_d5","k":"variable","len":1,"c":true},{"a":60374,"n":"colours_d6","k":"variable","len":1,"c":true},{"a":60375,"n":"colours_d7","k":"variable","len":1,"c":true},{"a":60376,"n":"colours_d8","k":"variable","len":1,"c":true},{"a":60377,"n":"colours_d9","k":"variable","len":1,"c":true},{"a":60378,"n":"colours_da","k":"table","len":9,"c":true},{"a":60387,"n":"colours_e3","k":"variable","len":1,"c":true},{"a":60388,"n":"colours_e4","k":"variable","len":1,"c":true},{"a":60389,"n":"colours_e5","k":"table","len":11,"c":true},{"a":60400,"n":"colours_f0","k":"variable","len":1,"c":true},{"a":60401,"n":"colours_f1","k":"variable","len":1,"c":true},{"a":60402,"n":"colours_f2","k":"variable","len":1,"c":true},{"a":60403,"n":"title_clock","k":"variable","len":1,"c":true},{"a":60416,"n":"init_stage1","k":"routine","len":32,"c":true},{"a":60419,"n":"b_EC03","k":"branch","len":1,"c":false},{"a":60448,"n":"init_zp_routine","k":"table","len":12,"c":true},{"a":60460,"n":"init_stage2","k":"routine","len":3,"c":true},{"a":60463,"n":"init_stage2_op_lo","k":"routine","len":1,"c":true},{"a":60464,"n":"init_stage2_op_hi","k":"routine","len":1,"c":true},{"a":60465,"n":"init_stage2_steps","k":"routine","len":131,"c":true},{"a":60493,"n":"b_EC4D","k":"branch","len":1,"c":false},{"a":60509,"n":"b_EC5D","k":"branch","len":1,"c":false},{"a":60529,"n":"b_EC71","k":"branch","len":1,"c":false},{"a":60547,"n":"b_EC83","k":"branch","len":1,"c":false},{"a":60560,"n":"b_EC90","k":"branch","len":1,"c":false},{"a":60561,"n":"init_jump_ptr","k":"branch","len":1,"c":false},{"a":60596,"n":"init_stale_tail","k":"table","len":55,"c":true},{"a":61440,"n":"font_small_glyphs_00_1f","k":"table","len":256,"c":true},{"a":61696,"n":"font_small_glyphs_20_33","k":"table","len":160,"c":true},{"a":61856,"n":"font_small_glyphs_34_3f","k":"table","len":96,"c":true},{"a":61952,"n":"font_large_a_p","k":"table","len":512,"c":true},{"a":62464,"n":"font_large_q_z","k":"table","len":160,"c":true},{"a":62624,"n":"font_large_logo_digits","k":"table","len":592,"c":true},{"a":63216,"n":"font_large_flag_bottoms","k":"table","len":263,"c":true},{"a":63479,"n":"bottom_ptrs_minus_1","k":"variable","len":1,"c":true},{"a":63488,"n":"glyphs_play_blank","k":"table","len":8,"c":true},{"a":64216,"n":"glyphs_blocks_5b_7f","k":"table","len":296,"c":true},{"a":64512,"n":"glyphs_ground_80_9f","k":"table","len":256,"c":true},{"a":65530,"n":"vector_nmi","k":"variable","len":2,"c":true},{"a":65532,"n":"vector_reset","k":"variable","len":2,"c":true},{"a":65534,"n":"vector_irq","k":"variable","len":2,"c":true}],"records":[{"a":0,"l":"cpu_port_ddr","c":"6510 data-direction register. The traced code never writes it. Six self-modified calls carry $0000 as the placeholder operand that their real target replaces before they run: JMP $7316 (the icon handler, from $B549), JSR $7C9D (the raster band routine, from the display list), JSR $83D0 and JSR $83E1 (bounce handlers, from $B3BE), JSR $A6CB and JMP $A6DC (alien bounces, from $B28C). A flow trace that follows them marks zero page as code.","t":"byte","b":[126],"x":[29462,31901,33744,33761,42699,42716,65530,65532,65534]},{"a":1,"l":"cpu_port","c":"6510 processor port. The game's entry at $6389 writes $35 (RAM at $A000-$BFFF and $E000-$FFFF, I/O at $D000) and no other traced instruction, nor any byte pattern STA/STX/STY $01 in the image, writes it again.","t":"byte","b":[1,0,170],"x":[25483]},{"a":4,"l":"music_v1_track_lo","c":"Music, voice 1: the track pointer, low byte (with $05). load_tune sets it from the tune record ($4806); v1_next_event ($4D5B) reads the voice's events through ($04),Y and steps it on; calls, jumps, loop ends and returns replace it ($4916, $49BA, $49FC, $4A16).","t":"byte","b":[177],"x":[18438,18692,18704,18708,18710,18723,18728,18737,18742,18753,18759,18773,18793,18799,18822,18832,18847,18868,18872,18874,18923,18940,18966,18978,18996,19806,19808,19814,19826,20075,20092,20094]},{"a":5,"l":"music_v1_track_hi","c":"Voice 1 track pointer, high byte (set at $480B, carried into at $4D57).","t":"byte","b":[145],"x":[18443,18698,18712,18828,18876,18942,18968,19799,20099]},{"a":6,"l":"music_v2_track_lo","c":"Music, voice 2: the track pointer, low byte (with $07), read through ($06),Y by the voice 2 commands and event reader ($4A5C-$4B3B, $4E93).","t":"byte","b":[179],"x":[19024,19036,19040,19042,19055,19060,19069,19075,19087,19093,19105,19111,19135,19145,19161,19183,19187,19189,19210,19229,19255,19274,19285,20118,20120,20126,20138,20410,20427,20429]},{"a":7,"l":"music_v2_track_hi","c":"Voice 2 track pointer, high byte ($4A64, $4AF7, $4B1F, $4B39; carried into at $4E8F).","t":"byte","b":[34],"x":[19030,19044,19141,19191,19231,19257,20111,20434]},{"a":8,"l":"music_v3_track_lo","c":"Music, voice 3: the track pointer, low byte (with $09), read through ($08),Y by the voice 3 commands and event reader ($4B7F-$4C88, $4FE2).","t":"byte","b":[34],"x":[19313,19327,19331,19333,19346,19351,19360,19365,19376,19381,19394,19414,19420,19443,19455,19471,19489,19493,19495,19533,19553,19580,19592,19622,20453,20455,20461,20473,20697,20714,20716]},{"a":9,"l":"music_v3_track_hi","c":"Voice 3 track pointer, high byte ($4B87, $4C29, $4C63, $4C7E; carried into at $4FDE).","t":"byte","b":[0],"x":[19320,19335,19450,19497,19555,19582,20446,20721]},{"a":10,"l":"music_v1_note_time","c":"Voice 1: ticks left of the current note, set by v1_set_duration ($4E69) from the byte after the note, counted down by v1_tick ($4D52), which reads the next event when it runs out; load_tune starts it at 1 ($4824). The gate-off rule for control bit 3 compares it with the gate time ($5100).","t":"byte","b":[0],"x":[18468,19794,20087,20736]},{"a":11,"l":"music_v2_note_time","c":"Voice 2: ticks left of the current note (counted down at $4E8A, set at $4FC6, read by the gate-off at $5275).","t":"byte","b":[76],"x":[20106,20422,21109]},{"a":12,"l":"music_v3_note_time","c":"Voice 3: ticks left of the current note (counted down at $4FD9, set at $50E5, read by the gate-off at $53E1).","t":"byte","b":[0],"x":[20441,20709,21473]},{"a":13,"l":"music_v1_stack_index","c":"Voice 1: index of its call and loop stack (addresses at $E4/$E9 + level, loop counts at $EE + level). load_tune sets 4, empty ($4820); a call ($48FF) or a repeat start ($4981) stores at the index and decrements it; a return ($4A09) or a finished repeat ($4A03) increments it. A return with the index at 4 ends the voice's track ($4A1D: $59 to 0).","t":"byte","b":[0],"x":[18464,18689,18702,18817,18836,18930,18947,18953,18959]},{"a":14,"l":"music_v2_stack_index","c":"Voice 2: index of its call and loop stack (addresses at $F3/$F8 + level, loop counts at $4703 + level), 4 when empty; decremented by a call or repeat start ($4A5A, $4ACE), incremented by a return or finished repeat ($4B24, $4B30).","t":"byte","b":[0],"x":[19021,19034,19130,19150,19218,19236,19242,19248]},{"a":15,"l":"music_v3_stack_index","c":"Voice 3: index of its call and loop stack (addresses at $4708/$470D + level, loop counts at $4712 + level), 4 when empty ($4B7D, $4C04 push; $4C68, $4C74 pop).","t":"byte","b":[4],"x":[19310,19325,19438,19460,19540,19560,19566,19572]},{"a":16,"l":"music_v1_transpose","c":"Voice 1: transpose, added to each note byte before the frequency lookup ($4D86) and to an arpeggio's base note ($4E55). Set by the commands $C6, $C8 and $D8 ($48F9, $49B1, $4A2A); load_tune sets 0 ($4816).","t":"byte","b":[0],"x":[18454,18681,18865,18986,19846,20053]},{"a":17,"l":"music_v2_transpose","c":"Voice 2: transpose (set at $4A45, $4AEC, $4B41; added at $4EBE and $4FA2).","t":"byte","b":[0],"x":[19013,19180,19265,20158,20386]},{"a":18,"l":"music_v3_transpose","c":"Voice 3: transpose (set at $4B66, $4C9C; added at $500D and $50C6).","t":"byte","b":[0],"x":[19302,19612,20493,20678]},{"a":19,"l":"music_ptr_lo","c":"Music driver scratch pointer, low byte (with $14): the machine code that command $D6 calls (JMP ($0013) at $492C), the source of command $D2's five envelope bytes ($4A3A), an arpeggio's table ($51DB, $549D). A note start also keeps X here across the filter restart ($4D8D-$4D92, $501B-$5020).","t":"byte","b":[0],"x":[18725,18732,18993,19002,19057,19064,19282,19291,19348,19355,19619,19628,19853,19858,20507,20512,20955,20966,21321,21332,21657,21666]},{"a":20,"l":"music_ptr_hi","c":"Music driver scratch pointer, high byte ($492A, $4A36, $4A76, $4B57, $4B99, $4CA8; arpeggio tables at $51E0, $534E, $549D).","t":"byte","b":[18],"x":[18730,18998,19062,19287,19353,19624,20960,21326,21661]},{"a":21,"l":"music_v2_freq_lo","c":"Voice 2: its current frequency while the pitch steps run, low byte (with $16): set from the note's frequency $46D8/$46D9 by restart_v2_pitch ($48C3), stepped and written to $D407/$D408 by v2_pitch_steps ($531E-$53BD).","t":"byte","b":[8],"x":[18627,21278,21437]},{"a":22,"l":"music_v2_freq_hi","c":"Voice 2's current frequency, high byte ($48C5, $5320, $53BF).","t":"byte","b":[25],"x":[18629,21280,21439]},{"a":23,"l":"music_v3_freq_lo","c":"Voice 3: its current frequency while the pitch steps run, low byte (with $18): from the note's frequency $D9/$DA at restart_v3_pitch ($48E4), stepped and written to $D40E/$D40F by v3_pitch_steps ($5477-$54FA).","t":"byte","b":[22],"x":[18660,21623,21754]},{"a":24,"l":"music_v3_freq_hi","c":"Voice 3's current frequency, high byte ($48E6, $5479, $54FC).","t":"byte","b":[0],"x":[18662,21625,21756]},{"a":25,"l":"music_load_y","c":"load_tune scratch: the tune record index, kept across the voice loop ($480D, $4828). The byte after it, $001A, is referenced by no traced instruction.","t":"byte","b":[95,84],"x":[18445,18472]},{"a":27,"l":"music_note_byte","c":"The note byte being started, stored by each voice's note event ($4D7A, $4EB2, $5001) and read back for an arpeggio's base note ($4E4D, $4F9A, $50BE) and by the duration setters to tell a duration code (below $60) from a tick count ($4E6D, $4FBC, $50DB). The byte after it, $001C, is referenced by no traced instruction.","t":"byte","b":[16,0],"x":[19834,20045,20077,20146,20378,20412,20481,20670,20699]},{"a":29,"l":"init_zp_stub","c":"Twelve bytes the initialisation copies here from $EC20 at $EC00: LDA #$35, STA $4B, STA $29, STA $8F, STA $00, PLA, RTI (to $0028). No traced code jumps into $001D-$0028 or reads them afterwards, and the music driver's variables start at $0029; what the stub was for is unknown.","t":"byte","b":[0,0,0,0,0,64,16,179],"x":[60422]},{"a":37,"t":"byte","b":[189,0,0,0]},{"a":41,"l":"music_v1_pulse_lo","c":"Voice 1: its current pulse width, low byte (with $2A): set at the note start ($4DD4) and by set_v1_pulse ($4848), stepped by v1_pulse_sweep and written to $D402/$D403 ($515A-$519D).","t":"byte","b":[0],"x":[18504,19924,20826,20893]},{"a":42,"l":"music_v1_pulse_hi","c":"Voice 1's current pulse width, high byte ($484A, $4DD6, $515C, $519F).","t":"byte","b":[0],"x":[18506,19926,20828,20895]},{"a":43,"l":"music_v2_pulse_lo","c":"Voice 2: its current pulse width, low byte (with $2C), set at $485F and $4F0C, stepped and written to $D409/$D40A ($52C8-$530B).","t":"byte","b":[1],"x":[18527,20236,21192,21259]},{"a":44,"l":"music_v2_pulse_hi","c":"Voice 2's current pulse width, high byte ($4861, $4F0E, $52CA, $530D).","t":"byte","b":[8],"x":[18529,20238,21194,21261]},{"a":45,"l":"music_v3_pulse_lo","c":"Voice 3: its current pulse width, low byte (with $2E), set at $4874 and $505C, stepped and written to $D410/$D411 ($542B-$5465).","t":"byte","b":[167],"x":[18548,20572,21547,21605]},{"a":46,"l":"music_v3_pulse_hi","c":"Voice 3's current pulse width, high byte ($4876, $505E, $542D, $5467).","t":"byte","b":[174],"x":[18550,20574,21549,21607]},{"a":47,"l":"music_v1_freq_lo","c":"Voice 1: its current frequency while the pitch steps run, low byte (with $30): from the note's frequency $46B5/$46B6 at restart_v1_pitch ($48A0), stepped and written to $D400/$D401 by v1_pitch_steps ($51B0-$524F).","t":"byte","b":[167],"x":[18592,20912,21071]},{"a":48,"l":"music_v1_freq_hi","c":"Voice 1's current frequency, high byte ($48A2, $51B2, $5251).","t":"byte","b":[174],"x":[18594,20914,21073]},{"a":49,"l":"music_filter_program","c":"The filter program as command $E0 loads it (16 bytes copied at $495F for voice 1, $4BCC for voice 3), laid out like the working copy at $41 that start_filter_program makes of it ($4D3D): $31-$38 are the four 16-bit cutoff steps.","t":"byte","b":[167,174,0,160,0,160,0,160],"x":[18783,19404,19773]},{"a":57,"l":"music_filter_program_rest","c":"The filter program, continued: $39-$3C the four steps' tick counts, $3D the delay, $3E the mode and $3F/$40 the start cutoff (read at $4D41 by the copy).","t":"byte","b":[48,49,0,0,5,8,0,0],"x":[19777]},{"a":65,"l":"music_filter_step1_lo","c":"Filter sweep, the working copy of the program (copied from $31 at $4D3F whenever the filtered voice starts a note): cutoff step 1, low byte, added by update_filter_sweep at $4CD5.","t":"byte","b":[0],"x":[19669,19775]},{"a":66,"l":"music_filter_step1_hi","c":"Filter sweep: cutoff step 1, high byte ($4CD9).","t":"byte","b":[8],"x":[19673]},{"a":67,"l":"music_filter_step2_lo","c":"Filter sweep: cutoff step 2, low byte ($4CE5).","t":"byte","b":[0],"x":[19685]},{"a":68,"l":"music_filter_step2_hi","c":"Filter sweep: cutoff step 2, high byte ($4CE9).","t":"byte","b":[0],"x":[19689]},{"a":69,"l":"music_filter_step3_lo","c":"Filter sweep: cutoff step 3, low byte ($4CF5).","t":"byte","b":[0],"x":[19701]},{"a":70,"l":"music_filter_step3_hi","c":"Filter sweep: cutoff step 3, high byte ($4CF9).","t":"byte","b":[0],"x":[19705]},{"a":71,"l":"music_filter_step4_lo","c":"Filter sweep: cutoff step 4, low byte ($4D05), also added on each tick of the delay when mode bit 1 is set.","t":"byte","b":[36],"x":[19717]},{"a":72,"l":"music_filter_step4_hi","c":"Filter sweep: cutoff step 4, high byte ($4D09).","t":"byte","b":[0],"x":[19721]},{"a":73,"l":"music_filter_ticks1","c":"Filter sweep: ticks of cutoff step 1, loaded into the counter $53 by reload_filter_counts ($4889).","t":"byte","b":[8],"x":[18569,19779]},{"a":74,"l":"music_filter_ticks2","c":"Filter sweep: ticks of cutoff step 2, loaded into $54 ($488D).","t":"byte","b":[0],"x":[18573]},{"a":75,"l":"music_filter_ticks3","c":"Filter sweep: ticks of cutoff step 3, loaded into $55 ($4891).","t":"byte","b":[0],"x":[18577]},{"a":76,"l":"music_filter_ticks4","c":"Filter sweep: ticks of cutoff step 4, loaded into $56 ($4895).","t":"byte","b":[0],"x":[18581]},{"a":77,"l":"music_filter_delay","c":"Filter sweep: ticks before the cutoff steps begin, counted down at $4CC4.","t":"byte","b":[0],"x":[19648,19652]},{"a":78,"l":"music_filter_sweep_mode","c":"Filter sweep mode: 0 is off (reset_music $47E7, the filter-off commands at $49C2 and $4C2F, and the release end of the filtered voice at $5133); bit 1 adds step 4 during the delay; after the fourth step bit 7 restarts from the start cutoff, bit 0 repeats from the current one, neither holds ($4CB7, $4D27).","t":"byte","b":[0],"x":[18407,18882,19503,19639,19654,19751,20787]},{"a":79,"l":"music_filter_start_lo","c":"Filter sweep: the start cutoff, low byte, where a restarting sweep begins (restart_filter_sweep, $4881).","t":"byte","b":[0],"x":[18561]},{"a":80,"l":"music_filter_start_hi","c":"Filter sweep: the start cutoff, high byte ($4883).","t":"byte","b":[25],"x":[18563]},{"a":81,"l":"music_filter_cutoff_lo","c":"The filter cutoff as it sweeps, low byte (with $52): write_filter_cutoff ($4D10) sends its low three bits to $D415 and the value shifted right three places to $D416.","t":"byte","b":[0],"x":[18565,19643,19724]},{"a":82,"l":"music_filter_cutoff_hi","c":"The sweeping filter cutoff, high byte ($4887, $4CBD, $4D0E).","t":"byte","b":[0],"x":[18567,19645,19726]},{"a":83,"l":"music_filter_left1","c":"Filter sweep: ticks left in cutoff step 1 ($488B, $4CCE, $4CD2).","t":"byte","b":[3],"x":[18571,19662,19666]},{"a":84,"l":"music_filter_left2","c":"Filter sweep: ticks left in cutoff step 2 ($488F, $4CDE, $4CE2).","t":"byte","b":[76],"x":[18575,19678,19682]},{"a":85,"l":"music_filter_left3","c":"Filter sweep: ticks left in cutoff step 3 ($4893, $4CEE, $4CF2).","t":"byte","b":[0],"x":[18579,19694,19698]},{"a":86,"l":"music_filter_left4","c":"Filter sweep: ticks left in cutoff step 4 ($4897, $4CFE, $4D02).","t":"byte","b":[0],"x":[18583,19710,19714]},{"a":87,"l":"music_filter_voice","c":"Which voice the filter program follows: 0 voice 1, 2 voice 3, 3 none (the filter commands at $49CE and $4C3B), $FF none after reset_music ($47EF). A note start on that voice restarts the program ($4D89, $5015); its release end stops the sweep ($512E).","t":"byte","b":[0],"x":[18415,18894,19515,19849,20501,20782,23307,24368]},{"a":88,"l":"music_cutoff_shift","c":"write_filter_cutoff's scratch: the cutoff's low byte with the high byte's bits shifted in, for $D416 ($4D17-$4D20).","t":"byte","b":[0],"x":[19735,19738,19741,19744]},{"a":89,"l":"music_v1_active","c":"Voice 1 active: 1 from load_tune ($4826) until its track ends (the return at stack level 4 decrements it, $4A1D); 0 after reset_music ($47E9). v1_tick does nothing while it is 0 ($4D4E); test_music_playing ORs it in ($5513).","t":"byte","b":[0],"x":[18409,18470,18973,19790,21779]},{"a":90,"l":"music_v2_active","c":"Voice 2 active ($47EB, ended at $4B3E, tested at $4E86 and $5515).","t":"byte","b":[0],"x":[18411,19262,20102,21781]},{"a":91,"l":"music_v3_active","c":"Voice 3 active ($47ED, ended at $4C83, tested at $4FD5, $5517 and by test_music_voice3 at $5522).","t":"byte","b":[0],"x":[18413,19587,20437,21783,21794]},{"a":92,"l":"music_load_voice","c":"load_tune's voice counter, 2 down to 0: voice 3 is set up first ($47FA, $480F, $4830).","t":"byte","b":[0],"x":[18426,18447,18480]},{"a":93,"l":"music_load_offset","c":"load_tune's track pointer offset, 4, 2, 0: the voice's pointer is $04 + this ($47FE, $4801, $482C-$482E).","t":"byte","b":[0],"x":[18430,18433,18476,18478]},{"a":94,"l":"zp_temp_5e","c":"Zero-page scratch shared by many routines, never live across a call: in scan_keyboard ($73F4-$741A) and scan_keys_play the number of the key found pressed (0 for none); the page printer's column ($8D42); the low byte of the glyph pointer when text is drawn into sprites ($8E11, $8E5C); the landscape column fetches ($78CA, $78DC) and the star placer ($9170).","t":"byte","b":[0],"x":[29684,29709,29722,29769,29794,29807,30922,30940,30982,36162,36188,36369,36444,36524,37232,37292,37314,39908,39982,40940,41053,41372,41448,41452,41456,41614,41618,41622,43495,43519,43530,43535,43542,43564,43587,43591,43596,43601,43629]},{"a":95,"l":"zp_temp_5f","c":"Zero-page scratch: the keyboard scanners' row counter ($73FE, $7453), the page printer's row times 8 ($8D4C), loop counts in setup_level_graphics ($77A5) and draw_level_digit_sprite ($7722), sums in build_scroll_buffer ($7822), put_column ($7A43) and spin_to_roll_speed ($81B6).","t":"byte","b":[0],"x":[29694,29718,29779,29803,30498,30556,30629,30641,30754,30775,31299,31309,31648,31658,31660,31665,31677,31685,33206,33208,33213,36172,36181,36526,37228,37238,37309,37311,39913,39997,40956,40958,40972,40977,41041,41072,41370,41443,41609,43500,43540,43605,43634]},{"a":96,"l":"zp_ptr_60","c":"General zero-page pointer, low byte (with $61): the destination of most copies and drawing: shots ($6F77), bullets being erased ($70B3), stars ($7480), the level glyph copy to $FD00 ($77D9), landscape columns ($78EE, $7A4F), the scroll ($7A9D) and the page printer's screen address ($8D62).","t":"byte","b":[0],"x":[28535,28543,28553,28566,28576,28851,28859,28875,29824,29835,29840,29861,29956,30040,30063,30065,30070,30681,30689,30703,30958,30962,30984,31009,31011,31031,31033,31048,31055,31062,31069,31076,31311,31315,31325,31334,31389,31444,31484,31525,31559,31577,31597,31617,31777,31784,31788,31816,31818,33671,33692,33710,33934,33955,34085,34166,35936,35940,35957,35961,36045,36049,36053,36194,36239,36256,36269,36286,36299,36343,36345,36350,36421,36423,36428,36539,36542,36545,36554,36566,36622,36633,36637,36640,36651,36658,36663,37226,37267,37327,37333,39562,39572,39602,39782,39790,39903,39941,39968,39973,39989,39991,40008,40353,40412,40907,41030,42659]},{"a":97,"l":"zp_ptr_61","c":"General zero-page pointer, high byte (with $60); also a loop count or offset in build_scroll_buffer ($7814, $7878: the rows copied per frame) and the get-ready screen's sprite set-up ($68AB-$68D0).","t":"byte","b":[140],"x":[26795,26814,26825,26830,26832,28516,28839,29828,29844,30044,30074,30685,30696,30740,30814,30828,30840,30953,30969,30979,30988,31015,31020,31022,31037,31042,31044,31304,31320,31332,31803,31808,31810,31822,33923,33960,34090,34156,34742,34748,34750,34760,34878,34891,35945,35953,35966,36043,36058,36166,36175,36178,36185,36192,36198,36204,36550,36564,36626,36645,36667,36690,37132,37138,37149,37155,37162,37168,37179,37185,37265,37284,37297,38004,39545,39770,39886,39946,39975,40004,40006,40013,40393,40905,40916,40918,41032,41050,41055,41225,41235,41240,41639,41644]},{"a":98,"l":"zp_ptr_62","c":"General zero-page pointer, low byte (with $63): the source of most copies: the text page for the printers ($8D1F), a level's glyph block from $B31C ($77CE), map rows ($78B4, $78D2), a tube's scenery ($81E7), the effect record in start_sound_effect ($4567), and the colour-RAM address in erase_bullet ($70B1).","t":"byte","b":[0],"x":[17767,17834,17850,28533,28558,28581,28849,28864,28880,30118,30128,30133,30490,30496,30670,30687,30701,30900,30917,30930,30960,33255,33261,33264,33271,36084,36090,36129,36138,36141,36150,36155,36216,36218,36568,36579,36587,36592,36609,36614,36620,39564,39619,39780,39795,39915,39933,40031,40346,40357,40381,40400,40404,40408,40672,40681,40887,40897,40900,41038,41043,41066,41069,41207,41217,41220,41227,41232,41248,41251,41379,41394,41981,41991,42003,42474,42481,42495,42569,42579,42642,42670,42681,43615,43919,43924]},{"a":99,"l":"zp_ptr_63","c":"General zero-page pointer, high byte (with $62); also a counter in scroll_landscape ($7AA4, $7AB9) and advance_scroll_position ($7BE3-$7C08).","t":"byte","b":[0],"x":[28525,28844,30098,30116,30479,30675,30694,30905,30935,30948,31086,31396,31417,31715,31727,31733,31752,31764,31770,33269,36097,36148,36222,36552,36562,36618,36624,39557,39775,40351,40677,40892,41212,41384,41986,42479,42574,43620,44478,44485,44487]},{"a":100,"l":"zp_ptr_64","c":"Zero-page pointer, low byte (with $65): the page printer's colour-RAM address ($8D64, high byte $D8 + row page), the glyph source when text is drawn into sprites ($8E1F, $8E6B: glyph \u00d7 8 into the character set at $F000), and create_alien's record index ($9DC4).","t":"byte","b":[8],"x":[30725,30875,30888,36196,36243,36260,36273,36290,36303,36339,36383,36387,36390,36393,36417,36459,36468,36470,36479,36484,36509,36512,36515,40388,40398,40414,40416,40418]},{"a":101,"l":"zp_ptr_65","c":"Zero-page pointer, high byte (with $64); on its own a counter in the tube sprite moves ($830A, $8334), create_alien ($9DC1) and move_alien ($A3E5).","t":"byte","b":[18],"x":[30796,30863,33546,33583,33588,33641,36210,36399,36521,40385,40420,41957,42007,44771,44776]},{"a":102,"l":"zp_temp_66","c":"Zero-page scratch: port 2's joystick byte as read_joystick_edge ($91FA) leaves it, which the get-ready loop tests for the port choice ($6965); the row-select mask scan_keyboard writes to $DC00 ($73FA, rotated at $7414); the text colour for the page printer ($8D91); a temporary in add_score ($710E) and the star mover ($74BA).","t":"byte","b":[0],"x":[26981,27049,27059,27061,27085,27116,27175,27184,28942,29136,29690,29696,29716,29775,29781,29801,29882,29889,29910,29932,29939,29942,29944,29973,29980,30161,30166,30502,30504,30944,31088,33019,33027,33052,34494,34505,34516,34527,35836,35844,35860,36099,36241,36258,36271,36288,36301,36629,36649,37044,37236,37304,37316,37339,37353,37373,37380,40495,40498,40503,40518,40520,40533,40594,40599,40601,40604,42005,42013,42042,42071,42100,42130,42161,42192,42223,44327,44330,44382,44434,45182,45198,45214,45405,45416,48165,48167,48190,48192,48203,48434,48441,48510,48520,60538,60540]},{"a":103,"l":"zp_temp_67","c":"Zero-page scratch: port 1's joystick byte from read_joystick_edge ($9202); the exclusive-OR mask while text is drawn into sprites ($8DED, $8E3B); add_score's digit counter ($7116); the tile row in draw_landscape ($7662); shot directions in fire_wiz_shot ($84D8) and fire_cat_shot ($887F).","t":"byte","b":[0],"x":[28950,29115,30306,30341,30387,30389,30431,30436,34008,34029,34037,34305,34317,34943,34967,34975,36333,36341,36411,36419,37378,39585,39593,39861,39951,40049,40060,40095,40100,40108,40577,40608,40610,40625,40655,40699,40770,40793,40929,41057,42510,42521,42529,43594,43599,48067,48074,48121,48128,48163,48506,48529]},{"a":104,"l":"display_list_lo","c":"Display-list pointer, low byte: the list of raster bands the IRQ at $7C73 runs, read as ($68),Y with the index at $B1CD. install_display_list ($7CB4) stores X here and Y in $69.","t":"byte","b":[0],"x":[31877,31883,31889,31917,31928,31939]},{"a":105,"l":"display_list_hi","c":"Display-list pointer, high byte, stored by install_display_list at $7CBA.","t":"byte","b":[140,128,192,0,0,0],"x":[31930]},{"a":111,"l":"score_row_bars","c":"Counter of the four raster lines colour_score_row ($9383) recolours sprites on, counted down at $939F.","t":"byte","b":[0,0,5],"x":[37763,37791]},{"a":114,"l":"alien_sprite_mask","c":"update_aliens scratch: the sprite-enable bit of the slot being handled (slot n is sprite n + 2), shifted left for each slot ($A206, $A23E) and tested by show_alien_sprite ($A29F, $A314, $A33A).","t":"byte","b":[6],"x":[41478,41521,41534,41631,41748,41786]},{"a":115,"l":"alien_sprite_number","c":"update_aliens scratch: the sprite number of the current slot, 2 to 7 ($A210, $A240), used to index the sprite-pointer copies at $B525 ($A2EA).","t":"byte","b":[230],"x":[41488,41536,41706,41778]},{"a":116,"l":"alien_sprite_bits","c":"update_aliens scratch: the current slot's bit, built with $72, ORed into the sprite multicolour and priority copies by show_alien_sprite ($A2B5, $A2F8, $A300).","t":"byte","b":[122],"x":[41482,41531,41653,41720,41728]},{"a":117,"l":"alien_sprite_reg","c":"update_aliens scratch: twice the sprite number, the offset of the slot's X and Y in the VIC register shadow at $E7C4 ($A20C, $A2BB).","t":"byte","b":[208],"x":[41484,41538,41540,41659]},{"a":118,"l":"sfx_record_lo","c":"start_sound_effect's pointer to the effect's record (from the table at $BACA), low byte ($4582, read at $458B-$45AF).","t":"byte","b":[2],"x":[17794,17803,17816,17839]},{"a":119,"l":"sfx_record_hi","c":"start_sound_effect's pointer to the effect's record, high byte ($4587).","t":"byte","b":[230],"x":[17799]},{"a":120,"l":"place_sprites_count","c":"place_sprites ($94EE): count of sprites still to place from the Wiztips page's sprite table ($9501, $9529).","t":"byte","b":[123],"x":[38126,38145,38185,38187,38191]},{"a":121,"l":"place_sprites_reg","c":"place_sprites: the VIC register offset of the sprite being placed ($94F0, $94F4, $9532).","t":"byte","b":[173],"x":[38128,38132,38194]},{"a":122,"l":"saved_level","c":"Holds the current level ($B128) while the Wiz-lab and the finale borrow $B128 for their pictures (saved at $AAEF, restored at $AB2E and $AF32); a scratch byte in randomise_alien_type ($A082, $A0B9).","t":"byte","b":[15],"x":[41090,41102,41145,41150,41154,41159,43759,43822,44850]},{"a":123,"l":"alien_template_lo","c":"Pointer to the alien template being rewritten or read, low byte (from $3ECF): randomise_alien_type ($A077) and write_wave_groups ($A02B-$A041) read and write it through ($7B),Y.","t":"byte","b":[8],"x":[41003,41013,41021,41025,41028,41079,41088,41111,41124,41132,41136,41164,41168,41193]},{"a":124,"l":"alien_template_hi","c":"Pointer to the alien template, high byte ($A07C).","t":"byte","b":[201],"x":[41084]},{"a":125,"l":"wiztips_sprite_table_lo","c":"Pointer to the current Wiztips page's sprite table, low byte, set by the page's top band ($9694, $979B) and its icon band ($9755, $97E4), read by place_sprites ($94F6-$9523).","t":"byte","b":[58],"x":[38134,38140,38148,38173,38179,38548,38741,38811,38884]},{"a":126,"l":"wiztips_sprite_table_hi","c":"Pointer to the Wiztips page's sprite table, high byte ($9699, $975A, $97A0, $97E9).","t":"byte","b":[176],"x":[38553,38746,38816,38889]},{"a":127,"l":"place_sprites_row","c":"place_sprites: a counter decremented per sprite placed ($94EA, $9534).","t":"byte","b":[10,201],"x":[38122,38196]},{"a":129,"l":"start_column_offset","c":"choose_start_column scratch: the level's start tile column plus 6, added to a map row pointer from $0460 ($759A, $75A0).","t":"byte","b":[32],"x":[30106,30112]},{"a":130,"l":"map_offset_lo","c":"fetch_left_column: the offset of a tile's 25 characters in the tile table, low byte, built as tile \u00d7 25 by shifts ($78F4-$7934).","t":"byte","b":[240],"x":[30964,30971,30994,30998,31002,31006,31024,31028]},{"a":131,"l":"map_offset_hi","c":"fetch_left_column: that offset, high byte ($7910-$793F).","t":"byte","b":[239,56],"x":[30992,30996,31000,31004,31017,31026,31039]},{"a":133,"l":"nmi_watchdog_flag","c":"NMI watchdog. The NMI ($7C61) writes 0 here once a frame; band $8BBB sets it to the $D011 value at raster line $F7 in play, the title bands $936A-$93C5 increment it through INC $FFB0,X with X = $D5 (which wraps to $0085), and $B589 decrements it through DCP $FF97,X. The checks at $8B04 and $9287 (LAX $86, DCP $FF86,X, both in undocumented opcodes) pass only if the NMI has cleared it since, and otherwise crash the game through an unbalanced stack.","t":"byte","b":[233],"x":[31851,35781]},{"a":134,"l":"watchdog_index","c":"Holds $FF, written once by the initialisation at $EC4B. The watchdog checks at $8B04 and $9287 load it with LAX $86 and use it as the index of DCP $FF86,X, which wraps to $0085; any other value would send the check elsewhere.","t":"byte","b":[48],"x":[60491]},{"a":135,"l":"music_v1_inst_pitch_step1_lo","c":"Voice 1 instrument template, 29 bytes $87-$A3 in zero page, laid out like voice 2's at $4680 and voice 3's at $A4. Written by the voice 1 commands $DA ($4933/$4938), $CA ($49ED), $D0 ($4977), $E8 ($49A9, bytes 0-13), $D2 ($4A3C, bytes 24-28) and $E4/$E6 ($49E3, byte 13); load_tune zeroes bytes 13 and 17 ($4818, $481B). Read by the voice 1 note start ($4DA6-$4E44), which sends bytes 22-26 to the SID and copies the pulse fields (when byte 17 is not 0), the pitch fields (when byte 13 is not 0) and the gate and release times to the live block $469D. Byte 0: pitch step 1, low byte (arpeggio mode: unused).","t":"byte","b":[56],"x":[18739,18807,18857,18925,20036]},{"a":136,"l":"music_v1_inst_pitch_step1_hi","c":"Voice 1 instrument template byte 1 ($87 + 1): pitch step 1, high byte (arpeggio mode: unused); used at $4938, $4E3F.","t":"byte","b":[233],"x":[18744,20031]},{"a":137,"l":"music_v1_inst_pitch_step2_lo","c":"Voice 1 instrument template byte 2 ($87 + 2): pitch step 2, low byte (arpeggio mode: unused); used at $4E3A.","t":"byte","b":[208],"x":[20026]},{"a":138,"l":"music_v1_inst_pitch_step2_hi","c":"Voice 1 instrument template byte 3 ($87 + 3): pitch step 2, high byte (arpeggio mode: unused); used at $4E35.","t":"byte","b":[96],"x":[20021]},{"a":139,"l":"music_v1_inst_pitch_step3_lo","c":"Voice 1 instrument template byte 4 ($87 + 4): pitch step 3, low byte (arpeggio mode: the tick counter's start); used at $4E30.","t":"byte","b":[128],"x":[20016]},{"a":140,"l":"music_v1_inst_pitch_step3_hi","c":"Voice 1 instrument template byte 5 ($87 + 5): pitch step 3, high byte (arpeggio mode: unused); used at $4E2B.","t":"byte","b":[79],"x":[20011]},{"a":141,"l":"music_v1_inst_pitch_step4_lo","c":"Voice 1 instrument template byte 6 ($87 + 6): pitch step 4, low byte (arpeggio mode: ticks per arpeggio note); used at $4E26.","t":"byte","b":[199],"x":[20006]},{"a":142,"l":"music_v1_inst_pitch_step4_hi","c":"Voice 1 instrument template byte 7 ($87 + 7): pitch step 4, high byte (arpeggio mode: unused); used at $4E21.","t":"byte","b":[82],"x":[20001]},{"a":143,"l":"music_v1_inst_pitch_ticks1","c":"Voice 1 instrument template byte 8 ($87 + 8): ticks of pitch step 1 (arpeggio mode: the table address, low byte); used at $4E1C.","t":"byte","b":[88],"x":[19996]},{"a":144,"l":"music_v1_inst_pitch_ticks2","c":"Voice 1 instrument template byte 9 ($87 + 9): ticks of pitch step 2 (arpeggio mode: the table address, high byte); used at $4E17.","t":"byte","b":[64],"x":[19991]},{"a":145,"l":"music_v1_inst_pitch_ticks3","c":"Voice 1 instrument template byte 10 ($87 + 10): ticks of pitch step 3 (arpeggio mode: the base note, which the note start replaces with note + transpose); used at $4E12.","t":"byte","b":[255],"x":[19986]},{"a":146,"l":"music_v1_inst_pitch_ticks4","c":"Voice 1 instrument template byte 11 ($87 + 11): ticks of pitch step 4 (arpeggio mode: the first table index; the table is read from it down to 0, then again); used at $4E0D.","t":"byte","b":[0],"x":[19981]},{"a":147,"l":"music_v1_inst_pitch_delay","c":"Voice 1 instrument template byte 12 ($87 + 12): ticks before the pitch steps begin (arpeggio mode: the current table index); used at $4E08.","t":"byte","b":[0],"x":[19976]},{"a":148,"l":"music_v1_inst_pitch_mode","c":"Voice 1 instrument template byte 13 ($87 + 13): pitch-effect mode: 0 off; bit 3 arpeggio; otherwise four pitch steps, bit 1 also adding step 4 during the delay, and after the fourth step bit 7 restarting from the note's frequency, bit 0 repeating, neither holding; used at $4818, $49E3, $4E01.","t":"byte","b":[64],"x":[18456,18915,19969]},{"a":149,"l":"music_v1_inst_pulse_ticks1","c":"Voice 1 instrument template byte 14 ($87 + 14): pulse sweep, ticks of step 1; used at $4DF1.","t":"byte","b":[255],"x":[19953]},{"a":150,"l":"music_v1_inst_pulse_ticks2","c":"Voice 1 instrument template byte 15 ($87 + 15): pulse sweep, ticks of step 2; used at $4DF3.","t":"byte","b":[0],"x":[19955]},{"a":151,"l":"music_v1_inst_pulse_delay","c":"Voice 1 instrument template byte 16 ($87 + 16): pulse sweep, ticks before it starts; used at $4DEC.","t":"byte","b":[0],"x":[19948]},{"a":152,"l":"music_v1_inst_pulse_mode","c":"Voice 1 instrument template byte 17 ($87 + 17): pulse sweep mode: 0 off; after both steps bit 7 restarts from the start width, bit 0 repeats from the current width, neither holds; used at $481B, $4DC7.","t":"byte","b":[0],"x":[18459,19911]},{"a":153,"l":"music_v1_inst_pulse_step1_lo","c":"Voice 1 instrument template byte 18 ($87 + 18): pulse step 1, low byte; used at $4DE7.","t":"byte","b":[0],"x":[19943]},{"a":154,"l":"music_v1_inst_pulse_step1_hi","c":"Voice 1 instrument template byte 19 ($87 + 19): pulse step 1, high byte; used at $4DE2.","t":"byte","b":[3],"x":[19938]},{"a":155,"l":"music_v1_inst_pulse_step2_lo","c":"Voice 1 instrument template byte 20 ($87 + 20): pulse step 2, low byte; used at $4DDD.","t":"byte","b":[0],"x":[19933]},{"a":156,"l":"music_v1_inst_pulse_step2_hi","c":"Voice 1 instrument template byte 21 ($87 + 21): pulse step 2, high byte; used at $4DD8.","t":"byte","b":[0],"x":[19928]},{"a":157,"l":"music_v1_inst_pulse_width_lo","c":"Voice 1 instrument template byte 22 ($87 + 22): pulse width at the note start, low byte; used at $4DA6.","t":"byte","b":[0],"x":[19878]},{"a":158,"l":"music_v1_inst_pulse_width_hi","c":"Voice 1 instrument template byte 23 ($87 + 23): pulse width at the note start, high byte; used at $4DA8.","t":"byte","b":[187],"x":[19880]},{"a":159,"l":"music_v1_inst_control","c":"Voice 1 instrument template byte 24 ($87 + 24): control register value: waveform and gate bit 0; bit 3 (masked off before the chip) picks the gate-off rule: set, release when fewer than byte 27 ticks of the note are left; clear, release byte 27 ticks after the start; used at $4A3C, $4DBA.","t":"byte","b":[14],"x":[19004,19898]},{"a":160,"l":"music_v1_inst_attack_decay","c":"Voice 1 instrument template byte 25 ($87 + 25): attack/decay register value; used at $4DB0.","t":"byte","b":[0],"x":[19888]},{"a":161,"l":"music_v1_inst_sustain_release","c":"Voice 1 instrument template byte 26 ($87 + 26): sustain/release register value; used at $4DB5.","t":"byte","b":[19],"x":[19893]},{"a":162,"l":"music_v1_inst_gate_time","c":"Voice 1 instrument template byte 27 ($87 + 27): gate time in ticks ($FF keeps the gate on); used at $4E5F.","t":"byte","b":[196],"x":[20063]},{"a":163,"l":"music_v1_inst_release_time","c":"Voice 1 instrument template byte 28 ($87 + 28): release time: ticks from the gate-off until the voice's seven SID registers are cleared ($FF never; 0 leaves the voice alone, with no gate-off and no effects); used at $4E61.","t":"byte","b":[64],"x":[20065]},{"a":164,"l":"music_v3_inst_pitch_step1_lo","c":"Voice 3 instrument template, 29 bytes $A4-$C0 in zero page, laid out like voice 2's at $4680. Written by the voice 3 commands $DA ($4BA2/$4BA7), $D0 ($4BE4), $E8 ($4C19, bytes 0-13), $CA ($4C4F) and $D2 ($4CAE, bytes 24-28); load_tune zeroes bytes 13 and 17 (through $0094 + $1D and $0098 + $1D at $4818, $481B). Read by the voice 3 note start ($5032-$50D1), which sends bytes 22-26 to the SID and copies the rest to the live block $C1. Byte 0: pitch step 1, low byte (arpeggio mode: unused).","t":"byte","b":[192],"x":[19362,19428,19481,19535,20662]},{"a":165,"l":"music_v3_inst_pitch_step1_hi","c":"Voice 3 instrument template byte 1 ($A4 + 1): pitch step 1, high byte (arpeggio mode: unused); used at $4BA7, $50B2.","t":"byte","b":[0],"x":[19367,20658]},{"a":166,"l":"music_v3_inst_pitch_step2_lo","c":"Voice 3 instrument template byte 2 ($A4 + 2): pitch step 2, low byte (arpeggio mode: unused); used at $50AE.","t":"byte","b":[0],"x":[20654]},{"a":167,"l":"music_v3_inst_pitch_step2_hi","c":"Voice 3 instrument template byte 3 ($A4 + 3): pitch step 2, high byte (arpeggio mode: unused); used at $50AA.","t":"byte","b":[0],"x":[20650]},{"a":168,"l":"music_v3_inst_pitch_step3_lo","c":"Voice 3 instrument template byte 4 ($A4 + 4): pitch step 3, low byte (arpeggio mode: the tick counter's start); used at $50A6.","t":"byte","b":[0],"x":[20646]},{"a":169,"l":"music_v3_inst_pitch_step3_hi","c":"Voice 3 instrument template byte 5 ($A4 + 5): pitch step 3, high byte (arpeggio mode: unused); used at $50A2.","t":"byte","b":[0],"x":[20642]},{"a":170,"l":"music_v3_inst_pitch_step4_lo","c":"Voice 3 instrument template byte 6 ($A4 + 6): pitch step 4, low byte (arpeggio mode: ticks per arpeggio note); used at $509E.","t":"byte","b":[0],"x":[20638]},{"a":171,"l":"music_v3_inst_pitch_step4_hi","c":"Voice 3 instrument template byte 7 ($A4 + 7): pitch step 4, high byte (arpeggio mode: unused); used at $509A.","t":"byte","b":[76],"x":[20634]},{"a":172,"l":"music_v3_inst_pitch_ticks1","c":"Voice 3 instrument template byte 8 ($A4 + 8): ticks of pitch step 1 (arpeggio mode: the table address, low byte); used at $5096.","t":"byte","b":[157],"x":[20630]},{"a":173,"l":"music_v3_inst_pitch_ticks2","c":"Voice 3 instrument template byte 9 ($A4 + 9): ticks of pitch step 2 (arpeggio mode: the table address, high byte); used at $5092.","t":"byte","b":[1],"x":[20626]},{"a":174,"l":"music_v3_inst_pitch_ticks3","c":"Voice 3 instrument template byte 10 ($A4 + 10): ticks of pitch step 3 (arpeggio mode: the base note, which the note start replaces with note + transpose); used at $508E.","t":"byte","b":[255],"x":[20622]},{"a":175,"l":"music_v3_inst_pitch_ticks4","c":"Voice 3 instrument template byte 11 ($A4 + 11): ticks of pitch step 4 (arpeggio mode: the first table index; the table is read from it down to 0, then again); used at $508A.","t":"byte","b":[255],"x":[20618]},{"a":176,"l":"music_v3_inst_pitch_delay","c":"Voice 3 instrument template byte 12 ($A4 + 12): ticks before the pitch steps begin (arpeggio mode: the current table index); used at $5086.","t":"byte","b":[0],"x":[20614]},{"a":177,"l":"music_v3_inst_pitch_mode","c":"Voice 3 instrument template byte 13 ($A4 + 13): pitch-effect mode: 0 off; bit 3 arpeggio; otherwise four pitch steps, bit 1 also adding step 4 during the delay, and after the fourth step bit 7 restarting from the note's frequency, bit 0 repeating, neither holding; used at $5080.","t":"byte","b":[0],"x":[20608]},{"a":178,"l":"music_v3_inst_pulse_ticks1","c":"Voice 3 instrument template byte 14 ($A4 + 14): pulse sweep, ticks of step 1; used at $5074.","t":"byte","b":[60],"x":[20596]},{"a":179,"l":"music_v3_inst_pulse_ticks2","c":"Voice 3 instrument template byte 15 ($A4 + 15): pulse sweep, ticks of step 2; used at $5076.","t":"byte","b":[3],"x":[20598]},{"a":180,"l":"music_v3_inst_pulse_delay","c":"Voice 3 instrument template byte 16 ($A4 + 16): pulse sweep, ticks before it starts; used at $5070.","t":"byte","b":[0],"x":[20592]},{"a":181,"l":"music_v3_inst_pulse_mode","c":"Voice 3 instrument template byte 17 ($A4 + 17): pulse sweep mode: 0 off; after both steps bit 7 restarts from the start width, bit 0 repeats from the current width, neither holds; used at $5052.","t":"byte","b":[0],"x":[20562]},{"a":182,"l":"music_v3_inst_pulse_step1_lo","c":"Voice 3 instrument template byte 18 ($A4 + 18): pulse step 1, low byte; used at $506C.","t":"byte","b":[0],"x":[20588]},{"a":183,"l":"music_v3_inst_pulse_step1_hi","c":"Voice 3 instrument template byte 19 ($A4 + 19): pulse step 1, high byte; used at $5068.","t":"byte","b":[16],"x":[20584]},{"a":184,"l":"music_v3_inst_pulse_step2_lo","c":"Voice 3 instrument template byte 20 ($A4 + 20): pulse step 2, low byte; used at $5064.","t":"byte","b":[1],"x":[20580]},{"a":185,"l":"music_v3_inst_pulse_step2_hi","c":"Voice 3 instrument template byte 21 ($A4 + 21): pulse step 2, high byte; used at $5060.","t":"byte","b":[96],"x":[20576]},{"a":186,"l":"music_v3_inst_pulse_width_lo","c":"Voice 3 instrument template byte 22 ($A4 + 22): pulse width at the note start, low byte; used at $5032.","t":"byte","b":[8],"x":[20530]},{"a":187,"l":"music_v3_inst_pulse_width_hi","c":"Voice 3 instrument template byte 23 ($A4 + 23): pulse width at the note start, high byte; used at $5034.","t":"byte","b":[240],"x":[20532]},{"a":188,"l":"music_v3_inst_control","c":"Voice 3 instrument template byte 24 ($A4 + 24): control register value: waveform and gate bit 0; bit 3 (masked off before the chip) picks the gate-off rule: set, release when fewer than byte 27 ticks of the note are left; clear, release byte 27 ticks after the start; used at $4CAE, $5046.","t":"byte","b":[159],"x":[19630,20550]},{"a":189,"l":"music_v3_inst_attack_decay","c":"Voice 3 instrument template byte 25 ($A4 + 25): attack/decay register value; used at $503C.","t":"byte","b":[0],"x":[20540]},{"a":190,"l":"music_v3_inst_sustain_release","c":"Voice 3 instrument template byte 26 ($A4 + 26): sustain/release register value; used at $5041.","t":"byte","b":[0],"x":[20545]},{"a":191,"l":"music_v3_inst_gate_time","c":"Voice 3 instrument template byte 27 ($A4 + 27): gate time in ticks ($FF keeps the gate on); used at $50CF.","t":"byte","b":[0],"x":[20687]},{"a":192,"l":"music_v3_inst_release_time","c":"Voice 3 instrument template byte 28 ($A4 + 28): release time: ticks from the gate-off until the voice's seven SID registers are cleared ($FF never; 0 leaves the voice alone, with no gate-off and no effects); used at $50D1.","t":"byte","b":[0],"x":[20689]},{"a":193,"l":"music_v3_live_pitch_step1_lo","c":"Voice 3 live sound state, 35 bytes $C1-$E3 in zero page, laid out like voice 1's at $469D: filled at each voice 3 note start ($5028-$50D5) from the template $A4-$C0, changed by the commands $DC ($4BB2/$4BB7) and $D4 ($4C8A), and worked by the per-tick routine $53D7 (pulse sweep $541D, pitch effect $546F, arpeggio $5489, pitch steps $54B5). Byte 0: pitch step 1, low byte (arpeggio mode: unused).","t":"byte","b":[0],"x":[19378,19594,20664,21693]},{"a":194,"l":"music_v3_live_pitch_step1_hi","c":"Voice 3 live sound state byte 1 ($C1 + 1): pitch step 1, high byte (arpeggio mode: unused); used at $4BB7, $50B4, $54C1.","t":"byte","b":[160],"x":[19383,20660,21697]},{"a":195,"l":"music_v3_live_pitch_step2_lo","c":"Voice 3 live sound state byte 2 ($C1 + 2): pitch step 2, low byte (arpeggio mode: unused); used at $50B0, $54CD.","t":"byte","b":[48],"x":[20656,21709]},{"a":196,"l":"music_v3_live_pitch_step2_hi","c":"Voice 3 live sound state byte 3 ($C1 + 3): pitch step 2, high byte (arpeggio mode: unused); used at $50AC, $54D1.","t":"byte","b":[253],"x":[20652,21713]},{"a":197,"l":"music_v3_live_pitch_step3_lo","c":"Voice 3 live sound state byte 4 ($C1 + 4): pitch step 3, low byte (arpeggio mode: the tick counter's start); used at $50A8, $5489, $548F, $54DD.","t":"byte","b":[64],"x":[20648,21641,21647,21725]},{"a":198,"l":"music_v3_live_pitch_step3_hi","c":"Voice 3 live sound state byte 5 ($C1 + 5): pitch step 3, high byte (arpeggio mode: unused); used at $50A4, $54E1.","t":"byte","b":[0],"x":[20644,21729]},{"a":199,"l":"music_v3_live_pitch_step4_lo","c":"Voice 3 live sound state byte 6 ($C1 + 6): pitch step 4, low byte (arpeggio mode: ticks per arpeggio note); used at $50A0, $548D, $54ED.","t":"byte","b":[0],"x":[20640,21645,21741]},{"a":200,"l":"music_v3_live_pitch_step4_hi","c":"Voice 3 live sound state byte 7 ($C1 + 7): pitch step 4, high byte (arpeggio mode: unused); used at $509C, $54F1.","t":"byte","b":[3],"x":[20636,21745]},{"a":201,"l":"music_v3_live_pitch_ticks1","c":"Voice 3 live sound state byte 8 ($C1 + 8): ticks of pitch step 1 (arpeggio mode: the table address, low byte); used at $48F4, $5098, $5497.","t":"byte","b":[0],"x":[18676,20632,21655]},{"a":202,"l":"music_v3_live_pitch_ticks2","c":"Voice 3 live sound state byte 9 ($C1 + 9): ticks of pitch step 2 (arpeggio mode: the table address, high byte); used at $48F0, $5094, $549B.","t":"byte","b":[3],"x":[18672,20628,21659]},{"a":203,"l":"music_v3_live_pitch_ticks3","c":"Voice 3 live sound state byte 10 ($C1 + 10): ticks of pitch step 3 (arpeggio mode: the base note, which the note start replaces with note + transpose); used at $48EC, $5090, $50C8, $549F.","t":"byte","b":[64],"x":[18668,20624,20680,21663]},{"a":204,"l":"music_v3_live_pitch_ticks4","c":"Voice 3 live sound state byte 11 ($C1 + 11): ticks of pitch step 4 (arpeggio mode: the first table index; the table is read from it down to 0, then again); used at $48E8, $508C, $5495.","t":"byte","b":[12],"x":[18664,20620,21653]},{"a":205,"l":"music_v3_live_pitch_delay","c":"Voice 3 live sound state byte 12 ($C1 + 12): ticks before the pitch steps begin (arpeggio mode: the current table index); used at $5088, $547C, $5480, $5491, $54A5.","t":"byte","b":[12],"x":[20616,21628,21632,21649,21669]},{"a":206,"l":"music_v3_live_pitch_mode","c":"Voice 3 live sound state byte 13 ($C1 + 13): pitch-effect mode, from template byte 13 (0 = no pitch update); used at $5082, $546F, $5482, $54FF.","t":"byte","b":[32],"x":[20610,21615,21634,21759]},{"a":207,"l":"music_v3_live_pulse_ticks1","c":"Voice 3 live sound state byte 14 ($C1 + 14): pulse step 1 tick count, reloaded into byte 33 when the sweep repeats; used at $4878, $5078.","t":"byte","b":[0],"x":[18552,20600]},{"a":208,"l":"music_v3_live_pulse_ticks2","c":"Voice 3 live sound state byte 15 ($C1 + 15): pulse step 2 tick count, reloaded into byte 34 when the sweep repeats; used at $487C, $507C.","t":"byte","b":[0],"x":[18556,20604]},{"a":209,"l":"music_v3_live_pulse_delay","c":"Voice 3 live sound state byte 16 ($C1 + 16): pulse delay, counted down each tick; used at $5072, $5421, $5425.","t":"byte","b":[0],"x":[20594,21537,21541]},{"a":210,"l":"music_v3_live_pulse_mode","c":"Voice 3 live sound state byte 17 ($C1 + 17): pulse sweep mode, from template byte 17 (0 = no sweep); used at $5054, $541D, $5451.","t":"byte","b":[4],"x":[20564,21533,21585]},{"a":211,"l":"music_v3_live_pulse_step1_lo","c":"Voice 3 live sound state byte 18 ($C1 + 18): pulse step 1, low byte; used at $506E, $5436.","t":"byte","b":[0],"x":[20590,21558]},{"a":212,"l":"music_v3_live_pulse_step1_hi","c":"Voice 3 live sound state byte 19 ($C1 + 19): pulse step 1, high byte; used at $506A, $543A.","t":"byte","b":[0],"x":[20586,21562]},{"a":213,"l":"music_v3_live_pulse_step2_lo","c":"Voice 3 live sound state byte 20 ($C1 + 20): pulse step 2, low byte; used at $5066, $5447.","t":"byte","b":[39],"x":[20582,21575]},{"a":214,"l":"music_v3_live_pulse_step2_hi","c":"Voice 3 live sound state byte 21 ($C1 + 21): pulse step 2, high byte; used at $5062, $544B.","t":"byte","b":[0],"x":[20578,21579]},{"a":215,"l":"music_v3_live_pulse_start_lo","c":"Voice 3 live sound state byte 22 ($C1 + 22): pulse width at the note start, low byte (where a restarting sweep begins again); used at $4870, $5058.","t":"byte","b":[32],"x":[18544,20568]},{"a":216,"l":"music_v3_live_pulse_start_hi","c":"Voice 3 live sound state byte 23 ($C1 + 23): pulse width at the note start, high byte; used at $4872, $505A.","t":"byte","b":[0],"x":[18546,20570]},{"a":217,"l":"music_v3_live_note_freq_lo","c":"Voice 3 live sound state byte 24 ($C1 + 24): the note's frequency, low byte (base of the pitch steps and of their restarts); used at $48E0, $5028.","t":"byte","b":[132],"x":[18656,20520]},{"a":218,"l":"music_v3_live_note_freq_hi","c":"Voice 3 live sound state byte 25 ($C1 + 25): the note's frequency, high byte; used at $48E2, $502A.","t":"byte","b":[132],"x":[18658,20522]},{"a":219,"l":"music_v3_live_control","c":"Voice 3 live sound state byte 26 ($C1 + 26): control register value as written at the note start; the gate-off clears bits 0 and 3; used at $5048, $53DB, $53EB, $53EF, $5416.","t":"byte","b":[132],"x":[20552,21467,21483,21487,21526]},{"a":220,"l":"music_v3_live_gate_time","c":"Voice 3 live sound state byte 27 ($C1 + 27): gate time, counted down to the gate-off (or compared with the note time left when control bit 3 is set); $FF holds; used at $50D3, $53E3, $53E9, $53F3, $540D, $5412.","t":"byte","b":[132],"x":[20691,21475,21481,21491,21517,21522]},{"a":221,"l":"music_v3_live_release_time","c":"Voice 3 live sound state byte 28 ($C1 + 28): release time, counted down after the gate-off; $FF holds; 0 = voice idle, the per-tick update returns at once; used at $47E5, $50D5, $53D7, $53F7, $53FC, $551F.","t":"byte","b":[132],"x":[18405,20693,21463,21495,21500,21791]},{"a":222,"l":"music_v3_live_pitch_left1","c":"Voice 3 live sound state byte 29 ($C1 + 29): ticks left in pitch step 1; used at $48F6, $54B6, $54BA.","t":"byte","b":[132],"x":[18678,21686,21690]},{"a":223,"l":"music_v3_live_pitch_left2","c":"Voice 3 live sound state byte 30 ($C1 + 30): ticks left in pitch step 2; used at $48F2, $54C6, $54CA.","t":"byte","b":[132],"x":[18674,21702,21706]},{"a":224,"l":"music_v3_live_pitch_left3","c":"Voice 3 live sound state byte 31 ($C1 + 31): ticks left in pitch step 3; used at $48EE, $54D6, $54DA.","t":"byte","b":[133],"x":[18670,21718,21722]},{"a":225,"l":"music_v3_live_pitch_left4","c":"Voice 3 live sound state byte 32 ($C1 + 32): ticks left in pitch step 4; used at $48EA, $54E6, $54EA.","t":"byte","b":[133],"x":[18666,21734,21738]},{"a":226,"l":"music_v3_live_pulse_left1","c":"Voice 3 live sound state byte 33 ($C1 + 33): ticks left in pulse step 1; used at $487A, $507A, $542F, $5433.","t":"byte","b":[133],"x":[18554,20602,21551,21555]},{"a":227,"l":"music_v3_live_pulse_left2","c":"Voice 3 live sound state byte 34 ($C1 + 34): ticks left in pulse step 2; used at $487E, $507E, $5440, $5444.","t":"byte","b":[133],"x":[18558,20606,21568,21572]},{"a":228,"l":"music_v1_return_lo_0","c":"Voice 1 return addresses, low bytes, five levels $E4-$E8 (the index $0D runs from 4 down to 0 as the stack fills): a call ($4906) or a repeat start ($4988) stores the address to come back to at $E4 + level. This byte is level 0.","t":"byte","b":[133],"x":[18694,18824]},{"a":229,"l":"music_v1_return_lo","c":"Voice 1 return address low bytes of levels 1-4 ($E5-$E8), read back by the repeat end ($49F8: LDY $E5,X with X = the index, one below the level pushed) and the return ($4A11).","t":"byte","b":[133,134,134,134],"x":[18936,18961]},{"a":233,"l":"music_v1_return_hi_0","c":"Voice 1 return addresses, high bytes, level 0 ($E9-$ED hold levels 0-4; stored at $490C and $498E).","t":"byte","b":[134],"x":[18700,18830]},{"a":234,"l":"music_v1_return_hi","c":"Voice 1 return address high bytes of levels 1-4 ($EA-$ED), read back at $49FA and $4A13.","t":"byte","b":[134,134,134,135],"x":[18938,18963]},{"a":238,"l":"music_v1_loop_count_0","c":"Voice 1 loop counters, five bytes $EE-$F2, one per stack level: command $CC stores the repeat count at $EE + level ($4992). This byte is level 0.","t":"byte","b":[135],"x":[18834]},{"a":239,"l":"music_v1_loop_counts","c":"Voice 1 loop counters of levels 1-4 ($EF-$F2), counted down by command $CE ($49F4: DEC $EF,X); the section repeats until the count reaches 0, so a count of 0 gives 256 passes.","t":"byte","b":[135,135,135,135],"x":[18932]},{"a":243,"l":"music_v2_return_lo_0","c":"Voice 2 return addresses, low bytes, five levels $F3-$F7 (index $0E): a call ($4A52) or a repeat start ($4AC1) stores at $F3 + level. This byte is level 0.","t":"byte","b":[0],"x":[19026,19137]},{"a":244,"l":"music_v2_return_lo","c":"Voice 2 return address low bytes of levels 1-4 ($F4-$F7), read back by the repeat end ($4B19) and the return ($4B32).","t":"byte","b":[216,144,8,13],"x":[19225,19250]},{"a":248,"l":"music_v2_return_hi_0","c":"Voice 2 return addresses, high bytes, level 0 ($F8-$FC hold levels 0-4; stored at $4A58 and $4AC7).","t":"byte","b":[1],"x":[19032,19143]},{"a":249,"l":"music_v2_return_hi","c":"Voice 2 return address high bytes of levels 1-4 ($F9-$FC), read back at $4B1B and $4B34. The last three bytes of zero page, $FD-$FF, are referenced by no traced instruction.","t":"byte","b":[8,13,0,0,8,1,8],"x":[19227,19252]},{"a":256,"t":"gap","n":256,"x":[60529]},{"a":512,"l":"alien_x","c":"Alien slots: six records of 42 bytes at $0200-$02FB, slot n at $0200 + 42n and drawn on sprite n + 2, run once a frame by update_aliens ($A204); create_alien ($9DA1) fills one from an alien template ($3ECF) or a bonus-stage template ($39DC). This label names byte $00 of slot 0, and the code reaches the other slots with X = 42n: the X position in 2-pixel units (sprite X is twice this plus the fraction's top bit).","t":"byte","b":[42],"x":[39888,39905,40152,40359,40372,41588,41641,41820,41823,41830,41848,41851,41858,41943,41946,41953,42029,42032,42039,42058,42061,42068,42266,42269,42276,42647,42820,43371,43660,43666,60532]},{"a":513,"l":"alien_x_frac","c":"Alien slot byte $01: the X position's fraction ($A3CB-$A3E1).","t":"byte","b":[0],"x":[41636,41808,41815,41836,41843,41931,41938,42017,42024,42046,42053,42254,42261,43360,43366]},{"a":514,"l":"alien_line","c":"Alien slot byte $02: the line (sprite Y). 0 marks the slot empty, which every search for a free slot tests (LDA $0202,X / BEQ at $A223, $AA34, $A189, $9D44).","t":"byte","b":[0],"x":[32386,35023,39875,39910,40260,40277,40328,41353,41422,41429,41507,41664,41918,41921,41928,42087,42090,42097,42116,42119,42126,42291,42294,42301,42585,42594,42613,42644,42835,43278,43281,43441,43572]},{"a":515,"l":"alien_line_frac","c":"Alien slot byte $03: the line's fraction.","t":"byte","b":[0],"x":[41906,41913,42075,42082,42104,42111,42279,42286]},{"a":516,"l":"alien_dx","c":"Alien slot byte $04: X speed, whole part (an acceleration in movement mode 3); reversed by the scenery bounces $A6DF and $A6E5.","t":"byte","b":[0],"x":[41950,42036,42065,42155,42186,42719,42725,42730,42735,42810,43020,43027,43669,43674]},{"a":517,"l":"alien_dx_frac","c":"Alien slot byte $05: X speed, fraction.","t":"byte","b":[0],"x":[41935,42021,42050,42140,42171,42738,42743,42813,43030,43035,43677,43682]},{"a":518,"l":"alien_dy","c":"Alien slot byte $06: Y speed, whole part (an acceleration in mode 3); reversed by $A707 and $A70D.","t":"byte","b":[0],"x":[41885,41903,41925,42094,42123,42217,42248,42759,42765,42770,42775,42804]},{"a":519,"l":"alien_dy_frac","c":"Alien slot byte $07: Y speed, fraction.","t":"byte","b":[0],"x":[41873,41880,41891,41898,41910,42079,42108,42202,42233,42778,42783,42807]},{"a":520,"l":"alien_move_mode","c":"Alien slot byte $08: movement mode for move_alien ($A386): 0 the Y speed grows by byte $09 a frame (falling), 1 it shrinks (rising), 2 steered by the pattern's direction bits, 3 accelerated by them.","t":"byte","b":[76],"x":[41862,42816]},{"a":521,"l":"alien_accel","c":"Alien slot byte $09: the Y acceleration in modes 0 and 1 ($A395, $A3A7); for a colour-cycling alien, the cycle's frame counter ($A2CF).","t":"byte","b":[32],"x":[41679,41682,41691,41877,41895,42801]},{"a":522,"l":"alien_pattern_lo","c":"Alien slot byte $0A: movement pattern pointer, low byte (read with byte $0B at $A3FA).","t":"byte","b":[6],"x":[41978]},{"a":523,"l":"alien_pattern_hi","c":"Alien slot byte $0B: movement pattern pointer, high byte.","t":"byte","b":[0],"x":[41983]},{"a":524,"l":"alien_pattern_rate","c":"Alien slot byte $0C: frames per movement pattern step ($A3ED).","t":"byte","b":[32],"x":[41965]},{"a":525,"l":"alien_scenery_mode","c":"Alien slot byte $0D: 0 passes through the scenery; 1 bounces off scenery and off the line limits $46-$C7 ($A665, $A678, $A688). 2 or more would skip the limits; no template uses it (and $A6B1 tests slot 0's byte, not the current slot's).","t":"byte","b":[47],"x":[42597,42616,42632,42673]},{"a":526,"l":"alien_fire_mode","c":"Alien slot byte $0E: firing mode for fire_alien_shots ($A541): 0 none, 1 aimed at the Wizball, 2 turning, 3 eight ways.","t":"byte","b":[89],"x":[42322]},{"a":527,"l":"alien_fire_rate","c":"Alien slot byte $0F: frames between shots, compared exactly with the fire timer, byte $21 ($A547).","t":"byte","b":[69],"x":[42311]},{"a":528,"l":"alien_colour","c":"Alien slot byte $10: the sprite colour in the low bits ($10 there means colour cycling). Bit 5 set: a pearl whenever it is killed; bit 6: a hi-res sprite; bit 7: a police ship, which sounds the siren while alive.","t":"byte","b":[84],"x":[35032,41670,41733,42417,42512,42880,42962,43107,43138,43352,43650]},{"a":529,"l":"alien_anim_mode","c":"Alien slot byte $11: animation mode for animate_alien ($A5B1): 0 one fixed frame, 1 the bounce wobble, 2 or more a frame list; while a droplet falls, its wobble index.","t":"byte","b":[73],"x":[42429,42746,42786,43241,43254,43257,43266,43269]},{"a":530,"l":"alien_anim_arg","c":"Alien slot byte $12: the fixed frame, wobble index or frame-list period; in states 2 to 4 (droplet, splash, explosion) the frame counter.","t":"byte","b":[34],"x":[42434,42451,42538,42550,42553,42560,42563,42576,42755,42795,43166,43180,43183,43236,43244,43247,43298,43301,43304]},{"a":531,"l":"alien_anim_lo","c":"Alien slot byte $13: frame-list pointer, low byte; for colour cycling the cycle index, and the fade-in counter while byte $14 is 1.","t":"byte","b":[44],"x":[41694,41697,41760,41763,42461,42471,42491,42497,42566]},{"a":532,"l":"alien_anim_hi","c":"Alien slot byte $14: frame-list pointer, high byte; 1 runs the fade-in ($A319).","t":"byte","b":[56],"x":[41753,41794,42466,42476,42502,42571]},{"a":533,"l":"alien_state","c":"Alien slot byte $15: the state a hit is dispatched on ($A830): 0 alien, 1 colour sphere, 2 droplet falling, 3 droplet splashing, 4 exploding, 5 pearl, 6 the Wiz lookalike of the bonus stage, 7 unused, $FF shrugs hits off (bonus template 7).","t":"byte","b":[44],"x":[32373,35010,43000,43161,43220,43288,43342,43639]},{"a":534,"l":"alien_points","c":"Alien slot byte $16: its value in tens of points, passed to add_score ($710B) at $A891 and $A941.","t":"byte","b":[49],"x":[43153,43228,43329]},{"a":535,"l":"alien_vx","c":"Alien slot byte $17: X velocity in movement mode 3, whole part ($A498-$A4CD).","t":"byte","b":[0],"x":[42148,42151,42158,42179,42182,42189,42273]},{"a":536,"l":"alien_vx_frac","c":"Alien slot byte $18: X velocity in mode 3, fraction.","t":"byte","b":[44],"x":[42136,42143,42167,42174,42258]},{"a":537,"l":"alien_vy","c":"Alien slot byte $19: Y velocity in mode 3, whole part ($A4D6-$A50B).","t":"byte","b":[0],"x":[42210,42213,42220,42241,42244,42251,42298]},{"a":538,"l":"alien_vy_frac","c":"Alien slot byte $1A: Y velocity in mode 3, fraction.","t":"byte","b":[0],"x":[42198,42205,42229,42236,42283]},{"a":539,"l":"alien_pattern_index","c":"Alien slot byte $1B: index into the movement pattern ($A3F7, $A404).","t":"byte","b":[0],"x":[41975,41988,41999]},{"a":540,"l":"alien_pattern_timer","c":"Alien slot byte $1C: timer to the next pattern step ($A3E7).","t":"byte","b":[0],"x":[41959,41962,41972]},{"a":541,"l":"alien_box_left","c":"Alien slot byte $1D: hit box, left edge (X - 3, set by set_alien_hitbox $A744). The shot collision test at $6FBE is unrolled and names every slot's box directly.","t":"byte","b":[0],"x":[28606,42826,43444]},{"a":542,"l":"alien_box_right","c":"Alien slot byte $1E: hit box, right edge (X + 7).","t":"byte","b":[0],"x":[28611,42832,43447]},{"a":543,"l":"alien_box_top","c":"Alien slot byte $1F: hit box, top (line - 3).","t":"byte","b":[0],"x":[28616,32392,35029,41435,42841,43172,43450]},{"a":544,"l":"alien_box_bottom","c":"Alien slot byte $20: hit box, bottom (line + $13). Zeroing the top and bottom makes an alien untouchable ($A8A1, $A1D8, $7E85, $88D2).","t":"byte","b":[0],"x":[28621,32389,35026,41432,42847,43169,43453]},{"a":545,"l":"alien_fire_timer","c":"Alien slot byte $21: frames since its last shot ($A541).","t":"byte","b":[0],"x":[42305,42308,42319,42335]},{"a":546,"l":"alien_fire_dir","c":"Alien slot byte $22: the direction of turning fire ($A56D).","t":"byte","b":[0],"x":[42349,42355]},{"a":547,"l":"alien_anim_timer","c":"Alien slot byte $23: the animation timer ($A5CD, $A61B).","t":"byte","b":[0],"x":[42445,42448,42458,42523,42526,42535,42545]},{"a":548,"l":"alien_frame","c":"Alien slot byte $24: the sprite shape, copied to the slot's sprite pointer by show_alien_sprite ($A2EF).","t":"byte","b":[0],"x":[41711,42437,42483,42581,43177,43190,43193,43275,43293,43311,43314,43347]},{"a":549,"l":"alien_hit","c":"Alien slot byte $25: the hit flag, set by the shot collision test ($6FD4 for slot 0) and for every slot by the smart bomb ($7394), handled and cleared by run_hit_alien ($A7F2). Bytes $26 and $27 after it are used by no traced code.","t":"byte","b":[0,0,0],"x":[28628,29597,41599,41740,42994,43012]},{"a":552,"l":"alien_list_lo","c":"Alien slot byte $28: the address of the slot's entry in the landscape's wave list, low byte ($AA6F), so that the entry can be marked or given back; 0, with byte $29, when there is none.","t":"byte","b":[0],"x":[41445,41611,43631]},{"a":553,"l":"alien_list_hi","c":"Alien slot byte $29: that address, high byte ($AA74, $A1DE, $A284). This label's span runs on over bytes $00-$1C of slot 1 ($022A-$0246), the same fields as above.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[41438,41604,43636]},{"a":561,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":569,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":577,"t":"byte","b":[0,0,0,0,0,0]},{"a":583,"l":"alien1_box_left","c":"Alien slot 1 ($022A-$0253): hit box left edge, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0],"x":[28641]},{"a":584,"l":"alien1_box_right","c":"Alien slot 1 ($022A-$0253): hit box right edge, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0],"x":[28646]},{"a":585,"l":"alien1_box_top","c":"Alien slot 1 ($022A-$0253): hit box top, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0],"x":[28651]},{"a":586,"l":"alien1_box_bottom","c":"Alien slot 1 ($022A-$0253): hit box bottom, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0,0,0,0,0],"x":[28656]},{"a":591,"l":"alien1_hit","c":"Alien slot 1 ($022A): its hit flag, set by the unrolled shot collision test and by the smart bomb. Its span runs on over bytes $26-$29 of slot 1 and bytes $00-$1C of slot 2 ($0254-$0270), the fields described at $0200.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[28663]},{"a":599,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":607,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":615,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":623,"t":"byte","b":[0,0]},{"a":625,"l":"alien2_box_left","c":"Alien slot 2 ($0254-$027D): hit box left edge, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0],"x":[28676]},{"a":626,"l":"alien2_box_right","c":"Alien slot 2 ($0254-$027D): hit box right edge, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0],"x":[28681]},{"a":627,"l":"alien2_box_top","c":"Alien slot 2 ($0254-$027D): hit box top, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0],"x":[28686]},{"a":628,"l":"alien2_box_bottom","c":"Alien slot 2 ($0254-$027D): hit box bottom, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0,0,0,0,0],"x":[28691]},{"a":633,"l":"alien2_hit","c":"Alien slot 2 ($0254): its hit flag, set by the unrolled shot collision test and by the smart bomb. Its span runs on over bytes $26-$29 of slot 2 and bytes $00-$1C of slot 3 ($027E-$029A), the fields described at $0200.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[28698]},{"a":641,"t":"byte","b":[0,8,0,160,0,14,206,4]},{"a":649,"t":"byte","b":[10,0,4,10,0,0,72,235]},{"a":657,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":665,"t":"byte","b":[0,0]},{"a":667,"l":"alien3_box_left","c":"Alien slot 3 ($027E-$02A7): hit box left edge, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0],"x":[28711]},{"a":668,"l":"alien3_box_right","c":"Alien slot 3 ($027E-$02A7): hit box right edge, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0],"x":[28716]},{"a":669,"l":"alien3_box_top","c":"Alien slot 3 ($027E-$02A7): hit box top, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0],"x":[28721]},{"a":670,"l":"alien3_box_bottom","c":"Alien slot 3 ($027E-$02A7): hit box bottom, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0,0,0,0,0],"x":[28726]},{"a":675,"l":"alien3_hit","c":"Alien slot 3 ($027E): its hit flag, set by the unrolled shot collision test and by the smart bomb. Its span runs on over bytes $26-$29 of slot 3 and bytes $00-$1C of slot 4 ($02A8-$02C4), the fields described at $0200.","t":"byte","b":[0,0,0,1,0,0,0,0],"x":[28733]},{"a":683,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":691,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":699,"t":"byte","b":[0,0,0,0,0,192,0,0]},{"a":707,"t":"byte","b":[0,0]},{"a":709,"l":"alien4_box_left","c":"Alien slot 4 ($02A8-$02D1): hit box left edge, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0],"x":[28746]},{"a":710,"l":"alien4_box_right","c":"Alien slot 4 ($02A8-$02D1): hit box right edge, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0],"x":[28751]},{"a":711,"l":"alien4_box_top","c":"Alien slot 4 ($02A8-$02D1): hit box top, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0],"x":[28756]},{"a":712,"l":"alien4_box_bottom","c":"Alien slot 4 ($02A8-$02D1): hit box bottom, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0,192,0,0,0],"x":[28761]},{"a":717,"l":"alien4_hit","c":"Alien slot 4 ($02A8): its hit flag, set by the unrolled shot collision test and by the smart bomb. Its span runs on over bytes $26-$29 of slot 4 and bytes $00-$1C of slot 5 ($02D2-$02EE), the fields described at $0200.","t":"byte","b":[0,0,0,0,0,192,0,0],"x":[28768]},{"a":725,"t":"byte","b":[0,0,0,0,0,0,192,0]},{"a":733,"t":"byte","b":[0,0,0,0,0,0,0,192]},{"a":741,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":749,"t":"byte","b":[192,0]},{"a":751,"l":"alien5_box_left","c":"Alien slot 5 ($02D2-$02FB): hit box left edge, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0],"x":[28781]},{"a":752,"l":"alien5_box_right","c":"Alien slot 5 ($02D2-$02FB): hit box right edge, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0],"x":[28786]},{"a":753,"l":"alien5_box_top","c":"Alien slot 5 ($02D2-$02FB): hit box top, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0],"x":[28791]},{"a":754,"l":"alien5_box_bottom","c":"Alien slot 5 ($02D2-$02FB): hit box bottom, named directly by the unrolled shot collision test at $6FBE.","t":"byte","b":[0,0,0,0,192],"x":[28796]},{"a":759,"l":"alien5_hit","c":"Alien slot 5 ($02D2): its hit flag, set by the unrolled shot collision test and by the smart bomb. Its span covers bytes $26-$29 of slot 5 and the four spare bytes $02FC-$02FF after the last slot, which nothing uses.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[28803]},{"a":767,"t":"byte","b":[0]},{"a":768,"l":"bullet_column","c":"Alien bullets: sixteen records of 16 bytes at $0300-$03FF, handled by move_alien_bullets ($99BD), half of them each frame, and drawn as characters $5B-$6A over the landscape. This label names byte 0 of record 0: the screen column.","t":"byte","b":[139],"x":[32139,39366,39382,39472,39475,39478,39518,39569,39599,39616,39787,39797,39943,40142,60535]},{"a":769,"l":"bullet_row","c":"Alien bullet byte 1: the screen row.","t":"byte","b":[227],"x":[32127,39502,39505,39508,39511,39536,39800,39948]},{"a":770,"l":"bullet_cell_x","c":"Alien bullet byte 2: the position across the character cell, 0-31; with byte 3 it places the bullet, which is drawn as one of the 16 characters $5B-$6A, a dot at one of 16 places in the cell.","t":"byte","b":[131],"x":[39451,39461,39579]},{"a":771,"l":"bullet_cell_y","c":"Alien bullet byte 3: the position down the character cell, 0-31.","t":"byte","b":[164],"x":[39481,39491,39587]},{"a":772,"l":"bullet_dx","c":"Alien bullet byte 4: X speed, signed.","t":"byte","b":[124],"x":[32150,39455,40010,40054,40066,40088,40102]},{"a":773,"l":"bullet_dy","c":"Alien bullet byte 5: Y speed, signed.","t":"byte","b":[165],"x":[32161,39485,40015,40062,40072,40079,40085,40110]},{"a":774,"l":"bullet_saved_char","c":"Alien bullet byte 6: the landscape character under the bullet, put back when it moves.","t":"byte","b":[26],"x":[39574,39784]},{"a":775,"l":"bullet_screen_hi","c":"Alien bullet byte 7: its screen address, high byte.","t":"byte","b":[167],"x":[39547,39767]},{"a":776,"l":"bullet_screen_lo","c":"Alien bullet byte 8: its screen address, low byte (also the colour RAM's low byte).","t":"byte","b":[228],"x":[39566,39777]},{"a":777,"l":"bullet_colour_page","c":"Alien bullet byte 9: its colour RAM page.","t":"byte","b":[167],"x":[39554,39772]},{"a":778,"l":"bullet_state","c":"Alien bullet byte $0A: 0 free, 2 just fired, 1 flying.","t":"byte","b":[134],"x":[32171,39406,39426,39448,39527,39725,39745,39825,39854,39919,40020]},{"a":779,"l":"bullet_colour_count","c":"Alien bullet byte $0B: the colour counter that makes it flash. Bytes $0C-$0F of each record are not used; this label's span covers them and records 1-3 ($0310-$034A).","t":"byte","b":[174,0,0,0,0,76,72,178],"x":[32166,39604,39607,40028]},{"a":787,"t":"byte","b":[0,49,234,102,254,71,254,74]},{"a":795,"t":"byte","b":[243,145,242,14,242,80,242,51]},{"a":803,"t":"byte","b":[243,87,241,202,241,237,246,62]},{"a":811,"t":"byte","b":[241,47,243,102,254,165,244,237]},{"a":819,"t":"byte","b":[245,56,165,254,229,250,133,254]},{"a":827,"t":"byte","b":[176,120,169,53,133,1,169,127],"x":[14831]},{"a":835,"t":"byte","b":[141,13,220,141,13,221,173,13]},{"a":843,"l":"bullet_records_4_9","c":"Alien bullet records from byte $0B of record 4 to record 9 ($034B-$03A8), laid out as record 0 at $0300 and reached only through the index. In the hand-over image $034C-$0353 hold LDA $DD0D, CLD, SEI, JMP $6389: by their place and their jump to the game's entry, the end of the depacker that ran in pages 1-3. The initialisation's fill of pages 1-3 ($EC6F-$EC7F) overwrites it before the game uses the table.","t":"byte","b":[220,173,13,221,216,120,76,137]},{"a":851,"t":"byte","b":[99,55,0,0,0,0,0,0]},{"a":859,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":867,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":875,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":883,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":891,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":899,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":907,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":915,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":923,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":931,"t":"byte","b":[0,0,0,0,0,0]},{"a":937,"l":"skip_operand_03a9","c":"False symbol: the operand of BIT $03A9 at $48FE, $4A4A and $4B6B in the music driver, where the bytes A9 03 are really LDA #$03 for code that enters one byte later (the skip idiom: LDA #$04 / BIT $03A9 loads 4 or, entered at the operand, 3). No code reads $03A9. The span from here to $03E7 lies inside alien bullet records 10-14.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[18686,19018,19307]},{"a":945,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":953,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":961,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":969,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":977,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":985,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":993,"t":"byte","b":[0,0,0,0,0,0,0]},{"a":1000,"l":"copy_operand_03e8","c":"False symbol: $03E8 is the placeholder operand of the self-modifying copy loops in build_scroll_buffer ($787A-$7883, operands rewritten at $7819-$7873) and at $7A78-$7A8A (rewritten at $7A55/$7A5A); the real addresses are screen rows. No code uses $03E8 itself. The span to $03FF lies inside alien bullet records 14 and 15.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[30842,30845,30848,30851,31352,31358,31364,31370]},{"a":1008,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1016,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1024,"l":"sfx_slot_voice","c":"Sound-effect slots: three of 32 bytes, $0400 for voice 1, $0420 voice 2, $0440 voice 3 (offsets from the table at $BA7B). start_sound_effect ($4553) copies an effect's record into the slot of the voice its byte 0 names ($45B1), and $B960 works a slot once a frame for each voice the music leaves free (from $B90C). The copy takes 25 bytes of a 24-byte record, so byte 24 is the next record's voice, which nothing reads; bytes 24-31 of a slot are unused. This label names byte 0: the voice, 1-3.","t":"byte","b":[0],"x":[17841]},{"a":1025,"l":"sfx_slot_priority","c":"Effect slot byte 1: the priority, lower number wins: a new effect replaces the one playing only if its number is not higher ($459A), unless the slot counts as free (byte 2 at 0).","t":"byte","b":[0],"x":[17818]},{"a":1026,"l":"sfx_slot_time1","c":"Effect slot byte 2: the first time counter, frames with the gate on, counted down at $BA64. start_sound_effect takes the slot as free when it is 0 ($4592), even while byte 3 still runs. $BAAD clears bytes 2 and 3 of all three slots (this one at $BAB7).","t":"byte","b":[0],"x":[17810,47711,47716,47799]},{"a":1027,"l":"sfx_slot_time2","c":"Effect slot byte 3: the second time counter, counted down once byte 2 is 0, the gate still on ($BA6F); when both are 0 the control register gets 0 ($BA77). Two counters make up to 510 frames.","t":"byte","b":[0],"x":[47722,47727,47802]},{"a":1028,"l":"sfx_slot_control","c":"Effect slot byte 4: the control register value (waveform), written with the gate bit set while either time counter runs ($BA72).","t":"byte","b":[0],"x":[47730]},{"a":1029,"l":"sfx_slot_attack_decay","c":"Effect slot byte 5: attack/decay, written to the voice's register every frame ($BA3B).","t":"byte","b":[0],"x":[47675]},{"a":1030,"l":"sfx_slot_started","c":"Effect slot byte 6: 0 in every record, so on a new effect's first frame $B960 writes 0 to the voice's control register, which takes the gate off so that the envelope starts again, and sets this to 1 ($B965).","t":"byte","b":[0],"x":[47456,47461]},{"a":1031,"l":"sfx_slot_freq_lo","c":"Effect slot byte 7: the frequency, low byte, stepped up or down each frame ($B999-$B9BF) and written to the voice's frequency register ($BA47).","t":"byte","b":[0],"x":[47513,47520,47544,47551,47687]},{"a":1032,"l":"sfx_slot_freq_hi","c":"Effect slot byte 8: the frequency, high byte (stepped at $B9A5-$B9CE, written at $BA4D).","t":"byte","b":[0],"x":[47525,47528,47535,47556,47559,47566,47693]},{"a":1033,"l":"sfx_slot_freq_step_lo","c":"Effect slot byte 9: the frequency step, low byte, added while the sweep rises ($B99D) and subtracted while it falls ($B9BC).","t":"byte","b":[0],"x":[47517,47548]},{"a":1034,"l":"sfx_slot_freq_step_hi","c":"Effect slot byte 10: the frequency step, high byte ($B9AC, $B9CB).","t":"byte","b":[0],"x":[47532,47563]},{"a":1035,"l":"sfx_slot_freq_up_frames","c":"Effect slot byte 11: frames of rising frequency, loaded into the counter (byte 20) when the sweep turns upwards ($B977).","t":"byte","b":[0],"x":[47479]},{"a":1036,"l":"sfx_slot_freq_down_frames","c":"Effect slot byte 12: frames of falling frequency, loaded into the counter when the sweep turns downwards ($B989); a count of 0 gives 256 frames.","t":"byte","b":[0],"x":[47497]},{"a":1037,"l":"sfx_slot_pulse_lo","c":"Effect slot byte 13: the pulse width, low byte, stepped each frame ($BA00-$BA26) and written to the voice's pulse register ($BA53).","t":"byte","b":[0],"x":[47616,47623,47647,47654,47699]},{"a":1038,"l":"sfx_slot_pulse_hi","c":"Effect slot byte 14: the pulse width, high byte (stepped at $BA0C-$BA35, written at $BA59).","t":"byte","b":[0],"x":[47628,47631,47638,47659,47662,47669,47705]},{"a":1039,"l":"sfx_slot_pulse_step_lo","c":"Effect slot byte 15: the pulse width step, low byte, added at $BA04 and subtracted at $BA23.","t":"byte","b":[0],"x":[47620,47651]},{"a":1040,"l":"sfx_slot_pulse_step_hi","c":"Effect slot byte 16: the pulse width step, high byte ($BA13, $BA32).","t":"byte","b":[0],"x":[47635,47666]},{"a":1041,"l":"sfx_slot_pulse_up_frames","c":"Effect slot byte 17: frames of widening pulse, loaded into the counter (byte 22) when the pulse sweep turns upwards ($B9DE).","t":"byte","b":[0],"x":[47582]},{"a":1042,"l":"sfx_slot_pulse_down_frames","c":"Effect slot byte 18: frames of narrowing pulse, loaded when it turns downwards ($B9F0).","t":"byte","b":[0],"x":[47600]},{"a":1043,"l":"sfx_slot_freq_dir","c":"Effect slot byte 19: the frequency sweep's direction, 1 rising, 0 falling; it turns when the counter, byte 20, is found at 0 ($B96D-$B991).","t":"byte","b":[0],"x":[47469,47487,47505]},{"a":1044,"l":"sfx_slot_freq_count","c":"Effect slot byte 20: frames left in the frequency sweep's current direction, counted down every frame ($B996, $B9B5).","t":"byte","b":[0],"x":[47474,47482,47492,47500,47510,47541]},{"a":1045,"l":"sfx_slot_pulse_dir","c":"Effect slot byte 21: the pulse sweep's direction, 1 widening, 0 narrowing ($B9D4-$B9F8).","t":"byte","b":[0],"x":[47572,47590,47608]},{"a":1046,"l":"sfx_slot_pulse_count","c":"Effect slot byte 22: frames left in the pulse sweep's current direction ($B9FD, $BA1C).","t":"byte","b":[0],"x":[47577,47585,47595,47603,47613,47644]},{"a":1047,"l":"sfx_slot_sustain_release","c":"Effect slot byte 23: sustain/release, written to the voice's register every frame ($BA41). This label's span runs over the unused bytes 24-31 ($0418-$041F) and bytes 0 and 1 of voice 2's slot ($0420, $0421).","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[47681]},{"a":1055,"t":"byte","b":[0,0,0]},{"a":1058,"l":"sfx_slot2_time1","c":"Voice 2's effect slot ($0420-$043F), byte 2: its first time counter, cleared by $BAAD at $BABD and tested directly by $7DF7 and $AAA6, which start effect $18 (the background sound) whenever it is 0, and on every 256th pass anyway (the counter $7DF3).","t":"byte","b":[0],"x":[32247,43686,47805]},{"a":1059,"l":"sfx_slot2_time2","c":"Voice 2's effect slot, byte 3: its second time counter, cleared at $BAC0. This label's span covers the rest of that slot and bytes 0 and 1 of voice 3's ($0440, $0441).","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[47808]},{"a":1067,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1075,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1083,"t":"byte","b":[0,0,0,0,0,0,0]},{"a":1090,"l":"sfx_slot3_time1","c":"Voice 3's effect slot ($0440-$045F), byte 2: its first time counter, cleared at $BAC3.","t":"byte","b":[0],"x":[47811]},{"a":1091,"l":"sfx_slot3_time2","c":"Voice 3's effect slot, byte 3: its second time counter, cleared at $BAC6. This label's span runs to the end of the slot, $045F.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[47814]},{"a":1099,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1107,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1115,"t":"byte","b":[0,0,0,0,0]},{"a":1120,"l":"map_row_lo","c":"Landscape map row addresses, low bytes, rows 0-15 (row r at $0532 + 96r), loaded with the game and never changed; read at $758F and $78E6 with the high bytes at $0470.","t":"byte","b":[50,146,242,82,178,18,114,210],"x":[30108,30955]},{"a":1128,"t":"byte","b":[50,146,242,82,178,18,114,210]},{"a":1136,"l":"map_row_hi","c":"Landscape map row addresses, high bytes, rows 0-15 ($05 to $0A).","t":"byte","b":[5,5,5,6,6,7,7,7],"x":[30095,30950]},{"a":1144,"t":"byte","b":[8,8,8,9,9,10,10,10]},{"a":1152,"l":"shot_column","c":"The shot table: six records of 12 bytes at $0480-$04C7, moved and drawn as characters by $6F0D once a frame: records 0 and 1 the Wiz's shots ($8467), 2 the cat's ($881F), 3-5 the spray ($850A). This label names byte 0 of record 0: the screen column.","t":"byte","b":[0],"x":[28456,28459,28462,28465,28472,28540,28599,28856,30032,33957,34087]},{"a":1153,"l":"shot_row","c":"Shot byte 1: the screen row.","t":"byte","b":[0],"x":[28479,28486,28507,28590,33962,34092]},{"a":1154,"l":"shot_dx","c":"Shot byte 2: the column step each move, +1 or -1 for straight fire, the spray's direction otherwise.","t":"byte","b":[0],"x":[28469,33993,34098]},{"a":1155,"l":"shot_dy","c":"Shot byte 3: the row step (0 for straight fire).","t":"byte","b":[0],"x":[28483,33998,34104]},{"a":1156,"l":"shot_char","c":"Shot byte 4: the character drawn; 0 means the slot is free. $6FBE clears it when the shot hits an alien.","t":"byte","b":[0],"x":[28431,28495,28550,28573,28633,28668,28703,28738,28773,28808,28818,33938,34034,34060,34110]},{"a":1157,"l":"shot_colour","c":"Shot byte 5: its colour: 7, 12 with blazers, 11 for the spray.","t":"byte","b":[0],"x":[28555,28578,34039,34115]},{"a":1158,"l":"shot_saved_char","c":"Shot byte 6: the landscape character under the shot, put back by erase_bullet ($70A4).","t":"byte","b":[0],"x":[28547,28853]},{"a":1159,"l":"shot_screen_hi","c":"Shot byte 7: its screen address, high byte.","t":"byte","b":[0],"x":[28518,28836]},{"a":1160,"l":"shot_screen_lo","c":"Shot byte 8: its screen address, low byte, also the colour RAM's.","t":"byte","b":[0],"x":[28537,28846]},{"a":1161,"l":"shot_colour_page","c":"Shot byte 9: its colour RAM page.","t":"byte","b":[0],"x":[28527,28841]},{"a":1162,"l":"shot_second_char","c":"Shot byte 10: the second character of a two-cell (blazer) shot, 0 for none.","t":"byte","b":[0],"x":[28560,28586,28866,34003,34031,34120]},{"a":1163,"l":"shot_second_saved","c":"Shot byte 11: the character saved under the second cell. This label's span covers record 1 ($048C-$0497) as well.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[28570,28872]},{"a":1171,"t":"byte","b":[0,0,0,0,0]},{"a":1176,"l":"cat_shot_column","c":"Shot record 2, the cat's ($0498-$04A3), byte 0: fire_cat_shot writes the column here directly ($8848).","t":"byte","b":[0],"x":[34888]},{"a":1177,"l":"cat_shot_row","c":"The cat's shot record, byte 1: the row.","t":"byte","b":[0],"x":[34893]},{"a":1178,"l":"cat_shot_dx","c":"The cat's shot record, byte 2: the column step.","t":"byte","b":[0],"x":[34911,34928]},{"a":1179,"l":"cat_shot_dy","c":"The cat's shot record, byte 3: the row step.","t":"byte","b":[0],"x":[34933]},{"a":1180,"l":"cat_shot_char","c":"The cat's shot record, byte 4: the character, 0 while the cat's slot is free.","t":"byte","b":[0],"x":[34863,34972]},{"a":1181,"l":"cat_shot_colour","c":"The cat's shot record, byte 5: its colour ($88A1).","t":"byte","b":[0,0,0,0,0],"x":[34977]},{"a":1186,"l":"cat_shot_second_char","c":"The cat's shot record, byte 10: the blazer's second character ($887A, $8899). The span covers the rest of the table, records 3-5 of the spray ($04A4-$04C7), and $04C8-$04E1, which $6FBE uses as a spare record when called with X = $48 and $7540 clears along with the table.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[34938,34969]},{"a":1194,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1202,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1210,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1218,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1226,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1234,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1242,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1250,"l":"shot_table_spare","c":"The last 30 bytes of the block $0480-$04FF ($04E2-$04FF): $7540 clears them with the shot table (its loop stores 0 at $0480,X for X below $80) on each pass of the outer cycle; no traced code reads them.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1258,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1266,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1274,"t":"byte","b":[0,0,0,0,0,0]},{"a":1280,"l":"screen_row_lo","c":"Row addresses of the landscape screen $E000, low bytes, rows 0-24 (40 apart), loaded with the game; read by the shot, bullet and tube code ($6F72, $7C44, $9A87).","t":"byte","b":[0,40,80,120,160,200,240,24],"x":[28530,31812,39559]},{"a":1288,"t":"byte","b":[64,104,144,184,224,8,48,88]},{"a":1296,"t":"byte","b":[128,168,208,248,32,72,112,152]},{"a":1304,"t":"byte","b":[192]},{"a":1305,"l":"screen_row_hi","c":"Row addresses of the screen $E000, high bytes ($E0-$E3), rows 0-24; the code ORs them with the page of the landscape screen in use ($6F61, $9A76).","t":"byte","b":[224,224,224,224,224,224,224,225],"x":[28513,31805,39542]},{"a":1313,"t":"byte","b":[225,225,225,225,225,226,226,226]},{"a":1321,"t":"byte","b":[226,226,226,226,227,227,227,227]},{"a":1329,"t":"byte","b":[227]},{"a":1330,"l":"level_map","c":"The landscape map: 16 rows of 96 tile numbers, $0532-$0B31, one byte per 5 x 5-character tile of the table at $2642. Four bands of four rows; each band holds two landscapes, columns 0-44 and 45-89, and columns 92-95 hold halves of the Wiz-lab and finale pictures. Rows 0-3 are band 0: level 2 (left) and level 1 (right), the finale's top half at the far right. This label covers row 0 ($0532-$0591).","t":"byte","b":[0,0,28,0,0,0,0,0]},{"a":1338,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1346,"t":"byte","b":[0,15,15,0,0,0,0,0]},{"a":1354,"t":"byte","b":[0,0,28,0,0,0,0,0]},{"a":1362,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1370,"t":"byte","b":[0,0,15,31,0,0,0,35]},{"a":1378,"t":"byte","b":[0,0,0,0,0,36,0,0]},{"a":1386,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1394,"t":"byte","b":[0,0,0,0,36,0,0,0]},{"a":1402,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1410,"t":"byte","b":[0,0,0,36,0,0,0,35]},{"a":1418,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1426,"l":"level_map_row1","c":"Landscape map row 1 ($0592-$05F1), band 0's second tile row: levels 2 and 1.","t":"byte","b":[0,0,12,21,21,45,31,0]},{"a":1434,"t":"byte","b":[0,0,0,27,0,0,47,21]},{"a":1442,"t":"byte","b":[21,46,11,0,0,0,0]},{"a":1449,"l":"skip_operand_05a9","c":"False symbol: the operand of BIT $05A9 at $49E0, where A9 05 is really LDA #$05 for code entering one byte later (the skip idiom). The bytes from here to $05E8 are map row 1, columns 23-86 (the row runs $0592-$05F1).","t":"byte","b":[0,30,0,0,0,0,0,30],"x":[18912]},{"a":1457,"t":"byte","b":[28,30,0,0,0,0,0,0]},{"a":1465,"t":"byte","b":[0,12,21,11,13,0,0,0]},{"a":1473,"t":"byte","b":[41,0,0,35,0,0,0,0]},{"a":1481,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1489,"t":"byte","b":[0,0,0,35,0,0,0,0]},{"a":1497,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1505,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1513,"l":"level_map_row1_end","c":"The last nine tiles of map row 1, columns 87-95 ($05E9-$05F1): the end of level 1's landscape (87-89), two empty columns (90-91) and the finale picture's part of the row (92-95).","t":"byte","b":[41,0,0,0,0,26,0,30]},{"a":1521,"t":"byte","b":[58]},{"a":1522,"l":"level_map_row2","c":"Landscape map row 2 ($05F2-$0651), band 0's third tile row.","t":"byte","b":[0,0,25,0,0,0,13,0]},{"a":1530,"t":"byte","b":[0,0,0,25,0,0,0,0]},{"a":1538,"t":"byte","b":[0,13,0,0,0,0,12,21]},{"a":1546,"t":"byte","b":[46,45,27,0,0,0,13,0]},{"a":1554,"t":"byte","b":[13,0,0,0,0,47,21,24]},{"a":1562,"t":"byte","b":[25,12,21,11,0,0,0,41]},{"a":1570,"t":"byte","b":[0,0,41,0,0,0,0,0]},{"a":1578,"t":"byte","b":[35,0,0,0,0,0,0,0]},{"a":1586,"t":"byte","b":[0,0,41,0,0,0,35,0]},{"a":1594,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":1602,"t":"byte","b":[0,0,0,0,0,35,0,41]},{"a":1610,"t":"byte","b":[0,0,0,0,58,0,13,8]},{"a":1618,"l":"level_map_row3","c":"Landscape map row 3 ($0652-$06B1), band 0's ground row, where each landscape opens with tiles $11 $12 and closes with $21 $22.","t":"byte","b":[17,18,23,44,32,1,14,1]},{"a":1626,"t":"byte","b":[22,29,1,23,29,22,1,1]},{"a":1634,"t":"byte","b":[1,14,1,1,22,29,23,1]},{"a":1642,"t":"byte","b":[14,1,23,1,29,22,14,1]},{"a":1650,"t":"byte","b":[14,29,22,1,1,22,29,23]},{"a":1658,"t":"byte","b":[23,23,1,33,34,17,18,40]},{"a":1666,"t":"byte","b":[1,1,40,1,37,38,39,1]},{"a":1674,"t":"byte","b":[40,1,1,1,1,1,1,1]},{"a":1682,"t":"byte","b":[1,1,40,37,38,39,40,1]},{"a":1690,"t":"byte","b":[1,1,1,1,1,1,1,1]},{"a":1698,"t":"byte","b":[1,1,37,38,39,40,1,40]},{"a":1706,"t":"byte","b":[33,34,0,0,8,18,14,1]},{"a":1714,"l":"level_map_row4","c":"Landscape map row 4 ($06B2-$0711), the first row of band 1: level 7 (left) and level 6 (right), with the finale picture's lower half at the far right.","t":"byte","b":[0,48,42,48,55,61,53,62]},{"a":1722,"t":"byte","b":[62,62,62,66,61,61,61,61]},{"a":1730,"t":"byte","b":[53,62,54,0,0,0,55,53]},{"a":1738,"t":"byte","b":[62,66,61,61,53,54,0,0]},{"a":1746,"t":"byte","b":[0,48,0,55,53,54,0,0]},{"a":1754,"t":"byte","b":[0,0,42,0,0,0,85,68]},{"a":1762,"t":"byte","b":[69,87,69,70,70,70,68,70]},{"a":1770,"t":"byte","b":[68,70,70,70,73,0,0,0]},{"a":1778,"t":"byte","b":[85,88,69,70,68,70,70,68]},{"a":1786,"t":"byte","b":[68,70,70,68,72,0,0,0]},{"a":1794,"t":"byte","b":[85,68,68,70,70,88,69,68]},{"a":1802,"t":"byte","b":[73,0,0,0,0,0,0,0]},{"a":1810,"l":"level_map_row5","c":"Landscape map row 5 ($0712-$0771), band 1's second tile row.","t":"byte","b":[48,64,41,59,48,0,52,0]},{"a":1818,"t":"byte","b":[0,0,0,48,42,48,0,0]},{"a":1826,"t":"byte","b":[52,0,0,42,0,60,0,52]},{"a":1834,"t":"byte","b":[0,0,0,0,52,0,0,0]},{"a":1842,"t":"byte","b":[0,0,0,0,52,0,0,58]},{"a":1850,"t":"byte","b":[0,0,41,0,0,0,71,0]},{"a":1858,"t":"byte","b":[71,0,71,0,0,0,0,0]},{"a":1866,"t":"byte","b":[0,0,0,0,77,0,0,0]},{"a":1874,"t":"byte","b":[71,0,71,0,0,0,0,0]},{"a":1882,"t":"byte","b":[0,0,0,0,77,0,0,0]},{"a":1890,"t":"byte","b":[71,0,0,0,0,0,71,0]},{"a":1898,"t":"byte","b":[77,0,0,0,0,15,8,34]},{"a":1906,"l":"level_map_row6","c":"Landscape map row 6 ($0772-$07D1), band 1's third tile row, columns 0-54 here (the rest follows the false symbol at $07A9).","t":"byte","b":[48,0,41,0,48,0,0,0]},{"a":1914,"t":"byte","b":[64,0,6,0,50,0,48,0]},{"a":1922,"t":"byte","b":[0,0,0,41,0,58,0,0]},{"a":1930,"t":"byte","b":[0,59,0,0,48,0,56,0]},{"a":1938,"t":"byte","b":[0,42,0,0,0,0,60,0]},{"a":1946,"t":"byte","b":[48,0,41,0,0,0,0,0]},{"a":1954,"t":"byte","b":[75,0,76,0,0,0,0]},{"a":1961,"l":"skip_operand_07a9","c":"False symbol: the operand of BIT $07A9 at $4AFE, where A9 07 is really LDA #$07 (the skip idiom). The bytes from here to $07D1 are the end of map row 6, columns 55-95.","t":"byte","b":[0,76,0,0,0,0,0,0],"x":[19198]},{"a":1969,"t":"byte","b":[0,0,0,76,0,0,0,0]},{"a":1977,"t":"byte","b":[0,75,0,0,0,0,0,0]},{"a":1985,"t":"byte","b":[0,0,0,76,0,0,0,75]},{"a":1993,"t":"byte","b":[0,0,0,0,0,18,14,33]},{"a":2001,"t":"byte","b":[34]},{"a":2002,"l":"level_map_row7","c":"Landscape map row 7, band 1's ground row: columns 0-45 are here ($07D2-$07FF) and the row goes on at $0800.","t":"byte","b":[17,18,40,33,34,63,57,56]},{"a":2010,"t":"byte","b":[17,18,49,32,40,33,34,57]},{"a":2018,"t":"byte","b":[63,17,18,40,33,34,56,58]},{"a":2026,"t":"byte","b":[59,64,57,59,63,59,57,17]},{"a":2034,"t":"byte","b":[18,40,33,34,59,57,58,17]},{"a":2042,"t":"byte","b":[18,22,51,33,34,17]},{"a":2048,"l":"level_map_row7_cols46_95","c":"Landscape map, tile row 7 from column 46 to 95 ($0800-$0831; the row starts at $07D2, below this range). The map is 16 rows of 96 tile numbers from $0532, row r at $0532 + 96 r (row address tables $0460/$0470), in four bands of four rows; each band holds two landscapes side by side (columns 0-44 and 45-89), a two-column gap and at 92-95 half of a special picture. Row 7 is the ground row of band 1 (rows 4-7): columns 45-89 are level 6's ground, 92-95 the bottom of the right half of the picture drawn after all eight levels are complete ($AF20, $B128 = 10). $78CF reads it, drawing one column of four tiles at a time.","t":"byte","b":[18,82,81,86,79,80,1,1]},{"a":2056,"t":"byte","b":[1,82,74,80,1,1,1,1]},{"a":2064,"t":"byte","b":[1,1,84,78,79,80,1,1]},{"a":2072,"t":"byte","b":[1,82,74,80,1,1,1,1]},{"a":2080,"t":"byte","b":[1,1,1,82,74,80,84,78]},{"a":2088,"t":"byte","b":[79,80,33,34,0,0,1,1]},{"a":2096,"t":"byte","b":[33,34]},{"a":2098,"l":"level_map_row8","c":"Landscape map, tile row 8 ($0832-$0891), the top row of band 2 (rows 8-11): columns 0-44 are level 3's landscape (start column $FF in $B2F0), 45-89 level 5's (start column $2C), 92-95 the top row of the Wiz-lab picture's left half (tiles $79 $7E $7F $80; $B128 = 9, drawn by $AB20). Mostly empty sky (tile 0). Besides $78CF, $7586 reads this row: it looks for two empty tiles from the level's start column + 6 + a random 0-31 and puts the Wizball's start there ($B1F1).","t":"byte","b":[0,26,0,0,10,0,0,0]},{"a":2106,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":2114,"t":"byte","b":[0,0,0,0,0,0,9,0]},{"a":2122,"t":"byte","b":[9,0,0,0,0,0,0,0]},{"a":2130,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":2138,"t":"byte","b":[10,0,59,64,59,0,0,102]},{"a":2146,"t":"byte","b":[101,104,112,0,0,102,101,104]},{"a":2154,"t":"byte","b":[100,112,0,0,117,101,104,104]},{"a":2162,"t":"byte","b":[104,104,104,100,101,112,95,96]},{"a":2170,"t":"byte","b":[97,114,101,112,0,0,0,102]},{"a":2178,"t":"byte","b":[101,104,104,104,104,104,98,101]},{"a":2186,"t":"byte","b":[101,112,0,0,121,126,127,128]},{"a":2194,"l":"level_map_row9","c":"Landscape map, tile row 9 ($0892-$08F1), the second row of band 2: level 3 in columns 0-44, level 5 in 45-89, Wiz-lab tiles $78 $8A $8B $8C in 92-95.","t":"byte","b":[64,58,59,10,0,10,0,0]},{"a":2202,"t":"byte","b":[0,0,0,26,63,59,64,26]},{"a":2210,"t":"byte","b":[60,59,26,0,0,0,0,9]},{"a":2218,"t":"byte","b":[0,0,0,0,0,0,64,26]},{"a":2226,"t":"byte","b":[0,0,0,0,0,0,0,10]},{"a":2234,"t":"byte","b":[0,10,60,59,56,0,0,102]},{"a":2242,"t":"byte","b":[101,112,105,105,0,115,115,0]},{"a":2250,"t":"byte","b":[0,0,0,0,0,102,112,105]},{"a":2258,"t":"byte","b":[0,105,0,0,115,0,0,0]},{"a":2266,"t":"byte","b":[0,0,109,0,0,0,0,115]},{"a":2274,"t":"byte","b":[109,0,105,0,105,0,0,109]},{"a":2282,"t":"byte","b":[109,0,0,0,120,138,139,140]},{"a":2290,"l":"level_map_row10","c":"Landscape map, tile row 10 ($08F2-$0951), the third row of band 2. Level 3's part holds its three Mount Rushmores (tiles $BC $BD $BE at columns 8-10, 20-22 and 35-37, base $BF in row 11). At $092B (column 57, level 5) is the stray tile number $F8: the tile table has only 192 entries, so $78CF draws 25 bytes of sound-effect data ($2642 + 25 x $F8 = $3E7A) as characters there. Remember's crack changes exactly this byte to $00, apparently its fix for the 'matrix in level 5' bug. Columns 92-95: Wiz-lab tiles $76 $89 $8F $90. Live: on level 5, with the view at tile column 54, the tile's bytes were on screen just right of the first well, including two glyphs $FF (the vector bytes) and a glyph $64.","t":"byte","b":[0,64,58,0,0,0,0,3]},{"a":2298,"t":"byte","b":[188,189,190,0,26,0,64,59]},{"a":2306,"t":"byte","b":[64,26,0,3,188,189,190,0]},{"a":2314,"t":"byte","b":[0,0,0,0,0,64,0,58]},{"a":2322,"t":"byte","b":[0,0,3,188,189,190,0,0]},{"a":2330,"t":"byte","b":[0,0,0,0,26,0,0,109]},{"a":2338,"t":"byte","b":[102,106,107,101,112,0,0,0]},{"a":2346,"t":"byte","b":[116,248,0,0,111,102,106,107]},{"a":2354,"t":"byte","b":[106,107,112,116,0,0,0,0]},{"a":2362,"t":"byte","b":[0,0,115,0,0,0,0,0]},{"a":2370,"t":"byte","b":[115,0,102,106,107,112,111,109]},{"a":2378,"t":"byte","b":[115,0,0,0,118,137,143,144]},{"a":2386,"l":"level_map_row11","c":"Landscape map, tile row 11 ($0952-$09B1), the ground row of band 2: level 3's ground (with dips, tiles $21 $22 and $11 $12 at columns 12-16, 28-32 and 43-46), level 5's ground from column 45, Wiz-lab tiles $77 $83 $84 $94 in 92-95.","t":"byte","b":[8,18,1,1,2,1,1,191]},{"a":2394,"t":"byte","b":[4,5,187,1,33,34,58,17]},{"a":2402,"t":"byte","b":[18,1,1,191,4,5,187,186]},{"a":2410,"t":"byte","b":[1,1,1,1,33,7,0,8]},{"a":2418,"t":"byte","b":[18,1,191,4,5,187,1,1]},{"a":2426,"t":"byte","b":[2,1,1,33,7,17,18,99]},{"a":2434,"t":"byte","b":[99,92,91,99,1,1,1,1]},{"a":2442,"t":"byte","b":[110,1,1,1,110,99,92,91]},{"a":2450,"t":"byte","b":[92,91,1,110,1,1,1,1]},{"a":2458,"t":"byte","b":[1,1,1,1,1,1,1,1]},{"a":2466,"t":"byte","b":[1,1,99,92,91,1,110,99]},{"a":2474,"t":"byte","b":[33,34,0,0,119,131,132,148]},{"a":2482,"l":"level_map_row12","c":"Landscape map, tile row 12 ($09B2-$0A11), the top row of band 3 (rows 12-15): columns 0-44 are level 4's landscape (start column $FF), 45-89 level 8's (start column $2C), 92-95 the top of the Wiz-lab picture's right half (tiles $95 $81 $82 $7D), reached after band 2's columns 92-95 when $75DF runs out and $76A2 moves the tile row down by four. $7586 also scans this row for the start of levels 4 and 8.","t":"byte","b":[0,0,165,161,0,0,0,0]},{"a":2490,"t":"byte","b":[0,0,0,0,0,160,161,0]},{"a":2498,"t":"byte","b":[0,0,0,0,0,0,165,161]},{"a":2506,"t":"byte","b":[159,167,0,0,0,0,0,0]},{"a":2514,"t":"byte","b":[0,0,0,0,0,0,0,160]},{"a":2522,"t":"byte","b":[161,166,161,0,0,0,0,182]},{"a":2530,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":2538,"t":"byte","b":[0,0,0,0,0,182,177,0]},{"a":2546,"t":"byte","b":[0,0,0,0,0,183,0,182]},{"a":2554,"t":"byte","b":[0,0,0,0,0,0,0,182]},{"a":2562,"t":"byte","b":[0,182,0,0,0,0,0,182]},{"a":2570,"t":"byte","b":[0,0,0,0,149,129,130,125]},{"a":2578,"l":"level_map_row13","c":"Landscape map, tile row 13 ($0A12-$0A71), the second row of band 3: level 4 in columns 0-44, level 8 in 45-89, Wiz-lab tiles $8D $8E $87 $7C in 92-95.","t":"byte","b":[0,0,0,162,163,0,0,0]},{"a":2586,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":2594,"t":"byte","b":[162,163,0,0,0,0,162,163]},{"a":2602,"t":"byte","b":[0,0,0,0,0,162,0,0]},{"a":2610,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":2618,"t":"byte","b":[0,0,162,163,0,0,0,177]},{"a":2626,"t":"byte","b":[185,0,0,0,0,181,177,185]},{"a":2634,"t":"byte","b":[0,185,177,185,0,0,0,0]},{"a":2642,"t":"byte","b":[181,181,0,177,0,177,0,177]},{"a":2650,"t":"byte","b":[0,0,181,0,0,185,177,177]},{"a":2658,"t":"byte","b":[0,0,0,185,185,0,0,181]},{"a":2666,"t":"byte","b":[0,0,0,0,141,142,135,124]},{"a":2674,"l":"level_map_row14","c":"Landscape map, tile row 14 ($0A72-$0AD1), the third row of band 3: level 4's scenery (tiles $96-$AC) in columns 0-44, level 8's (tiles $AD-$B9) in 45-89, Wiz-lab tiles $91 $92 $88 $7B in 92-95.","t":"byte","b":[0,0,154,153,0,0,158,168]},{"a":2682,"t":"byte","b":[169,170,157,0,0,0,0,154]},{"a":2690,"t":"byte","b":[153,158,156,157,0,154,153,0]},{"a":2698,"t":"byte","b":[0,0,0,0,154,153,158,168]},{"a":2706,"t":"byte","b":[169,171,169,170,157,0,0,0]},{"a":2714,"t":"byte","b":[0,154,153,0,0,0,0,176]},{"a":2722,"t":"byte","b":[184,177,185,177,180,178,179,0]},{"a":2730,"t":"byte","b":[176,0,0,0,0,176,0,180]},{"a":2738,"t":"byte","b":[178,178,179,0,177,185,0,184]},{"a":2746,"t":"byte","b":[0,180,178,179,184,0,0,0]},{"a":2754,"t":"byte","b":[0,176,184,0,0,177,180,178]},{"a":2762,"t":"byte","b":[179,0,0,0,145,146,136,123]},{"a":2770,"l":"level_map_row15","c":"Landscape map, tile row 15 ($0AD2-$0B31), the ground row of band 3 and the last row of the map: level 4's ground in columns 0-44 and level 8's in 45-89, each starting with tiles $11 $12 and ending with $21 $22; Wiz-lab tiles $93 $86 $85 $7A in 92-95. The map ends at $0B31.","t":"byte","b":[17,18,164,150,1,1,1,151]},{"a":2778,"t":"byte","b":[152,151,152,1,164,155,1,1]},{"a":2786,"t":"byte","b":[150,1,151,152,1,1,150,164]},{"a":2794,"t":"byte","b":[172,1,1,1,164,150,164,151]},{"a":2802,"t":"byte","b":[152,151,152,151,152,1,1,155]},{"a":2810,"t":"byte","b":[1,1,150,33,34,17,18,175]},{"a":2818,"t":"byte","b":[175,1,1,1,1,174,1,1]},{"a":2826,"t":"byte","b":[175,173,1,1,1,175,1,1]},{"a":2834,"t":"byte","b":[174,174,1,1,1,1,1,175]},{"a":2842,"t":"byte","b":[1,1,174,1,175,1,1,1]},{"a":2850,"t":"byte","b":[1,175,175,1,1,1,173,174]},{"a":2858,"t":"byte","b":[33,34,0,0,147,134,133,122]},{"a":2866,"l":"map_glyphs_gap","c":"16 bytes between the landscape map (which ends at $0B31) and the first glyph block ($0B42): eight $00 then eight $FF, a blank and a solid 8-byte glyph by their look. No traced instruction or pointer reaches them (the glyph-block table at $B31C starts its blocks at $0B42 and above); what they are for is unknown.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":2874,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":2882,"l":"landscape_glyphs_3","c":"Level 3's landscape glyphs: 96 multicolour character glyphs, $300 bytes, the first of nine such blocks at $0B42-$2641. When a landscape is set up, $77C6 copies the first $2F8 bytes of the level's block (address from the word table $B31C, indexed by $B128 x 2) to $FD00-$FFF7: glyphs $A0-$FE of the landscape character set at $F800 ($D018 = $8E/$9E/$AE, $8A25). The 96th glyph ($FF, eight $FF bytes in every block) is never copied, because $FFF8-$FFFF hold the vectors. $B31C entry 2 (level 3) points here.","t":"byte","b":[0,0,0,3,3,15,14,62]},{"a":2890,"t":"byte","b":[0,63,255,255,255,255,255,255]},{"a":2898,"t":"byte","b":[0,192,240,252,252,255,247,251]},{"a":2906,"t":"byte","b":[0,0,0,128,168,169,170,90]},{"a":2914,"t":"byte","b":[230,217,234,250,234,170,154,202]},{"a":2922,"t":"byte","b":[190,187,237,232,236,220,159,107]},{"a":2930,"t":"byte","b":[255,93,12,12,93,127,255,190]},{"a":2938,"t":"byte","b":[253,125,30,15,78,95,250,249]},{"a":2946,"t":"byte","b":[192,192,192,138,155,175,175,159]},{"a":2954,"t":"byte","b":[0,0,0,128,32,200,248,242]},{"a":2962,"t":"byte","b":[174,102,151,81,81,144,168,171]},{"a":2970,"t":"byte","b":[246,241,245,208,117,191,127,53]},{"a":2978,"t":"byte","b":[234,233,248,120,249,181,228,148]},{"a":2986,"t":"byte","b":[95,25,80,36,51,191,63,63]},{"a":2994,"t":"byte","b":[253,218,214,241,244,252,206,78]},{"a":3002,"t":"byte","b":[171,186,174,185,183,215,91,191]},{"a":3010,"t":"byte","b":[193,192,240,176,190,238,255,251]},{"a":3018,"t":"byte","b":[83,67,3,227,155,174,174,175]},{"a":3026,"t":"byte","b":[191,191,175,175,239,251,251,249]},{"a":3034,"t":"byte","b":[95,207,83,171,255,253,233,164]},{"a":3042,"t":"byte","b":[255,191,175,150,169,170,169,170]},{"a":3050,"t":"byte","b":[255,255,255,255,95,151,105,90]},{"a":3058,"t":"byte","b":[158,222,222,218,235,247,255,127]},{"a":3066,"t":"byte","b":[254,254,255,255,255,255,254,249]},{"a":3074,"t":"byte","b":[4,160,170,238,251,171,106,170]},{"a":3082,"t":"byte","b":[250,246,230,98,86,98,146,178]},{"a":3090,"t":"byte","b":[0,0,0,14,106,169,169,169]},{"a":3098,"t":"byte","b":[169,169,169,169,169,169,169,165]},{"a":3106,"t":"byte","b":[165,165,165,165,165,165,165,165]},{"a":3114,"t":"byte","b":[190,159,175,170,170,170,166,169]},{"a":3122,"t":"byte","b":[170,234,254,95,253,214,106,170]},{"a":3130,"t":"byte","b":[165,233,250,255,191,170,170,170]},{"a":3138,"t":"byte","b":[170,171,191,240,127,151,169,170]},{"a":3146,"t":"byte","b":[175,252,0,0,0,255,87,169]},{"a":3154,"t":"byte","b":[255,21,0,0,0,0,255,85]},{"a":3162,"t":"byte","b":[250,127,85,1,0,255,213,106]},{"a":3170,"t":"byte","b":[170,234,254,95,253,214,106,170]},{"a":3178,"t":"byte","b":[106,106,106,154,154,154,154,153]},{"a":3186,"t":"byte","b":[127,174,150,169,154,150,165,164]},{"a":3194,"t":"byte","b":[171,169,174,167,181,175,170,94]},{"a":3202,"t":"byte","b":[247,191,239,191,235,169,170,170]},{"a":3210,"t":"byte","b":[235,239,239,255,203,154,86,170]},{"a":3218,"t":"byte","b":[171,170,104,105,169,170,106,170]},{"a":3226,"t":"byte","b":[150,6,150,86,230,166,91,254]},{"a":3234,"t":"byte","b":[150,154,154,154,154,154,170,86]},{"a":3242,"t":"byte","b":[85,84,85,87,90,110,171,167]},{"a":3250,"t":"byte","b":[5,187,103,95,62,121,84,195]},{"a":3258,"t":"byte","b":[0,0,0,64,128,138,173,151]},{"a":3266,"t":"byte","b":[0,0,0,0,0,128,128,32]},{"a":3274,"t":"byte","b":[249,234,234,170,110,174,170,153]},{"a":3282,"t":"byte","b":[0,0,0,10,42,153,104,100]},{"a":3290,"t":"byte","b":[0,0,170,170,106,138,85,95]},{"a":3298,"t":"byte","b":[127,127,63,63,63,121,21,84]},{"a":3306,"t":"byte","b":[160,208,195,250,186,94,214,214]},{"a":3314,"t":"byte","b":[10,182,165,165,164,166,166,40]},{"a":3322,"t":"byte","b":[84,23,15,15,31,117,84,81]},{"a":3330,"t":"byte","b":[255,255,255,255,250,213,213,208]},{"a":3338,"t":"byte","b":[0,117,189,159,175,174,238,235]},{"a":3346,"t":"byte","b":[224,241,250,190,250,166,198,218]},{"a":3354,"t":"byte","b":[65,150,106,106,106,106,106,154]},{"a":3362,"t":"byte","b":[85,101,103,91,90,91,91,86]},{"a":3370,"t":"byte","b":[245,247,255,107,94,30,127,94]},{"a":3378,"t":"byte","b":[175,171,126,250,170,166,166,166]},{"a":3386,"t":"byte","b":[230,155,109,173,181,185,169,169]},{"a":3394,"t":"byte","b":[170,106,170,170,170,170,170,170]},{"a":3402,"t":"byte","b":[174,171,170,170,170,170,170,169]},{"a":3410,"t":"byte","b":[170,170,166,166,169,169,169,165]},{"a":3418,"t":"byte","b":[169,169,170,170,170,170,154,42]},{"a":3426,"t":"byte","b":[170,170,106,106,106,106,106,106]},{"a":3434,"t":"byte","b":[170,234,234,154,154,154,154,154]},{"a":3442,"t":"byte","b":[233,250,250,170,170,170,170,170]},{"a":3450,"t":"byte","b":[165,165,165,165,149,149,149,149]},{"a":3458,"t":"byte","b":[149,149,149,149,149,149,85,86]},{"a":3466,"t":"byte","b":[250,250,250,250,250,250,250,250]},{"a":3474,"t":"byte","b":[250,250,250,250,250,250,250,250]},{"a":3482,"t":"byte","b":[254,254,254,254,254,254,254,254]},{"a":3490,"t":"byte","b":[254,254,254,254,254,254,255,191]},{"a":3498,"t":"byte","b":[234,234,234,234,234,234,234,250]},{"a":3506,"t":"byte","b":[3,62,234,234,234,234,234,234]},{"a":3514,"t":"byte","b":[233,84,165,170,170,170,170,170]},{"a":3522,"t":"byte","b":[170,101,21,168,170,170,170,170]},{"a":3530,"t":"byte","b":[148,148,68,80,170,170,170,170]},{"a":3538,"t":"byte","b":[106,106,105,101,84,86,170,170]},{"a":3546,"t":"byte","b":[106,26,26,26,150,165,170,170]},{"a":3554,"t":"byte","b":[154,154,154,154,134,81,170,170]},{"a":3562,"t":"byte","b":[172,169,169,170,165,86,170,170]},{"a":3570,"t":"byte","b":[106,169,106,105,21,170,170,170]},{"a":3578,"t":"byte","b":[170,170,90,21,170,170,170,170]},{"a":3586,"t":"byte","b":[154,154,69,106,170,170,170,170]},{"a":3594,"t":"byte","b":[171,170,170,170,170,170,170,170]},{"a":3602,"t":"byte","b":[169,86,170,170,170,170,170,170]},{"a":3610,"t":"byte","b":[106,170,170,170,170,170,170,170]},{"a":3618,"t":"byte","b":[52,52,245,245,245,52,52,52]},{"a":3626,"t":"byte","b":[52,52,52,52,52,52,52,52]},{"a":3634,"t":"byte","b":[52,52,52,245,245,245,52,52]},{"a":3642,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":3650,"l":"landscape_glyphs_2","c":"Level 2's landscape glyphs $A0-$FF (block 2 of 9, $0E42-$1141), copied to $FD00 by $77C6 for $B31C entries 1 (level 2) and 10 (the picture shown after all eight levels, $AF20). This label covers the bytes up to $0FFF; the $1000 edge splits the block.","t":"byte","b":[228,228,233,234,212,209,208,212]},{"a":3658,"t":"byte","b":[52,52,52,182,97,52,52,52]},{"a":3666,"t":"byte","b":[57,57,233,233,85,133,21,33]},{"a":3674,"t":"byte","b":[0,0,192,192,192,208,208,208]},{"a":3682,"t":"byte","b":[144,144,144,128,128,128,0,0]},{"a":3690,"t":"byte","b":[1,5,9,1,1,1,0,0]},{"a":3698,"t":"byte","b":[0,0,0,0,3,14,56,21]},{"a":3706,"t":"byte","b":[36,48,225,228,164,149,64,85]},{"a":3714,"t":"byte","b":[0,0,0,0,128,16,8,84]},{"a":3722,"t":"byte","b":[48,252,231,225,68,16,48,48]},{"a":3730,"t":"byte","b":[12,63,249,120,17,4,8,8]},{"a":3738,"t":"byte","b":[48,48,48,252,230,225,196,16]},{"a":3746,"t":"byte","b":[8,8,12,63,185,120,17,4]},{"a":3754,"t":"byte","b":[144,225,225,225,225,225,225,225]},{"a":3762,"t":"byte","b":[0,0,3,2,1,13,13,13]},{"a":3770,"t":"byte","b":[106,191,106,106,21,21,0,21]},{"a":3778,"t":"byte","b":[239,239,239,239,239,237,231,239]},{"a":3786,"t":"byte","b":[165,153,153,90,102,165,165,165]},{"a":3794,"t":"byte","b":[5,5,5,5,5,133,37,5]},{"a":3802,"t":"byte","b":[0,3,63,240,240,127,215,237]},{"a":3810,"t":"byte","b":[15,252,0,0,0,0,252,95]},{"a":3818,"t":"byte","b":[255,85,0,0,0,0,0,255]},{"a":3826,"t":"byte","b":[240,127,26,2,0,0,63,245]},{"a":3834,"t":"byte","b":[0,192,252,175,111,253,213,69]},{"a":3842,"t":"byte","b":[250,127,26,2,0,0,63,245]},{"a":3850,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":3858,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":3866,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":3874,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":3882,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":3890,"t":"byte","b":[170,234,254,175,111,253,213,69]},{"a":3898,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":3906,"t":"byte","b":[170,171,191,240,240,127,215,237]},{"a":3914,"t":"byte","b":[175,252,0,0,0,0,252,95]},{"a":3922,"t":"byte","b":[255,85,0,0,0,0,0,255]},{"a":3930,"t":"byte","b":[250,127,26,2,0,0,63,245]},{"a":3938,"t":"byte","b":[170,234,254,175,111,253,213,69]},{"a":3946,"t":"byte","b":[0,3,63,240,240,127,215,237]},{"a":3954,"t":"byte","b":[15,252,0,0,0,0,252,95]},{"a":3962,"t":"byte","b":[240,127,26,2,0,0,63,245]},{"a":3970,"t":"byte","b":[0,192,252,175,111,253,213,69]},{"a":3978,"t":"byte","b":[186,186,186,170,170,170,170,170]},{"a":3986,"t":"byte","b":[165,165,165,170,170,170,170,170]},{"a":3994,"t":"byte","b":[181,186,186,186,186,186,186,186]},{"a":4002,"t":"byte","b":[85,165,165,165,165,165,165,165]},{"a":4010,"t":"byte","b":[5,5,6,6,5,5,5,5]},{"a":4018,"t":"byte","b":[239,239,175,175,111,111,239,239]},{"a":4026,"t":"byte","b":[239,239,239,239,239,47,15,0]},{"a":4034,"t":"byte","b":[181,186,186,186,186,186,186,58]},{"a":4042,"t":"byte","b":[81,81,81,81,81,81,81,80]},{"a":4050,"t":"byte","b":[5,5,5,5,5,4,0,0]},{"a":4058,"t":"byte","b":[238,230,237,238,238,238,238,238]},{"a":4066,"t":"byte","b":[165,165,165,102,90,153,153,165]},{"a":4074,"t":"byte","b":[5,37,133,5,5,5,5,5]},{"a":4082,"t":"byte","b":[234,234,234,234,234,238,238,238]},{"a":4090,"t":"byte","b":[170,170,170,170,170,170]},{"a":4096,"l":"landscape_glyphs_2_part2","c":"Level 2's landscape glyphs continued from $0E42: bytes $1000-$1141, from row 6 of glyph $D7 to glyph $FF ($1000 is a fixed span edge).","t":"byte","b":[170,170,169,169,165,165,165,133]},{"a":4104,"t":"byte","b":[133,69,85,85,90,106,106,170]},{"a":4112,"t":"byte","b":[170,170,85,170,170,170,170,170]},{"a":4120,"t":"byte","b":[170,170,85,85,166,169,169,170]},{"a":4128,"t":"byte","b":[170,170,174,170,170,170,170,170]},{"a":4136,"t":"byte","b":[170,170,165,165,170,170,170,170]},{"a":4144,"t":"byte","b":[170,170,6,170,170,170,170,170]},{"a":4152,"t":"byte","b":[170,170,225,225,225,225,225,225]},{"a":4160,"t":"byte","b":[241,127,175,175,170,170,170,170]},{"a":4168,"t":"byte","b":[170,170,181,186,186,170,170,170]},{"a":4176,"t":"byte","b":[170,170,85,165,165,170,170,170]},{"a":4184,"t":"byte","b":[170,170,81,81,82,170,170,170]},{"a":4192,"t":"byte","b":[170,170,6,42,170,170,170,170]},{"a":4200,"t":"byte","b":[170,170,239,239,239,239,239,239]},{"a":4208,"t":"byte","b":[239,239,186,186,186,186,186,186]},{"a":4216,"t":"byte","b":[186,186,165,165,165,165,165,165]},{"a":4224,"t":"byte","b":[165,165,81,81,81,81,81,81]},{"a":4232,"t":"byte","b":[81,81,5,5,5,5,5,5]},{"a":4240,"t":"byte","b":[5,5,186,182,185,186,186,186]},{"a":4248,"t":"byte","b":[186,186,165,165,165,102,90,153]},{"a":4256,"t":"byte","b":[153,165,81,97,145,81,81,81]},{"a":4264,"t":"byte","b":[81,81,170,255,170,170,85,85]},{"a":4272,"t":"byte","b":[0,85,225,225,225,225,225,225]},{"a":4280,"t":"byte","b":[225,225,250,228,228,228,228,228]},{"a":4288,"t":"byte","b":[164,164,0,64,64,64,64,64]},{"a":4296,"t":"byte","b":[64,64,0,2,2,2,2,2]},{"a":4304,"t":"byte","b":[2,2,254,234,234,234,169,213]},{"a":4312,"t":"byte","b":[149,128,2,2,2,2,2,2]},{"a":4320,"t":"byte","b":[11,171,21,0,0,0,0,0]},{"a":4328,"t":"byte","b":[0,0,148,148,145,81,81,68]},{"a":4336,"t":"byte","b":[20,80,64,64,0,0,0,0]},{"a":4344,"t":"byte","b":[0,0,225,225,162,162,97,97]},{"a":4352,"t":"byte","b":[225,225,15,58,191,250,186,186]},{"a":4360,"t":"byte","b":[117,117,213,193,213,20,0,0]},{"a":4368,"t":"byte","b":[0,0,0,85,0,0,0,0]},{"a":4376,"t":"byte","b":[0,0,60,233,253,233,233,233]},{"a":4384,"t":"byte","b":[213,213,0,0,170,255,170,170]},{"a":4392,"t":"byte","b":[85,85,0,0,0,0,0,0]},{"a":4400,"t":"byte","b":[0,0,102,102,102,102,102,60]},{"a":4408,"t":"byte","b":[24,0,255,255,255,255,255,255]},{"a":4416,"t":"byte","b":[255,255]},{"a":4418,"l":"landscape_glyphs_1","c":"Level 1's landscape glyphs $A0-$FF (block 3 of 9, $1142-$1441), $B31C entry 0. In the level-1 play snapshot $FD00-$FFF7 equals $1142-$1439.","t":"byte","b":[251,251,186,254,187,187,190,251]},{"a":4426,"t":"byte","b":[184,240,208,241,248,240,208,176]},{"a":4434,"t":"byte","b":[65,65,0,17,17,16,16,68]},{"a":4442,"t":"byte","b":[190,174,254,238,250,254,190,250]},{"a":4450,"t":"byte","b":[176,252,240,208,240,244,241,212]},{"a":4458,"t":"byte","b":[69,69,81,17,81,69,4,69]},{"a":4466,"t":"byte","b":[250,122,254,250,186,254,234,250]},{"a":4474,"t":"byte","b":[240,224,240,244,241,224,176,244]},{"a":4482,"t":"byte","b":[65,1,65,69,65,65,65,70]},{"a":4490,"t":"byte","b":[171,171,171,171,175,175,191,254]},{"a":4498,"t":"byte","b":[106,42,106,106,26,26,6,69]},{"a":4506,"t":"byte","b":[190,238,62,186,186,190,238,190]},{"a":4514,"t":"byte","b":[1,65,64,65,1,68,65,65]},{"a":4522,"t":"byte","b":[190,187,186,238,190,254,46,58]},{"a":4530,"t":"byte","b":[69,65,65,81,17,64,65,65]},{"a":4538,"t":"byte","b":[241,208,240,252,176,242,170,170]},{"a":4546,"t":"byte","b":[20,6,18,1,42,170,170,170]},{"a":4554,"t":"byte","b":[0,0,40,170,174,186,190,254]},{"a":4562,"t":"byte","b":[36,177,209,101,164,177,240,176]},{"a":4570,"t":"byte","b":[0,0,108,169,209,129,145,97]},{"a":4578,"t":"byte","b":[0,0,0,2,11,11,43,47]},{"a":4586,"t":"byte","b":[0,0,170,191,254,186,237,184]},{"a":4594,"t":"byte","b":[0,0,0,128,224,80,52,68]},{"a":4602,"t":"byte","b":[47,190,191,187,251,190,175,46]},{"a":4610,"t":"byte","b":[247,217,156,229,152,229,228,144]},{"a":4618,"t":"byte","b":[4,5,65,17,5,5,65,4]},{"a":4626,"t":"byte","b":[46,39,11,8,1,0,0,0]},{"a":4634,"t":"byte","b":[136,16,65,32,69,85,0,0]},{"a":4642,"t":"byte","b":[4,20,16,80,64,0,0,0]},{"a":4650,"t":"byte","b":[170,170,170,170,170,170,95,7]},{"a":4658,"t":"byte","b":[170,234,254,127,23,220,240,20]},{"a":4666,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":4674,"t":"byte","b":[170,171,188,240,240,191,251,238]},{"a":4682,"t":"byte","b":[171,255,117,0,0,0,207,255]},{"a":4690,"t":"byte","b":[254,95,37,0,0,0,63,253]},{"a":4698,"t":"byte","b":[250,127,87,9,0,3,63,247]},{"a":4706,"t":"byte","b":[170,234,254,127,23,220,240,20]},{"a":4714,"t":"byte","b":[0,3,63,240,240,127,215,237]},{"a":4722,"t":"byte","b":[15,252,0,0,0,0,252,95]},{"a":4730,"t":"byte","b":[240,127,26,2,0,0,63,245]},{"a":4738,"t":"byte","b":[0,192,252,175,111,253,213,69]},{"a":4746,"t":"byte","b":[171,174,170,170,170,170,170,170]},{"a":4754,"t":"byte","b":[0,64,42,138,170,170,170,170]},{"a":4762,"t":"byte","b":[0,0,65,20,10,170,170,170]},{"a":4770,"t":"byte","b":[170,170,170,170,170,170,90,22]},{"a":4778,"t":"byte","b":[170,170,106,26,22,1,68,17]},{"a":4786,"t":"byte","b":[21,17,4,0,65,64,16,17]},{"a":4794,"t":"byte","b":[170,170,170,170,106,106,26,70]},{"a":4802,"t":"byte","b":[238,171,191,170,170,170,170,170]},{"a":4810,"t":"byte","b":[170,170,170,170,170,171,175,254]},{"a":4818,"t":"byte","b":[170,170,170,170,171,171,175,190]},{"a":4826,"t":"byte","b":[171,171,175,190,187,251,239,190]},{"a":4834,"t":"byte","b":[238,187,251,239,190,190,190,251]},{"a":4842,"t":"byte","b":[235,239,191,254,170,170,170,170]},{"a":4850,"t":"byte","b":[86,150,85,149,153,149,165,101]},{"a":4858,"t":"byte","b":[149,165,165,169,105,89,90,102]},{"a":4866,"t":"byte","b":[250,235,239,175,190,170,170,170]},{"a":4874,"t":"byte","b":[251,251,187,239,175,187,170,170]},{"a":4882,"t":"byte","b":[244,212,245,236,245,153,170,170]},{"a":4890,"t":"byte","b":[68,0,16,17,64,130,170,170]},{"a":4898,"t":"byte","b":[4,1,16,5,65,40,170,170]},{"a":4906,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":4914,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":4922,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":4930,"t":"byte","b":[175,175,170,170,170,170,170,170]},{"a":4938,"t":"byte","b":[181,186,186,170,170,170,170,170]},{"a":4946,"t":"byte","b":[181,212,240,248,240,209,241,236]},{"a":4954,"t":"byte","b":[81,81,82,170,170,170,170,170]},{"a":4962,"t":"byte","b":[6,42,170,170,170,170,170,170]},{"a":4970,"t":"byte","b":[239,255,239,190,191,254,250,251]},{"a":4978,"t":"byte","b":[187,187,190,190,190,250,251,250]},{"a":4986,"t":"byte","b":[5,1,65,68,16,17,4,68]},{"a":4994,"t":"byte","b":[16,4,1,65,68,64,16,16]},{"a":5002,"t":"byte","b":[0,56,52,52,52,52,52,181]},{"a":5010,"t":"byte","b":[0,2,11,10,47,47,46,190]},{"a":5018,"t":"byte","b":[184,238,191,251,255,186,254,234]},{"a":5026,"t":"byte","b":[0,0,128,64,224,144,16,132]},{"a":5034,"t":"byte","b":[0,0,0,2,2,2,10,43]},{"a":5042,"t":"byte","b":[0,0,20,244,111,22,1,0]},{"a":5050,"t":"byte","b":[175,255,187,15,240,175,106,21]},{"a":5058,"t":"byte","b":[165,232,161,152,0,255,170,85]},{"a":5066,"t":"byte","b":[16,68,20,64,63,234,165,80]},{"a":5074,"t":"byte","b":[0,0,80,124,228,80,0,0]},{"a":5082,"t":"byte","b":[165,181,165,181,246,166,181,234]},{"a":5090,"t":"byte","b":[128,46,40,46,12,11,1,0]},{"a":5098,"t":"byte","b":[0,4,17,4,193,16,129,84]},{"a":5106,"t":"byte","b":[4,16,0,16,64,64,0,0]},{"a":5114,"t":"byte","b":[0,0,0,64,64,64,144,164]},{"a":5122,"t":"byte","b":[37,9,2,2,2,0,0,0]},{"a":5130,"t":"byte","b":[80,97,80,100,161,145,165,97]},{"a":5138,"t":"byte","b":[20,80,64,64,64,0,0,0]},{"a":5146,"t":"byte","b":[161,20,36,36,36,36,36,0]},{"a":5154,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":5162,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":5170,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":5178,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":5186,"l":"landscape_glyphs_7","c":"Level 7's landscape glyphs $A0-$FF (block 4 of 9, $1442-$1741), $B31C entry 6.","t":"byte","b":[251,251,186,254,187,187,190,251]},{"a":5194,"t":"byte","b":[184,240,208,241,248,240,208,176]},{"a":5202,"t":"byte","b":[65,65,0,17,17,16,16,68]},{"a":5210,"t":"byte","b":[190,174,254,238,250,254,190,250]},{"a":5218,"t":"byte","b":[176,252,240,208,240,244,241,212]},{"a":5226,"t":"byte","b":[69,69,81,17,81,69,4,69]},{"a":5234,"t":"byte","b":[250,122,254,250,186,254,234,250]},{"a":5242,"t":"byte","b":[240,224,240,244,241,224,176,244]},{"a":5250,"t":"byte","b":[65,1,65,69,65,65,65,70]},{"a":5258,"t":"byte","b":[171,171,171,171,175,175,191,254]},{"a":5266,"t":"byte","b":[106,42,106,106,26,26,6,69]},{"a":5274,"t":"byte","b":[190,238,62,186,186,190,238,190]},{"a":5282,"t":"byte","b":[1,65,64,65,1,68,65,65]},{"a":5290,"t":"byte","b":[190,187,186,238,190,254,46,58]},{"a":5298,"t":"byte","b":[69,65,65,81,17,64,65,65]},{"a":5306,"t":"byte","b":[241,208,240,252,176,242,170,170]},{"a":5314,"t":"byte","b":[20,6,18,1,42,170,170,170]},{"a":5322,"t":"byte","b":[0,0,40,170,174,186,190,254]},{"a":5330,"t":"byte","b":[36,177,209,101,164,177,240,176]},{"a":5338,"t":"byte","b":[0,0,108,169,209,129,145,97]},{"a":5346,"t":"byte","b":[0,0,0,2,11,11,43,47]},{"a":5354,"t":"byte","b":[0,0,170,191,254,186,237,184]},{"a":5362,"t":"byte","b":[0,0,0,128,224,80,52,68]},{"a":5370,"t":"byte","b":[47,190,191,187,251,190,175,46]},{"a":5378,"t":"byte","b":[247,217,156,229,152,229,228,144]},{"a":5386,"t":"byte","b":[4,5,65,17,5,5,65,4]},{"a":5394,"t":"byte","b":[46,39,11,8,1,0,0,0]},{"a":5402,"t":"byte","b":[136,16,65,32,69,85,0,0]},{"a":5410,"t":"byte","b":[4,20,16,80,64,0,0,0]},{"a":5418,"t":"byte","b":[170,170,170,170,170,170,95,7]},{"a":5426,"t":"byte","b":[170,234,254,127,23,220,240,20]},{"a":5434,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":5442,"t":"byte","b":[170,171,188,240,240,191,251,238]},{"a":5450,"t":"byte","b":[171,255,117,0,0,0,207,255]},{"a":5458,"t":"byte","b":[254,95,37,0,0,0,63,253]},{"a":5466,"t":"byte","b":[250,127,87,9,0,3,63,247]},{"a":5474,"t":"byte","b":[170,234,254,127,23,220,240,20]},{"a":5482,"t":"byte","b":[0,3,63,240,240,127,215,237]},{"a":5490,"t":"byte","b":[15,252,0,0,0,0,252,95]},{"a":5498,"t":"byte","b":[240,127,26,2,0,0,63,245]},{"a":5506,"t":"byte","b":[0,192,252,175,111,253,213,69]},{"a":5514,"t":"byte","b":[171,174,170,170,170,170,170,170]},{"a":5522,"t":"byte","b":[0,64,42,138,170,170,170,170]},{"a":5530,"t":"byte","b":[0,0,65,20,10,170,170,170]},{"a":5538,"t":"byte","b":[170,170,170,170,170,170,90,22]},{"a":5546,"t":"byte","b":[170,170,106,26,22,1,68,17]},{"a":5554,"t":"byte","b":[21,17,4,0,65,64,16,17]},{"a":5562,"t":"byte","b":[170,170,170,170,106,106,26,70]},{"a":5570,"t":"byte","b":[0,34,0,2,0,0,0,0]},{"a":5578,"t":"byte","b":[0,128,35,136,175,10,0,0]},{"a":5586,"t":"byte","b":[0,12,50,171,238,191,171,10]},{"a":5594,"t":"byte","b":[0,48,204,242,239,170,250,175]},{"a":5602,"t":"byte","b":[0,12,195,136,187,239,190,170]},{"a":5610,"t":"byte","b":[238,174,191,251,175,170,170,170]},{"a":5618,"t":"byte","b":[235,251,175,43,2,0,0,0]},{"a":5626,"t":"byte","b":[175,42,2,0,0,0,0,0]},{"a":5634,"t":"byte","b":[175,251,238,138,0,0,0,0]},{"a":5642,"t":"byte","b":[251,251,187,239,175,187,170,170]},{"a":5650,"t":"byte","b":[0,131,0,44,7,11,90,98]},{"a":5658,"t":"byte","b":[70,59,147,29,96,0,0,0]},{"a":5666,"t":"byte","b":[4,1,16,5,65,40,170,170]},{"a":5674,"t":"byte","b":[68,68,4,4,4,0,0,0]},{"a":5682,"t":"byte","b":[170,170,106,106,106,74,74,70]},{"a":5690,"t":"byte","b":[162,168,168,168,168,168,164,164]},{"a":5698,"t":"byte","b":[175,175,170,170,170,170,170,170]},{"a":5706,"t":"byte","b":[185,190,190,170,170,170,170,170]},{"a":5714,"t":"byte","b":[181,212,240,212,170,170,170,170]},{"a":5722,"t":"byte","b":[81,81,82,170,170,170,170,170]},{"a":5730,"t":"byte","b":[6,42,170,170,170,170,170,170]},{"a":5738,"t":"byte","b":[239,255,239,190,191,254,250,251]},{"a":5746,"t":"byte","b":[187,187,190,190,190,250,251,250]},{"a":5754,"t":"byte","b":[5,1,65,68,16,17,4,68]},{"a":5762,"t":"byte","b":[16,4,1,65,68,64,16,16]},{"a":5770,"t":"byte","b":[220,153,205,220,156,157,221,200]},{"a":5778,"t":"byte","b":[220,221,78,95,27,157,220,221]},{"a":5786,"t":"byte","b":[221,157,220,30,95,91,141,221]},{"a":5794,"t":"byte","b":[190,234,174,186,185,36,0,0]},{"a":5802,"t":"byte","b":[244,224,241,181,100,209,181,36]},{"a":5810,"t":"byte","b":[69,81,69,1,69,20,0,0]},{"a":5818,"t":"byte","b":[0,51,192,142,227,62,239,170]},{"a":5826,"t":"byte","b":[12,0,195,60,239,254,251,190]},{"a":5834,"t":"byte","b":[0,1,0,0,4,64,1,4]},{"a":5842,"t":"byte","b":[69,20,17,80,16,80,64,65]},{"a":5850,"t":"byte","b":[238,171,251,251,186,251,190,238]},{"a":5858,"t":"byte","b":[0,0,0,1,64,0,21,81]},{"a":5866,"t":"byte","b":[0,16,1,69,16,64,64,0]},{"a":5874,"t":"byte","b":[183,239,251,111,11,2,2,0]},{"a":5882,"t":"byte","b":[0,64,0,1,68,0,17,69]},{"a":5890,"t":"byte","b":[0,4,0,1,16,0,68,17]},{"a":5898,"t":"byte","b":[0,0,4,0,17,84,64,5]},{"a":5906,"t":"byte","b":[0,0,5,80,0,69,80,0]},{"a":5914,"t":"byte","b":[1,64,4,0,64,0,0,0]},{"a":5922,"t":"byte","b":[16,1,68,21,65,0,0,0]},{"a":5930,"t":"byte","b":[0,17,20,64,0,0,0,0]},{"a":5938,"t":"byte","b":[102,102,102,102,102,60,24,0]},{"a":5946,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":5954,"l":"landscape_glyphs_6","c":"Level 6's landscape glyphs $A0-$FF (block 5 of 9, $1742-$1A41), $B31C entry 5.","t":"byte","b":[229,229,229,245,53,57,57,57]},{"a":5962,"t":"byte","b":[57,57,53,52,52,52,52,52]},{"a":5970,"t":"byte","b":[52,52,48,48,48,48,48,48]},{"a":5978,"t":"byte","b":[85,127,235,170,85,85,93,11]},{"a":5986,"t":"byte","b":[95,255,250,174,170,85,181,165]},{"a":5994,"t":"byte","b":[213,255,191,170,90,85,85,89]},{"a":6002,"t":"byte","b":[2,2,0,0,0,0,0,0]},{"a":6010,"t":"byte","b":[233,249,186,190,190,190,46,46]},{"a":6018,"t":"byte","b":[85,85,85,85,85,85,149,148]},{"a":6026,"t":"byte","b":[46,47,47,11,11,11,11,11]},{"a":6034,"t":"byte","b":[148,148,148,148,148,148,148,148]},{"a":6042,"t":"byte","b":[11,11,2,2,2,2,2,2]},{"a":6050,"t":"byte","b":[164,228,228,228,212,212,212,212]},{"a":6058,"t":"byte","b":[2,2,2,2,2,0,0,0]},{"a":6066,"t":"byte","b":[208,208,208,208,208,208,208,208]},{"a":6074,"t":"byte","b":[90,86,149,149,165,165,233,233]},{"a":6082,"t":"byte","b":[208,208,208,208,208,208,208,208]},{"a":6090,"t":"byte","b":[208,208,208,192,192,192,192,192]},{"a":6098,"t":"byte","b":[192,192,192,192,192,192,0,0]},{"a":6106,"t":"byte","b":[192,3,48,15,255,234,165,85]},{"a":6114,"t":"byte","b":[12,0,240,255,255,171,154,85]},{"a":6122,"t":"byte","b":[0,192,12,240,255,235,170,85]},{"a":6130,"t":"byte","b":[3,192,0,15,255,250,169,85]},{"a":6138,"t":"byte","b":[48,3,0,192,255,250,169,85]},{"a":6146,"t":"byte","b":[215,255,171,170,90,85,13,3]},{"a":6154,"t":"byte","b":[245,255,175,170,90,85,213,165]},{"a":6162,"t":"byte","b":[255,250,174,170,165,85,80,0]},{"a":6170,"t":"byte","b":[213,253,175,170,170,89,21,0]},{"a":6178,"t":"byte","b":[87,95,255,234,169,85,84,64]},{"a":6186,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":6194,"t":"byte","b":[170,250,255,175,73,62,255,87]},{"a":6202,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":6210,"t":"byte","b":[170,175,254,245,240,191,251,238]},{"a":6218,"t":"byte","b":[175,255,186,101,16,0,255,255]},{"a":6226,"t":"byte","b":[255,175,90,5,0,0,3,255]},{"a":6234,"t":"byte","b":[254,191,107,22,1,0,255,247]},{"a":6242,"t":"byte","b":[170,250,255,175,73,62,255,87]},{"a":6250,"t":"byte","b":[170,175,254,245,112,191,251,174]},{"a":6258,"t":"byte","b":[234,234,234,232,232,168,164,20]},{"a":6266,"t":"byte","b":[240,127,26,2,0,0,63,245]},{"a":6274,"t":"byte","b":[0,192,252,175,111,253,213,69]},{"a":6282,"t":"byte","b":[149,169,234,254,175,91,7,1]},{"a":6290,"t":"byte","b":[0,48,0,204,240,188,175,171]},{"a":6298,"t":"byte","b":[128,176,160,96,88,88,88,85]},{"a":6306,"t":"byte","b":[0,0,0,0,192,0,0,204]},{"a":6314,"t":"byte","b":[239,186,249,182,105,165,170,170]},{"a":6322,"t":"byte","b":[174,102,185,153,101,85,165,170]},{"a":6330,"t":"byte","b":[153,89,105,102,149,85,85,170]},{"a":6338,"t":"byte","b":[101,101,105,89,86,149,86,170]},{"a":6346,"t":"byte","b":[105,86,150,85,86,106,170,170]},{"a":6354,"t":"byte","b":[170,170,170,171,175,191,254,251]},{"a":6362,"t":"byte","b":[187,251,251,239,190,186,251,235]},{"a":6370,"t":"byte","b":[230,165,166,182,182,213,213,153]},{"a":6378,"t":"byte","b":[101,102,89,89,89,150,149,149]},{"a":6386,"t":"byte","b":[170,106,106,90,90,86,150,165]},{"a":6394,"t":"byte","b":[171,171,171,175,175,175,190,190]},{"a":6402,"t":"byte","b":[229,229,169,185,185,185,169,237]},{"a":6410,"t":"byte","b":[153,154,150,150,150,165,102,101]},{"a":6418,"t":"byte","b":[87,87,87,103,155,103,171,155]},{"a":6426,"t":"byte","b":[250,246,246,246,246,246,229,229]},{"a":6434,"t":"byte","b":[85,85,86,85,89,150,153,154]},{"a":6442,"t":"byte","b":[230,230,230,230,230,246,246,246]},{"a":6450,"t":"byte","b":[64,64,64,64,64,64,64,80]},{"a":6458,"t":"byte","b":[57,57,57,57,229,229,229,230]},{"a":6466,"t":"byte","b":[0,0,0,0,0,0,64,64]},{"a":6474,"t":"byte","b":[52,52,52,53,57,57,57,57]},{"a":6482,"t":"byte","b":[52,52,52,52,52,52,52,52]},{"a":6490,"t":"byte","b":[48,48,48,48,48,48,48,52]},{"a":6498,"t":"byte","b":[106,90,90,106,170,170,170,170]},{"a":6506,"t":"byte","b":[170,175,255,190,106,191,250,171]},{"a":6514,"t":"byte","b":[254,251,175,191,255,238,190,251]},{"a":6522,"t":"byte","b":[106,90,155,102,105,90,86,165]},{"a":6530,"t":"byte","b":[175,174,170,170,170,170,170,170]},{"a":6538,"t":"byte","b":[170,170,170,170,170,170,170,170]},{"a":6546,"t":"byte","b":[170,170,170,170,170,170,170,170]},{"a":6554,"t":"byte","b":[170,170,170,170,170,170,170,171]},{"a":6562,"t":"byte","b":[190,251,190,169,170,170,170,170]},{"a":6570,"t":"byte","b":[170,170,170,171,175,190,250,239]},{"a":6578,"t":"byte","b":[170,170,170,170,170,170,170,171]},{"a":6586,"t":"byte","b":[0,0,0,0,0,0,3,0]},{"a":6594,"t":"byte","b":[0,12,0,192,2,11,47,46]},{"a":6602,"t":"byte","b":[12,0,192,0,191,255,234,170]},{"a":6610,"t":"byte","b":[0,12,2,2,2,2,2,2]},{"a":6618,"t":"byte","b":[186,186,234,234,233,233,233,233]},{"a":6626,"t":"byte","b":[165,85,85,85,85,85,85,85]},{"a":6634,"t":"byte","b":[85,87,95,122,121,229,80,192]},{"a":6642,"t":"byte","b":[165,121,89,102,85,165,170,170]},{"a":6650,"t":"byte","b":[2,15,63,61,61,253,253,253]},{"a":6658,"t":"byte","b":[149,164,168,232,232,234,234,234]},{"a":6666,"t":"byte","b":[245,245,245,61,61,63,15,0]},{"a":6674,"t":"byte","b":[250,250,250,232,232,168,164,20]},{"a":6682,"t":"byte","b":[2,15,63,61,61,245,245,245]},{"a":6690,"t":"byte","b":[149,165,169,232,232,250,250,250]},{"a":6698,"t":"byte","b":[253,253,253,61,61,63,15,0]},{"a":6706,"t":"byte","b":[102,102,102,102,102,60,24,0]},{"a":6714,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":6722,"l":"landscape_glyphs_5","c":"Level 5's landscape glyphs $A0-$FF (block 6 of 9, $1A42-$1D41), $B31C entry 4.","t":"byte","b":[255,246,219,237,246,219,237,213]},{"a":6730,"t":"byte","b":[253,217,109,181,217,109,181,85]},{"a":6738,"t":"byte","b":[253,245,217,237,245,217,237,213]},{"a":6746,"t":"byte","b":[90,90,90,106,106,106,170,170]},{"a":6754,"t":"byte","b":[89,90,90,90,90,90,90,90]},{"a":6762,"t":"byte","b":[85,85,86,85,89,86,89,90]},{"a":6770,"t":"byte","b":[80,80,80,80,80,80,80,80]},{"a":6778,"t":"byte","b":[0,0,0,0,0,0,255,255]},{"a":6786,"t":"byte","b":[0,0,0,0,0,0,3,63]},{"a":6794,"t":"byte","b":[0,0,0,0,0,0,208,80]},{"a":6802,"t":"byte","b":[64,64,64,64,64,64,0,0]},{"a":6810,"t":"byte","b":[0,0,0,0,0,0,0,64]},{"a":6818,"t":"byte","b":[0,0,0,0,0,0,0,255]},{"a":6826,"t":"byte","b":[0,0,0,0,0,0,0,15]},{"a":6834,"t":"byte","b":[185,185,185,185,185,185,185,185]},{"a":6842,"t":"byte","b":[0,170,255,255,170,85,85,0]},{"a":6850,"t":"byte","b":[169,164,171,170,170,170,170,170]},{"a":6858,"t":"byte","b":[185,120,36,233,170,170,170,170]},{"a":6866,"t":"byte","b":[106,58,106,170,170,170,170,170]},{"a":6874,"t":"byte","b":[251,251,239,239,239,237,236,250]},{"a":6882,"t":"byte","b":[165,101,217,217,89,89,89,101]},{"a":6890,"t":"byte","b":[0,0,3,175,254,254,186,123]},{"a":6898,"t":"byte","b":[254,251,238,213,147,155,165,229]},{"a":6906,"t":"byte","b":[101,100,164,148,148,84,100,228]},{"a":6914,"t":"byte","b":[251,57,58,30,14,13,1,0]},{"a":6922,"t":"byte","b":[185,255,255,170,170,190,255,254]},{"a":6930,"t":"byte","b":[251,253,180,214,79,109,246,213]},{"a":6938,"t":"byte","b":[101,149,85,150,170,170,85,85]},{"a":6946,"t":"byte","b":[0,0,0,0,0,64,64,112]},{"a":6954,"t":"byte","b":[228,228,228,252,255,171,170,250]},{"a":6962,"t":"byte","b":[0,192,252,186,233,164,146,105]},{"a":6970,"t":"byte","b":[144,144,148,149,102,102,101,100]},{"a":6978,"t":"byte","b":[0,3,63,252,191,91,246,191]},{"a":6986,"t":"byte","b":[15,254,128,0,240,255,174,90]},{"a":6994,"t":"byte","b":[255,10,0,0,0,255,254,170]},{"a":7002,"t":"byte","b":[240,255,43,1,63,254,170,149]},{"a":7010,"t":"byte","b":[0,192,252,186,233,164,146,105]},{"a":7018,"t":"byte","b":[100,100,185,185,185,185,185,185]},{"a":7026,"t":"byte","b":[100,106,191,191,106,21,21,64]},{"a":7034,"t":"byte","b":[185,100,249,229,229,229,228,227]},{"a":7042,"t":"byte","b":[222,255,234,170,85,234,197,241]},{"a":7050,"t":"byte","b":[232,230,229,229,229,229,229,144]},{"a":7058,"t":"byte","b":[169,254,169,169,85,169,85,85]},{"a":7066,"t":"byte","b":[0,11,11,11,11,11,11,11]},{"a":7074,"t":"byte","b":[11,11,11,11,11,11,11,11]},{"a":7082,"t":"byte","b":[11,11,11,11,11,11,6,0]},{"a":7090,"t":"byte","b":[148,83,30,19,14,62,254,169]},{"a":7098,"t":"byte","b":[85,0,64,37,16,16,4,36]},{"a":7106,"t":"byte","b":[20,67,189,185,185,185,185,185]},{"a":7114,"t":"byte","b":[0,164,241,241,161,81,84,0]},{"a":7122,"t":"byte","b":[0,58,255,255,234,149,21,0]},{"a":7130,"t":"byte","b":[185,185,185,185,185,185,185,56]},{"a":7138,"t":"byte","b":[229,230,230,230,230,231,145,230]},{"a":7146,"t":"byte","b":[229,229,230,229,229,230,229,230]},{"a":7154,"t":"byte","b":[228,228,228,228,228,228,228,228]},{"a":7162,"t":"byte","b":[0,0,0,80,12,244,228,228]},{"a":7170,"t":"byte","b":[0,0,0,0,1,2,2,2]},{"a":7178,"t":"byte","b":[253,170,255,255,170,85,85,85]},{"a":7186,"t":"byte","b":[255,170,255,255,170,85,85,213]},{"a":7194,"t":"byte","b":[228,228,228,228,228,228,228,228]},{"a":7202,"t":"byte","b":[248,248,164,164,249,166,166,81]},{"a":7210,"t":"byte","b":[228,228,228,228,145,228,148,148]},{"a":7218,"t":"byte","b":[0,0,0,0,64,64,64,56]},{"a":7226,"t":"byte","b":[0,0,0,170,255,255,170,85],"x":[14813]},{"a":7234,"t":"byte","b":[103,153,165,170,170,170,170,170]},{"a":7242,"t":"byte","b":[126,119,121,90,165,170,170,170]},{"a":7250,"t":"byte","b":[105,154,165,149,85,170,170,170]},{"a":7258,"t":"byte","b":[119,121,117,85,106,170,170,170]},{"a":7266,"t":"byte","b":[85,86,90,170,170,170,170,170]},{"a":7274,"t":"byte","b":[214,245,255,255,254,231,249,158]},{"a":7282,"t":"byte","b":[153,109,85,253,127,127,127,125]},{"a":7290,"t":"byte","b":[237,246,217,85,255,253,158,231]},{"a":7298,"t":"byte","b":[153,85,85,127,254,119,121,126]},{"a":7306,"t":"byte","b":[214,93,245,229,117,153,165,85]},{"a":7314,"t":"byte","b":[215,245,255,255,253,246,251,189]},{"a":7322,"t":"byte","b":[126,119,85,253,247,153,109,181]},{"a":7330,"t":"byte","b":[105,158,229,85,255,253,246,218]},{"a":7338,"t":"byte","b":[119,121,85,127,237,181,217,109]},{"a":7346,"t":"byte","b":[86,93,249,237,245,213,229,245]},{"a":7354,"t":"byte","b":[27,246,189,95,230,253,218,173]},{"a":7362,"t":"byte","b":[253,174,90,245,174,90,229,170]},{"a":7370,"t":"byte","b":[85,254,170,85,254,170,85,105]},{"a":7378,"t":"byte","b":[122,170,149,106,170,148,69,229]},{"a":7386,"t":"byte","b":[164,82,41,164,65,9,237,245]},{"a":7394,"t":"byte","b":[0,0,0,168,242,242,162,82]},{"a":7402,"t":"byte","b":[84,0,0,0,0,0,0,0]},{"a":7410,"t":"byte","b":[80,80,83,95,94,126,122,123]},{"a":7418,"t":"byte","b":[251,121,122,94,94,94,81,80]},{"a":7426,"t":"byte","b":[0,42,255,255,170,85,21,0]},{"a":7434,"t":"byte","b":[0,0,0,42,255,255,170,85]},{"a":7442,"t":"byte","b":[228,228,228,228,228,228,228,224]},{"a":7450,"t":"byte","b":[52,52,52,52,52,52,52,52]},{"a":7458,"t":"byte","b":[52,52,245,245,245,52,52,52]},{"a":7466,"t":"byte","b":[60,246,235,239,218,197,209,48]},{"a":7474,"t":"byte","b":[52,52,245,245,245,52,52,52]},{"a":7482,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":7490,"l":"landscape_glyphs_4","c":"Level 4's landscape glyphs $A0-$FF (block 7 of 9, $1D42-$2041), $B31C entry 3.","t":"byte","b":[186,250,250,238,238,238,254,245]},{"a":7498,"t":"byte","b":[158,158,150,151,167,166,165,149]},{"a":7506,"t":"byte","b":[213,101,89,89,85,149,166,102]},{"a":7514,"t":"byte","b":[103,103,95,94,127,95,90,94]},{"a":7522,"t":"byte","b":[218,214,166,230,166,229,165,149]},{"a":7530,"t":"byte","b":[149,170,170,170,170,170,170,170]},{"a":7538,"t":"byte","b":[85,169,170,170,170,170,170,170]},{"a":7546,"t":"byte","b":[85,85,170,170,170,170,170,170]},{"a":7554,"t":"byte","b":[85,90,170,170,170,170,170,170]},{"a":7562,"t":"byte","b":[86,170,170,170,170,170,170,170]},{"a":7570,"t":"byte","b":[174,175,175,174,190,187,186,186]},{"a":7578,"t":"byte","b":[170,170,186,102,103,111,95,159]},{"a":7586,"t":"byte","b":[170,170,186,219,215,167,167,229]},{"a":7594,"t":"byte","b":[250,254,233,250,234,169,229,233]},{"a":7602,"t":"byte","b":[90,90,90,106,106,106,122,250]},{"a":7610,"t":"byte","b":[122,126,126,126,186,126,254,250]},{"a":7618,"t":"byte","b":[85,85,150,85,89,86,89,154]},{"a":7626,"t":"byte","b":[249,249,57,62,62,57,61,62]},{"a":7634,"t":"byte","b":[228,228,228,249,233,229,249,249]},{"a":7642,"t":"byte","b":[64,64,64,64,64,80,80,80]},{"a":7650,"t":"byte","b":[229,101,101,101,164,228,148,164]},{"a":7658,"t":"byte","b":[57,58,13,13,14,3,3,3]},{"a":7666,"t":"byte","b":[64,64,144,208,228,244,52,57]},{"a":7674,"t":"byte","b":[57,53,57,57,57,57,233,217]},{"a":7682,"t":"byte","b":[229,228,228,228,244,228,228,57]},{"a":7690,"t":"byte","b":[0,0,0,0,0,64,64,64]},{"a":7698,"t":"byte","b":[224,228,249,57,57,14,14,14]},{"a":7706,"t":"byte","b":[57,250,230,105,149,80,0,0]},{"a":7714,"t":"byte","b":[0,0,3,62,234,165,84,64]},{"a":7722,"t":"byte","b":[0,64,64,112,159,171,153,85]},{"a":7730,"t":"byte","b":[170,170,186,254,47,189,233,149]},{"a":7738,"t":"byte","b":[13,14,254,219,121,86,21,0]},{"a":7746,"t":"byte","b":[170,170,174,191,248,255,254,235]},{"a":7754,"t":"byte","b":[171,251,248,0,0,0,252,251]},{"a":7762,"t":"byte","b":[239,239,0,0,0,0,0,251]},{"a":7770,"t":"byte","b":[234,239,47,0,0,0,59,251]},{"a":7778,"t":"byte","b":[170,170,186,254,47,189,233,149]},{"a":7786,"t":"byte","b":[0,0,240,175,102,21,0,0]},{"a":7794,"t":"byte","b":[0,0,0,255,170,85,0,0]},{"a":7802,"t":"byte","b":[0,0,0,252,169,89,13,13]},{"a":7810,"t":"byte","b":[230,230,231,231,244,255,254,234]},{"a":7818,"t":"byte","b":[229,229,230,229,229,230,229,230]},{"a":7826,"t":"byte","b":[121,121,121,121,185,121,185,185]},{"a":7834,"t":"byte","b":[85,233,165,101,149,85,101,85]},{"a":7842,"t":"byte","b":[144,228,228,231,230,229,228,228]},{"a":7850,"t":"byte","b":[0,0,204,238,221,221,153,0]},{"a":7858,"t":"byte","b":[0,0,3,62,229,80,0,0]},{"a":7866,"t":"byte","b":[237,237,13,13,13,13,9,239]},{"a":7874,"t":"byte","b":[0,0,0,255,190,106,153,85]},{"a":7882,"t":"byte","b":[228,228,228,228,228,228,228,228]},{"a":7890,"t":"byte","b":[0,0,0,0,64,64,64,64]},{"a":7898,"t":"byte","b":[93,93,93,110,157,105,169,154]},{"a":7906,"t":"byte","b":[85,85,86,253,165,85,169,154]},{"a":7914,"t":"byte","b":[229,230,230,230,229,214,21,5]},{"a":7922,"t":"byte","b":[57,57,57,57,57,57,57,57]},{"a":7930,"t":"byte","b":[14,14,14,14,14,14,14,14]},{"a":7938,"t":"byte","b":[0,0,0,0,3,3,3,3]},{"a":7946,"t":"byte","b":[149,105,101,101,85,85,101,85]},{"a":7954,"t":"byte","b":[0,0,0,255,110,218,213,181]},{"a":7962,"t":"byte","b":[13,13,13,13,13,14,14,62]},{"a":7970,"t":"byte","b":[12,12,12,12,12,12,12,13]},{"a":7978,"t":"byte","b":[0,0,63,230,165,144,64,64]},{"a":7986,"t":"byte","b":[170,234,123,94,158,166,102,85]},{"a":7994,"t":"byte","b":[0,0,240,191,91,21,0,0]},{"a":8002,"t":"byte","b":[219,245,255,239,222,245,255,107]},{"a":8010,"t":"byte","b":[235,159,86,253,191,122,85,253]},{"a":8018,"t":"byte","b":[251,175,150,85,255,250,229,85]},{"a":8026,"t":"byte","b":[230,149,85,127,250,101,85,127]},{"a":8034,"t":"byte","b":[85,93,245,101,85,93,249,149]},{"a":8042,"t":"byte","b":[151,165,170,170,170,170,170,170]},{"a":8050,"t":"byte","b":[239,159,86,169,170,170,170,170]},{"a":8058,"t":"byte","b":[255,175,150,85,170,170,170,170]},{"a":8066,"t":"byte","b":[230,149,85,106,170,170,170,170]},{"a":8074,"t":"byte","b":[86,90,170,170,170,170,170,170]},{"a":8082,"t":"byte","b":[185,185,249,249,53,237,245,101]},{"a":8090,"t":"byte","b":[149,254,250,238,249,234,230,85]},{"a":8098,"t":"byte","b":[36,57,57,249,185,121,57,57]},{"a":8106,"t":"byte","b":[0,0,204,237,221,221,157,13]},{"a":8114,"t":"byte","b":[13,13,13,13,13,13,13,13]},{"a":8122,"t":"byte","b":[93,93,93,109,157,109,173,157]},{"a":8130,"t":"byte","b":[144,144,144,144,144,144,144,144]},{"a":8138,"t":"byte","b":[121,185,249,249,245,245,212,80]},{"a":8146,"t":"byte","b":[208,208,212,228,52,53,57,53]},{"a":8154,"t":"byte","b":[94,235,167,103,151,87,103,87]},{"a":8162,"t":"byte","b":[0,0,0,255,185,103,151,95]},{"a":8170,"t":"byte","b":[52,52,52,52,52,52,52,52]},{"a":8178,"t":"byte","b":[52,52,52,245,245,245,52,52]},{"a":8186,"t":"byte","b":[52,52,245,245,245,52,52,52]},{"a":8194,"t":"byte","b":[0,60,248,187,117,49,36,36]},{"a":8202,"t":"byte","b":[61,57,61,57,53,57,57,61]},{"a":8210,"t":"byte","b":[0,0,192,211,239,251,54,57]},{"a":8218,"t":"byte","b":[228,212,212,228,240,48,48,0]},{"a":8226,"t":"byte","b":[0,0,15,229,148,64,0,0]},{"a":8234,"t":"byte","b":[170,170,170,234,250,110,86,150]},{"a":8242,"t":"byte","b":[153,105,153,166,150,165,85,85]},{"a":8250,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":8258,"l":"landscape_glyphs_8","c":"Level 8's landscape glyphs $A0-$FF (block 8 of 9, $2042-$2341), $B31C entry 7.","t":"byte","b":[0,15,48,48,193,193,192,192]},{"a":8266,"t":"byte","b":[255,0,84,105,190,186,101,20]},{"a":8274,"t":"byte","b":[0,112,12,4,65,65,1,1]},{"a":8282,"t":"byte","b":[48,48,48,12,12,3,3,12]},{"a":8290,"t":"byte","b":[0,0,0,0,0,0,1,20]},{"a":8298,"t":"byte","b":[4,4,4,16,16,64,64,16]},{"a":8306,"t":"byte","b":[12,12,48,48,49,49,193,193]},{"a":8314,"t":"byte","b":[0,20,85,101,105,105,185,190]},{"a":8322,"t":"byte","b":[16,16,4,4,4,4,65,65]},{"a":8330,"t":"byte","b":[193,193,193,193,193,192,192,192]},{"a":8338,"t":"byte","b":[190,190,190,190,190,110,110,110]},{"a":8346,"t":"byte","b":[65,65,65,65,65,65,65,65]},{"a":8354,"t":"byte","b":[192,192,192,192,48,48,48,48]},{"a":8362,"t":"byte","b":[110,106,105,25,21,20,4,0]},{"a":8370,"t":"byte","b":[65,65,1,1,4,4,4,4]},{"a":8378,"t":"byte","b":[112,116,117,117,182,121,174,158]},{"a":8386,"t":"byte","b":[0,0,65,85,86,85,101,154]},{"a":8394,"t":"byte","b":[5,21,86,85,85,86,153,90]},{"a":8402,"t":"byte","b":[0,3,12,12,48,48,48,192]},{"a":8410,"t":"byte","b":[255,0,20,40,125,121,121,101]},{"a":8418,"t":"byte","b":[0,192,48,16,12,4,4,1]},{"a":8426,"t":"byte","b":[0,0,3,3,2,0,48,232]},{"a":8434,"t":"byte","b":[15,195,163,147,147,83,30,58]},{"a":8442,"t":"byte","b":[119,119,119,119,123,187,170,170]},{"a":8450,"t":"byte","b":[80,67,78,78,74,129,189,172]},{"a":8458,"t":"byte","b":[0,0,128,64,64,0,12,58]},{"a":8466,"t":"byte","b":[119,119,119,119,119,119,119,255]},{"a":8474,"t":"byte","b":[170,170,171,191,255,255,127,85]},{"a":8482,"t":"byte","b":[87,85,85,85,85,245,255,127]},{"a":8490,"t":"byte","b":[255,85,85,85,85,85,255,255]},{"a":8498,"t":"byte","b":[170,130,130,130,130,130,130,170]},{"a":8506,"t":"byte","b":[171,166,159,175,171,166,189,127]},{"a":8514,"t":"byte","b":[170,170,175,191,240,252,127,85]},{"a":8522,"t":"byte","b":[170,191,254,16,0,0,240,255]},{"a":8530,"t":"byte","b":[170,255,21,2,0,0,0,255]},{"a":8538,"t":"byte","b":[170,254,127,149,42,0,15,255]},{"a":8546,"t":"byte","b":[170,170,250,254,95,191,253,85]},{"a":8554,"t":"byte","b":[234,235,172,172,176,176,176,192]},{"a":8562,"t":"byte","b":[171,233,58,26,14,6,6,1]},{"a":8570,"t":"byte","b":[64,3,255,255,85,85,1,192]},{"a":8578,"t":"byte","b":[0,0,14,13,53,53,212,84]},{"a":8586,"t":"byte","b":[0,0,176,176,92,92,87,21]},{"a":8594,"t":"byte","b":[63,253,244,244,144,144,0,0]},{"a":8602,"t":"byte","b":[40,233,233,245,245,245,245,245]},{"a":8610,"t":"byte","b":[189,170,170,170,170,170,170,170]},{"a":8618,"t":"byte","b":[170,85,170,170,170,170,170,170]},{"a":8626,"t":"byte","b":[86,170,170,170,170,170,170,170]},{"a":8634,"t":"byte","b":[174,173,158,174,171,171,171,171]},{"a":8642,"t":"byte","b":[169,170,166,170,170,170,166,170]},{"a":8650,"t":"byte","b":[153,154,154,154,106,106,106,106]},{"a":8658,"t":"byte","b":[192,192,192,192,192,192,197,197]},{"a":8666,"t":"byte","b":[20,0,0,0,0,0,0,65]},{"a":8674,"t":"byte","b":[1,1,1,1,1,1,81,81]},{"a":8682,"t":"byte","b":[228,166,23,3,3,15,254,126]},{"a":8690,"t":"byte","b":[57,233,212,64,64,112,191,189]},{"a":8698,"t":"byte","b":[86,90,250,254,86,90,250,254]},{"a":8706,"t":"byte","b":[149,165,175,191,149,165,175,191]},{"a":8714,"t":"byte","b":[214,86,7,3,3,57,233,228]},{"a":8722,"t":"byte","b":[151,149,80,64,64,108,122,57]},{"a":8730,"t":"byte","b":[213,85,85,85,85,95,255,253]},{"a":8738,"t":"byte","b":[170,170,234,254,255,255,253,85]},{"a":8746,"t":"byte","b":[87,87,87,103,155,103,175,159]},{"a":8754,"t":"byte","b":[85,85,86,101,89,102,233,154]},{"a":8762,"t":"byte","b":[89,90,234,154,90,89,126,253]},{"a":8770,"t":"byte","b":[85,85,149,170,170,170,170,170]},{"a":8778,"t":"byte","b":[192,192,192,192,192,192,192,192]},{"a":8786,"t":"byte","b":[85,85,85,85,170,170,170,170]},{"a":8794,"t":"byte","b":[1,1,1,1,1,1,1,1]},{"a":8802,"t":"byte","b":[85,85,86,170,170,170,170,170]},{"a":8810,"t":"byte","b":[198,182,177,145,172,164,233,106]},{"a":8818,"t":"byte","b":[145,150,70,70,26,26,105,169]},{"a":8826,"t":"byte","b":[252,124,31,31,7,6,0,0]},{"a":8834,"t":"byte","b":[60,254,250,234,106,90,86,20]},{"a":8842,"t":"byte","b":[1,192,255,255,85,85,64,3]},{"a":8850,"t":"byte","b":[60,191,175,171,169,165,149,20]},{"a":8858,"t":"byte","b":[4,36,37,53,61,61,13,13]},{"a":8866,"t":"byte","b":[52,52,52,52,52,52,52,119]},{"a":8874,"t":"byte","b":[48,56,248,244,212,212,208,208]},{"a":8882,"t":"byte","b":[119,119,119,119,119,119,119,119]},{"a":8890,"t":"byte","b":[170,174,174,186,186,234,239,234]},{"a":8898,"t":"byte","b":[233,166,170,170,170,255,170,170]},{"a":8906,"t":"byte","b":[106,154,154,166,166,169,213,169]},{"a":8914,"t":"byte","b":[198,53,49,17,12,4,1,0]},{"a":8922,"t":"byte","b":[150,235,190,105,85,20,0,85]},{"a":8930,"t":"byte","b":[145,84,68,68,16,16,64,0]},{"a":8938,"t":"byte","b":[164,16,0,3,3,2,0,0]},{"a":8946,"t":"byte","b":[26,54,210,163,147,147,67,3]},{"a":8954,"t":"byte","b":[170,170,102,103,119,119,119,119]},{"a":8962,"t":"byte","b":[164,148,71,78,78,74,65,64]},{"a":8970,"t":"byte","b":[41,4,0,128,64,64,0,0]},{"a":8978,"t":"byte","b":[234,149,85,255,234,149,85,255]},{"a":8986,"t":"byte","b":[16,16,4,4,4,4,1,1]},{"a":8994,"t":"byte","b":[12,12,48,48,48,48,192,192]},{"a":9002,"t":"byte","b":[3,3,3,3,3,3,3,3]},{"a":9010,"t":"byte","b":[64,64,64,64,64,64,64,64]},{"a":9018,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":9026,"l":"landscape_glyphs_wizlab","c":"Wiz-lab glyphs $A0-$FF (block 9 of 9, $2342-$2641), $B31C entries 8 and 9. Entry 9 is the Wiz-lab picture ($AB20 sets $B128 = 9 after the bonus stage); no code found that sets $B128 to 8, and $B2F0's row 8 is all zeros.","t":"byte","b":[85,85,85,85,85,85,85,85]},{"a":9034,"t":"byte","b":[63,255,251,255,250,247,233,218]},{"a":9042,"t":"byte","b":[253,239,191,186,238,234,169,186]},{"a":9050,"t":"byte","b":[252,228,167,185,169,229,169,153]},{"a":9058,"t":"byte","b":[22,97,86,81,132,80,65,20]},{"a":9066,"t":"byte","b":[102,25,84,137,17,4,65,20]},{"a":9074,"t":"byte","b":[0,0,0,1,2,9,6,42]},{"a":9082,"t":"byte","b":[42,166,105,154,166,154,105,154]},{"a":9090,"t":"byte","b":[0,0,0,2,2,9,6,25]},{"a":9098,"t":"byte","b":[164,154,166,105,166,170,102,153]},{"a":9106,"t":"byte","b":[0,0,0,128,128,96,160,104]},{"a":9114,"t":"byte","b":[0,0,0,128,128,144,96,168]},{"a":9122,"t":"byte","b":[152,101,133,89,5,17,69,20]},{"a":9130,"t":"byte","b":[90,90,106,106,106,170,170,170]},{"a":9138,"t":"byte","b":[85,85,85,85,86,86,86,90]},{"a":9146,"t":"byte","b":[106,170,170,170,170,170,170,170]},{"a":9154,"t":"byte","b":[86,86,86,90,90,90,106,106]},{"a":9162,"t":"byte","b":[175,175,171,171,171,170,170,170]},{"a":9170,"t":"byte","b":[255,255,255,255,191,191,191,175]},{"a":9178,"t":"byte","b":[171,170,170,170,170,170,170,170]},{"a":9186,"t":"byte","b":[191,191,191,175,175,175,171,171]},{"a":9194,"t":"byte","b":[191,254,239,249,250,237,218,85]},{"a":9202,"t":"byte","b":[255,185,105,165,153,165,85,87]},{"a":9210,"t":"byte","b":[190,249,253,245,233,245,213,255]},{"a":9218,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":9226,"t":"byte","b":[85,85,85,85,85,85,85,85]},{"a":9234,"t":"byte","b":[251,238,238,254,251,250,246,213]},{"a":9242,"t":"byte","b":[255,255,251,255,250,247,233,218]},{"a":9250,"t":"byte","b":[169,101,85,89,149,85,85,85]},{"a":9258,"t":"byte","b":[245,229,165,185,169,229,169,153]},{"a":9266,"t":"byte","b":[170,170,170,170,170,171,175,191]},{"a":9274,"t":"byte","b":[170,171,175,191,255,255,255,255]},{"a":9282,"t":"byte","b":[169,101,85,89,149,85,85,86]},{"a":9290,"t":"byte","b":[251,238,238,254,251,58,61,21]},{"a":9298,"t":"byte","b":[170,166,170,105,165,102,149,85]},{"a":9306,"t":"byte","b":[169,101,85,89,149,85,85,84]},{"a":9314,"t":"byte","b":[251,238,238,254,251,186,189,149]},{"a":9322,"t":"byte","b":[170,106,90,86,85,85,85,85]},{"a":9330,"t":"byte","b":[170,170,170,170,170,106,90,86]},{"a":9338,"t":"byte","b":[230,230,230,230,230,230,230,230]},{"a":9346,"t":"byte","b":[229,229,229,229,229,229,229,230]},{"a":9354,"t":"byte","b":[19,79,78,186,169,169,165,83]},{"a":9362,"t":"byte","b":[255,250,85,0,12,8,35,35]},{"a":9370,"t":"byte","b":[191,251,253,244,244,244,249,185]},{"a":9378,"t":"byte","b":[253,186,110,174,158,166,87,87]},{"a":9386,"t":"byte","b":[255,127,175,223,239,223,159,159]},{"a":9394,"t":"byte","b":[127,127,127,127,127,255,255,255]},{"a":9402,"t":"byte","b":[14,15,15,3,3,0,0,0]},{"a":9410,"t":"byte","b":[185,185,185,185,185,185,185,185]},{"a":9418,"t":"byte","b":[185,185,185,185,185,185,185,186]},{"a":9426,"t":"byte","b":[158,170,170,169,169,101,148,213]},{"a":9434,"t":"byte","b":[159,95,93,111,121,250,237,218]},{"a":9442,"t":"byte","b":[53,53,229,229,213,213,149,149]},{"a":9450,"t":"byte","b":[2,10,8,8,8,4,67,67]},{"a":9458,"t":"byte","b":[244,244,57,61,61,61,62,14]},{"a":9466,"t":"byte","b":[15,59,250,250,249,244,244,244]},{"a":9474,"t":"byte","b":[255,255,170,85,0,3,2,2]},{"a":9482,"t":"byte","b":[255,166,171,169,233,57,53,53]},{"a":9490,"t":"byte","b":[171,172,191,186,254,251,251,171]},{"a":9498,"t":"byte","b":[255,73,101,255,165,166,166,166]},{"a":9506,"t":"byte","b":[234,58,230,86,101,101,101,154]},{"a":9514,"t":"byte","b":[85,85,85,85,85,85,85,85]},{"a":9522,"t":"byte","b":[84,85,85,85,85,85,85,85]},{"a":9530,"t":"byte","b":[0,0,0,0,0,64,80,84]},{"a":9538,"t":"byte","b":[0,64,80,84,85,85,85,85]},{"a":9546,"t":"byte","b":[63,255,255,255,255,255,255,255]},{"a":9554,"t":"byte","b":[0,0,0,0,0,255,170,170]},{"a":9562,"t":"byte","b":[0,3,15,63,255,255,255,255]},{"a":9570,"t":"byte","b":[0,0,0,0,0,3,15,63]},{"a":9578,"t":"byte","b":[130,162,164,164,146,146,138,170]},{"a":9586,"t":"byte","b":[36,36,36,36,36,136,137,137]},{"a":9594,"t":"byte","b":[239,252,192,127,151,153,36,36]},{"a":9602,"t":"byte","b":[0,68,144,0,146,162,162,162]},{"a":9610,"t":"byte","b":[64,64,64,64,16,16,16,0]},{"a":9618,"t":"byte","b":[255,69,1,0,255,64,16,64]},{"a":9626,"t":"byte","b":[251,127,151,252,193,1,0,0]},{"a":9634,"t":"byte","b":[0,0,0,0,0,2,2,2]},{"a":9642,"t":"byte","b":[2,10,10,10,130,130,162,170]},{"a":9650,"t":"byte","b":[255,234,234,234,229,229,229,229]},{"a":9658,"t":"byte","b":[255,170,170,170,85,170,85,0]},{"a":9666,"t":"byte","b":[255,170,170,170,121,121,249,249]},{"a":9674,"t":"byte","b":[249,249,249,249,249,249,249,249]},{"a":9682,"t":"byte","b":[249,249,249,249,169,169,169,85]},{"a":9690,"t":"byte","b":[0,255,170,255,170,170,170,85]},{"a":9698,"t":"byte","b":[229,229,229,231,234,234,234,213]},{"a":9706,"t":"byte","b":[229,229,229,229,229,229,229,229]},{"a":9714,"t":"byte","b":[85,165,170,170,170,170,170,170]},{"a":9722,"t":"byte","b":[254,234,170,170,170,170,170,170]},{"a":9730,"t":"byte","b":[170,170,85,170,170,170,170,170]},{"a":9738,"t":"byte","b":[255,235,167,185,169,229,169,153]},{"a":9746,"t":"byte","b":[255,239,191,186,238,234,169,186]},{"a":9754,"t":"byte","b":[180,180,180,180,180,180,180,180]},{"a":9762,"t":"byte","b":[0,56,249,245,184,244,180,180]},{"a":9770,"t":"byte","b":[0,191,106,191,106,106,106,21]},{"a":9778,"t":"byte","b":[127,190,175,169,170,173,154,21]},{"a":9786,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":9794,"l":"level_tiles_00_0a","c":"Landscape tile table, tiles $00-$0A (the table runs $2642-$3901: 192 tiles of 25 bytes, 5 rows of 5 character codes stored row by row). $78CF draws column c of tile t from $B62B/$B62C ($2642) + 25 t + c, taking the bytes at +0, +5, +10, +15 and +20 as five character rows. Here: $00 empty (all zero, the sky), $01 plain ground (every level but 7), $02-$0A level 3's scenery ($06 is level 7's, $07 also level 5's).","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":9802,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":9810,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":9818,"t":"byte","b":[0,145,145,145,145,145,144,143]},{"a":9826,"t":"byte","b":[144,143,144,146,146,146,146,146]},{"a":9834,"t":"byte","b":[146,146,146,146,146,147,148,149]},{"a":9842,"t":"byte","b":[150,151,145,145,145,145,145,144]},{"a":9850,"t":"byte","b":[143,144,143,144,192,193,194,195]},{"a":9858,"t":"byte","b":[190,146,146,146,146,146,147,148]},{"a":9866,"t":"byte","b":[149,150,151,0,0,0,0,0]},{"a":9874,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":9882,"t":"byte","b":[0,238,0,0,0,0,237,0]},{"a":9890,"t":"byte","b":[0,0,0,233,180,181,182,183]},{"a":9898,"t":"byte","b":[184,189,191,222,223,224,225,229]},{"a":9906,"t":"byte","b":[226,227,228,239,240,241,242,243]},{"a":9914,"t":"byte","b":[148,149,149,150,151,217,218,219]},{"a":9922,"t":"byte","b":[220,221,202,203,204,205,206,197]},{"a":9930,"t":"byte","b":[198,199,200,201,244,245,246,247]},{"a":9938,"t":"byte","b":[248,147,148,149,150,151,0,0]},{"a":9946,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":9954,"t":"byte","b":[0,0,0,0,0,0,177,178]},{"a":9962,"t":"byte","b":[179,0,0,173,167,172,0,153]},{"a":9970,"t":"byte","b":[154,0,0,0,155,156,0,0]},{"a":9978,"t":"byte","b":[0,129,128,0,0,0,139,130]},{"a":9986,"t":"byte","b":[130,129,128,128,0,0,0,0]},{"a":9994,"t":"byte","b":[0,0,0,0,152,0,0,0]},{"a":10002,"t":"byte","b":[0,0,0,0,0,128,129,128]},{"a":10010,"t":"byte","b":[129,130,130,131,0,0,0,0]},{"a":10018,"t":"byte","b":[128,152,0,0,0,152,253,152]},{"a":10026,"t":"byte","b":[0,152,253,254,253,152,253,254]},{"a":10034,"t":"byte","b":[0,254,253,254,0,0,0,254]},{"a":10042,"t":"byte","b":[0,0,0,0,252,0,32,0]},{"a":10050,"t":"byte","b":[252,253,252,32,252,253,152,253]},{"a":10058,"t":"byte","b":[252,253,152,0,152,253,152,0]},{"a":10066,"t":"byte","b":[0,0,152]},{"a":10069,"l":"level_tiles_0b_20","c":"Landscape tiles $0B-$20 ($2755-$297A): level 2's scenery ($0B-$0F, $15-$20; $16 and $20 also level 7, $1A levels 3 and 5), the ground's left end $11 $12 that starts every landscape, and $10, $13, $14, which the map never uses.","t":"byte","b":[0,238,0,0,0,0,238,0]},{"a":10077,"t":"byte","b":[0,0,243,239,240,0,0,242]},{"a":10085,"t":"byte","b":[245,246,0,0,244,0,0,0]},{"a":10093,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":10101,"t":"byte","b":[0,0,0,197,198,194,199,200]},{"a":10109,"t":"byte","b":[229,203,204,232,205,229,234,235]},{"a":10117,"t":"byte","b":[236,233,0,238,0,0,0,0]},{"a":10125,"t":"byte","b":[238,0,0,0,0,238,0,0]},{"a":10133,"t":"byte","b":[0,0,238,0,0,0,0,238]},{"a":10141,"t":"byte","b":[0,0,0,145,238,145,145,145]},{"a":10149,"t":"byte","b":[144,238,144,143,144,192,223,181]},{"a":10157,"t":"byte","b":[184,196,224,225,226,227,228,147]},{"a":10165,"t":"byte","b":[148,149,150,151,0,0,0,0]},{"a":10173,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":10181,"t":"byte","b":[0,0,0,166,167,168,0,0]},{"a":10189,"t":"byte","b":[0,173,0,0,0,146,146,146]},{"a":10197,"t":"byte","b":[146,146,146,146,146,146,146,146]},{"a":10205,"t":"byte","b":[146,146,146,146,146,146,146,146]},{"a":10213,"t":"byte","b":[146,146,146,146,146,146,0,0]},{"a":10221,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":10229,"t":"byte","b":[0,0,0,128,129,128,129,130]},{"a":10237,"t":"byte","b":[130,131,0,0,0,0,128,0]},{"a":10245,"t":"byte","b":[0,128,130,136,128,130,131,132]},{"a":10253,"t":"byte","b":[134,130,136,133,134,135,132,134]},{"a":10261,"t":"byte","b":[135,146,146,129,130,147,148,150]},{"a":10269,"t":"byte","b":[152,152,153,152,152,154,154,155]},{"a":10277,"t":"byte","b":[154,154,0,0,0,0,0,0]},{"a":10285,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":10293,"t":"byte","b":[0,152,156,157,152,152,154,158]},{"a":10301,"t":"byte","b":[159,154,154,0,0,0,0,0]},{"a":10309,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":10317,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":10325,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":10333,"t":"byte","b":[0,237,237,237,237,237,0,0]},{"a":10341,"t":"byte","b":[0,0,0,145,145,145,145,145]},{"a":10349,"t":"byte","b":[144,143,144,143,144,192,193,194]},{"a":10357,"t":"byte","b":[195,196,224,225,226,227,228,147]},{"a":10365,"t":"byte","b":[148,149,150,151,229,230,231,232]},{"a":10373,"t":"byte","b":[233,229,230,231,232,233,229,230]},{"a":10381,"t":"byte","b":[231,232,233,224,201,202,227,228]},{"a":10389,"t":"byte","b":[147,148,149,150,151,0,0,0]},{"a":10397,"t":"byte","b":[0,0,0,0,0,0,0,197]},{"a":10405,"t":"byte","b":[198,194,199,200,206,203,204,232]},{"a":10413,"t":"byte","b":[233,229,234,235,236,233,229,230]},{"a":10421,"t":"byte","b":[231,232,233,229,230,231,232,233]},{"a":10429,"t":"byte","b":[229,234,235,236,233,229,230,231]},{"a":10437,"t":"byte","b":[232,233,229,230,231,232,233,0]},{"a":10445,"t":"byte","b":[0,153,154,0,0,153,154,153]},{"a":10453,"t":"byte","b":[154,0,155,153,155,156,0,0]},{"a":10461,"t":"byte","b":[155,156,0,0,0,0,0,0]},{"a":10469,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":10477,"t":"byte","b":[0,0,197,198,194,199,200,229]},{"a":10485,"t":"byte","b":[203,204,232,233,229,234,235,236]},{"a":10493,"t":"byte","b":[233,179,180,181,182,183,207,208]},{"a":10501,"t":"byte","b":[204,209,210,0,0,0,0,0]},{"a":10509,"t":"byte","b":[179,180,181,182,183,207,208,204]},{"a":10517,"t":"byte","b":[209,210,145,217,218,219,145,144]},{"a":10525,"t":"byte","b":[214,215,216,144,146,211,212,213]},{"a":10533,"t":"byte","b":[146,146,220,221,222,146,147,148]},{"a":10541,"t":"byte","b":[149,150,151,179,180,181,182,183]},{"a":10549,"t":"byte","b":[207,208,204,209,210,0,238,0]},{"a":10557,"t":"byte","b":[0,0,179,223,181,182,183,207]},{"a":10565,"t":"byte","b":[208,204,209,210,166,167,168,0]},{"a":10573,"t":"byte","b":[0,0,173,0,0,0,0,238]},{"a":10581,"t":"byte","b":[0,0,0,0,238,0,0,0]},{"a":10589,"t":"byte","b":[0,238,0,0,0,145,145,145]},{"a":10597,"t":"byte","b":[145,145,144,143,144,143,144,192]},{"a":10605,"t":"byte","b":[193,194,195,190,224,225,226,227]},{"a":10613,"t":"byte","b":[228,147,148,149,150,151]},{"a":10619,"l":"level_tiles_21_29","c":"Landscape tiles $21-$29 ($297B-$2A5B): the ground's right end $21 $22 that closes every landscape, and level 1's scenery $23-$29 (pillars topped with ringed planets, craters, floating diamonds; $28 and $29 also level 7).","t":"byte","b":[140,130,128,0,0,134,133,139]},{"a":10627,"t":"byte","b":[130,128,135,134,133,140,130,146]},{"a":10635,"t":"byte","b":[146,135,134,133,147,151,149,130]},{"a":10643,"t":"byte","b":[129,0,0,0,0,0,0,0]},{"a":10651,"t":"byte","b":[0,0,0,129,128,0,0,0]},{"a":10659,"t":"byte","b":[139,130,130,129,128,128,0,0]},{"a":10667,"t":"byte","b":[0,0,0,234,235,236,0,238]},{"a":10675,"t":"byte","b":[239,240,241,242,0,244,245,246]},{"a":10683,"t":"byte","b":[0,0,0,0,0,0,0,177]},{"a":10691,"t":"byte","b":[178,179,0,0,0,233,0,0]},{"a":10699,"t":"byte","b":[0,237,243,247,0,0,248,249]},{"a":10707,"t":"byte","b":[250,0,0,0,251,0,0,0]},{"a":10715,"t":"byte","b":[0,0,0,0,145,145,145,145]},{"a":10723,"t":"byte","b":[145,144,143,144,143,210,146,146]},{"a":10731,"t":"byte","b":[209,211,212,146,146,201,208,213]},{"a":10739,"t":"byte","b":[147,148,149,150,151,145,145,145]},{"a":10747,"t":"byte","b":[145,145,192,193,194,195,190,229]},{"a":10755,"t":"byte","b":[230,226,231,232,216,217,218,219]},{"a":10763,"t":"byte","b":[220,151,147,148,149,151,145,145]},{"a":10771,"t":"byte","b":[145,145,145,207,143,144,143,144]},{"a":10779,"t":"byte","b":[206,205,204,146,146,203,202,146]},{"a":10787,"t":"byte","b":[146,146,147,148,149,150,151,145]},{"a":10795,"t":"byte","b":[166,167,168,145,146,163,164,165]},{"a":10803,"t":"byte","b":[146,169,160,161,162,170,146,213]},{"a":10811,"t":"byte","b":[175,176,146,147,148,149,150,151]},{"a":10819,"t":"byte","b":[0,173,161,174,0,0,171,167]},{"a":10827,"t":"byte","b":[172,0,0,173,167,172,0,0]},{"a":10835,"t":"byte","b":[173,161,174,0,0,171,167,172]},{"a":10843,"t":"byte","b":[0]},{"a":10844,"l":"level_tiles_2a_43","c":"Landscape tiles $2A-$43 ($2A5C-$2CE5): mostly level 7's scenery, with $2C-$2F used by level 2 and $38-$40 partly shared with levels 3 and 5; $2B, $41 and $43 are never placed in the map.","t":"byte","b":[0,180,181,182,0,0,183,184]},{"a":10852,"t":"byte","b":[185,0,0,186,187,188,0,0]},{"a":10860,"t":"byte","b":[0,0,0,0,0,177,178,179]},{"a":10868,"t":"byte","b":[0,145,145,145,145,145,207,143]},{"a":10876,"t":"byte","b":[144,143,210,206,205,189,211,212]},{"a":10884,"t":"byte","b":[203,202,250,201,208,147,148,149]},{"a":10892,"t":"byte","b":[150,151,145,217,218,219,145,144]},{"a":10900,"t":"byte","b":[214,215,216,144,146,176,177,178]},{"a":10908,"t":"byte","b":[146,146,220,221,222,146,147,148]},{"a":10916,"t":"byte","b":[149,150,151,0,0,0,0,0]},{"a":10924,"t":"byte","b":[0,0,0,0,0,0,163,0]},{"a":10932,"t":"byte","b":[0,0,237,160,0,0,0,0]},{"a":10940,"t":"byte","b":[164,0,0,0,0,238,0,0]},{"a":10948,"t":"byte","b":[0,0,238,0,0,0,169,238]},{"a":10956,"t":"byte","b":[170,0,0,237,247,237,237,237]},{"a":10964,"t":"byte","b":[171,238,172,0,0,0,0,0]},{"a":10972,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":10980,"t":"byte","b":[0,0,174,0,0,0,0,162]},{"a":10988,"t":"byte","b":[175,0,0,0,165,0,0,0]},{"a":10996,"t":"byte","b":[0,0,0,0,180,181,182,0]},{"a":11004,"t":"byte","b":[0,183,184,185,0,0,186,187]},{"a":11012,"t":"byte","b":[188,0,0,0,0,0,0,145]},{"a":11020,"t":"byte","b":[166,234,168,145,146,163,233,165]},{"a":11028,"t":"byte","b":[146,169,160,233,162,170,146,213]},{"a":11036,"t":"byte","b":[175,176,146,147,148,149,150,151]},{"a":11044,"t":"byte","b":[0,173,234,174,0,0,171,233]},{"a":11052,"t":"byte","b":[172,0,0,173,233,172,0,0]},{"a":11060,"t":"byte","b":[173,161,174,0,0,171,167,172]},{"a":11068,"t":"byte","b":[0,145,166,233,168,145,146,163]},{"a":11076,"t":"byte","b":[233,165,146,169,160,235,162,170]},{"a":11084,"t":"byte","b":[146,213,175,176,146,147,148,149]},{"a":11092,"t":"byte","b":[150,151,0,236,237,238,0,0]},{"a":11100,"t":"byte","b":[0,0,0,0,0,180,181,182]},{"a":11108,"t":"byte","b":[0,0,183,184,185,0,0,186]},{"a":11116,"t":"byte","b":[187,188,0,239,240,159,241,244]},{"a":11124,"t":"byte","b":[246,243,167,242,245,0,173,167]},{"a":11132,"t":"byte","b":[172,0,0,173,161,174,0,0]},{"a":11140,"t":"byte","b":[171,167,172,0,247,248,249,250]},{"a":11148,"t":"byte","b":[251,252,253,157,0,0,0,0]},{"a":11156,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":11164,"t":"byte","b":[0,0,0,0,0,208,209,210]},{"a":11172,"t":"byte","b":[211,212,0,0,0,215,214,0]},{"a":11180,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":11188,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":11196,"t":"byte","b":[0,0,152,152,0,0,0,0]},{"a":11204,"t":"byte","b":[0,0,153,154,0,0,0,155]},{"a":11212,"t":"byte","b":[156,0,0,152,0,0,0,0]},{"a":11220,"t":"byte","b":[0,0,0,0,180,181,182,0]},{"a":11228,"t":"byte","b":[0,183,184,185,0,152,186,187]},{"a":11236,"t":"byte","b":[188,0,0,0,0,152,0,0]},{"a":11244,"t":"byte","b":[0,0,153,154,0,0,0,155]},{"a":11252,"t":"byte","b":[156,0,0,0,0,0,0,0]},{"a":11260,"t":"byte","b":[0,0,152,0,0,0,0,0]},{"a":11268,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":11276,"t":"byte","b":[0,0,0,0,152,0,0,0]},{"a":11284,"t":"byte","b":[0,0,0,152,0,0,0,0]},{"a":11292,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":11300,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":11308,"t":"byte","b":[0,0,0,0,152,0,0,0]},{"a":11316,"t":"byte","b":[0,0,0,239,240,239,240,240]},{"a":11324,"t":"byte","b":[216,214,216,216,214,0,0,0]},{"a":11332,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":11340,"t":"byte","b":[0,0,0,0,248,244,244,248]},{"a":11348,"t":"byte","b":[244,252,252,252,252,252,0,0]},{"a":11356,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":11364,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":11372,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":11380,"t":"byte","b":[0,0,0,0,0,152,0,0]},{"a":11388,"t":"byte","b":[152,0,0,0,0,0,0,0]},{"a":11396,"t":"byte","b":[0,0,152,0,153,154,0,0]},{"a":11404,"t":"byte","b":[0,155,156,0,0,0,0,0]},{"a":11412,"t":"byte","b":[0,0,0,152,0,0,0,145]},{"a":11420,"t":"byte","b":[145,145,145,145,144,143,144,143]},{"a":11428,"t":"byte","b":[144,192,193,194,195,190,224,225]},{"a":11436,"t":"byte","b":[226,227,228,147,148,149,150,151]},{"a":11444,"t":"byte","b":[244,244,218,239,240,245,252,219]},{"a":11452,"t":"byte","b":[216,214,0,0,0,0,0,0]},{"a":11460,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":11468,"t":"byte","b":[0,145,145,145,145,145,144,143]},{"a":11476,"t":"byte","b":[144,143,144,192,193,194,195,183]},{"a":11484,"t":"byte","b":[224,225,226,227,228,147,148,149]},{"a":11492,"t":"byte","b":[150,151]},{"a":11494,"l":"level_tiles_44_5a","c":"Landscape tiles $44-$5A ($2CE6-$2F24): level 6's scenery (the cave: stalactite ceilings, stalagmites, craters); $53, $59 and $5A are never placed in the map.","t":"byte","b":[179,180,181,182,183,186,163,164]},{"a":11502,"t":"byte","b":[187,188,0,0,160,0,0,0]},{"a":11510,"t":"byte","b":[0,161,0,0,0,0,162,0]},{"a":11518,"t":"byte","b":[0,179,180,181,182,183,163,164]},{"a":11526,"t":"byte","b":[165,188,187,166,167,168,0,0]},{"a":11534,"t":"byte","b":[0,169,170,0,0,0,171,172]},{"a":11542,"t":"byte","b":[0,0,179,180,181,182,183,188]},{"a":11550,"t":"byte","b":[187,186,187,188,0,0,0,0]},{"a":11558,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":11566,"t":"byte","b":[0,0,0,0,173,174,0,0]},{"a":11574,"t":"byte","b":[0,0,176,0,0,0,0,177]},{"a":11582,"t":"byte","b":[0,0,0,0,178,0,0,0]},{"a":11590,"t":"byte","b":[0,0,0,0,179,180,202,204]},{"a":11598,"t":"byte","b":[0,187,201,175,203,0,0,166]},{"a":11606,"t":"byte","b":[167,168,0,0,0,169,170,0]},{"a":11614,"t":"byte","b":[0,0,171,172,0,179,180,202]},{"a":11622,"t":"byte","b":[204,0,163,201,175,203,0,171]},{"a":11630,"t":"byte","b":[172,167,168,0,0,174,169,170]},{"a":11638,"t":"byte","b":[0,0,177,171,172,0,145,145]},{"a":11646,"t":"byte","b":[219,220,145,144,215,216,217,144]},{"a":11654,"t":"byte","b":[210,211,212,213,214,205,206,207]},{"a":11662,"t":"byte","b":[208,209,147,148,149,150,151,0]},{"a":11670,"t":"byte","b":[0,227,0,0,0,0,226,0]},{"a":11678,"t":"byte","b":[0,0,0,225,0,0,0,0]},{"a":11686,"t":"byte","b":[223,224,0,0,0,221,222,0]},{"a":11694,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":11702,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":11710,"t":"byte","b":[0,226,0,0,0,0,223,0]},{"a":11718,"t":"byte","b":[0,0,0,173,174,0,0,0]},{"a":11726,"t":"byte","b":[0,176,0,0,0,0,177,0]},{"a":11734,"t":"byte","b":[0,0,0,178,0,0,0,0]},{"a":11742,"t":"byte","b":[0,0,145,145,145,145,145,144]},{"a":11750,"t":"byte","b":[143,144,143,144,192,193,194,195]},{"a":11758,"t":"byte","b":[196,205,206,207,208,209,147,148]},{"a":11766,"t":"byte","b":[149,150,151,145,145,219,220,145]},{"a":11774,"t":"byte","b":[144,215,216,217,144,229,230,212]},{"a":11782,"t":"byte","b":[213,214,205,206,207,208,209,147]},{"a":11790,"t":"byte","b":[148,149,150,151,145,145,145,145]},{"a":11798,"t":"byte","b":[145,144,143,144,143,144,146,146]},{"a":11806,"t":"byte","b":[146,146,146,228,146,146,146,146]},{"a":11814,"t":"byte","b":[147,148,149,150,151,145,145,219]},{"a":11822,"t":"byte","b":[220,145,144,215,216,217,144,210]},{"a":11830,"t":"byte","b":[211,212,213,231,205,206,207,208]},{"a":11838,"t":"byte","b":[209,147,148,149,150,151,145,145]},{"a":11846,"t":"byte","b":[145,145,145,144,143,144,143,144]},{"a":11854,"t":"byte","b":[146,146,146,146,235,146,146,146]},{"a":11862,"t":"byte","b":[146,232,147,148,149,150,151,145]},{"a":11870,"t":"byte","b":[145,219,220,145,144,215,216,217]},{"a":11878,"t":"byte","b":[144,210,211,212,213,231,205,206]},{"a":11886,"t":"byte","b":[207,208,209,147,148,149,150,151]},{"a":11894,"t":"byte","b":[145,145,145,145,145,144,143,144]},{"a":11902,"t":"byte","b":[143,144,146,146,146,238,237,146]},{"a":11910,"t":"byte","b":[146,146,232,236,147,148,149,150]},{"a":11918,"t":"byte","b":[151,239,240,241,182,183,242,243]},{"a":11926,"t":"byte","b":[244,245,187,166,167,168,0,0]},{"a":11934,"t":"byte","b":[0,169,170,0,0,0,171,172]},{"a":11942,"t":"byte","b":[0,0,145,145,145,145,145,144]},{"a":11950,"t":"byte","b":[143,144,143,144,197,193,194,195]},{"a":11958,"t":"byte","b":[190,246,206,207,208,209,147,148]},{"a":11966,"t":"byte","b":[149,150,151,179,180,181,182,183]},{"a":11974,"t":"byte","b":[186,163,164,187,188,0,251,252]},{"a":11982,"t":"byte","b":[0,0,0,253,198,0,0,0]},{"a":11990,"t":"byte","b":[0,162,0,0,179,180,181,182]},{"a":11998,"t":"byte","b":[183,186,163,164,187,188,0,247]},{"a":12006,"t":"byte","b":[248,0,0,0,249,250,0,0]},{"a":12014,"t":"byte","b":[0,0,162,0,0,161,160,161]},{"a":12022,"t":"byte","b":[160,161,160,161,160,161,160,161]},{"a":12030,"t":"byte","b":[160,161,160,161,146,146,146,146]},{"a":12038,"t":"byte","b":[146,147,148,149,150,151,160,161]},{"a":12046,"t":"byte","b":[160,161,160,161,160,161,160,161]},{"a":12054,"t":"byte","b":[160,161,160,161,160,146,146,146]},{"a":12062,"t":"byte","b":[146,146,147,148,149,150,151]},{"a":12069,"l":"level_tiles_5b_75","c":"Landscape tiles $5B-$75 ($2F25-$31C7): level 5's scenery (pipes with valve wheels, brick wells and walls); $5D, $5E, $67, $6C and $71 are never placed in the map.","t":"byte","b":[161,165,174,213,145,162,164,174]},{"a":12077,"t":"byte","b":[212,144,161,163,174,146,146,146]},{"a":12085,"t":"byte","b":[176,177,178,146,147,148,149,150]},{"a":12093,"t":"byte","b":[151,160,161,160,161,160,162,160]},{"a":12101,"t":"byte","b":[161,160,161,160,161,160,161,160]},{"a":12109,"t":"byte","b":[146,146,146,146,146,147,148,149]},{"a":12117,"t":"byte","b":[150,151,168,167,167,167,167,160]},{"a":12125,"t":"byte","b":[161,160,161,160,162,160,161,160]},{"a":12133,"t":"byte","b":[161,160,161,160,161,160,162,160]},{"a":12141,"t":"byte","b":[161,160,161,167,169,174,214,0]},{"a":12149,"t":"byte","b":[161,166,174,214,0,162,166,174]},{"a":12157,"t":"byte","b":[214,0,161,166,174,214,0,162]},{"a":12165,"t":"byte","b":[166,174,214,0,173,172,172,172]},{"a":12173,"t":"byte","b":[172,160,161,160,161,160,0,0]},{"a":12181,"t":"byte","b":[0,160,161,0,0,0,0,0]},{"a":12189,"t":"byte","b":[0,0,0,0,0,172,172,172]},{"a":12197,"t":"byte","b":[172,172,161,160,161,160,161,160]},{"a":12205,"t":"byte","b":[161,160,161,160,0,0,0,0]},{"a":12213,"t":"byte","b":[0,0,0,0,0,0,172,172]},{"a":12221,"t":"byte","b":[172,172,171,160,161,160,161,170]},{"a":12229,"t":"byte","b":[161,170,0,0,0,0,0,0]},{"a":12237,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":12245,"t":"byte","b":[0,0,0,0,223,223,223,223]},{"a":12253,"t":"byte","b":[223,175,175,253,175,175,0,0]},{"a":12261,"t":"byte","b":[254,0,0,0,0,251,0,0]},{"a":12269,"t":"byte","b":[145,145,174,213,145,144,143,174]},{"a":12277,"t":"byte","b":[212,144,146,146,174,146,146,146]},{"a":12285,"t":"byte","b":[176,177,178,146,147,148,149,150]},{"a":12293,"t":"byte","b":[151,0,0,0,0,0,223,223]},{"a":12301,"t":"byte","b":[223,223,223,175,175,253,175,175]},{"a":12309,"t":"byte","b":[0,0,251,0,0,0,0,252]},{"a":12317,"t":"byte","b":[0,0,0,0,174,189,188,223]},{"a":12325,"t":"byte","b":[181,185,182,191,175,179,186,180]},{"a":12333,"t":"byte","b":[198,0,184,187,183,0,0,0]},{"a":12341,"t":"byte","b":[197,214,0,0,0,174,221,222]},{"a":12349,"t":"byte","b":[0,203,199,206,220,0,204,200]},{"a":12357,"t":"byte","b":[202,198,0,205,201,207,0,0]},{"a":12365,"t":"byte","b":[0,197,219,0,0,0,0,0]},{"a":12373,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":12381,"t":"byte","b":[208,0,0,0,0,174,0,0]},{"a":12389,"t":"byte","b":[0,0,174,0,0,0,0,0]},{"a":12397,"t":"byte","b":[0,0,223,223,223,223,223,175]},{"a":12405,"t":"byte","b":[175,175,175,175,0,0,0,0]},{"a":12413,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":12421,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":12429,"t":"byte","b":[0,0,216,215,0,0,0,208]},{"a":12437,"t":"byte","b":[214,0,0,0,174,214,0,168]},{"a":12445,"t":"byte","b":[167,167,167,167,160,161,160,161]},{"a":12453,"t":"byte","b":[160,217,218,217,218,217,160,161]},{"a":12461,"t":"byte","b":[160,161,160,162,160,161,160,161]},{"a":12469,"t":"byte","b":[167,169,174,189,188,161,246,185]},{"a":12477,"t":"byte","b":[182,191,218,179,186,180,198,161]},{"a":12485,"t":"byte","b":[247,187,183,0,162,166,197,214]},{"a":12493,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":12501,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":12509,"t":"byte","b":[0,0,0,0,0,0,0,208]},{"a":12517,"t":"byte","b":[0,0,0,0,174,214,0,0]},{"a":12525,"t":"byte","b":[0,174,214,0,0,0,174,214]},{"a":12533,"t":"byte","b":[0,0,0,174,214,0,0,0]},{"a":12541,"t":"byte","b":[174,214,0,229,230,231,232,233]},{"a":12549,"t":"byte","b":[234,235,236,237,238,229,230,231]},{"a":12557,"t":"byte","b":[232,233,224,225,226,227,228,147]},{"a":12565,"t":"byte","b":[148,149,150,151,0,0,0,0]},{"a":12573,"t":"byte","b":[0,192,193,194,195,190,239,240]},{"a":12581,"t":"byte","b":[241,242,243,229,230,231,232,233]},{"a":12589,"t":"byte","b":[234,235,236,237,238,0,0,0]},{"a":12597,"t":"byte","b":[0,0,223,223,244,0,0,175]},{"a":12605,"t":"byte","b":[209,0,0,0,0,0,0,0]},{"a":12613,"t":"byte","b":[0,0,0,0,0,0,172,172]},{"a":12621,"t":"byte","b":[172,172,172,160,161,160,161,160]},{"a":12629,"t":"byte","b":[161,160,161,160,161,0,0,0]},{"a":12637,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":12645,"t":"byte","b":[0,0,0,0,0,0,0,249]},{"a":12653,"t":"byte","b":[223,0,0,248,175,175,0,0]},{"a":12661,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":12669,"t":"byte","b":[0,0,174,250,0,0,0,211]},{"a":12677,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":12685,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":12693,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":12701,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":12709,"t":"byte","b":[192,193,194,195,196,239,240,241]},{"a":12717,"t":"byte","b":[242,243,0,0,0,0,0,0]},{"a":12725,"t":"byte","b":[0,249,223,223,0,248,253,175]},{"a":12733,"t":"byte","b":[175,0,0,254,0,0,0,0]},{"a":12741,"t":"byte","b":[251,0,0]},{"a":12744,"l":"level_tiles_76_95","c":"Landscape tiles $76-$95 ($31C8-$34E7): the 32 tiles of the Wiz-lab picture, placed only at map rows 8-15, columns 92-95 (a brick room with a cauldron when drawn with the glyphs at $2342).","t":"byte","b":[0,0,193,194,188,0,0,161]},{"a":12752,"t":"byte","b":[162,189,0,0,193,194,188,0]},{"a":12760,"t":"byte","b":[0,161,162,189,0,0,193,194]},{"a":12768,"t":"byte","b":[188,0,0,161,162,189,0,0]},{"a":12776,"t":"byte","b":[193,194,188,0,168,161,162,189]},{"a":12784,"t":"byte","b":[166,167,196,194,188,164,165,165]},{"a":12792,"t":"byte","b":[165,165,0,0,161,162,189,0]},{"a":12800,"t":"byte","b":[0,193,194,188,0,0,161,162]},{"a":12808,"t":"byte","b":[189,0,0,193,194,188,0,0]},{"a":12816,"t":"byte","b":[161,162,189,0,0,0,0,0]},{"a":12824,"t":"byte","b":[0,0,161,162,163,0,0,193]},{"a":12832,"t":"byte","b":[194,188,0,0,161,162,189,0]},{"a":12840,"t":"byte","b":[0,193,194,188,187,162,163,0]},{"a":12848,"t":"byte","b":[0,186,194,195,0,0,187,162]},{"a":12856,"t":"byte","b":[163,170,0,186,194,192,169,171]},{"a":12864,"t":"byte","b":[165,165,165,165,172,186,194,195]},{"a":12872,"t":"byte","b":[0,0,187,162,163,0,0,186]},{"a":12880,"t":"byte","b":[194,195,0,0,187,162,163,0]},{"a":12888,"t":"byte","b":[0,186,194,195,0,0,187,162]},{"a":12896,"t":"byte","b":[163,0,0,186,194,195,0,0]},{"a":12904,"t":"byte","b":[187,162,163,0,0,186,194,195]},{"a":12912,"t":"byte","b":[0,0,187,162,163,0,0,0]},{"a":12920,"t":"byte","b":[0,0,0,0,161,162,163,0]},{"a":12928,"t":"byte","b":[0,186,194,195,0,0,187,162]},{"a":12936,"t":"byte","b":[163,0,0,186,194,195,0,0]},{"a":12944,"t":"byte","b":[0,0,0,0,0,224,223,0]},{"a":12952,"t":"byte","b":[0,0,185,222,0,0,0,161]},{"a":12960,"t":"byte","b":[162,162,161,162,196,194,192,196]},{"a":12968,"t":"byte","b":[194,0,0,0,0,0,0,0]},{"a":12976,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":12984,"t":"byte","b":[162,161,162,162,161,192,196,194]},{"a":12992,"t":"byte","b":[192,196,0,0,0,0,0,0]},{"a":13000,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":13008,"t":"byte","b":[0,162,163,161,162,163,194,192]},{"a":13016,"t":"byte","b":[196,194,192,0,0,0,0,0]},{"a":13024,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":13032,"t":"byte","b":[0,0,163,224,226,226,226,188]},{"a":13040,"t":"byte","b":[185,146,146,146,0,0,0,0]},{"a":13048,"t":"byte","b":[0,0,0,0,228,227,0,0]},{"a":13056,"t":"byte","b":[0,225,184,226,227,161,250,249]},{"a":13064,"t":"byte","b":[146,184,186,194,192,185,185,181]},{"a":13072,"t":"byte","b":[182,181,185,176,146,146,146,174]},{"a":13080,"t":"byte","b":[175,146,146,146,173,146,146,146]},{"a":13088,"t":"byte","b":[146,165,165,165,165,165,182,181]},{"a":13096,"t":"byte","b":[182,181,231,146,146,146,146,230]},{"a":13104,"t":"byte","b":[218,219,220,146,229,146,146,146]},{"a":13112,"t":"byte","b":[146,146,165,165,165,165,165,182]},{"a":13120,"t":"byte","b":[181,200,184,184,146,146,199,180]},{"a":13128,"t":"byte","b":[184,146,146,199,179,178,146,146]},{"a":13136,"t":"byte","b":[146,146,177,165,165,165,165,165]},{"a":13144,"t":"byte","b":[181,182,208,182,181,146,146,208]},{"a":13152,"t":"byte","b":[146,146,146,146,209,146,146,146]},{"a":13160,"t":"byte","b":[146,146,146,146,165,165,165,165]},{"a":13168,"t":"byte","b":[165,248,247,146,190,191,181,182]},{"a":13176,"t":"byte","b":[183,184,184,182,181,182,184,184]},{"a":13184,"t":"byte","b":[181,182,183,184,184,182,181,182]},{"a":13192,"t":"byte","b":[184,184,181,182,183,184,184,182]},{"a":13200,"t":"byte","b":[181,182,184,184,181,182,183,184]},{"a":13208,"t":"byte","b":[184,182,203,202,205,184,181,204]},{"a":13216,"t":"byte","b":[201,206,184,185,185,183,181,182]},{"a":13224,"t":"byte","b":[185,185,181,182,181,185,185,183]},{"a":13232,"t":"byte","b":[181,182,185,185,181,182,181,185]},{"a":13240,"t":"byte","b":[185,183,181,182,197,198,146,146]},{"a":13248,"t":"byte","b":[146,185,185,183,181,182,185,185]},{"a":13256,"t":"byte","b":[181,182,181,185,185,183,181,182]},{"a":13264,"t":"byte","b":[185,185,181,182,181,146,146,146]},{"a":13272,"t":"byte","b":[146,146,181,182,181,182,181,182]},{"a":13280,"t":"byte","b":[181,182,181,182,181,182,238,239]},{"a":13288,"t":"byte","b":[239,182,183,245,0,0,146,146]},{"a":13296,"t":"byte","b":[146,146,146,182,181,182,181,182]},{"a":13304,"t":"byte","b":[181,182,181,182,181,239,239,239]},{"a":13312,"t":"byte","b":[239,239,0,0,0,0,0,146]},{"a":13320,"t":"byte","b":[146,146,146,146,181,182,181,182]},{"a":13328,"t":"byte","b":[181,182,181,182,181,182,239,239]},{"a":13336,"t":"byte","b":[239,239,239,0,0,0,0,0]},{"a":13344,"t":"byte","b":[146,246,248,248,248,182,181,182]},{"a":13352,"t":"byte","b":[181,182,181,182,181,182,181,239]},{"a":13360,"t":"byte","b":[239,240,181,182,0,0,241,183]},{"a":13368,"t":"byte","b":[181,181,182,245,0,0,182,183]},{"a":13376,"t":"byte","b":[245,0,0,181,182,245,0,0]},{"a":13384,"t":"byte","b":[182,183,244,243,243,181,182,181]},{"a":13392,"t":"byte","b":[182,181,0,0,0,0,0,0]},{"a":13400,"t":"byte","b":[0,0,0,0,252,0,0,0]},{"a":13408,"t":"byte","b":[0,251,253,243,243,243,251,254]},{"a":13416,"t":"byte","b":[182,181,182,0,0,0,0,0]},{"a":13424,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":13432,"t":"byte","b":[0,0,243,243,243,243,243,181]},{"a":13440,"t":"byte","b":[182,181,182,181,0,215,216,217]},{"a":13448,"t":"byte","b":[182,0,214,213,212,181,0,207]},{"a":13456,"t":"byte","b":[210,211,182,243,243,208,183,181]},{"a":13464,"t":"byte","b":[182,181,208,181,182,182,181,182]},{"a":13472,"t":"byte","b":[181,182,146,146,146,146,146,146]},{"a":13480,"t":"byte","b":[146,146,146,146,146,146,146,146]},{"a":13488,"t":"byte","b":[146,165,165,165,165,165,234,235]},{"a":13496,"t":"byte","b":[181,182,181,233,236,146,146,146]},{"a":13504,"t":"byte","b":[232,237,146,146,146,146,146,146]},{"a":13512,"t":"byte","b":[146,146,165,165,165,165,165,0]},{"a":13520,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":13528,"t":"byte","b":[0,0,0,0,0,0,161,162]},{"a":13536,"t":"byte","b":[162,161,162,196,194,192,196,194]},{"a":13544,"l":"level_tiles_96_ac","c":"Landscape tiles $96-$AC ($34E8-$3726): level 4's scenery (bare trees, cottages, wells).","t":"byte","b":[145,145,145,175,176,170,171,172]},{"a":13552,"t":"byte","b":[173,174,160,161,162,163,164,165]},{"a":13560,"t":"byte","b":[166,167,168,169,147,148,149,150]},{"a":13568,"t":"byte","b":[151,201,145,239,145,202,200,193]},{"a":13576,"t":"byte","b":[207,195,234,224,225,226,227,228]},{"a":13584,"t":"byte","b":[229,230,231,232,233,147,148,149]},{"a":13592,"t":"byte","b":[150,151,211,212,145,145,145,144]},{"a":13600,"t":"byte","b":[143,144,143,144,146,146,146,146]},{"a":13608,"t":"byte","b":[146,146,146,146,146,146,147,148]},{"a":13616,"t":"byte","b":[149,150,151,0,186,185,184,0]},{"a":13624,"t":"byte","b":[188,187,182,183,0,0,0,181]},{"a":13632,"t":"byte","b":[180,0,0,0,0,178,0,0]},{"a":13640,"t":"byte","b":[0,0,177,179,0,0,0,242]},{"a":13648,"t":"byte","b":[0,0,206,197,191,189,0,0]},{"a":13656,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":13664,"t":"byte","b":[0,0,0,0,0,145,145,145]},{"a":13672,"t":"byte","b":[145,145,192,193,194,195,196,224]},{"a":13680,"t":"byte","b":[225,226,227,228,229,230,231,232]},{"a":13688,"t":"byte","b":[233,147,148,149,150,151,218,208]},{"a":13696,"t":"byte","b":[208,208,244,217,235,203,235,243]},{"a":13704,"t":"byte","b":[235,203,235,203,235,203,235,203]},{"a":13712,"t":"byte","b":[235,203,204,205,237,198,236,210]},{"a":13720,"t":"byte","b":[0,0,0,0,240,0,0,0]},{"a":13728,"t":"byte","b":[0,209,0,0,0,0,241,0]},{"a":13736,"t":"byte","b":[0,0,0,199,0,0,0,0]},{"a":13744,"t":"byte","b":[0,0,0,0,216,0,0,0]},{"a":13752,"t":"byte","b":[0,215,0,0,0,0,214,0]},{"a":13760,"t":"byte","b":[0,0,0,213,0,0,0,0]},{"a":13768,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":13776,"t":"byte","b":[0,242,0,223,206,248,191,189]},{"a":13784,"t":"byte","b":[0,0,247,0,0,0,0,245]},{"a":13792,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":13800,"t":"byte","b":[0,0,242,0,0,206,248,191]},{"a":13808,"t":"byte","b":[189,0,0,245,0,0,0,0]},{"a":13816,"t":"byte","b":[246,0,0,181,179,0,249,0]},{"a":13824,"t":"byte","b":[0,186,185,184,0,188,187,182]},{"a":13832,"t":"byte","b":[183,221,0,0,181,180,0,0]},{"a":13840,"t":"byte","b":[0,0,251,0,0,0,0,0]},{"a":13848,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":13856,"t":"byte","b":[0,220,0,250,221,0,219,221]},{"a":13864,"t":"byte","b":[181,179,0,249,0,0,0,0]},{"a":13872,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":13880,"t":"byte","b":[0,0,0,0,197,252,0,0]},{"a":13888,"t":"byte","b":[0,0,0,0,0,0,145,145]},{"a":13896,"t":"byte","b":[145,145,145,144,170,222,253,144]},{"a":13904,"t":"byte","b":[146,160,254,162,146,146,165,167]},{"a":13912,"t":"byte","b":[169,146,147,148,149,150,151,0]},{"a":13920,"t":"byte","b":[0,0,0,0,0,0,0,242]},{"a":13928,"t":"byte","b":[0,0,206,197,191,189,0,0]},{"a":13936,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":13944,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":13952,"t":"byte","b":[242,0,223,206,197,191,189,0]},{"a":13960,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":13968,"t":"byte","b":[0,181,179,0,249,0,0,186]},{"a":13976,"t":"byte","b":[185,184,0,188,187,182,183,0]},{"a":13984,"t":"byte","b":[0,0,181,180,0,0,0,0]},{"a":13992,"t":"byte","b":[0,0,218,208,208,208,208,217]},{"a":14000,"t":"byte","b":[235,203,235,203,235,203,235,203]},{"a":14008,"t":"byte","b":[235,203,235,203,235,203,204,205]},{"a":14016,"t":"byte","b":[237,198,236,208,208,208,208,208]},{"a":14024,"t":"byte","b":[235,203,235,203,235,203,235,203]},{"a":14032,"t":"byte","b":[235,203,235,203,235,203,235,199]},{"a":14040,"t":"byte","b":[0,0,0,0,208,208,208,208]},{"a":14048,"t":"byte","b":[244,203,235,203,235,243,235,203]},{"a":14056,"t":"byte","b":[235,203,235,203,235,203,235,203]},{"a":14064,"t":"byte","b":[204,205,237,198,236,208,208,208]},{"a":14072,"t":"byte","b":[208,208,203,235,203,235,203,235]},{"a":14080,"t":"byte","b":[203,235,203,235,203,235,203,235]},{"a":14088,"t":"byte","b":[203,204,205,237,198,236,145,145]},{"a":14096,"t":"byte","b":[145,145,145,192,193,194,195,190]},{"a":14104,"t":"byte","b":[224,225,226,227,228,229,230,231]},{"a":14112,"t":"byte","b":[232,233,147,148,149,150,151]},{"a":14119,"l":"level_tiles_ad_b9","c":"Landscape tiles $AD-$B9 ($3727-$386B): level 8's scenery (pods and sunburst monuments).","t":"byte","b":[145,145,145,145,145,144,143,144]},{"a":14127,"t":"byte","b":[143,144,192,193,194,195,196,224]},{"a":14135,"t":"byte","b":[226,226,226,228,147,148,149,150]},{"a":14143,"t":"byte","b":[151,145,221,186,222,145,144,191]},{"a":14151,"t":"byte","b":[250,223,144,187,188,189,219,220]},{"a":14159,"t":"byte","b":[224,226,226,226,228,147,148,149]},{"a":14167,"t":"byte","b":[150,151,145,175,176,177,145,144]},{"a":14175,"t":"byte","b":[207,208,209,144,146,239,240,241]},{"a":14183,"t":"byte","b":[146,146,204,205,206,146,147,148]},{"a":14191,"t":"byte","b":[149,150,151,0,160,161,162,0]},{"a":14199,"t":"byte","b":[0,163,164,165,0,0,166,167]},{"a":14207,"t":"byte","b":[168,0,0,169,170,171,0,0]},{"a":14215,"t":"byte","b":[172,173,174,0,0,0,0,0]},{"a":14223,"t":"byte","b":[0,0,178,179,180,0,0,210]},{"a":14231,"t":"byte","b":[211,212,0,0,242,243,244,0]},{"a":14239,"t":"byte","b":[0,0,0,0,0,213,197,179]},{"a":14247,"t":"byte","b":[198,214,215,210,211,212,216,217]},{"a":14255,"t":"byte","b":[229,243,230,218,245,246,247,248]},{"a":14263,"t":"byte","b":[249,0,253,238,254,0,200,0]},{"a":14271,"t":"byte","b":[0,0,0,199,232,0,0,0]},{"a":14279,"t":"byte","b":[231,0,0,0,0,0,0,0]},{"a":14287,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":14295,"t":"byte","b":[0,0,0,201,0,0,0,234]},{"a":14303,"t":"byte","b":[233,0,0,0,0,202,0,0]},{"a":14311,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":14319,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":14327,"t":"byte","b":[0,0,0,0,203,0,0,0]},{"a":14335,"t":"byte","b":[235,236,237,0,181,182,183,184]},{"a":14343,"t":"byte","b":[185,0,166,167,168,0,0,169]},{"a":14351,"t":"byte","b":[170,171,0,0,172,173,174,0]},{"a":14359,"t":"byte","b":[0,210,0,212,0,0,242,243]},{"a":14367,"t":"byte","b":[244,0,0,160,161,162,0,0]},{"a":14375,"t":"byte","b":[163,164,165,0,0,252,0,251]},{"a":14383,"t":"byte","b":[0,0,210,0,212,0,0,242]},{"a":14391,"t":"byte","b":[243,244,0,0,0,0,0,0]},{"a":14399,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":14407,"t":"byte","b":[0,0,0,178,179,180,0,0]},{"a":14415,"t":"byte","b":[225,0,227,0,0,0,0,0]},{"a":14423,"t":"byte","b":[0,0,0,0,0,0,0,178]},{"a":14431,"t":"byte","b":[179,180,0,0,210,211,212,0]},{"a":14439,"t":"byte","b":[0,242,243,244,0]},{"a":14444,"l":"level_tiles_ba_bf","c":"Landscape tiles $BA-$BF ($386C-$3901), the last six of the table, level 3's: $BA $BB ground pieces, $BC $BD $BE the three heads of Mount Rushmore and $BF its base (map rows 10 and 11).","t":"byte","b":[145,145,145,145,145,144,143,144]},{"a":14452,"t":"byte","b":[143,144,192,193,194,195,196,146]},{"a":14460,"t":"byte","b":[146,146,146,146,147,148,149,150]},{"a":14468,"t":"byte","b":[151,185,188,145,145,145,209,231]},{"a":14476,"t":"byte","b":[144,143,144,230,232,146,146,146]},{"a":14484,"t":"byte","b":[250,251,146,146,146,147,148,149]},{"a":14492,"t":"byte","b":[150,151,0,0,0,0,0,160]},{"a":14500,"t":"byte","b":[161,162,0,0,165,166,167,168]},{"a":14508,"t":"byte","b":[169,170,171,172,173,174,175,176]},{"a":14516,"t":"byte","b":[177,178,179,0,0,0,0,0]},{"a":14524,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":14532,"t":"byte","b":[0,0,207,208,0,210,211,212]},{"a":14540,"t":"byte","b":[213,214,215,216,0,0,0,0]},{"a":14548,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":14556,"t":"byte","b":[0,0,0,163,186,0,0,0]},{"a":14564,"t":"byte","b":[164,187,0,0,0,145,145,145]},{"a":14572,"t":"byte","b":[145,234,144,143,144,143,235,146]},{"a":14580,"t":"byte","b":[146,146,146,236,146,146,146,146]},{"a":14588,"t":"byte","b":[249,147,148,149,150,151]},{"a":14594,"l":"bonus_wave_script","c":"Bonus-stage attack script, $3902-$39DB. $9CB2 copies $FE bytes from here (this script and the first 36 bytes of the table after it) to $ED02-$EDFF, and $9CEA runs the copy, one command per pass of the bonus-stage loop ($65C3; loops are followed at once), index in $BB06. A command is two bytes: an alien type (bit 7: first wait until all six object slots at $0200 are empty, else until one is free; type $63 spawns nothing) and a delay, counted in $BB05 over the passes that find room; the type indexes tbl_bonus_alien_templates. $FF and $FE set $B1F8 to $FF or 0, which makes $6755 ramp $B1F6 up to 6 or down to 0 (apparently the stage's scrolling speed); $FD ends the stage ($B1CF = $36). A loop is three bytes: the address of its target in this block, low byte first (the high byte $39 is what $9CEA compares with $BB04 to recognise a loop), and a count that $9CEA decrements in the RAM copy. Run to the end it spawns 355 aliens of types 0-19 (never 10); $39DA-$39DB, after the $FD, are never reached.","t":"byte","b":[255,134,50,6,10,5,57,4],"x":[40127]},{"a":14602,"t":"byte","b":[128,1,0,1,12,57,4,131]},{"a":14610,"t":"byte","b":[10,2,10,3,10,19,57,9]},{"a":14618,"t":"byte","b":[7,10,26,57,14,133,10,5]},{"a":14626,"t":"byte","b":[10,33,57,4,129,10,1,1]},{"a":14634,"t":"byte","b":[40,57,4,133,10,6,10,5]},{"a":14642,"t":"byte","b":[10,6,10,49,57,10,7,10]},{"a":14650,"t":"byte","b":[56,57,14,3,10,2,10,3]},{"a":14658,"t":"byte","b":[10,63,57,19,4,10,4,1]},{"a":14666,"t":"byte","b":[72,57,16,135,10,7,1,2]},{"a":14674,"t":"byte","b":[1,3,1,79,57,10,2,1]},{"a":14682,"t":"byte","b":[3,1,88,57,5,7,1,5]},{"a":14690,"t":"byte","b":[1,6,1,95,57,7,136,1]},{"a":14698,"t":"byte","b":[8,3,106,57,4,139,1,11]},{"a":14706,"t":"byte","b":[3,113,57,4,147,50,146,50]},{"a":14714,"t":"byte","b":[254,146,50,13,20,14,20,125]},{"a":14722,"t":"byte","b":[57,2,143,50,143,5,15,5]},{"a":14730,"t":"byte","b":[143,5,15,5,15,5,143,5]},{"a":14738,"t":"byte","b":[15,5,15,5,15,5,143,5]},{"a":14746,"t":"byte","b":[15,5,15,5,15,5,15,5]},{"a":14754,"t":"byte","b":[143,5,15,5,15,5,15,5]},{"a":14762,"t":"byte","b":[15,5,15,5,8,2,9,2]},{"a":14770,"t":"byte","b":[174,57,2,140,100,12,65,183]},{"a":14778,"t":"byte","b":[57,20,144,20,16,10,190,57]},{"a":14786,"t":"byte","b":[4,145,20,17,10,197,57,4]},{"a":14794,"t":"byte","b":[144,20,17,5,16,5,17,5]},{"a":14802,"t":"byte","b":[206,57,20,147,50,227,100,253]},{"a":14810,"t":"byte","b":[227,255]},{"a":14812,"l":"tbl_bonus_alien_templates","c":"Bonus-stage alien template table: 20 words, the template address of each alien type (0-19), indexed by type x 2 at $9D97 ($9D9C reads the high bytes). Entries 9 and 10 are both $3B03, and the script never asks for type 10. $9DA1 copies a template's first 23 bytes into a free 42-byte object slot at $0200 (slot n at $0200 + 42 n, six slots), clears the other 19, then applies its random fields. Template bytes: 0-1 X (screen X = 2 x byte 0), 2-3 Y, 4-5 X velocity, 6-7 Y velocity, 8 movement mode (0 Y velocity grows by byte 9 a frame, 1 shrinks, 2 steered by the direction bits of the path at 10-11, 3 accelerated by them), 12 frames per path step, 13 bounce/scenery behaviour ($A659), 14 fire mode (0 none, 1 aimed, 2 turning, 3 eight-way; $A541) and 15 its interval, 16 colour (low bits, $10 cycles) and flags (bit 7 police siren while alive, bit 6 hires, bit 5 always a pearl), 17 animation mode (0 still, 1 eased index, 2+ timed list; $A5B1) with 18 its frame/index/delay and 19-20 the frame list, 21 kind (0 ordinary, 1 releases a droplet, 6 extra life, $FF bounces off shots; $A7F2), 22 points / 10 (added through $710B by $A891); byte 23 counts 3-byte random fields (mask, add, offset into the slot).","t":"byte","b":[4],"x":[40343]},{"a":14813,"l":"tbl_bonus_alien_templates_hi","c":"High byte of the first entry of tbl_bonus_alien_templates: the code reads the table's high bytes through this address ($9D9C, LDA $39DD,Y), so the disassembler gave it a symbol; it owns the rest of the 20-word table, $39DD-$3A03.","t":"addr","b":[58,28],"oa":7226,"o":"$1C3A","x":[40348]},{"a":14815,"t":"addr","b":[58,52],"oa":13370,"o":"$343A"},{"a":14817,"t":"addr","b":[58,82],"oa":21050,"o":"$523A"},{"a":14819,"t":"addr","b":[58,112],"oa":28730,"o":"$703A"},{"a":14821,"t":"addr","b":[58,151],"oa":38714,"o":"$973A"},{"a":14823,"t":"addr","b":[58,175],"oa":44858,"o":"$AF3A"},{"a":14825,"t":"addr","b":[58,199],"oa":51002,"o":"$C73A"},{"a":14827,"t":"addr","b":[58,235],"oa":60218,"o":"$EB3A"},{"a":14829,"t":"addr","b":[58,3],"oa":826,"o":"$033A"},{"a":14831,"t":"addr","b":[59,3],"oa":827,"o":"$033B"},{"a":14833,"t":"addr","b":[59,27],"oa":6971,"o":"$1B3B"},{"a":14835,"t":"addr","b":[59,51],"oa":13115,"o":"$333B"},{"a":14837,"t":"addr","b":[59,87],"oa":22331,"o":"$573B"},{"a":14839,"t":"addr","b":[59,111],"oa":28475,"o":"$6F3B"},{"a":14841,"t":"addr","b":[59,135],"oa":34619,"o":"$873B"},{"a":14843,"t":"addr","b":[59,165],"oa":42299,"o":"$A53B"},{"a":14845,"t":"addr","b":[59,189],"oa":48443,"o":"$BD3B"},{"a":14847,"t":"addr","b":[59,213],"oa":54587,"o":"$D53B"},{"a":14849,"t":"addr","b":[59,237],"oa":60731,"o":"$ED3B"},{"a":14851,"t":"byte","b":[59]},{"a":14852,"l":"tbl_bonus_alien_00","c":"Bonus-stage alien type 0 ($3A04-$3A1B, 24 bytes): the squashing ball (list $3C05), eased from entry 10; enters at the right edge (X 170), Y 115; velocity X -1 Y +0; mode 0: falls, Y velocity + $30/256 a frame; bounces at the Y limits (byte 13 = 1); no fire; colour byte $0A (colour 10); kind 0 (ordinary); worth 20 points (byte 22 x 10, $A891); no random fields. The script spawns it 6 times.","t":"byte","b":[170,0,115,0,255,0,0,0]},{"a":14860,"t":"byte","b":[0,48,0,0,0,1,0,0]},{"a":14868,"t":"byte","b":[10,1,10,5,60,0,2,0]},{"a":14876,"l":"tbl_bonus_alien_01","c":"Bonus-stage alien type 1 ($3A1C-$3A33, 24 bytes): the squashing ball (list $3C05), eased from entry 10; enters at the left edge (X 0), Y 155; velocity X +1 Y +0; mode 1: rises, Y velocity - $30/256 a frame; bounces at the Y limits (byte 13 = 1); no fire; colour byte $0A (colour 10); kind 0 (ordinary); worth 20 points (byte 22 x 10, $A891); no random fields. The script spawns it 6 times.","t":"byte","b":[0,0,155,0,1,0,0,0]},{"a":14884,"t":"byte","b":[1,48,0,0,0,1,0,0]},{"a":14892,"t":"byte","b":[10,1,10,5,60,0,2,0]},{"a":14900,"l":"tbl_bonus_alien_02","c":"Bonus-stage alien type 2 ($3A34-$3A51, 30 bytes): the ring (frame $0C), still; enters at a random X, Y 200; velocity X +0.01 Y -0.02; mode 3: accelerated along the path at $4115, 50 frames a step; bounces at the Y limits (byte 13 = 1); no fire; colour byte $50 (cycling colours; bit 6: hires); kind 0 (ordinary); worth 30 points (byte 22 x 10, $A891); 2 random fields: X = rnd AND $7F + $1E, X velocity fraction = rnd AND $07 + $01. The script spawns it 47 times.","t":"byte","b":[100,0,200,0,0,3,255,250]},{"a":14908,"t":"byte","b":[3,0,21,65,50,1,0,0]},{"a":14916,"t":"byte","b":[80,0,12,0,0,0,3,2]},{"a":14924,"t":"byte","b":[127,30,0,7,1,5]},{"a":14930,"l":"tbl_bonus_alien_03","c":"Bonus-stage alien type 3 ($3A52-$3A6F, 30 bytes): the ring (frame $0C), still; enters at a random X, Y 70; velocity X -0.99 Y +0.02; mode 3: accelerated along the path at $4115, 50 frames a step; bounces at the Y limits (byte 13 = 1); no fire; colour byte $50 (cycling colours; bit 6: hires); kind 0 (ordinary); worth 30 points (byte 22 x 10, $A891); 2 random fields: X = rnd AND $7F + $1E, X velocity fraction = rnd AND $07 + $F8. The script spawns it 49 times.","t":"byte","b":[100,0,70,0,255,3,0,6]},{"a":14938,"t":"byte","b":[3,0,21,65,50,1,0,0]},{"a":14946,"t":"byte","b":[80,0,12,0,0,0,3,2]},{"a":14954,"t":"byte","b":[127,30,0,7,248,5]},{"a":14960,"l":"tbl_bonus_alien_04","c":"Bonus-stage alien type 4 ($3A70-$3A96, 39 bytes): the squashing ball (list $3C05), eased from entry 10; enters at the left edge (X 0), Y 135; velocity X +0.5 Y +0.02; mode 1: rises, Y velocity - $80/256 a frame; bounces at the Y limits (byte 13 = 1); no fire; colour byte $08 (colour 8); kind 0 (ordinary); worth 70 points (byte 22 x 10, $A891); 5 random fields: movement mode = rnd AND $01 + $00, Y fraction = rnd AND $40 + $64, X velocity = rnd AND $01 + $00, Y acceleration = rnd AND $3F + $04, colour byte = rnd AND $08 + $06. The script spawns it 18 times.","t":"byte","b":[0,0,135,0,0,128,0,6]},{"a":14968,"t":"byte","b":[1,128,0,0,0,1,0,0]},{"a":14976,"t":"byte","b":[8,1,10,5,60,0,7,5]},{"a":14984,"t":"byte","b":[1,0,8,64,100,3,1,0]},{"a":14992,"t":"byte","b":[4,63,4,9,8,6,16]},{"a":14999,"l":"tbl_bonus_alien_05","c":"Bonus-stage alien type 5 ($3A97-$3AAE, 24 bytes): the dart (list $3C2E), a frame every 8; enters at the left edge (X 0), Y 135; velocity X +0.03 Y +0.08; mode 3: accelerated along the path at $4117, 20 frames a step; bounces at the Y limits (byte 13 = 1); no fire; colour byte $07 (colour 7); kind 0 (ordinary); worth 30 points (byte 22 x 10, $A891); no random fields. The script spawns it 26 times.","t":"byte","b":[0,0,135,0,0,8,0,20]},{"a":15007,"t":"byte","b":[3,0,23,65,20,1,0,0]},{"a":15015,"t":"byte","b":[7,2,8,46,60,0,3,0]},{"a":15023,"l":"tbl_bonus_alien_06","c":"Bonus-stage alien type 6 ($3AAF-$3AC6, 24 bytes): the dart (list $3C2E), a frame every 8; enters at the left edge (X 0), Y 135; velocity X +0.03 Y -0.08; mode 3: accelerated along the path at $4117, 20 frames a step; bounces at the Y limits (byte 13 = 1); no fire; colour byte $07 (colour 7); kind 0 (ordinary); worth 20 points (byte 22 x 10, $A891); no random fields. The script spawns it 26 times.","t":"byte","b":[0,0,135,0,0,8,255,236]},{"a":15031,"t":"byte","b":[3,0,23,65,20,1,0,0]},{"a":15039,"t":"byte","b":[7,2,8,46,60,0,2,0]},{"a":15047,"l":"tbl_bonus_alien_07","c":"Bonus-stage alien type 7 ($3AC7-$3AEA, 36 bytes): the textured ball (frame $71), still; enters at the right edge (X 180), a random Y; velocity X -2 Y +0; mode 0 with no acceleration: straight line; bounces at the Y limits (byte 13 = 1); no fire; colour byte $0C (colour 12); kind $FF: bounces off shots ($A802); worth no points; 4 random fields: Y = rnd AND $7F + $4B, X velocity fraction = rnd AND $7F + $80, Y velocity fraction = rnd AND $FF + $00, Y velocity = rnd AND $03 + $FE. The script spawns it 50 times. It cannot be destroyed.","t":"byte","b":[180,0,135,0,254,0,0,0]},{"a":15055,"t":"byte","b":[0,0,0,0,0,1,0,0]},{"a":15063,"t":"byte","b":[12,0,113,0,0,255,0,4]},{"a":15071,"t":"byte","b":[127,75,2,127,128,5,255,0]},{"a":15079,"t":"byte","b":[7,3,254,6]},{"a":15083,"l":"tbl_bonus_alien_08","c":"Bonus-stage alien type 8 ($3AEB-$3B02, 24 bytes): the round craft with a flashing beacon (list $3C3B), a frame every 4; enters at the right edge (X 180), Y 70; velocity X +0.1 Y +0.08; mode 3: accelerated along the path at $4121, 20 frames a step; bounces at the Y limits (byte 13 = 1); no fire; colour byte $86 (colour 6; bit 7: police siren while alive); kind 0 (ordinary); worth 100 points (byte 22 x 10, $A891); no random fields. The script spawns it 9 times.","t":"byte","b":[180,0,70,0,0,26,0,20]},{"a":15091,"t":"byte","b":[3,0,33,65,20,1,0,0]},{"a":15099,"t":"byte","b":[134,2,4,59,60,0,10,0]},{"a":15107,"l":"tbl_bonus_alien_09","c":"Bonus-stage alien type 9 and 10 ($3B03-$3B1A, 24 bytes): the round craft with a flashing beacon (list $3C3B), a frame every 4; enters at the right edge (X 180), Y 199; velocity X +0.1 Y -0.08; mode 3: accelerated along the path at $4121, 20 frames a step; bounces at the Y limits (byte 13 = 1); no fire; colour byte $86 (colour 6; bit 7: police siren while alive); kind 0 (ordinary); worth 100 points (byte 22 x 10, $A891); no random fields. The script spawns it 3 times.","t":"byte","b":[180,0,199,0,0,26,255,236]},{"a":15115,"t":"byte","b":[3,0,33,65,20,1,0,0]},{"a":15123,"t":"byte","b":[134,2,4,59,60,0,10,0]},{"a":15131,"l":"tbl_bonus_alien_11","c":"Bonus-stage alien type 11 ($3B1B-$3B32, 24 bytes): the round craft with a flashing beacon (list $3C3B), a frame every 4; enters at the left edge (X 0), Y 199; velocity X -0.1 Y -0.08; mode 3: accelerated along the path at $4121, 20 frames a step; bounces at the Y limits (byte 13 = 1); no fire; colour byte $86 (colour 6; bit 7: police siren while alive); kind 0 (ordinary); worth 80 points (byte 22 x 10, $A891); no random fields. The script spawns it 6 times.","t":"byte","b":[0,0,199,0,255,230,255,236]},{"a":15139,"t":"byte","b":[3,0,33,65,20,1,0,0]},{"a":15147,"t":"byte","b":[134,2,4,59,60,0,8,0]},{"a":15155,"l":"tbl_bonus_alien_12","c":"Bonus-stage alien type 12 ($3B33-$3B56, 36 bytes): the cross-marked ball (frame $70), still; enters at a random X, a random Y; velocity X +0 Y +0; mode 2: steered by the path at $4157, 40 frames a step; bounces at the Y limits (byte 13 = 1); eight-way bursts every 50 frames; colour byte $0E (colour 14); kind 0 (ordinary); worth 60 points (byte 22 x 10, $A891); 4 random fields: Y = rnd AND $7F + $4B, X = rnd AND $7F + $1E, X velocity = rnd AND $03 + $FF, Y velocity = rnd AND $03 + $FF. The script spawns it 22 times.","t":"byte","b":[180,0,70,0,0,0,0,0]},{"a":15163,"t":"byte","b":[2,0,87,65,40,1,3,50]},{"a":15171,"t":"byte","b":[14,0,112,0,1,0,6,4]},{"a":15179,"t":"byte","b":[127,75,2,127,30,0,3,255]},{"a":15187,"t":"byte","b":[4,3,255,6]},{"a":15191,"l":"tbl_bonus_alien_13","c":"Bonus-stage alien type 13 ($3B57-$3B6E, 24 bytes): the cross-marked ball (frame $70), still; enters at the right edge (X 180), Y 70; velocity X -1 Y +0; mode 2: steered by the path at $4115, 40 frames a step; bounces at the Y limits (byte 13 = 1); eight-way bursts every 50 frames; colour byte $05 (colour 5); kind 0 (ordinary); worth 120 points (byte 22 x 10, $A891); no random fields. The script spawns it 3 times.","t":"byte","b":[180,0,70,0,255,0,0,0]},{"a":15199,"t":"byte","b":[2,0,21,65,40,1,3,50]},{"a":15207,"t":"byte","b":[5,0,112,0,1,0,12,0]},{"a":15215,"l":"tbl_bonus_alien_14","c":"Bonus-stage alien type 14 ($3B6F-$3B86, 24 bytes): the cross-marked ball (frame $70), still; enters at the right edge (X 180), Y 199; velocity X -1 Y +0; mode 2: steered by the path at $4115, 40 frames a step; bounces at the Y limits (byte 13 = 1); eight-way bursts every 50 frames; colour byte $05 (colour 5); kind 0 (ordinary); worth 120 points (byte 22 x 10, $A891); no random fields. The script spawns it 3 times.","t":"byte","b":[180,0,199,0,255,0,0,0]},{"a":15223,"t":"byte","b":[2,0,21,65,40,1,3,50]},{"a":15231,"t":"byte","b":[5,0,112,0,1,0,12,0]},{"a":15239,"l":"tbl_bonus_alien_15","c":"Bonus-stage alien type 15 ($3B87-$3BA4, 30 bytes): the cross-marked ball (frame $70), still; enters at a random X, a random Y; velocity X +0 Y +0; mode 2: steered by the path at $4115, 40 frames a step; bounces at the Y limits (byte 13 = 1); shots in a turning direction every 14 frames; colour byte $0E (colour 14); kind 0 (ordinary); worth 80 points (byte 22 x 10, $A891); 2 random fields: Y = rnd AND $7F + $4B, X = rnd AND $7F + $1E. The script spawns it 21 times.","t":"byte","b":[86,0,135,0,0,0,0,0]},{"a":15247,"t":"byte","b":[2,0,21,65,40,1,2,14]},{"a":15255,"t":"byte","b":[14,0,112,0,1,0,8,2]},{"a":15263,"t":"byte","b":[127,75,2,127,30,0]},{"a":15269,"l":"tbl_bonus_alien_16","c":"Bonus-stage alien type 16 ($3BA5-$3BBC, 24 bytes): the arrowhead (list $3C41), a frame every 5; enters at the right edge (X 180), Y 90; velocity X -0.06 Y +0.12; mode 3: accelerated along the path at $4162, 16 frames a step; bounces at the Y limits (byte 13 = 1); aimed shots every 40 frames; colour byte $05 (colour 5); kind 0 (ordinary); worth 100 points (byte 22 x 10, $A891); no random fields. The script spawns it 28 times.","t":"byte","b":[180,0,90,0,255,240,0,32]},{"a":15277,"t":"byte","b":[3,0,98,65,16,1,1,40]},{"a":15285,"t":"byte","b":[5,2,5,65,60,0,10,0]},{"a":15293,"l":"tbl_bonus_alien_17","c":"Bonus-stage alien type 17 ($3BBD-$3BD4, 24 bytes): the arrowhead (list $3C41), a frame every 5; enters at the left edge (X 0), Y 168; velocity X +0.06 Y +0.12; mode 3: accelerated along the path at $4162, 16 frames a step; bounces at the Y limits (byte 13 = 1); aimed shots every 40 frames; colour byte $05 (colour 5); kind 0 (ordinary); worth 100 points (byte 22 x 10, $A891); no random fields. The script spawns it 28 times.","t":"byte","b":[0,0,168,0,0,16,0,32]},{"a":15301,"t":"byte","b":[3,0,98,65,16,1,1,40]},{"a":15309,"t":"byte","b":[5,2,5,65,60,0,10,0]},{"a":15317,"l":"tbl_bonus_alien_18","c":"Bonus-stage alien type 18 ($3BD5-$3BEC, 24 bytes): the arrowhead (list $3C41), a frame every 5; enters at the left edge (X 0), Y 170; velocity X -1 Y +0.12; mode 3: accelerated along the path at $4162, 16 frames a step; bounces at the Y limits (byte 13 = 1); no fire; colour byte $00 (colour 0); kind 0 (ordinary); worth 150 points (byte 22 x 10, $A891); no random fields. The script spawns it 2 times.","t":"byte","b":[0,0,170,0,255,0,0,32]},{"a":15325,"t":"byte","b":[3,0,98,65,16,1,0,40]},{"a":15333,"t":"byte","b":[0,2,5,65,60,0,15,0]},{"a":15341,"l":"tbl_bonus_alien_19","c":"Bonus-stage alien type 19 ($3BED-$3C04, 24 bytes): the spinning Wizball (list $3C4D), a frame every 4; enters at the right edge (X 170), Y 200; velocity X -0.5 Y +0; mode 1: rises, Y velocity - $20/256 a frame; bounces at the Y limits (byte 13 = 1); no fire; colour byte $05 (colour 5); kind 6: extra life when shot ($A7E2); worth no points; no random fields. The script spawns it 2 times. Apparently the Wizball lookalike of the manual, whose shooting gives an extra life.","t":"byte","b":[170,0,200,0,255,128,0,0]},{"a":15349,"t":"byte","b":[1,32,0,0,0,1,0,0]},{"a":15357,"t":"byte","b":[5,2,4,77,60,6,0,0]},{"a":15365,"l":"tbl_anim_ball_squash","c":"Sprite-frame list of the squashing ball (frames $79-$7D): 21 frame numbers, then $FF $0A. Bonus types 0, 1 and 4 use it in animation mode 1 ($A60C): the index (slot byte $12, 10 in the templates) eases one step towards 10 every 3 frames (5 with colour flag bit 7), and a bounce sets it to 20 ($A729), so after a bounce the ball plays entries 20 down to 10. The $FF $0A pair matters only in mode 2+ ($A5F1: $FF n moves the pointer back n bytes). Its twin at $40D0 serves the landscape templates.","t":"byte","b":[121,123,124,125,122,125,124,123]},{"a":15373,"t":"byte","b":[124,125,124,123,124,125,124,123]},{"a":15381,"t":"byte","b":[121,123,124,125,122,255,10]},{"a":15388,"l":"unused_anim_wizball_spin_fwd","c":"Sprite-frame list $10 up to $1F, then $FF $10: the spinning Wizball played forwards, the mirror of the list at $3C4D, which plays it backwards. No template or code points at it: the word $3C1C appears nowhere in the image.","t":"byte","b":[16,17,18,19,20,21,22,23]},{"a":15396,"t":"byte","b":[24,25,26,27,28,29,30,31]},{"a":15404,"t":"byte","b":[255,16]},{"a":15406,"l":"tbl_anim_dart","c":"Sprite-frame list of the dart: $76 $77 $74 $75 $72 $73 $72 $75 $74 $77 $76, then $FF $0B (back to the start); bonus types 5 and 6, a frame every 8 frames ($A5CD). Twin at $40ED for the landscape templates.","t":"byte","b":[118,119,116,117,114,115,114,117]},{"a":15414,"t":"byte","b":[116,119,118,255,11]},{"a":15419,"l":"tbl_anim_police_ship","c":"Sprite-frame list of the round craft with a flashing beacon: $46 $47 $48 $49, then $FF $04, a frame every 4 frames. Used by landscape type 17 ($40B5), the police ship that $A181 sends when the no-kill timer runs out or in a filth raid, and by bonus types 8, 9 (and 10) and 11, which carry the same siren flag ($86).","t":"byte","b":[70,71,72,73,255,4]},{"a":15425,"l":"tbl_anim_arrowhead","c":"Sprite-frame list of the arrowhead ship: $3C $3D $3E $3D, then $FF $04; a frame every 5 frames for bonus types 16, 17 and 18. Twin at $40FA for the landscape templates.","t":"byte","b":[60,61,62,61,255,4]},{"a":15431,"l":"unused_anim_4c_4f","c":"Sprite-frame list $4C $4D $4E $4F, then $FF $04, in the format of its neighbours. No template or code points at it: the word $3C47 appears nowhere in the image.","t":"byte","b":[76,77,78,79,255,4]},{"a":15437,"l":"tbl_anim_wizball_spin","c":"Sprite-frame list $1F down to $10, then $FF $10: the sixteen frames of the spinning Wizball (sprites $C400-$C7FF) played backwards, a frame every 4 frames, for bonus type 19, the lookalike (kind 6: shooting it gives an extra life, $A7E2).","t":"byte","b":[31,30,29,28,27,26,25,24]},{"a":15445,"t":"byte","b":[23,22,21,20,19,18,17,16]},{"a":15453,"t":"byte","b":[255,16]},{"a":15455,"l":"sfx_00_shot","c":"Sound-effect records, 26 of 24 bytes from $3C5F; $4553 copies 25 bytes of the record for effect Y (address from $BACA) into the slot of its voice ($0400, $0420 or $0440 by byte 0, through $BA7A) and $B960 plays the slot each frame: 0 voice, 1 priority (a new effect replaces one whose first gate count is still running only if its value is not higher: 0 always wins), 2-3 gate-on frames, 4 waveform, 5 attack/decay, 6 start flag, 7-8 frequency, 9-10 its step, 11-12 frames up and down, 13-14 pulse width, 15-16 its step, 17-18 frames up and down, 19-22 sweep state, 23 sustain/release, 24 unused (the next record's first byte). Sound effect 0 (24-byte record, $3C5F-$3C76): voice 1, priority 14, gate on for 26 frames, sawtooth, attack/decay $00, sustain/release $F0, frequency $9600 swept by $05FF, up for 1 frame then down for 256 frames in turn. Effect 0 is the shot: started by fire_wiz_shot ($84FC) and fire_cat_shot ($88AD). If effect 0 cannot take voice 1, $45A6 starts effect 16 (the same sound on voice 3) instead, and with no music ($B8F1 = 0) $456E alternates effects 0 and 16. Its sustain level is the firing volume (see $3C76).","t":"byte","b":[1,14,26,0,32,0,0,0]},{"a":15463,"t":"byte","b":[150,255,5,1,0,0,0,0]},{"a":15471,"t":"byte","b":[0,1,1,0,0,0,0]},{"a":15478,"l":"sfx_00_sustain_release","c":"Sustain/release byte (byte 23) of sound effect 0, the shot: $BAA6 writes the firing volume $BA81 (0-15) times 16 here, so the shot's sustain level follows it. $BA82 raises $BA81 when $B254 is 5 and lowers it when $B254 is 6, the codes scan_keys_play ($7429) gives the up-arrow and = keys (row 6, columns 6 and 5 of the keyboard matrix), one step a press. $F0 in the loaded image; $A0 in both play snapshots, $BA81 starting at 10.","t":"byte","b":[240],"x":[47782]},{"a":15479,"l":"sfx_01_droplet_released","c":"Sound effect 1 (24-byte record, $3C77-$3C8E): voice 3, priority 12, gate on for 30 frames then 70 more, sawtooth, attack/decay $0C, sustain/release $00, frequency $0000 swept by $4100, up for 1 frame then down for 10 frames in turn. Effect 1 is played by $A8D9 (release_droplet) when a colour sphere is shot and turns into a falling droplet.","t":"byte","b":[3,12,30,70,32,12,0,0]},{"a":15487,"t":"byte","b":[0,0,65,1,10,0,15,0]},{"a":15495,"t":"byte","b":[0,0,1,0,0,0,0,0]},{"a":15503,"l":"sfx_02_pearl","c":"Sound effect 2 (24-byte record, $3C8F-$3CA6): voice 1, priority 13, gate on for 10 frames, sawtooth, attack/decay $0C, sustain/release $00, frequency $0000 swept by $3800, up for 1 frame then down for 10 frames in turn. Effect 2 is played by $A93E (leave_pearl) when a killed alien leaves a pearl: the ninth kill since the last pearl ($A9A9/$A9AA), or an alien with colour flag bit 5.","t":"byte","b":[1,13,10,0,32,12,0,0]},{"a":15511,"t":"byte","b":[0,0,56,1,10,120,1,0]},{"a":15519,"t":"byte","b":[0,100,10,0,0,0,0,0]},{"a":15527,"l":"sfx_03_enter_tube","c":"Sound effect 3 (24-byte record, $3CA7-$3CBE): voice 1, priority 0, gate on for 150 frames then 100 more, pulse, attack/decay $0D, sustain/release $00, frequency $0500 swept by $0001, up for 1 frame then down for 100 frames in turn; pulse width $0200 swept by $0050, up for 100 frames then down for 10 frames. Effect 3 is played by $8213 (enter_tube, $81C9) as the Wizball starts sinking into a tube to the next level up or down.","t":"byte","b":[1,0,150,100,64,13,0,0]},{"a":15535,"t":"byte","b":[5,1,0,1,100,0,2,80]},{"a":15543,"t":"byte","b":[0,100,10,0,0,0,0,0]},{"a":15551,"l":"sfx_04_cat_hit","c":"Sound effect 4 (24-byte record, $3CBF-$3CD6): voice 2, priority 11, gate on for 20 frames then 20 more, sawtooth, attack/decay $0D, sustain/release $00, frequency $6400 swept by $FF00, up for 20 frames then down for 20 frames in turn. Effect 4 is played by $89AC (update_cat_shield) when the unshielded cat is hit and $B26C, its lost lives, goes up, and by $88B0 instead of the shot when the cat fires on its last life ($B26C = 8).","t":"byte","b":[2,11,20,20,32,13,0,0]},{"a":15559,"t":"byte","b":[100,0,255,20,20,0,0,20]},{"a":15567,"t":"byte","b":[0,20,20,0,0,0,0,0]},{"a":15575,"l":"sfx_05_alien_destroyed","c":"Sound effect 5 (24-byte record, $3CD7-$3CEE): voice 1, priority 11, gate on for 30 frames, triangle, attack/decay $0D, sustain/release $00, frequency $5A00 swept by $0F00, up for 4 frames then down for 10 frames in turn. Effect 5 is played by $A88E (kill_alien) when an alien is destroyed without leaving a pearl. Its voice byte is rewritten: 2 during the bonus stage ($6479), 1 after it ($660F).","t":"byte","b":[1,11,30,0,16,13,0,0],"x":[25721,26127]},{"a":15583,"t":"byte","b":[90,0,15,4,10,0,0,10]},{"a":15591,"t":"byte","b":[1,100,10,0,0,0,0,0]},{"a":15599,"l":"sfx_06_alien_fires","c":"Sound effect 6 (24-byte record, $3CEF-$3D06): voice 1, priority 13, gate on for 5 frames then 20 more, pulse, attack/decay $09, sustain/release $00, frequency $050A swept by $2000, up for 100 frames then down for 10 frames in turn; pulse width $0100 swept by $0000, up for 100 frames then down for 10 frames. Effect 6 is played by $A5AE (play_alien_shot_sound) when an alien fires ($A541), unless a bonus-stage message is up ($6733).","t":"byte","b":[1,13,5,20,64,9,0,10]},{"a":15607,"t":"byte","b":[5,0,32,100,10,0,1,0]},{"a":15615,"t":"byte","b":[0,100,10,0,0,0,0,0]},{"a":15623,"l":"sfx_07_lvl_complete","c":"Sound effect 7 (24-byte record, $3D07-$3D1E): voice 3, priority 4, gate on for 255 frames then 255 more, triangle with ring modulation, attack/decay $0F, sustain/release $00, frequency $0000 swept by $0040, up for 256 frames then down for 1 frame in turn. Effect 7 is played by $AE89 in complete_level ($AE11) as the 'wot a wizace!' and 'level N completed' sprites appear.","t":"byte","b":[3,4,255,255,20,15,0,0]},{"a":15631,"t":"byte","b":[0,64,0,0,1,0,0,0]},{"a":15639,"t":"byte","b":[0,1,1,0,0,0,0,0]},{"a":15647,"l":"sfx_08_take_icon","c":"Sound effect 8 (24-byte record, $3D1F-$3D36): voice 1, priority 12, gate on for 20 frames then 20 more, triangle, attack/decay $0B, sustain/release $00, frequency $0000 swept by $2D00, up for 10 frames then down for 10 frames in turn. Effect 8 is played by $72FA (take_lit_icon) when the lit icon's feature is taken, except the smart bomb (icon 6), which plays effect 13.","t":"byte","b":[1,12,20,20,16,11,0,0]},{"a":15655,"t":"byte","b":[0,0,45,10,10,20,0,30]},{"a":15663,"t":"byte","b":[0,10,10,0,0,0,0,0]},{"a":15671,"l":"sfx_09_icon_lit","c":"Sound effect 9 (24-byte record, $3D37-$3D4E): voice 2, priority 11, gate on for 30 frames, pulse, attack/decay $0D, sustain/release $00, frequency $0386 swept by $0000, up for 4 frames then down for 10 frames in turn; pulse width $0000 swept by $001E, up for 15 frames then down for 15 frames. Effect 9 is played by $72CF (update_icons) when a waiting pearl lights the next icon ($B258, 1-7, wrapping).","t":"byte","b":[2,11,30,0,64,13,0,134]},{"a":15679,"t":"byte","b":[3,0,0,4,10,0,0,30]},{"a":15687,"t":"byte","b":[0,15,15,0,0,0,0,0]},{"a":15695,"l":"sfx_record_unused_3d4f","c":"A 24-byte sound-effect record where effect 10's would sit in sequence ($3C5F + 24 x 10), but the table at $BACA points effect 10 at $3D67, effect 11's record, so this one is never played: voice 2, priority 10, gate on for 200 frames then 200 more, noise, attack/decay $0D, sustain/release $00, frequency $0000 swept by $381E, up for 256 frames (a count of 0) then down for 1 in turn; pulse width $0000 swept by $001E, 15 frames each way (noise does not use the pulse width).","t":"byte","b":[2,10,200,200,128,13,0,0]},{"a":15703,"t":"byte","b":[0,30,56,0,1,0,0,30]},{"a":15711,"t":"byte","b":[0,15,15,0,0,0,0,0]},{"a":15719,"l":"sfx_11_siren_fast","c":"Sound effect 11 (24-byte record, $3D67-$3D7E): voice 2, priority 10, gate on for 255 frames then 255 more, triangle, attack/decay $0D, sustain/release $00, frequency $1E00 swept by $0400, up for 7 frames then down for 7 frames in turn. Effect 11 is one tone of the police siren: sound_police_siren ($A974) alternates effects 11 and 12 every 60 frames while a police ship (colour flag bit 7) is on screen. $BACA's entry 10 also points here, so effect 10 sounds the same.","t":"byte","b":[2,10,255,255,16,13,0,0]},{"a":15727,"t":"byte","b":[30,0,4,7,7,0,1,60]},{"a":15735,"t":"byte","b":[0,15,15,0,0,0,0,0]},{"a":15743,"l":"sfx_12_siren_slow","c":"Sound effect 12 (24-byte record, $3D7F-$3D96): voice 2, priority 10, gate on for 255 frames then 255 more, triangle, attack/decay $0D, sustain/release $00, frequency $1E00 swept by $0080, up for 56 frames then down for 56 frames in turn. Effect 12 is the other tone of the police siren, alternating with effect 11 ($A974).","t":"byte","b":[2,10,255,255,16,13,0,0]},{"a":15751,"t":"byte","b":[30,128,0,56,56,0,1,60]},{"a":15759,"t":"byte","b":[0,15,15,0,0,0,0,0]},{"a":15767,"l":"sfx_13_smart_bomb_or_bounce","c":"Sound effect 13 (24-byte record, $3D97-$3DAE): voice 2, priority 10, gate on for 150 frames, noise, attack/decay $0D, sustain/release $00, frequency $0200 swept by $0002, up for 1 frame then down for 256 frames in turn. Effect 13 is played by $72FA for the smart bomb (icon 6) and by $A820 (run_hit_alien) when a shot glances off the indestructible bonus type 7.","t":"byte","b":[2,10,150,0,128,13,0,0]},{"a":15775,"t":"byte","b":[2,2,0,1,0,0,1,60]},{"a":15783,"t":"byte","b":[0,15,15,0,0,0,0,0]},{"a":15791,"l":"sfx_14_police_ship_destroyed","c":"Sound effect 14 (24-byte record, $3DAF-$3DC6): voice 2, priority 10, gate on for 100 frames, triangle, attack/decay $0F, sustain/release $00, frequency $2800 swept by $0200, up for 10 frames then down for 15 frames in turn. Effect 14 is played by $A86C (kill_alien) when a police ship is destroyed; the siren stops.","t":"byte","b":[2,10,100,0,16,15,0,0]},{"a":15799,"t":"byte","b":[40,0,2,10,15,0,1,60]},{"a":15807,"t":"byte","b":[0,15,15,0,0,0,0,0]},{"a":15815,"l":"sfx_15_cat","c":"Sound effect 15 (24-byte record, $3DC7-$3DDE): voice 2, priority 9, gate on for 60 frames then 1 more, sawtooth, attack/decay $0D, sustain/release $00, frequency $6400 swept by $FF00, up for 8 frames then down for 3 frames in turn. Effect 15 is played by $866A (update_cat) when the cat has lost its ninth life ($B26C = 9) and the catelite goes ($B234 = 0), and at random by drive_mutant_cat ($8632) while the cat is a mutant ($861A).","t":"byte","b":[2,9,60,1,32,13,0,0]},{"a":15823,"t":"byte","b":[100,0,255,8,3,0,0,20]},{"a":15831,"t":"byte","b":[0,20,20,0,0,0,0,0]},{"a":15839,"l":"sfx_16_shot_voice3","c":"Sound effect 16 (24-byte record, $3DDF-$3DF6): voice 3, priority 14, gate on for 26 frames, sawtooth, attack/decay $00, sustain/release $F0, frequency $9600 swept by $05FF, up for 1 frame then down for 256 frames in turn. Effect 16 is the shot on voice 3, identical to effect 0 but for the voice: $45A6 falls back to it when effect 0 cannot take voice 1. Its sustain level is the firing volume (see $3DF6).","t":"byte","b":[3,14,26,0,32,0,0,0]},{"a":15847,"t":"byte","b":[150,255,5,1,0,0,0,0]},{"a":15855,"t":"byte","b":[0,1,1,0,0,0,0]},{"a":15862,"l":"sfx_16_sustain_release","c":"Sustain/release byte (byte 23) of sound effect 16, the shot on voice 3: $BAA9 writes the same firing volume x 16 here as $BAA6 does for effect 0.","t":"byte","b":[240],"x":[47785]},{"a":15863,"l":"sfx_17_extra_life","c":"Sound effect 17 (24-byte record, $3DF7-$3E0E): voice 2, priority 0, gate on for 100 frames then 100 more, pulse, attack/decay $0F, sustain/release $00, frequency $9600 swept by $2100, up for 5 frames then down for 10 frames in turn; pulse width $0200 swept by $0050, up for 100 frames then down for 10 frames. Effect 17 is played with every extra life: add_score ($71CA) at each 100,000, test_cat_point ($891D) when the cat collects a white droplet, hit_lookalike ($A7E4).","t":"byte","b":[2,0,100,100,64,15,0,0]},{"a":15871,"t":"byte","b":[150,0,33,5,10,0,2,80]},{"a":15879,"t":"byte","b":[0,100,10,0,0,0,0,0]},{"a":15887,"l":"sfx_18_shield_ending","c":"Sound effect 18 (24-byte record, $3E0F-$3E26): voice 3, priority 10, gate on for 70 frames, sawtooth, attack/decay $0C, sustain/release $00, frequency $0000 swept by $2D17, up for 2 frames then down for 10 frames in turn. Effect 18 is played once by update_shield ($7ECA) when the Wizball's shield time $7F06 falls below 8 seconds.","t":"byte","b":[3,10,70,0,32,12,0,0]},{"a":15895,"t":"byte","b":[0,23,45,2,10,0,2,80]},{"a":15903,"t":"byte","b":[0,100,10,0,0,0,0,0]},{"a":15911,"l":"sfx_19_cat_shield_ending","c":"Sound effect 19 (24-byte record, $3E27-$3E3E): voice 3, priority 10, gate on for 70 frames, sawtooth, attack/decay $0C, sustain/release $00, frequency $0000 swept by $5A2E, up for 2 frames then down for 10 frames in turn. Effect 19 is played once by update_cat_shield ($8980) when the cat's shield time $89B6 falls below 8 seconds.","t":"byte","b":[3,10,70,0,32,12,0,0]},{"a":15919,"t":"byte","b":[0,46,90,2,10,0,2,80]},{"a":15927,"t":"byte","b":[0,100,10,0,0,0,0,0]},{"a":15935,"l":"sfx_20_wave_cleared","c":"Sound effect 20 (24-byte record, $3E3F-$3E56): voice 2, priority 10, gate on for 70 frames, noise, attack/decay $0C, sustain/release $00, frequency $0000 swept by $012E, up for 5 frames then down for 4 frames in turn. Effect 20 is played by $9F4C (show_alien_count) when the landscape's last listed alien is killed and a new wave is listed ($9F51 then adds 100 x 10 points), and by $A82A for an object in state 7.","t":"byte","b":[2,10,70,0,128,12,0,0],"x":[16084]},{"a":15943,"t":"byte","b":[0,46,1,5,4,0,2,80]},{"a":15951,"t":"byte","b":[0,100,10,0,0,0,0,0]},{"a":15959,"l":"sfx_21_death_1","c":"Sound effect 21 (24-byte record, $3E57-$3E6E): voice 2, priority 0, gate on for 255 frames then 255 more, noise, attack/decay $0C, sustain/release $00, frequency $0000 swept by $381E, up for 256 frames then down for 1 frame in turn. Effect 21 is the first of three effects start_death_sequence ($7DB8) starts together when the Wizball dies, one per voice, after stopping the music: 21 on voice 2.","t":"byte","b":[2,0,255,255,128,12,0,0]},{"a":15967,"t":"byte","b":[0,30,56,0,1,0,0,30]},{"a":15975,"t":"byte","b":[0,15,15,0,0,0,0,0]},{"a":15983,"l":"sfx_22_death_2","c":"Sound effect 22 (24-byte record, $3E6F-$3E86): voice 1, priority 0, gate on for 255 frames then 255 more, triangle with ring modulation, attack/decay $0C, sustain/release $00, frequency $0000 swept by $0C32, up for 7 frames then down for 5 frames in turn. Effect 22 is the second of start_death_sequence's three effects, on voice 1.","t":"byte","b":[1,0,255,255,20,12,0,0]},{"a":15991,"t":"byte","b":[0,50,12,7,5,0,1,60]},{"a":15999,"t":"byte","b":[0,15,15,0,0,0,0,0]},{"a":16007,"l":"sfx_23_death_3","c":"Sound effect 23 (24-byte record, $3E87-$3E9E): voice 3, priority 0, gate on for 255 frames then 255 more, sawtooth with sync, attack/decay $0C, sustain/release $00, frequency $0000 swept by $0064, up for 1 frame then down for 100 frames in turn. Effect 23 is the third of start_death_sequence's three effects, on voice 3.","t":"byte","b":[3,0,255,255,34,12,0,0]},{"a":16015,"t":"byte","b":[0,100,0,1,100,0,0,20]},{"a":16023,"t":"byte","b":[0,20,20,0,0,0,0,0]},{"a":16031,"l":"sfx_24_hum","c":"Sound effect 24 (24-byte record, $3E9F-$3EB6): voice 2, priority 120, gate on for 255 frames then 255 more, triangle with ring modulation, attack/decay $00, sustain/release $20, frequency $0000 swept by $0000, up for 256 frames then down for 256 frames in turn. Effect 24 is the background hum: update_wizball ($7E06) and play_lab_sounds ($AAB5) start it again when voice 2's first gate count ($0422) has run out and every 256 frames; each start gets random pitch and sweep, see $3EA5.","t":"byte","b":[2,120,255,255,20,0]},{"a":16037,"l":"sfx_24_random_base","c":"Base address of STA $3EA5,X at $455E: before effect 24 starts, $4553 stores six numbers from the random routine $7533 at $3EA6-$3EAB (X = 6 down to 1), bytes 7-12 of the record (frequency, frequency step, sweep lengths). $3EA5 itself, byte 6 (the start flag), is not written.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[17758]},{"a":16045,"t":"byte","b":[1,0,0,0,0,0,0,0]},{"a":16053,"t":"byte","b":[0,32]},{"a":16055,"l":"sfx_25_lab_random","c":"Sound effect 25 (24-byte record, $3EB7-$3ECE): voice 1, priority 4, gate on for 47 frames, triangle with ring modulation, attack/decay $0B, sustain/release $00, frequency $9600 swept by $05FF, up for 1 frame then down for 256 frames in turn. Effect 25 is played by play_lab_sounds ($AAC3) on a random one frame in sixteen, in the lab and the level-complete scroll.","t":"byte","b":[1,4,47,0,20,11,0,0]},{"a":16063,"t":"byte","b":[150,255,5,1,0,0,0,0]},{"a":16071,"t":"byte","b":[0,1,1,0,0,0,0,0]},{"a":16079,"l":"tbl_land_alien_templates","c":"Landscape alien template table: 18 words ($3ECF-$3EF2), the template address of each object type 0-17 ($3EF3-$40D7; types 11-17 lie past $4000). Read at $A074 (tunes a template when a level's spawn list is built), $AA5C (spawns a type when the scroll position reaches its list entry, $A9DA) and $A1A0 (type 17, the police ship, sent when the seconds counter $A1B8, reset by kills, reaches the level's limit in $A1B9, and in a filth raid through $A135). $9F9B picks types 1-16 at random and types 0, 2, 8, 11 (kind 1, the colour spheres) from $9F97. Same record layout as tbl_bonus_alien_templates ($39DC). $A070 rewrites templates in place whenever a list is built: byte 15 from $A12A by level (10 once the game has been completed, $B12A), and for modes 0 and 1 at random byte 8 (fall or rise, with Y mirrored about 130) and byte 9. At spawn $AA85 puts the object at X 2 or X 170 by the scroll direction, reversing its velocity on the right, and a kind-1 object takes its colour from $B18B (the level).","t":"byte","b":[243],"x":[41076,41376,43612]},{"a":16080,"l":"tbl_land_alien_templates_hi","c":"High byte of the first entry of tbl_land_alien_templates, the address the code reads the high bytes through ($A079, $A1A5, $AA61, LDA $3ED0,Y); owns the rest of the table's first eleven entries, which point into this range.","t":"addr","b":[62,11],"oa":2878,"o":"$0B3E","x":[41081,41381,43617]},{"a":16082,"t":"addr","b":[63,38],"oa":9791,"o":"$263F"},{"a":16084,"t":"addr","b":[63,62],"oa":15935,"o":"sfx_20_wave_cleared"},{"a":16086,"t":"addr","b":[63,86],"oa":22079,"o":"$563F"},{"a":16088,"t":"addr","b":[63,110],"oa":28223,"o":"$6E3F"},{"a":16090,"t":"addr","b":[63,146],"oa":37439,"o":"$923F"},{"a":16092,"t":"addr","b":[63,170],"oa":43583,"o":"$AA3F"},{"a":16094,"t":"addr","b":[63,194],"oa":49727,"o":"$C23F"},{"a":16096,"t":"addr","b":[63,218],"oa":55871,"o":"$DA3F"},{"a":16098,"t":"addr","b":[63,242],"oa":62015,"o":"$F23F"},{"a":16100,"t":"byte","b":[63]},{"a":16101,"l":"tbl_land_alien_templates_11_17","c":"Entries 11-17 of tbl_land_alien_templates: $400A, $4025, $4049, $4061, $4079, $4091, $40B5, the templates past $4000 (typed as plain words here).","t":"word","b":[10,64,37,64,73,64,97,64],"d":[16394,16421,16457,16481]},{"a":16109,"t":"word","b":[121,64,145,64,181,64],"d":[16505,16529,16565]},{"a":16115,"l":"tbl_land_alien_00","c":"Landscape alien type 0 ($3EF3-$3F0A, 24 bytes): the squashing ball (list $40D0), eased from entry 10; Y 100; velocity X +0 Y +0; mode 0: falls, Y velocity + $20/256 a frame; bounces at the Y limits and off scenery (byte 13 = 1); no fire; colour byte $00 (colour 0); kind 1: releases a droplet when shot; worth 50 points (byte 22 x 10, $A891); no random fields. A colour sphere ($9F97); $A027 sets its fire mode by level: none below level 5, aimed shots from level 5, eight-way bursts at twice the interval from level 7.","t":"byte","b":[0,0,100,0,0,0,0,0]},{"a":16123,"t":"byte","b":[0,32,0,0,0,1,0,0]},{"a":16131,"t":"byte","b":[0,1,10,208,64,1,5,0]},{"a":16139,"l":"tbl_land_alien_01","c":"Landscape alien type 1 ($3F0B-$3F25, 27 bytes): the four-frame list $40E7 (frames $4C-$4F), a frame every 6; a random Y; velocity X +0 Y +0; mode 2: steered by the path at $0000, 256 frames a step; bounces at the Y limits and off scenery (byte 13 = 1); no fire; colour byte $23 (colour 3; bit 5: always a pearl); kind 0 (ordinary); worth 50 points (byte 22 x 10, $A891); 1 random field: Y = rnd AND $3F + $46. Apparently the review's molecule. Its velocity is 0 (-1/256 after $AA85 reverses it on the right) and its path pointer $0000 makes the zero page its path, so it all but stands still and scrolls with the landscape; colour flag bit 5 makes it always leave a pearl.","t":"byte","b":[0,0,90,0,0,0,0,0]},{"a":16147,"t":"byte","b":[2,48,0,0,0,1,0,0]},{"a":16155,"t":"byte","b":[35,2,6,231,64,0,5,1]},{"a":16163,"t":"byte","b":[63,70,2]},{"a":16166,"l":"tbl_land_alien_02","c":"Landscape alien type 2 ($3F26-$3F3D, 24 bytes): the squashing ball (list $40D0), eased from entry 10; Y 100; velocity X +0.25 Y +0; mode 0: falls, Y velocity + $20/256 a frame; bounces at the Y limits and off scenery (byte 13 = 1); no fire; colour byte $00 (colour 0); kind 1: releases a droplet when shot; worth 50 points (byte 22 x 10, $A891); no random fields. A colour sphere ($9F97); fire mode set by level at $A027 as for type 0.","t":"byte","b":[0,0,100,0,0,64,0,0]},{"a":16174,"t":"byte","b":[0,32,0,0,0,1,0,0]},{"a":16182,"t":"byte","b":[0,1,10,208,64,1,5,0]},{"a":16190,"l":"tbl_land_alien_03","c":"Landscape alien type 3 ($3F3E-$3F55, 24 bytes): the four-frame list $40E7 (frames $4C-$4F), a frame every 6; Y 90; velocity X +0.5 Y +0; mode 0: falls, Y velocity + $30/256 a frame; bounces at the Y limits and off scenery (byte 13 = 1); aimed shots every 100 frames; colour byte $07 (colour 7); kind 0 (ordinary); worth 50 points (byte 22 x 10, $A891); no random fields.","t":"byte","b":[0,0,90,0,0,128,0,0]},{"a":16198,"t":"byte","b":[0,48,0,0,0,1,1,100]},{"a":16206,"t":"byte","b":[7,2,6,231,64,0,5,0]},{"a":16214,"l":"tbl_land_alien_04","c":"Landscape alien type 4 ($3F56-$3F6D, 24 bytes): the four-frame list $40E7 (frames $4C-$4F), a frame every 6; Y 90; velocity X +0.5 Y +0; mode 0: falls, Y velocity + $30/256 a frame; bounces at the Y limits and off scenery (byte 13 = 1); eight-way bursts every 70 frames; colour byte $0D (colour 13); kind 0 (ordinary); worth 50 points (byte 22 x 10, $A891); no random fields.","t":"byte","b":[0,0,90,0,0,128,0,0]},{"a":16222,"t":"byte","b":[0,48,0,0,0,1,3,70]},{"a":16230,"t":"byte","b":[13,2,6,231,64,0,5,0]},{"a":16238,"l":"tbl_land_alien_05","c":"Landscape alien type 5 ($3F6E-$3F91, 36 bytes): the ring (frame $0C), still; a random Y; velocity X +0 Y +1; mode 2: steered by the path at $4172, 256 frames a step; bounces at the Y limits and off scenery (byte 13 = 1); no fire; colour byte $50 (cycling colours; bit 6: hires); kind 0 (ordinary); worth 50 points (byte 22 x 10, $A891); 4 random fields: Y = rnd AND $7F + $3C, X velocity fraction = rnd AND $7F + $00, Y velocity = rnd AND $03 + $00, Y velocity fraction = rnd AND $FF + $00.","t":"byte","b":[0,0,90,0,0,0,1,0]},{"a":16246,"t":"byte","b":[2,0,114,65,0,1,0,70]},{"a":16254,"t":"byte","b":[80,0,12,0,0,0,5,4]},{"a":16262,"t":"byte","b":[127,60,2,127,0,5,3,0]},{"a":16270,"t":"byte","b":[6,255,0,7]},{"a":16274,"l":"tbl_land_alien_06","c":"Landscape alien type 6 ($3F92-$3FA9, 24 bytes): the arrowhead (list $40FA), a frame every 6; Y 65; velocity X +1 Y -3; mode 2: steered by the path at $4174, 11 frames a step; bounces at the Y limits and off scenery (byte 13 = 1); eight-way bursts every 70 frames; colour byte $06 (colour 6); kind 0 (ordinary); worth 50 points (byte 22 x 10, $A891); no random fields.","t":"byte","b":[0,0,65,0,1,0,253,0]},{"a":16282,"t":"byte","b":[2,0,116,65,11,1,3,70]},{"a":16290,"t":"byte","b":[6,2,6,250,64,0,5,0]},{"a":16298,"l":"tbl_land_alien_07","c":"Landscape alien type 7 ($3FAA-$3FC1, 24 bytes): the arrowhead (list $40FA), a frame every 6; Y 196; velocity X +1 Y -3; mode 2: steered by the path at $4174, 10 frames a step; bounces at the Y limits and off scenery (byte 13 = 1); no fire; colour byte $0E (colour 14); kind 0 (ordinary); worth 50 points (byte 22 x 10, $A891); no random fields.","t":"byte","b":[0,0,196,0,1,0,253,0]},{"a":16306,"t":"byte","b":[2,0,116,65,10,1,0,70]},{"a":16314,"t":"byte","b":[14,2,6,250,64,0,5,0]},{"a":16322,"l":"tbl_land_alien_08","c":"Landscape alien type 8 ($3FC2-$3FD9, 24 bytes): the squashing ball (list $40D0), eased from entry 10; Y 150; velocity X +0.5 Y +0; mode 1: rises, Y velocity - $30/256 a frame; bounces at the Y limits and off scenery (byte 13 = 1); no fire; colour byte $00 (colour 0); kind 1: releases a droplet when shot; worth 50 points (byte 22 x 10, $A891); no random fields. A colour sphere ($9F97); fire mode set by level at $A027 as for type 0.","t":"byte","b":[0,0,150,0,0,128,0,0]},{"a":16330,"t":"byte","b":[1,48,0,0,0,1,0,80]},{"a":16338,"t":"byte","b":[0,1,10,208,64,1,5,0]},{"a":16346,"l":"tbl_land_alien_09","c":"Landscape alien type 9 ($3FDA-$3FF1, 24 bytes): the dart (list $40ED), a frame every 3; Y 90; velocity X +1 Y +0.5; mode 2: steered by the path at $4180, 20 frames a step; bounces at the Y limits and off scenery (byte 13 = 1); no fire; colour byte $0E (colour 14); kind 0 (ordinary); worth 50 points (byte 22 x 10, $A891); no random fields.","t":"byte","b":[1,0,90,0,1,0,0,128]},{"a":16354,"t":"byte","b":[2,0,128,65,20,1,0,0]},{"a":16362,"t":"byte","b":[14,2,3,237,64,0,5,0]},{"a":16370,"l":"tbl_land_alien_10","c":"Landscape alien type 10 ($3FF2-$3FFF here, continuing to $4009, 24 bytes): the dart (list $40ED), a frame every 3; Y 90; velocity X +1 Y +0.5; mode 2: steered by the path at $4180, 20 frames a step; bounces at the Y limits and off scenery (byte 13 = 1); shots in a turning direction every 10 frames; colour byte $07 (colour 7); kind 0 (ordinary); worth 50 points (byte 22 x 10, $A891); no random fields.","t":"byte","b":[1,0,90,0,1,0,0,128]},{"a":16378,"t":"byte","b":[2,0,128,65,20,1]},{"a":16384,"l":"tbl_alien_def_10_end","c":"Bytes 14-23 of alien record 10, which starts at $3FF2 (entry 10 of the 18-word table at $3ECF; the record layout is described at $400A): bytes 14-16 $02 $0A $07, animation mode 2 with 3 ticks per frame from the list at $40ED, bytes 21-22 $00 $05, and a random-field count of 0. Byte 15 ($4001) is rewritten at run time (it differs between the entry image and play-level1.vsf).","t":"byte","b":[2,10,7,2,3,237,64,0]},{"a":16392,"t":"byte","b":[5,0]},{"a":16394,"l":"tbl_alien_def_11","c":"Alien record 11 (entry 11 of the word table at $3ECF, 27 bytes). Layout of these records: $9DA1 copies bytes 0-22 into an object slot at $0200+X; byte 23 counts 3-byte random fields that follow (AND mask, value to add, slot offset; each sets that slot byte to (random AND mask) + value). Fields seen in the code: bytes 0-1 and 2-3 two coordinates as integer and fraction (byte 2 is kept within $46-$C7 at $A659); 4-5 and 6-7 the steps a movement script adds to them ($A41D-$A48E); 10-11 the movement script (0 = none) and 12 the ticks per script entry ($A3E5); 17 the animation mode, 18 the frame (mode 0), the first index (mode 1) or the ticks per frame (mode 2), 19-20 the frame list ($A5BD-$A655). Record 11: script $4185, frame list $40D0 in mode 1, and one random field, byte 2 = (random AND $3F) + $50. Bytes 2, 8, 9 and 15 of these records are rewritten at run time ($A070-$A0E9, $A1B2).","t":"byte","b":[0,0,100,0,0,192,1,128]},{"a":16402,"t":"byte","b":[2,0,133,65,10,0,0,80]},{"a":16410,"t":"byte","b":[0,1,10,208,64,1,5,1]},{"a":16418,"t":"byte","b":[63,80,2]},{"a":16421,"l":"tbl_alien_def_12","c":"Alien record 12 ($3ECF entry 12, 36 bytes; layout at $400A): no movement script, frame list $4100 in animation mode 1, and four random fields: byte 9 = (random AND $0F) + $20, byte 5 = random, byte 2 = (random AND $1F) + $5A, byte $10 = (random AND $08) + $02.","t":"byte","b":[0,0,100,0,0,128,0,0]},{"a":16429,"t":"byte","b":[0,32,0,0,0,1,0,0]},{"a":16437,"t":"byte","b":[2,1,10,0,65,0,5,4]},{"a":16445,"t":"byte","b":[15,32,9,255,0,5,31,90]},{"a":16453,"t":"byte","b":[2,8,2,16]},{"a":16457,"l":"tbl_alien_def_13","c":"Alien record 13 ($3ECF entry 13, 24 bytes; layout at $400A): starts at coordinate-2 $8C, steps $00.10 and $00.30, movement script $418E with 18 ticks per entry, fixed frame $3F (animation mode 0), no random fields.","t":"byte","b":[0,0,140,0,0,16,0,48]},{"a":16465,"t":"byte","b":[3,0,142,65,18,0,0,0]},{"a":16473,"t":"byte","b":[16,0,63,0,0,0,5,0]},{"a":16481,"l":"tbl_alien_def_14","c":"Alien record 14 ($3ECF entry 14, 24 bytes; layout at $400A): coordinate-2 $8C, second step $02.00, movement script $4172 with 10 ticks per entry, fixed frame $3F, no random fields.","t":"byte","b":[0,0,140,0,0,0,2,0]},{"a":16489,"t":"byte","b":[2,0,114,65,10,1,1,20]},{"a":16497,"t":"byte","b":[16,0,63,0,0,0,5,0]},{"a":16505,"l":"tbl_alien_def_15","c":"Alien record 15 ($3ECF entry 15, 24 bytes; layout at $400A): coordinate-2 $8C, first step $00.80, no movement script, fixed frame $62, no random fields.","t":"byte","b":[0,0,140,0,0,128,0,0]},{"a":16513,"t":"byte","b":[0,96,0,0,10,1,3,80]},{"a":16521,"t":"byte","b":[15,0,98,0,0,0,5,0]},{"a":16529,"l":"tbl_alien_def_16","c":"Alien record 16 ($3ECF entry 16, 36 bytes; layout at $400A): coordinate-2 $5A, second step $02.00, movement script $4172 with 0 ticks per entry (the counter gets there only after 256 ticks; the script has one entry anyway), fixed frame $61, and four random fields: byte 2 = (random AND $7F) + $3C, byte 5 = random AND $7F, byte 6 = random AND 3, byte 7 = random.","t":"byte","b":[0,0,90,0,0,0,2,0]},{"a":16537,"t":"byte","b":[2,0,114,65,0,1,1,80]},{"a":16545,"t":"byte","b":[80,0,97,0,0,0,5,4]},{"a":16553,"t":"byte","b":[127,60,2,127,0,5,3,0]},{"a":16561,"t":"byte","b":[6,255,0,7]},{"a":16565,"l":"tbl_alien_def_17","c":"Alien record 17 ($3ECF entry 17, the one the routine at $A198 sets up; 27 bytes; layout at $400A): coordinate-2 $82, steps $FF.A8 and $00.80, movement script $4132 with 5 ticks per entry, animation mode 2 with 4 ticks per frame from the list at $3C3B, and one random field: byte 6 = (random AND 1) + $FF, so the second step's integer part is $FF or $00 at random.","t":"byte","b":[0,0,130,0,255,168,0,128]},{"a":16573,"t":"byte","b":[3,0,50,65,5,0,1,0]},{"a":16581,"t":"byte","b":[134,2,4,59,60,0,5,1]},{"a":16589,"t":"byte","b":[1,255,6]},{"a":16592,"l":"tbl_alien_frames_40d0","c":"Frame list of alien records 0, 2, 8 and 11 (bytes 19-20 = $40D0, animation mode 1): 21 frame numbers $79 $7B $7C $7D $7A $7D $7C $7B $7C $7D $7C $7B $7C $7D $7C $7B $79 $7B $7C $7D $7A, then $FF $0A. In mode 1 ($A60C) the slot's byte $12 indexes the list (the records start it at $0A); in mode 2 ($A5C9) the pointer moves on one byte per period and $FF steps it back by the byte after it. The frame goes to slot byte $24 and on to $B525,Y ($A2EF), apparently a sprite pointer.","t":"byte","b":[121,123,124,125,122,125,124,123]},{"a":16600,"t":"byte","b":[124,125,124,123,124,125,124,123]},{"a":16608,"t":"byte","b":[121,123,124,125,122,255,10]},{"a":16615,"l":"tbl_alien_frames_40e7","c":"Frame list of alien records 1, 3 and 4 (animation mode 2, 6 ticks per frame): $4C $4D $4E $4F, then $FF $04, which steps back 4 bytes to the start.","t":"byte","b":[76,77,78,79,255,4]},{"a":16621,"l":"tbl_alien_frames_40ed","c":"Frame list of alien records 9 and 10 (animation mode 2, 3 ticks per frame): $76 $77 $74 $75 $72 $73 $72 $75 $74 $77 $76, then $FF $0B, back 11 bytes to the start.","t":"byte","b":[118,119,116,117,114,115,114,117]},{"a":16629,"t":"byte","b":[116,119,118,255,11]},{"a":16634,"l":"tbl_alien_frames_40fa","c":"Frame list of alien records 6 and 7 (animation mode 2, 6 ticks per frame): $3C $3D $3E $3D, then $FF $04, back to the start.","t":"byte","b":[60,61,62,61,255,4]},{"a":16640,"l":"tbl_alien_frames_4100","c":"Frame list of alien record 12 (animation mode 1, indexed by slot byte $12): 21 frame numbers, $67 $67 $67 $66 $66, eleven $65, $66 $66 $67 $67 $67; no $FF follows (the next bytes are the movement script at $4115).","t":"byte","b":[103,103,103,102,102,101,101,101]},{"a":16648,"t":"byte","b":[101,101,101,101,101,101,101,101]},{"a":16656,"t":"byte","b":[102,102,103,103,103]},{"a":16661,"l":"tbl_move_script_4115","c":"Movement script $4115 (bytes 10-11 of the $39DC records at $3A34, $3A52, $3B57, $3B6F and $3B87): $05, $FF. Script bytes are direction bits held for the record's byte-12 ticks each, and $FF restarts the script ($A3E5-$A40B). The bits ($A41D-$A48E): bit 0 adds step 1 (slot bytes 4-5) to coordinate 1 (bytes 0-1), bit 1 subtracts it, bit 2 adds step 2 (bytes 6-7) to coordinate 2 (bytes 2-3), bit 3 subtracts it. So $05 moves along both steps at once, for ever.","t":"byte","b":[5,255]},{"a":16663,"l":"tbl_move_script_4117","c":"Movement script $4117 (records $3A97 and $3AAF of the $39DC table): $01 $04 $01 $08 $00 $08 $00 $04 $00, $FF (bit meanings at $4115).","t":"byte","b":[1,4,1,8,0,8,0,4]},{"a":16671,"t":"byte","b":[0,255]},{"a":16673,"l":"tbl_move_script_4121","c":"Movement script $4121 (records $3AEB, $3B03 and $3B1B of the $39DC table): $02 $02 $05 $05 $09 $08 $08 $0A $06 $06 $02, five $00 (pauses), $FF (bit meanings at $4115).","t":"byte","b":[2,2,5,5,9,8,8,10]},{"a":16681,"t":"byte","b":[6,6,2,0,0,0,0,0]},{"a":16689,"t":"byte","b":[255]},{"a":16690,"l":"tbl_move_script_4132","c":"Movement script $4132 (alien record 17 at $40B5): 36 direction bytes, $02 $02 $01 $02 $05 $05 $09 $08 $08 $0A $06 $04 $02 $09 $09 $05 $04 $02 $02 $02 $02 $05 $05 $05 $09 $09 $0A $0A $0A $0A $06 $04 $04 $00 $00 $00, then $FF (bit meanings at $4115).","t":"byte","b":[2,2,1,2,5,5,9,8]},{"a":16698,"t":"byte","b":[8,10,6,4,2,9,9,5]},{"a":16706,"t":"byte","b":[4,2,2,2,2,5,5,5]},{"a":16714,"t":"byte","b":[9,9,10,10,10,10,6,4]},{"a":16722,"t":"byte","b":[4,0,0,0,255]},{"a":16727,"l":"tbl_move_script_4157","c":"Movement script $4157 (record $3B33 of the $39DC table): $00 $00, then eight $05, $FF - a pause, then a diagonal (bit meanings at $4115).","t":"byte","b":[0,0,5,5,5,5,5,5]},{"a":16735,"t":"byte","b":[5,5,255]},{"a":16738,"l":"tbl_move_script_4162","c":"Movement script $4162 (records $3BA5, $3BBD and $3BD5 of the $39DC table): $05, then $08 $08 $04 $04 three times and $08 $08, $FF: back and forth along coordinate 2 (bit meanings at $4115).","t":"byte","b":[5,8,8,4,4,8,8,4]},{"a":16746,"t":"byte","b":[4,8,8,4,4,8,8,255]},{"a":16754,"l":"tbl_move_script_4172","c":"Movement script $4172 (alien records 5, 14 and 16): $05, $FF - both steps at once, for ever (bit meanings at $4115).","t":"byte","b":[5,255]},{"a":16756,"l":"tbl_move_script_4174","c":"Movement script $4174 (alien records 6 and 7): $00 $00 $04 $04, then seven $01, $FF (bit meanings at $4115).","t":"byte","b":[0,0,4,4,1,1,1,1]},{"a":16764,"t":"byte","b":[1,1,1,255]},{"a":16768,"l":"tbl_move_script_4180","c":"Movement script $4180 (alien records 9 and 10): $01 $05 $01 $05, $FF (bit meanings at $4115).","t":"byte","b":[1,5,1,5,255]},{"a":16773,"l":"tbl_move_script_4185","c":"Movement script $4185 (alien record 11): $01 $05 $04 $06 $02 $0A $08 $09, $FF - the eight directions in turn, a full circle (bit meanings at $4115).","t":"byte","b":[1,5,4,6,2,10,8,9]},{"a":16781,"t":"byte","b":[255]},{"a":16782,"l":"tbl_move_script_418e","c":"Movement script $418E (alien record 13): $08 $04 $04 $09 $08 $06 $06 $08 $01 $00, $FF (bit meanings at $4115).","t":"byte","b":[8,4,4,9,8,6,6,8]},{"a":16790,"t":"byte","b":[1,0,255]},{"a":16793,"l":"tbl_wiztips_pages","c":"Wiztips page table: three 4-byte entries, one per press of SPACE (page number 0-2 in $944C, times 4): the body page's address, then the heading page's. $9488/$948C read the body pointer and print it with $8CFA (normal font), $9497/$949B the heading, printed with $8CF4 (large font). Entries: $41D4 and $41A5, $42AC and $41B4, $43B7 and $41C3. This first byte is also the base of the LDA $4199,Y at $9488.","t":"byte","b":[212],"x":[38024]},{"a":16794,"l":"tbl_wiztips_pages_1","c":"Wiztips page table, base of the LDA $419A,Y at $948C: the high byte of each entry's body-page pointer (here $41 of $41D4).","t":"byte","b":[65],"x":[38028]},{"a":16795,"l":"tbl_wiztips_pages_2","c":"Wiztips page table, base of the LDA $419B,Y at $9497: the low byte of each entry's heading-page pointer (here $A5 of $41A5).","t":"byte","b":[165],"x":[38039]},{"a":16796,"l":"tbl_wiztips_pages_3","c":"Wiztips page table from $419C (base of the LDA $419C,Y at $949B, the heading pointers' high bytes): the rest of the table, heading $41A5's high byte, then page 1 ($42AC, $41B4) and page 2 ($43B7, $41C3).","t":"addr","b":[65,172],"oa":44097,"o":"lab_cat_clock","x":[38043]},{"a":16798,"t":"addr","b":[66,180],"oa":46146,"o":"$B442"},{"a":16800,"t":"addr","b":[65,183],"oa":46913,"o":"$B741"},{"a":16802,"t":"addr","b":[67,195],"oa":49987,"o":"$C343"},{"a":16804,"t":"byte","b":[65]},{"a":16805,"l":"text_wiztips_1_heading","c":"Wiztips page 1 heading, printed in the large font ($8CF4): column 10, row 0, 'wiztips one', $FF, and the $FF that ends the page.","t":"byte","b":[10,0,87,73,90,84,73,80]},{"a":16813,"t":"byte","b":[83,32,79,78,69,255,255]},{"a":16820,"l":"text_wiztips_2_heading","c":"Wiztips page 2 heading (large font): column 10, row 0, 'wiztips two', end of page.","t":"byte","b":[10,0,87,73,90,84,73,80]},{"a":16828,"t":"byte","b":[83,32,84,87,79,255,255]},{"a":16835,"l":"text_wiztips_3_heading","c":"Wiztips page 3 heading (large font): column 8, row 0, 'wiztips three', end of page.","t":"byte","b":[8,0,87,73,90,84,73,80]},{"a":16843,"t":"byte","b":[83,32,84,72,82,69,69,255]},{"a":16851,"t":"byte","b":[255]},{"a":16852,"l":"text_wiztips_1_body","c":"Wiztips page 1 body, printed in the normal font ($8CFA); records as (column, row) text: (12,2) 'getting  started'; (5,6) 'shoot      ,     ,       etc..'; (7,9) 'pickup       to move'; (7,13) 'wiggle joystick to select..'; (4,17) 'thrust        anti-grav     beam'; (4,20) 'double        cat           blazers'; (4,23) 'wizspray      catspray      shield'; end of page at $42AB. The rows 6 and 9 lines do not show in reference/wiztips-one.png.","t":"byte","b":[12,2,71,69,84,84,73,78]},{"a":16860,"t":"byte","b":[71,32,32,83,84,65,82,84]},{"a":16868,"t":"byte","b":[69,68,255,5,6,83,72,79]},{"a":16876,"t":"byte","b":[79,84,32,32,32,32,32,32]},{"a":16884,"t":"byte","b":[44,32,32,32,32,32,44,32]},{"a":16892,"t":"byte","b":[32,32,32,32,32,32,69,84]},{"a":16900,"t":"byte","b":[67,46,46,255,7,9,80,73]},{"a":16908,"t":"byte","b":[67,75,85,80,32,32,32,32]},{"a":16916,"t":"byte","b":[32,32,32,84,79,32,77,79]},{"a":16924,"t":"byte","b":[86,69,255,7,13,87,73,71]},{"a":16932,"t":"byte","b":[71,76,69,32,74,79,89,83]},{"a":16940,"t":"byte","b":[84,73,67,75,32,84,79,32]},{"a":16948,"t":"byte","b":[83,69,76,69,67,84,46,46]},{"a":16956,"t":"byte","b":[255,4,17,84,72,82,85,83]},{"a":16964,"t":"byte","b":[84,32,32,32,32,32,32,32]},{"a":16972,"t":"byte","b":[32,65,78,84,73,45,71,82]},{"a":16980,"t":"byte","b":[65,86,32,32,32,32,32,66]},{"a":16988,"t":"byte","b":[69,65,77,255,4,20,68,79]},{"a":16996,"t":"byte","b":[85,66,76,69,32,32,32,32]},{"a":17004,"t":"byte","b":[32,32,32,32,67,65,84,32]},{"a":17012,"t":"byte","b":[32,32,32,32,32,32,32,32]},{"a":17020,"t":"byte","b":[32,32,66,76,65,90,69,82]},{"a":17028,"t":"byte","b":[83,255,4,23,87,73,90,83]},{"a":17036,"t":"byte","b":[80,82,65,89,32,32,32,32]},{"a":17044,"t":"byte","b":[32,32,67,65,84,83,80,82]},{"a":17052,"t":"byte","b":[65,89,32,32,32,32,32,32]},{"a":17060,"t":"byte","b":[83,72,73,69,76,68,255,255]},{"a":17068,"l":"text_wiztips_2_body","c":"Wiztips page 2 body (normal font): (14,2) 'cat  control'; (8,5) 'one plr - hold down fire'; (3,7) 'two plr team - other joystick port'; (0,10) 'shoot       , pickup       with cat for,'; (5,14) 'red chemical         green chemical'; (5,17) 'blue chemical        mutant cat'; (5,20) 'filth raid           bonus wizball'; (5,23) 'indestructacat       freaky bits'; end of page at $43B6.","t":"byte","b":[14,2,67,65,84,32,32,67]},{"a":17076,"t":"byte","b":[79,78,84,82,79,76,255,8]},{"a":17084,"t":"byte","b":[5,79,78,69,32,80,76,82]},{"a":17092,"t":"byte","b":[32,45,32,72,79,76,68,32]},{"a":17100,"t":"byte","b":[68,79,87,78,32,70,73,82]},{"a":17108,"t":"byte","b":[69,255,3,7,84,87,79,32]},{"a":17116,"t":"byte","b":[80,76,82,32,84,69,65,77]},{"a":17124,"t":"byte","b":[32,45,32,79,84,72,69,82]},{"a":17132,"t":"byte","b":[32,74,79,89,83,84,73,67]},{"a":17140,"t":"byte","b":[75,32,80,79,82,84,255,0]},{"a":17148,"t":"byte","b":[10,83,72,79,79,84,32,32]},{"a":17156,"t":"byte","b":[32,32,32,32,32,44,32,80]},{"a":17164,"t":"byte","b":[73,67,75,85,80,32,32,32]},{"a":17172,"t":"byte","b":[32,32,32,32,87,73,84,72]},{"a":17180,"t":"byte","b":[32,67,65,84,32,70,79,82]},{"a":17188,"t":"byte","b":[44,255,5,14,82,69,68,32]},{"a":17196,"t":"byte","b":[67,72,69,77,73,67,65,76]},{"a":17204,"t":"byte","b":[32,32,32,32,32,32,32,32]},{"a":17212,"t":"byte","b":[32,71,82,69,69,78,32,67]},{"a":17220,"t":"byte","b":[72,69,77,73,67,65,76,255]},{"a":17228,"t":"byte","b":[5,17,66,76,85,69,32,67]},{"a":17236,"t":"byte","b":[72,69,77,73,67,65,76,32]},{"a":17244,"t":"byte","b":[32,32,32,32,32,32,32,77]},{"a":17252,"t":"byte","b":[85,84,65,78,84,32,67,65]},{"a":17260,"t":"byte","b":[84,255,5,20,70,73,76,84]},{"a":17268,"t":"byte","b":[72,32,82,65,73,68,32,32]},{"a":17276,"t":"byte","b":[32,32,32,32,32,32,32,32]},{"a":17284,"t":"byte","b":[32,66,79,78,85,83,32,87]},{"a":17292,"t":"byte","b":[73,90,66,65,76,76,255,5]},{"a":17300,"t":"byte","b":[23,73,78,68,69,83,84,82]},{"a":17308,"t":"byte","b":[85,67,84,65,67,65,84,32]},{"a":17316,"t":"byte","b":[32,32,32,32,32,32,70,82]},{"a":17324,"t":"byte","b":[69,65,75,89,32,66,73,84]},{"a":17332,"t":"byte","b":[83,255,255]},{"a":17335,"l":"text_wiztips_3_body","c":"Wiztips page 3 body (normal font): (13,2) 'general  hints'; (5,6) 'to start, always select thrust'; (10,7) 'and anti-grav first'; (0,9) 'take note of the arrows near the tubes -'; (2,10) 'these tell you if they go up or down'; (4,12) 'hiding beneath the horizon gives'; (7,13) 'immunity to alien bullets'; (0,15) 'after a colour is complete, you can make'; (1,16) 'a weapon permenant. just select the one'; (3,17) 'you want, while wizzy stirs his pot'; (0,19) 'extra lives can be shot on the bonus bit'; (9,22) 'continue game feature....'; end of page at $4552.","t":"byte","b":[13,2,71,69,78,69,82,65]},{"a":17343,"t":"byte","b":[76,32,32,72,73,78,84,83]},{"a":17351,"t":"byte","b":[255,5,6,84,79,32,83,84]},{"a":17359,"t":"byte","b":[65,82,84,44,32,65,76,87]},{"a":17367,"t":"byte","b":[65,89,83,32,83,69,76,69]},{"a":17375,"t":"byte","b":[67,84,32,84,72,82,85,83]},{"a":17383,"t":"byte","b":[84,255,10,7,65,78,68,32]},{"a":17391,"t":"byte","b":[65,78,84,73,45,71,82,65]},{"a":17399,"t":"byte","b":[86,32,70,73,82,83,84,255]},{"a":17407,"t":"byte","b":[0,9,84,65,75,69,32,78]},{"a":17415,"t":"byte","b":[79,84,69,32,79,70,32,84]},{"a":17423,"t":"byte","b":[72,69,32,65,82,82,79,87]},{"a":17431,"t":"byte","b":[83,32,78,69,65,82,32,84]},{"a":17439,"t":"byte","b":[72,69,32,84,85,66,69,83]},{"a":17447,"t":"byte","b":[32,45,255,2,10,84,72,69]},{"a":17455,"t":"byte","b":[83,69,32,84,69,76,76,32]},{"a":17463,"t":"byte","b":[89,79,85,32,73,70,32,84]},{"a":17471,"t":"byte","b":[72,69,89,32,71,79,32,85]},{"a":17479,"t":"byte","b":[80,32,79,82,32,68,79,87]},{"a":17487,"t":"byte","b":[78,255,4,12,72,73,68,73]},{"a":17495,"t":"byte","b":[78,71,32,66,69,78,69,65]},{"a":17503,"t":"byte","b":[84,72,32,84,72,69,32,72]},{"a":17511,"t":"byte","b":[79,82,73,90,79,78,32,71]},{"a":17519,"t":"byte","b":[73,86,69,83,255,7,13,73]},{"a":17527,"t":"byte","b":[77,77,85,78,73,84,89,32]},{"a":17535,"t":"byte","b":[84,79,32,65,76,73,69,78]},{"a":17543,"t":"byte","b":[32,66,85,76,76,69,84,83]},{"a":17551,"t":"byte","b":[255,0,15,65,70,84,69,82]},{"a":17559,"t":"byte","b":[32,65,32,67,79,76,79,85]},{"a":17567,"t":"byte","b":[82,32,73,83,32,67,79,77]},{"a":17575,"t":"byte","b":[80,76,69,84,69,44,32,89]},{"a":17583,"t":"byte","b":[79,85,32,67,65,78,32,77]},{"a":17591,"t":"byte","b":[65,75,69,255,1,16,65,32]},{"a":17599,"t":"byte","b":[87,69,65,80,79,78,32,80]},{"a":17607,"t":"byte","b":[69,82,77,69,78,65,78,84]},{"a":17615,"t":"byte","b":[46,32,74,85,83,84,32,83]},{"a":17623,"t":"byte","b":[69,76,69,67,84,32,84,72]},{"a":17631,"t":"byte","b":[69,32,79,78,69,255,3,17]},{"a":17639,"t":"byte","b":[89,79,85,32,87,65,78,84]},{"a":17647,"t":"byte","b":[44,32,87,72,73,76,69,32]},{"a":17655,"t":"byte","b":[87,73,90,90,89,32,83,84]},{"a":17663,"t":"byte","b":[73,82,83,32,72,73,83,32]},{"a":17671,"t":"byte","b":[80,79,84,255,0,19,69,88]},{"a":17679,"t":"byte","b":[84,82,65,32,76,73,86,69]},{"a":17687,"t":"byte","b":[83,32,67,65,78,32,66,69]},{"a":17695,"t":"byte","b":[32,83,72,79,84,32,79,78]},{"a":17703,"t":"byte","b":[32,84,72,69,32,66,79,78]},{"a":17711,"t":"byte","b":[85,83,32,66,73,84,255,9]},{"a":17719,"t":"byte","b":[22,67,79,78,84,73,78,85]},{"a":17727,"t":"byte","b":[69,32,71,65,77,69,32,70]},{"a":17735,"t":"byte","b":[69,65,84,85,82,69,46,46]},{"a":17743,"t":"byte","b":[46,46,255,255]},{"a":17747,"l":"start_sound_effect","c":"Start sound effect Y (0-25), called from 31 places in the game (list in notes-2.md). The effect's 24-byte record comes through the word table at $BACA (records 24 bytes apart from $3C5F); its byte 0 is the voice (1-3), turned by $BA7B into the offset of that voice's effect slot ($0400, $0420, $0440). The effect starts if the slot is idle (slot byte 2, the time left, is 0) or if its priority (record byte 1) is the same as or lower in number than the sound playing there (slot byte 1): low numbers win. Starting copies 25 bytes of the record into the slot (one more than a record, so slot byte $18 gets the next record's voice byte). The table holds 26 records (0-25) at $3C5F-$3ECE. Effect $18 first stores six random bytes (JSR $7533) into its own record at $3EA6-$3EAB, the frequency and sweep fields. Effect 0 flips bit 4 of $BB03 on every call and, with no music playing ($B8F1 = 0), plays record $10 (the same sound on voice 3) every other time; when its voice is taken by a more important sound it retries as effect $10. The effect number is kept in $BB02; X is saved in $62 and restored, except after that retry, which returns X = 0. The effects are played by the band routine $B960 on the voices the music leaves free.","t":"code","b":[192,24],"m":"cpy","o":"#$18","x":[17832,29130,29391,29434,32200,32205,32210,32262,32458,33299,34044,34354,34410,34989,34994,35101,35200,35244,40780,42414,42980,43040,43050,43116,43150,43225,43326,43425,43701,43715,44681,44909]},{"a":17749,"t":"code","b":[208,15],"m":"bne","o":"b_4566","oa":17766},{"a":17751,"t":"code","b":[152],"m":"tya"},{"a":17752,"t":"code","b":[72],"m":"pha"},{"a":17753,"t":"code","b":[162,6],"m":"ldx","o":"#$06"},{"a":17755,"l":"b_455B","t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003,"x":[17762]},{"a":17758,"t":"code","b":[157,165,62],"m":"sta","o":"sfx_24_random_base,x","oa":16037},{"a":17761,"t":"code","b":[202],"m":"dex"},{"a":17762,"t":"code","b":[208,247],"m":"bne","o":"b_455B","oa":17755},{"a":17764,"t":"code","b":[104],"m":"pla"},{"a":17765,"t":"code","b":[168],"m":"tay"},{"a":17766,"l":"b_4566","t":"code","b":[152],"m":"tya","x":[17749]},{"a":17767,"t":"code","b":[134,98],"m":"stx","o":"zp_ptr_62","oa":98},{"a":17769,"t":"code","b":[141,2,187],"m":"sta","o":"sfx_requested","oa":47874},{"a":17772,"t":"code","b":[208,15],"m":"bne","o":"b_457D","oa":17789},{"a":17774,"t":"code","b":[173,3,187],"m":"lda","o":"fire_sound_alternate","oa":47875},{"a":17777,"t":"code","b":[73,16],"m":"eor","o":"#$10"},{"a":17779,"t":"code","b":[141,3,187],"m":"sta","o":"fire_sound_alternate","oa":47875},{"a":17782,"t":"code","b":[172,241,184],"m":"ldy","o":"music_voices","oa":47345},{"a":17785,"t":"code","b":[240,2],"m":"beq","o":"b_457D","oa":17789},{"a":17787,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":17789,"l":"b_457D","t":"code","b":[10],"m":"asl","o":"a","x":[17772,17785]},{"a":17790,"t":"code","b":[168],"m":"tay"},{"a":17791,"t":"code","b":[185,202,186],"m":"lda","o":"tbl_sfx_records,y","oa":47818},{"a":17794,"t":"code","b":[133,118],"m":"sta","o":"sfx_record_lo","oa":118},{"a":17796,"t":"code","b":[185,203,186],"m":"lda","o":"tbl_sfx_records_hi,y","oa":47819},{"a":17799,"t":"code","b":[133,119],"m":"sta","o":"sfx_record_hi","oa":119},{"a":17801,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":17803,"t":"code","b":[177,118],"m":"lda","o":"(sfx_record_lo),y","oa":118},{"a":17805,"t":"code","b":[170],"m":"tax"},{"a":17806,"t":"code","b":[189,122,186],"m":"lda","o":"sfx_voice_offsets_base,x","oa":47738},{"a":17809,"t":"code","b":[170],"m":"tax"},{"a":17810,"t":"code","b":[189,2,4],"m":"lda","o":"sfx_slot_time1,x","oa":1026},{"a":17813,"t":"code","b":[240,22],"m":"beq","o":"b_45AD","oa":17837},{"a":17815,"t":"code","b":[200],"m":"iny"},{"a":17816,"t":"code","b":[177,118],"m":"lda","o":"(sfx_record_lo),y","oa":118},{"a":17818,"t":"code","b":[221,1,4],"m":"cmp","o":"sfx_slot_priority,x","oa":1025},{"a":17821,"t":"code","b":[240,14],"m":"beq","o":"b_45AD","oa":17837},{"a":17823,"t":"code","b":[144,12],"m":"bcc","o":"b_45AD","oa":17837},{"a":17825,"t":"code","b":[173,2,187],"m":"lda","o":"sfx_requested","oa":47874},{"a":17828,"t":"code","b":[208,4],"m":"bne","o":"b_45AA","oa":17834},{"a":17830,"t":"code","b":[160,16],"m":"ldy","o":"#$10"},{"a":17832,"t":"code","b":[208,169],"m":"bne","o":"start_sound_effect","oa":17747},{"a":17834,"l":"b_45AA","t":"code","b":[166,98],"m":"ldx","o":"zp_ptr_62","oa":98,"x":[17828]},{"a":17836,"t":"code","b":[96],"m":"rts"},{"a":17837,"l":"b_45AD","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[17813,17821,17823]},{"a":17839,"l":"b_45AF","t":"code","b":[177,118],"m":"lda","o":"(sfx_record_lo),y","oa":118,"x":[17848]},{"a":17841,"t":"code","b":[157,0,4],"m":"sta","o":"sfx_slot_voice,x","oa":1024},{"a":17844,"t":"code","b":[232],"m":"inx"},{"a":17845,"t":"code","b":[200],"m":"iny"},{"a":17846,"t":"code","b":[192,25],"m":"cpy","o":"#$19"},{"a":17848,"t":"code","b":[208,245],"m":"bne","o":"b_45AF","oa":17839},{"a":17850,"t":"code","b":[166,98],"m":"ldx","o":"zp_ptr_62","oa":98},{"a":17852,"t":"code","b":[96],"m":"rts"},{"a":17853,"l":"check_music_end","c":"Once a frame from the play loop ($6411): when voice 3 of the music has finished its track ($5B = 0, read through $5522), give every voice back to the sound effects: music mode $B8F1 = 0, filter-type nibble $B94D = 0 and $D417 = 0 (no voice filtered).","t":"code","b":[32,34,85],"m":"jsr","o":"test_music_voice3","oa":21794,"x":[25617]},{"a":17856,"t":"code","b":[208,11],"m":"bne","o":"r_45CD","oa":17869},{"a":17858,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":17860,"t":"code","b":[141,241,184],"m":"sta","o":"music_voices","oa":47345},{"a":17863,"t":"code","b":[141,77,185],"m":"sta","o":"music_filter_mode","oa":47437},{"a":17866,"t":"code","b":[141,23,212],"m":"sta","o":"sid_filter_resonance"},{"a":17869,"l":"r_45CD","t":"code","b":[96],"m":"rts","x":[17856]},{"a":17870,"l":"music_fade","c":"Music fade direction, used and cleared by step_music_fade ($45D0): 0 = none, $01 = fade in (volume up to 15), $FF = fade out (down to 0). Set by the game: $FF at $639D, $6471 and $6514; 1 at $64F8, $6550 and $6906.","t":"byte","b":[0],"x":[17872,17901,25501,25713,25848,25876,25936,26886]},{"a":17871,"l":"music_volume","c":"Master volume, 0-15 ($0F in the loaded image). Stepped by step_music_fade and ORed with $B94D into $D418 by the band routine $B90C ($B910-$B916, and again at $B943-$B949 after the music has played). The game reads it at $64F1 to wait for a fade-out to finish.","t":"byte","b":[15],"x":[17879,17884,17888,17895,25841,47376,47427]},{"a":17872,"l":"step_music_fade","c":"Once a frame, from the band routine $B90C: move the master volume $45CF one step in the direction in $45CE, and clear $45CE when the volume reaches 15 (fading in) or 0 (fading out). A full fade takes 15 frames.","t":"code","b":[173,206,69],"m":"lda","o":"music_fade","oa":17870,"x":[47373]},{"a":17875,"t":"code","b":[240,27],"m":"beq","o":"r_45F0","oa":17904},{"a":17877,"t":"code","b":[16,9],"m":"bpl","o":"b_45E0","oa":17888},{"a":17879,"t":"code","b":[173,207,69],"m":"lda","o":"music_volume","oa":17871},{"a":17882,"t":"code","b":[240,15],"m":"beq","o":"b_45EB","oa":17899},{"a":17884,"t":"code","b":[206,207,69],"m":"dec","o":"music_volume","oa":17871},{"a":17887,"t":"code","b":[96],"m":"rts"},{"a":17888,"l":"b_45E0","t":"code","b":[173,207,69],"m":"lda","o":"music_volume","oa":17871,"x":[17877]},{"a":17891,"t":"code","b":[201,15],"m":"cmp","o":"#$0F"},{"a":17893,"t":"code","b":[240,4],"m":"beq","o":"b_45EB","oa":17899},{"a":17895,"t":"code","b":[238,207,69],"m":"inc","o":"music_volume","oa":17871},{"a":17898,"t":"code","b":[96],"m":"rts"},{"a":17899,"l":"b_45EB","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[17882,17893]},{"a":17901,"t":"code","b":[141,206,69],"m":"sta","o":"music_fade","oa":17870},{"a":17904,"l":"r_45F0","t":"code","b":[96],"m":"rts","x":[17875]},{"a":17905,"l":"start_tune","c":"Start tune Y, with Y = 7 x tune + 5 ($05, $0C, $13, $1A, $21, $28, $2F, $36, $3D for tunes 0-8; the tunes are listed at $5525). Sets the filter-type nibble $B94D for $D418 to $70 (low-, band- and high-pass together) for tune $1A, the title tune, and to $10 (low-pass) for the others, then continues at $47F2. Callers: $6507 (tune 2), $6573 (tune 1 or 4), $6916 (tune 5), $6A91 (tune 7), $6BC0 (tune 6), $893D and $A17D (tune 0), $8F6A (tune 3), $AB75 (tune 8). The callers also set the music mode $B8F1 (0 = no music, the effects use all three voices; 1 = music on voice 3 only, effects on voices 1 and 2; 2 = music on all three voices, no effects) and the speed $B8F2 (the music is played once, twice or four times a frame for 0, 1 and 2, from the band routines $B90C, $B8FC, $B903 and $B8F3).","t":"code","b":[169,112],"m":"lda","o":"#$70","x":[25863,25971,26902,27281,27584,35133,36714,41341,43893]},{"a":17907,"t":"code","b":[192,26],"m":"cpy","o":"#$1A"},{"a":17909,"t":"code","b":[240,2],"m":"beq","o":"b_45F9","oa":17913},{"a":17911,"t":"code","b":[169,16],"m":"lda","o":"#$10"},{"a":17913,"l":"b_45F9","t":"code","b":[141,77,185],"m":"sta","o":"music_filter_mode","oa":47437,"x":[17909]},{"a":17916,"t":"code","b":[76,242,71],"m":"jmp","o":"load_tune","oa":18418},{"a":17919,"l":"music_pad_45ff","c":"One unused byte ($00) between start_tune and the voice 1 command table at $4600; no instruction refers to it.","t":"byte","b":[0]},{"a":17920,"l":"music_cmds_voice1","c":"Voice 1 command handlers: 21 words for the command bytes $C0, $C2, ... $E8. The event reader writes (command + $40) into the low byte of the JMP ($4600) operand at $4D74 ($4D6F), so each even command byte selects one word: $C0 return or end $4A09, $C2 call $48FF, $C4 jump $49B4, $C6 transpose and call $48F9, $C8 transpose and jump $49B1, $CA set instrument byte $49E9, $CC loop start $4981, $CE loop end $49F2, $D0 load instrument bytes $4967, $D2 load envelope $4A31, $D4 set live byte $4A20, $D6 call machine code $491D, $D8 set transpose $4A2A, $DA set instrument word $492F, $DC set live word $493F, $DE filter this voice $49DA, $E0 load filter program $4951, $E2 filter off $49C1, $E4 pitch mode 5 $49E1, $E6 pitch mode 7 $49DE, $E8 load pitch block $499B. An odd command byte would jump through a word made of two entries' halves; the tunes use none.","t":"addr","b":[9,74],"oa":18953,"o":"v1_cmd_return","x":[19828]},{"a":17922,"t":"addr","b":[255,72],"oa":18687,"o":"v1_cmd_call"},{"a":17924,"t":"addr","b":[180,73],"oa":18868,"o":"v1_cmd_jump"},{"a":17926,"t":"addr","b":[249,72],"oa":18681,"o":"v1_cmd_call_transposed"},{"a":17928,"t":"addr","b":[177,73],"oa":18865,"o":"v1_cmd_jump_transposed"},{"a":17930,"t":"addr","b":[233,73],"oa":18921,"o":"v1_cmd_set_inst_byte"},{"a":17932,"t":"addr","b":[129,73],"oa":18817,"o":"v1_cmd_loop_start"},{"a":17934,"t":"addr","b":[242,73],"oa":18930,"o":"v1_cmd_loop_end"},{"a":17936,"t":"addr","b":[103,73],"oa":18791,"o":"v1_cmd_load_inst"},{"a":17938,"t":"addr","b":[49,74],"oa":18993,"o":"v1_cmd_load_envelope"},{"a":17940,"t":"addr","b":[32,74],"oa":18976,"o":"v1_cmd_set_live_byte"},{"a":17942,"t":"addr","b":[29,73],"oa":18717,"o":"v1_cmd_machine_code"},{"a":17944,"t":"addr","b":[42,74],"oa":18986,"o":"v1_cmd_transpose"},{"a":17946,"t":"addr","b":[47,73],"oa":18735,"o":"v1_cmd_set_inst_word"},{"a":17948,"t":"addr","b":[63,73],"oa":18751,"o":"v1_cmd_set_live_word"},{"a":17950,"t":"addr","b":[218,73],"oa":18906,"o":"v1_cmd_filter_on"},{"a":17952,"t":"addr","b":[81,73],"oa":18769,"o":"v1_cmd_filter_program"},{"a":17954,"t":"addr","b":[193,73],"oa":18881,"o":"v1_cmd_filter_off"},{"a":17956,"t":"addr","b":[225,73],"oa":18913,"o":"v1_cmd_pitch_mode5"},{"a":17958,"t":"addr","b":[222,73],"oa":18910,"o":"v1_cmd_pitch_mode7"},{"a":17960,"t":"addr","b":[155,73],"oa":18843,"o":"v1_cmd_load_pitch"},{"a":17962,"l":"music_cmds_voice2","c":"Voice 2 command handlers, 21 words for $C0-$E8, selected by the JMP ($462A) at $4EAC (operand low byte = command + $6A, written at $4EA7): $C0 $4B2A, $C2 $4A4B, $C4 $4AEF, $C6 $4A45, $C8 $4AEC, $CA $4B08, $CC $4ABA, $CE $4B12, $D0 $4A9F, $D2 $4B52, $D4 $4B48, $D6 $4A69, $D8 $4B41, $DA $4A7B, $DC $4A8D, $E4 $4AFC, $E8 $4AD5, meaning what they mean on voice 1. Voice 2 has no filter commands and no mode 7: $DE, $E0, $E2 and $E6 hold $0923, which is not a handler (zero bytes in the image); no tune uses them on voice 2.","t":"addr","b":[42,75],"oa":19242,"o":"v2_cmd_return","x":[20140]},{"a":17964,"t":"addr","b":[75,74],"oa":19019,"o":"v2_cmd_call"},{"a":17966,"t":"addr","b":[239,74],"oa":19183,"o":"v2_cmd_jump"},{"a":17968,"t":"addr","b":[69,74],"oa":19013,"o":"v2_cmd_call_transposed"},{"a":17970,"t":"addr","b":[236,74],"oa":19180,"o":"v2_cmd_jump_transposed"},{"a":17972,"t":"addr","b":[8,75],"oa":19208,"o":"v2_cmd_set_inst_byte"},{"a":17974,"t":"addr","b":[186,74],"oa":19130,"o":"v2_cmd_loop_start"},{"a":17976,"t":"addr","b":[18,75],"oa":19218,"o":"v2_cmd_loop_end"},{"a":17978,"t":"addr","b":[159,74],"oa":19103,"o":"v2_cmd_load_inst"},{"a":17980,"t":"addr","b":[82,75],"oa":19282,"o":"v2_cmd_load_envelope"},{"a":17982,"t":"addr","b":[72,75],"oa":19272,"o":"v2_cmd_set_live_byte"},{"a":17984,"t":"addr","b":[105,74],"oa":19049,"o":"v2_cmd_machine_code"},{"a":17986,"t":"addr","b":[65,75],"oa":19265,"o":"v2_cmd_transpose"},{"a":17988,"t":"addr","b":[123,74],"oa":19067,"o":"v2_cmd_set_inst_word"},{"a":17990,"t":"addr","b":[141,74],"oa":19085,"o":"v2_cmd_set_live_word"},{"a":17992,"l":"music_cmds_voice2_de_e2","c":"Voice 2 command table, words for $DE, $E0 and $E2 (filter on, filter program, filter off on the other voices): $0923 three times, typed as plain words because $0923 is not a handler (zero bytes in the image); no tune gives voice 2 these commands.","t":"word","b":[35,9,35,9,35,9],"d":[2339,2339,2339]},{"a":17998,"l":"music_cmds_voice2_e4","c":"Voice 2 command table, word for $E4: $4AFC, pitch mode 5.","t":"addr","b":[252,74],"oa":19196,"o":"v2_cmd_pitch_mode5"},{"a":18000,"l":"music_cmds_voice2_e6","c":"Voice 2 command table, word for $E6 (pitch mode 7 on voice 1): $0923, not a handler; the mode-7 entry at $4AFF has no word.","t":"word","b":[35,9],"d":[2339]},{"a":18002,"l":"music_cmds_voice2_e8","c":"Voice 2 command table, last word, for $E8: $4AD5, load a 14-byte pitch block.","t":"addr","b":[213,74],"oa":19157,"o":"v2_cmd_load_pitch"},{"a":18004,"l":"music_cmds_voice3","c":"Voice 3 command handlers, 22 words for $C0-$EA, selected by the JMP ($4654) at $4FFB (operand low byte = command + $94, written at $4FF6): $C0 $4C6E, $C2 $4B6C, $C4 $4C21, $C6 $4B66, $CA $4C4B, $CC $4BEE, $CE $4C54, $D0 $4BD4, $D2 $4CA3, $D4 $4C86, $D6 $4B8C, $D8 $4C9C, $DA $4B9E, $DC $4BAE, $DE $4C42, $E0 $4BBE, $E2 $4C2E, $E8 $4C0B, and $EA set tempo $4C8F, which only voice 3 has. $C8 (transpose and jump), $E4 and $E6 hold $0926, not a handler; no tune uses them on voice 3.","t":"addr","b":[110,76],"oa":19566,"o":"v3_cmd_return","x":[20475]},{"a":18006,"t":"addr","b":[108,75],"oa":19308,"o":"v3_cmd_call"},{"a":18008,"t":"addr","b":[33,76],"oa":19489,"o":"v3_cmd_jump"},{"a":18010,"t":"addr","b":[102,75],"oa":19302,"o":"v3_cmd_call_transposed"},{"a":18012,"l":"music_cmds_voice3_c8","c":"Voice 3 command table, word for $C8 (transpose and jump on voices 1 and 2): $0926, not a handler, so voice 3 cannot use $C8.","t":"word","b":[38,9],"d":[2342]},{"a":18014,"l":"music_cmds_voice3_ca_e2","c":"Voice 3 command table, words for $CA to $E2: $4C4B set instrument byte, $4BEE loop start, $4C54 loop end, $4BD4 load instrument, $4CA3 load envelope, $4C86 set live byte, $4B8C machine code, $4C9C transpose, $4B9E set instrument word, $4BAE set live word, $4C42 filter voice 3, $4BBE filter program, $4C2E filter off.","t":"addr","b":[75,76],"oa":19531,"o":"v3_cmd_set_inst_byte"},{"a":18016,"t":"addr","b":[238,75],"oa":19438,"o":"v3_cmd_loop_start"},{"a":18018,"t":"addr","b":[84,76],"oa":19540,"o":"v3_cmd_loop_end"},{"a":18020,"t":"addr","b":[212,75],"oa":19412,"o":"v3_cmd_load_inst"},{"a":18022,"t":"addr","b":[163,76],"oa":19619,"o":"v3_cmd_load_envelope"},{"a":18024,"t":"addr","b":[134,76],"oa":19590,"o":"v3_cmd_set_live_byte"},{"a":18026,"t":"addr","b":[140,75],"oa":19340,"o":"v3_cmd_machine_code"},{"a":18028,"t":"addr","b":[156,76],"oa":19612,"o":"v3_cmd_transpose"},{"a":18030,"t":"addr","b":[158,75],"oa":19358,"o":"v3_cmd_set_inst_word"},{"a":18032,"t":"addr","b":[174,75],"oa":19374,"o":"v3_cmd_set_live_word"},{"a":18034,"t":"addr","b":[66,76],"oa":19522,"o":"v3_cmd_filter_on"},{"a":18036,"t":"addr","b":[190,75],"oa":19390,"o":"v3_cmd_filter_program"},{"a":18038,"t":"addr","b":[46,76],"oa":19502,"o":"v3_cmd_filter_off"},{"a":18040,"l":"music_cmds_voice3_e4_e6","c":"Voice 3 command table, words for $E4 and $E6 (the pitch-mode commands of voice 1): $0926 twice, not handlers; voice 3 changes its pitch mode with $CA or an instrument load instead.","t":"word","b":[38,9,38,9],"d":[2342,2342]},{"a":18044,"l":"music_cmds_voice3_e8_ea","c":"Voice 3 command table, last two words: $E8 $4C0B (load a pitch block) and $EA $4C8F (set the tempo), the command only voice 3 has.","t":"addr","b":[11,76],"oa":19467,"o":"v3_cmd_load_pitch"},{"a":18046,"t":"addr","b":[143,76],"oa":19599,"o":"v3_cmd_tempo"},{"a":18048,"l":"music_v2_inst_pitch_step1_lo","c":"Voice 2 instrument template, 29 bytes $4680-$469C, the same layout as voice 1's $87-$A3 and voice 3's $A4-$C0 (all $EE in the loaded image). Written by the voice 2 commands $D0 ($4AAF), $E8 ($4AE3, bytes 0-13), $D2 ($4B5D, bytes 24-28), $CA ($4B0C) and $DA ($4A7F/$4A85); read by the voice 2 note start ($4ED8-$4FB5), which sends bytes 22-26 to the SID and copies the pulse fields (when byte 17 is not 0), the pitch fields (when byte 13 is not 0) and the gate and release times to the live block $46C0. Byte 0: pitch step 1, low byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[19071,19119,19171,19212,20368]},{"a":18049,"l":"music_v2_inst_pitch_step1_hi","c":"Voice 2 instrument template byte 1 ($4680 + 1): pitch step 1, high byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[19077,20362]},{"a":18050,"l":"music_v2_inst_pitch_step2_lo","c":"Voice 2 instrument template byte 2 ($4680 + 2): pitch step 2, low byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[20356]},{"a":18051,"l":"music_v2_inst_pitch_step2_hi","c":"Voice 2 instrument template byte 3 ($4680 + 3): pitch step 2, high byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[20350]},{"a":18052,"l":"music_v2_inst_pitch_step3_lo","c":"Voice 2 instrument template byte 4 ($4680 + 4): pitch step 3, low byte (arpeggio mode: the tick counter's start).","t":"byte","b":[238],"x":[20344]},{"a":18053,"l":"music_v2_inst_pitch_step3_hi","c":"Voice 2 instrument template byte 5 ($4680 + 5): pitch step 3, high byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[20338]},{"a":18054,"l":"music_v2_inst_pitch_step4_lo","c":"Voice 2 instrument template byte 6 ($4680 + 6): pitch step 4, low byte (arpeggio mode: ticks per arpeggio note).","t":"byte","b":[238],"x":[20332]},{"a":18055,"l":"music_v2_inst_pitch_step4_hi","c":"Voice 2 instrument template byte 7 ($4680 + 7): pitch step 4, high byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[20326]},{"a":18056,"l":"music_v2_inst_pitch_ticks1","c":"Voice 2 instrument template byte 8 ($4680 + 8): ticks of pitch step 1 (arpeggio mode: the table address, low byte).","t":"byte","b":[238],"x":[20320]},{"a":18057,"l":"music_v2_inst_pitch_ticks2","c":"Voice 2 instrument template byte 9 ($4680 + 9): ticks of pitch step 2 (arpeggio mode: the table address, high byte).","t":"byte","b":[238],"x":[20314]},{"a":18058,"l":"music_v2_inst_pitch_ticks3","c":"Voice 2 instrument template byte 10 ($4680 + 10): ticks of pitch step 3 (arpeggio mode: the base note, replaced by note + transpose at every note start).","t":"byte","b":[238],"x":[20308]},{"a":18059,"l":"music_v2_inst_pitch_ticks4","c":"Voice 2 instrument template byte 11 ($4680 + 11): ticks of pitch step 4 (arpeggio mode: the first table index; the table is read from it down to 0, then again).","t":"byte","b":[238],"x":[20302]},{"a":18060,"l":"music_v2_inst_pitch_delay","c":"Voice 2 instrument template byte 12 ($4680 + 12): ticks before the pitch steps begin (arpeggio mode: the current table index).","t":"byte","b":[238],"x":[20296]},{"a":18061,"l":"music_v2_inst_pitch_mode","c":"Voice 2 instrument template byte 13 ($4680 + 13): pitch-effect mode: 0 off; bit 3 arpeggio; otherwise four pitch steps, bit 1 also adding step 4 during the delay, and after the fourth step bit 7 restarting from the note's frequency, bit 0 repeating from where it is, neither holding.","t":"byte","b":[238],"x":[19201,20288]},{"a":18062,"l":"music_v2_inst_pulse_ticks1","c":"Voice 2 instrument template byte 14 ($4680 + 14): pulse sweep, ticks of step 1.","t":"byte","b":[238],"x":[20270]},{"a":18063,"l":"music_v2_inst_pulse_ticks2","c":"Voice 2 instrument template byte 15 ($4680 + 15): pulse sweep, ticks of step 2.","t":"byte","b":[238],"x":[20273]},{"a":18064,"l":"music_v2_inst_pulse_delay","c":"Voice 2 instrument template byte 16 ($4680 + 16): pulse sweep, ticks before it starts.","t":"byte","b":[238],"x":[20264]},{"a":18065,"l":"music_v2_inst_pulse_mode","c":"Voice 2 instrument template byte 17 ($4680 + 17): pulse sweep mode: 0 off; after both steps bit 7 restarts from the start width, bit 0 repeats from the current width, neither holds.","t":"byte","b":[238],"x":[20222]},{"a":18066,"l":"music_v2_inst_pulse_step1_lo","c":"Voice 2 instrument template byte 18 ($4680 + 18): pulse step 1, low byte.","t":"byte","b":[238],"x":[20258]},{"a":18067,"l":"music_v2_inst_pulse_step1_hi","c":"Voice 2 instrument template byte 19 ($4680 + 19): pulse step 1, high byte.","t":"byte","b":[238],"x":[20252]},{"a":18068,"l":"music_v2_inst_pulse_step2_lo","c":"Voice 2 instrument template byte 20 ($4680 + 20): pulse step 2, low byte.","t":"byte","b":[238],"x":[20246]},{"a":18069,"l":"music_v2_inst_pulse_step2_hi","c":"Voice 2 instrument template byte 21 ($4680 + 21): pulse step 2, high byte.","t":"byte","b":[238],"x":[20240]},{"a":18070,"l":"music_v2_inst_pulse_width_lo","c":"Voice 2 instrument template byte 22 ($4680 + 22): pulse width at the note start, low byte.","t":"byte","b":[238],"x":[20184]},{"a":18071,"l":"music_v2_inst_pulse_width_hi","c":"Voice 2 instrument template byte 23 ($4680 + 23): pulse width at the note start, high byte.","t":"byte","b":[238],"x":[20187]},{"a":18072,"l":"music_v2_inst_control","c":"Voice 2 instrument template byte 24 ($4680 + 24): control register value: waveform and gate bit 0; bit 3 (the test bit, masked off before the chip) picks the gate-off rule: set = release when fewer than byte 27 ticks of the note are left, clear = release byte 27 ticks after the start.","t":"byte","b":[238],"x":[19293,20208]},{"a":18073,"l":"music_v2_inst_attack_decay","c":"Voice 2 instrument template byte 25 ($4680 + 25): attack/decay register value.","t":"byte","b":[238],"x":[20196]},{"a":18074,"l":"music_v2_inst_sustain_release","c":"Voice 2 instrument template byte 26 ($4680 + 26): sustain/release register value.","t":"byte","b":[238],"x":[20202]},{"a":18075,"l":"music_v2_inst_gate_time","c":"Voice 2 instrument template byte 27 ($4680 + 27): gate time in ticks ($FF = keep the gate on).","t":"byte","b":[238],"x":[20396]},{"a":18076,"l":"music_v2_inst_release_time","c":"Voice 2 instrument template byte 28 ($4680 + 28): release time: ticks from the gate-off until the voice's seven SID registers are cleared ($FF = never; 0 = the voice is left alone, with no gate-off and no effects).","t":"byte","b":[238],"x":[20399]},{"a":18077,"l":"music_v1_live_pitch_step1_lo","c":"Voice 1 live sound state, 35 bytes $469D-$46BF: filled at each voice 1 note start ($4D9A-$4E66) from the template $87-$A3, changed by the commands $D4 ($4A24) and $DC ($4943/$4949), and worked by the per-tick routine $50F4. Bytes 0-12 are the live pitch block; byte 0: pitch step 1, low byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[18755,18980,20038,20996]},{"a":18078,"l":"music_v1_live_pitch_step1_hi","c":"Voice 1 live sound state byte 1 ($469D + 1): pitch step 1, high byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[18761,20033,21001]},{"a":18079,"l":"music_v1_live_pitch_step2_lo","c":"Voice 1 live sound state byte 2 ($469D + 2): pitch step 2, low byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[20028,21016]},{"a":18080,"l":"music_v1_live_pitch_step2_hi","c":"Voice 1 live sound state byte 3 ($469D + 3): pitch step 2, high byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[20023,21021]},{"a":18081,"l":"music_v1_live_pitch_step3_lo","c":"Voice 1 live sound state byte 4 ($469D + 4): pitch step 3, low byte (arpeggio mode: the tick counter's start).","t":"byte","b":[238],"x":[20018,20933,20941,21036]},{"a":18082,"l":"music_v1_live_pitch_step3_hi","c":"Voice 1 live sound state byte 5 ($469D + 5): pitch step 3, high byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[20013,21041]},{"a":18083,"l":"music_v1_live_pitch_step4_lo","c":"Voice 1 live sound state byte 6 ($469D + 6): pitch step 4, low byte (arpeggio mode: ticks per arpeggio note).","t":"byte","b":[238],"x":[20008,20938,21056]},{"a":18084,"l":"music_v1_live_pitch_step4_hi","c":"Voice 1 live sound state byte 7 ($469D + 7): pitch step 4, high byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[20003,21061]},{"a":18085,"l":"music_v1_live_pitch_ticks1","c":"Voice 1 live sound state byte 8 ($469D + 8): ticks of pitch step 1 (arpeggio mode: the table address, low byte).","t":"byte","b":[238],"x":[18614,19998,20952]},{"a":18086,"l":"music_v1_live_pitch_ticks2","c":"Voice 1 live sound state byte 9 ($469D + 9): ticks of pitch step 2 (arpeggio mode: the table address, high byte).","t":"byte","b":[238],"x":[18608,19993,20957]},{"a":18087,"l":"music_v1_live_pitch_ticks3","c":"Voice 1 live sound state byte 10 ($469D + 10): ticks of pitch step 3 (arpeggio mode: the base note, replaced by note + transpose at every note start).","t":"byte","b":[238],"x":[18602,19988,20055,20962]},{"a":18088,"l":"music_v1_live_pitch_ticks4","c":"Voice 1 live sound state byte 11 ($469D + 11): ticks of pitch step 4 (arpeggio mode: the first table index; the table is read from it down to 0, then again).","t":"byte","b":[238],"x":[18596,19983,20949]},{"a":18089,"l":"music_v1_live_pitch_delay","c":"Voice 1 live sound state byte 12 ($469D + 12): ticks before the pitch steps begin (arpeggio mode: the current table index).","t":"byte","b":[238],"x":[19978,20917,20922,20944,20969]},{"a":18090,"l":"music_v1_live_pitch_mode","c":"Voice 1 live sound state byte 13 ($469D + 13): pitch-effect mode, from template byte 13 (0 = no pitch update).","t":"byte","b":[238],"x":[19971,20903,20925,21076]},{"a":18091,"l":"music_v1_live_pulse_ticks1","c":"Voice 1 live sound state byte 14 ($469D + 14): pulse step 1 tick count, reloaded into byte 33 when the sweep repeats.","t":"byte","b":[238],"x":[18508,19957]},{"a":18092,"l":"music_v1_live_pulse_ticks2","c":"Voice 1 live sound state byte 15 ($469D + 15): pulse step 2 tick count, reloaded into byte 34 when the sweep repeats.","t":"byte","b":[238],"x":[18514,19966]},{"a":18093,"l":"music_v1_live_pulse_delay","c":"Voice 1 live sound state byte 16 ($469D + 16): pulse delay, counted down each tick.","t":"byte","b":[238],"x":[19950,20814,20819]},{"a":18094,"l":"music_v1_live_pulse_mode","c":"Voice 1 live sound state byte 17 ($469D + 17): pulse sweep mode, from template byte 17 (0 = no sweep).","t":"byte","b":[238],"x":[19913,20809,20872]},{"a":18095,"l":"music_v1_live_pulse_step1_lo","c":"Voice 1 live sound state byte 18 ($469D + 18): pulse step 1, low byte.","t":"byte","b":[238],"x":[19945,20839]},{"a":18096,"l":"music_v1_live_pulse_step1_hi","c":"Voice 1 live sound state byte 19 ($469D + 19): pulse step 1, high byte.","t":"byte","b":[238],"x":[19940,20844]},{"a":18097,"l":"music_v1_live_pulse_step2_lo","c":"Voice 1 live sound state byte 20 ($469D + 20): pulse step 2, low byte.","t":"byte","b":[238],"x":[19935,20860]},{"a":18098,"l":"music_v1_live_pulse_step2_hi","c":"Voice 1 live sound state byte 21 ($469D + 21): pulse step 2, high byte.","t":"byte","b":[238],"x":[19930,20865]},{"a":18099,"l":"music_v1_live_pulse_start_lo","c":"Voice 1 live sound state byte 22 ($469D + 22): pulse width at the note start, low byte (where a restarting sweep begins again).","t":"byte","b":[238],"x":[18498,19918]},{"a":18100,"l":"music_v1_live_pulse_start_hi","c":"Voice 1 live sound state byte 23 ($469D + 23): pulse width at the note start, high byte.","t":"byte","b":[238],"x":[18501,19921]},{"a":18101,"l":"music_v1_live_note_freq_lo","c":"Voice 1 live sound state byte 24 ($469D + 24): the note's frequency, low byte (base of the pitch steps and of their restarts).","t":"byte","b":[238],"x":[18586,19866]},{"a":18102,"l":"music_v1_live_note_freq_hi","c":"Voice 1 live sound state byte 25 ($469D + 25): the note's frequency, high byte.","t":"byte","b":[238],"x":[18589,19869]},{"a":18103,"l":"music_v1_live_control","c":"Voice 1 live sound state byte 26 ($469D + 26): control register value as written at the note start; the gate-off clears bits 0 and 3.","t":"byte","b":[238],"x":[19900,20729,20748,20753,20801]},{"a":18104,"l":"music_v1_live_gate_time","c":"Voice 1 live sound state byte 27 ($469D + 27): gate time, counted down to the gate-off (or compared with the note time left when control bit 3 is set); $FF holds.","t":"byte","b":[238],"x":[20067,20738,20745,20758,20790,20796]},{"a":18105,"l":"music_v1_live_release_time","c":"Voice 1 live sound state byte 28 ($469D + 28): release time, counted down after the gate-off; $FF holds; 0 = voice idle, the per-tick update returns at once.","t":"byte","b":[238],"x":[18399,20070,20724,20763,20769,21785]},{"a":18106,"l":"music_v1_live_pitch_left1","c":"Voice 1 live sound state byte 29 ($469D + 29): ticks left in pitch step 1.","t":"byte","b":[238],"x":[18617,20987,20992]},{"a":18107,"l":"music_v1_live_pitch_left2","c":"Voice 1 live sound state byte 30 ($469D + 30): ticks left in pitch step 2.","t":"byte","b":[238],"x":[18611,21007,21012]},{"a":18108,"l":"music_v1_live_pitch_left3","c":"Voice 1 live sound state byte 31 ($469D + 31): ticks left in pitch step 3.","t":"byte","b":[238],"x":[18605,21027,21032]},{"a":18109,"l":"music_v1_live_pitch_left4","c":"Voice 1 live sound state byte 32 ($469D + 32): ticks left in pitch step 4.","t":"byte","b":[238],"x":[18599,21047,21052]},{"a":18110,"l":"music_v1_live_pulse_left1","c":"Voice 1 live sound state byte 33 ($469D + 33): ticks left in pulse step 1.","t":"byte","b":[238],"x":[18511,19960,20830,20835]},{"a":18111,"l":"music_v1_live_pulse_left2","c":"Voice 1 live sound state byte 34 ($469D + 34): ticks left in pulse step 2.","t":"byte","b":[238],"x":[18517,19963,20851,20856]},{"a":18112,"l":"music_v2_live_pitch_step1_lo","c":"Voice 2 live sound state, 35 bytes $46C0-$46E2, laid out like voice 1's at $469D: filled at each voice 2 note start ($4ECC-$4FB5) from the template $4680, changed by the commands $D4 ($4B4C) and $DC ($4A91/$4A97), and worked by the per-tick routine $5269. Byte 0: pitch step 1, low byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[19089,19276,20371,21362]},{"a":18113,"l":"music_v2_live_pitch_step1_hi","c":"Voice 2 live sound state byte 1 ($46C0 + 1): pitch step 1, high byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[19095,20365,21367]},{"a":18114,"l":"music_v2_live_pitch_step2_lo","c":"Voice 2 live sound state byte 2 ($46C0 + 2): pitch step 2, low byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[20359,21382]},{"a":18115,"l":"music_v2_live_pitch_step2_hi","c":"Voice 2 live sound state byte 3 ($46C0 + 3): pitch step 2, high byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[20353,21387]},{"a":18116,"l":"music_v2_live_pitch_step3_lo","c":"Voice 2 live sound state byte 4 ($46C0 + 4): pitch step 3, low byte (arpeggio mode: the tick counter's start).","t":"byte","b":[238],"x":[20347,21299,21307,21402]},{"a":18117,"l":"music_v2_live_pitch_step3_hi","c":"Voice 2 live sound state byte 5 ($46C0 + 5): pitch step 3, high byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[20341,21407]},{"a":18118,"l":"music_v2_live_pitch_step4_lo","c":"Voice 2 live sound state byte 6 ($46C0 + 6): pitch step 4, low byte (arpeggio mode: ticks per arpeggio note).","t":"byte","b":[238],"x":[20335,21304,21422]},{"a":18119,"l":"music_v2_live_pitch_step4_hi","c":"Voice 2 live sound state byte 7 ($46C0 + 7): pitch step 4, high byte (arpeggio mode: unused).","t":"byte","b":[238],"x":[20329,21427]},{"a":18120,"l":"music_v2_live_pitch_ticks1","c":"Voice 2 live sound state byte 8 ($46C0 + 8): ticks of pitch step 1 (arpeggio mode: the table address, low byte).","t":"byte","b":[238],"x":[18649,20323,21318]},{"a":18121,"l":"music_v2_live_pitch_ticks2","c":"Voice 2 live sound state byte 9 ($46C0 + 9): ticks of pitch step 2 (arpeggio mode: the table address, high byte).","t":"byte","b":[238],"x":[18643,20317,21323]},{"a":18122,"l":"music_v2_live_pitch_ticks3","c":"Voice 2 live sound state byte 10 ($46C0 + 10): ticks of pitch step 3 (arpeggio mode: the base note, replaced by note + transpose at every note start).","t":"byte","b":[238],"x":[18637,20311,20388,21328]},{"a":18123,"l":"music_v2_live_pitch_ticks4","c":"Voice 2 live sound state byte 11 ($46C0 + 11): ticks of pitch step 4 (arpeggio mode: the first table index; the table is read from it down to 0, then again).","t":"byte","b":[238],"x":[18631,20305,21315]},{"a":18124,"l":"music_v2_live_pitch_delay","c":"Voice 2 live sound state byte 12 ($46C0 + 12): ticks before the pitch steps begin (arpeggio mode: the current table index).","t":"byte","b":[238],"x":[20299,21283,21288,21310,21335]},{"a":18125,"l":"music_v2_live_pitch_mode","c":"Voice 2 live sound state byte 13 ($46C0 + 13): pitch-effect mode, from template byte 13 (0 = no pitch update).","t":"byte","b":[238],"x":[20291,21269,21291,21442]},{"a":18126,"l":"music_v2_live_pulse_ticks1","c":"Voice 2 live sound state byte 14 ($46C0 + 14): pulse step 1 tick count, reloaded into byte 33 when the sweep repeats.","t":"byte","b":[238],"x":[18531,20276]},{"a":18127,"l":"music_v2_live_pulse_ticks2","c":"Voice 2 live sound state byte 15 ($46C0 + 15): pulse step 2 tick count, reloaded into byte 34 when the sweep repeats.","t":"byte","b":[238],"x":[18537,20282]},{"a":18128,"l":"music_v2_live_pulse_delay","c":"Voice 2 live sound state byte 16 ($46C0 + 16): pulse delay, counted down each tick.","t":"byte","b":[238],"x":[20267,21180,21185]},{"a":18129,"l":"music_v2_live_pulse_mode","c":"Voice 2 live sound state byte 17 ($46C0 + 17): pulse sweep mode, from template byte 17 (0 = no sweep).","t":"byte","b":[238],"x":[20225,21175,21238]},{"a":18130,"l":"music_v2_live_pulse_step1_lo","c":"Voice 2 live sound state byte 18 ($46C0 + 18): pulse step 1, low byte.","t":"byte","b":[238],"x":[20261,21202]},{"a":18131,"l":"music_v2_live_pulse_step1_hi","c":"Voice 2 live sound state byte 19 ($46C0 + 19): pulse step 1, high byte.","t":"byte","b":[238],"x":[20255,21207]},{"a":18132,"l":"music_v2_live_pulse_step2_lo","c":"Voice 2 live sound state byte 20 ($46C0 + 20): pulse step 2, low byte.","t":"byte","b":[238],"x":[20249,21223]},{"a":18133,"l":"music_v2_live_pulse_step2_hi","c":"Voice 2 live sound state byte 21 ($46C0 + 21): pulse step 2, high byte.","t":"byte","b":[238],"x":[20243,21228]},{"a":18134,"l":"music_v2_live_pulse_start_lo","c":"Voice 2 live sound state byte 22 ($46C0 + 22): pulse width at the note start, low byte (where a restarting sweep begins again).","t":"byte","b":[238],"x":[18521,20230]},{"a":18135,"l":"music_v2_live_pulse_start_hi","c":"Voice 2 live sound state byte 23 ($46C0 + 23): pulse width at the note start, high byte.","t":"byte","b":[238],"x":[18524,20233]},{"a":18136,"l":"music_v2_live_note_freq_lo","c":"Voice 2 live sound state byte 24 ($46C0 + 24): the note's frequency, low byte (base of the pitch steps and of their restarts).","t":"byte","b":[238],"x":[18621,20172]},{"a":18137,"l":"music_v2_live_note_freq_hi","c":"Voice 2 live sound state byte 25 ($46C0 + 25): the note's frequency, high byte.","t":"byte","b":[238],"x":[18624,20175]},{"a":18138,"l":"music_v2_live_control","c":"Voice 2 live sound state byte 26 ($46C0 + 26): control register value as written at the note start; the gate-off clears bits 0 and 3.","t":"byte","b":[238],"x":[20211,21102,21121,21126,21167]},{"a":18139,"l":"music_v2_live_gate_time","c":"Voice 2 live sound state byte 27 ($46C0 + 27): gate time, counted down to the gate-off (or compared with the note time left when control bit 3 is set); $FF holds.","t":"byte","b":[238],"x":[20402,21111,21118,21131,21156,21162]},{"a":18140,"l":"music_v2_live_release_time","c":"Voice 2 live sound state byte 28 ($46C0 + 28): release time, counted down after the gate-off; $FF holds; 0 = voice idle, the per-tick update returns at once.","t":"byte","b":[238],"x":[18402,20405,21097,21136,21142,21788]},{"a":18141,"l":"music_v2_live_pitch_left1","c":"Voice 2 live sound state byte 29 ($46C0 + 29): ticks left in pitch step 1.","t":"byte","b":[238],"x":[18652,21353,21358]},{"a":18142,"l":"music_v2_live_pitch_left2","c":"Voice 2 live sound state byte 30 ($46C0 + 30): ticks left in pitch step 2.","t":"byte","b":[238],"x":[18646,21373,21378]},{"a":18143,"l":"music_v2_live_pitch_left3","c":"Voice 2 live sound state byte 31 ($46C0 + 31): ticks left in pitch step 3.","t":"byte","b":[238],"x":[18640,21393,21398]},{"a":18144,"l":"music_v2_live_pitch_left4","c":"Voice 2 live sound state byte 32 ($46C0 + 32): ticks left in pitch step 4.","t":"byte","b":[238],"x":[18634,21413,21418]},{"a":18145,"l":"music_v2_live_pulse_left1","c":"Voice 2 live sound state byte 33 ($46C0 + 33): ticks left in pulse step 1.","t":"byte","b":[238],"x":[18534,20279,21196,21211]},{"a":18146,"l":"music_v2_live_pulse_left2","c":"Voice 2 live sound state byte 34 ($46C0 + 34): ticks left in pulse step 2.","t":"byte","b":[238],"x":[18540,20084,20285,20419,20706,21217,21232]},{"a":18147,"l":"music_durations","c":"Duration table: 32 note lengths in ticks, entry n (at $46E2 + n) = n x tempo, 8-bit, for duration codes 1-32. Rebuilt by $4834 when a tune starts and when voice 3 plays command $EA; read with the byte after every note or rest below $60 ($4E74, $4FC3, $50E2). Code 0 would read $46E2 (voice 2's pulse counter) and codes above 32 run past the table; the tunes use 1-32, and none of their codes overflows 255 ticks at its tempo.","t":"byte","b":[238,238,238,238,238,238,238,238],"x":[18489]},{"a":18155,"t":"byte","b":[238,238,238,238,238,238,238,238]},{"a":18163,"t":"byte","b":[238,238,238,238,238,238,238,238]},{"a":18171,"t":"byte","b":[238,238,238,238,238,238,238,238]},{"a":18179,"l":"music_v2_loop_count_0","c":"Voice 2 loop counters, 5 bytes $4703-$4707, one per level of the voice's stack (the index in $0E runs from 4 down to 0 as it fills): command $CC stores the repeat count at $4703 + level ($4ACB). This byte is level 0, the fifth level, which no tune reaches.","t":"byte","b":[238],"x":[19147]},{"a":18180,"l":"music_v2_loop_counts","c":"Voice 2 loop counters of stack levels 1-4 ($4704-$4707), as command $CE sees them ($4B14: DEC $4704,X with X = the stack index, one below the level pushed last).","t":"byte","b":[238,238,238,238],"x":[19220]},{"a":18184,"l":"music_v3_return_lo_0","c":"Voice 3 return addresses, low bytes, 5 levels $4708-$470C (index $0F from 4 down to 0): calls and loop starts store the address to come back to at $4708 + level ($4B73, $4BF5). This byte is level 0.","t":"byte","b":[238],"x":[19315,19445]},{"a":18185,"l":"music_v3_return_lo","c":"Voice 3 return address low bytes of levels 1-4 ($4709-$470C), read back by the loop end ($4C5B) and the return ($4C76).","t":"byte","b":[238,238,238,238],"x":[19547,19574]},{"a":18189,"l":"music_v3_return_hi_0","c":"Voice 3 return addresses, high bytes, level 0 ($470D-$4711 hold levels 0-4; stored at $4B7A and $4BFC).","t":"byte","b":[238],"x":[19322,19452]},{"a":18190,"l":"music_v3_return_hi","c":"Voice 3 return address high bytes of levels 1-4 ($470E-$4711), read back at $4C5E and $4C79.","t":"byte","b":[238,238,238,238],"x":[19550,19577]},{"a":18194,"l":"music_v3_loop_count_0","c":"Voice 3 loop counters, level 0 ($4712-$4716 hold levels 0-4; command $CC stores at $4C01). The tunes nest at most three levels on voice 3 (levels 4-2), so $4712-$4713 keep the $EE of the loaded image.","t":"byte","b":[238],"x":[19457]},{"a":18195,"l":"music_v3_loop_counts","c":"Voice 3 loop counters of levels 1-4 ($4713-$4716), counted down by command $CE ($4C56: DEC $4713,X).","t":"byte","b":[238,238,238,238],"x":[19542]},{"a":18199,"l":"tbl_music_mode_offsets","c":"Three offsets from $0094, one per voice ($00, $F9, $1D): load_tune stores 0 at $0094 + offset and $0098 + offset ($4818/$481B) to switch off the pitch effect and the pulse sweep of each voice's instrument when a tune starts. That is right for voice 1 ($94, $98) and voice 3 ($B1, $B5), but for voice 2 the sums are $018D and $0191, in the stack page, instead of $468D and $4691, so voice 2 keeps the previous tune's modes until its instrument is loaded.","t":"byte","b":[0,249,29],"x":[18449]},{"a":18202,"l":"note_freq_lo","c":"Note frequencies, low bytes: 91 entries for notes 0-90 (C-0 to F-7, and entry 90, which is 0); the high bytes follow at $4775. Tuned for PAL: frequency = value x 985,248 / 16,777,216 Hz lands 6 cents above equal temperament at A = 440 for every note (C-0 $0117 = 16.4 Hz, A-4 $1D60 = 441.6 Hz, F-7 $BA85 = 2,804 Hz); an NTSC machine (clock 1,022,727 Hz) plays every note 0.65 of a semitone higher, 71 cents above A = 440. Indexed by note + transpose at the note starts ($4D97, $4EC9, $5025) and by the arpeggios ($51ED, $535B, $54A8). The tunes' notes reach 7 to 89.","t":"byte","b":[23,40,58,76,96,117,139,163],"x":[19863,20169,20517,20973,21339,21672]},{"a":18210,"t":"byte","b":[188,214,242,16,47,80,115,153]},{"a":18218,"t":"byte","b":[192,234,22,69,119,172,228,31]},{"a":18226,"t":"byte","b":[94,160,231,50,128,212,45,139]},{"a":18234,"t":"byte","b":[238,88,200,62,188,65,205,99]},{"a":18242,"t":"byte","b":[1,168,90,22,221,176,144,124]},{"a":18250,"t":"byte","b":[119,129,155,197,2,81,180,44]},{"a":18258,"t":"byte","b":[186,96,31,249,239,3,54,139]},{"a":18266,"t":"byte","b":[3,161,103,87,115,192,62,241]},{"a":18274,"t":"byte","b":[222,5,108,22,6,67,206,174]},{"a":18282,"t":"byte","b":[231,128,125,228,187,10,215,44]},{"a":18290,"t":"byte","b":[13,133,0]},{"a":18293,"l":"note_freq_hi","c":"Note frequencies, high bytes, 91 entries matching $471A: $01 for C-0 up to $BA for F-7, and $00 for entry 90 ($47CF), so note 90 would be frequency 0, silence. A note above 90 would read the bytes after the table, the code at $47D0.","t":"byte","b":[1,1,1,1,1,1,1,1],"x":[19860,20166,20514,20976,21342,21675]},{"a":18301,"t":"byte","b":[1,1,1,2,2,2,2,2]},{"a":18309,"t":"byte","b":[2,2,3,3,3,3,3,4]},{"a":18317,"t":"byte","b":[4,4,4,5,5,5,6,6]},{"a":18325,"t":"byte","b":[6,7,7,8,8,9,9,10]},{"a":18333,"t":"byte","b":[11,11,12,13,13,14,15,16]},{"a":18341,"t":"byte","b":[17,18,19,20,22,23,24,26]},{"a":18349,"t":"byte","b":[27,29,31,32,34,37,39,41]},{"a":18357,"t":"byte","b":[44,46,49,52,55,58,62,65]},{"a":18365,"t":"byte","b":[69,74,78,83,88,93,98,104]},{"a":18373,"t":"byte","b":[110,117,124,131,139,148,156,166]},{"a":18381,"t":"byte","b":[176,186,0]},{"a":18384,"l":"reset_music","c":"Silence the SID and stop the music: writes $08 (the test bit, which stops a voice's oscillator when it lands in a control register) and then $00 to every register from $D417 down to $D400 (all three voices and the filter; $D418 is left alone), then marks the voices idle ($59, $5A, $5B = 0 and the release counters $46B9, $46DC, $DD = 0), stops the filter sweep ($4E = 0) and sets the filter voice $57 to $FF (none). Called before tunes start ($6553, $6909, $6A87, $6BBB, $8F65, $AB5B) and at $696F (end of the get-ready screen) and $ADF2.","t":"code","b":[162,23],"m":"ldx","o":"#$17","x":[25939,26889,26991,27271,27579,36709,43867,44530]},{"a":18386,"l":"b_47D2","t":"code","b":[169,8],"m":"lda","o":"#$08","x":[18397]},{"a":18388,"t":"code","b":[157,0,212],"m":"sta","o":"sid_v1_freq_lo,x"},{"a":18391,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":18393,"t":"code","b":[157,0,212],"m":"sta","o":"sid_v1_freq_lo,x"},{"a":18396,"t":"code","b":[202],"m":"dex"},{"a":18397,"t":"code","b":[16,243],"m":"bpl","o":"b_47D2","oa":18386},{"a":18399,"t":"code","b":[141,185,70],"m":"sta","o":"music_v1_live_release_time","oa":18105},{"a":18402,"t":"code","b":[141,220,70],"m":"sta","o":"music_v2_live_release_time","oa":18140},{"a":18405,"t":"code","b":[133,221],"m":"sta","o":"music_v3_live_release_time","oa":221},{"a":18407,"t":"code","b":[133,78],"m":"sta","o":"music_filter_sweep_mode","oa":78},{"a":18409,"t":"code","b":[133,89],"m":"sta","o":"music_v1_active","oa":89},{"a":18411,"t":"code","b":[133,90],"m":"sta","o":"music_v2_active","oa":90},{"a":18413,"t":"code","b":[133,91],"m":"sta","o":"music_v3_active","oa":91},{"a":18415,"t":"code","b":[134,87],"m":"stx","o":"music_filter_voice","oa":87},{"a":18417,"t":"code","b":[96],"m":"rts"},{"a":18418,"l":"load_tune","c":"Second half of start_tune: Y points at the tempo byte of a record in the tune table (read as $5526,Y). The tempo goes into the operand at $4838; then for voice 3, 2 and 1 in turn: the track address into $08/$09, $06/$07 or $04/$05 (from $5525,Y and $5526,Y, stepping Y back two bytes a voice), transpose 0 ($12, $11, $10), pitch mode and pulse mode 0 (through the offsets at $4717, which miss voice 2), an empty stack (index 4 in $0F, $0E, $0D), a note time of 1 so that the first event is read at the next tick ($0C, $0B, $0A) and the active flag 1 ($5B, $5A, $59). Falls into $4834 with X = 0.","t":"code","b":[185,38,85],"m":"lda","o":"tune_0_raid_alarm,y","oa":21798,"x":[17916]},{"a":18421,"t":"code","b":[141,56,72],"m":"sta","o":"op_tempo","oa":18488},{"a":18424,"t":"code","b":[162,2],"m":"ldx","o":"#$02"},{"a":18426,"t":"code","b":[134,92],"m":"stx","o":"music_load_voice","oa":92},{"a":18428,"t":"code","b":[162,4],"m":"ldx","o":"#$04"},{"a":18430,"t":"code","b":[134,93],"m":"stx","o":"music_load_offset","oa":93},{"a":18432,"t":"code","b":[136],"m":"dey"},{"a":18433,"l":"b_4801","t":"code","b":[166,93],"m":"ldx","o":"music_load_offset","oa":93,"x":[18482]},{"a":18435,"t":"code","b":[185,37,85],"m":"lda","o":"tbl_tunes,y","oa":21797},{"a":18438,"t":"code","b":[149,4],"m":"sta","o":"music_v1_track_lo,x","oa":4},{"a":18440,"t":"code","b":[185,38,85],"m":"lda","o":"tune_0_raid_alarm,y","oa":21798},{"a":18443,"t":"code","b":[149,5],"m":"sta","o":"music_v1_track_hi,x","oa":5},{"a":18445,"t":"code","b":[132,25],"m":"sty","o":"music_load_y","oa":25},{"a":18447,"t":"code","b":[166,92],"m":"ldx","o":"music_load_voice","oa":92},{"a":18449,"t":"code","b":[188,23,71],"m":"ldy","o":"tbl_music_mode_offsets,x","oa":18199},{"a":18452,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":18454,"t":"code","b":[149,16],"m":"sta","o":"music_v1_transpose,x","oa":16},{"a":18456,"t":"code","b":[153,148,0],"m":"sta","o":"music_v1_inst_pitch_mode,y","oa":148},{"a":18459,"t":"code","b":[153,152,0],"m":"sta","o":"music_v1_inst_pulse_mode,y","oa":152},{"a":18462,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":18464,"t":"code","b":[149,13],"m":"sta","o":"music_v1_stack_index,x","oa":13},{"a":18466,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":18468,"t":"code","b":[149,10],"m":"sta","o":"music_v1_note_time,x","oa":10},{"a":18470,"t":"code","b":[149,89],"m":"sta","o":"music_v1_active,x","oa":89},{"a":18472,"t":"code","b":[164,25],"m":"ldy","o":"music_load_y","oa":25},{"a":18474,"t":"code","b":[136],"m":"dey"},{"a":18475,"t":"code","b":[136],"m":"dey"},{"a":18476,"t":"code","b":[198,93],"m":"dec","o":"music_load_offset","oa":93},{"a":18478,"t":"code","b":[198,93],"m":"dec","o":"music_load_offset","oa":93},{"a":18480,"t":"code","b":[198,92],"m":"dec","o":"music_load_voice","oa":92},{"a":18482,"t":"code","b":[16,205],"m":"bpl","o":"b_4801","oa":18433},{"a":18484,"l":"build_duration_table","c":"Fill the duration table $46E3-$4702 with 1 to 32 times the tempo held in the operand at $4838 (8-bit sums, so a long code at a high tempo would wrap). Entered from load_tune with X = 0 and from the voice 3 tempo command at $4C94.","t":"code","b":[24],"m":"clc","x":[19604]},{"a":18485,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":18487,"l":"b_4837","s":"the immediate is the tempo, written at $47F5 and $4C8F","t":"code","b":[105,221],"m":"adc","o":"#$DD","x":[18495]},{"a":18488,"t":"note","l":"op_tempo","c":"The tempo: operand of the ADC # at $4837, written by load_tune ($47F5, from the tune record) and by the voice 3 command $EA ($4C8F): the number of ticks in duration code 1. $DD in the loaded image, 5 in the title and play snapshots.","note":"inside the item at $4837","x":[18421,19599]},{"a":18489,"t":"code","b":[157,227,70],"m":"sta","o":"music_durations,x","oa":18147},{"a":18492,"t":"code","b":[232],"m":"inx"},{"a":18493,"t":"code","b":[224,32],"m":"cpx","o":"#$20"},{"a":18495,"t":"code","b":[144,246],"m":"bcc","o":"b_4837","oa":18487},{"a":18497,"t":"code","b":[96],"m":"rts"},{"a":18498,"l":"restart_v1_pulse","c":"Voice 1 pulse sweep restart (mode bit 7): the width goes back to the note's start width $46B3/$46B4, then falls into set_v1_pulse.","t":"code","b":[174,179,70],"m":"ldx","o":"music_v1_live_pulse_start_lo","oa":18099,"x":[20881]},{"a":18501,"t":"code","b":[172,180,70],"m":"ldy","o":"music_v1_live_pulse_start_hi","oa":18100},{"a":18504,"l":"set_v1_pulse","c":"Voice 1: make X (low) and Y (high) the current pulse width $29/$2A and reload the two pulse step counters $46BE/$46BF from $46AB/$46AC. Used at the note start ($4DC4) and by the sweep when it repeats ($5197) or restarts ($5191 via $4842).","t":"code","b":[134,41],"m":"stx","o":"music_v1_pulse_lo","oa":41,"x":[19908,20887]},{"a":18506,"t":"code","b":[132,42],"m":"sty","o":"music_v1_pulse_hi","oa":42},{"a":18508,"t":"code","b":[173,171,70],"m":"lda","o":"music_v1_live_pulse_ticks1","oa":18091},{"a":18511,"t":"code","b":[141,190,70],"m":"sta","o":"music_v1_live_pulse_left1","oa":18110},{"a":18514,"t":"code","b":[173,172,70],"m":"lda","o":"music_v1_live_pulse_ticks2","oa":18092},{"a":18517,"t":"code","b":[141,191,70],"m":"sta","o":"music_v1_live_pulse_left2","oa":18111},{"a":18520,"t":"code","b":[96],"m":"rts"},{"a":18521,"l":"restart_v2_pulse","c":"Voice 2 pulse sweep restart: the width goes back to the start width $46D6/$46D7, then falls into set_v2_pulse.","t":"code","b":[174,214,70],"m":"ldx","o":"music_v2_live_pulse_start_lo","oa":18134,"x":[21247]},{"a":18524,"t":"code","b":[172,215,70],"m":"ldy","o":"music_v2_live_pulse_start_hi","oa":18135},{"a":18527,"l":"set_v2_pulse","c":"Voice 2: X/Y become the current pulse width $2B/$2C and the pulse step counters $46E1/$46E2 are reloaded from $46CE/$46CF. Used at the note start ($4EFB) and by the sweep ($5305, and $52FF via $4859).","t":"code","b":[134,43],"m":"stx","o":"music_v2_pulse_lo","oa":43,"x":[20219,21253]},{"a":18529,"t":"code","b":[132,44],"m":"sty","o":"music_v2_pulse_hi","oa":44},{"a":18531,"t":"code","b":[173,206,70],"m":"lda","o":"music_v2_live_pulse_ticks1","oa":18126},{"a":18534,"t":"code","b":[141,225,70],"m":"sta","o":"music_v2_live_pulse_left1","oa":18145},{"a":18537,"t":"code","b":[173,207,70],"m":"lda","o":"music_v2_live_pulse_ticks2","oa":18127},{"a":18540,"t":"code","b":[141,226,70],"m":"sta","o":"music_v2_live_pulse_left2","oa":18146},{"a":18543,"t":"code","b":[96],"m":"rts"},{"a":18544,"l":"restart_v3_pulse","c":"Voice 3 pulse sweep restart: the width goes back to the start width $D7/$D8, then falls into set_v3_pulse.","t":"code","b":[166,215],"m":"ldx","o":"music_v3_live_pulse_start_lo","oa":215,"x":[21593]},{"a":18546,"t":"code","b":[164,216],"m":"ldy","o":"music_v3_live_pulse_start_hi","oa":216},{"a":18548,"l":"set_v3_pulse","c":"Voice 3: X/Y become the current pulse width $2D/$2E and the pulse step counters $E2/$E3 are reloaded from $CF/$D0. Used at the note start ($504F) and by the sweep ($545F, and $5459 via $4870).","t":"code","b":[134,45],"m":"stx","o":"music_v3_pulse_lo","oa":45,"x":[20559,21599]},{"a":18550,"t":"code","b":[132,46],"m":"sty","o":"music_v3_pulse_hi","oa":46},{"a":18552,"t":"code","b":[165,207],"m":"lda","o":"music_v3_live_pulse_ticks1","oa":207},{"a":18554,"t":"code","b":[133,226],"m":"sta","o":"music_v3_live_pulse_left1","oa":226},{"a":18556,"t":"code","b":[165,208],"m":"lda","o":"music_v3_live_pulse_ticks2","oa":208},{"a":18558,"t":"code","b":[133,227],"m":"sta","o":"music_v3_live_pulse_left2","oa":227},{"a":18560,"t":"code","b":[96],"m":"rts"},{"a":18561,"l":"restart_filter_sweep","c":"Filter sweep restart: X/Y and the current cutoff $51/$52 take the program's start cutoff $4F/$50, then falls into reload_filter_counts.","t":"code","b":[166,79],"m":"ldx","o":"music_filter_start_lo","oa":79,"x":[19759,19784]},{"a":18563,"t":"code","b":[164,80],"m":"ldy","o":"music_filter_start_hi","oa":80},{"a":18565,"t":"code","b":[134,81],"m":"stx","o":"music_filter_cutoff_lo","oa":81},{"a":18567,"t":"code","b":[132,82],"m":"sty","o":"music_filter_cutoff_hi","oa":82},{"a":18569,"l":"reload_filter_counts","c":"Filter sweep: reload the four step counters $53-$56 from $49-$4C (the cutoff carries on from where it is). Used when the sweep repeats ($4D35) and through $4881 when it restarts ($4D2F) or a program starts ($4D48).","t":"code","b":[165,73],"m":"lda","o":"music_filter_ticks1","oa":73,"x":[19765]},{"a":18571,"t":"code","b":[133,83],"m":"sta","o":"music_filter_left1","oa":83},{"a":18573,"t":"code","b":[165,74],"m":"lda","o":"music_filter_ticks2","oa":74},{"a":18575,"t":"code","b":[133,84],"m":"sta","o":"music_filter_left2","oa":84},{"a":18577,"t":"code","b":[165,75],"m":"lda","o":"music_filter_ticks3","oa":75},{"a":18579,"t":"code","b":[133,85],"m":"sta","o":"music_filter_left3","oa":85},{"a":18581,"t":"code","b":[165,76],"m":"lda","o":"music_filter_ticks4","oa":76},{"a":18583,"t":"code","b":[133,86],"m":"sta","o":"music_filter_left4","oa":86},{"a":18585,"t":"code","b":[96],"m":"rts"},{"a":18586,"l":"restart_v1_pitch","c":"Voice 1 pitch steps restart: the current frequency $2F/$30 goes back to the note's frequency $46B5/$46B6, then falls into reload_v1_pitch_counts.","t":"code","b":[174,181,70],"m":"ldx","o":"music_v1_live_note_freq_lo","oa":18101,"x":[20060,21085]},{"a":18589,"t":"code","b":[172,182,70],"m":"ldy","o":"music_v1_live_note_freq_hi","oa":18102},{"a":18592,"t":"code","b":[134,47],"m":"stx","o":"music_v1_freq_lo","oa":47},{"a":18594,"t":"code","b":[132,48],"m":"sty","o":"music_v1_freq_hi","oa":48},{"a":18596,"l":"reload_v1_pitch_counts","c":"Voice 1: reload the four pitch step counters $46BA-$46BD from live bytes 8-11 ($46A5-$46A8). Used at the note start ($4E5C via $489A) and when the steps repeat ($5263) or restart ($525D via $489A).","t":"code","b":[173,168,70],"m":"lda","o":"music_v1_live_pitch_ticks4","oa":18088,"x":[21091]},{"a":18599,"t":"code","b":[141,189,70],"m":"sta","o":"music_v1_live_pitch_left4","oa":18109},{"a":18602,"t":"code","b":[173,167,70],"m":"lda","o":"music_v1_live_pitch_ticks3","oa":18087},{"a":18605,"t":"code","b":[141,188,70],"m":"sta","o":"music_v1_live_pitch_left3","oa":18108},{"a":18608,"t":"code","b":[173,166,70],"m":"lda","o":"music_v1_live_pitch_ticks2","oa":18086},{"a":18611,"t":"code","b":[141,187,70],"m":"sta","o":"music_v1_live_pitch_left2","oa":18107},{"a":18614,"t":"code","b":[173,165,70],"m":"lda","o":"music_v1_live_pitch_ticks1","oa":18085},{"a":18617,"t":"code","b":[141,186,70],"m":"sta","o":"music_v1_live_pitch_left1","oa":18106},{"a":18620,"t":"code","b":[96],"m":"rts"},{"a":18621,"l":"restart_v2_pitch","c":"Voice 2 pitch steps restart: current frequency $15/$16 = the note's frequency $46D8/$46D9, then falls into reload_v2_pitch_counts.","t":"code","b":[174,216,70],"m":"ldx","o":"music_v2_live_note_freq_lo","oa":18136,"x":[20393,21451]},{"a":18624,"t":"code","b":[172,217,70],"m":"ldy","o":"music_v2_live_note_freq_hi","oa":18137},{"a":18627,"t":"code","b":[134,21],"m":"stx","o":"music_v2_freq_lo","oa":21},{"a":18629,"t":"code","b":[132,22],"m":"sty","o":"music_v2_freq_hi","oa":22},{"a":18631,"l":"reload_v2_pitch_counts","c":"Voice 2: reload the pitch step counters $46DD-$46E0 from live bytes 8-11 ($46C8-$46CB). Used at the note start ($4FA9 via $48BD) and by the steps ($53D1, $53CB).","t":"code","b":[173,203,70],"m":"lda","o":"music_v2_live_pitch_ticks4","oa":18123,"x":[21457]},{"a":18634,"t":"code","b":[141,224,70],"m":"sta","o":"music_v2_live_pitch_left4","oa":18144},{"a":18637,"t":"code","b":[173,202,70],"m":"lda","o":"music_v2_live_pitch_ticks3","oa":18122},{"a":18640,"t":"code","b":[141,223,70],"m":"sta","o":"music_v2_live_pitch_left3","oa":18143},{"a":18643,"t":"code","b":[173,201,70],"m":"lda","o":"music_v2_live_pitch_ticks2","oa":18121},{"a":18646,"t":"code","b":[141,222,70],"m":"sta","o":"music_v2_live_pitch_left2","oa":18142},{"a":18649,"t":"code","b":[173,200,70],"m":"lda","o":"music_v2_live_pitch_ticks1","oa":18120},{"a":18652,"t":"code","b":[141,221,70],"m":"sta","o":"music_v2_live_pitch_left1","oa":18141},{"a":18655,"t":"code","b":[96],"m":"rts"},{"a":18656,"l":"restart_v3_pitch","c":"Voice 3 pitch steps restart: current frequency $17/$18 = the note's frequency $D9/$DA, then falls into reload_v3_pitch_counts.","t":"code","b":[166,217],"m":"ldx","o":"music_v3_live_note_freq_lo","oa":217,"x":[20684,21767]},{"a":18658,"t":"code","b":[164,218],"m":"ldy","o":"music_v3_live_note_freq_hi","oa":218},{"a":18660,"t":"code","b":[134,23],"m":"stx","o":"music_v3_freq_lo","oa":23},{"a":18662,"t":"code","b":[132,24],"m":"sty","o":"music_v3_freq_hi","oa":24},{"a":18664,"l":"reload_v3_pitch_counts","c":"Voice 3: reload the pitch step counters $DE-$E1 from live bytes 8-11 ($C9-$CC). Used at the note start ($50CC via $48E0) and by the steps ($550D, $5507).","t":"code","b":[165,204],"m":"lda","o":"music_v3_live_pitch_ticks4","oa":204,"x":[21773]},{"a":18666,"t":"code","b":[133,225],"m":"sta","o":"music_v3_live_pitch_left4","oa":225},{"a":18668,"t":"code","b":[165,203],"m":"lda","o":"music_v3_live_pitch_ticks3","oa":203},{"a":18670,"t":"code","b":[133,224],"m":"sta","o":"music_v3_live_pitch_left3","oa":224},{"a":18672,"t":"code","b":[165,202],"m":"lda","o":"music_v3_live_pitch_ticks2","oa":202},{"a":18674,"t":"code","b":[133,223],"m":"sta","o":"music_v3_live_pitch_left2","oa":223},{"a":18676,"t":"code","b":[165,201],"m":"lda","o":"music_v3_live_pitch_ticks1","oa":201},{"a":18678,"t":"code","b":[133,222],"m":"sta","o":"music_v3_live_pitch_left1","oa":222},{"a":18680,"t":"code","b":[96],"m":"rts"},{"a":18681,"l":"v1_cmd_call_transposed","c":"Voice 1 command $C6 t lo hi: set the transpose $10 to t, then call like $C2 with a return address 4 bytes on (the BIT $03A9 at $48FE skips $C2's LDA #$03).","t":"code","b":[133,16],"m":"sta","o":"music_v1_transpose","oa":16,"x":[17926]},{"a":18683,"t":"code","b":[200],"m":"iny"},{"a":18684,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":18686,"s":"BIT only skips the next two bytes; entered at $48FF (v1_cmd_call, command $C2) they are LDA #$03","t":"code","b":[44,169,3],"m":"bit","o":"skip_operand_03a9","oa":937},{"a":18687,"t":"note","l":"v1_cmd_call","c":"Voice 1 command $C2 lo hi: call the pattern at hi:lo. Pushes the address 3 bytes on (low at $E4 + level, high at $E9 + level; the level in $0D runs from 4 down to 0) and reads on at hi:lo. This address is the operand of the BIT at $48FE; entered here the bytes read LDA #$03.","note":"inside the item at $48FE","x":[17922]},{"a":18689,"t":"code","b":[166,13],"m":"ldx","o":"music_v1_stack_index","oa":13},{"a":18691,"t":"code","b":[24],"m":"clc"},{"a":18692,"t":"code","b":[101,4],"m":"adc","o":"music_v1_track_lo","oa":4},{"a":18694,"t":"code","b":[149,228],"m":"sta","o":"music_v1_return_lo_0,x","oa":228},{"a":18696,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":18698,"t":"code","b":[101,5],"m":"adc","o":"music_v1_track_hi","oa":5},{"a":18700,"t":"code","b":[149,233],"m":"sta","o":"music_v1_return_hi_0,x","oa":233},{"a":18702,"t":"code","b":[198,13],"m":"dec","o":"music_v1_stack_index","oa":13},{"a":18704,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":18706,"t":"code","b":[170],"m":"tax"},{"a":18707,"t":"code","b":[200],"m":"iny"},{"a":18708,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":18710,"t":"code","b":[134,4],"m":"stx","o":"music_v1_track_lo","oa":4},{"a":18712,"t":"code","b":[133,5],"m":"sta","o":"music_v1_track_hi","oa":5},{"a":18714,"t":"code","b":[76,100,77],"m":"jmp","o":"j_4D64","oa":19812},{"a":18717,"l":"v1_cmd_machine_code","c":"Voice 1 command $D6 lo hi: call the machine code at hi:lo (JMP ($0013)) with $4D5A pushed as the return address, so that its RTS lands on $4D5B: the voice steps 3 bytes on and reads its next event. The title tune uses it ($604D calls $5F2E).","t":"code","b":[169,77],"m":"lda","o":"#$4D","x":[17942]},{"a":18719,"t":"code","b":[72],"m":"pha"},{"a":18720,"t":"code","b":[169,90],"m":"lda","o":"#$5A"},{"a":18722,"t":"code","b":[72],"m":"pha"},{"a":18723,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":18725,"t":"code","b":[133,19],"m":"sta","o":"music_ptr_lo","oa":19},{"a":18727,"t":"code","b":[200],"m":"iny"},{"a":18728,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":18730,"t":"code","b":[133,20],"m":"sta","o":"music_ptr_hi","oa":20},{"a":18732,"t":"code","b":[108,19,0],"m":"jmp","o":"(music_ptr_lo)","oa":19},{"a":18735,"l":"v1_cmd_set_inst_word","c":"Voice 1 command $DA i lo hi: store the word lo hi at template bytes i and i+1 ($87 + i), for example an arpeggio table (i = 8) or pitch step 1 (i = 0).","t":"code","b":[170],"m":"tax","x":[17946]},{"a":18736,"t":"code","b":[200],"m":"iny"},{"a":18737,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":18739,"t":"code","b":[149,135],"m":"sta","o":"music_v1_inst_pitch_step1_lo,x","oa":135},{"a":18741,"t":"code","b":[200],"m":"iny"},{"a":18742,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":18744,"t":"code","b":[149,136],"m":"sta","o":"music_v1_inst_pitch_step1_hi,x","oa":136},{"a":18746,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":18748,"t":"code","b":[76,93,77],"m":"jmp","o":"j_4D5D","oa":19805},{"a":18751,"l":"v1_cmd_set_live_word","c":"Voice 1 command $DC i lo hi: store the word at live bytes i and i+1 ($469D + i), which changes the note already sounding (i = 6 pitch step 4, i = $1B gate and release times).","t":"code","b":[170],"m":"tax","x":[17948]},{"a":18752,"t":"code","b":[200],"m":"iny"},{"a":18753,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":18755,"t":"code","b":[157,157,70],"m":"sta","o":"music_v1_live_pitch_step1_lo,x","oa":18077},{"a":18758,"t":"code","b":[200],"m":"iny"},{"a":18759,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":18761,"t":"code","b":[157,158,70],"m":"sta","o":"music_v1_live_pitch_step1_hi,x","oa":18078},{"a":18764,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":18766,"t":"code","b":[76,93,77],"m":"jmp","o":"j_4D5D","oa":19805},{"a":18769,"l":"v1_cmd_filter_program","c":"Voice 1 command $E0 lo hi: copy the 16-byte filter program at hi:lo into $31-$40 (four cutoff steps, their tick counts, delay, mode and start cutoff; see $4D3B) through the operand of the LDA at $495C. It is started by the filter voice's next note, or at once by the tune's own code at $5AFF.","t":"code","b":[141,93,73],"m":"sta","o":"op_v1_filter_src_lo","oa":18781,"x":[17952]},{"a":18772,"t":"code","b":[200],"m":"iny"},{"a":18773,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":18775,"t":"code","b":[141,94,73],"m":"sta","o":"op_v1_filter_src_hi","oa":18782},{"a":18778,"t":"code","b":[162,15],"m":"ldx","o":"#$0F"},{"a":18780,"l":"b_495C","s":"operand rewritten by $4951/$4957: the filter program's address, not $DDDD","t":"code","b":[189,221,221],"m":"lda","o":"$DDDD,x","x":[18786]},{"a":18781,"t":"note","l":"op_v1_filter_src_lo","c":"Low byte of the LDA $DDDD,X operand at $495C: the address of the filter program that voice 1's command $E0 copies, written at $4951.","note":"inside the item at $495C","x":[18769]},{"a":18782,"t":"note","l":"op_v1_filter_src_hi","c":"High byte of the LDA operand at $495C, written at $4957 (voice 1 command $E0).","note":"inside the item at $495C","x":[18775]},{"a":18783,"t":"code","b":[149,49],"m":"sta","o":"music_filter_program,x","oa":49},{"a":18785,"t":"code","b":[202],"m":"dex"},{"a":18786,"t":"code","b":[16,248],"m":"bpl","o":"b_495C","oa":18780},{"a":18788,"t":"code","b":[76,91,77],"m":"jmp","o":"v1_next_event","oa":19803},{"a":18791,"l":"v1_cmd_load_inst","c":"Voice 1 command $D0 n lo hi: copy n + 1 bytes from hi:lo into the voice 1 instrument template from $87 (n = $1C loads a whole 29-byte instrument), through the operand of the LDA at $4974.","t":"code","b":[170],"m":"tax","x":[17936]},{"a":18792,"t":"code","b":[200],"m":"iny"},{"a":18793,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":18795,"t":"code","b":[141,117,73],"m":"sta","o":"op_v1_inst_src_lo","oa":18805},{"a":18798,"t":"code","b":[200],"m":"iny"},{"a":18799,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":18801,"t":"code","b":[141,118,73],"m":"sta","o":"op_v1_inst_src_hi","oa":18806},{"a":18804,"l":"b_4974","s":"operand rewritten by $496B/$4971: the instrument's address, not $DDDD","t":"code","b":[189,221,221],"m":"lda","o":"$DDDD,x","x":[18810]},{"a":18805,"t":"note","l":"op_v1_inst_src_lo","c":"Low byte of the LDA $DDDD,X operand at $4974: the instrument address of voice 1's command $D0, written at $496B.","note":"inside the item at $4974","x":[18795]},{"a":18806,"t":"note","l":"op_v1_inst_src_hi","c":"High byte of the LDA operand at $4974, written at $4971 (voice 1 command $D0).","note":"inside the item at $4974","x":[18801]},{"a":18807,"t":"code","b":[149,135],"m":"sta","o":"music_v1_inst_pitch_step1_lo,x","oa":135},{"a":18809,"t":"code","b":[202],"m":"dex"},{"a":18810,"t":"code","b":[16,248],"m":"bpl","o":"b_4974","oa":18804},{"a":18812,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":18814,"t":"code","b":[76,93,77],"m":"jmp","o":"j_4D5D","oa":19805},{"a":18817,"l":"v1_cmd_loop_start","c":"Voice 1 command $CC n: start of a repeated section. Pushes the address after the command and the count n ($EE + level) on the voice's stack; the matching $CE plays the section n times (n = 0 would give 256).","t":"code","b":[166,13],"m":"ldx","o":"music_v1_stack_index","oa":13,"x":[17932]},{"a":18819,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":18821,"t":"code","b":[24],"m":"clc"},{"a":18822,"t":"code","b":[101,4],"m":"adc","o":"music_v1_track_lo","oa":4},{"a":18824,"t":"code","b":[149,228],"m":"sta","o":"music_v1_return_lo_0,x","oa":228},{"a":18826,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":18828,"t":"code","b":[101,5],"m":"adc","o":"music_v1_track_hi","oa":5},{"a":18830,"t":"code","b":[149,233],"m":"sta","o":"music_v1_return_hi_0,x","oa":233},{"a":18832,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":18834,"t":"code","b":[149,238],"m":"sta","o":"music_v1_loop_count_0,x","oa":238},{"a":18836,"t":"code","b":[198,13],"m":"dec","o":"music_v1_stack_index","oa":13},{"a":18838,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":18840,"t":"code","b":[76,93,77],"m":"jmp","o":"j_4D5D","oa":19805},{"a":18843,"l":"v1_cmd_load_pitch","c":"Voice 1 command $E8 lo hi: copy 14 bytes from hi:lo into template bytes 0-13 ($87-$94): a pitch block (four steps, their tick counts, delay and mode, or an arpeggio set-up), through the operand of the LDA at $49A6.","t":"code","b":[141,167,73],"m":"sta","o":"op_v1_pitch_src_lo","oa":18855,"x":[17960]},{"a":18846,"t":"code","b":[200],"m":"iny"},{"a":18847,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":18849,"t":"code","b":[141,168,73],"m":"sta","o":"op_v1_pitch_src_hi","oa":18856},{"a":18852,"t":"code","b":[162,13],"m":"ldx","o":"#$0D"},{"a":18854,"l":"b_49A6","s":"operand rewritten by $499B/$49A1: the pitch block's address, not $DDDD","t":"code","b":[189,221,221],"m":"lda","o":"$DDDD,x","x":[18860]},{"a":18855,"t":"note","l":"op_v1_pitch_src_lo","c":"Low byte of the LDA $DDDD,X operand at $49A6: the pitch block address of voice 1's command $E8, written at $499B. One of the operands that differ between cracks' title screens (orientation.md).","note":"inside the item at $49A6","x":[18843]},{"a":18856,"t":"note","l":"op_v1_pitch_src_hi","c":"High byte of the LDA operand at $49A6, written at $49A1 (voice 1 command $E8).","note":"inside the item at $49A6","x":[18849]},{"a":18857,"t":"code","b":[149,135],"m":"sta","o":"music_v1_inst_pitch_step1_lo,x","oa":135},{"a":18859,"t":"code","b":[202],"m":"dex"},{"a":18860,"t":"code","b":[16,248],"m":"bpl","o":"b_49A6","oa":18854},{"a":18862,"t":"code","b":[76,91,77],"m":"jmp","o":"v1_next_event","oa":19803},{"a":18865,"l":"v1_cmd_jump_transposed","c":"Voice 1 command $C8 t lo hi: set the transpose $10 to t and continue at hi:lo (through $49B4).","t":"code","b":[133,16],"m":"sta","o":"music_v1_transpose","oa":16,"x":[17928]},{"a":18867,"t":"code","b":[200],"m":"iny"},{"a":18868,"l":"v1_cmd_jump","c":"Voice 1 command $C4 lo hi: continue reading at hi:lo; the tracks that repeat end with one.","t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4,"x":[17924]},{"a":18870,"t":"code","b":[170],"m":"tax"},{"a":18871,"t":"code","b":[200],"m":"iny"},{"a":18872,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":18874,"t":"code","b":[134,4],"m":"stx","o":"music_v1_track_lo","oa":4},{"a":18876,"t":"code","b":[133,5],"m":"sta","o":"music_v1_track_hi","oa":5},{"a":18878,"t":"code","b":[76,100,77],"m":"jmp","o":"j_4D64","oa":19812},{"a":18881,"l":"v1_cmd_filter_off","c":"Voice 1 command $E2: filter off. Stops the filter sweep ($4E = 0), $D417 = $F0 (resonance 15, no voice through the filter), filter voice $57 = 3 (none) and $D418 = $1F (low-pass, volume 15; the band routine rewrites $D418 from $45CF and $B94D later in the frame).","t":"code","b":[136],"m":"dey","x":[17954]},{"a":18882,"t":"code","b":[132,78],"m":"sty","o":"music_filter_sweep_mode","oa":78},{"a":18884,"t":"code","b":[162,3],"m":"ldx","o":"#$03"},{"a":18886,"t":"code","b":[160,240],"m":"ldy","o":"#$F0"},{"a":18888,"s":"BIT only skips the next two bytes; v1_cmd_filter_on enters at $49C9, where they are LDY #$F1","t":"code","b":[44,160,241],"m":"bit","o":"font_small_glyphs_34_3f","oa":61856},{"a":18891,"t":"code","b":[140,23,212],"m":"sty","o":"sid_filter_resonance"},{"a":18894,"t":"code","b":[134,87],"m":"stx","o":"music_filter_voice","oa":87},{"a":18896,"t":"code","b":[169,31],"m":"lda","o":"#$1F"},{"a":18898,"t":"code","b":[141,24,212],"m":"sta","o":"sid_filter_mode_volume"},{"a":18901,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":18903,"t":"code","b":[76,93,77],"m":"jmp","o":"j_4D5D","oa":19805},{"a":18906,"l":"v1_cmd_filter_on","c":"Voice 1 command $DE: filter voice 1. $D417 = $F1 (resonance 15, voice 1 filtered), $57 = 0 (voice 1's notes restart the filter program), $D418 = $1F. It jumps into $49C1's code at $49C9, inside the BIT at $49C8, where the bytes read LDY #$F1.","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[17950]},{"a":18908,"t":"code","b":[240,235],"m":"beq","o":"b_49C9","oa":18889},{"a":18910,"l":"v1_cmd_pitch_mode7","c":"Voice 1 command $E6: pitch mode 7 (template byte 13, $94): repeating steps, with step 4 added during the delay. The BIT $05A9 at $49E0 skips $E4's LDA #$05.","t":"code","b":[169,7],"m":"lda","o":"#$07","x":[17958]},{"a":18912,"s":"BIT only skips the next two bytes; entered at $49E1 (v1_cmd_pitch_mode5, command $E4) they are LDA #$05","t":"code","b":[44,169,5],"m":"bit","o":"skip_operand_05a9","oa":1449},{"a":18913,"t":"note","l":"v1_cmd_pitch_mode5","c":"Voice 1 command $E4: pitch mode 5, repeating steps (a vibrato). This address is inside the BIT at $49E0; entered here the bytes read LDA #$05.","note":"inside the item at $49E0","x":[17956]},{"a":18915,"t":"code","b":[133,148],"m":"sta","o":"music_v1_inst_pitch_mode","oa":148},{"a":18917,"t":"code","b":[152],"m":"tya"},{"a":18918,"t":"code","b":[76,93,77],"m":"jmp","o":"j_4D5D","oa":19805},{"a":18921,"l":"v1_cmd_set_inst_byte","c":"Voice 1 command $CA i v: set template byte i ($87 + i) to v (for example i = $18 control, $1A sustain/release, $1B gate time, $0D pitch mode).","t":"code","b":[170],"m":"tax","x":[17930]},{"a":18922,"t":"code","b":[200],"m":"iny"},{"a":18923,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":18925,"t":"code","b":[149,135],"m":"sta","o":"music_v1_inst_pitch_step1_lo,x","oa":135},{"a":18927,"t":"code","b":[76,91,77],"m":"jmp","o":"v1_next_event","oa":19803},{"a":18930,"l":"v1_cmd_loop_end","c":"Voice 1 command $CE: end of a repeated section. Counts down the count of the innermost level ($EF + index); while it is not 0 the voice goes back to the address stored by $CC, otherwise the level is popped and the voice reads on.","t":"code","b":[166,13],"m":"ldx","o":"music_v1_stack_index","oa":13,"x":[17934]},{"a":18932,"t":"code","b":[214,239],"m":"dec","o":"music_v1_loop_counts,x","oa":239},{"a":18934,"t":"code","b":[240,11],"m":"beq","o":"b_4A03","oa":18947},{"a":18936,"t":"code","b":[180,229],"m":"ldy","o":"music_v1_return_lo,x","oa":229},{"a":18938,"t":"code","b":[181,234],"m":"lda","o":"music_v1_return_hi,x","oa":234},{"a":18940,"t":"code","b":[132,4],"m":"sty","o":"music_v1_track_lo","oa":4},{"a":18942,"t":"code","b":[133,5],"m":"sta","o":"music_v1_track_hi","oa":5},{"a":18944,"t":"code","b":[76,100,77],"m":"jmp","o":"j_4D64","oa":19812},{"a":18947,"l":"b_4A03","t":"code","b":[230,13],"m":"inc","o":"music_v1_stack_index","oa":13,"x":[18934]},{"a":18949,"t":"code","b":[152],"m":"tya"},{"a":18950,"t":"code","b":[76,93,77],"m":"jmp","o":"j_4D5D","oa":19805},{"a":18953,"l":"v1_cmd_return","c":"Voice 1 command $C0: return from a pattern to the address pushed by $C2 or $C6; with the stack empty (index 4) the voice's track ends instead: $59 goes from 1 to 0 and the tick routine stops reading. First word of the table at $4600.","t":"code","b":[164,13],"m":"ldy","o":"music_v1_stack_index","oa":13,"x":[17920]},{"a":18955,"t":"code","b":[192,4],"m":"cpy","o":"#$04"},{"a":18957,"t":"code","b":[240,14],"m":"beq","o":"b_4A1D","oa":18973},{"a":18959,"t":"code","b":[230,13],"m":"inc","o":"music_v1_stack_index","oa":13},{"a":18961,"t":"code","b":[182,229],"m":"ldx","o":"music_v1_return_lo,y","oa":229},{"a":18963,"t":"code","b":[185,234,0],"m":"lda","o":"music_v1_return_hi,y","oa":234},{"a":18966,"t":"code","b":[134,4],"m":"stx","o":"music_v1_track_lo","oa":4},{"a":18968,"t":"code","b":[133,5],"m":"sta","o":"music_v1_track_hi","oa":5},{"a":18970,"t":"code","b":[76,100,77],"m":"jmp","o":"j_4D64","oa":19812},{"a":18973,"l":"b_4A1D","t":"code","b":[198,89],"m":"dec","o":"music_v1_active","oa":89,"x":[18957]},{"a":18975,"t":"code","b":[96],"m":"rts"},{"a":18976,"l":"v1_cmd_set_live_byte","c":"Voice 1 command $D4 i v: set live byte i ($469D + i) to v; with i = $1B, the gate time, it releases the sounding note after v ticks.","t":"code","b":[170],"m":"tax","x":[17940]},{"a":18977,"t":"code","b":[200],"m":"iny"},{"a":18978,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":18980,"t":"code","b":[157,157,70],"m":"sta","o":"music_v1_live_pitch_step1_lo,x","oa":18077},{"a":18983,"t":"code","b":[76,91,77],"m":"jmp","o":"v1_next_event","oa":19803},{"a":18986,"l":"v1_cmd_transpose","c":"Voice 1 command $D8 t: set the transpose $10, added to every note number, to t.","t":"code","b":[133,16],"m":"sta","o":"music_v1_transpose","oa":16,"x":[17944]},{"a":18988,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":18990,"t":"code","b":[76,93,77],"m":"jmp","o":"j_4D5D","oa":19805},{"a":18993,"l":"v1_cmd_load_envelope","c":"Voice 1 command $D2 lo hi: copy the 5-byte envelope block at hi:lo into template bytes 24-28 ($9F-$A3): control, attack/decay, sustain/release, gate time, release time.","t":"code","b":[133,19],"m":"sta","o":"music_ptr_lo","oa":19,"x":[17938]},{"a":18995,"t":"code","b":[200],"m":"iny"},{"a":18996,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":18998,"t":"code","b":[133,20],"m":"sta","o":"music_ptr_hi","oa":20},{"a":19000,"t":"code","b":[160,4],"m":"ldy","o":"#$04"},{"a":19002,"l":"b_4A3A","t":"code","b":[177,19],"m":"lda","o":"(music_ptr_lo),y","oa":19,"x":[19008]},{"a":19004,"t":"code","b":[153,159,0],"m":"sta","o":"music_v1_inst_control,y","oa":159},{"a":19007,"t":"code","b":[136],"m":"dey"},{"a":19008,"t":"code","b":[16,248],"m":"bpl","o":"b_4A3A","oa":19002},{"a":19010,"t":"code","b":[76,91,77],"m":"jmp","o":"v1_next_event","oa":19803},{"a":19013,"l":"v2_cmd_call_transposed","c":"Voice 2 command $C6 t lo hi: set the transpose $11 to t and call hi:lo with a return 4 bytes on (the BIT $03A9 at $4A4A skips $C2's LDA #$03).","t":"code","b":[133,17],"m":"sta","o":"music_v2_transpose","oa":17,"x":[17968]},{"a":19015,"t":"code","b":[200],"m":"iny"},{"a":19016,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":19018,"s":"BIT only skips the next two bytes; entered at $4A4B (v2_cmd_call, command $C2) they are LDA #$03","t":"code","b":[44,169,3],"m":"bit","o":"skip_operand_03a9","oa":937},{"a":19019,"t":"note","l":"v2_cmd_call","c":"Voice 2 command $C2 lo hi: call the pattern at hi:lo, pushing the address 3 bytes on at $F3 + level (low) and $F8 + level (high), the level in $0E from 4 down to 0. Operand byte of the BIT at $4A4A; entered here it reads LDA #$03.","note":"inside the item at $4A4A","x":[17964]},{"a":19021,"t":"code","b":[166,14],"m":"ldx","o":"music_v2_stack_index","oa":14},{"a":19023,"t":"code","b":[24],"m":"clc"},{"a":19024,"t":"code","b":[101,6],"m":"adc","o":"music_v2_track_lo","oa":6},{"a":19026,"t":"code","b":[149,243],"m":"sta","o":"music_v2_return_lo_0,x","oa":243},{"a":19028,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":19030,"t":"code","b":[101,7],"m":"adc","o":"music_v2_track_hi","oa":7},{"a":19032,"t":"code","b":[149,248],"m":"sta","o":"music_v2_return_hi_0,x","oa":248},{"a":19034,"t":"code","b":[198,14],"m":"dec","o":"music_v2_stack_index","oa":14},{"a":19036,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":19038,"t":"code","b":[170],"m":"tax"},{"a":19039,"t":"code","b":[200],"m":"iny"},{"a":19040,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":19042,"t":"code","b":[134,6],"m":"stx","o":"music_v2_track_lo","oa":6},{"a":19044,"t":"code","b":[133,7],"m":"sta","o":"music_v2_track_hi","oa":7},{"a":19046,"t":"code","b":[76,156,78],"m":"jmp","o":"j_4E9C","oa":20124},{"a":19049,"l":"v2_cmd_machine_code","c":"Voice 2 command $D6 lo hi: call the machine code at hi:lo with $4E92 pushed, so it returns to $4E93 (step 3 bytes, read the next event). No tune uses it on voice 2.","t":"code","b":[169,78],"m":"lda","o":"#$4E","x":[17984]},{"a":19051,"t":"code","b":[72],"m":"pha"},{"a":19052,"t":"code","b":[169,146],"m":"lda","o":"#$92"},{"a":19054,"t":"code","b":[72],"m":"pha"},{"a":19055,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":19057,"t":"code","b":[133,19],"m":"sta","o":"music_ptr_lo","oa":19},{"a":19059,"t":"code","b":[200],"m":"iny"},{"a":19060,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":19062,"t":"code","b":[133,20],"m":"sta","o":"music_ptr_hi","oa":20},{"a":19064,"t":"code","b":[108,19,0],"m":"jmp","o":"(music_ptr_lo)","oa":19},{"a":19067,"l":"v2_cmd_set_inst_word","c":"Voice 2 command $DA i lo hi: store the word at template bytes i and i+1 ($4680 + i); tune 6 changes its arpeggio table this way ($5727-$575D).","t":"code","b":[170],"m":"tax","x":[17988]},{"a":19068,"t":"code","b":[200],"m":"iny"},{"a":19069,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":19071,"t":"code","b":[157,128,70],"m":"sta","o":"music_v2_inst_pitch_step1_lo,x","oa":18048},{"a":19074,"t":"code","b":[200],"m":"iny"},{"a":19075,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":19077,"t":"code","b":[157,129,70],"m":"sta","o":"music_v2_inst_pitch_step1_hi,x","oa":18049},{"a":19080,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":19082,"t":"code","b":[76,149,78],"m":"jmp","o":"j_4E95","oa":20117},{"a":19085,"l":"v2_cmd_set_live_word","c":"Voice 2 command $DC i lo hi: store the word at live bytes i and i+1 ($46C0 + i), changing the sounding note.","t":"code","b":[170],"m":"tax","x":[17990]},{"a":19086,"t":"code","b":[200],"m":"iny"},{"a":19087,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":19089,"t":"code","b":[157,192,70],"m":"sta","o":"music_v2_live_pitch_step1_lo,x","oa":18112},{"a":19092,"t":"code","b":[200],"m":"iny"},{"a":19093,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":19095,"t":"code","b":[157,193,70],"m":"sta","o":"music_v2_live_pitch_step1_hi,x","oa":18113},{"a":19098,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":19100,"t":"code","b":[76,149,78],"m":"jmp","o":"j_4E95","oa":20117},{"a":19103,"l":"v2_cmd_load_inst","c":"Voice 2 command $D0 n lo hi: copy n + 1 bytes from hi:lo into the template from $4680, through the operand of the LDA at $4AAC.","t":"code","b":[170],"m":"tax","x":[17978]},{"a":19104,"t":"code","b":[200],"m":"iny"},{"a":19105,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":19107,"t":"code","b":[141,173,74],"m":"sta","o":"op_v2_inst_src_lo","oa":19117},{"a":19110,"t":"code","b":[200],"m":"iny"},{"a":19111,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":19113,"t":"code","b":[141,174,74],"m":"sta","o":"op_v2_inst_src_hi","oa":19118},{"a":19116,"l":"b_4AAC","s":"operand rewritten by $4AA3/$4AA9: the instrument's address, not $DDDD","t":"code","b":[189,221,221],"m":"lda","o":"$DDDD,x","x":[19123]},{"a":19117,"t":"note","l":"op_v2_inst_src_lo","c":"Low byte of the LDA $DDDD,X operand at $4AAC: the instrument address of voice 2's command $D0, written at $4AA3.","note":"inside the item at $4AAC","x":[19107]},{"a":19118,"t":"note","l":"op_v2_inst_src_hi","c":"High byte of the LDA operand at $4AAC, written at $4AA9 (voice 2 command $D0).","note":"inside the item at $4AAC","x":[19113]},{"a":19119,"t":"code","b":[157,128,70],"m":"sta","o":"music_v2_inst_pitch_step1_lo,x","oa":18048},{"a":19122,"t":"code","b":[202],"m":"dex"},{"a":19123,"t":"code","b":[16,247],"m":"bpl","o":"b_4AAC","oa":19116},{"a":19125,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":19127,"t":"code","b":[76,149,78],"m":"jmp","o":"j_4E95","oa":20117},{"a":19130,"l":"v2_cmd_loop_start","c":"Voice 2 command $CC n: start of a repeated section; the count goes to $4703 + level, the address to $F3/$F8 + level.","t":"code","b":[166,14],"m":"ldx","o":"music_v2_stack_index","oa":14,"x":[17974]},{"a":19132,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":19134,"t":"code","b":[24],"m":"clc"},{"a":19135,"t":"code","b":[101,6],"m":"adc","o":"music_v2_track_lo","oa":6},{"a":19137,"t":"code","b":[149,243],"m":"sta","o":"music_v2_return_lo_0,x","oa":243},{"a":19139,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":19141,"t":"code","b":[101,7],"m":"adc","o":"music_v2_track_hi","oa":7},{"a":19143,"t":"code","b":[149,248],"m":"sta","o":"music_v2_return_hi_0,x","oa":248},{"a":19145,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":19147,"t":"code","b":[157,3,71],"m":"sta","o":"music_v2_loop_count_0,x","oa":18179},{"a":19150,"t":"code","b":[198,14],"m":"dec","o":"music_v2_stack_index","oa":14},{"a":19152,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":19154,"t":"code","b":[76,149,78],"m":"jmp","o":"j_4E95","oa":20117},{"a":19157,"l":"v2_cmd_load_pitch","c":"Voice 2 command $E8 lo hi: copy 14 bytes from hi:lo into template bytes 0-13 ($4680-$468D), through the operand of the LDA at $4AE0.","t":"code","b":[141,225,74],"m":"sta","o":"op_v2_pitch_src_lo","oa":19169,"x":[18002]},{"a":19160,"t":"code","b":[200],"m":"iny"},{"a":19161,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":19163,"t":"code","b":[141,226,74],"m":"sta","o":"op_v2_pitch_src_hi","oa":19170},{"a":19166,"t":"code","b":[162,13],"m":"ldx","o":"#$0D"},{"a":19168,"l":"b_4AE0","s":"operand rewritten by $4AD5/$4ADB: the pitch block's address, not $DDDD","t":"code","b":[189,221,221],"m":"lda","o":"$DDDD,x","x":[19175]},{"a":19169,"t":"note","l":"op_v2_pitch_src_lo","c":"Low byte of the LDA $DDDD,X operand at $4AE0: the pitch block address of voice 2's command $E8, written at $4AD5.","note":"inside the item at $4AE0","x":[19157]},{"a":19170,"t":"note","l":"op_v2_pitch_src_hi","c":"High byte of the LDA operand at $4AE0, written at $4ADB (voice 2 command $E8).","note":"inside the item at $4AE0","x":[19163]},{"a":19171,"t":"code","b":[157,128,70],"m":"sta","o":"music_v2_inst_pitch_step1_lo,x","oa":18048},{"a":19174,"t":"code","b":[202],"m":"dex"},{"a":19175,"t":"code","b":[16,247],"m":"bpl","o":"b_4AE0","oa":19168},{"a":19177,"t":"code","b":[76,147,78],"m":"jmp","o":"v2_next_event","oa":20115},{"a":19180,"l":"v2_cmd_jump_transposed","c":"Voice 2 command $C8 t lo hi: set the transpose $11 and continue at hi:lo; tune 6's voice 2 loops with it ($5777).","t":"code","b":[133,17],"m":"sta","o":"music_v2_transpose","oa":17,"x":[17970]},{"a":19182,"t":"code","b":[200],"m":"iny"},{"a":19183,"l":"v2_cmd_jump","c":"Voice 2 command $C4 lo hi: continue reading at hi:lo.","t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6,"x":[17966]},{"a":19185,"t":"code","b":[170],"m":"tax"},{"a":19186,"t":"code","b":[200],"m":"iny"},{"a":19187,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":19189,"t":"code","b":[134,6],"m":"stx","o":"music_v2_track_lo","oa":6},{"a":19191,"t":"code","b":[133,7],"m":"sta","o":"music_v2_track_hi","oa":7},{"a":19193,"t":"code","b":[76,156,78],"m":"jmp","o":"j_4E9C","oa":20124},{"a":19196,"l":"v2_cmd_pitch_mode5","c":"Voice 2 command $E4: pitch mode 5 into template byte 13 ($468D). The code has a second entry at $4AFF (inside the BIT at $4AFE) that would store mode 7, but the table at $462A has no word for it.","t":"code","b":[169,5],"m":"lda","o":"#$05","x":[17998]},{"a":19198,"s":"BIT only skips the next two bytes; entered at $4AFF they would be LDA #$07 (mode 7), but no table word points there","t":"code","b":[44,169,7],"m":"bit","o":"skip_operand_07a9","oa":1961},{"a":19201,"t":"code","b":[141,141,70],"m":"sta","o":"music_v2_inst_pitch_mode","oa":18061},{"a":19204,"t":"code","b":[152],"m":"tya"},{"a":19205,"t":"code","b":[76,149,78],"m":"jmp","o":"j_4E95","oa":20117},{"a":19208,"l":"v2_cmd_set_inst_byte","c":"Voice 2 command $CA i v: set template byte i ($4680 + i) to v.","t":"code","b":[170],"m":"tax","x":[17972]},{"a":19209,"t":"code","b":[200],"m":"iny"},{"a":19210,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":19212,"t":"code","b":[157,128,70],"m":"sta","o":"music_v2_inst_pitch_step1_lo,x","oa":18048},{"a":19215,"t":"code","b":[76,147,78],"m":"jmp","o":"v2_next_event","oa":20115},{"a":19218,"l":"v2_cmd_loop_end","c":"Voice 2 command $CE: count down the innermost loop count ($4704 + index) and go back to the section start while it is not 0, else pop and read on.","t":"code","b":[166,14],"m":"ldx","o":"music_v2_stack_index","oa":14,"x":[17976]},{"a":19220,"t":"code","b":[222,4,71],"m":"dec","o":"music_v2_loop_counts,x","oa":18180},{"a":19223,"t":"code","b":[240,11],"m":"beq","o":"b_4B24","oa":19236},{"a":19225,"t":"code","b":[180,244],"m":"ldy","o":"music_v2_return_lo,x","oa":244},{"a":19227,"t":"code","b":[181,249],"m":"lda","o":"music_v2_return_hi,x","oa":249},{"a":19229,"t":"code","b":[132,6],"m":"sty","o":"music_v2_track_lo","oa":6},{"a":19231,"t":"code","b":[133,7],"m":"sta","o":"music_v2_track_hi","oa":7},{"a":19233,"t":"code","b":[76,156,78],"m":"jmp","o":"j_4E9C","oa":20124},{"a":19236,"l":"b_4B24","t":"code","b":[230,14],"m":"inc","o":"music_v2_stack_index","oa":14,"x":[19223]},{"a":19238,"t":"code","b":[152],"m":"tya"},{"a":19239,"t":"code","b":[76,149,78],"m":"jmp","o":"j_4E95","oa":20117},{"a":19242,"l":"v2_cmd_return","c":"Voice 2 command $C0: return from a pattern, or with the stack empty end the track ($5A goes to 0). First word of the table at $462A.","t":"code","b":[164,14],"m":"ldy","o":"music_v2_stack_index","oa":14,"x":[17962]},{"a":19244,"t":"code","b":[192,4],"m":"cpy","o":"#$04"},{"a":19246,"t":"code","b":[240,14],"m":"beq","o":"b_4B3E","oa":19262},{"a":19248,"t":"code","b":[230,14],"m":"inc","o":"music_v2_stack_index","oa":14},{"a":19250,"t":"code","b":[182,244],"m":"ldx","o":"music_v2_return_lo,y","oa":244},{"a":19252,"t":"code","b":[185,249,0],"m":"lda","o":"music_v2_return_hi,y","oa":249},{"a":19255,"t":"code","b":[134,6],"m":"stx","o":"music_v2_track_lo","oa":6},{"a":19257,"t":"code","b":[133,7],"m":"sta","o":"music_v2_track_hi","oa":7},{"a":19259,"t":"code","b":[76,156,78],"m":"jmp","o":"j_4E9C","oa":20124},{"a":19262,"l":"b_4B3E","t":"code","b":[198,90],"m":"dec","o":"music_v2_active","oa":90,"x":[19246]},{"a":19264,"t":"code","b":[96],"m":"rts"},{"a":19265,"l":"v2_cmd_transpose","c":"Voice 2 command $D8 t: set the transpose $11 to t.","t":"code","b":[133,17],"m":"sta","o":"music_v2_transpose","oa":17,"x":[17986]},{"a":19267,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":19269,"t":"code","b":[76,149,78],"m":"jmp","o":"j_4E95","oa":20117},{"a":19272,"l":"v2_cmd_set_live_byte","c":"Voice 2 command $D4 i v: set live byte i ($46C0 + i) to v.","t":"code","b":[170],"m":"tax","x":[17982]},{"a":19273,"t":"code","b":[200],"m":"iny"},{"a":19274,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":19276,"t":"code","b":[157,192,70],"m":"sta","o":"music_v2_live_pitch_step1_lo,x","oa":18112},{"a":19279,"t":"code","b":[76,147,78],"m":"jmp","o":"v2_next_event","oa":20115},{"a":19282,"l":"v2_cmd_load_envelope","c":"Voice 2 command $D2 lo hi: copy 5 bytes from hi:lo into template bytes 24-28 ($4698-$469C).","t":"code","b":[133,19],"m":"sta","o":"music_ptr_lo","oa":19,"x":[17980]},{"a":19284,"t":"code","b":[200],"m":"iny"},{"a":19285,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":19287,"t":"code","b":[133,20],"m":"sta","o":"music_ptr_hi","oa":20},{"a":19289,"t":"code","b":[160,4],"m":"ldy","o":"#$04"},{"a":19291,"l":"b_4B5B","t":"code","b":[177,19],"m":"lda","o":"(music_ptr_lo),y","oa":19,"x":[19297]},{"a":19293,"t":"code","b":[153,152,70],"m":"sta","o":"music_v2_inst_control,y","oa":18072},{"a":19296,"t":"code","b":[136],"m":"dey"},{"a":19297,"t":"code","b":[16,248],"m":"bpl","o":"b_4B5B","oa":19291},{"a":19299,"t":"code","b":[76,147,78],"m":"jmp","o":"v2_next_event","oa":20115},{"a":19302,"l":"v3_cmd_call_transposed","c":"Voice 3 command $C6 t lo hi: set the transpose $12 to t and call hi:lo with a return 4 bytes on (the BIT $03A9 at $4B6B skips $C2's LDA #$03).","t":"code","b":[133,18],"m":"sta","o":"music_v3_transpose","oa":18,"x":[18010]},{"a":19304,"t":"code","b":[200],"m":"iny"},{"a":19305,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":19307,"s":"BIT only skips the next two bytes; entered at $4B6C (v3_cmd_call, command $C2) they are LDA #$03","t":"code","b":[44,169,3],"m":"bit","o":"skip_operand_03a9","oa":937},{"a":19308,"t":"note","l":"v3_cmd_call","c":"Voice 3 command $C2 lo hi: call the pattern at hi:lo; the return address goes to $4708 + level (low) and $470D + level (high), the level in $0F from 4 down to 0. Operand byte of the BIT at $4B6B; entered here it reads LDA #$03.","note":"inside the item at $4B6B","x":[18006]},{"a":19310,"t":"code","b":[166,15],"m":"ldx","o":"music_v3_stack_index","oa":15},{"a":19312,"t":"code","b":[24],"m":"clc"},{"a":19313,"t":"code","b":[101,8],"m":"adc","o":"music_v3_track_lo","oa":8},{"a":19315,"t":"code","b":[157,8,71],"m":"sta","o":"music_v3_return_lo_0,x","oa":18184},{"a":19318,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":19320,"t":"code","b":[101,9],"m":"adc","o":"music_v3_track_hi","oa":9},{"a":19322,"t":"code","b":[157,13,71],"m":"sta","o":"music_v3_return_hi_0,x","oa":18189},{"a":19325,"t":"code","b":[198,15],"m":"dec","o":"music_v3_stack_index","oa":15},{"a":19327,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":19329,"t":"code","b":[170],"m":"tax"},{"a":19330,"t":"code","b":[200],"m":"iny"},{"a":19331,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":19333,"t":"code","b":[134,8],"m":"stx","o":"music_v3_track_lo","oa":8},{"a":19335,"t":"code","b":[133,9],"m":"sta","o":"music_v3_track_hi","oa":9},{"a":19337,"t":"code","b":[76,235,79],"m":"jmp","o":"j_4FEB","oa":20459},{"a":19340,"l":"v3_cmd_machine_code","c":"Voice 3 command $D6 lo hi: call the machine code at hi:lo with $4FE1 pushed, so it returns to $4FE2. Tunes 1 and 8 use it to call $5AFF.","t":"code","b":[169,79],"m":"lda","o":"#$4F","x":[18026]},{"a":19342,"t":"code","b":[72],"m":"pha"},{"a":19343,"t":"code","b":[169,225],"m":"lda","o":"#$E1"},{"a":19345,"t":"code","b":[72],"m":"pha"},{"a":19346,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":19348,"t":"code","b":[133,19],"m":"sta","o":"music_ptr_lo","oa":19},{"a":19350,"t":"code","b":[200],"m":"iny"},{"a":19351,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":19353,"t":"code","b":[133,20],"m":"sta","o":"music_ptr_hi","oa":20},{"a":19355,"t":"code","b":[108,19,0],"m":"jmp","o":"(music_ptr_lo)","oa":19},{"a":19358,"l":"v3_cmd_set_inst_word","c":"Voice 3 command $DA i lo hi: store the word at template bytes i and i+1 ($A4 + i).","t":"code","b":[170],"m":"tax","x":[18030]},{"a":19359,"t":"code","b":[200],"m":"iny"},{"a":19360,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":19362,"t":"code","b":[149,164],"m":"sta","o":"music_v3_inst_pitch_step1_lo,x","oa":164},{"a":19364,"t":"code","b":[200],"m":"iny"},{"a":19365,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":19367,"t":"code","b":[149,165],"m":"sta","o":"music_v3_inst_pitch_step1_hi,x","oa":165},{"a":19369,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":19371,"t":"code","b":[76,228,79],"m":"jmp","o":"j_4FE4","oa":20452},{"a":19374,"l":"v3_cmd_set_live_word","c":"Voice 3 command $DC i lo hi: store the word at live bytes i and i+1 ($C1 + i); tune 4 switches arpeggio tables this way ($5EAC-$5EBE).","t":"code","b":[170],"m":"tax","x":[18032]},{"a":19375,"t":"code","b":[200],"m":"iny"},{"a":19376,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":19378,"t":"code","b":[149,193],"m":"sta","o":"music_v3_live_pitch_step1_lo,x","oa":193},{"a":19380,"t":"code","b":[200],"m":"iny"},{"a":19381,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":19383,"t":"code","b":[149,194],"m":"sta","o":"music_v3_live_pitch_step1_hi,x","oa":194},{"a":19385,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":19387,"t":"code","b":[76,228,79],"m":"jmp","o":"j_4FE4","oa":20452},{"a":19390,"l":"v3_cmd_filter_program","c":"Voice 3 command $E0 lo hi: copy a 16-byte filter program into $31-$40, through the operand of the LDA at $4BC9.","t":"code","b":[141,202,75],"m":"sta","o":"op_v3_filter_src_lo","oa":19402,"x":[18036]},{"a":19393,"t":"code","b":[200],"m":"iny"},{"a":19394,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":19396,"t":"code","b":[141,203,75],"m":"sta","o":"op_v3_filter_src_hi","oa":19403},{"a":19399,"t":"code","b":[162,15],"m":"ldx","o":"#$0F"},{"a":19401,"l":"b_4BC9","s":"operand rewritten by $4BBE/$4BC4: the filter program's address, not $DDDD","t":"code","b":[189,221,221],"m":"lda","o":"$DDDD,x","x":[19407]},{"a":19402,"t":"note","l":"op_v3_filter_src_lo","c":"Low byte of the LDA $DDDD,X operand at $4BC9: the filter program address of voice 3's command $E0, written at $4BBE.","note":"inside the item at $4BC9","x":[19390]},{"a":19403,"t":"note","l":"op_v3_filter_src_hi","c":"High byte of the LDA operand at $4BC9, written at $4BC4 (voice 3 command $E0).","note":"inside the item at $4BC9","x":[19396]},{"a":19404,"t":"code","b":[149,49],"m":"sta","o":"music_filter_program,x","oa":49},{"a":19406,"t":"code","b":[202],"m":"dex"},{"a":19407,"t":"code","b":[16,248],"m":"bpl","o":"b_4BC9","oa":19401},{"a":19409,"t":"code","b":[76,226,79],"m":"jmp","o":"v3_next_event","oa":20450},{"a":19412,"l":"v3_cmd_load_inst","c":"Voice 3 command $D0 n lo hi: copy n + 1 bytes from hi:lo into the voice 3 template from $A4, through the operand of the LDA at $4BE1.","t":"code","b":[170],"m":"tax","x":[18020]},{"a":19413,"t":"code","b":[200],"m":"iny"},{"a":19414,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":19416,"t":"code","b":[141,226,75],"m":"sta","o":"op_v3_inst_src_lo","oa":19426},{"a":19419,"t":"code","b":[200],"m":"iny"},{"a":19420,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":19422,"t":"code","b":[141,227,75],"m":"sta","o":"op_v3_inst_src_hi","oa":19427},{"a":19425,"l":"b_4BE1","s":"operand rewritten by $4BD8/$4BDE: the instrument's address, not $DDDD","t":"code","b":[189,221,221],"m":"lda","o":"$DDDD,x","x":[19431]},{"a":19426,"t":"note","l":"op_v3_inst_src_lo","c":"Low byte of the LDA $DDDD,X operand at $4BE1: the instrument address of voice 3's command $D0, written at $4BD8.","note":"inside the item at $4BE1","x":[19416]},{"a":19427,"t":"note","l":"op_v3_inst_src_hi","c":"High byte of the LDA operand at $4BE1, written at $4BDE (voice 3 command $D0).","note":"inside the item at $4BE1","x":[19422]},{"a":19428,"t":"code","b":[149,164],"m":"sta","o":"music_v3_inst_pitch_step1_lo,x","oa":164},{"a":19430,"t":"code","b":[202],"m":"dex"},{"a":19431,"t":"code","b":[16,248],"m":"bpl","o":"b_4BE1","oa":19425},{"a":19433,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":19435,"t":"code","b":[76,228,79],"m":"jmp","o":"j_4FE4","oa":20452},{"a":19438,"l":"v3_cmd_loop_start","c":"Voice 3 command $CC n: start of a repeated section; the count goes to $4712 + level, the address to $4708/$470D + level.","t":"code","b":[166,15],"m":"ldx","o":"music_v3_stack_index","oa":15,"x":[18016]},{"a":19440,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":19442,"t":"code","b":[24],"m":"clc"},{"a":19443,"t":"code","b":[101,8],"m":"adc","o":"music_v3_track_lo","oa":8},{"a":19445,"t":"code","b":[157,8,71],"m":"sta","o":"music_v3_return_lo_0,x","oa":18184},{"a":19448,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":19450,"t":"code","b":[101,9],"m":"adc","o":"music_v3_track_hi","oa":9},{"a":19452,"t":"code","b":[157,13,71],"m":"sta","o":"music_v3_return_hi_0,x","oa":18189},{"a":19455,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":19457,"t":"code","b":[157,18,71],"m":"sta","o":"music_v3_loop_count_0,x","oa":18194},{"a":19460,"t":"code","b":[198,15],"m":"dec","o":"music_v3_stack_index","oa":15},{"a":19462,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":19464,"t":"code","b":[76,228,79],"m":"jmp","o":"j_4FE4","oa":20452},{"a":19467,"l":"v3_cmd_load_pitch","c":"Voice 3 command $E8 lo hi: copy 14 bytes from hi:lo into template bytes 0-13 ($A4-$B1), through the operand of the LDA at $4C16.","t":"code","b":[141,23,76],"m":"sta","o":"op_v3_pitch_src_lo","oa":19479,"x":[18044]},{"a":19470,"t":"code","b":[200],"m":"iny"},{"a":19471,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":19473,"t":"code","b":[141,24,76],"m":"sta","o":"op_v3_pitch_src_hi","oa":19480},{"a":19476,"t":"code","b":[162,13],"m":"ldx","o":"#$0D"},{"a":19478,"l":"b_4C16","s":"operand rewritten by $4C0B/$4C11: the pitch block's address, not $DDDD","t":"code","b":[189,221,221],"m":"lda","o":"$DDDD,x","x":[19484]},{"a":19479,"t":"note","l":"op_v3_pitch_src_lo","c":"Low byte of the LDA $DDDD,X operand at $4C16: the pitch block address of voice 3's command $E8, written at $4C0B.","note":"inside the item at $4C16","x":[19467]},{"a":19480,"t":"note","l":"op_v3_pitch_src_hi","c":"High byte of the LDA operand at $4C16, written at $4C11 (voice 3 command $E8).","note":"inside the item at $4C16","x":[19473]},{"a":19481,"t":"code","b":[149,164],"m":"sta","o":"music_v3_inst_pitch_step1_lo,x","oa":164},{"a":19483,"t":"code","b":[202],"m":"dex"},{"a":19484,"t":"code","b":[16,248],"m":"bpl","o":"b_4C16","oa":19478},{"a":19486,"t":"code","b":[76,226,79],"m":"jmp","o":"v3_next_event","oa":20450},{"a":19489,"l":"v3_cmd_jump","c":"Voice 3 command $C4 lo hi: continue reading at hi:lo. Voice 3 has no command $C8, so it cannot set the transpose while jumping.","t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8,"x":[18008]},{"a":19491,"t":"code","b":[170],"m":"tax"},{"a":19492,"t":"code","b":[200],"m":"iny"},{"a":19493,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":19495,"t":"code","b":[134,8],"m":"stx","o":"music_v3_track_lo","oa":8},{"a":19497,"t":"code","b":[133,9],"m":"sta","o":"music_v3_track_hi","oa":9},{"a":19499,"t":"code","b":[76,235,79],"m":"jmp","o":"j_4FEB","oa":20459},{"a":19502,"l":"v3_cmd_filter_off","c":"Voice 3 command $E2: filter off: $4E = 0, $D417 = $F0 and $57 = 3; unlike voice 1's $E2 it leaves $D418 alone.","t":"code","b":[136],"m":"dey","x":[18038]},{"a":19503,"t":"code","b":[132,78],"m":"sty","o":"music_filter_sweep_mode","oa":78},{"a":19505,"t":"code","b":[162,3],"m":"ldx","o":"#$03"},{"a":19507,"t":"code","b":[160,240],"m":"ldy","o":"#$F0"},{"a":19509,"s":"BIT only skips the next two bytes; v3_cmd_filter_on enters at $4C36, where they are LDY #$F4","t":"code","b":[44,160,244],"m":"bit","o":"font_large_logo_digits","oa":62624},{"a":19512,"t":"code","b":[140,23,212],"m":"sty","o":"sid_filter_resonance"},{"a":19515,"t":"code","b":[134,87],"m":"stx","o":"music_filter_voice","oa":87},{"a":19517,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":19519,"t":"code","b":[76,228,79],"m":"jmp","o":"j_4FE4","oa":20452},{"a":19522,"l":"v3_cmd_filter_on","c":"Voice 3 command $DE: filter voice 3: $D418 = $1F, then into $4C2E's code at $4C36 (inside the BIT at $4C35, where the bytes read LDY #$F4): $D417 = $F4 (resonance 15, voice 3 filtered) and $57 = 2 (voice 3's notes restart the filter program).","t":"code","b":[169,31],"m":"lda","o":"#$1F","x":[18034]},{"a":19524,"t":"code","b":[141,24,212],"m":"sta","o":"sid_filter_mode_volume"},{"a":19527,"t":"code","b":[162,2],"m":"ldx","o":"#$02"},{"a":19529,"t":"code","b":[208,235],"m":"bne","o":"b_4C36","oa":19510},{"a":19531,"l":"v3_cmd_set_inst_byte","c":"Voice 3 command $CA i v: set template byte i ($A4 + i) to v.","t":"code","b":[170],"m":"tax","x":[18014]},{"a":19532,"t":"code","b":[200],"m":"iny"},{"a":19533,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":19535,"t":"code","b":[149,164],"m":"sta","o":"music_v3_inst_pitch_step1_lo,x","oa":164},{"a":19537,"t":"code","b":[76,226,79],"m":"jmp","o":"v3_next_event","oa":20450},{"a":19540,"l":"v3_cmd_loop_end","c":"Voice 3 command $CE: count down the innermost loop count ($4713 + index) and go back to the section start ($4709/$470E + index) while it is not 0, else pop.","t":"code","b":[166,15],"m":"ldx","o":"music_v3_stack_index","oa":15,"x":[18018]},{"a":19542,"t":"code","b":[222,19,71],"m":"dec","o":"music_v3_loop_counts,x","oa":18195},{"a":19545,"t":"code","b":[240,13],"m":"beq","o":"b_4C68","oa":19560},{"a":19547,"t":"code","b":[188,9,71],"m":"ldy","o":"music_v3_return_lo,x","oa":18185},{"a":19550,"t":"code","b":[189,14,71],"m":"lda","o":"music_v3_return_hi,x","oa":18190},{"a":19553,"t":"code","b":[132,8],"m":"sty","o":"music_v3_track_lo","oa":8},{"a":19555,"t":"code","b":[133,9],"m":"sta","o":"music_v3_track_hi","oa":9},{"a":19557,"t":"code","b":[76,235,79],"m":"jmp","o":"j_4FEB","oa":20459},{"a":19560,"l":"b_4C68","t":"code","b":[230,15],"m":"inc","o":"music_v3_stack_index","oa":15,"x":[19545]},{"a":19562,"t":"code","b":[152],"m":"tya"},{"a":19563,"t":"code","b":[76,228,79],"m":"jmp","o":"j_4FE4","oa":20452},{"a":19566,"l":"v3_cmd_return","c":"Voice 3 command $C0: return from a pattern, or with the stack empty end the track ($5B goes to 0, which check_music_end at $45BD watches). First word of the table at $4654.","t":"code","b":[164,15],"m":"ldy","o":"music_v3_stack_index","oa":15,"x":[18004]},{"a":19568,"t":"code","b":[192,4],"m":"cpy","o":"#$04"},{"a":19570,"t":"code","b":[240,15],"m":"beq","o":"b_4C83","oa":19587},{"a":19572,"t":"code","b":[230,15],"m":"inc","o":"music_v3_stack_index","oa":15},{"a":19574,"t":"code","b":[190,9,71],"m":"ldx","o":"music_v3_return_lo,y","oa":18185},{"a":19577,"t":"code","b":[185,14,71],"m":"lda","o":"music_v3_return_hi,y","oa":18190},{"a":19580,"t":"code","b":[134,8],"m":"stx","o":"music_v3_track_lo","oa":8},{"a":19582,"t":"code","b":[133,9],"m":"sta","o":"music_v3_track_hi","oa":9},{"a":19584,"t":"code","b":[76,235,79],"m":"jmp","o":"j_4FEB","oa":20459},{"a":19587,"l":"b_4C83","t":"code","b":[198,91],"m":"dec","o":"music_v3_active","oa":91,"x":[19570]},{"a":19589,"t":"code","b":[96],"m":"rts"},{"a":19590,"l":"v3_cmd_set_live_byte","c":"Voice 3 command $D4 i v: set live byte i ($C1 + i) to v.","t":"code","b":[170],"m":"tax","x":[18024]},{"a":19591,"t":"code","b":[200],"m":"iny"},{"a":19592,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":19594,"t":"code","b":[149,193],"m":"sta","o":"music_v3_live_pitch_step1_lo,x","oa":193},{"a":19596,"t":"code","b":[76,226,79],"m":"jmp","o":"v3_next_event","oa":20450},{"a":19599,"l":"v3_cmd_tempo","c":"Voice 3 command $EA n: change the tempo to n (operand $4838) and rebuild the duration table ($4834); tune 4 does it four times. Reached only through the twenty-second word of the table at $4654.","t":"code","b":[141,56,72],"m":"sta","o":"op_tempo","oa":18488,"x":[18046]},{"a":19602,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":19604,"t":"code","b":[32,52,72],"m":"jsr","o":"build_duration_table","oa":18484},{"a":19607,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":19609,"t":"code","b":[76,228,79],"m":"jmp","o":"j_4FE4","oa":20452},{"a":19612,"l":"v3_cmd_transpose","c":"Voice 3 command $D8 t: set the transpose $12 to t.","t":"code","b":[133,18],"m":"sta","o":"music_v3_transpose","oa":18,"x":[18028]},{"a":19614,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":19616,"t":"code","b":[76,228,79],"m":"jmp","o":"j_4FE4","oa":20452},{"a":19619,"l":"v3_cmd_load_envelope","c":"Voice 3 command $D2 lo hi: copy 5 bytes from hi:lo into template bytes 24-28 ($BC-$C0).","t":"code","b":[133,19],"m":"sta","o":"music_ptr_lo","oa":19,"x":[18022]},{"a":19621,"t":"code","b":[200],"m":"iny"},{"a":19622,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":19624,"t":"code","b":[133,20],"m":"sta","o":"music_ptr_hi","oa":20},{"a":19626,"t":"code","b":[160,4],"m":"ldy","o":"#$04"},{"a":19628,"l":"b_4CAC","t":"code","b":[177,19],"m":"lda","o":"(music_ptr_lo),y","oa":19,"x":[19634]},{"a":19630,"t":"code","b":[153,188,0],"m":"sta","o":"music_v3_inst_control,y","oa":188},{"a":19633,"t":"code","b":[136],"m":"dey"},{"a":19634,"t":"code","b":[16,248],"m":"bpl","o":"b_4CAC","oa":19628},{"a":19636,"t":"code","b":[76,226,79],"m":"jmp","o":"v3_next_event","oa":20450},{"a":19639,"l":"update_filter_sweep","c":"Once per music tick (from the band routine at $B940): run the filter program's cutoff sweep; nothing while its mode $4E is 0. The delay $4D is counted down first (with mode bit 1, step 4 is added on each tick of it); then steps 1-4 ($41/$42 ... $47/$48) are added to the cutoff for $53-$56 ticks each; after the fourth, mode bit 7 restarts from the start cutoff ($4881), bit 0 repeats from the current cutoff ($4889), otherwise the cutoff holds. The cutoff is kept in $51/$52 and written by $4D10.","t":"code","b":[165,78],"m":"lda","o":"music_filter_sweep_mode","oa":78,"x":[47424]},{"a":19641,"t":"code","b":[240,17],"m":"beq","o":"r_4CCC","oa":19660},{"a":19643,"t":"code","b":[166,81],"m":"ldx","o":"music_filter_cutoff_lo","oa":81},{"a":19645,"t":"code","b":[164,82],"m":"ldy","o":"music_filter_cutoff_hi","oa":82},{"a":19647,"t":"code","b":[24],"m":"clc"},{"a":19648,"t":"code","b":[165,77],"m":"lda","o":"music_filter_delay","oa":77},{"a":19650,"t":"code","b":[240,10],"m":"beq","o":"b_4CCE","oa":19662},{"a":19652,"t":"code","b":[198,77],"m":"dec","o":"music_filter_delay","oa":77},{"a":19654,"t":"code","b":[165,78],"m":"lda","o":"music_filter_sweep_mode","oa":78},{"a":19656,"t":"code","b":[41,2],"m":"and","o":"#$02"},{"a":19658,"t":"code","b":[208,56],"m":"bne","o":"b_4D04","oa":19716},{"a":19660,"l":"r_4CCC","t":"code","b":[96],"m":"rts","x":[19641]},{"a":19661,"l":"j_4CCD","t":"code","b":[24],"m":"clc","x":[19762,19768]},{"a":19662,"l":"b_4CCE","t":"code","b":[165,83],"m":"lda","o":"music_filter_left1","oa":83,"x":[19650]},{"a":19664,"t":"code","b":[240,12],"m":"beq","o":"b_4CDE","oa":19678},{"a":19666,"t":"code","b":[198,83],"m":"dec","o":"music_filter_left1","oa":83},{"a":19668,"t":"code","b":[138],"m":"txa"},{"a":19669,"t":"code","b":[101,65],"m":"adc","o":"music_filter_step1_lo","oa":65},{"a":19671,"t":"code","b":[170],"m":"tax"},{"a":19672,"t":"code","b":[152],"m":"tya"},{"a":19673,"t":"code","b":[101,66],"m":"adc","o":"music_filter_step1_hi","oa":66},{"a":19675,"t":"code","b":[76,11,77],"m":"jmp","o":"j_4D0B","oa":19723},{"a":19678,"l":"b_4CDE","t":"code","b":[165,84],"m":"lda","o":"music_filter_left2","oa":84,"x":[19664]},{"a":19680,"t":"code","b":[240,12],"m":"beq","o":"b_4CEE","oa":19694},{"a":19682,"t":"code","b":[198,84],"m":"dec","o":"music_filter_left2","oa":84},{"a":19684,"t":"code","b":[138],"m":"txa"},{"a":19685,"t":"code","b":[101,67],"m":"adc","o":"music_filter_step2_lo","oa":67},{"a":19687,"t":"code","b":[170],"m":"tax"},{"a":19688,"t":"code","b":[152],"m":"tya"},{"a":19689,"t":"code","b":[101,68],"m":"adc","o":"music_filter_step2_hi","oa":68},{"a":19691,"t":"code","b":[76,11,77],"m":"jmp","o":"j_4D0B","oa":19723},{"a":19694,"l":"b_4CEE","t":"code","b":[165,85],"m":"lda","o":"music_filter_left3","oa":85,"x":[19680]},{"a":19696,"t":"code","b":[240,12],"m":"beq","o":"b_4CFE","oa":19710},{"a":19698,"t":"code","b":[198,85],"m":"dec","o":"music_filter_left3","oa":85},{"a":19700,"t":"code","b":[138],"m":"txa"},{"a":19701,"t":"code","b":[101,69],"m":"adc","o":"music_filter_step3_lo","oa":69},{"a":19703,"t":"code","b":[170],"m":"tax"},{"a":19704,"t":"code","b":[152],"m":"tya"},{"a":19705,"t":"code","b":[101,70],"m":"adc","o":"music_filter_step3_hi","oa":70},{"a":19707,"t":"code","b":[76,11,77],"m":"jmp","o":"j_4D0B","oa":19723},{"a":19710,"l":"b_4CFE","t":"code","b":[165,86],"m":"lda","o":"music_filter_left4","oa":86,"x":[19696]},{"a":19712,"t":"code","b":[240,37],"m":"beq","o":"b_4D27","oa":19751},{"a":19714,"t":"code","b":[198,86],"m":"dec","o":"music_filter_left4","oa":86},{"a":19716,"l":"b_4D04","t":"code","b":[138],"m":"txa","x":[19658]},{"a":19717,"t":"code","b":[101,71],"m":"adc","o":"music_filter_step4_lo","oa":71},{"a":19719,"t":"code","b":[170],"m":"tax"},{"a":19720,"t":"code","b":[152],"m":"tya"},{"a":19721,"t":"code","b":[101,72],"m":"adc","o":"music_filter_step4_hi","oa":72},{"a":19723,"l":"j_4D0B","t":"code","b":[168],"m":"tay","x":[19675,19691,19707]},{"a":19724,"l":"b_4D0C","t":"code","b":[134,81],"m":"stx","o":"music_filter_cutoff_lo","oa":81,"x":[19755]},{"a":19726,"t":"code","b":[132,82],"m":"sty","o":"music_filter_cutoff_hi","oa":82},{"a":19728,"l":"write_filter_cutoff","c":"Write the cutoff in X (low) and Y (high) to the chip: $D415 = X AND 7 and $D416 = bits 3-10 of the value (shifted through $58), an 11-bit cutoff. Entered from the sweep (which stores $51/$52 first) and from start_filter_program.","t":"code","b":[138],"m":"txa","x":[19787]},{"a":19729,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":19731,"t":"code","b":[141,21,212],"m":"sta","o":"sid_filter_cutoff_lo"},{"a":19734,"t":"code","b":[152],"m":"tya"},{"a":19735,"t":"code","b":[134,88],"m":"stx","o":"music_cutoff_shift","oa":88},{"a":19737,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":19738,"t":"code","b":[102,88],"m":"ror","o":"music_cutoff_shift","oa":88},{"a":19740,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":19741,"t":"code","b":[102,88],"m":"ror","o":"music_cutoff_shift","oa":88},{"a":19743,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":19744,"t":"code","b":[165,88],"m":"lda","o":"music_cutoff_shift","oa":88},{"a":19746,"t":"code","b":[106],"m":"ror","o":"a"},{"a":19747,"t":"code","b":[141,22,212],"m":"sta","o":"sid_filter_cutoff_hi"},{"a":19750,"t":"code","b":[96],"m":"rts"},{"a":19751,"l":"b_4D27","t":"code","b":[165,78],"m":"lda","o":"music_filter_sweep_mode","oa":78,"x":[19712]},{"a":19753,"t":"code","b":[41,129],"m":"and","o":"#$81"},{"a":19755,"t":"code","b":[240,223],"m":"beq","o":"b_4D0C","oa":19724},{"a":19757,"t":"code","b":[16,6],"m":"bpl","o":"b_4D35","oa":19765},{"a":19759,"t":"code","b":[32,129,72],"m":"jsr","o":"restart_filter_sweep","oa":18561},{"a":19762,"t":"code","b":[76,205,76],"m":"jmp","o":"j_4CCD","oa":19661},{"a":19765,"l":"b_4D35","t":"code","b":[32,137,72],"m":"jsr","o":"reload_filter_counts","oa":18569,"x":[19757]},{"a":19768,"t":"code","b":[76,205,76],"m":"jmp","o":"j_4CCD","oa":19661},{"a":19771,"l":"start_filter_program","c":"Start the filter program: copy $31-$40 (put there by command $E0) to the working set $41-$50, set the cutoff to the start value and reload the counters ($4881), and write it to the chip ($4D10). Called at each note start of the filter voice (voice 1 when $57 = 0, $4D8F; voice 3 when $57 = 2, $501D) and by the tune code at $5AFF.","t":"code","b":[162,7],"m":"ldx","o":"#$07","x":[19855,20509,23309]},{"a":19773,"l":"b_4D3D","t":"code","b":[181,49],"m":"lda","o":"music_filter_program,x","oa":49,"x":[19782]},{"a":19775,"t":"code","b":[149,65],"m":"sta","o":"music_filter_step1_lo,x","oa":65},{"a":19777,"t":"code","b":[181,57],"m":"lda","o":"music_filter_program_rest,x","oa":57},{"a":19779,"t":"code","b":[149,73],"m":"sta","o":"music_filter_ticks1,x","oa":73},{"a":19781,"t":"code","b":[202],"m":"dex"},{"a":19782,"t":"code","b":[16,245],"m":"bpl","o":"b_4D3D","oa":19773},{"a":19784,"t":"code","b":[32,129,72],"m":"jsr","o":"restart_filter_sweep","oa":18561},{"a":19787,"t":"code","b":[76,16,77],"m":"jmp","o":"write_filter_cutoff","oa":19728},{"a":19790,"l":"v1_tick","c":"Voice 1 of the music, once per tick (from $B931, when the music has all three voices): while the voice is active ($59) count down its note time $0A, and when it runs out read the next events from its track at ($04) ($4D64).","t":"code","b":[165,89],"m":"lda","o":"music_v1_active","oa":89,"x":[47409]},{"a":19792,"t":"code","b":[240,4],"m":"beq","o":"r_4D56","oa":19798},{"a":19794,"t":"code","b":[198,10],"m":"dec","o":"music_v1_note_time","oa":10},{"a":19796,"t":"code","b":[240,14],"m":"beq","o":"j_4D64","oa":19812},{"a":19798,"l":"r_4D56","t":"code","b":[96],"m":"rts","x":[19792]},{"a":19799,"l":"b_4D57","t":"code","b":[230,5],"m":"inc","o":"music_v1_track_hi","oa":5,"x":[19810]},{"a":19801,"t":"code","b":[208,9],"m":"bne","o":"j_4D64","oa":19812},{"a":19803,"l":"v1_next_event","c":"Voice 1: step the track pointer $04/$05 on by 3 ($4D5B) or by A ($4D5D; $4D57 carries into the high byte), then read the event at $4D64. A byte of $C0 or more is a command: (byte + $40) goes into the operand at $4D75 and JMP ($4600) runs its handler with the first parameter in A and Y = 1; the handlers come back to these entries. A smaller byte is a note ($4D7A).","t":"code","b":[169,3],"m":"lda","o":"#$03","x":[18788,18862,18927,18983,19010]},{"a":19805,"l":"j_4D5D","t":"code","b":[24],"m":"clc","x":[18748,18766,18814,18840,18903,18918,18950,18990]},{"a":19806,"t":"code","b":[101,4],"m":"adc","o":"music_v1_track_lo","oa":4},{"a":19808,"t":"code","b":[133,4],"m":"sta","o":"music_v1_track_lo","oa":4},{"a":19810,"t":"code","b":[176,243],"m":"bcs","o":"b_4D57","oa":19799},{"a":19812,"l":"j_4D64","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[18714,18878,18944,18970,19796,19801]},{"a":19814,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":19816,"t":"code","b":[201,192],"m":"cmp","o":"#$C0"},{"a":19818,"t":"code","b":[144,14],"m":"bcc","o":"v1_start_note","oa":19834},{"a":19820,"t":"code","b":[200],"m":"iny"},{"a":19821,"t":"code","b":[105,63],"m":"adc","o":"#$3F"},{"a":19823,"t":"code","b":[141,117,77],"m":"sta","o":"op_v1_cmd_vector","oa":19829},{"a":19826,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":19828,"s":"low byte of the operand set at $4D6F to command + $40: the word for this command in music_cmds_voice1","t":"code","b":[108,0,70],"m":"jmp","o":"(music_cmds_voice1)","oa":17920},{"a":19829,"t":"note","l":"op_v1_cmd_vector","c":"Low byte of the JMP ($4600) operand at $4D74, rewritten at $4D6F with (command + $40) to pick the handler word in the voice 1 table; $00 in the loaded image. The JMP $4E69 after it ($4D77) is the path of a rest.","note":"inside the item at $4D74","x":[19823]},{"a":19831,"l":"b_4D77","t":"code","b":[76,105,78],"m":"jmp","o":"v1_set_duration","oa":20073,"x":[19844]},{"a":19834,"l":"v1_start_note","c":"Voice 1 note event: a note byte and a duration byte. Bytes $60-$BF are notes $00-$5F whose duration byte is a tick count instead of a code; $5F (and $BF) is a rest. Note + transpose $10 indexes the frequency tables $471A/$4775. If voice 1 drives the filter ($57 = 0) the filter program restarts ($4D3B). From the template $87-$A3 the frequency, pulse width, attack/decay, sustain/release and control go to $D400-$D406 (control with bit 3 masked; voice 1 does not reset the gate first, so a note following one whose gate is still on does not restart the envelope); the pulse sweep (if $98 is not 0) and the pitch effect (if $94 is not 0; for an arpeggio with note + transpose as its base) are copied to the live block, and the gate and release times to $46B8/$46B9. For notes $60-$BE in arpeggio mode the base note comes out 2 higher than the note played ($4E53: SBC #$5F, then ADC with the carry set); no tune uses that combination.","t":"code","b":[133,27],"m":"sta","o":"music_note_byte","oa":27,"x":[19818]},{"a":19836,"t":"code","b":[201,96],"m":"cmp","o":"#$60"},{"a":19838,"t":"code","b":[144,2],"m":"bcc","o":"b_4D82","oa":19842},{"a":19840,"t":"code","b":[233,96],"m":"sbc","o":"#$60"},{"a":19842,"l":"b_4D82","t":"code","b":[201,95],"m":"cmp","o":"#$5F","x":[19838]},{"a":19844,"t":"code","b":[240,241],"m":"beq","o":"b_4D77","oa":19831},{"a":19846,"t":"code","b":[101,16],"m":"adc","o":"music_v1_transpose","oa":16},{"a":19848,"t":"code","b":[170],"m":"tax"},{"a":19849,"t":"code","b":[165,87],"m":"lda","o":"music_filter_voice","oa":87},{"a":19851,"t":"code","b":[208,7],"m":"bne","o":"b_4D94","oa":19860},{"a":19853,"t":"code","b":[134,19],"m":"stx","o":"music_ptr_lo","oa":19},{"a":19855,"t":"code","b":[32,59,77],"m":"jsr","o":"start_filter_program","oa":19771},{"a":19858,"t":"code","b":[166,19],"m":"ldx","o":"music_ptr_lo","oa":19},{"a":19860,"l":"b_4D94","t":"code","b":[188,117,71],"m":"ldy","o":"note_freq_hi,x","oa":18293,"x":[19851]},{"a":19863,"t":"code","b":[189,26,71],"m":"lda","o":"note_freq_lo,x","oa":18202},{"a":19866,"t":"code","b":[141,181,70],"m":"sta","o":"music_v1_live_note_freq_lo","oa":18101},{"a":19869,"t":"code","b":[140,182,70],"m":"sty","o":"music_v1_live_note_freq_hi","oa":18102},{"a":19872,"t":"code","b":[141,0,212],"m":"sta","o":"sid_v1_freq_lo"},{"a":19875,"t":"code","b":[140,1,212],"m":"sty","o":"sid_v1_freq_hi"},{"a":19878,"t":"code","b":[166,157],"m":"ldx","o":"music_v1_inst_pulse_width_lo","oa":157},{"a":19880,"t":"code","b":[164,158],"m":"ldy","o":"music_v1_inst_pulse_width_hi","oa":158},{"a":19882,"t":"code","b":[142,2,212],"m":"stx","o":"sid_v1_pulse_lo"},{"a":19885,"t":"code","b":[140,3,212],"m":"sty","o":"sid_v1_pulse_hi"},{"a":19888,"t":"code","b":[165,160],"m":"lda","o":"music_v1_inst_attack_decay","oa":160},{"a":19890,"t":"code","b":[141,5,212],"m":"sta","o":"sid_v1_attack_decay"},{"a":19893,"t":"code","b":[165,161],"m":"lda","o":"music_v1_inst_sustain_release","oa":161},{"a":19895,"t":"code","b":[141,6,212],"m":"sta","o":"sid_v1_sustain_release"},{"a":19898,"t":"code","b":[165,159],"m":"lda","o":"music_v1_inst_control","oa":159},{"a":19900,"t":"code","b":[141,183,70],"m":"sta","o":"music_v1_live_control","oa":18103},{"a":19903,"t":"code","b":[41,247],"m":"and","o":"#$F7"},{"a":19905,"t":"code","b":[141,4,212],"m":"sta","o":"sid_v1_control"},{"a":19908,"t":"code","b":[32,72,72],"m":"jsr","o":"set_v1_pulse","oa":18504},{"a":19911,"t":"code","b":[165,152],"m":"lda","o":"music_v1_inst_pulse_mode","oa":152},{"a":19913,"t":"code","b":[141,174,70],"m":"sta","o":"music_v1_live_pulse_mode","oa":18094},{"a":19916,"t":"code","b":[240,51],"m":"beq","o":"b_4E01","oa":19969},{"a":19918,"t":"code","b":[142,179,70],"m":"stx","o":"music_v1_live_pulse_start_lo","oa":18099},{"a":19921,"t":"code","b":[140,180,70],"m":"sty","o":"music_v1_live_pulse_start_hi","oa":18100},{"a":19924,"t":"code","b":[134,41],"m":"stx","o":"music_v1_pulse_lo","oa":41},{"a":19926,"t":"code","b":[132,42],"m":"sty","o":"music_v1_pulse_hi","oa":42},{"a":19928,"t":"code","b":[165,156],"m":"lda","o":"music_v1_inst_pulse_step2_hi","oa":156},{"a":19930,"t":"code","b":[141,178,70],"m":"sta","o":"music_v1_live_pulse_step2_hi","oa":18098},{"a":19933,"t":"code","b":[165,155],"m":"lda","o":"music_v1_inst_pulse_step2_lo","oa":155},{"a":19935,"t":"code","b":[141,177,70],"m":"sta","o":"music_v1_live_pulse_step2_lo","oa":18097},{"a":19938,"t":"code","b":[165,154],"m":"lda","o":"music_v1_inst_pulse_step1_hi","oa":154},{"a":19940,"t":"code","b":[141,176,70],"m":"sta","o":"music_v1_live_pulse_step1_hi","oa":18096},{"a":19943,"t":"code","b":[165,153],"m":"lda","o":"music_v1_inst_pulse_step1_lo","oa":153},{"a":19945,"t":"code","b":[141,175,70],"m":"sta","o":"music_v1_live_pulse_step1_lo","oa":18095},{"a":19948,"t":"code","b":[165,151],"m":"lda","o":"music_v1_inst_pulse_delay","oa":151},{"a":19950,"t":"code","b":[141,173,70],"m":"sta","o":"music_v1_live_pulse_delay","oa":18093},{"a":19953,"t":"code","b":[166,149],"m":"ldx","o":"music_v1_inst_pulse_ticks1","oa":149},{"a":19955,"t":"code","b":[164,150],"m":"ldy","o":"music_v1_inst_pulse_ticks2","oa":150},{"a":19957,"t":"code","b":[142,171,70],"m":"stx","o":"music_v1_live_pulse_ticks1","oa":18091},{"a":19960,"t":"code","b":[142,190,70],"m":"stx","o":"music_v1_live_pulse_left1","oa":18110},{"a":19963,"t":"code","b":[140,191,70],"m":"sty","o":"music_v1_live_pulse_left2","oa":18111},{"a":19966,"t":"code","b":[140,172,70],"m":"sty","o":"music_v1_live_pulse_ticks2","oa":18092},{"a":19969,"l":"b_4E01","t":"code","b":[165,148],"m":"lda","o":"music_v1_inst_pitch_mode","oa":148,"x":[19916]},{"a":19971,"t":"code","b":[141,170,70],"m":"sta","o":"music_v1_live_pitch_mode","oa":18090},{"a":19974,"t":"code","b":[240,87],"m":"beq","o":"b_4E5F","oa":20063},{"a":19976,"t":"code","b":[166,147],"m":"ldx","o":"music_v1_inst_pitch_delay","oa":147},{"a":19978,"t":"code","b":[142,169,70],"m":"stx","o":"music_v1_live_pitch_delay","oa":18089},{"a":19981,"t":"code","b":[166,146],"m":"ldx","o":"music_v1_inst_pitch_ticks4","oa":146},{"a":19983,"t":"code","b":[142,168,70],"m":"stx","o":"music_v1_live_pitch_ticks4","oa":18088},{"a":19986,"t":"code","b":[166,145],"m":"ldx","o":"music_v1_inst_pitch_ticks3","oa":145},{"a":19988,"t":"code","b":[142,167,70],"m":"stx","o":"music_v1_live_pitch_ticks3","oa":18087},{"a":19991,"t":"code","b":[166,144],"m":"ldx","o":"music_v1_inst_pitch_ticks2","oa":144},{"a":19993,"t":"code","b":[142,166,70],"m":"stx","o":"music_v1_live_pitch_ticks2","oa":18086},{"a":19996,"t":"code","b":[166,143],"m":"ldx","o":"music_v1_inst_pitch_ticks1","oa":143},{"a":19998,"t":"code","b":[142,165,70],"m":"stx","o":"music_v1_live_pitch_ticks1","oa":18085},{"a":20001,"t":"code","b":[166,142],"m":"ldx","o":"music_v1_inst_pitch_step4_hi","oa":142},{"a":20003,"t":"code","b":[142,164,70],"m":"stx","o":"music_v1_live_pitch_step4_hi","oa":18084},{"a":20006,"t":"code","b":[166,141],"m":"ldx","o":"music_v1_inst_pitch_step4_lo","oa":141},{"a":20008,"t":"code","b":[142,163,70],"m":"stx","o":"music_v1_live_pitch_step4_lo","oa":18083},{"a":20011,"t":"code","b":[166,140],"m":"ldx","o":"music_v1_inst_pitch_step3_hi","oa":140},{"a":20013,"t":"code","b":[142,162,70],"m":"stx","o":"music_v1_live_pitch_step3_hi","oa":18082},{"a":20016,"t":"code","b":[166,139],"m":"ldx","o":"music_v1_inst_pitch_step3_lo","oa":139},{"a":20018,"t":"code","b":[142,161,70],"m":"stx","o":"music_v1_live_pitch_step3_lo","oa":18081},{"a":20021,"t":"code","b":[166,138],"m":"ldx","o":"music_v1_inst_pitch_step2_hi","oa":138},{"a":20023,"t":"code","b":[142,160,70],"m":"stx","o":"music_v1_live_pitch_step2_hi","oa":18080},{"a":20026,"t":"code","b":[166,137],"m":"ldx","o":"music_v1_inst_pitch_step2_lo","oa":137},{"a":20028,"t":"code","b":[142,159,70],"m":"stx","o":"music_v1_live_pitch_step2_lo","oa":18079},{"a":20031,"t":"code","b":[166,136],"m":"ldx","o":"music_v1_inst_pitch_step1_hi","oa":136},{"a":20033,"t":"code","b":[142,158,70],"m":"stx","o":"music_v1_live_pitch_step1_hi","oa":18078},{"a":20036,"t":"code","b":[166,135],"m":"ldx","o":"music_v1_inst_pitch_step1_lo","oa":135},{"a":20038,"t":"code","b":[142,157,70],"m":"stx","o":"music_v1_live_pitch_step1_lo","oa":18077},{"a":20041,"t":"code","b":[41,8],"m":"and","o":"#$08"},{"a":20043,"t":"code","b":[240,15],"m":"beq","o":"b_4E5C","oa":20060},{"a":20045,"t":"code","b":[165,27],"m":"lda","o":"music_note_byte","oa":27},{"a":20047,"t":"code","b":[201,96],"m":"cmp","o":"#$60"},{"a":20049,"t":"code","b":[144,2],"m":"bcc","o":"b_4E55","oa":20053},{"a":20051,"t":"code","b":[233,95],"m":"sbc","o":"#$5F"},{"a":20053,"l":"b_4E55","t":"code","b":[101,16],"m":"adc","o":"music_v1_transpose","oa":16,"x":[20049]},{"a":20055,"t":"code","b":[141,167,70],"m":"sta","o":"music_v1_live_pitch_ticks3","oa":18087},{"a":20058,"t":"code","b":[208,3],"m":"bne","o":"b_4E5F","oa":20063},{"a":20060,"l":"b_4E5C","t":"code","b":[32,154,72],"m":"jsr","o":"restart_v1_pitch","oa":18586,"x":[20043]},{"a":20063,"l":"b_4E5F","t":"code","b":[166,162],"m":"ldx","o":"music_v1_inst_gate_time","oa":162,"x":[19974,20058]},{"a":20065,"t":"code","b":[164,163],"m":"ldy","o":"music_v1_inst_release_time","oa":163},{"a":20067,"t":"code","b":[142,184,70],"m":"stx","o":"music_v1_live_gate_time","oa":18104},{"a":20070,"t":"code","b":[140,185,70],"m":"sty","o":"music_v1_live_release_time","oa":18105},{"a":20073,"l":"v1_set_duration","c":"Voice 1: set the note time $0A from the byte after the note: for a note byte below $60 it is a duration code looked up in $46E3 (code x tempo), for $60-$BF the tick count itself; then step the pointer 2 bytes on.","t":"code","b":[160,1],"m":"ldy","o":"#$01","x":[19831]},{"a":20075,"t":"code","b":[177,4],"m":"lda","o":"(music_v1_track_lo),y","oa":4},{"a":20077,"t":"code","b":[166,27],"m":"ldx","o":"music_note_byte","oa":27},{"a":20079,"t":"code","b":[224,96],"m":"cpx","o":"#$60"},{"a":20081,"t":"code","b":[176,4],"m":"bcs","o":"b_4E77","oa":20087},{"a":20083,"t":"code","b":[170],"m":"tax"},{"a":20084,"t":"code","b":[189,226,70],"m":"lda","o":"music_v2_live_pulse_left2,x","oa":18146},{"a":20087,"l":"b_4E77","t":"code","b":[133,10],"m":"sta","o":"music_v1_note_time","oa":10,"x":[20081]},{"a":20089,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":20091,"t":"code","b":[24],"m":"clc"},{"a":20092,"t":"code","b":[101,4],"m":"adc","o":"music_v1_track_lo","oa":4},{"a":20094,"t":"code","b":[133,4],"m":"sta","o":"music_v1_track_lo","oa":4},{"a":20096,"t":"code","b":[176,1],"m":"bcs","o":"b_4E83","oa":20099},{"a":20098,"t":"code","b":[96],"m":"rts"},{"a":20099,"l":"b_4E83","t":"code","b":[230,5],"m":"inc","o":"music_v1_track_hi","oa":5,"x":[20096]},{"a":20101,"t":"code","b":[96],"m":"rts"},{"a":20102,"l":"v2_tick","c":"Voice 2 of the music, once per tick (from $B937): while $5A is set count down the note time $0B, and when it runs out read the next events at ($06) ($4E9C).","t":"code","b":[165,90],"m":"lda","o":"music_v2_active","oa":90,"x":[47415]},{"a":20104,"t":"code","b":[240,4],"m":"beq","o":"r_4E8E","oa":20110},{"a":20106,"t":"code","b":[198,11],"m":"dec","o":"music_v2_note_time","oa":11},{"a":20108,"t":"code","b":[240,14],"m":"beq","o":"j_4E9C","oa":20124},{"a":20110,"l":"r_4E8E","t":"code","b":[96],"m":"rts","x":[20104]},{"a":20111,"l":"b_4E8F","t":"code","b":[230,7],"m":"inc","o":"music_v2_track_hi","oa":7,"x":[20122]},{"a":20113,"t":"code","b":[208,9],"m":"bne","o":"j_4E9C","oa":20124},{"a":20115,"l":"v2_next_event","c":"Voice 2: step the track pointer $06/$07 on by 3 ($4E93) or by A ($4E95), then read the event at $4E9C: a command byte runs its handler through JMP ($462A) with the operand $4EAD rewritten, a smaller byte is a note ($4EB2).","t":"code","b":[169,3],"m":"lda","o":"#$03","x":[19177,19215,19279,19299]},{"a":20117,"l":"j_4E95","t":"code","b":[24],"m":"clc","x":[19082,19100,19127,19154,19205,19239,19269]},{"a":20118,"t":"code","b":[101,6],"m":"adc","o":"music_v2_track_lo","oa":6},{"a":20120,"t":"code","b":[133,6],"m":"sta","o":"music_v2_track_lo","oa":6},{"a":20122,"t":"code","b":[176,243],"m":"bcs","o":"b_4E8F","oa":20111},{"a":20124,"l":"j_4E9C","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[19046,19193,19233,19259,20108,20113]},{"a":20126,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":20128,"t":"code","b":[201,192],"m":"cmp","o":"#$C0"},{"a":20130,"t":"code","b":[144,14],"m":"bcc","o":"v2_start_note","oa":20146},{"a":20132,"t":"code","b":[200],"m":"iny"},{"a":20133,"t":"code","b":[105,105],"m":"adc","o":"#$69"},{"a":20135,"t":"code","b":[141,173,78],"m":"sta","o":"op_v2_cmd_vector","oa":20141},{"a":20138,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":20140,"s":"low byte of the operand set at $4EA7 to command + $6A: the word for this command in music_cmds_voice2","t":"code","b":[108,42,70],"m":"jmp","o":"(music_cmds_voice2)","oa":17962},{"a":20141,"t":"note","l":"op_v2_cmd_vector","c":"Low byte of the JMP ($462A) operand at $4EAC, rewritten at $4EA7 with (command + $6A); $2A in the loaded image. A rest takes the JMP $4FB8 at $4EAF.","note":"inside the item at $4EAC","x":[20135]},{"a":20143,"l":"b_4EAF","t":"code","b":[76,184,79],"m":"jmp","o":"v2_set_duration","oa":20408,"x":[20156]},{"a":20146,"l":"v2_start_note","c":"Voice 2 note event (as voice 1's at $4D7A, with the transpose $11 and the template $4680): sets the test bit ($D40B = $08) first, which silences the oscillator and makes every note restart the envelope, then frequency, pulse width, attack/decay, sustain/release and control to $D407-$D40D, and copies the pulse and pitch settings to the live block $46C0. Voice 2 never touches the filter.","t":"code","b":[133,27],"m":"sta","o":"music_note_byte","oa":27,"x":[20130]},{"a":20148,"t":"code","b":[201,96],"m":"cmp","o":"#$60"},{"a":20150,"t":"code","b":[144,2],"m":"bcc","o":"b_4EBA","oa":20154},{"a":20152,"t":"code","b":[233,96],"m":"sbc","o":"#$60"},{"a":20154,"l":"b_4EBA","t":"code","b":[201,95],"m":"cmp","o":"#$5F","x":[20150]},{"a":20156,"t":"code","b":[240,241],"m":"beq","o":"b_4EAF","oa":20143},{"a":20158,"t":"code","b":[101,17],"m":"adc","o":"music_v2_transpose","oa":17},{"a":20160,"t":"code","b":[170],"m":"tax"},{"a":20161,"t":"code","b":[169,8],"m":"lda","o":"#$08"},{"a":20163,"t":"code","b":[141,11,212],"m":"sta","o":"sid_v2_control"},{"a":20166,"t":"code","b":[188,117,71],"m":"ldy","o":"note_freq_hi,x","oa":18293},{"a":20169,"t":"code","b":[189,26,71],"m":"lda","o":"note_freq_lo,x","oa":18202},{"a":20172,"t":"code","b":[141,216,70],"m":"sta","o":"music_v2_live_note_freq_lo","oa":18136},{"a":20175,"t":"code","b":[140,217,70],"m":"sty","o":"music_v2_live_note_freq_hi","oa":18137},{"a":20178,"t":"code","b":[141,7,212],"m":"sta","o":"sid_v2_freq_lo"},{"a":20181,"t":"code","b":[140,8,212],"m":"sty","o":"sid_v2_freq_hi"},{"a":20184,"t":"code","b":[174,150,70],"m":"ldx","o":"music_v2_inst_pulse_width_lo","oa":18070},{"a":20187,"t":"code","b":[172,151,70],"m":"ldy","o":"music_v2_inst_pulse_width_hi","oa":18071},{"a":20190,"t":"code","b":[142,9,212],"m":"stx","o":"sid_v2_pulse_lo"},{"a":20193,"t":"code","b":[140,10,212],"m":"sty","o":"sid_v2_pulse_hi"},{"a":20196,"t":"code","b":[173,153,70],"m":"lda","o":"music_v2_inst_attack_decay","oa":18073},{"a":20199,"t":"code","b":[141,12,212],"m":"sta","o":"sid_v2_attack_decay"},{"a":20202,"t":"code","b":[173,154,70],"m":"lda","o":"music_v2_inst_sustain_release","oa":18074},{"a":20205,"t":"code","b":[141,13,212],"m":"sta","o":"sid_v2_sustain_release"},{"a":20208,"t":"code","b":[173,152,70],"m":"lda","o":"music_v2_inst_control","oa":18072},{"a":20211,"t":"code","b":[141,218,70],"m":"sta","o":"music_v2_live_control","oa":18138},{"a":20214,"t":"code","b":[41,247],"m":"and","o":"#$F7"},{"a":20216,"t":"code","b":[141,11,212],"m":"sta","o":"sid_v2_control"},{"a":20219,"t":"code","b":[32,95,72],"m":"jsr","o":"set_v2_pulse","oa":18527},{"a":20222,"t":"code","b":[173,145,70],"m":"lda","o":"music_v2_inst_pulse_mode","oa":18065},{"a":20225,"t":"code","b":[141,209,70],"m":"sta","o":"music_v2_live_pulse_mode","oa":18129},{"a":20228,"t":"code","b":[240,58],"m":"beq","o":"b_4F40","oa":20288},{"a":20230,"t":"code","b":[142,214,70],"m":"stx","o":"music_v2_live_pulse_start_lo","oa":18134},{"a":20233,"t":"code","b":[140,215,70],"m":"sty","o":"music_v2_live_pulse_start_hi","oa":18135},{"a":20236,"t":"code","b":[134,43],"m":"stx","o":"music_v2_pulse_lo","oa":43},{"a":20238,"t":"code","b":[132,44],"m":"sty","o":"music_v2_pulse_hi","oa":44},{"a":20240,"t":"code","b":[173,149,70],"m":"lda","o":"music_v2_inst_pulse_step2_hi","oa":18069},{"a":20243,"t":"code","b":[141,213,70],"m":"sta","o":"music_v2_live_pulse_step2_hi","oa":18133},{"a":20246,"t":"code","b":[174,148,70],"m":"ldx","o":"music_v2_inst_pulse_step2_lo","oa":18068},{"a":20249,"t":"code","b":[142,212,70],"m":"stx","o":"music_v2_live_pulse_step2_lo","oa":18132},{"a":20252,"t":"code","b":[173,147,70],"m":"lda","o":"music_v2_inst_pulse_step1_hi","oa":18067},{"a":20255,"t":"code","b":[141,211,70],"m":"sta","o":"music_v2_live_pulse_step1_hi","oa":18131},{"a":20258,"t":"code","b":[173,146,70],"m":"lda","o":"music_v2_inst_pulse_step1_lo","oa":18066},{"a":20261,"t":"code","b":[141,210,70],"m":"sta","o":"music_v2_live_pulse_step1_lo","oa":18130},{"a":20264,"t":"code","b":[173,144,70],"m":"lda","o":"music_v2_inst_pulse_delay","oa":18064},{"a":20267,"t":"code","b":[141,208,70],"m":"sta","o":"music_v2_live_pulse_delay","oa":18128},{"a":20270,"t":"code","b":[174,142,70],"m":"ldx","o":"music_v2_inst_pulse_ticks1","oa":18062},{"a":20273,"t":"code","b":[172,143,70],"m":"ldy","o":"music_v2_inst_pulse_ticks2","oa":18063},{"a":20276,"t":"code","b":[142,206,70],"m":"stx","o":"music_v2_live_pulse_ticks1","oa":18126},{"a":20279,"t":"code","b":[142,225,70],"m":"stx","o":"music_v2_live_pulse_left1","oa":18145},{"a":20282,"t":"code","b":[140,207,70],"m":"sty","o":"music_v2_live_pulse_ticks2","oa":18127},{"a":20285,"t":"code","b":[140,226,70],"m":"sty","o":"music_v2_live_pulse_left2","oa":18146},{"a":20288,"l":"b_4F40","t":"code","b":[173,141,70],"m":"lda","o":"music_v2_inst_pitch_mode","oa":18061,"x":[20228]},{"a":20291,"t":"code","b":[141,205,70],"m":"sta","o":"music_v2_live_pitch_mode","oa":18125},{"a":20294,"t":"code","b":[240,100],"m":"beq","o":"b_4FAC","oa":20396},{"a":20296,"t":"code","b":[174,140,70],"m":"ldx","o":"music_v2_inst_pitch_delay","oa":18060},{"a":20299,"t":"code","b":[142,204,70],"m":"stx","o":"music_v2_live_pitch_delay","oa":18124},{"a":20302,"t":"code","b":[174,139,70],"m":"ldx","o":"music_v2_inst_pitch_ticks4","oa":18059},{"a":20305,"t":"code","b":[142,203,70],"m":"stx","o":"music_v2_live_pitch_ticks4","oa":18123},{"a":20308,"t":"code","b":[174,138,70],"m":"ldx","o":"music_v2_inst_pitch_ticks3","oa":18058},{"a":20311,"t":"code","b":[142,202,70],"m":"stx","o":"music_v2_live_pitch_ticks3","oa":18122},{"a":20314,"t":"code","b":[174,137,70],"m":"ldx","o":"music_v2_inst_pitch_ticks2","oa":18057},{"a":20317,"t":"code","b":[142,201,70],"m":"stx","o":"music_v2_live_pitch_ticks2","oa":18121},{"a":20320,"t":"code","b":[174,136,70],"m":"ldx","o":"music_v2_inst_pitch_ticks1","oa":18056},{"a":20323,"t":"code","b":[142,200,70],"m":"stx","o":"music_v2_live_pitch_ticks1","oa":18120},{"a":20326,"t":"code","b":[174,135,70],"m":"ldx","o":"music_v2_inst_pitch_step4_hi","oa":18055},{"a":20329,"t":"code","b":[142,199,70],"m":"stx","o":"music_v2_live_pitch_step4_hi","oa":18119},{"a":20332,"t":"code","b":[174,134,70],"m":"ldx","o":"music_v2_inst_pitch_step4_lo","oa":18054},{"a":20335,"t":"code","b":[142,198,70],"m":"stx","o":"music_v2_live_pitch_step4_lo","oa":18118},{"a":20338,"t":"code","b":[174,133,70],"m":"ldx","o":"music_v2_inst_pitch_step3_hi","oa":18053},{"a":20341,"t":"code","b":[142,197,70],"m":"stx","o":"music_v2_live_pitch_step3_hi","oa":18117},{"a":20344,"t":"code","b":[174,132,70],"m":"ldx","o":"music_v2_inst_pitch_step3_lo","oa":18052},{"a":20347,"t":"code","b":[142,196,70],"m":"stx","o":"music_v2_live_pitch_step3_lo","oa":18116},{"a":20350,"t":"code","b":[174,131,70],"m":"ldx","o":"music_v2_inst_pitch_step2_hi","oa":18051},{"a":20353,"t":"code","b":[142,195,70],"m":"stx","o":"music_v2_live_pitch_step2_hi","oa":18115},{"a":20356,"t":"code","b":[174,130,70],"m":"ldx","o":"music_v2_inst_pitch_step2_lo","oa":18050},{"a":20359,"t":"code","b":[142,194,70],"m":"stx","o":"music_v2_live_pitch_step2_lo","oa":18114},{"a":20362,"t":"code","b":[174,129,70],"m":"ldx","o":"music_v2_inst_pitch_step1_hi","oa":18049},{"a":20365,"t":"code","b":[142,193,70],"m":"stx","o":"music_v2_live_pitch_step1_hi","oa":18113},{"a":20368,"t":"code","b":[174,128,70],"m":"ldx","o":"music_v2_inst_pitch_step1_lo","oa":18048},{"a":20371,"t":"code","b":[142,192,70],"m":"stx","o":"music_v2_live_pitch_step1_lo","oa":18112},{"a":20374,"t":"code","b":[41,8],"m":"and","o":"#$08"},{"a":20376,"t":"code","b":[240,15],"m":"beq","o":"b_4FA9","oa":20393},{"a":20378,"t":"code","b":[165,27],"m":"lda","o":"music_note_byte","oa":27},{"a":20380,"t":"code","b":[201,96],"m":"cmp","o":"#$60"},{"a":20382,"t":"code","b":[144,2],"m":"bcc","o":"b_4FA2","oa":20386},{"a":20384,"t":"code","b":[233,95],"m":"sbc","o":"#$5F"},{"a":20386,"l":"b_4FA2","t":"code","b":[101,17],"m":"adc","o":"music_v2_transpose","oa":17,"x":[20382]},{"a":20388,"t":"code","b":[141,202,70],"m":"sta","o":"music_v2_live_pitch_ticks3","oa":18122},{"a":20391,"t":"code","b":[208,3],"m":"bne","o":"b_4FAC","oa":20396},{"a":20393,"l":"b_4FA9","t":"code","b":[32,189,72],"m":"jsr","o":"restart_v2_pitch","oa":18621,"x":[20376]},{"a":20396,"l":"b_4FAC","t":"code","b":[174,155,70],"m":"ldx","o":"music_v2_inst_gate_time","oa":18075,"x":[20294,20391]},{"a":20399,"t":"code","b":[172,156,70],"m":"ldy","o":"music_v2_inst_release_time","oa":18076},{"a":20402,"t":"code","b":[142,219,70],"m":"stx","o":"music_v2_live_gate_time","oa":18139},{"a":20405,"t":"code","b":[140,220,70],"m":"sty","o":"music_v2_live_release_time","oa":18140},{"a":20408,"l":"v2_set_duration","c":"Voice 2: set the note time $0B from the duration byte (a code for notes below $60, ticks for $60-$BF) and step the pointer 2 bytes on.","t":"code","b":[160,1],"m":"ldy","o":"#$01","x":[20143]},{"a":20410,"t":"code","b":[177,6],"m":"lda","o":"(music_v2_track_lo),y","oa":6},{"a":20412,"t":"code","b":[166,27],"m":"ldx","o":"music_note_byte","oa":27},{"a":20414,"t":"code","b":[224,96],"m":"cpx","o":"#$60"},{"a":20416,"t":"code","b":[176,4],"m":"bcs","o":"b_4FC6","oa":20422},{"a":20418,"t":"code","b":[170],"m":"tax"},{"a":20419,"t":"code","b":[189,226,70],"m":"lda","o":"music_v2_live_pulse_left2,x","oa":18146},{"a":20422,"l":"b_4FC6","t":"code","b":[133,11],"m":"sta","o":"music_v2_note_time","oa":11,"x":[20416]},{"a":20424,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":20426,"t":"code","b":[24],"m":"clc"},{"a":20427,"t":"code","b":[101,6],"m":"adc","o":"music_v2_track_lo","oa":6},{"a":20429,"t":"code","b":[133,6],"m":"sta","o":"music_v2_track_lo","oa":6},{"a":20431,"t":"code","b":[176,1],"m":"bcs","o":"b_4FD2","oa":20434},{"a":20433,"t":"code","b":[96],"m":"rts"},{"a":20434,"l":"b_4FD2","t":"code","b":[230,7],"m":"inc","o":"music_v2_track_hi","oa":7,"x":[20431]},{"a":20436,"t":"code","b":[96],"m":"rts"},{"a":20437,"l":"v3_tick","c":"Voice 3 of the music, once per tick (from $B93D, whenever the music has voice 3): while $5B is set count down the note time $0C, and when it runs out read the next events at ($08) ($4FEB).","t":"code","b":[165,91],"m":"lda","o":"music_v3_active","oa":91,"x":[47421]},{"a":20439,"t":"code","b":[240,4],"m":"beq","o":"r_4FDD","oa":20445},{"a":20441,"t":"code","b":[198,12],"m":"dec","o":"music_v3_note_time","oa":12},{"a":20443,"t":"code","b":[240,14],"m":"beq","o":"j_4FEB","oa":20459},{"a":20445,"l":"r_4FDD","t":"code","b":[96],"m":"rts","x":[20439]},{"a":20446,"l":"b_4FDE","t":"code","b":[230,9],"m":"inc","o":"music_v3_track_hi","oa":9,"x":[20457]},{"a":20448,"t":"code","b":[208,9],"m":"bne","o":"j_4FEB","oa":20459},{"a":20450,"l":"v3_next_event","c":"Voice 3: step the track pointer $08/$09 on by 3 ($4FE2) or by A ($4FE4), then read the event at $4FEB: a command byte runs its handler through JMP ($4654) with the operand $4FFC rewritten, a smaller byte is a note ($5001).","t":"code","b":[169,3],"m":"lda","o":"#$03","x":[19409,19486,19537,19596,19636]},{"a":20452,"l":"j_4FE4","t":"code","b":[24],"m":"clc","x":[19371,19387,19435,19464,19519,19563,19609,19616]},{"a":20453,"t":"code","b":[101,8],"m":"adc","o":"music_v3_track_lo","oa":8},{"a":20455,"t":"code","b":[133,8],"m":"sta","o":"music_v3_track_lo","oa":8},{"a":20457,"t":"code","b":[176,243],"m":"bcs","o":"b_4FDE","oa":20446},{"a":20459,"l":"j_4FEB","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[19337,19499,19557,19584,20443,20448]},{"a":20461,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":20463,"t":"code","b":[201,192],"m":"cmp","o":"#$C0"},{"a":20465,"t":"code","b":[144,14],"m":"bcc","o":"v3_start_note","oa":20481},{"a":20467,"t":"code","b":[200],"m":"iny"},{"a":20468,"t":"code","b":[105,147],"m":"adc","o":"#$93"},{"a":20470,"t":"code","b":[141,252,79],"m":"sta","o":"op_v3_cmd_vector","oa":20476},{"a":20473,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":20475,"s":"low byte of the operand set at $4FF6 to command + $94: the word for this command in music_cmds_voice3","t":"code","b":[108,84,70],"m":"jmp","o":"(music_cmds_voice3)","oa":18004},{"a":20476,"t":"note","l":"op_v3_cmd_vector","c":"Low byte of the JMP ($4654) operand at $4FFB, rewritten at $4FF6 with (command + $94); $54 in the loaded image. A rest takes the JMP $50D7 at $4FFE.","note":"inside the item at $4FFB","x":[20470]},{"a":20478,"l":"b_4FFE","t":"code","b":[76,215,80],"m":"jmp","o":"v3_set_duration","oa":20695,"x":[20491]},{"a":20481,"l":"v3_start_note","c":"Voice 3 note event (transpose $12, template $A4-$C0): test bit first ($D412 = $08), the filter program restarts if voice 3 drives the filter ($57 = 2), then frequency, pulse width, envelope and control to $D40E-$D414 and the pulse and pitch settings to the live block $C1-$E3.","t":"code","b":[133,27],"m":"sta","o":"music_note_byte","oa":27,"x":[20465]},{"a":20483,"t":"code","b":[201,96],"m":"cmp","o":"#$60"},{"a":20485,"t":"code","b":[144,2],"m":"bcc","o":"b_5009","oa":20489},{"a":20487,"t":"code","b":[233,96],"m":"sbc","o":"#$60"},{"a":20489,"l":"b_5009","t":"code","b":[201,95],"m":"cmp","o":"#$5F","x":[20485]},{"a":20491,"t":"code","b":[240,241],"m":"beq","o":"b_4FFE","oa":20478},{"a":20493,"t":"code","b":[101,18],"m":"adc","o":"music_v3_transpose","oa":18},{"a":20495,"t":"code","b":[170],"m":"tax"},{"a":20496,"t":"code","b":[169,8],"m":"lda","o":"#$08"},{"a":20498,"t":"code","b":[141,18,212],"m":"sta","o":"sid_v3_control"},{"a":20501,"t":"code","b":[165,87],"m":"lda","o":"music_filter_voice","oa":87},{"a":20503,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":20505,"t":"code","b":[208,7],"m":"bne","o":"b_5022","oa":20514},{"a":20507,"t":"code","b":[134,19],"m":"stx","o":"music_ptr_lo","oa":19},{"a":20509,"t":"code","b":[32,59,77],"m":"jsr","o":"start_filter_program","oa":19771},{"a":20512,"t":"code","b":[166,19],"m":"ldx","o":"music_ptr_lo","oa":19},{"a":20514,"l":"b_5022","t":"code","b":[188,117,71],"m":"ldy","o":"note_freq_hi,x","oa":18293,"x":[20505]},{"a":20517,"t":"code","b":[189,26,71],"m":"lda","o":"note_freq_lo,x","oa":18202},{"a":20520,"t":"code","b":[133,217],"m":"sta","o":"music_v3_live_note_freq_lo","oa":217},{"a":20522,"t":"code","b":[132,218],"m":"sty","o":"music_v3_live_note_freq_hi","oa":218},{"a":20524,"t":"code","b":[141,14,212],"m":"sta","o":"sid_v3_freq_lo"},{"a":20527,"t":"code","b":[140,15,212],"m":"sty","o":"sid_v3_freq_hi"},{"a":20530,"t":"code","b":[166,186],"m":"ldx","o":"music_v3_inst_pulse_width_lo","oa":186},{"a":20532,"t":"code","b":[164,187],"m":"ldy","o":"music_v3_inst_pulse_width_hi","oa":187},{"a":20534,"t":"code","b":[142,16,212],"m":"stx","o":"sid_v3_pulse_lo"},{"a":20537,"t":"code","b":[140,17,212],"m":"sty","o":"sid_v3_pulse_hi"},{"a":20540,"t":"code","b":[165,189],"m":"lda","o":"music_v3_inst_attack_decay","oa":189},{"a":20542,"t":"code","b":[141,19,212],"m":"sta","o":"sid_v3_attack_decay"},{"a":20545,"t":"code","b":[165,190],"m":"lda","o":"music_v3_inst_sustain_release","oa":190},{"a":20547,"t":"code","b":[141,20,212],"m":"sta","o":"sid_v3_sustain_release"},{"a":20550,"t":"code","b":[165,188],"m":"lda","o":"music_v3_inst_control","oa":188},{"a":20552,"t":"code","b":[133,219],"m":"sta","o":"music_v3_live_control","oa":219},{"a":20554,"t":"code","b":[41,247],"m":"and","o":"#$F7"},{"a":20556,"t":"code","b":[141,18,212],"m":"sta","o":"sid_v3_control"},{"a":20559,"t":"code","b":[32,116,72],"m":"jsr","o":"set_v3_pulse","oa":18548},{"a":20562,"t":"code","b":[165,181],"m":"lda","o":"music_v3_inst_pulse_mode","oa":181},{"a":20564,"t":"code","b":[133,210],"m":"sta","o":"music_v3_live_pulse_mode","oa":210},{"a":20566,"t":"code","b":[240,40],"m":"beq","o":"b_5080","oa":20608},{"a":20568,"t":"code","b":[134,215],"m":"stx","o":"music_v3_live_pulse_start_lo","oa":215},{"a":20570,"t":"code","b":[132,216],"m":"sty","o":"music_v3_live_pulse_start_hi","oa":216},{"a":20572,"t":"code","b":[134,45],"m":"stx","o":"music_v3_pulse_lo","oa":45},{"a":20574,"t":"code","b":[132,46],"m":"sty","o":"music_v3_pulse_hi","oa":46},{"a":20576,"t":"code","b":[165,185],"m":"lda","o":"music_v3_inst_pulse_step2_hi","oa":185},{"a":20578,"t":"code","b":[133,214],"m":"sta","o":"music_v3_live_pulse_step2_hi","oa":214},{"a":20580,"t":"code","b":[165,184],"m":"lda","o":"music_v3_inst_pulse_step2_lo","oa":184},{"a":20582,"t":"code","b":[133,213],"m":"sta","o":"music_v3_live_pulse_step2_lo","oa":213},{"a":20584,"t":"code","b":[165,183],"m":"lda","o":"music_v3_inst_pulse_step1_hi","oa":183},{"a":20586,"t":"code","b":[133,212],"m":"sta","o":"music_v3_live_pulse_step1_hi","oa":212},{"a":20588,"t":"code","b":[165,182],"m":"lda","o":"music_v3_inst_pulse_step1_lo","oa":182},{"a":20590,"t":"code","b":[133,211],"m":"sta","o":"music_v3_live_pulse_step1_lo","oa":211},{"a":20592,"t":"code","b":[165,180],"m":"lda","o":"music_v3_inst_pulse_delay","oa":180},{"a":20594,"t":"code","b":[133,209],"m":"sta","o":"music_v3_live_pulse_delay","oa":209},{"a":20596,"t":"code","b":[166,178],"m":"ldx","o":"music_v3_inst_pulse_ticks1","oa":178},{"a":20598,"t":"code","b":[164,179],"m":"ldy","o":"music_v3_inst_pulse_ticks2","oa":179},{"a":20600,"t":"code","b":[134,207],"m":"stx","o":"music_v3_live_pulse_ticks1","oa":207},{"a":20602,"t":"code","b":[134,226],"m":"stx","o":"music_v3_live_pulse_left1","oa":226},{"a":20604,"t":"code","b":[132,208],"m":"sty","o":"music_v3_live_pulse_ticks2","oa":208},{"a":20606,"t":"code","b":[132,227],"m":"sty","o":"music_v3_live_pulse_left2","oa":227},{"a":20608,"l":"b_5080","t":"code","b":[165,177],"m":"lda","o":"music_v3_inst_pitch_mode","oa":177,"x":[20566]},{"a":20610,"t":"code","b":[133,206],"m":"sta","o":"music_v3_live_pitch_mode","oa":206},{"a":20612,"t":"code","b":[240,73],"m":"beq","o":"b_50CF","oa":20687},{"a":20614,"t":"code","b":[166,176],"m":"ldx","o":"music_v3_inst_pitch_delay","oa":176},{"a":20616,"t":"code","b":[134,205],"m":"stx","o":"music_v3_live_pitch_delay","oa":205},{"a":20618,"t":"code","b":[166,175],"m":"ldx","o":"music_v3_inst_pitch_ticks4","oa":175},{"a":20620,"t":"code","b":[134,204],"m":"stx","o":"music_v3_live_pitch_ticks4","oa":204},{"a":20622,"t":"code","b":[166,174],"m":"ldx","o":"music_v3_inst_pitch_ticks3","oa":174},{"a":20624,"t":"code","b":[134,203],"m":"stx","o":"music_v3_live_pitch_ticks3","oa":203},{"a":20626,"t":"code","b":[166,173],"m":"ldx","o":"music_v3_inst_pitch_ticks2","oa":173},{"a":20628,"t":"code","b":[134,202],"m":"stx","o":"music_v3_live_pitch_ticks2","oa":202},{"a":20630,"t":"code","b":[166,172],"m":"ldx","o":"music_v3_inst_pitch_ticks1","oa":172},{"a":20632,"t":"code","b":[134,201],"m":"stx","o":"music_v3_live_pitch_ticks1","oa":201},{"a":20634,"t":"code","b":[166,171],"m":"ldx","o":"music_v3_inst_pitch_step4_hi","oa":171},{"a":20636,"t":"code","b":[134,200],"m":"stx","o":"music_v3_live_pitch_step4_hi","oa":200},{"a":20638,"t":"code","b":[166,170],"m":"ldx","o":"music_v3_inst_pitch_step4_lo","oa":170},{"a":20640,"t":"code","b":[134,199],"m":"stx","o":"music_v3_live_pitch_step4_lo","oa":199},{"a":20642,"t":"code","b":[166,169],"m":"ldx","o":"music_v3_inst_pitch_step3_hi","oa":169},{"a":20644,"t":"code","b":[134,198],"m":"stx","o":"music_v3_live_pitch_step3_hi","oa":198},{"a":20646,"t":"code","b":[166,168],"m":"ldx","o":"music_v3_inst_pitch_step3_lo","oa":168},{"a":20648,"t":"code","b":[134,197],"m":"stx","o":"music_v3_live_pitch_step3_lo","oa":197},{"a":20650,"t":"code","b":[166,167],"m":"ldx","o":"music_v3_inst_pitch_step2_hi","oa":167},{"a":20652,"t":"code","b":[134,196],"m":"stx","o":"music_v3_live_pitch_step2_hi","oa":196},{"a":20654,"t":"code","b":[166,166],"m":"ldx","o":"music_v3_inst_pitch_step2_lo","oa":166},{"a":20656,"t":"code","b":[134,195],"m":"stx","o":"music_v3_live_pitch_step2_lo","oa":195},{"a":20658,"t":"code","b":[166,165],"m":"ldx","o":"music_v3_inst_pitch_step1_hi","oa":165},{"a":20660,"t":"code","b":[134,194],"m":"stx","o":"music_v3_live_pitch_step1_hi","oa":194},{"a":20662,"t":"code","b":[166,164],"m":"ldx","o":"music_v3_inst_pitch_step1_lo","oa":164},{"a":20664,"t":"code","b":[134,193],"m":"stx","o":"music_v3_live_pitch_step1_lo","oa":193},{"a":20666,"t":"code","b":[41,8],"m":"and","o":"#$08"},{"a":20668,"t":"code","b":[240,14],"m":"beq","o":"b_50CC","oa":20684},{"a":20670,"t":"code","b":[165,27],"m":"lda","o":"music_note_byte","oa":27},{"a":20672,"t":"code","b":[201,96],"m":"cmp","o":"#$60"},{"a":20674,"t":"code","b":[144,2],"m":"bcc","o":"b_50C6","oa":20678},{"a":20676,"t":"code","b":[233,95],"m":"sbc","o":"#$5F"},{"a":20678,"l":"b_50C6","t":"code","b":[101,18],"m":"adc","o":"music_v3_transpose","oa":18,"x":[20674]},{"a":20680,"t":"code","b":[133,203],"m":"sta","o":"music_v3_live_pitch_ticks3","oa":203},{"a":20682,"t":"code","b":[208,3],"m":"bne","o":"b_50CF","oa":20687},{"a":20684,"l":"b_50CC","t":"code","b":[32,224,72],"m":"jsr","o":"restart_v3_pitch","oa":18656,"x":[20668]},{"a":20687,"l":"b_50CF","t":"code","b":[166,191],"m":"ldx","o":"music_v3_inst_gate_time","oa":191,"x":[20612,20682]},{"a":20689,"t":"code","b":[164,192],"m":"ldy","o":"music_v3_inst_release_time","oa":192},{"a":20691,"t":"code","b":[134,220],"m":"stx","o":"music_v3_live_gate_time","oa":220},{"a":20693,"t":"code","b":[132,221],"m":"sty","o":"music_v3_live_release_time","oa":221},{"a":20695,"l":"v3_set_duration","c":"Voice 3: set the note time $0C from the duration byte and step the pointer 2 bytes on.","t":"code","b":[160,1],"m":"ldy","o":"#$01","x":[20478]},{"a":20697,"t":"code","b":[177,8],"m":"lda","o":"(music_v3_track_lo),y","oa":8},{"a":20699,"t":"code","b":[166,27],"m":"ldx","o":"music_note_byte","oa":27},{"a":20701,"t":"code","b":[224,96],"m":"cpx","o":"#$60"},{"a":20703,"t":"code","b":[176,4],"m":"bcs","o":"b_50E5","oa":20709},{"a":20705,"t":"code","b":[170],"m":"tax"},{"a":20706,"t":"code","b":[189,226,70],"m":"lda","o":"music_v2_live_pulse_left2,x","oa":18146},{"a":20709,"l":"b_50E5","t":"code","b":[133,12],"m":"sta","o":"music_v3_note_time","oa":12,"x":[20703]},{"a":20711,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":20713,"t":"code","b":[24],"m":"clc"},{"a":20714,"t":"code","b":[101,8],"m":"adc","o":"music_v3_track_lo","oa":8},{"a":20716,"t":"code","b":[133,8],"m":"sta","o":"music_v3_track_lo","oa":8},{"a":20718,"t":"code","b":[176,1],"m":"bcs","o":"b_50F1","oa":20721},{"a":20720,"t":"code","b":[96],"m":"rts"},{"a":20721,"l":"b_50F1","t":"code","b":[230,9],"m":"inc","o":"music_v3_track_hi","oa":9,"x":[20718]},{"a":20723,"l":"r_50F3","t":"code","b":[96],"m":"rts","x":[20727,20784]},{"a":20724,"l":"v1_shape_sound","c":"Voice 1 sound shaping, once per tick (from $B92E): nothing while the release counter $46B9 is 0. The gate is released (bits 0 and 3 cleared in $46B7 and $D404) when the gate time $46B8 has been counted down or, with control bit 3 set, as soon as fewer than $46B8 ticks of the note are left ($0A); the release time $46B9 is then counted down and at 0 the registers $D400-$D406 are cleared (and the filter sweep stopped if voice 1 drives it). $FF in either time holds. Then the pulse sweep ($5149) and the pitch effect ($51A7).","t":"code","b":[174,185,70],"m":"ldx","o":"music_v1_live_release_time","oa":18105,"x":[47406]},{"a":20727,"t":"code","b":[240,250],"m":"beq","o":"r_50F3","oa":20723},{"a":20729,"t":"code","b":[173,183,70],"m":"lda","o":"music_v1_live_control","oa":18103},{"a":20732,"t":"code","b":[41,8],"m":"and","o":"#$08"},{"a":20734,"t":"code","b":[240,22],"m":"beq","o":"b_5116","oa":20758},{"a":20736,"t":"code","b":[165,10],"m":"lda","o":"music_v1_note_time","oa":10},{"a":20738,"t":"code","b":[205,184,70],"m":"cmp","o":"music_v1_live_gate_time","oa":18104},{"a":20741,"t":"code","b":[176,66],"m":"bcs","o":"v1_pulse_sweep","oa":20809},{"a":20743,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":20745,"t":"code","b":[141,184,70],"m":"sta","o":"music_v1_live_gate_time","oa":18104},{"a":20748,"t":"code","b":[173,183,70],"m":"lda","o":"music_v1_live_control","oa":18103},{"a":20751,"t":"code","b":[41,246],"m":"and","o":"#$F6"},{"a":20753,"t":"code","b":[141,183,70],"m":"sta","o":"music_v1_live_control","oa":18103},{"a":20756,"t":"code","b":[208,48],"m":"bne","o":"b_5146","oa":20806},{"a":20758,"l":"b_5116","t":"code","b":[173,184,70],"m":"lda","o":"music_v1_live_gate_time","oa":18104,"x":[20734]},{"a":20761,"t":"code","b":[208,27],"m":"bne","o":"b_5136","oa":20790},{"a":20763,"t":"code","b":[172,185,70],"m":"ldy","o":"music_v1_live_release_time","oa":18105},{"a":20766,"t":"code","b":[200],"m":"iny"},{"a":20767,"t":"code","b":[240,40],"m":"beq","o":"v1_pulse_sweep","oa":20809},{"a":20769,"t":"code","b":[206,185,70],"m":"dec","o":"music_v1_live_release_time","oa":18105},{"a":20772,"t":"code","b":[208,35],"m":"bne","o":"v1_pulse_sweep","oa":20809},{"a":20774,"t":"code","b":[162,6],"m":"ldx","o":"#$06"},{"a":20776,"l":"b_5128","t":"code","b":[157,0,212],"m":"sta","o":"sid_v1_freq_lo,x","x":[20780]},{"a":20779,"t":"code","b":[202],"m":"dex"},{"a":20780,"t":"code","b":[16,250],"m":"bpl","o":"b_5128","oa":20776},{"a":20782,"l":"j_512E","t":"code","b":[197,87],"m":"cmp","o":"music_filter_voice","oa":87,"x":[21514]},{"a":20784,"t":"code","b":[208,193],"m":"bne","o":"r_50F3","oa":20723},{"a":20786,"t":"code","b":[232],"m":"inx"},{"a":20787,"t":"code","b":[134,78],"m":"stx","o":"music_filter_sweep_mode","oa":78},{"a":20789,"t":"code","b":[96],"m":"rts"},{"a":20790,"l":"b_5136","t":"code","b":[172,184,70],"m":"ldy","o":"music_v1_live_gate_time","oa":18104,"x":[20761]},{"a":20793,"t":"code","b":[200],"m":"iny"},{"a":20794,"t":"code","b":[240,13],"m":"beq","o":"v1_pulse_sweep","oa":20809},{"a":20796,"t":"code","b":[206,184,70],"m":"dec","o":"music_v1_live_gate_time","oa":18104},{"a":20799,"t":"code","b":[208,8],"m":"bne","o":"v1_pulse_sweep","oa":20809},{"a":20801,"t":"code","b":[173,183,70],"m":"lda","o":"music_v1_live_control","oa":18103},{"a":20804,"t":"code","b":[41,246],"m":"and","o":"#$F6"},{"a":20806,"l":"b_5146","t":"code","b":[141,4,212],"m":"sta","o":"sid_v1_control","x":[20756]},{"a":20809,"l":"v1_pulse_sweep","c":"Voice 1 pulse sweep (mode $46AE not 0): after the delay $46AD, add pulse step 1 ($46AF/$46B0) for $46BE ticks, then step 2 ($46B1/$46B2) for $46BF ticks; then mode bit 7 restarts from the start width ($4842), bit 0 repeats from the current width ($4848), otherwise it holds. The width $29/$2A goes to $D402/$D403.","t":"code","b":[173,174,70],"m":"lda","o":"music_v1_live_pulse_mode","oa":18094,"x":[20741,20767,20772,20794,20799]},{"a":20812,"t":"code","b":[240,89],"m":"beq","o":"v1_pitch_effect","oa":20903},{"a":20814,"t":"code","b":[173,173,70],"m":"lda","o":"music_v1_live_pulse_delay","oa":18093},{"a":20817,"t":"code","b":[240,6],"m":"beq","o":"b_5159","oa":20825},{"a":20819,"t":"code","b":[206,173,70],"m":"dec","o":"music_v1_live_pulse_delay","oa":18093},{"a":20822,"t":"code","b":[76,167,81],"m":"jmp","o":"v1_pitch_effect","oa":20903},{"a":20825,"l":"b_5159","t":"code","b":[24],"m":"clc","x":[20817,20884,20890]},{"a":20826,"t":"code","b":[166,41],"m":"ldx","o":"music_v1_pulse_lo","oa":41},{"a":20828,"t":"code","b":[164,42],"m":"ldy","o":"music_v1_pulse_hi","oa":42},{"a":20830,"t":"code","b":[173,190,70],"m":"lda","o":"music_v1_live_pulse_left1","oa":18110},{"a":20833,"t":"code","b":[240,16],"m":"beq","o":"b_5173","oa":20851},{"a":20835,"t":"code","b":[206,190,70],"m":"dec","o":"music_v1_live_pulse_left1","oa":18110},{"a":20838,"t":"code","b":[138],"m":"txa"},{"a":20839,"t":"code","b":[109,175,70],"m":"adc","o":"music_v1_live_pulse_step1_lo","oa":18095},{"a":20842,"t":"code","b":[170],"m":"tax"},{"a":20843,"t":"code","b":[152],"m":"tya"},{"a":20844,"t":"code","b":[109,176,70],"m":"adc","o":"music_v1_live_pulse_step1_hi","oa":18096},{"a":20847,"t":"code","b":[168],"m":"tay"},{"a":20848,"t":"code","b":[76,157,81],"m":"jmp","o":"j_519D","oa":20893},{"a":20851,"l":"b_5173","t":"code","b":[173,191,70],"m":"lda","o":"music_v1_live_pulse_left2","oa":18111,"x":[20833]},{"a":20854,"t":"code","b":[240,16],"m":"beq","o":"b_5188","oa":20872},{"a":20856,"t":"code","b":[206,191,70],"m":"dec","o":"music_v1_live_pulse_left2","oa":18111},{"a":20859,"t":"code","b":[138],"m":"txa"},{"a":20860,"t":"code","b":[109,177,70],"m":"adc","o":"music_v1_live_pulse_step2_lo","oa":18097},{"a":20863,"t":"code","b":[170],"m":"tax"},{"a":20864,"t":"code","b":[152],"m":"tya"},{"a":20865,"t":"code","b":[109,178,70],"m":"adc","o":"music_v1_live_pulse_step2_hi","oa":18098},{"a":20868,"t":"code","b":[168],"m":"tay"},{"a":20869,"t":"code","b":[76,157,81],"m":"jmp","o":"j_519D","oa":20893},{"a":20872,"l":"b_5188","t":"code","b":[173,174,70],"m":"lda","o":"music_v1_live_pulse_mode","oa":18094,"x":[20854]},{"a":20875,"t":"code","b":[41,129],"m":"and","o":"#$81"},{"a":20877,"t":"code","b":[240,14],"m":"beq","o":"j_519D","oa":20893},{"a":20879,"t":"code","b":[16,6],"m":"bpl","o":"b_5197","oa":20887},{"a":20881,"t":"code","b":[32,66,72],"m":"jsr","o":"restart_v1_pulse","oa":18498},{"a":20884,"t":"code","b":[76,89,81],"m":"jmp","o":"b_5159","oa":20825},{"a":20887,"l":"b_5197","t":"code","b":[32,72,72],"m":"jsr","o":"set_v1_pulse","oa":18504,"x":[20879]},{"a":20890,"t":"code","b":[76,89,81],"m":"jmp","o":"b_5159","oa":20825},{"a":20893,"l":"j_519D","t":"code","b":[134,41],"m":"stx","o":"music_v1_pulse_lo","oa":41,"x":[20848,20869,20877]},{"a":20895,"t":"code","b":[132,42],"m":"sty","o":"music_v1_pulse_hi","oa":42},{"a":20897,"t":"code","b":[142,2,212],"m":"stx","o":"sid_v1_pulse_lo"},{"a":20900,"t":"code","b":[140,3,212],"m":"sty","o":"sid_v1_pulse_hi"},{"a":20903,"l":"v1_pitch_effect","c":"Voice 1 pitch effect (mode $46AA not 0): bit 3 selects the arpeggio ($51C5); otherwise the delay $46A9 is counted down first, adding step 4 on each tick of it when mode bit 1 is set (a slide into the note), and then the steps run ($51FA).","t":"code","b":[173,170,70],"m":"lda","o":"music_v1_live_pitch_mode","oa":18090,"x":[20812,20822]},{"a":20906,"t":"code","b":[240,24],"m":"beq","o":"r_51C4","oa":20932},{"a":20908,"t":"code","b":[41,8],"m":"and","o":"#$08"},{"a":20910,"t":"code","b":[208,21],"m":"bne","o":"v1_arpeggio","oa":20933},{"a":20912,"t":"code","b":[166,47],"m":"ldx","o":"music_v1_freq_lo","oa":47},{"a":20914,"t":"code","b":[164,48],"m":"ldy","o":"music_v1_freq_hi","oa":48},{"a":20916,"t":"code","b":[24],"m":"clc"},{"a":20917,"t":"code","b":[173,169,70],"m":"lda","o":"music_v1_live_pitch_delay","oa":18089},{"a":20920,"t":"code","b":[240,65],"m":"beq","o":"b_51FB","oa":20987},{"a":20922,"t":"code","b":[206,169,70],"m":"dec","o":"music_v1_live_pitch_delay","oa":18089},{"a":20925,"t":"code","b":[173,170,70],"m":"lda","o":"music_v1_live_pitch_mode","oa":18090},{"a":20928,"t":"code","b":[41,2],"m":"and","o":"#$02"},{"a":20930,"t":"code","b":[208,123],"m":"bne","o":"b_523F","oa":21055},{"a":20932,"l":"r_51C4","t":"code","b":[96],"m":"rts","x":[20906,20936]},{"a":20933,"l":"v1_arpeggio","c":"Voice 1 arpeggio: every $46A3 ticks (counter $46A1) play base note $46A7 plus the next offset from the table at ($46A5), with the index $46A9 counting down and going back to $46A8 below 0; the frequency from $471A/$4775 goes straight to $D400/$D401.","t":"code","b":[206,161,70],"m":"dec","o":"music_v1_live_pitch_step3_lo","oa":18081,"x":[20910]},{"a":20936,"t":"code","b":[208,250],"m":"bne","o":"r_51C4","oa":20932},{"a":20938,"t":"code","b":[172,163,70],"m":"ldy","o":"music_v1_live_pitch_step4_lo","oa":18083},{"a":20941,"t":"code","b":[140,161,70],"m":"sty","o":"music_v1_live_pitch_step3_lo","oa":18081},{"a":20944,"t":"code","b":[172,169,70],"m":"ldy","o":"music_v1_live_pitch_delay","oa":18089},{"a":20947,"t":"code","b":[16,3],"m":"bpl","o":"b_51D8","oa":20952},{"a":20949,"t":"code","b":[172,168,70],"m":"ldy","o":"music_v1_live_pitch_ticks4","oa":18088},{"a":20952,"l":"b_51D8","t":"code","b":[174,165,70],"m":"ldx","o":"music_v1_live_pitch_ticks1","oa":18085,"x":[20947]},{"a":20955,"t":"code","b":[134,19],"m":"stx","o":"music_ptr_lo","oa":19},{"a":20957,"t":"code","b":[174,166,70],"m":"ldx","o":"music_v1_live_pitch_ticks2","oa":18086},{"a":20960,"t":"code","b":[134,20],"m":"stx","o":"music_ptr_hi","oa":20},{"a":20962,"t":"code","b":[173,167,70],"m":"lda","o":"music_v1_live_pitch_ticks3","oa":18087},{"a":20965,"t":"code","b":[24],"m":"clc"},{"a":20966,"t":"code","b":[113,19],"m":"adc","o":"(music_ptr_lo),y","oa":19},{"a":20968,"t":"code","b":[136],"m":"dey"},{"a":20969,"t":"code","b":[140,169,70],"m":"sty","o":"music_v1_live_pitch_delay","oa":18089},{"a":20972,"t":"code","b":[168],"m":"tay"},{"a":20973,"t":"code","b":[190,26,71],"m":"ldx","o":"note_freq_lo,y","oa":18202},{"a":20976,"t":"code","b":[185,117,71],"m":"lda","o":"note_freq_hi,y","oa":18293},{"a":20979,"t":"code","b":[142,0,212],"m":"stx","o":"sid_v1_freq_lo"},{"a":20982,"t":"code","b":[141,1,212],"m":"sta","o":"sid_v1_freq_hi"},{"a":20985,"t":"code","b":[96],"m":"rts"},{"a":20986,"l":"v1_pitch_steps","c":"Voice 1 pitch steps: add step 1-4 ($469D-$46A4) to the current frequency $2F/$30 for $46BA-$46BD ticks each and write it to $D400/$D401; after the fourth, mode bit 7 restarts from the note's frequency ($489A), bit 0 repeats from here ($48A4), otherwise the frequency holds.","t":"code","b":[24],"m":"clc","x":[21088,21094]},{"a":20987,"l":"b_51FB","t":"code","b":[173,186,70],"m":"lda","o":"music_v1_live_pitch_left1","oa":18106,"x":[20920]},{"a":20990,"t":"code","b":[240,15],"m":"beq","o":"b_520F","oa":21007},{"a":20992,"t":"code","b":[206,186,70],"m":"dec","o":"music_v1_live_pitch_left1","oa":18106},{"a":20995,"t":"code","b":[138],"m":"txa"},{"a":20996,"t":"code","b":[109,157,70],"m":"adc","o":"music_v1_live_pitch_step1_lo","oa":18077},{"a":20999,"t":"code","b":[170],"m":"tax"},{"a":21000,"t":"code","b":[152],"m":"tya"},{"a":21001,"t":"code","b":[109,158,70],"m":"adc","o":"music_v1_live_pitch_step1_hi","oa":18078},{"a":21004,"t":"code","b":[76,72,82],"m":"jmp","o":"j_5248","oa":21064},{"a":21007,"l":"b_520F","t":"code","b":[173,187,70],"m":"lda","o":"music_v1_live_pitch_left2","oa":18107,"x":[20990]},{"a":21010,"t":"code","b":[240,15],"m":"beq","o":"b_5223","oa":21027},{"a":21012,"t":"code","b":[206,187,70],"m":"dec","o":"music_v1_live_pitch_left2","oa":18107},{"a":21015,"t":"code","b":[138],"m":"txa"},{"a":21016,"t":"code","b":[109,159,70],"m":"adc","o":"music_v1_live_pitch_step2_lo","oa":18079},{"a":21019,"t":"code","b":[170],"m":"tax"},{"a":21020,"t":"code","b":[152],"m":"tya"},{"a":21021,"t":"code","b":[109,160,70],"m":"adc","o":"music_v1_live_pitch_step2_hi","oa":18080},{"a":21024,"t":"code","b":[76,72,82],"m":"jmp","o":"j_5248","oa":21064},{"a":21027,"l":"b_5223","t":"code","b":[173,188,70],"m":"lda","o":"music_v1_live_pitch_left3","oa":18108,"x":[21010]},{"a":21030,"t":"code","b":[240,15],"m":"beq","o":"b_5237","oa":21047},{"a":21032,"t":"code","b":[206,188,70],"m":"dec","o":"music_v1_live_pitch_left3","oa":18108},{"a":21035,"t":"code","b":[138],"m":"txa"},{"a":21036,"t":"code","b":[109,161,70],"m":"adc","o":"music_v1_live_pitch_step3_lo","oa":18081},{"a":21039,"t":"code","b":[170],"m":"tax"},{"a":21040,"t":"code","b":[152],"m":"tya"},{"a":21041,"t":"code","b":[109,162,70],"m":"adc","o":"music_v1_live_pitch_step3_hi","oa":18082},{"a":21044,"t":"code","b":[76,72,82],"m":"jmp","o":"j_5248","oa":21064},{"a":21047,"l":"b_5237","t":"code","b":[173,189,70],"m":"lda","o":"music_v1_live_pitch_left4","oa":18109,"x":[21030]},{"a":21050,"t":"code","b":[240,24],"m":"beq","o":"b_5254","oa":21076,"x":[14817]},{"a":21052,"t":"code","b":[206,189,70],"m":"dec","o":"music_v1_live_pitch_left4","oa":18109},{"a":21055,"l":"b_523F","t":"code","b":[138],"m":"txa","x":[20930]},{"a":21056,"t":"code","b":[109,163,70],"m":"adc","o":"music_v1_live_pitch_step4_lo","oa":18083},{"a":21059,"t":"code","b":[170],"m":"tax"},{"a":21060,"t":"code","b":[152],"m":"tya"},{"a":21061,"t":"code","b":[109,164,70],"m":"adc","o":"music_v1_live_pitch_step4_hi","oa":18084},{"a":21064,"l":"j_5248","t":"code","b":[168],"m":"tay","x":[21004,21024,21044]},{"a":21065,"l":"b_5249","t":"code","b":[142,0,212],"m":"stx","o":"sid_v1_freq_lo","x":[21081]},{"a":21068,"t":"code","b":[140,1,212],"m":"sty","o":"sid_v1_freq_hi"},{"a":21071,"t":"code","b":[134,47],"m":"stx","o":"music_v1_freq_lo","oa":47},{"a":21073,"t":"code","b":[132,48],"m":"sty","o":"music_v1_freq_hi","oa":48},{"a":21075,"l":"r_5253","t":"code","b":[96],"m":"rts","x":[21100]},{"a":21076,"l":"b_5254","t":"code","b":[173,170,70],"m":"lda","o":"music_v1_live_pitch_mode","oa":18090,"x":[21050]},{"a":21079,"t":"code","b":[41,129],"m":"and","o":"#$81"},{"a":21081,"t":"code","b":[240,238],"m":"beq","o":"b_5249","oa":21065},{"a":21083,"t":"code","b":[16,6],"m":"bpl","o":"b_5263","oa":21091},{"a":21085,"t":"code","b":[32,154,72],"m":"jsr","o":"restart_v1_pitch","oa":18586},{"a":21088,"t":"code","b":[76,250,81],"m":"jmp","o":"v1_pitch_steps","oa":20986},{"a":21091,"l":"b_5263","t":"code","b":[32,164,72],"m":"jsr","o":"reload_v1_pitch_counts","oa":18596,"x":[21083]},{"a":21094,"t":"code","b":[76,250,81],"m":"jmp","o":"v1_pitch_steps","oa":20986},{"a":21097,"l":"v2_shape_sound","c":"Voice 2 sound shaping, once per tick (from $B934): gate-off after the gate time $46DB (or when fewer ticks of the note $0B are left, with control bit 3 in $46DA), then the release time $46DC and the clearing of $D407-$D40D; then the pulse sweep ($52B7) and the pitch effect ($5315). As $50F4, with voice 2's variables.","t":"code","b":[174,220,70],"m":"ldx","o":"music_v2_live_release_time","oa":18140,"x":[47412]},{"a":21100,"t":"code","b":[240,229],"m":"beq","o":"r_5253","oa":21075},{"a":21102,"t":"code","b":[173,218,70],"m":"lda","o":"music_v2_live_control","oa":18138},{"a":21105,"t":"code","b":[41,8],"m":"and","o":"#$08"},{"a":21107,"t":"code","b":[240,22],"m":"beq","o":"b_528B","oa":21131},{"a":21109,"t":"code","b":[165,11],"m":"lda","o":"music_v2_note_time","oa":11},{"a":21111,"t":"code","b":[205,219,70],"m":"cmp","o":"music_v2_live_gate_time","oa":18139},{"a":21114,"t":"code","b":[176,59],"m":"bcs","o":"v2_pulse_sweep","oa":21175},{"a":21116,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":21118,"t":"code","b":[141,219,70],"m":"sta","o":"music_v2_live_gate_time","oa":18139},{"a":21121,"t":"code","b":[173,218,70],"m":"lda","o":"music_v2_live_control","oa":18138},{"a":21124,"t":"code","b":[41,246],"m":"and","o":"#$F6"},{"a":21126,"t":"code","b":[141,218,70],"m":"sta","o":"music_v2_live_control","oa":18138},{"a":21129,"t":"code","b":[208,41],"m":"bne","o":"b_52B4","oa":21172},{"a":21131,"l":"b_528B","t":"code","b":[173,219,70],"m":"lda","o":"music_v2_live_gate_time","oa":18139,"x":[21107]},{"a":21134,"t":"code","b":[208,20],"m":"bne","o":"b_52A4","oa":21156},{"a":21136,"t":"code","b":[172,220,70],"m":"ldy","o":"music_v2_live_release_time","oa":18140},{"a":21139,"t":"code","b":[200],"m":"iny"},{"a":21140,"t":"code","b":[240,33],"m":"beq","o":"v2_pulse_sweep","oa":21175},{"a":21142,"t":"code","b":[206,220,70],"m":"dec","o":"music_v2_live_release_time","oa":18140},{"a":21145,"t":"code","b":[208,28],"m":"bne","o":"v2_pulse_sweep","oa":21175},{"a":21147,"t":"code","b":[162,6],"m":"ldx","o":"#$06"},{"a":21149,"l":"b_529D","t":"code","b":[157,7,212],"m":"sta","o":"sid_v2_freq_lo,x","x":[21153]},{"a":21152,"t":"code","b":[202],"m":"dex"},{"a":21153,"t":"code","b":[16,250],"m":"bpl","o":"b_529D","oa":21149},{"a":21155,"t":"code","b":[96],"m":"rts"},{"a":21156,"l":"b_52A4","t":"code","b":[172,219,70],"m":"ldy","o":"music_v2_live_gate_time","oa":18139,"x":[21134]},{"a":21159,"t":"code","b":[200],"m":"iny"},{"a":21160,"t":"code","b":[240,13],"m":"beq","o":"v2_pulse_sweep","oa":21175},{"a":21162,"t":"code","b":[206,219,70],"m":"dec","o":"music_v2_live_gate_time","oa":18139},{"a":21165,"t":"code","b":[208,8],"m":"bne","o":"v2_pulse_sweep","oa":21175},{"a":21167,"t":"code","b":[173,218,70],"m":"lda","o":"music_v2_live_control","oa":18138},{"a":21170,"t":"code","b":[41,246],"m":"and","o":"#$F6"},{"a":21172,"l":"b_52B4","t":"code","b":[141,11,212],"m":"sta","o":"sid_v2_control","x":[21129]},{"a":21175,"l":"v2_pulse_sweep","c":"Voice 2 pulse sweep: mode $46D1, delay $46D0, steps $46D2-$46D5 for $46E1/$46E2 ticks, width $2B/$2C to $D409/$D40A.","t":"code","b":[173,209,70],"m":"lda","o":"music_v2_live_pulse_mode","oa":18129,"x":[21114,21140,21145,21160,21165]},{"a":21178,"t":"code","b":[240,89],"m":"beq","o":"v2_pitch_effect","oa":21269},{"a":21180,"t":"code","b":[173,208,70],"m":"lda","o":"music_v2_live_pulse_delay","oa":18128},{"a":21183,"t":"code","b":[240,6],"m":"beq","o":"b_52C7","oa":21191},{"a":21185,"t":"code","b":[206,208,70],"m":"dec","o":"music_v2_live_pulse_delay","oa":18128},{"a":21188,"t":"code","b":[76,21,83],"m":"jmp","o":"v2_pitch_effect","oa":21269},{"a":21191,"l":"b_52C7","t":"code","b":[24],"m":"clc","x":[21183,21250,21256]},{"a":21192,"t":"code","b":[166,43],"m":"ldx","o":"music_v2_pulse_lo","oa":43},{"a":21194,"t":"code","b":[164,44],"m":"ldy","o":"music_v2_pulse_hi","oa":44},{"a":21196,"t":"code","b":[173,225,70],"m":"lda","o":"music_v2_live_pulse_left1","oa":18145},{"a":21199,"t":"code","b":[240,16],"m":"beq","o":"b_52E1","oa":21217},{"a":21201,"t":"code","b":[138],"m":"txa"},{"a":21202,"t":"code","b":[109,210,70],"m":"adc","o":"music_v2_live_pulse_step1_lo","oa":18130},{"a":21205,"t":"code","b":[170],"m":"tax"},{"a":21206,"t":"code","b":[152],"m":"tya"},{"a":21207,"t":"code","b":[109,211,70],"m":"adc","o":"music_v2_live_pulse_step1_hi","oa":18131},{"a":21210,"t":"code","b":[168],"m":"tay"},{"a":21211,"t":"code","b":[206,225,70],"m":"dec","o":"music_v2_live_pulse_left1","oa":18145},{"a":21214,"t":"code","b":[76,11,83],"m":"jmp","o":"j_530B","oa":21259},{"a":21217,"l":"b_52E1","t":"code","b":[173,226,70],"m":"lda","o":"music_v2_live_pulse_left2","oa":18146,"x":[21199]},{"a":21220,"t":"code","b":[240,16],"m":"beq","o":"b_52F6","oa":21238},{"a":21222,"t":"code","b":[138],"m":"txa"},{"a":21223,"t":"code","b":[109,212,70],"m":"adc","o":"music_v2_live_pulse_step2_lo","oa":18132},{"a":21226,"t":"code","b":[170],"m":"tax"},{"a":21227,"t":"code","b":[152],"m":"tya"},{"a":21228,"t":"code","b":[109,213,70],"m":"adc","o":"music_v2_live_pulse_step2_hi","oa":18133},{"a":21231,"t":"code","b":[168],"m":"tay"},{"a":21232,"t":"code","b":[206,226,70],"m":"dec","o":"music_v2_live_pulse_left2","oa":18146},{"a":21235,"t":"code","b":[76,11,83],"m":"jmp","o":"j_530B","oa":21259},{"a":21238,"l":"b_52F6","t":"code","b":[173,209,70],"m":"lda","o":"music_v2_live_pulse_mode","oa":18129,"x":[21220]},{"a":21241,"t":"code","b":[41,129],"m":"and","o":"#$81"},{"a":21243,"t":"code","b":[240,14],"m":"beq","o":"j_530B","oa":21259},{"a":21245,"t":"code","b":[16,6],"m":"bpl","o":"b_5305","oa":21253},{"a":21247,"t":"code","b":[32,89,72],"m":"jsr","o":"restart_v2_pulse","oa":18521},{"a":21250,"t":"code","b":[76,199,82],"m":"jmp","o":"b_52C7","oa":21191},{"a":21253,"l":"b_5305","t":"code","b":[32,95,72],"m":"jsr","o":"set_v2_pulse","oa":18527,"x":[21245]},{"a":21256,"t":"code","b":[76,199,82],"m":"jmp","o":"b_52C7","oa":21191},{"a":21259,"l":"j_530B","t":"code","b":[134,43],"m":"stx","o":"music_v2_pulse_lo","oa":43,"x":[21214,21235,21243]},{"a":21261,"t":"code","b":[132,44],"m":"sty","o":"music_v2_pulse_hi","oa":44},{"a":21263,"t":"code","b":[142,9,212],"m":"stx","o":"sid_v2_pulse_lo"},{"a":21266,"t":"code","b":[140,10,212],"m":"sty","o":"sid_v2_pulse_hi"},{"a":21269,"l":"v2_pitch_effect","c":"Voice 2 pitch effect: mode $46CD, arpeggio at $5333, delay $46CC (with step 4 during it for mode bit 1), steps at $5368.","t":"code","b":[173,205,70],"m":"lda","o":"music_v2_live_pitch_mode","oa":18125,"x":[21178,21188]},{"a":21272,"t":"code","b":[240,24],"m":"beq","o":"r_5332","oa":21298},{"a":21274,"t":"code","b":[41,8],"m":"and","o":"#$08"},{"a":21276,"t":"code","b":[208,21],"m":"bne","o":"v2_arpeggio","oa":21299},{"a":21278,"t":"code","b":[166,21],"m":"ldx","o":"music_v2_freq_lo","oa":21},{"a":21280,"t":"code","b":[164,22],"m":"ldy","o":"music_v2_freq_hi","oa":22},{"a":21282,"t":"code","b":[24],"m":"clc"},{"a":21283,"t":"code","b":[173,204,70],"m":"lda","o":"music_v2_live_pitch_delay","oa":18124},{"a":21286,"t":"code","b":[240,65],"m":"beq","o":"b_5369","oa":21353},{"a":21288,"t":"code","b":[206,204,70],"m":"dec","o":"music_v2_live_pitch_delay","oa":18124},{"a":21291,"t":"code","b":[173,205,70],"m":"lda","o":"music_v2_live_pitch_mode","oa":18125},{"a":21294,"t":"code","b":[41,2],"m":"and","o":"#$02"},{"a":21296,"t":"code","b":[208,123],"m":"bne","o":"b_53AD","oa":21421},{"a":21298,"l":"r_5332","t":"code","b":[96],"m":"rts","x":[21272,21302]},{"a":21299,"l":"v2_arpeggio","c":"Voice 2 arpeggio: every $46C6 ticks (counter $46C4) base note $46CA plus the offset from the table at ($46C8), index $46CC down to 0 then back to $46CB; to $D407/$D408.","t":"code","b":[206,196,70],"m":"dec","o":"music_v2_live_pitch_step3_lo","oa":18116,"x":[21276]},{"a":21302,"t":"code","b":[208,250],"m":"bne","o":"r_5332","oa":21298},{"a":21304,"t":"code","b":[172,198,70],"m":"ldy","o":"music_v2_live_pitch_step4_lo","oa":18118},{"a":21307,"t":"code","b":[140,196,70],"m":"sty","o":"music_v2_live_pitch_step3_lo","oa":18116},{"a":21310,"t":"code","b":[172,204,70],"m":"ldy","o":"music_v2_live_pitch_delay","oa":18124},{"a":21313,"t":"code","b":[16,3],"m":"bpl","o":"b_5346","oa":21318},{"a":21315,"t":"code","b":[172,203,70],"m":"ldy","o":"music_v2_live_pitch_ticks4","oa":18123},{"a":21318,"l":"b_5346","t":"code","b":[174,200,70],"m":"ldx","o":"music_v2_live_pitch_ticks1","oa":18120,"x":[21313]},{"a":21321,"t":"code","b":[134,19],"m":"stx","o":"music_ptr_lo","oa":19},{"a":21323,"t":"code","b":[174,201,70],"m":"ldx","o":"music_v2_live_pitch_ticks2","oa":18121},{"a":21326,"t":"code","b":[134,20],"m":"stx","o":"music_ptr_hi","oa":20},{"a":21328,"t":"code","b":[173,202,70],"m":"lda","o":"music_v2_live_pitch_ticks3","oa":18122},{"a":21331,"t":"code","b":[24],"m":"clc"},{"a":21332,"t":"code","b":[113,19],"m":"adc","o":"(music_ptr_lo),y","oa":19},{"a":21334,"t":"code","b":[136],"m":"dey"},{"a":21335,"t":"code","b":[140,204,70],"m":"sty","o":"music_v2_live_pitch_delay","oa":18124},{"a":21338,"t":"code","b":[168],"m":"tay"},{"a":21339,"t":"code","b":[190,26,71],"m":"ldx","o":"note_freq_lo,y","oa":18202},{"a":21342,"t":"code","b":[185,117,71],"m":"lda","o":"note_freq_hi,y","oa":18293},{"a":21345,"t":"code","b":[142,7,212],"m":"stx","o":"sid_v2_freq_lo"},{"a":21348,"t":"code","b":[141,8,212],"m":"sta","o":"sid_v2_freq_hi"},{"a":21351,"t":"code","b":[96],"m":"rts"},{"a":21352,"l":"v2_pitch_steps","c":"Voice 2 pitch steps: steps $46C0-$46C7 for $46DD-$46E0 ticks added to the current frequency $15/$16, written to $D407/$D408; repeat or restart as mode $46CD says.","t":"code","b":[24],"m":"clc","x":[21454,21460]},{"a":21353,"l":"b_5369","t":"code","b":[173,221,70],"m":"lda","o":"music_v2_live_pitch_left1","oa":18141,"x":[21286]},{"a":21356,"t":"code","b":[240,15],"m":"beq","o":"b_537D","oa":21373},{"a":21358,"t":"code","b":[206,221,70],"m":"dec","o":"music_v2_live_pitch_left1","oa":18141},{"a":21361,"t":"code","b":[138],"m":"txa"},{"a":21362,"t":"code","b":[109,192,70],"m":"adc","o":"music_v2_live_pitch_step1_lo","oa":18112},{"a":21365,"t":"code","b":[170],"m":"tax"},{"a":21366,"t":"code","b":[152],"m":"tya"},{"a":21367,"t":"code","b":[109,193,70],"m":"adc","o":"music_v2_live_pitch_step1_hi","oa":18113},{"a":21370,"t":"code","b":[76,182,83],"m":"jmp","o":"j_53B6","oa":21430},{"a":21373,"l":"b_537D","t":"code","b":[173,222,70],"m":"lda","o":"music_v2_live_pitch_left2","oa":18142,"x":[21356]},{"a":21376,"t":"code","b":[240,15],"m":"beq","o":"b_5391","oa":21393},{"a":21378,"t":"code","b":[206,222,70],"m":"dec","o":"music_v2_live_pitch_left2","oa":18142},{"a":21381,"t":"code","b":[138],"m":"txa"},{"a":21382,"t":"code","b":[109,194,70],"m":"adc","o":"music_v2_live_pitch_step2_lo","oa":18114},{"a":21385,"t":"code","b":[170],"m":"tax"},{"a":21386,"t":"code","b":[152],"m":"tya"},{"a":21387,"t":"code","b":[109,195,70],"m":"adc","o":"music_v2_live_pitch_step2_hi","oa":18115},{"a":21390,"t":"code","b":[76,182,83],"m":"jmp","o":"j_53B6","oa":21430},{"a":21393,"l":"b_5391","t":"code","b":[173,223,70],"m":"lda","o":"music_v2_live_pitch_left3","oa":18143,"x":[21376]},{"a":21396,"t":"code","b":[240,15],"m":"beq","o":"b_53A5","oa":21413},{"a":21398,"t":"code","b":[206,223,70],"m":"dec","o":"music_v2_live_pitch_left3","oa":18143},{"a":21401,"t":"code","b":[138],"m":"txa"},{"a":21402,"t":"code","b":[109,196,70],"m":"adc","o":"music_v2_live_pitch_step3_lo","oa":18116},{"a":21405,"t":"code","b":[170],"m":"tax"},{"a":21406,"t":"code","b":[152],"m":"tya"},{"a":21407,"t":"code","b":[109,197,70],"m":"adc","o":"music_v2_live_pitch_step3_hi","oa":18117},{"a":21410,"t":"code","b":[76,182,83],"m":"jmp","o":"j_53B6","oa":21430},{"a":21413,"l":"b_53A5","t":"code","b":[173,224,70],"m":"lda","o":"music_v2_live_pitch_left4","oa":18144,"x":[21396]},{"a":21416,"t":"code","b":[240,24],"m":"beq","o":"b_53C2","oa":21442},{"a":21418,"t":"code","b":[206,224,70],"m":"dec","o":"music_v2_live_pitch_left4","oa":18144},{"a":21421,"l":"b_53AD","t":"code","b":[138],"m":"txa","x":[21296]},{"a":21422,"t":"code","b":[109,198,70],"m":"adc","o":"music_v2_live_pitch_step4_lo","oa":18118},{"a":21425,"t":"code","b":[170],"m":"tax"},{"a":21426,"t":"code","b":[152],"m":"tya"},{"a":21427,"t":"code","b":[109,199,70],"m":"adc","o":"music_v2_live_pitch_step4_hi","oa":18119},{"a":21430,"l":"j_53B6","t":"code","b":[168],"m":"tay","x":[21370,21390,21410]},{"a":21431,"l":"b_53B7","t":"code","b":[142,7,212],"m":"stx","o":"sid_v2_freq_lo","x":[21447]},{"a":21434,"t":"code","b":[140,8,212],"m":"sty","o":"sid_v2_freq_hi"},{"a":21437,"t":"code","b":[134,21],"m":"stx","o":"music_v2_freq_lo","oa":21},{"a":21439,"t":"code","b":[132,22],"m":"sty","o":"music_v2_freq_hi","oa":22},{"a":21441,"l":"r_53C1","t":"code","b":[96],"m":"rts","x":[21465]},{"a":21442,"l":"b_53C2","t":"code","b":[173,205,70],"m":"lda","o":"music_v2_live_pitch_mode","oa":18125,"x":[21416]},{"a":21445,"t":"code","b":[41,129],"m":"and","o":"#$81"},{"a":21447,"t":"code","b":[240,238],"m":"beq","o":"b_53B7","oa":21431},{"a":21449,"t":"code","b":[16,6],"m":"bpl","o":"b_53D1","oa":21457},{"a":21451,"t":"code","b":[32,189,72],"m":"jsr","o":"restart_v2_pitch","oa":18621},{"a":21454,"t":"code","b":[76,104,83],"m":"jmp","o":"v2_pitch_steps","oa":21352},{"a":21457,"l":"b_53D1","t":"code","b":[32,199,72],"m":"jsr","o":"reload_v2_pitch_counts","oa":18631,"x":[21449]},{"a":21460,"t":"code","b":[76,104,83],"m":"jmp","o":"v2_pitch_steps","oa":21352},{"a":21463,"l":"v3_shape_sound","c":"Voice 3 sound shaping, once per tick (from $B93A): gate-off after the gate time $DC (or by the note time $0C with control bit 3 in $DB), then the release time $DD and the clearing of $D40E-$D414, which also stops the filter sweep when voice 3 drives it ($5408 into $512E); then the pulse sweep ($541D) and the pitch effect ($546F).","t":"code","b":[166,221],"m":"ldx","o":"music_v3_live_release_time","oa":221,"x":[47418]},{"a":21465,"t":"code","b":[240,230],"m":"beq","o":"r_53C1","oa":21441},{"a":21467,"t":"code","b":[165,219],"m":"lda","o":"music_v3_live_control","oa":219},{"a":21469,"t":"code","b":[41,8],"m":"and","o":"#$08"},{"a":21471,"t":"code","b":[240,18],"m":"beq","o":"b_53F3","oa":21491},{"a":21473,"t":"code","b":[165,12],"m":"lda","o":"music_v3_note_time","oa":12},{"a":21475,"t":"code","b":[197,220],"m":"cmp","o":"music_v3_live_gate_time","oa":220},{"a":21477,"t":"code","b":[176,54],"m":"bcs","o":"v3_pulse_sweep","oa":21533},{"a":21479,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":21481,"t":"code","b":[133,220],"m":"sta","o":"music_v3_live_gate_time","oa":220},{"a":21483,"t":"code","b":[165,219],"m":"lda","o":"music_v3_live_control","oa":219},{"a":21485,"t":"code","b":[41,246],"m":"and","o":"#$F6"},{"a":21487,"t":"code","b":[133,219],"m":"sta","o":"music_v3_live_control","oa":219},{"a":21489,"t":"code","b":[208,39],"m":"bne","o":"b_541A","oa":21530},{"a":21491,"l":"b_53F3","t":"code","b":[165,220],"m":"lda","o":"music_v3_live_gate_time","oa":220,"x":[21471]},{"a":21493,"t":"code","b":[208,22],"m":"bne","o":"b_540D","oa":21517},{"a":21495,"t":"code","b":[164,221],"m":"ldy","o":"music_v3_live_release_time","oa":221},{"a":21497,"t":"code","b":[200],"m":"iny"},{"a":21498,"t":"code","b":[240,33],"m":"beq","o":"v3_pulse_sweep","oa":21533},{"a":21500,"t":"code","b":[198,221],"m":"dec","o":"music_v3_live_release_time","oa":221},{"a":21502,"t":"code","b":[208,29],"m":"bne","o":"v3_pulse_sweep","oa":21533},{"a":21504,"t":"code","b":[162,6],"m":"ldx","o":"#$06"},{"a":21506,"l":"b_5402","t":"code","b":[157,14,212],"m":"sta","o":"sid_v3_freq_lo,x","x":[21510]},{"a":21509,"t":"code","b":[202],"m":"dex"},{"a":21510,"t":"code","b":[16,250],"m":"bpl","o":"b_5402","oa":21506},{"a":21512,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":21514,"t":"code","b":[76,46,81],"m":"jmp","o":"j_512E","oa":20782},{"a":21517,"l":"b_540D","t":"code","b":[164,220],"m":"ldy","o":"music_v3_live_gate_time","oa":220,"x":[21493]},{"a":21519,"t":"code","b":[200],"m":"iny"},{"a":21520,"t":"code","b":[240,11],"m":"beq","o":"v3_pulse_sweep","oa":21533},{"a":21522,"t":"code","b":[198,220],"m":"dec","o":"music_v3_live_gate_time","oa":220},{"a":21524,"t":"code","b":[208,7],"m":"bne","o":"v3_pulse_sweep","oa":21533},{"a":21526,"t":"code","b":[165,219],"m":"lda","o":"music_v3_live_control","oa":219},{"a":21528,"t":"code","b":[41,246],"m":"and","o":"#$F6"},{"a":21530,"l":"b_541A","t":"code","b":[141,18,212],"m":"sta","o":"sid_v3_control","x":[21489]},{"a":21533,"l":"v3_pulse_sweep","c":"Voice 3 pulse sweep: mode $D2, delay $D1, steps $D3-$D6 for $E2/$E3 ticks, width $2D/$2E to $D410/$D411.","t":"code","b":[165,210],"m":"lda","o":"music_v3_live_pulse_mode","oa":210,"x":[21477,21498,21502,21520,21524]},{"a":21535,"t":"code","b":[240,78],"m":"beq","o":"v3_pitch_effect","oa":21615},{"a":21537,"t":"code","b":[165,209],"m":"lda","o":"music_v3_live_pulse_delay","oa":209},{"a":21539,"t":"code","b":[240,5],"m":"beq","o":"b_542A","oa":21546},{"a":21541,"t":"code","b":[198,209],"m":"dec","o":"music_v3_live_pulse_delay","oa":209},{"a":21543,"t":"code","b":[76,111,84],"m":"jmp","o":"v3_pitch_effect","oa":21615},{"a":21546,"l":"b_542A","t":"code","b":[24],"m":"clc","x":[21539,21596,21602]},{"a":21547,"t":"code","b":[166,45],"m":"ldx","o":"music_v3_pulse_lo","oa":45},{"a":21549,"t":"code","b":[164,46],"m":"ldy","o":"music_v3_pulse_hi","oa":46},{"a":21551,"t":"code","b":[165,226],"m":"lda","o":"music_v3_live_pulse_left1","oa":226},{"a":21553,"t":"code","b":[240,13],"m":"beq","o":"b_5440","oa":21568},{"a":21555,"t":"code","b":[198,226],"m":"dec","o":"music_v3_live_pulse_left1","oa":226},{"a":21557,"t":"code","b":[138],"m":"txa"},{"a":21558,"t":"code","b":[101,211],"m":"adc","o":"music_v3_live_pulse_step1_lo","oa":211},{"a":21560,"t":"code","b":[170],"m":"tax"},{"a":21561,"t":"code","b":[152],"m":"tya"},{"a":21562,"t":"code","b":[101,212],"m":"adc","o":"music_v3_live_pulse_step1_hi","oa":212},{"a":21564,"t":"code","b":[168],"m":"tay"},{"a":21565,"t":"code","b":[76,101,84],"m":"jmp","o":"j_5465","oa":21605},{"a":21568,"l":"b_5440","t":"code","b":[165,227],"m":"lda","o":"music_v3_live_pulse_left2","oa":227,"x":[21553]},{"a":21570,"t":"code","b":[240,13],"m":"beq","o":"b_5451","oa":21585},{"a":21572,"t":"code","b":[198,227],"m":"dec","o":"music_v3_live_pulse_left2","oa":227},{"a":21574,"t":"code","b":[138],"m":"txa"},{"a":21575,"t":"code","b":[101,213],"m":"adc","o":"music_v3_live_pulse_step2_lo","oa":213},{"a":21577,"t":"code","b":[170],"m":"tax"},{"a":21578,"t":"code","b":[152],"m":"tya"},{"a":21579,"t":"code","b":[101,214],"m":"adc","o":"music_v3_live_pulse_step2_hi","oa":214},{"a":21581,"t":"code","b":[168],"m":"tay"},{"a":21582,"t":"code","b":[76,101,84],"m":"jmp","o":"j_5465","oa":21605},{"a":21585,"l":"b_5451","t":"code","b":[165,210],"m":"lda","o":"music_v3_live_pulse_mode","oa":210,"x":[21570]},{"a":21587,"t":"code","b":[41,129],"m":"and","o":"#$81"},{"a":21589,"t":"code","b":[240,14],"m":"beq","o":"j_5465","oa":21605},{"a":21591,"t":"code","b":[16,6],"m":"bpl","o":"b_545F","oa":21599},{"a":21593,"t":"code","b":[32,112,72],"m":"jsr","o":"restart_v3_pulse","oa":18544},{"a":21596,"t":"code","b":[76,42,84],"m":"jmp","o":"b_542A","oa":21546},{"a":21599,"l":"b_545F","t":"code","b":[32,116,72],"m":"jsr","o":"set_v3_pulse","oa":18548,"x":[21591]},{"a":21602,"t":"code","b":[76,42,84],"m":"jmp","o":"b_542A","oa":21546},{"a":21605,"l":"j_5465","t":"code","b":[134,45],"m":"stx","o":"music_v3_pulse_lo","oa":45,"x":[21565,21582,21589]},{"a":21607,"t":"code","b":[132,46],"m":"sty","o":"music_v3_pulse_hi","oa":46},{"a":21609,"t":"code","b":[142,16,212],"m":"stx","o":"sid_v3_pulse_lo"},{"a":21612,"t":"code","b":[140,17,212],"m":"sty","o":"sid_v3_pulse_hi"},{"a":21615,"l":"v3_pitch_effect","c":"Voice 3 pitch effect: mode $CE, arpeggio at $5489, delay $CD (with step 4 during it for mode bit 1), steps at $54B5.","t":"code","b":[165,206],"m":"lda","o":"music_v3_live_pitch_mode","oa":206,"x":[21535,21543]},{"a":21617,"t":"code","b":[240,21],"m":"beq","o":"r_5488","oa":21640},{"a":21619,"t":"code","b":[41,8],"m":"and","o":"#$08"},{"a":21621,"t":"code","b":[208,18],"m":"bne","o":"v3_arpeggio","oa":21641},{"a":21623,"t":"code","b":[166,23],"m":"ldx","o":"music_v3_freq_lo","oa":23},{"a":21625,"t":"code","b":[164,24],"m":"ldy","o":"music_v3_freq_hi","oa":24},{"a":21627,"t":"code","b":[24],"m":"clc"},{"a":21628,"t":"code","b":[165,205],"m":"lda","o":"music_v3_live_pitch_delay","oa":205},{"a":21630,"t":"code","b":[240,54],"m":"beq","o":"b_54B6","oa":21686},{"a":21632,"t":"code","b":[198,205],"m":"dec","o":"music_v3_live_pitch_delay","oa":205},{"a":21634,"t":"code","b":[165,206],"m":"lda","o":"music_v3_live_pitch_mode","oa":206},{"a":21636,"t":"code","b":[41,2],"m":"and","o":"#$02"},{"a":21638,"t":"code","b":[208,100],"m":"bne","o":"b_54EC","oa":21740},{"a":21640,"l":"r_5488","t":"code","b":[96],"m":"rts","x":[21617,21643]},{"a":21641,"l":"v3_arpeggio","c":"Voice 3 arpeggio: every $C7 ticks (counter $C5) base note $CB plus the offset from the table at ($C9), index $CD down to 0 then back to $CC; to $D40E/$D40F.","t":"code","b":[198,197],"m":"dec","o":"music_v3_live_pitch_step3_lo","oa":197,"x":[21621]},{"a":21643,"t":"code","b":[208,251],"m":"bne","o":"r_5488","oa":21640},{"a":21645,"t":"code","b":[164,199],"m":"ldy","o":"music_v3_live_pitch_step4_lo","oa":199},{"a":21647,"t":"code","b":[132,197],"m":"sty","o":"music_v3_live_pitch_step3_lo","oa":197},{"a":21649,"t":"code","b":[164,205],"m":"ldy","o":"music_v3_live_pitch_delay","oa":205},{"a":21651,"t":"code","b":[16,2],"m":"bpl","o":"b_5497","oa":21655},{"a":21653,"t":"code","b":[164,204],"m":"ldy","o":"music_v3_live_pitch_ticks4","oa":204},{"a":21655,"l":"b_5497","t":"code","b":[166,201],"m":"ldx","o":"music_v3_live_pitch_ticks1","oa":201,"x":[21651]},{"a":21657,"t":"code","b":[134,19],"m":"stx","o":"music_ptr_lo","oa":19},{"a":21659,"t":"code","b":[166,202],"m":"ldx","o":"music_v3_live_pitch_ticks2","oa":202},{"a":21661,"t":"code","b":[134,20],"m":"stx","o":"music_ptr_hi","oa":20},{"a":21663,"t":"code","b":[165,203],"m":"lda","o":"music_v3_live_pitch_ticks3","oa":203},{"a":21665,"t":"code","b":[24],"m":"clc"},{"a":21666,"t":"code","b":[113,19],"m":"adc","o":"(music_ptr_lo),y","oa":19},{"a":21668,"t":"code","b":[136],"m":"dey"},{"a":21669,"t":"code","b":[132,205],"m":"sty","o":"music_v3_live_pitch_delay","oa":205},{"a":21671,"t":"code","b":[168],"m":"tay"},{"a":21672,"t":"code","b":[190,26,71],"m":"ldx","o":"note_freq_lo,y","oa":18202},{"a":21675,"t":"code","b":[185,117,71],"m":"lda","o":"note_freq_hi,y","oa":18293},{"a":21678,"t":"code","b":[142,14,212],"m":"stx","o":"sid_v3_freq_lo"},{"a":21681,"t":"code","b":[141,15,212],"m":"sta","o":"sid_v3_freq_hi"},{"a":21684,"t":"code","b":[96],"m":"rts"},{"a":21685,"l":"v3_pitch_steps","c":"Voice 3 pitch steps: steps $C1-$C8 for $DE-$E1 ticks added to the current frequency $17/$18, written to $D40E/$D40F; repeat or restart as mode $CE says.","t":"code","b":[24],"m":"clc","x":[21770,21776]},{"a":21686,"l":"b_54B6","t":"code","b":[165,222],"m":"lda","o":"music_v3_live_pitch_left1","oa":222,"x":[21630]},{"a":21688,"t":"code","b":[240,12],"m":"beq","o":"b_54C6","oa":21702},{"a":21690,"t":"code","b":[198,222],"m":"dec","o":"music_v3_live_pitch_left1","oa":222},{"a":21692,"t":"code","b":[138],"m":"txa"},{"a":21693,"t":"code","b":[101,193],"m":"adc","o":"music_v3_live_pitch_step1_lo","oa":193},{"a":21695,"t":"code","b":[170],"m":"tax"},{"a":21696,"t":"code","b":[152],"m":"tya"},{"a":21697,"t":"code","b":[101,194],"m":"adc","o":"music_v3_live_pitch_step1_hi","oa":194},{"a":21699,"t":"code","b":[76,243,84],"m":"jmp","o":"j_54F3","oa":21747},{"a":21702,"l":"b_54C6","t":"code","b":[165,223],"m":"lda","o":"music_v3_live_pitch_left2","oa":223,"x":[21688]},{"a":21704,"t":"code","b":[240,12],"m":"beq","o":"b_54D6","oa":21718},{"a":21706,"t":"code","b":[198,223],"m":"dec","o":"music_v3_live_pitch_left2","oa":223},{"a":21708,"t":"code","b":[138],"m":"txa"},{"a":21709,"t":"code","b":[101,195],"m":"adc","o":"music_v3_live_pitch_step2_lo","oa":195},{"a":21711,"t":"code","b":[170],"m":"tax"},{"a":21712,"t":"code","b":[152],"m":"tya"},{"a":21713,"t":"code","b":[101,196],"m":"adc","o":"music_v3_live_pitch_step2_hi","oa":196},{"a":21715,"t":"code","b":[76,243,84],"m":"jmp","o":"j_54F3","oa":21747},{"a":21718,"l":"b_54D6","t":"code","b":[165,224],"m":"lda","o":"music_v3_live_pitch_left3","oa":224,"x":[21704]},{"a":21720,"t":"code","b":[240,12],"m":"beq","o":"b_54E6","oa":21734},{"a":21722,"t":"code","b":[198,224],"m":"dec","o":"music_v3_live_pitch_left3","oa":224},{"a":21724,"t":"code","b":[138],"m":"txa"},{"a":21725,"t":"code","b":[101,197],"m":"adc","o":"music_v3_live_pitch_step3_lo","oa":197},{"a":21727,"t":"code","b":[170],"m":"tax"},{"a":21728,"t":"code","b":[152],"m":"tya"},{"a":21729,"t":"code","b":[101,198],"m":"adc","o":"music_v3_live_pitch_step3_hi","oa":198},{"a":21731,"t":"code","b":[76,243,84],"m":"jmp","o":"j_54F3","oa":21747},{"a":21734,"l":"b_54E6","t":"code","b":[165,225],"m":"lda","o":"music_v3_live_pitch_left4","oa":225,"x":[21720]},{"a":21736,"t":"code","b":[240,21],"m":"beq","o":"b_54FF","oa":21759},{"a":21738,"t":"code","b":[198,225],"m":"dec","o":"music_v3_live_pitch_left4","oa":225},{"a":21740,"l":"b_54EC","t":"code","b":[138],"m":"txa","x":[21638]},{"a":21741,"t":"code","b":[101,199],"m":"adc","o":"music_v3_live_pitch_step4_lo","oa":199},{"a":21743,"t":"code","b":[170],"m":"tax"},{"a":21744,"t":"code","b":[152],"m":"tya"},{"a":21745,"t":"code","b":[101,200],"m":"adc","o":"music_v3_live_pitch_step4_hi","oa":200},{"a":21747,"l":"j_54F3","t":"code","b":[168],"m":"tay","x":[21699,21715,21731]},{"a":21748,"l":"b_54F4","t":"code","b":[142,14,212],"m":"stx","o":"sid_v3_freq_lo","x":[21763]},{"a":21751,"t":"code","b":[140,15,212],"m":"sty","o":"sid_v3_freq_hi"},{"a":21754,"t":"code","b":[134,23],"m":"stx","o":"music_v3_freq_lo","oa":23},{"a":21756,"t":"code","b":[132,24],"m":"sty","o":"music_v3_freq_hi","oa":24},{"a":21758,"t":"code","b":[96],"m":"rts"},{"a":21759,"l":"b_54FF","t":"code","b":[165,206],"m":"lda","o":"music_v3_live_pitch_mode","oa":206,"x":[21736]},{"a":21761,"t":"code","b":[41,129],"m":"and","o":"#$81"},{"a":21763,"t":"code","b":[240,239],"m":"beq","o":"b_54F4","oa":21748},{"a":21765,"t":"code","b":[16,6],"m":"bpl","o":"b_550D","oa":21773},{"a":21767,"t":"code","b":[32,224,72],"m":"jsr","o":"restart_v3_pitch","oa":18656},{"a":21770,"t":"code","b":[76,181,84],"m":"jmp","o":"v3_pitch_steps","oa":21685},{"a":21773,"l":"b_550D","t":"code","b":[32,232,72],"m":"jsr","o":"reload_v3_pitch_counts","oa":18664,"x":[21765]},{"a":21776,"t":"code","b":[76,181,84],"m":"jmp","o":"v3_pitch_steps","oa":21685},{"a":21779,"l":"test_music_playing","c":"Returns A not 0 (Z clear) while any voice of the music is still reading its track or releasing: $59 OR $5A OR $5B OR $46B9 OR $46DC OR $DD. The game-over screen waits on it ($6A9A). Voices 1 and 2 of a voice-3-only tune are never ticked, so their flags stay set until the next reset.","t":"code","b":[165,89],"m":"lda","o":"music_v1_active","oa":89,"x":[27290]},{"a":21781,"t":"code","b":[5,90],"m":"ora","o":"music_v2_active","oa":90},{"a":21783,"t":"code","b":[5,91],"m":"ora","o":"music_v3_active","oa":91},{"a":21785,"t":"code","b":[13,185,70],"m":"ora","o":"music_v1_live_release_time","oa":18105},{"a":21788,"t":"code","b":[13,220,70],"m":"ora","o":"music_v2_live_release_time","oa":18140},{"a":21791,"t":"code","b":[5,221],"m":"ora","o":"music_v3_live_release_time","oa":221},{"a":21793,"t":"code","b":[96],"m":"rts"},{"a":21794,"l":"test_music_voice3","c":"Returns A = $5B, voice 3's active flag (Z set once its track has ended). Used by check_music_end ($45BD).","t":"code","b":[165,91],"m":"lda","o":"music_v3_active","oa":91,"x":[17853]},{"a":21796,"t":"code","b":[96],"m":"rts"},{"a":21797,"l":"tbl_tunes","c":"Tune table: nine 7-byte records, one per tune: the voice 1, 2 and 3 track addresses (low, high) and the tempo (ticks per duration unit). start_tune takes Y = 7 x tune + 5, and load_tune reads $5526,Y (the tempo), then $5525,Y and $5526,Y backwards for voices 3, 2 and 1. Tune 0's record is $5525-$552B: voices 1 and 2 $59EF (a lone $C0, nothing), voice 3 $5E04, tempo 4. This first byte is also the base of the LDA $5525,Y at $4803.","t":"byte","b":[239],"x":[18435]},{"a":21798,"l":"tune_0_raid_alarm","c":"Base of the LDA $5526,Y reads ($47F2, $4808), and bytes 1-6 of tune 0's record. Tune 0 plays on voice 3 alone (music mode 1) while voices 1 and 2 keep the sound effects: twice a 16-note bass figure with a pulse sound and a filter sweep. Started at $893D when an object of type $0E is collected (the handler at $8902, which gives an extra life for type 1) and at $A17D by the level timer, one second before the level's time limit ($A1B9: 45, 40, 25, 20, 20, 20, 15, 10 seconds). Apparently the filth-raid alarm (manual: a filth raid brings sirens).","t":"byte","b":[89,239,89,4,94,4],"x":[18418,18440]},{"a":21804,"l":"tune_1_bonus","c":"Tune 1 (Y = $0C): voices $5B1A, $5B18, $5B10, tempo 6. Started at $6573 in the colour-completed sequence ($646F) when $BB0C flips from 0 to 2, with mode 2 (all voices) and speed 1 (two ticks a frame), before the loop at $6576 that counts the bonus kills: apparently the bonus-stage music, every second time (tune 4 the other times). A canon of four transposed figures, looping for ever from $5B1E.","t":"byte","b":[26,91,24,91,16,91,6]},{"a":21811,"l":"tune_2_colour_done","c":"Tune 2 (Y = $13): voices $59B9, $59B7, $59B5, tempo 7. Started at $6507 in the colour-completed sequence ($646F), in its first loop while $D022/$D023 cycle colours, once the music before it has faded out; it fades in (mode 2, speed 0). One C-5 held 224 ticks on all three voices, each an arpeggio of the table $5988, entering 0, 2 and 4 ticks apart.","t":"byte","b":[185,89,183,89,181,89,7]},{"a":21818,"l":"tune_3_title","c":"Tune 3 (Y = $1A), the title tune: voices $6043, $61C9, $62D8 (the tracks are in $6043-$6387), tempo 5. Started by the title routine at $8F6A with mode 2 and speed 2 (four ticks a frame); the only tune for which start_tune sets $B94D to $70. Loops for ever.","t":"byte","b":[67,96,201,97,216,98,5]},{"a":21825,"l":"tune_4_bonus_voice3","c":"Tune 4 (Y = $21): voice 3 only ($5C4F; voices 1 and 2 are the empty $59EF), tempo 2, changed four times inside by command $EA. Started at $6573 when $BB0C flips from 2 to 0, with mode 1 (voice 3 music, effects on voices 1 and 2) and speed 0: apparently the bonus-stage music of the other bonus stages ($BB0C is 2 in the loaded image, so the first bonus stage gets this one). Loops for ever.","t":"byte","b":[239,89,239,89,79,92,2]},{"a":21832,"l":"tune_5_get_ready","c":"Tune 5 (Y = $28), the get-ready tune: voices $59DD, $59F0, $59F2, tempo 5. Started at $6916 on the get-ready screen with mode 2 and speed 2 after a fade-in is set up: one D-4 on all three voices (voice 3 and voice 2 5 and 10 ticks late) whose pitch jumps about, held seven units of 160 ticks (5.6 seconds at four ticks a frame), then released.","t":"byte","b":[221,89,240,89,242,89,5]},{"a":21839,"l":"tune_6_high_score","c":"Tune 6 (Y = $2F), the high-score tune: voices $57DF, $5657, $5947, tempo 9. Started at $6BC0 after the last game over when $BFD0 has left $BFF2 or $BFF3 not 0 (apparently a new entry in a high-score table; otherwise the game returns to the title, $6B8F), with mode 2 and speed 2, for the name entry that follows. Loops for ever.","t":"byte","b":[223,87,87,86,71,89,9]},{"a":21846,"l":"tune_7_game_over","c":"Tune 7 (Y = $36), the game-over jingle: voices $5A00, $5A02, $5A35, tempo 2, all three playing the melody at $5A3B, voice 2 one tick and voice 1 three ticks after voice 3. Started at $6A91 when a player loses the last life, with mode 2 (speed as it was); the screen waits until it ends ($5513) or fire is pressed.","t":"byte","b":[0,90,2,90,53,90,2]},{"a":21853,"l":"tune_8_wiz_lab","c":"Tune 8 (Y = $3D), the Wiz-lab tune: voices $5A95, $5A93, $5A8B, tempo 8. Started at $AB75 as the Wiz-lab screen ($AB20, where the permanent weapon is chosen) opens, with mode 2 and speed 2, but only when $BB0C is 2, that is after a bonus stage that played tune 1; otherwise the lab is silent (mode 0). It plays tune 1's body with its own sound and tempo.","t":"byte","b":[149,90,147,90,139,90,8]},{"a":21860,"l":"music_instr_5564","c":"Instrument (29 bytes, layout at $4680): pulse at width $800, control $49 (gate released 20 ticks before the note's end), attack/decay $19, sustain/release $89, release 255 (held); vibrato (mode 5) +12, -12, +12 over 10, 20, 10 ticks after 50. Loaded whole by tune 6 voice 2 ($5691) and as a pitch block ($570C).","t":"byte","b":[12,0,244,255,12,0,0,0]},{"a":21868,"t":"byte","b":[10,20,10,0,50,5,0,0]},{"a":21876,"t":"byte","b":[0,0,0,0,0,0,0,8]},{"a":21884,"t":"byte","b":[73,25,137,20,255]},{"a":21889,"l":"music_instr_5581","c":"Instrument: sawtooth (control $21), attack/decay $CD, sustain/release $0F, gate 255, release 200; vibrato (mode 5) +17, -17, +17 over 10, 20, 10 ticks after 100; its pulse fields are unused (mode 0). Loaded by pattern $55E1 and as a pitch block at $5627; its last five bytes are the envelope block $5599.","t":"byte","b":[17,0,239,255,17,0,0,0]},{"a":21897,"t":"byte","b":[10,20,10,0,100,5,70,1]},{"a":21905,"t":"byte","b":[0,0,22,0,252,249,0,5]},{"a":21913,"l":"music_env_5599","c":"Envelope block (5 bytes for command $D2, here at $55FE): control $21, attack/decay $CD, sustain/release $0F, gate 255, release 200; also the last five bytes of the instrument at $5581.","t":"byte","b":[33,205,15,255,200]},{"a":21918,"l":"music_pitch_559e","c":"Pitch block (14 bytes for command $E8, here at $5622): mode 4, a fall of 10 per tick for 255 ticks after a 90-tick delay.","t":"byte","b":[246,255,0,0,0,0,0,0]},{"a":21926,"t":"byte","b":[255,0,0,0,90,4]},{"a":21932,"l":"music_env_55ac","c":"Envelope block ($D2 at $55F5): control $29 (sawtooth, gate released 20 ticks before the end), attack/decay $5A, sustain/release $CB, release 200.","t":"byte","b":[41,90,203,20,200]},{"a":21937,"l":"music_pitch_55b1","c":"Pitch block ($E8 at $5707): mode 7, vibrato +12, -12, +12 over 10, 20, 10 ticks after a 40-tick delay during which the pitch rises 13 a tick.","t":"byte","b":[12,0,244,255,12,0,13,0]},{"a":21945,"t":"byte","b":[10,20,10,0,40,7]},{"a":21951,"l":"music_env_55bf","c":"Envelope block ($D2 at $571B): control $21 (sawtooth), attack/decay $16, sustain/release $87, gate 20, release 10.","t":"byte","b":[33,22,135,20,10]},{"a":21956,"l":"music_instr_55c4","c":"Instrument: noise, control $89 (gate released 25 ticks before the end), attack/decay $03, sustain/release $27, release 10, no pitch or pulse effect: a drum. Tune 6 voice 1 ($57E1).","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":21964,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":21972,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":21980,"t":"byte","b":[137,3,39,25,10]},{"a":21985,"l":"music_pat_55e1","c":"Tune 6 pattern, called by voice 2 ($5687) and voice 3 ($596F): with instrument $5581 a slow tune (A-4, G-4, F#-4, A#-4 B-4 C#-5, D-5 ... F#-4), changing the envelope ($55AC, $5599), the attack/decay ($CA $19), the pitch block ($559E for a falling note, then $5581's vibrato again), and bending the last note with live pitch mode 7 and step 4 ($D4 $0D, $DC $06).","t":"byte","b":[208,28,129,85,57,24,95,24]},{"a":21993,"t":"byte","b":[95,16,55,24,95,24,95,16]},{"a":22001,"t":"byte","b":[54,24,95,24,210,172,85,58]},{"a":22009,"t":"byte","b":[5,59,5,61,6,210,153,85]},{"a":22017,"t":"byte","b":[62,16,204,3,95,16,206,62]},{"a":22025,"t":"byte","b":[16,65,16,64,16,69,5,65]},{"a":22033,"t":"byte","b":[5,62,6,202,25,189,64,16]},{"a":22041,"t":"byte","b":[95,8,62,8,202,25,205,61]},{"a":22049,"t":"byte","b":[16,232,158,85,59,16,232,129]},{"a":22057,"t":"byte","b":[85,56,24,54,8,52,16,54]},{"a":22065,"t":"byte","b":[7,212,13,7,220,6,21,0]},{"a":22073,"t":"byte","b":[95,4,220,6,0,0,95,5]},{"a":22081,"t":"byte","b":[54,16,192]},{"a":22084,"l":"music_pat_5644","c":"Tune 6 bass rhythm: note 0 nine times (codes 4, 8 and 16), always called with a transpose from voice 2 ($5723-$5761), so each call is one chord root in rhythm (an arpeggio instrument makes it a chord).","t":"byte","b":[0,4,0,4,0,8,0,8]},{"a":22092,"t":"byte","b":[0,4,0,8,0,8,0,4]},{"a":22100,"t":"byte","b":[0,16,192]},{"a":22103,"l":"tune_6_voice2","c":"Tune 6 voice 2 track: instrument $5798 (a rising triangle blip) for an opening rhythm on G#-6 and C-5/D-7; pattern $55E1; then twice a melody on instruments $5564 and $5863 (long notes by switching sustain/release to $8D and back to $89); then chords: instrument $577B (24 bytes) with envelope $55BF, fifteen rests, and the rhythm $5644 on a series of roots with the arpeggio table changed by $DA 08 ($57BB, $57C1, $57C7, $57B5, $57CD); ends with $C8 00 $5657, back to the start with the transpose reset.","t":"byte","b":[208,28,152,87,204,2,95,8]},{"a":22111,"t":"byte","b":[80,8,80,16,80,12,80,12]},{"a":22119,"t":"byte","b":[80,8,206,204,9,95,4,60]},{"a":22127,"t":"byte","b":[2,60,2,86,8,86,8,60]},{"a":22135,"t":"byte","b":[4,60,4,86,4,60,4,60]},{"a":22143,"t":"byte","b":[4,86,8,60,4,86,8,206]},{"a":22151,"t":"byte","b":[194,225,85,204,2,204,7,95]},{"a":22159,"t":"byte","b":[16,206,208,28,100,85,95,12]},{"a":22167,"t":"byte","b":[52,4,57,4,59,8,61,8]},{"a":22175,"t":"byte","b":[62,8,61,8,59,4,57,8]},{"a":22183,"t":"byte","b":[59,4,202,26,141,55,24,95]},{"a":22191,"t":"byte","b":[24,202,26,137,95,24,54,4]},{"a":22199,"t":"byte","b":[58,4,59,8,61,8,62,8]},{"a":22207,"t":"byte","b":[64,8,62,4,61,4,202,26]},{"a":22215,"t":"byte","b":[141,62,24,95,24,202,26,137]},{"a":22223,"t":"byte","b":[208,13,99,88,95,16,95,16]},{"a":22231,"t":"byte","b":[50,4,53,4,57,8,62,8]},{"a":22239,"t":"byte","b":[64,8,65,8,64,4,62,8]},{"a":22247,"t":"byte","b":[61,4,57,8,202,26,141,52]},{"a":22255,"t":"byte","b":[16,95,24,202,26,137,95,4]},{"a":22263,"t":"byte","b":[52,4,54,4,56,8,57,4]},{"a":22271,"t":"byte","b":[59,8,61,8,62,8,64,8]},{"a":22279,"t":"byte","b":[232,177,85,60,8,232,100,85]},{"a":22287,"t":"byte","b":[59,12,202,26,141,57,16,206]},{"a":22295,"t":"byte","b":[208,23,123,87,210,191,85,204]},{"a":22303,"t":"byte","b":[15,95,8,206,198,45,68,86]},{"a":22311,"t":"byte","b":[218,8,187,87,198,43,68,86]},{"a":22319,"t":"byte","b":[218,8,193,87,198,42,68,86]},{"a":22327,"t":"byte","b":[218,8,199,87,198,47,68,86]},{"a":22335,"t":"byte","b":[198,38,68,86,218,8,181,87]},{"a":22343,"t":"byte","b":[7,12,7,12,218,8,199,87]},{"a":22351,"t":"byte","b":[4,12,4,12,4,12,218,8]},{"a":22359,"t":"byte","b":[193,87,198,40,68,86,218,8]},{"a":22367,"t":"byte","b":[205,87,198,45,68,86,0,4]},{"a":22375,"t":"byte","b":[0,4,0,8,0,8,0,4]},{"a":22383,"t":"byte","b":[0,8,0,8,0,4,0,12]},{"a":22391,"t":"byte","b":[200,0,87,86]},{"a":22395,"l":"music_instr_577b","c":"Instrument: arpeggio (mode 8) of the table $57B5 from index 5, a new note every 4 ticks; loaded whole it is sawtooth (control $21), attack/decay $18, sustain/release $6A, gate 30, release 150. Tune 6 voice 1 loads all 29 bytes ($57F4), voice 2 the first 24 ($5717).","t":"byte","b":[0,0,0,0,1,0,4,0]},{"a":22403,"t":"byte","b":[181,87,0,5,0,8,0,0]},{"a":22411,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":22419,"t":"byte","b":[33,24,106,30,150]},{"a":22424,"l":"music_instr_5798","c":"Instrument: triangle (control $11), attack/decay $00, sustain/release $F2, gate 5, release 6, rising 1,200 a tick (mode 4) from the start: a short upward blip. Tune 6 voice 2's first sound ($5657).","t":"byte","b":[176,4,0,0,0,0,0,0]},{"a":22432,"t":"byte","b":[255,0,0,0,0,4,0,0]},{"a":22440,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":22448,"t":"byte","b":[17,0,242,5,6]},{"a":22453,"l":"music_arp_major","c":"Arpeggio table, 6 offsets read from index 5 down to 0: 0, 4, 7, 12, 24, 12 semitones, a major chord. The first of five tables that tune 6 switches between with $DA 08 commands.","t":"byte","b":[0,4,7,12,24,12]},{"a":22459,"l":"music_arp_57bb","c":"Arpeggio table: 0, 4, 9, 12, 24, 12 (third and sixth, no fifth).","t":"byte","b":[0,4,9,12,24,12]},{"a":22465,"l":"music_arp_57c1","c":"Arpeggio table: 0, 4, 10, 12, 24, 12 (third and minor seventh: a dominant seventh without its fifth).","t":"byte","b":[0,4,10,12,24,12]},{"a":22471,"l":"music_arp_57c7","c":"Arpeggio table: 0, 3, 7, 12, 24, 12, a minor chord.","t":"byte","b":[0,3,7,12,24,12]},{"a":22477,"l":"music_arp_57cd","c":"Arpeggio table: 0, 4, 7, 9, 24, 12, a major sixth chord.","t":"byte","b":[0,4,7,9,24,12]},{"a":22483,"l":"music_pat_57d3","c":"Tune 6 voice 1 chord pattern: table $57C1, a rest, then F#-3 five times (code 12); called at pitch ($580E) and a whole tone down ($C6 $FE at $5837).","t":"byte","b":[218,8,193,87,95,4,204,5]},{"a":22491,"t":"byte","b":[42,12,206,192]},{"a":22495,"l":"tune_6_voice1","c":"Tune 6 voice 1 track start: a rest of code 4, then on into the part at $57E1 that the track loops back to.","t":"byte","b":[95,4]},{"a":22497,"l":"tune_6_voice1_loop","c":"Tune 6 voice 1 from its loop point (the $C4 at $5850 comes back here): the drum $55C4 on F-7 (a noise hit) three times and seven bars of three; then instrument $577B's arpeggiated chords, five at a time on A-3, G-3, the pattern $57D3, B-3, D-3 and so on, with the chord table switched by $DA 08 as it goes.","t":"byte","b":[208,28,196,85,89,4,89,4]},{"a":22505,"t":"byte","b":[89,4,204,7,89,8,89,4]},{"a":22513,"t":"byte","b":[89,4,206,208,28,123,87,95]},{"a":22521,"t":"byte","b":[4,204,5,95,4,204,5,45]},{"a":22529,"t":"byte","b":[12,206,218,8,187,87,95,4]},{"a":22537,"t":"byte","b":[204,5,43,12,206,194,211,87]},{"a":22545,"t":"byte","b":[218,8,199,87,95,4,204,5]},{"a":22553,"t":"byte","b":[47,12,206,95,4,204,5,38]},{"a":22561,"t":"byte","b":[12,206,218,8,181,87,95,4]},{"a":22569,"t":"byte","b":[45,12,45,12,218,8,199,87]},{"a":22577,"t":"byte","b":[42,12,42,12,42,12,198,254]},{"a":22585,"t":"byte","b":[211,87,218,8,205,87,216,0]},{"a":22593,"t":"byte","b":[204,2,95,4,204,5,45,12]},{"a":22601,"t":"byte","b":[206,206,218,8,181,87,206,196]},{"a":22609,"t":"byte","b":[225,87]},{"a":22611,"l":"music_filter_5853","c":"Filter program (16 bytes for command $E0: four cutoff steps, their four tick counts, delay, mode, start cutoff; here at $594C): steps +10, -10, +10, -10 for 8, 16, 8, 0 ticks after a 50-tick delay, mode 7, start cutoff $384.","t":"byte","b":[10,0,246,255,10,0,246,255]},{"a":22619,"t":"byte","b":[8,16,8,0,50,7,132,3]},{"a":22627,"l":"music_instr_5863","c":"Instrument, tune 6's melody sound: pulse, control $49 (released 15 ticks before the end), attack/decay $18, sustain/release $6B, release 254; vibrato (mode 5) +7, -7, +7 over 10, 20, 10 ticks after 40; pulse sweep (mode 5) from $900, +3 and -3 for 120 ticks each after 10. Loaded by voice 3 ($5964, $5972) and voice 2 (its first 14 bytes, $56CF); patterns $58AB and $58C2 reload its pitch block after each use of $5880.","t":"byte","b":[7,0,249,255,7,0,0,0]},{"a":22635,"t":"byte","b":[10,20,10,0,40,5,120,120]},{"a":22643,"t":"byte","b":[10,5,3,0,253,255,0,9]},{"a":22651,"t":"byte","b":[73,24,107,15,254]},{"a":22656,"l":"music_pitch_5880","c":"Pitch block (mode 4): a rise of 6 a tick for 255 ticks after 40; patterns $58AB and $58C2 use it for single notes ($58B9, $58D3, $58E9, $5911).","t":"byte","b":[6,0,0,0,0,0,0,0]},{"a":22664,"t":"byte","b":[255,0,0,0,40,4]},{"a":22670,"l":"music_instr_588e","c":"Instrument: pulse at $800 (control $41), attack/decay $07, sustain/release $68, gate 40, release 40, falling 10 a tick after 25 (mode 4). Tune 6 voice 3's opening sound ($5947), whose fall is changed to 3 and to 8 a tick by $DA 00.","t":"byte","b":[246,255,0,0,0,0,0,0]},{"a":22678,"t":"byte","b":[255,0,0,0,25,4,0,0]},{"a":22686,"t":"byte","b":[0,0,0,0,0,0,0,8]},{"a":22694,"t":"byte","b":[65,7,104,40,40]},{"a":22699,"l":"music_pat_58ab","c":"Tune 6 voice 3 bass bar: A-2 and E-3 in a fixed rhythm (A-2 E-3 E-3 A-2 A-2 E-3 E-3), a last E-2 with the rising pitch block $5880, then $5863's vibrato again. Called by $58C2 at pitch and an octave down ($C6 $F4 at $593D).","t":"byte","b":[33,12,40,4,40,12,33,4]},{"a":22707,"t":"byte","b":[33,12,40,4,40,8,232,128]},{"a":22715,"t":"byte","b":[88,28,8,232,99,88,192]},{"a":22722,"l":"music_pat_58c2","c":"Tune 6 voice 3 bass line: bar $58AB, then the same rhythm on G-2/E-3, F#-2/E-3, B-2/F#-3, D-2/A-2, A-2/E-3, F#-2/C#-3 and E-2/B-2, some bars ending with the rising $5880, and $58AB an octave down and at pitch; called three times by $5947 and once at its end.","t":"byte","b":[194,171,88,31,12,40,4,40]},{"a":22730,"t":"byte","b":[12,31,4,31,12,40,4,40]},{"a":22738,"t":"byte","b":[8,232,128,88,28,8,232,99]},{"a":22746,"t":"byte","b":[88,30,12,40,4,40,12,30]},{"a":22754,"t":"byte","b":[4,30,12,40,4,40,8,232]},{"a":22762,"t":"byte","b":[128,88,34,8,232,99,88,35]},{"a":22770,"t":"byte","b":[12,42,4,42,12,35,4,35]},{"a":22778,"t":"byte","b":[12,42,4,42,8,23,4,25]},{"a":22786,"t":"byte","b":[4,26,12,33,4,33,12,26]},{"a":22794,"t":"byte","b":[4,26,12,33,4,33,8,232]},{"a":22802,"t":"byte","b":[128,88,28,8,232,99,88,33]},{"a":22810,"t":"byte","b":[12,40,4,40,12,33,4,30]},{"a":22818,"t":"byte","b":[12,37,4,37,8,28,4,30]},{"a":22826,"t":"byte","b":[4,28,12,35,4,35,12,28]},{"a":22834,"t":"byte","b":[4,28,12,35,4,35,8,23]},{"a":22842,"t":"byte","b":[4,25,4,198,244,171,88,194]},{"a":22850,"t":"byte","b":[171,88,216,0,192]},{"a":22855,"l":"tune_6_voice3","c":"Tune 6 voice 3 track: instrument $588E, filter on voice 3 with program $5853, four bars of a G#-1/B-2 figure; instrument $5863 and the bass line $58C2 three times; filter off and pattern $55E1; 21 rests; filter on, E-3 F#-2 G#-2 and the bass line again; then back to its start.","t":"byte","b":[208,28,142,88,222,224,83,88]},{"a":22863,"t":"byte","b":[204,4,218,0,253,255,20,12]},{"a":22871,"t":"byte","b":[20,4,20,8,218,0,248,255]},{"a":22879,"t":"byte","b":[35,4,35,4,206,208,28,99]},{"a":22887,"t":"byte","b":[88,204,3,194,194,88,206,226]},{"a":22895,"t":"byte","b":[194,225,85,208,28,99,88,204]},{"a":22903,"t":"byte","b":[21,95,4,206,222,40,8,30]},{"a":22911,"t":"byte","b":[8,32,12,194,194,88,196,71]},{"a":22919,"t":"byte","b":[89]},{"a":22920,"l":"music_arp_5988","c":"Arpeggio table of tune 2, 16 offsets read from index 15 down: 0, 5, 3, 7, 12, 0, 5, 7, 3, 12, 0, 7, 5, 3, 12, 5 - the intervals 0, 3, 5, 7 and 12 in a shifting order.","t":"byte","b":[0,5,3,7,12,0,5,7]},{"a":22928,"t":"byte","b":[3,12,0,7,5,3,12,5]},{"a":22936,"l":"music_instr_5998","c":"Instrument of tune 2: sawtooth (control $21), attack/decay $33, sustain/release $9A, gate 50, release 50; arpeggio (mode 8) of the table $5988 from index 15, a note every 5 ticks.","t":"byte","b":[0,0,0,0,1,0,5,0]},{"a":22944,"t":"byte","b":[136,89,0,15,0,8,0,0]},{"a":22952,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":22960,"t":"byte","b":[33,51,154,50,50]},{"a":22965,"l":"tune_2_voice3","c":"Tune 2 voice 3 track: two rests of 2 ticks ($BF 02), then on into voice 2's track.","t":"byte","b":[191,2]},{"a":22967,"l":"tune_2_voice2","c":"Tune 2 voice 2 track: one rest of 2 ticks, then on into voice 1's.","t":"byte","b":[191,2]},{"a":22969,"l":"tune_2_voice1","c":"Tune 2 voice 1 track, which voices 2 and 3 run into: instrument $5998 and one C-5 of code 32 (224 ticks at tempo 7), then the end ($C0).","t":"byte","b":[208,28,152,89,60,32,192]},{"a":22976,"l":"music_instr_59c0","c":"Instrument of tune 5: pulse at $800 (control $41), attack/decay $FF, sustain/release $F0, gate 255, release 1; pitch mode 5 with steps $4E20, $67A8, $36B0 and $63C0 added every tick for 220 ticks each, so the 16-bit frequency wraps round every few ticks: a bubbling, random-sounding pitch.","t":"byte","b":[32,78,168,103,176,54,192,99]},{"a":22984,"t":"byte","b":[220,220,220,220,0,5,0,0]},{"a":22992,"t":"byte","b":[0,0,0,0,0,0,0,8]},{"a":23000,"t":"byte","b":[65,255,240,255,1]},{"a":23005,"l":"tune_5_voice1","c":"Tune 5 voice 1 track: filter on voice 1 with the program $5EC3, then on into the shared part at $59E1.","t":"byte","b":[222,224,195,94]},{"a":23009,"l":"tune_5_body","c":"Tune 5's shared track (voice 1 runs into it, voices 3 and 2 jump to it 5 and 10 ticks later): instrument $59C0, one D-4 of code 32 (160 ticks) held through six more rests of code 32, then live gate time 1 ($D4 $1B 01) to release it; ends at $59EF.","t":"byte","b":[208,28,192,89,50,32,204,6]},{"a":23017,"t":"byte","b":[95,32,206,212,27,1]},{"a":23023,"l":"music_empty_track","c":"A lone $C0: the end of tune 5's track, and the whole track of voices 1 and 2 in tunes 0 and 4, which play on voice 3 only.","t":"byte","b":[192]},{"a":23024,"l":"tune_5_voice2","c":"Tune 5 voice 2 track: a rest of code 1 (5 ticks), then on into voice 3's.","t":"byte","b":[95,1]},{"a":23026,"l":"tune_5_voice3","c":"Tune 5 voice 3 track: a rest of code 1, then a jump to the shared part $59E1.","t":"byte","b":[95,1,196,225,89]},{"a":23031,"l":"music_pat_59f7","c":"Set-up pattern without notes: instrument $5E40, filter on (for voice 3, the only voice that calls it), filter program $5E30, return. Called by tune 4 ($5CA7, $5D3B), tune 7's voice 3 ($5A35) and pattern $5E93.","t":"byte","b":[208,28,64,94,222,224,48,94]},{"a":23039,"t":"byte","b":[192]},{"a":23040,"l":"tune_7_voice1","c":"Tune 7 voice 1 track: a rest of 2 ticks, then on into voice 2's.","t":"byte","b":[191,2]},{"a":23042,"l":"tune_7_voice2","c":"Tune 7 voice 2 track: instrument $5E40, a rest of 1 tick, then a jump to the shared melody $5A3B.","t":"byte","b":[208,28,64,94,191,1,196,59]},{"a":23050,"t":"byte","b":[90]},{"a":23051,"l":"music_pitch_5a0b","c":"Pitch block of tune 7 (mode 4): a rise of 147 a tick for 7 ticks after 2.","t":"byte","b":[147,0,0,0,0,0,0,0]},{"a":23059,"t":"byte","b":[7,0,0,0,2,4]},{"a":23065,"l":"music_pitch_5a19","c":"Pitch block of tune 7 (mode 4): after 5 ticks, one drop of $0700 (1,792).","t":"byte","b":[0,249,0,0,0,0,0,0]},{"a":23073,"t":"byte","b":[1,0,0,0,5,4]},{"a":23079,"l":"music_pitch_5a27","c":"Pitch block of tune 7's last note (mode 5): +85 for 4 ticks, -85 for 4, a 2-tick hold, over and over, after a 4-tick delay.","t":"byte","b":[85,0,171,255,0,0,0,0]},{"a":23087,"t":"byte","b":[4,4,2,0,4,5]},{"a":23093,"l":"tune_7_voice3","c":"Tune 7 voice 3 track: set-up $59F7 (instrument $5E40, filter on voice 3), filter program $5E5D, then on into the shared melody, which it starts first.","t":"byte","b":[194,247,89,224,93,94]},{"a":23099,"l":"tune_7_melody","c":"Tune 7's melody, played by all three voices a tick or three apart: control $41, gate 45, transpose +9; four times a falling G-4 (pitch block $5A19, 10 ticks), a rising D-4 ($5A0B) and a plain E-4; then G-4 G-4 A-4 G-4 F-4 E-4 F-4 E-4 D-4 E-4 F-4 E-4 D-4 D-4 C-4 A-3 C-4 D-4 and a long C-4 with vibrato ($5A27); end. Written notes; they sound a major sixth higher.","t":"byte","b":[202,24,65,202,27,45,216,9]},{"a":23107,"t":"byte","b":[204,4,232,25,90,151,10,232]},{"a":23115,"t":"byte","b":[11,90,50,6,202,13,0,52]},{"a":23123,"t":"byte","b":[3,206,202,13,4,218,0,208]},{"a":23131,"t":"byte","b":[0,55,10,55,10,202,13,0]},{"a":23139,"t":"byte","b":[57,4,55,4,53,4,52,2]},{"a":23147,"t":"byte","b":[53,2,52,2,50,4,52,4]},{"a":23155,"t":"byte","b":[53,2,52,2,50,2,50,2]},{"a":23163,"t":"byte","b":[48,2,45,2,48,2,50,2]},{"a":23171,"t":"byte","b":[232,39,90,48,20,95,1,192]},{"a":23179,"l":"tune_8_voice3","c":"Tune 8 voice 3 track: filter program $5ABF, the code at $5AFF (all three voices through the filter), a rest of code 8, then on through voice 2's and voice 1's starts.","t":"byte","b":[224,191,90,214,255,90,95,8]},{"a":23187,"l":"tune_8_voice2","c":"Tune 8 voice 2 track: a rest of code 8 (64 ticks), then on into voice 1's.","t":"byte","b":[95,8]},{"a":23189,"l":"tune_8_voice1","c":"Tune 8 voice 1 track: instrument $5AA2 with the pulse sweep off ($CA 11 00) and control $15 (triangle with ring modulation), then a jump to tune 1's body at $5B1E. With the rests before them the three voices play that body 64 ticks apart.","t":"byte","b":[208,28,162,90,202,17,0,202]},{"a":23197,"t":"byte","b":[24,21,196,30,91]},{"a":23202,"l":"music_instr_5aa2","c":"Instrument of tunes 1 and 8: pulse at $800 (control $41), attack/decay $03, sustain/release $97, gate 13, release 8, falling 200 a tick after 10 (mode 4), pulse width growing 50 a tick for 255 ticks (mode 4).","t":"byte","b":[56,255,0,0,0,0,0,0]},{"a":23210,"t":"byte","b":[255,0,0,0,10,4,255,0]},{"a":23218,"t":"byte","b":[0,4,50,0,0,0,0,8]},{"a":23226,"t":"byte","b":[65,3,151,13,8]},{"a":23231,"l":"music_filter_5abf","c":"Filter program of tunes 1 and 8 ($E0 at $5A8B and $5B10): steps -2, -2, +2, +2 for 255 ticks each after a 255-tick delay, mode 5 (repeating), start cutoff $4B0.","t":"byte","b":[254,255,254,255,2,0,2,0]},{"a":23239,"t":"byte","b":[255,255,255,255,255,5,176,4]},{"a":23247,"l":"music_pat_5acf","c":"Tune 1 figure 1: C-1 A#-0 G#-0 F-0 D#-0 C-0 (written notes, code 4 each), called four times a bar at the transposes 67, 55, 43 and 31 ($5B22-$5B2E).","t":"byte","b":[12,4,10,4,8,4,5,4]},{"a":23255,"t":"byte","b":[3,4,0,4,192]},{"a":23260,"l":"music_pat_5adc","c":"Tune 1 figure 2, the same notes going up: C-0 D#-0 F-0 G#-0 A#-0 C-1 ($5B35-$5B41, transposes 71, 57, 45, 31).","t":"byte","b":[0,4,3,4,5,4,8,4]},{"a":23268,"t":"byte","b":[10,4,12,4,192]},{"a":23273,"l":"music_pat_5ae9","c":"Tune 1 figure 3: C-1 C-0 A#-0 C-0 G-0 D#-0 ($5B49-$5B55, transposes 50, 55, 53, 58).","t":"byte","b":[12,4,0,4,10,4,0,4]},{"a":23281,"t":"byte","b":[7,4,3,4,192]},{"a":23286,"l":"music_pat_5af6","c":"Tune 1 figure 4: C-0 D#-0 G-0 C-1 ($5B5C-$5B78, transposes 50, 62, 55, 67, 60, 72, 65, 77).","t":"byte","b":[0,4,3,4,7,4,12,4]},{"a":23294,"t":"byte","b":[192]},{"a":23295,"l":"music_code_filter_all","c":"Machine code in the music data, called by command $D6 from tune 8's voice 3 ($5A8E) and tune 1's ($5B13): $D417 = $F7 (resonance 15, voices 1-3 through the filter), $D418 = $1F, filter voice $57 = 3 (no voice's notes restart the program), then JMP $4D3B to start the program just loaded ($5ABF) at once.","t":"code","b":[169,247],"m":"lda","o":"#$F7"},{"a":23297,"t":"code","b":[141,23,212],"m":"sta","o":"sid_filter_resonance"},{"a":23300,"t":"code","b":[169,31],"m":"lda","o":"#$1F"},{"a":23302,"t":"code","b":[141,24,212],"m":"sta","o":"sid_filter_mode_volume"},{"a":23305,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":23307,"t":"code","b":[133,87],"m":"sta","o":"music_filter_voice","oa":87},{"a":23309,"t":"code","b":[76,59,77],"m":"jmp","o":"start_filter_program","oa":19771},{"a":23312,"l":"tune_1_voice3","c":"Tune 1 voice 3 track: filter program $5ABF, the code at $5AFF, a rest of code 6, then on through voice 2's and voice 1's starts.","t":"byte","b":[224,191,90,214,255,90,95,6]},{"a":23320,"l":"tune_1_voice2","c":"Tune 1 voice 2 track: a rest of code 6 (36 ticks), then on into voice 1's; so the voices come in 36 ticks apart.","t":"byte","b":[95,6]},{"a":23322,"l":"tune_1_voice1","c":"Tune 1 voice 1 track: instrument $5AA2, then the body at $5B1E.","t":"byte","b":[208,28,162,90]},{"a":23326,"l":"tune_1_body","c":"Tune 1's body, shared by all three voices of tunes 1 and 8: twice, figure 1 ($5ACF) twice at four transposes and figure 2 ($5ADC) likewise; figure 3 ($5AE9) four times through four transposes; figure 4 ($5AF6) four times through eight; then back here, for ever.","t":"byte","b":[204,2,204,2,198,67,207,90]},{"a":23334,"t":"byte","b":[198,55,207,90,198,43,207,90]},{"a":23342,"t":"byte","b":[198,31,207,90,206,204,2,198]},{"a":23350,"t":"byte","b":[71,220,90,198,57,220,90,198]},{"a":23358,"t":"byte","b":[45,220,90,198,31,220,90,206]},{"a":23366,"t":"byte","b":[206,204,4,198,50,233,90,198]},{"a":23374,"t":"byte","b":[55,233,90,198,53,233,90,198]},{"a":23382,"t":"byte","b":[58,233,90,206,204,4,198,50]},{"a":23390,"t":"byte","b":[246,90,198,62,246,90,198,55]},{"a":23398,"t":"byte","b":[246,90,198,67,246,90,198,60]},{"a":23406,"t":"byte","b":[246,90,198,72,246,90,198,65]},{"a":23414,"t":"byte","b":[246,90,198,77,246,90,206,196]},{"a":23422,"t":"byte","b":[30,91]},{"a":23424,"l":"music_instr_5b80","c":"Instrument of tune 4: pulse at $800, control $49 (released 2 ticks before the end), attack/decay $03, sustain/release $A7, release 5; vibrato (mode 5) +40, -40, +40 over 3, 5, 2 ticks after 10; pulse sweep (mode 4) +160 for 12 ticks, then -68 for 255.","t":"byte","b":[40,0,216,255,40,0,0,0]},{"a":23432,"t":"byte","b":[3,5,2,0,10,5,12,255]},{"a":23440,"t":"byte","b":[0,4,160,0,188,255,0,8]},{"a":23448,"t":"byte","b":[73,3,167,2,5]},{"a":23453,"l":"music_filter_5b9d","c":"Filter program of tune 4 ($E0 at $5C50): steps -40, +4, +12, -12 for 20, 25, 20, 20 ticks, no delay, mode 4 (holds after the four steps), start cutoff $2BC.","t":"byte","b":[216,255,4,0,12,0,244,255]},{"a":23461,"t":"byte","b":[20,25,20,20,0,4,188,2]},{"a":23469,"l":"music_pitch_5bad","c":"Pitch block of tune 4 ($E8 at $5CF8): mode 5, steps -45, 0, +45, 0 for 4 ticks each after 16, repeating.","t":"byte","b":[211,255,0,0,45,0,0,0]},{"a":23477,"t":"byte","b":[4,4,4,4,16,5]},{"a":23483,"l":"music_pitch_5bbb","c":"Pitch block of tune 4 ($E8 at $5CFD): mode 7, a fall of 30 a tick for 255 ticks after 15, rising 4 a tick during those 15.","t":"byte","b":[226,255,0,0,0,0,4,0]},{"a":23491,"t":"byte","b":[255,0,0,0,15,7]},{"a":23497,"l":"music_pat_5bc9","c":"Tune 4 phrase: a rest, D-3 E-3 D-3 B-2 A#-2, a rest, A-2 (codes 1, 2, 3 and 6); called four times ($5CB5-$5CCA), each after a different held note.","t":"byte","b":[95,3,38,2,40,2,38,2]},{"a":23505,"t":"byte","b":[35,2,34,3,95,1,33,6]},{"a":23513,"t":"byte","b":[192]},{"a":23514,"l":"music_pat_5bda","c":"Tune 4 melody phrase (A-2 F#-3 G-3 D-3 D#-3 E-3 G-3 ... about fifty notes), ending with a G-2 E-2 figure played twice; called at $5CAA and $5CCD.","t":"byte","b":[33,8,42,4,95,2,43,3]},{"a":23522,"t":"byte","b":[95,1,38,2,39,2,40,2]},{"a":23530,"t":"byte","b":[43,2,40,2,39,2,38,2]},{"a":23538,"t":"byte","b":[33,8,45,4,95,2,43,3]},{"a":23546,"t":"byte","b":[95,1,45,1,47,1,45,2]},{"a":23554,"t":"byte","b":[43,1,45,1,43,2,42,1]},{"a":23562,"t":"byte","b":[43,1,42,2,40,2,33,6]},{"a":23570,"t":"byte","b":[33,2,43,2,45,2,43,2]},{"a":23578,"t":"byte","b":[40,2,95,2,22,2,34,4]},{"a":23586,"t":"byte","b":[47,2,45,2,43,2,21,2]},{"a":23594,"t":"byte","b":[33,3,95,1,33,4,25,2]},{"a":23602,"t":"byte","b":[26,2,27,2,28,4,28,2]},{"a":23610,"t":"byte","b":[31,3,95,1,204,2,31,2]},{"a":23618,"t":"byte","b":[28,2,206,192]},{"a":23622,"l":"music_pat_5c46","c":"Tune 4 bass figure: F-1 F-1 F-2 F-1 (code 2 each), called a whole tone down and at pitch ($5D5E, $5D62).","t":"byte","b":[17,2,17,2,29,2,17,2]},{"a":23630,"t":"byte","b":[192]},{"a":23631,"l":"tune_4_voice3","c":"Tune 4 voice 3 track, the whole tune: filter on voice 3 with program $5B9D, instrument $5B80, a bass line of octave jumps falling from B to G#, and a twice-repeated section of falling lines; then tempo 4, set-up $59F7, melody $5BDA and the phrases $5BC9 with the pulse width set by $DA 16; a lead passage with pitch blocks $5BAD and $5BBB; four bars of figures; tempo 5 for the chord section $5E93; tempo 3 for four bars with the bass $5C46; G-2/F-2 and C-2 riffs; tempo 2 and back to the start.","t":"byte","b":[222,224,157,91,208,28,128,91]},{"a":23639,"t":"byte","b":[35,4,23,4,35,4,34,4]},{"a":23647,"t":"byte","b":[22,4,34,4,33,4,21,4]},{"a":23655,"t":"byte","b":[33,4,32,4,20,4,32,4]},{"a":23663,"t":"byte","b":[204,2,204,2,31,9,43,9]},{"a":23671,"t":"byte","b":[41,9,41,3,38,6,36,6]},{"a":23679,"t":"byte","b":[34,6,206,27,9,39,9,37]},{"a":23687,"t":"byte","b":[9,37,3,34,6,32,6,30]},{"a":23695,"t":"byte","b":[6,26,9,38,9,36,9,36]},{"a":23703,"t":"byte","b":[3,14,3,26,3,17,3,29]},{"a":23711,"t":"byte","b":[3,18,3,30,3,206,234,4]},{"a":23719,"t":"byte","b":[194,247,89,194,218,91,218,22]},{"a":23727,"t":"byte","b":[0,8,24,8,36,3,194,201]},{"a":23735,"t":"byte","b":[91,23,8,35,3,194,201,91]},{"a":23743,"t":"byte","b":[22,8,34,3,194,201,91,21]},{"a":23751,"t":"byte","b":[8,33,3,194,201,91,194,218]},{"a":23759,"t":"byte","b":[91,204,2,45,2,43,2,40]},{"a":23767,"t":"byte","b":[3,95,1,43,2,40,4,37]},{"a":23775,"t":"byte","b":[4,38,2,39,2,40,4,43]},{"a":23783,"t":"byte","b":[4,44,2,45,2,43,2,40]},{"a":23791,"t":"byte","b":[3,95,1,43,2,40,3,95]},{"a":23799,"t":"byte","b":[1,232,173,91,39,12,232,187]},{"a":23807,"t":"byte","b":[91,48,6,232,64,94,206,204]},{"a":23815,"t":"byte","b":[4,31,8,32,6,33,2,95]},{"a":23823,"t":"byte","b":[2,21,8,31,1,33,1,36]},{"a":23831,"t":"byte","b":[1,38,1,36,2,31,8,32]},{"a":23839,"t":"byte","b":[6,33,2,95,2,21,2,22]},{"a":23847,"t":"byte","b":[2,23,2,26,2,27,2,28]},{"a":23855,"t":"byte","b":[2,30,2,206,234,5,198,0]},{"a":23863,"t":"byte","b":[147,94,234,3,194,247,89,204]},{"a":23871,"t":"byte","b":[4,19,8,31,2,7,2,19]},{"a":23879,"t":"byte","b":[2,21,2,22,6,22,2,34]},{"a":23887,"t":"byte","b":[2,22,4,23,2,24,6,24]},{"a":23895,"t":"byte","b":[2,36,2,24,4,24,2,198]},{"a":23903,"t":"byte","b":[254,70,92,198,0,70,92,206]},{"a":23911,"t":"byte","b":[204,4,204,2,31,2,31,2]},{"a":23919,"t":"byte","b":[43,2,31,2,31,2,41,2]},{"a":23927,"t":"byte","b":[31,2,31,2,38,2,31,2]},{"a":23935,"t":"byte","b":[36,2,31,2,34,2,31,2]},{"a":23943,"t":"byte","b":[29,2,26,2,206,204,2,29]},{"a":23951,"t":"byte","b":[2,29,2,43,2,29,2,29]},{"a":23959,"t":"byte","b":[2,41,2,29,2,29,2,38]},{"a":23967,"t":"byte","b":[2,29,2,36,2,29,2,34]},{"a":23975,"t":"byte","b":[2,31,2,29,2,26,2,206]},{"a":23983,"t":"byte","b":[206,204,4,204,2,31,2,31]},{"a":23991,"t":"byte","b":[2,19,2,31,2,19,2,204]},{"a":23999,"t":"byte","b":[4,19,2,31,2,206,31,2]},{"a":24007,"t":"byte","b":[31,2,19,2,206,31,2,31]},{"a":24015,"t":"byte","b":[2,22,2,31,2,22,2,204]},{"a":24023,"t":"byte","b":[4,22,2,31,2,206,31,2]},{"a":24031,"t":"byte","b":[31,2,22,2,29,2,29,2]},{"a":24039,"t":"byte","b":[24,2,29,2,24,2,204,3]},{"a":24047,"t":"byte","b":[24,2,29,2,206,24,2,28]},{"a":24055,"t":"byte","b":[2,28,2,28,2,24,2,206]},{"a":24063,"t":"byte","b":[234,2,196,79,92]},{"a":24068,"l":"tune_0_voice3","c":"Tune 0 voice 3 track, the whole tune: instrument $5E40, filter on voice 3 with program $5E30, then twice the 16 notes A-1 A-1 E-2 E-2 D#-2 D#-2 D-2 D-2 A-2 A-2 G#-2 G-2 E-2 D#-2 D-2 C-2 (code 2: 8 ticks each at tempo 4); end.","t":"byte","b":[208,28,64,94,222,224,48,94]},{"a":24076,"t":"byte","b":[204,2,21,2,21,2,28,2]},{"a":24084,"t":"byte","b":[28,2,27,2,27,2,26,2]},{"a":24092,"t":"byte","b":[26,2,33,2,33,2,32,2]},{"a":24100,"t":"byte","b":[31,2,28,2,27,2,26,2]},{"a":24108,"t":"byte","b":[24,2,206,192]},{"a":24112,"l":"music_filter_5e30","c":"Filter program ($E0 at $59FC and $5E09): steps +20, -20, +50, -50 for 4 ticks each after 10, mode 7, start cutoff $258.","t":"byte","b":[20,0,236,255,50,0,206,255]},{"a":24120,"t":"byte","b":[4,4,4,4,10,7,88,2]},{"a":24128,"l":"music_instr_5e40","c":"Instrument of tunes 0, 4 and 7: pulse, control $49 (released 2 ticks before the end), attack/decay $01, sustain/release $C4, release 5; vibrato (mode 5) +20, -20, +20 over 2, 4, 2 ticks after 8; pulse sweep (mode 5) from $400, +100 for 20 ticks then -10 for 200.","t":"byte","b":[20,0,236,255,20,0,0,0]},{"a":24136,"t":"byte","b":[2,4,2,0,8,5,20,200]},{"a":24144,"t":"byte","b":[0,5,100,0,246,255,0,4]},{"a":24152,"t":"byte","b":[73,1,196,2,5]},{"a":24157,"l":"music_filter_5e5d","c":"Filter program of tune 7's voice 3 ($E0 at $5A38): steps +20, -20, +20 for 4 ticks each, and +120 a tick during the 4-tick delay (mode 7), start cutoff $064.","t":"byte","b":[20,0,236,255,20,0,120,0]},{"a":24165,"t":"byte","b":[4,4,4,0,4,7,100,0]},{"a":24173,"l":"music_pitch_5e6d","c":"Arpeggio set-up for command $E8 ($5E96): mode 8, a note every 5 ticks from the table at $5E7B, starting at index 7.","t":"byte","b":[0,0,0,0,1,0,5,0]},{"a":24181,"t":"byte","b":[123,94,0,7,7,8]},{"a":24187,"l":"music_arp_5e7b","c":"Arpeggio table, 8 offsets read from index 7 down: 0, -2, -4, -2, +3, -2, -4, -2 semitones. Pattern $5EAC switches between it, $5E83 and $5E8B.","t":"byte","b":[254,252,254,3,254,252,254,0]},{"a":24195,"l":"music_arp_5e83","c":"Arpeggio table: 0, -2, -4, -2, +2, -2, -4, -2.","t":"byte","b":[254,252,254,2,254,252,254,0]},{"a":24203,"l":"music_arp_5e8b","c":"Arpeggio table: 0, -2, -4, -2, +5, -2, -4, -2.","t":"byte","b":[254,252,254,5,254,252,254,0]},{"a":24211,"l":"music_pat_5e93","c":"Tune 4's arpeggio section (called at tempo 5 from $5D35): set-up $59F7, arpeggio $5E6D, filter program $5ED3, control $41 and gate held; one B-4 of code 16 that sounds on while $5EAC changes its chord three times with rests between, then runs into $5EAC once more.","t":"byte","b":[194,247,89,232,109,94,224,211]},{"a":24219,"t":"byte","b":[94,202,24,65,202,27,255,59]},{"a":24227,"t":"byte","b":[16,204,3,194,172,94,95,16]},{"a":24235,"t":"byte","b":[206]},{"a":24236,"l":"music_pat_5eac","c":"Chord changes for the section at $5E93: live arpeggio table $5E83, $5E7B, $5E8B, $5E7B in turn ($DC 08), a rest of code 16 after each of the first three.","t":"byte","b":[220,8,131,94,95,16,220,8]},{"a":24244,"t":"byte","b":[123,94,95,16,220,8,139,94]},{"a":24252,"t":"byte","b":[95,16,220,8,123,94,192]},{"a":24259,"l":"music_filter_5ec3","c":"Filter program of tune 5 ($E0 at $59DE) and the title tune ($6048): steps -6, -1, +1, +6 for 128, 255, 255, 128 ticks, no delay, mode 5 (repeating), start cutoff $44C.","t":"byte","b":[250,255,255,255,1,0,6,0]},{"a":24267,"t":"byte","b":[128,255,255,128,0,5,76,4]},{"a":24275,"l":"music_instr_5ed3","c":"Instrument of the title tune (voice 1 at $6043; 13 bytes of it at $60AE, its pitch block at $60EB): pulse at $800 (control $41), attack/decay $06, sustain/release $FA, gate 255, release 254; vibrato (mode 7) +25, -25, +25 over 9, 18, 9 ticks after 100, rising 10 a tick during the delay; pulse sweep (mode 5) +8 and -8 for 160 ticks each. Tune 4's $E0 at $5E99 loads its first 16 bytes as a filter program (start cutoff $A0A0).","t":"byte","b":[25,0,231,255,25,0,10,0]},{"a":24283,"t":"byte","b":[9,18,9,0,100,7,160,160]},{"a":24291,"t":"byte","b":[0,5,8,0,248,255,0,8]},{"a":24299,"t":"byte","b":[65,6,250,255,254]},{"a":24304,"l":"music_pitch_5ef0","c":"Pitch block of the title tune ($E8 at $6088): mode 5, steps -73, 0, +73, 0 for 10 ticks each after 10.","t":"byte","b":[183,255,0,0,73,0,0,0]},{"a":24312,"t":"byte","b":[10,10,10,10,10,5]},{"a":24318,"l":"music_env_5efe","c":"Five bytes laid out like an envelope block: control $41, attack/decay $06, sustain/release $F6, gate 20, release 50. No command in the tunes points at them (the address does not occur in the image).","t":"byte","b":[65,6,246,20,50]},{"a":24323,"l":"music_pitch_5f03","c":"Pitch block of the title tune ($E8 at $608D and $60DF): mode 4, +20 a tick for 41 ticks, a hold of 40, -40 a tick for 20, after 5.","t":"byte","b":[20,0,0,0,216,255,0,0]},{"a":24331,"t":"byte","b":[41,40,20,0,5,4]},{"a":24337,"l":"music_instr_5f11","c":"Instrument of the title tune ($D0 at $6150 and $6237): triangle and pulse together (control $51), attack/decay $09, sustain/release $8A, gate 20, release 254; a slow rise of 4 a tick (mode 5) after 10; pulse sweep (mode $85, restarting) from $480, +41 for 28 ticks then +124 for 4.","t":"byte","b":[4,0,0,0,0,0,0,0]},{"a":24345,"t":"byte","b":[255,0,0,0,10,5,28,4]},{"a":24353,"t":"byte","b":[0,133,41,0,124,0,128,4]},{"a":24361,"t":"byte","b":[81,9,138,20,254]},{"a":24366,"l":"music_code_filter_free","c":"Machine code called by the title tune's voice 1 ($604D, command $D6): $57 = 3, so no voice's notes restart the filter program any more and the sweep voice 1 started ($6048, program $5EC3) runs on by itself.","t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":24368,"t":"code","b":[133,87],"m":"sta","o":"music_filter_voice","oa":87},{"a":24370,"t":"code","b":[96],"m":"rts"},{"a":24371,"l":"music_pat_5f33","c":"Title tune pattern ($6159, $615C on voice 1, $6245 on voice 2): four bars of a D-minor arpeggio figure (D-4 D-6 A-5 F-5, then D, F and A in shorter notes) and four of the same on E major (B-3 E-6 B-5 G#-5 ...).","t":"byte","b":[204,4,50,12,74,12,69,12]},{"a":24379,"t":"byte","b":[65,12,62,6,65,6,65,6]},{"a":24387,"t":"byte","b":[57,6,62,6,62,6,53,6]},{"a":24395,"t":"byte","b":[57,6,206,204,4,47,12,76]},{"a":24403,"t":"byte","b":[12,71,12,68,12,64,6,68]},{"a":24411,"t":"byte","b":[6,68,6,59,6,64,6,56]},{"a":24419,"t":"byte","b":[6,59,6,52,6,206,192]},{"a":24426,"l":"music_pat_5f6a","c":"Title tune pattern ($615F on voice 1, $6248 on voice 2), running on to $6042: the same arpeggio figure four bars each over F, E, D#, D, C#, C, B and A#, a bass line falling a semitone at a time under changing chords.","t":"byte","b":[204,4,41,12,65,12,60,12]},{"a":24434,"t":"byte","b":[58,12,53,6,58,6,58,6]},{"a":24442,"t":"byte","b":[48,6,53,6,53,6,46,6]},{"a":24450,"t":"byte","b":[48,6,206,204,4,40,12,64]},{"a":24458,"t":"byte","b":[12,58,12,56,12,52,6,56]},{"a":24466,"t":"byte","b":[6,56,6,46,6,52,6,52]},{"a":24474,"t":"byte","b":[6,40,6,46,6,206,204,4]},{"a":24482,"t":"byte","b":[39,12,63,12,58,12,55,12]},{"a":24490,"t":"byte","b":[51,6,55,6,55,6,46,6]},{"a":24498,"t":"byte","b":[51,6,51,6,43,6,46,6]},{"a":24506,"t":"byte","b":[206,204,4,38,12,62,12,58]},{"a":24514,"t":"byte","b":[12,54,12,50,6,54,6,54]},{"a":24522,"t":"byte","b":[6,46,6,50,6,50,6,42]},{"a":24530,"t":"byte","b":[6,46,6,206,204,4,37,12]},{"a":24538,"t":"byte","b":[61,12,58,12,53,12,49,6]},{"a":24546,"t":"byte","b":[53,6,53,6,46,6,49,6]},{"a":24554,"t":"byte","b":[49,6,41,6,46,6,206,204]},{"a":24562,"t":"byte","b":[4,36,12,60,12,58,12,52]},{"a":24570,"t":"byte","b":[12,48,6,52,6,52]},{"a":24576,"l":"tune_title_arpeggio_tail","c":"Title tune (tune $1A, started by $8F61): the end of the arpeggio pattern that begins at $5F6A in the previous range, called by the sequence command $C2 from $615F (voice 1) and $6248 (voice 2). Events are two bytes: a note below $60 with an index into the duration table, or a note $60-$BF with a literal duration; note $5F is a rest; $CC n ... $CE repeats n times; $C0 returns. $6000 is the duration byte of the note at $5FFF. Then the $CE ending the sixth block ($600B), the seventh block ($600C-$6026, first note $23) and the eighth ($6027-$6041, first note $22), each played four times, and the $C0 at $6042. Each block's first note is a semitone below the last, from $29 at $5F6C.","t":"byte","b":[6,46,6,48,6,48,6,40]},{"a":24584,"t":"byte","b":[6,46,6,206,204,4,35,12]},{"a":24592,"t":"byte","b":[59,12,58,12,51,12,47,6]},{"a":24600,"t":"byte","b":[51,6,51,6,46,6,47,6]},{"a":24608,"t":"byte","b":[47,6,39,6,42,6,206,204]},{"a":24616,"t":"byte","b":[4,34,12,58,12,53,12,50]},{"a":24624,"t":"byte","b":[12,46,6,50,6,50,6,41]},{"a":24632,"t":"byte","b":[6,46,6,46,6,38,6,41]},{"a":24640,"t":"byte","b":[6,206,192]},{"a":24643,"l":"tune_title_voice1","c":"Title tune (tune $1A: its record at $553A points voice 1 here, voice 2 at $61C9, voice 3 at $62D8, speed 5), voice 1's sequence, $6043-$6166: loads the instrument at $5ED3 ($D0), switches the voice into the filter ($DE), copies 16 bytes from $5EC3 into $31-$40 ($E0), calls the code at $5F2E ($D6), then notes $34-$45 among long rests with instrument ($E8) and parameter ($CA, $DA, $D4, $DC) changes, a $CC $7F rest loop, instrument $5F11 at $6150, 24 rests, the pattern $5F33 twice and the pattern $5F6A ($C2 at $6159, $615C, $615F), a rest, and $C4 at $6164 jumping back to $6043, so the tune loops until another is started.","t":"byte","b":[208,28,211,94,222,224,195,94]},{"a":24651,"t":"byte","b":[58,32,214,46,95,204,20,95]},{"a":24659,"t":"byte","b":[32,206,58,32,95,32,95,32]},{"a":24667,"t":"byte","b":[228,95,24,58,4,57,4,58]},{"a":24675,"t":"byte","b":[32,95,24,55,8,62,32,230]},{"a":24683,"t":"byte","b":[218,6,6,0,64,32,228,64]},{"a":24691,"t":"byte","b":[32,95,32,95,32,95,8,60]},{"a":24699,"t":"byte","b":[16,55,4,53,4,52,32,95]},{"a":24707,"t":"byte","b":[32,53,32,55,32,232,240,94]},{"a":24715,"t":"byte","b":[55,32,232,3,95,95,32,95]},{"a":24723,"t":"byte","b":[32,202,13,4,55,24,202,13]},{"a":24731,"t":"byte","b":[0,53,8,202,9,5,204,4]},{"a":24739,"t":"byte","b":[202,13,4,55,16,202,13,0]},{"a":24747,"t":"byte","b":[53,6,206,208,12,211,94,228]},{"a":24755,"t":"byte","b":[55,32,212,27,254,95,32,95]},{"a":24763,"t":"byte","b":[32,95,32,95,24,55,16,60]},{"a":24771,"t":"byte","b":[32,95,32,64,32,95,32,62]},{"a":24779,"t":"byte","b":[32,212,27,150,95,32,95,32]},{"a":24787,"t":"byte","b":[95,16,58,16,62,32,95,32]},{"a":24795,"t":"byte","b":[65,32,95,16,232,3,95,202]},{"a":24803,"t":"byte","b":[12,50,218,0,226,255,67,16]},{"a":24811,"t":"byte","b":[232,211,94,228,64,32,212,27]},{"a":24819,"t":"byte","b":[254,95,32,95,32,95,32,67]},{"a":24827,"t":"byte","b":[24,69,24,67,16,65,24,64]},{"a":24835,"t":"byte","b":[24,60,16,62,32,95,32,95]},{"a":24843,"t":"byte","b":[32,95,16,60,16,58,32,95]},{"a":24851,"t":"byte","b":[32,55,32,95,16,218,6,0]},{"a":24859,"t":"byte","b":[0,230,53,12,220,6,18,0]},{"a":24867,"t":"byte","b":[95,8,220,6,0,0,230,202]},{"a":24875,"t":"byte","b":[26,175,218,6,0,0,204,127]},{"a":24883,"t":"byte","b":[95,4,206,60,32,204,6,95]},{"a":24891,"t":"byte","b":[32,206,95,16,212,12,100,220]},{"a":24899,"t":"byte","b":[6,244,255,95,16,220,6,0]},{"a":24907,"t":"byte","b":[0,220,27,254,255,208,28,17]},{"a":24915,"t":"byte","b":[95,204,24,95,32,206,194,51]},{"a":24923,"t":"byte","b":[95,194,51,95,194,106,95,95]},{"a":24931,"t":"byte","b":[9,196,67,96]},{"a":24935,"l":"tune_title_instrument_a","c":"Title tune: a 29-byte instrument definition, loaded by the $D0 $1C commands of voice 2 at $621D and voice 3 at $6331. For voice 1 the same command fills $87-$A3, and bytes 24-26 ($41 $B6 $FF here) land in $9F-$A1, which $4DA6-$4DC1 write to the SID's control, attack/decay and sustain/release registers.","t":"byte","b":[25,0,231,255,25,0,0,0]},{"a":24943,"t":"byte","b":[9,18,9,0,100,0,160,160]},{"a":24951,"t":"byte","b":[0,5,8,0,248,255,0,8]},{"a":24959,"t":"byte","b":[65,182,255,254,255]},{"a":24964,"l":"tune_unused_envelope_6184","c":"Five bytes, $41 $00 $56 $0C $32, between the instrument at $6167 and the tables at $6189. They have the shape of the block a $D2 command copies into $9F-$A3 (control $41, attack/decay $00, sustain/release $56, then $0C $32), but no sequence of the nine tunes in the table at $5525 refers to $6184 and no pointer to it was found in memory: apparently unused.","t":"byte","b":[65,0,86,12,50]},{"a":24969,"l":"tune_title_voice2_tables","c":"Title tune, voice 2: four 16-byte tables at $6189, $6199, $61A9 and $61B9 whose addresses voice 2's $DA/$DC commands put in its 16-bit instrument parameter 8 ($61CD, $61DF, $61E8, $61F2, $61FB, $620A, $6219). Each table is four groups of four bytes ending in $07 ($05 $0C $00 $07 ...). What the driver does with parameter 8 is in its own code.","t":"byte","b":[5,12,0,7,4,12,0,7]},{"a":24977,"t":"byte","b":[2,12,0,7,4,12,0,7]},{"a":24985,"t":"byte","b":[5,12,254,7,4,12,254,7]},{"a":24993,"t":"byte","b":[2,12,254,7,4,12,254,7]},{"a":25001,"t":"byte","b":[4,244,12,7,4,232,4,7]},{"a":25009,"t":"byte","b":[12,244,4,7,12,232,12,7]},{"a":25017,"t":"byte","b":[2,244,10,7,2,230,2,7]},{"a":25025,"t":"byte","b":[10,244,2,7,10,230,10,7]},{"a":25033,"l":"tune_title_voice2","c":"Title tune (tune $1A), voice 2's sequence, $61C9-$624D: loads the instrument at $625E, points parameter 8 at $6189, 13 rests, note $3C, then long rests while switching parameter 8 between $6199 and $6189, parameter $12 swept ($FFFF then $0000) with the tables $61A9 and $61B9, instrument $6167 for three rounds of notes $18 and $1F, then instrument $5F11, 24 rests, the shared patterns $5F33 and $5F6A ($C2 at $6245 and $6248), and $C4 at $624B back to $61C9.","t":"byte","b":[208,28,94,98,218,8,137,97]},{"a":25041,"t":"byte","b":[204,13,95,32,206,60,32,204]},{"a":25049,"t":"byte","b":[7,95,32,206,204,2,220,8]},{"a":25057,"t":"byte","b":[153,97,204,8,95,32,206,220]},{"a":25065,"t":"byte","b":[8,137,97,204,8,95,32,206]},{"a":25073,"t":"byte","b":[206,220,8,153,97,204,8,95]},{"a":25081,"t":"byte","b":[32,206,220,8,137,97,204,12]},{"a":25089,"t":"byte","b":[95,8,206,95,5,220,18,255]},{"a":25097,"t":"byte","b":[255,220,8,169,97,95,3,204]},{"a":25105,"t":"byte","b":[19,95,8,206,220,18,0,0]},{"a":25113,"t":"byte","b":[220,8,185,97,208,28,103,97]},{"a":25121,"t":"byte","b":[204,8,95,32,206,204,3,24]},{"a":25129,"t":"byte","b":[32,204,7,95,32,206,31,32]},{"a":25137,"t":"byte","b":[204,7,95,32,206,206,208,28]},{"a":25145,"t":"byte","b":[17,95,202,13,5,95,9,204]},{"a":25153,"t":"byte","b":[24,95,32,206,194,51,95,194]},{"a":25161,"t":"byte","b":[106,95,196,201,97]},{"a":25166,"l":"tune_title_voice3_block_624e","c":"Title tune, voice 3: 16 bytes that the $E0 command at $634A copies into $31-$40, the block voice 1's own $E0 fills from $5EC3 at $6048.","t":"byte","b":[255,255,255,255,255,255,7,0]},{"a":25174,"t":"byte","b":[255,255,255,0,255,7,100,0]},{"a":25182,"l":"tune_title_instrument_b","c":"Title tune: a 29-byte instrument definition loaded first by both voice 2 ($61C9) and voice 3 ($62D8) with $D0 $1C; bytes 24-26 are $41 $FE $BF (control, attack/decay, sustain/release in the layout $4DA6 uses) and bytes 8-9 are $6298, so parameter 8 starts at voice 3's first table.","t":"byte","b":[0,0,0,0,1,0,20,0]},{"a":25190,"t":"byte","b":[152,98,0,15,0,8,1,1]},{"a":25198,"t":"byte","b":[0,5,1,0,0,0,1,0]},{"a":25206,"t":"byte","b":[65,254,191,255,255]},{"a":25211,"l":"tune_title_instrument_c","c":"Title tune: a 29-byte instrument definition loaded by voice 3's $D0 $1C at $6340, before its filtered bass notes.","t":"byte","b":[6,0,250,255,6,0,250,255]},{"a":25219,"t":"byte","b":[10,20,10,0,100,5,160,160]},{"a":25227,"t":"byte","b":[0,5,8,0,248,255,0,8]},{"a":25235,"t":"byte","b":[65,204,138,255,254]},{"a":25240,"l":"tune_title_voice3_tables","c":"Title tune, voice 3: four 16-byte tables at $6298, $62A8, $62B8 and $62C8 that voice 3's $DC commands put in its instrument parameter 8 ($62EA, $62F3, $62FD, $631E, $6327). They hold the same values as voice 2's tables at $6189-$61C8, each rotated by two bytes ($00 $07 $04 $0C ... against $05 $0C $00 $07 ...).","t":"byte","b":[0,7,4,12,0,7,2,12]},{"a":25248,"t":"byte","b":[0,7,4,12,0,7,5,12]},{"a":25256,"t":"byte","b":[254,7,4,12,254,7,2,12]},{"a":25264,"t":"byte","b":[254,7,4,12,254,7,5,12]},{"a":25272,"t":"byte","b":[12,7,4,244,12,7,4,232]},{"a":25280,"t":"byte","b":[4,7,12,244,4,7,12,232]},{"a":25288,"t":"byte","b":[10,7,2,244,10,7,2,230]},{"a":25296,"t":"byte","b":[2,7,10,244,2,7,10,230]},{"a":25304,"l":"tune_title_voice3","c":"Title tune (tune $1A), voice 3's sequence, $62D8-$6387: loads the instrument at $625E, rests, note $3C, long rests alternating parameter 8 between the tables $62A8 and $6298, a sweep (parameters $1B, $12, $16), note $3C and more rests with the tables $62B8 and $62C8, instrument $6167 for notes $1D and $1A, instrument $627B, the filter ($DE, $E0 $624E), bass notes $1D, $17 and $22 each followed by long rests, note $16, a rest with literal duration ($BF $05), and $C4 at $6385 back to $62D8.","t":"byte","b":[208,28,94,98,204,5,95,32]},{"a":25312,"t":"byte","b":[206,60,32,204,15,95,32,206]},{"a":25320,"t":"byte","b":[204,2,220,8,168,98,204,8]},{"a":25328,"t":"byte","b":[95,32,206,220,8,152,98,204]},{"a":25336,"t":"byte","b":[8,95,32,206,206,220,8,168]},{"a":25344,"t":"byte","b":[98,204,25,95,4,206,212,27]},{"a":25352,"t":"byte","b":[254,220,18,255,255,218,22,207]},{"a":25360,"t":"byte","b":[14,218,18,255,255,204,15,95]},{"a":25368,"t":"byte","b":[8,206,60,32,204,3,220,8]},{"a":25376,"t":"byte","b":[184,98,204,8,95,32,206,220]},{"a":25384,"t":"byte","b":[8,200,98,204,8,95,32,206]},{"a":25392,"t":"byte","b":[206,208,28,103,97,95,4,29]},{"a":25400,"t":"byte","b":[32,204,7,95,32,206,26,32]},{"a":25408,"t":"byte","b":[208,28,123,98,204,7,95,32]},{"a":25416,"t":"byte","b":[206,222,224,78,98,204,2,29]},{"a":25424,"t":"byte","b":[32,204,11,95,32,206,23,32]},{"a":25432,"t":"byte","b":[204,11,95,32,206,206,204,6]},{"a":25440,"t":"byte","b":[34,32,204,11,95,32,206,206]},{"a":25448,"t":"byte","b":[34,32,204,10,95,32,206,220]},{"a":25456,"t":"byte","b":[12,255,7,202,26,143,218,27]},{"a":25464,"t":"byte","b":[254,255,95,32,22,32,204,45]},{"a":25472,"t":"byte","b":[95,8,206,191,5,196,216,98]},{"a":25480,"l":"unused_6388","c":"One byte, $EE, between the end of the title tune's voice 3 ($6387) and the entry at $6389. Nothing refers to it; $EE is also the byte that fills the unused table space at $4680-$4716.","t":"byte","b":[238]},{"a":25481,"l":"entry","c":"Game entry, where Yeti's depacker jumps once the game is unpacked: sets the processor port $01 to $35 (RAM at $A000-$BFFF and $E000-$FFFF, I/O at $D000) and jumps to the initialisation at $EC00, which ends in the title sequence at $8F61. The two bytes after the JMP, $6390-$6391 ($0D $BB), are not referenced by any traced code.","t":"code","b":[169,53],"m":"lda","o":"#$35"},{"a":25483,"t":"code","b":[133,1],"m":"sta","o":"cpu_port","oa":1},{"a":25485,"t":"code","b":[76,0,236],"m":"jmp","o":"init_stage1","oa":60416},{"a":25488,"l":"entry_padding","c":"Two bytes, $0D $BB, between the entry's JMP $EC00 and start_new_game at $6392. No traced code reads or runs them.","t":"byte","b":[13,187]},{"a":25490,"l":"start_new_game","c":"Start a new game. Reached by JMP from the title sequence when fire is pressed: $9014 (title and high scores), $90BA (player menu), $94D2 (Wiztips). Blanks the screen ($8C44), clears both sides' score digits $BFDA-$BFE7 and loads the table's top score into the HUD's HI digits $71D4-$71D9 ($70D3), sets up the sides, their lives and the continue level ($6830), then falls into the life cycle at $639B.","t":"code","b":[32,68,140],"m":"jsr","o":"screen_off","oa":35908,"x":[36884,37050,38098]},{"a":25493,"t":"code","b":[32,211,112],"m":"jsr","o":"reset_scores","oa":28883},{"a":25496,"t":"code","b":[32,48,104],"m":"jsr","o":"init_sides","oa":26672},{"a":25499,"l":"play_next_life","c":"The outer game cycle, one pass per life (JMP $639B at $63C7): fades the music out ($45CE = $FF); resets the per-life variables and loads the current side's saved state ($6E42); clears the play screens and places the Wizball at the level's start ($63CA); 'get ready!' until fire ($6893); draws the HUD rows ($70EC); silences the SID ($BAAD); installs the play display list $B3E2 (pointer at $B414) with $7CB4; plays the life ($63E0, back when the life is over); 'game over' if it was the side's last Wizball ($69F2); blanks the screen ($8C44); saves the side's state ($6E38); takes the life away and picks the next side ($6B27, which leaves for the high scores when the game is over).","t":"code","b":[169,255],"m":"lda","o":"#$FF","x":[25543]},{"a":25501,"t":"code","b":[141,206,69],"m":"sta","o":"music_fade","oa":17870},{"a":25504,"t":"code","b":[32,66,110],"m":"jsr","o":"reset_life_and_load_side","oa":28226},{"a":25507,"t":"code","b":[32,202,99],"m":"jsr","o":"prepare_life","oa":25546},{"a":25510,"t":"code","b":[32,147,104],"m":"jsr","o":"get_ready_screen","oa":26771},{"a":25513,"t":"code","b":[32,236,112],"m":"jsr","o":"draw_score_line","oa":28908},{"a":25516,"t":"code","b":[32,173,186],"m":"jsr","o":"silence_sid","oa":47789},{"a":25519,"t":"code","b":[174,20,180],"m":"ldx","o":"ptr_display_list_play","oa":46100},{"a":25522,"t":"code","b":[172,21,180],"m":"ldy","o":"ptr_display_list_play_hi","oa":46101},{"a":25525,"t":"code","b":[32,180,124],"m":"jsr","o":"install_display_list","oa":31924},{"a":25528,"t":"code","b":[32,224,99],"m":"jsr","o":"play_life","oa":25568},{"a":25531,"t":"code","b":[32,242,105],"m":"jsr","o":"show_game_over","oa":27122},{"a":25534,"t":"code","b":[32,68,140],"m":"jsr","o":"screen_off","oa":35908},{"a":25537,"t":"code","b":[32,56,110],"m":"jsr","o":"save_side_state","oa":28216},{"a":25540,"t":"code","b":[32,39,107],"m":"jsr","o":"end_life","oa":27431},{"a":25543,"t":"code","b":[76,155,99],"m":"jmp","o":"play_next_life","oa":25499},{"a":25546,"l":"prepare_life","c":"Prepares the play screen for a new life: clears the first page of $E000, $E400 and $E800 ($7C51), clears $B874 (the colour-complete flag) and $B1F9, puts the Wizball's x position $B20D at $AC, clears $F808-$FAD7 and the shot table $0480-$04FF and scatters five star pixels ($7540), and sets up the landscape at the level's start position ($75E0, entered by JMP so that its RTS returns to the cycle).","t":"code","b":[32,81,124],"m":"jsr","o":"clear_screen_tops","oa":31825,"x":[25507]},{"a":25549,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":25551,"t":"code","b":[141,116,184],"m":"sta","o":"bonus_stage","oa":47220},{"a":25554,"t":"code","b":[141,249,177],"m":"sta","o":"wizball_screen_offset","oa":45561},{"a":25557,"t":"code","b":[169,172],"m":"lda","o":"#$AC"},{"a":25559,"t":"code","b":[141,13,178],"m":"sta","o":"wizball_x","oa":45581},{"a":25562,"t":"code","b":[32,64,117],"m":"jsr","o":"clear_sky_and_bullets","oa":30016},{"a":25565,"t":"code","b":[76,224,117],"m":"jmp","o":"start_landscape","oa":30176},{"a":25568,"l":"play_life","c":"Plays one life: setup, then the frame loop at $640E until the life is over. Setup in order: icon-bar sprite pointers and the feature flags $B231-$B239 reset ($720B); the side's permanent Wiz-lab features re-applied ($6E4F); landscape colour RAM and multicolours for the level ($7D1A); highest reachable level $B1CE ($A9C6); random alien lists for the three highest reachable levels ($9F5F); font in play polarity ($8C84); one scroll step ($7A98); the four cauldron sprites back to the empty outline and the level's glyphs and colours ($9DE9, which calls $776D); alien table $0200 cleared ($9CD5); screen on ($8C50); the Wizball's start state, materialising ($8040); sprite multicolours $E7E9 = $0B, $E7EA = $0D (the band at $8A94 copies them to $D025/$D026); particle table $0300 cleared ($9CCB).","t":"code","b":[32,11,114],"m":"jsr","o":"init_turn_icons","oa":29195,"x":[25528]},{"a":25571,"t":"code","b":[32,79,110],"m":"jsr","o":"reapply_permanent_features","oa":28239},{"a":25574,"t":"code","b":[32,26,125],"m":"jsr","o":"set_landscape_colours","oa":32026},{"a":25577,"t":"code","b":[32,198,169],"m":"jsr","o":"find_alien_landscapes","oa":43462},{"a":25580,"t":"code","b":[32,95,159],"m":"jsr","o":"init_landscape_aliens","oa":40799},{"a":25583,"t":"code","b":[32,132,140],"m":"jsr","o":"font_text_normal","oa":35972},{"a":25586,"t":"code","b":[32,152,122],"m":"jsr","o":"scroll_landscape","oa":31384},{"a":25589,"t":"code","b":[32,233,157],"m":"jsr","o":"init_cauldrons","oa":40425},{"a":25592,"t":"code","b":[32,213,156],"m":"jsr","o":"clear_alien_table","oa":40149},{"a":25595,"t":"code","b":[32,80,140],"m":"jsr","o":"screen_on","oa":35920},{"a":25598,"t":"code","b":[32,64,128],"m":"jsr","o":"init_wizball","oa":32832},{"a":25601,"t":"code","b":[169,11],"m":"lda","o":"#$0B"},{"a":25603,"t":"code","b":[141,233,231],"m":"sta","o":"vic_shadow_spr_mc0","oa":59369},{"a":25606,"t":"code","b":[169,13],"m":"lda","o":"#$0D"},{"a":25608,"t":"code","b":[141,234,231],"m":"sta","o":"vic_shadow_spr_mc1","oa":59370},{"a":25611,"t":"code","b":[32,203,156],"m":"jsr","o":"clear_alien_bullets","oa":40139},{"a":25614,"l":"frame_loop","c":"The frame loop, one pass per frame (reached after the setup, and by JMP from $AE0E and $AF1D where play resumes after the Wiz-lab or a completed level). Order: wait for raster 200-255 ($6E83); music player off while voice 3 plays no tune ($45BD); copy $B874 to $8309 for the HUD interrupt and leave for $646F if the colour is complete; RUN/STOP pause ($6EB7); while the Wizball lives ($B1CF = 0) its and the cat's character-cell boxes and the $0300 particles ($9AD6); erase the shots ($7090); scroll the landscape ($7A98); the Wizball: control and movement, or the death sequence ($7DF4); the cat's fire ($881F); icon bar: pearls light icons, a stick wiggle takes one ($72AA); copy a quarter of the landscape between the screen buffers ($77F7); move and draw the shots ($6F0D); while alive, shift the particles with the scroll ($99BD); move the stars ($747E); read joysticks and keys ($7429); give the sticks to Wiz and cat ($697D); cauldrons, which set $B874 ($9E0D); wait for raster 70-198 ($681D); the cat ($8640); start aliens whose landscape positions scroll into view ($A9DA); the six aliens ($A204); the level timer ($A14A). Loops until $B1CF is non-zero and the death countdown $B1D0 has reached 1, then returns to $63BB.","t":"code","b":[32,131,110],"m":"jsr","o":"wait_raster_low","oa":28291,"x":[25701,25708,44558,44829]},{"a":25617,"t":"code","b":[32,189,69],"m":"jsr","o":"check_music_end","oa":17853},{"a":25620,"t":"code","b":[173,116,184],"m":"lda","o":"bonus_stage","oa":47220},{"a":25623,"t":"code","b":[141,9,131],"m":"sta","o":"leaving_flag_copy","oa":33545},{"a":25626,"t":"code","b":[240,3],"m":"beq","o":"b_641F","oa":25631},{"a":25628,"t":"code","b":[76,111,100],"m":"jmp","o":"colour_completed","oa":25711},{"a":25631,"l":"b_641F","t":"code","b":[32,183,110],"m":"jsr","o":"check_pause","oa":28343,"x":[25626]},{"a":25634,"t":"code","b":[173,207,177],"m":"lda","o":"life_over","oa":45519},{"a":25637,"t":"code","b":[208,3],"m":"bne","o":"b_642A","oa":25642},{"a":25639,"t":"code","b":[32,214,154],"m":"jsr","o":"erase_bullets_check_hits","oa":39638},{"a":25642,"l":"b_642A","t":"code","b":[32,144,112],"m":"jsr","o":"erase_bullets","oa":28816,"x":[25637]},{"a":25645,"t":"code","b":[32,152,122],"m":"jsr","o":"scroll_landscape","oa":31384},{"a":25648,"t":"code","b":[32,244,125],"m":"jsr","o":"update_wizball","oa":32244},{"a":25651,"t":"code","b":[32,31,136],"m":"jsr","o":"fire_cat_shot","oa":34847},{"a":25654,"t":"code","b":[32,170,114],"m":"jsr","o":"update_icons","oa":29354},{"a":25657,"t":"code","b":[32,247,119],"m":"jsr","o":"build_scroll_buffer","oa":30711},{"a":25660,"t":"code","b":[32,13,111],"m":"jsr","o":"update_shots","oa":28429},{"a":25663,"t":"code","b":[173,207,177],"m":"lda","o":"life_over","oa":45519},{"a":25666,"t":"code","b":[208,3],"m":"bne","o":"b_6447","oa":25671},{"a":25668,"t":"code","b":[32,189,153],"m":"jsr","o":"update_alien_bullets","oa":39357},{"a":25671,"l":"b_6447","t":"code","b":[32,126,116],"m":"jsr","o":"move_stars","oa":29822,"x":[25666]},{"a":25674,"t":"code","b":[32,41,116],"m":"jsr","o":"scan_keys_play","oa":29737},{"a":25677,"t":"code","b":[32,125,105],"m":"jsr","o":"route_joysticks","oa":27005},{"a":25680,"t":"code","b":[32,13,158],"m":"jsr","o":"update_cauldrons","oa":40461},{"a":25683,"t":"code","b":[32,29,104],"m":"jsr","o":"wait_raster_middle","oa":26653},{"a":25686,"t":"code","b":[32,64,134],"m":"jsr","o":"update_cat","oa":34368},{"a":25689,"t":"code","b":[32,218,169],"m":"jsr","o":"spawn_wave_aliens","oa":43482},{"a":25692,"t":"code","b":[32,4,162],"m":"jsr","o":"update_aliens","oa":41476},{"a":25695,"t":"code","b":[32,74,161],"m":"jsr","o":"update_no_kill_timer","oa":41290},{"a":25698,"t":"code","b":[173,207,177],"m":"lda","o":"life_over","oa":45519},{"a":25701,"t":"code","b":[240,167],"m":"beq","o":"frame_loop","oa":25614},{"a":25703,"t":"code","b":[173,208,177],"m":"lda","o":"death_timer","oa":45520},{"a":25706,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":25708,"t":"code","b":[208,160],"m":"bne","o":"frame_loop","oa":25614},{"a":25710,"t":"code","b":[96],"m":"rts"},{"a":25711,"l":"colour_completed","c":"Colour completed: the frame loop jumps here when $B874 is non-zero (the mix cauldron is full, see $9E0D). Fades the music out, starts the Wizball dematerialising ($B216 = 2), moves sound effect 5 to voice 2 ($3CD7 = 2), zeroes the scroll, speed and bonus counters ($B1F2, $B1F4-$B1F9, $B1FB, $B1FF, $A858 ...), puts the Wizball at x $AC, erases the shots from the screen ($7090), frees the aliens ($A1C9), loads the bonus wave script ($9CB2: $3902 to $ED02) and gives the Wizball thrust and anti-grav ($7379 twice). Then, once a frame until the dematerialising ends ($B216 = 0): the Wizball with no stick input ($B23F = $FF) and the cat's input $FA (up and left), the landscape background cycling through colours ($B25C = 1, stepped by the band at $8A44) and $D022/$D023 incremented, and tune $13 started once the fade has reached 0. Then the bonus stage setup: colour RAM black, landscape restarted ($75E0), $0300 cleared, colour RAM $0C, multicolours 6 and $0E, materialising again ($B216 = 1, $B214 = $17), message 1 ($6733 = 1, 'colour completed / laboratory imminent'), the font copied into the landscape glyphs ($6743), and tune $21 or $0C, alternating through $BB0C.","t":"code","b":[169,255],"m":"lda","o":"#$FF","x":[25628]},{"a":25713,"t":"code","b":[141,206,69],"m":"sta","o":"music_fade","oa":17870},{"a":25716,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":25718,"t":"code","b":[141,22,178],"m":"sta","o":"warp_direction","oa":45590},{"a":25721,"t":"code","b":[141,215,60],"m":"sta","o":"sfx_05_alien_destroyed","oa":15575},{"a":25724,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":25726,"t":"code","b":[141,89,137],"m":"sta","o":"freaky_bits","oa":35161},{"a":25729,"t":"code","b":[141,174,177],"m":"sta","o":"alien_spawn_cursor","oa":45486},{"a":25732,"t":"code","b":[141,20,178],"m":"sta","o":"warp_frame","oa":45588},{"a":25735,"t":"code","b":[141,244,177],"m":"sta","o":"wizball_speed","oa":45556},{"a":25738,"t":"code","b":[141,245,177],"m":"sta","o":"bonus_unused_b1f5","oa":45557},{"a":25741,"t":"code","b":[141,246,177],"m":"sta","o":"bonus_speed","oa":45558},{"a":25744,"t":"code","b":[141,247,177],"m":"sta","o":"bonus_speed_fraction","oa":45559},{"a":25747,"t":"code","b":[141,248,177],"m":"sta","o":"bonus_flying","oa":45560},{"a":25750,"t":"code","b":[141,242,177],"m":"sta","o":"scroll_fine","oa":45554},{"a":25753,"t":"code","b":[141,28,178],"m":"sta","o":"spin","oa":45596},{"a":25756,"t":"code","b":[141,24,178],"m":"sta","o":"antigrav_vspeed","oa":45592},{"a":25759,"t":"code","b":[141,249,177],"m":"sta","o":"wizball_screen_offset","oa":45561},{"a":25762,"t":"code","b":[141,251,177],"m":"sta","o":"scroll_delta","oa":45563},{"a":25765,"t":"code","b":[141,255,177],"m":"sta","o":"scroll_step","oa":45567},{"a":25768,"t":"code","b":[141,88,168],"m":"sta","o":"bonus_kills","oa":43096},{"a":25771,"t":"code","b":[141,167,169],"m":"sta","o":"police_present","oa":43431},{"a":25774,"t":"code","b":[169,172],"m":"lda","o":"#$AC"},{"a":25776,"t":"code","b":[141,13,178],"m":"sta","o":"wizball_x","oa":45581},{"a":25779,"t":"code","b":[32,214,154],"m":"jsr","o":"erase_bullets_check_hits","oa":39638},{"a":25782,"t":"code","b":[32,144,112],"m":"jsr","o":"erase_bullets","oa":28816},{"a":25785,"t":"code","b":[32,201,161],"m":"jsr","o":"clear_aliens","oa":41417},{"a":25788,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":25790,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":25793,"t":"code","b":[32,178,156],"m":"jsr","o":"init_bonus_waves","oa":40114},{"a":25796,"t":"code","b":[32,121,115],"m":"jsr","o":"take_thrust_or_antigrav","oa":29561},{"a":25799,"t":"code","b":[32,121,115],"m":"jsr","o":"take_thrust_or_antigrav","oa":29561},{"a":25802,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":25804,"t":"code","b":[141,92,178],"m":"sta","o":"background_flash","oa":45660},{"a":25807,"l":"dematerialise_loop","t":"code","b":[32,113,110],"m":"jsr","o":"wait_raster_bottom","oa":28273,"x":[25872]},{"a":25810,"t":"code","b":[32,183,110],"m":"jsr","o":"check_pause","oa":28343},{"a":25813,"t":"code","b":[32,126,116],"m":"jsr","o":"move_stars","oa":29822},{"a":25816,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":25818,"t":"code","b":[141,63,178],"m":"sta","o":"wizball_input","oa":45631},{"a":25821,"t":"code","b":[169,250],"m":"lda","o":"#$FA"},{"a":25823,"t":"code","b":[141,62,178],"m":"sta","o":"cat_input","oa":45630},{"a":25826,"t":"code","b":[32,244,125],"m":"jsr","o":"update_wizball","oa":32244},{"a":25829,"t":"code","b":[32,64,134],"m":"jsr","o":"update_cat","oa":34368},{"a":25832,"t":"code","b":[32,170,114],"m":"jsr","o":"update_icons","oa":29354},{"a":25835,"t":"code","b":[238,34,208],"m":"inc","o":"vic_background1"},{"a":25838,"t":"code","b":[238,35,208],"m":"inc","o":"vic_background2"},{"a":25841,"t":"code","b":[173,207,69],"m":"lda","o":"music_volume","oa":17871},{"a":25844,"t":"code","b":[208,20],"m":"bne","o":"b_650A","oa":25866},{"a":25846,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":25848,"t":"code","b":[141,206,69],"m":"sta","o":"music_fade","oa":17870},{"a":25851,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":25853,"t":"code","b":[141,241,184],"m":"sta","o":"music_voices","oa":47345},{"a":25856,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":25858,"t":"code","b":[141,242,184],"m":"sta","o":"music_speed","oa":47346},{"a":25861,"t":"code","b":[160,19],"m":"ldy","o":"#$13"},{"a":25863,"t":"code","b":[32,241,69],"m":"jsr","o":"start_tune","oa":17905},{"a":25866,"l":"b_650A","t":"code","b":[32,29,104],"m":"jsr","o":"wait_raster_middle","oa":26653,"x":[25844]},{"a":25869,"t":"code","b":[173,22,178],"m":"lda","o":"warp_direction","oa":45590},{"a":25872,"t":"code","b":[208,189],"m":"bne","o":"dematerialise_loop","oa":25807},{"a":25874,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":25876,"t":"code","b":[141,206,69],"m":"sta","o":"music_fade","oa":17870},{"a":25879,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":25881,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":25884,"t":"code","b":[141,92,178],"m":"sta","o":"background_flash","oa":45660},{"a":25887,"t":"code","b":[32,136,103],"m":"jsr","o":"clear_landscape_colours","oa":26504},{"a":25890,"t":"code","b":[32,224,117],"m":"jsr","o":"start_landscape","oa":30176},{"a":25893,"t":"code","b":[32,203,156],"m":"jsr","o":"clear_alien_bullets","oa":40139},{"a":25896,"t":"code","b":[169,12],"m":"lda","o":"#$0C"},{"a":25898,"t":"code","b":[32,138,103],"m":"jsr","o":"fill_landscape_colours","oa":26506},{"a":25901,"t":"code","b":[169,6],"m":"lda","o":"#$06"},{"a":25903,"t":"code","b":[141,34,208],"m":"sta","o":"vic_background1"},{"a":25906,"t":"code","b":[169,14],"m":"lda","o":"#$0E"},{"a":25908,"t":"code","b":[141,35,208],"m":"sta","o":"vic_background2"},{"a":25911,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":25913,"t":"code","b":[141,22,178],"m":"sta","o":"warp_direction","oa":45590},{"a":25916,"t":"code","b":[169,23],"m":"lda","o":"#$17"},{"a":25918,"t":"code","b":[141,20,178],"m":"sta","o":"warp_frame","oa":45588},{"a":25921,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":25923,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":25926,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":25928,"t":"code","b":[141,51,103],"m":"sta","o":"bonus_message_state","oa":26419},{"a":25931,"t":"code","b":[32,67,103],"m":"jsr","o":"copy_font_to_landscape_glyphs","oa":26435},{"a":25934,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":25936,"t":"code","b":[141,206,69],"m":"sta","o":"music_fade","oa":17870},{"a":25939,"t":"code","b":[32,208,71],"m":"jsr","o":"reset_music","oa":18384},{"a":25942,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":25944,"t":"code","b":[141,241,184],"m":"sta","o":"music_voices","oa":47345},{"a":25947,"t":"code","b":[162,1],"m":"ldx","o":"#$01"},{"a":25949,"t":"code","b":[160,12],"m":"ldy","o":"#$0C"},{"a":25951,"t":"code","b":[77,12,187],"m":"eor","o":"bonus_music_toggle","oa":47884},{"a":25954,"t":"code","b":[141,12,187],"m":"sta","o":"bonus_music_toggle","oa":47884},{"a":25957,"t":"code","b":[208,9],"m":"bne","o":"b_6570","oa":25968},{"a":25959,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":25961,"t":"code","b":[141,241,184],"m":"sta","o":"music_voices","oa":47345},{"a":25964,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":25966,"t":"code","b":[160,33],"m":"ldy","o":"#$21"},{"a":25968,"l":"b_6570","t":"code","b":[142,242,184],"m":"stx","o":"music_speed","oa":47346,"x":[25957]},{"a":25971,"t":"code","b":[32,241,69],"m":"jsr","o":"start_tune","oa":17905},{"a":25974,"l":"bonus_stage_loop","c":"The bonus stage, one pass per frame: wait for raster 200-255; sticks to Wiz and cat; cell boxes while $B1CF = 0; erase shots; pause; unless the tally has begun ($6733 bit 1): the Wizball ($7DF4), the cat and its fire; the scroll speed ramp ($6755) into $B1F4 and, when moving, the stars; move shots; particles while $B1CF = 0; icon bar; messages and tally ($6615); wait for raster 70-198; unless tallying, the next step of the wave script ($9CEA); aliens; read the sticks. The landscape does not scroll here. It ends when $B1CF is set: $36 (the script's end, $9D38) shows 'congratulations!' and the tally ($6733 = 3), any other value (the Wizball hit) the tally only ($6733 = 2); $B1CF = $80 then marks it handled, $7DF4 runs each frame through $65D2, and when the message time $6734 runs out sound effect 5 goes back to voice 1 and $AB20 (the Wiz-lab) takes over.","t":"code","b":[32,131,110],"m":"jsr","o":"wait_raster_low","oa":28291,"x":[26063,26101,26114,26122]},{"a":25977,"t":"code","b":[32,125,105],"m":"jsr","o":"route_joysticks","oa":27005},{"a":25980,"t":"code","b":[173,207,177],"m":"lda","o":"life_over","oa":45519},{"a":25983,"t":"code","b":[208,3],"m":"bne","o":"b_6584","oa":25988},{"a":25985,"t":"code","b":[32,214,154],"m":"jsr","o":"erase_bullets_check_hits","oa":39638},{"a":25988,"l":"b_6584","t":"code","b":[32,144,112],"m":"jsr","o":"erase_bullets","oa":28816,"x":[25983]},{"a":25991,"t":"code","b":[32,183,110],"m":"jsr","o":"check_pause","oa":28343},{"a":25994,"t":"code","b":[173,51,103],"m":"lda","o":"bonus_message_state","oa":26419},{"a":25997,"t":"code","b":[41,2],"m":"and","o":"#$02"},{"a":25999,"t":"code","b":[208,9],"m":"bne","o":"b_659A","oa":26010},{"a":26001,"t":"code","b":[32,244,125],"m":"jsr","o":"update_wizball","oa":32244},{"a":26004,"t":"code","b":[32,64,134],"m":"jsr","o":"update_cat","oa":34368},{"a":26007,"t":"code","b":[32,31,136],"m":"jsr","o":"fire_cat_shot","oa":34847},{"a":26010,"l":"b_659A","t":"code","b":[32,85,103],"m":"jsr","o":"ramp_bonus_scroll_speed","oa":26453,"x":[25999]},{"a":26013,"t":"code","b":[173,246,177],"m":"lda","o":"bonus_speed","oa":45558},{"a":26016,"t":"code","b":[141,244,177],"m":"sta","o":"wizball_speed","oa":45556},{"a":26019,"t":"code","b":[240,3],"m":"beq","o":"b_65A8","oa":26024},{"a":26021,"t":"code","b":[32,126,116],"m":"jsr","o":"move_stars","oa":29822},{"a":26024,"l":"b_65A8","t":"code","b":[32,13,111],"m":"jsr","o":"update_shots","oa":28429,"x":[26019]},{"a":26027,"t":"code","b":[173,207,177],"m":"lda","o":"life_over","oa":45519},{"a":26030,"t":"code","b":[208,3],"m":"bne","o":"b_65B3","oa":26035},{"a":26032,"t":"code","b":[32,189,153],"m":"jsr","o":"update_alien_bullets","oa":39357},{"a":26035,"l":"b_65B3","t":"code","b":[32,170,114],"m":"jsr","o":"update_icons","oa":29354,"x":[26030]},{"a":26038,"t":"code","b":[32,21,102],"m":"jsr","o":"show_bonus_message","oa":26133},{"a":26041,"t":"code","b":[32,29,104],"m":"jsr","o":"wait_raster_middle","oa":26653},{"a":26044,"t":"code","b":[173,51,103],"m":"lda","o":"bonus_message_state","oa":26419},{"a":26047,"t":"code","b":[41,2],"m":"and","o":"#$02"},{"a":26049,"t":"code","b":[208,3],"m":"bne","o":"b_65C6","oa":26054},{"a":26051,"t":"code","b":[32,234,156],"m":"jsr","o":"run_bonus_wave_script","oa":40170},{"a":26054,"l":"b_65C6","t":"code","b":[32,4,162],"m":"jsr","o":"update_aliens","oa":41476,"x":[26049]},{"a":26057,"t":"code","b":[32,41,116],"m":"jsr","o":"scan_keys_play","oa":29737},{"a":26060,"t":"code","b":[173,207,177],"m":"lda","o":"life_over","oa":45519},{"a":26063,"t":"code","b":[240,165],"m":"beq","o":"bonus_stage_loop","oa":25974},{"a":26065,"t":"code","b":[72],"m":"pha"},{"a":26066,"t":"code","b":[32,244,125],"m":"jsr","o":"update_wizball","oa":32244},{"a":26069,"t":"code","b":[104],"m":"pla"},{"a":26070,"t":"code","b":[201,128],"m":"cmp","o":"#$80"},{"a":26072,"t":"code","b":[16,43],"m":"bpl","o":"bonus_wait_message","oa":26117},{"a":26074,"t":"code","b":[201,54],"m":"cmp","o":"#$36"},{"a":26076,"t":"code","b":[240,26],"m":"beq","o":"bonus_script_done","oa":26104},{"a":26078,"t":"code","b":[173,51,103],"m":"lda","o":"bonus_message_state","oa":26419},{"a":26081,"t":"code","b":[240,8],"m":"beq","o":"b_65EB","oa":26091},{"a":26083,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":26085,"t":"code","b":[141,52,103],"m":"sta","o":"bonus_message_timer","oa":26420},{"a":26088,"t":"code","b":[32,21,102],"m":"jsr","o":"show_bonus_message","oa":26133},{"a":26091,"l":"b_65EB","t":"code","b":[169,2],"m":"lda","o":"#$02","x":[26081]},{"a":26093,"t":"code","b":[141,51,103],"m":"sta","o":"bonus_message_state","oa":26419},{"a":26096,"t":"code","b":[169,128],"m":"lda","o":"#$80"},{"a":26098,"t":"code","b":[141,207,177],"m":"sta","o":"life_over","oa":45519},{"a":26101,"t":"code","b":[76,118,101],"m":"jmp","o":"bonus_stage_loop","oa":25974},{"a":26104,"l":"bonus_script_done","t":"code","b":[169,3],"m":"lda","o":"#$03","x":[26076]},{"a":26106,"t":"code","b":[141,51,103],"m":"sta","o":"bonus_message_state","oa":26419},{"a":26109,"t":"code","b":[169,128],"m":"lda","o":"#$80"},{"a":26111,"t":"code","b":[141,207,177],"m":"sta","o":"life_over","oa":45519},{"a":26114,"t":"code","b":[76,118,101],"m":"jmp","o":"bonus_stage_loop","oa":25974},{"a":26117,"l":"bonus_wait_message","t":"code","b":[173,52,103],"m":"lda","o":"bonus_message_timer","oa":26420,"x":[26072]},{"a":26120,"t":"code","b":[240,3],"m":"beq","o":"b_660D","oa":26125},{"a":26122,"t":"code","b":[76,118,101],"m":"jmp","o":"bonus_stage_loop","oa":25974},{"a":26125,"l":"b_660D","t":"code","b":[169,1],"m":"lda","o":"#$01","x":[26120]},{"a":26127,"t":"code","b":[141,215,60],"m":"sta","o":"sfx_05_alien_destroyed","oa":15575},{"a":26130,"t":"code","b":[76,32,171],"m":"jmp","o":"run_wiz_lab","oa":43808},{"a":26133,"l":"show_bonus_message","c":"Runs the messages of the colour-completed and bonus phases, once a frame from $65B6 (and from $65E8 to cut message 1 short). State $6733: 0 nothing; on the first call of state 1 page 1 ('colour completed / laboratory imminent'), of state 2 page 3 (tally), of state 3 page 2 ('congratulations!' and tally); for 2 and 3 it also shows sprite 1 (shape $60, x $6D, y $8C, colour 5) and resets the count ($66E9). Bit 7 marks it started. Each call: one tally step in states 2 and 3 ($6693), draws the page in cycling colours ($66FC), counts $6734 down, and at 0 clears the state and redraws the page in colour 0 with character offset 0 to take it away.","t":"code","b":[173,51,103],"m":"lda","o":"bonus_message_state","oa":26419,"x":[26038,26088]},{"a":26136,"t":"code","b":[208,1],"m":"bne","o":"b_661B","oa":26139},{"a":26138,"t":"code","b":[96],"m":"rts"},{"a":26139,"l":"b_661B","t":"code","b":[41,128],"m":"and","o":"#$80","x":[26136]},{"a":26141,"t":"code","b":[208,74],"m":"bne","o":"b_6669","oa":26217},{"a":26143,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":26145,"t":"code","b":[142,52,103],"m":"stx","o":"bonus_message_timer","oa":26420},{"a":26148,"t":"code","b":[142,56,103],"m":"stx","o":"bonus_message_colour","oa":26424},{"a":26151,"t":"code","b":[142,55,103],"m":"stx","o":"bonus_message_frame","oa":26423},{"a":26154,"t":"code","b":[173,51,103],"m":"lda","o":"bonus_message_state","oa":26419},{"a":26157,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":26159,"t":"code","b":[208,7],"m":"bne","o":"b_6638","oa":26168},{"a":26161,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":26163,"t":"code","b":[141,53,103],"m":"sta","o":"bonus_message_page","oa":26421},{"a":26166,"t":"code","b":[208,49],"m":"bne","o":"b_6669","oa":26217},{"a":26168,"l":"b_6638","t":"code","b":[201,2],"m":"cmp","o":"#$02","x":[26159]},{"a":26170,"t":"code","b":[208,7],"m":"bne","o":"b_6643","oa":26179},{"a":26172,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":26174,"t":"code","b":[141,53,103],"m":"sta","o":"bonus_message_page","oa":26421},{"a":26177,"t":"code","b":[208,5],"m":"bne","o":"b_6648","oa":26184},{"a":26179,"l":"b_6643","t":"code","b":[169,2],"m":"lda","o":"#$02","x":[26170]},{"a":26181,"t":"code","b":[141,53,103],"m":"sta","o":"bonus_message_page","oa":26421},{"a":26184,"l":"b_6648","t":"code","b":[169,2],"m":"lda","o":"#$02","x":[26177]},{"a":26186,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":26189,"t":"code","b":[169,96],"m":"lda","o":"#$60"},{"a":26191,"t":"code","b":[141,38,181],"m":"sta","o":"cat_image","oa":46374},{"a":26194,"t":"code","b":[169,109],"m":"lda","o":"#$6D"},{"a":26196,"t":"code","b":[141,198,231],"m":"sta","o":"vic_shadow_spr1_x","oa":59334},{"a":26199,"t":"code","b":[169,140],"m":"lda","o":"#$8C"},{"a":26201,"t":"code","b":[141,199,231],"m":"sta","o":"vic_shadow_spr1_y","oa":59335},{"a":26204,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":26206,"t":"code","b":[141,212,231],"m":"sta","o":"vic_shadow_x_msb","oa":59348},{"a":26209,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":26211,"t":"code","b":[141,236,231],"m":"sta","o":"vic_shadow_spr1_colour","oa":59372},{"a":26214,"t":"code","b":[32,233,102],"m":"jsr","o":"reset_bonus_tally","oa":26345},{"a":26217,"l":"b_6669","t":"code","b":[173,51,103],"m":"lda","o":"bonus_message_state","oa":26419,"x":[26141,26166]},{"a":26220,"t":"code","b":[9,128],"m":"ora","o":"#$80"},{"a":26222,"t":"code","b":[141,51,103],"m":"sta","o":"bonus_message_state","oa":26419},{"a":26225,"t":"code","b":[41,2],"m":"and","o":"#$02"},{"a":26227,"t":"code","b":[240,3],"m":"beq","o":"b_6678","oa":26232},{"a":26229,"t":"code","b":[32,147,102],"m":"jsr","o":"tally_bonus_alien","oa":26259},{"a":26232,"l":"b_6678","t":"code","b":[32,252,102],"m":"jsr","o":"draw_bonus_message","oa":26364,"x":[26227]},{"a":26235,"t":"code","b":[206,52,103],"m":"dec","o":"bonus_message_timer","oa":26420},{"a":26238,"t":"code","b":[208,18],"m":"bne","o":"r_6692","oa":26258},{"a":26240,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":26242,"t":"code","b":[141,51,103],"m":"sta","o":"bonus_message_state","oa":26419},{"a":26245,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":26247,"t":"code","b":[141,50,103],"m":"sta","o":"play_text_char_offset","oa":26418},{"a":26250,"t":"code","b":[32,252,102],"m":"jsr","o":"draw_bonus_message","oa":26364},{"a":26253,"t":"code","b":[169,160],"m":"lda","o":"#$A0"},{"a":26255,"t":"code","b":[141,50,103],"m":"sta","o":"play_text_char_offset","oa":26418},{"a":26258,"l":"r_6692","t":"code","b":[96],"m":"rts","x":[26238,26265]},{"a":26259,"l":"tally_bonus_alien","c":"One step of the bonus tally: until the tallied count $A859 equals $A858 (aliens shot since $64A8 cleared it, stopping at 255), keeps the message on ($6734 = $FF) and, every second call ($A85A), adds 40 points (A = 4 to $710B) and increments $A859 and the three digits $B841-$B843 of 'x 40 x 000' (a space digit becomes 1, 9 carries). With the count equal it returns and the timer runs out.","t":"code","b":[173,88,168],"m":"lda","o":"bonus_kills","oa":43096,"x":[26229]},{"a":26262,"t":"code","b":[205,89,168],"m":"cmp","o":"bonus_kills_tallied","oa":43097},{"a":26265,"t":"code","b":[240,247],"m":"beq","o":"r_6692","oa":26258},{"a":26267,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":26269,"t":"code","b":[141,52,103],"m":"sta","o":"bonus_message_timer","oa":26420},{"a":26272,"t":"code","b":[238,90,168],"m":"inc","o":"bonus_tally_clock","oa":43098},{"a":26275,"t":"code","b":[173,90,168],"m":"lda","o":"bonus_tally_clock","oa":43098},{"a":26278,"t":"code","b":[41,1],"m":"and","o":"#$01"},{"a":26280,"t":"code","b":[208,62],"m":"bne","o":"r_66E8","oa":26344},{"a":26282,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":26284,"t":"code","b":[32,11,113],"m":"jsr","o":"add_score","oa":28939},{"a":26287,"t":"code","b":[238,89,168],"m":"inc","o":"bonus_kills_tallied","oa":43097},{"a":26290,"t":"code","b":[238,67,184],"m":"inc","o":"tally_units","oa":47171},{"a":26293,"t":"code","b":[173,67,184],"m":"lda","o":"tally_units","oa":47171},{"a":26296,"t":"code","b":[201,58],"m":"cmp","o":"#$3A"},{"a":26298,"t":"code","b":[208,44],"m":"bne","o":"r_66E8","oa":26344},{"a":26300,"t":"code","b":[169,48],"m":"lda","o":"#$30"},{"a":26302,"t":"code","b":[141,67,184],"m":"sta","o":"tally_units","oa":47171},{"a":26305,"t":"code","b":[238,66,184],"m":"inc","o":"tally_tens","oa":47170},{"a":26308,"t":"code","b":[173,66,184],"m":"lda","o":"tally_tens","oa":47170},{"a":26311,"t":"code","b":[201,33],"m":"cmp","o":"#$21"},{"a":26313,"t":"code","b":[208,5],"m":"bne","o":"b_66D0","oa":26320},{"a":26315,"t":"code","b":[169,49],"m":"lda","o":"#$31"},{"a":26317,"t":"code","b":[141,66,184],"m":"sta","o":"tally_tens","oa":47170},{"a":26320,"l":"b_66D0","t":"code","b":[201,58],"m":"cmp","o":"#$3A","x":[26313]},{"a":26322,"t":"code","b":[208,20],"m":"bne","o":"r_66E8","oa":26344},{"a":26324,"t":"code","b":[169,48],"m":"lda","o":"#$30"},{"a":26326,"t":"code","b":[141,66,184],"m":"sta","o":"tally_tens","oa":47170},{"a":26329,"t":"code","b":[238,65,184],"m":"inc","o":"tally_hundreds","oa":47169},{"a":26332,"t":"code","b":[173,65,184],"m":"lda","o":"tally_hundreds","oa":47169},{"a":26335,"t":"code","b":[201,33],"m":"cmp","o":"#$21"},{"a":26337,"t":"code","b":[208,5],"m":"bne","o":"r_66E8","oa":26344},{"a":26339,"t":"code","b":[169,49],"m":"lda","o":"#$31"},{"a":26341,"t":"code","b":[141,65,184],"m":"sta","o":"tally_hundreds","oa":47169},{"a":26344,"l":"r_66E8","t":"code","b":[96],"m":"rts","x":[26280,26298,26322,26337]},{"a":26345,"l":"reset_bonus_tally","c":"Resets the bonus tally: $A859 = 0 and the digits $B841-$B843 of 'x 40 x 000' to space, space, 0.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[26214]},{"a":26347,"t":"code","b":[141,89,168],"m":"sta","o":"bonus_kills_tallied","oa":43097},{"a":26350,"t":"code","b":[169,32],"m":"lda","o":"#$20"},{"a":26352,"t":"code","b":[141,65,184],"m":"sta","o":"tally_hundreds","oa":47169},{"a":26355,"t":"code","b":[141,66,184],"m":"sta","o":"tally_tens","oa":47170},{"a":26358,"t":"code","b":[169,48],"m":"lda","o":"#$30"},{"a":26360,"t":"code","b":[141,67,184],"m":"sta","o":"tally_units","oa":47171},{"a":26363,"t":"code","b":[96],"m":"rts"},{"a":26364,"l":"draw_bonus_message","c":"Draws message page $6735 (pointer from the table at $6739) with the printer $8CFA. While the timer $6734 runs, the colour steps every second frame ($6737) through the 12 colours at $B61C ($6738); with the timer at 0 it draws in colour 0. $B874 is non-zero in these phases, so the printer writes to the landscape screen with $6732 added.","t":"code","b":[173,52,103],"m":"lda","o":"bonus_message_timer","oa":26420,"x":[26232,26250]},{"a":26367,"t":"code","b":[240,32],"m":"beq","o":"b_6721","oa":26401},{"a":26369,"t":"code","b":[238,55,103],"m":"inc","o":"bonus_message_frame","oa":26423},{"a":26372,"t":"code","b":[173,55,103],"m":"lda","o":"bonus_message_frame","oa":26423},{"a":26375,"t":"code","b":[41,1],"m":"and","o":"#$01"},{"a":26377,"t":"code","b":[208,15],"m":"bne","o":"b_671A","oa":26394},{"a":26379,"t":"code","b":[238,56,103],"m":"inc","o":"bonus_message_colour","oa":26424},{"a":26382,"t":"code","b":[173,56,103],"m":"lda","o":"bonus_message_colour","oa":26424},{"a":26385,"t":"code","b":[201,12],"m":"cmp","o":"#$0C"},{"a":26387,"t":"code","b":[208,5],"m":"bne","o":"b_671A","oa":26394},{"a":26389,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":26391,"t":"code","b":[141,56,103],"m":"sta","o":"bonus_message_colour","oa":26424},{"a":26394,"l":"b_671A","t":"code","b":[173,56,103],"m":"lda","o":"bonus_message_colour","oa":26424,"x":[26377,26387]},{"a":26397,"t":"code","b":[168],"m":"tay"},{"a":26398,"t":"code","b":[185,28,182],"m":"lda","o":"tbl_rainbow,y","oa":46620},{"a":26401,"l":"b_6721","t":"code","b":[72],"m":"pha","x":[26367]},{"a":26402,"t":"code","b":[173,53,103],"m":"lda","o":"bonus_message_page","oa":26421},{"a":26405,"t":"code","b":[10],"m":"asl","o":"a"},{"a":26406,"t":"code","b":[168],"m":"tay"},{"a":26407,"t":"code","b":[190,57,103],"m":"ldx","o":"tbl_bonus_message_pages,y","oa":26425},{"a":26410,"t":"code","b":[185,58,103],"m":"lda","o":"f_673A,y","oa":26426},{"a":26413,"t":"code","b":[168],"m":"tay"},{"a":26414,"t":"code","b":[104],"m":"pla"},{"a":26415,"t":"code","b":[76,250,140],"m":"jmp","o":"print_page","oa":36090},{"a":26418,"l":"play_text_char_offset","c":"Character offset the printer adds to each screen code when $B874 is non-zero ($8D16 puts it into the ADC operand at $8D8E): $A0, so letters come from glyphs $A0-$DF of the landscape character set, where $6743 copies the font. $6687 sets it to 0 for the pass that takes a message away and $668F puts $A0 back.","t":"byte","b":[160],"x":[26247,26255,36118]},{"a":26419,"l":"bonus_message_state","c":"Message state of the colour-completed and bonus phases ($6615): 0 none, 1 'colour completed', 2 tally, 3 'congratulations!' and tally; bit 7 set once started. Bit 1 also stops the Wizball, cat and wave script in the bonus loop (tests at $658A and $65BC). Written at $6548, $65ED, $65FA, $666E, $6682.","t":"byte","b":[0],"x":[25928,25994,26044,26078,26093,26106,26133,26154,26217,26222,26242,42406]},{"a":26420,"l":"bonus_message_timer","c":"Frames left for the current message ($6615 decrements it, $6693 holds it at $FF while the tally runs, $65E5 sets 1 to end message 1 early). The bonus loop waits for 0 before leaving for the Wiz-lab ($6605).","t":"byte","b":[0],"x":[26085,26117,26145,26235,26269,26364]},{"a":26421,"l":"bonus_message_page","c":"Page number for $66FC: 1 colour completed, 2 congratulations and tally, 3 tally only; index into the word table at $6739. The byte after it, $6736, is not referenced.","t":"byte","b":[0,0],"x":[26163,26174,26181,26402]},{"a":26423,"l":"bonus_message_frame","c":"Frame counter of the message colour cycle: $66FC advances the colour when it is even. Cleared at $6627; also read and written at $B12F-$B132.","t":"byte","b":[0],"x":[26151,26369,26372,45359,45362]},{"a":26424,"l":"bonus_message_colour","c":"Index 0-11 into the colour list at $B61C for the message colour ($66FC), cleared at $6624; also stepped by $B139.","t":"byte","b":[0],"x":[26148,26379,26382,26391,26394,45369,45372,45381,45384]},{"a":26425,"l":"tbl_bonus_message_pages","c":"Word table of the message pages for $66FC, indexed by $6735 x 2: entry 0 $0000 (unused), 1 $B7E8 'colour completed / laboratory imminent', 2 $B813 'congratulations! / tishshshshsh / x 40 x 000', 3 $B826 'tishshshshsh / x 40 x 000', 4 $B7E8 again (never selected).","t":"word","b":[0],"d":[],"x":[26407]},{"a":26426,"l":"f_673A","c":"High byte of entry 0 of the message page table at $6739 ($672A reads the table as $673A,Y); the table runs to $6742.","t":"word","b":[0,232,183,19,184,38,184,232],"d":[59392,5047,9912,59576],"x":[26410]},{"a":26434,"t":"word","b":[183],"d":[]},{"a":26435,"l":"copy_font_to_landscape_glyphs","c":"Copies glyphs 0-63 of the font at $F000 ($F000-$F1FF) over $FD00-$FEFF, which the landscape band's character set at $F800 (its $D018 value comes from $8A25) shows as glyphs $A0-$DF. Called at $654B before the bonus stage, so that text printed with the offset $6732 shows letters there. The level's own glyphs at $FD00 are copied back by $77C6 when a level is set up again.","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[25931]},{"a":26437,"l":"b_6745","t":"code","b":[185,0,240],"m":"lda","o":"font_small_glyphs_00_1f,y","oa":61440,"x":[26450]},{"a":26440,"t":"code","b":[153,0,253],"m":"sta","o":"glyphs_level_a0,y","oa":64768},{"a":26443,"t":"code","b":[185,0,241],"m":"lda","o":"font_small_glyphs_20_33,y","oa":61696},{"a":26446,"t":"code","b":[153,0,254],"m":"sta","o":"glyphs_level_c0,y","oa":65024},{"a":26449,"t":"code","b":[136],"m":"dey"},{"a":26450,"t":"code","b":[208,241],"m":"bne","o":"b_6745","oa":26437},{"a":26452,"t":"code","b":[96],"m":"rts"},{"a":26453,"l":"ramp_bonus_scroll_speed","c":"Bonus stage scroll speed ramp, once a frame: with $B1F8 set (by the wave script at $9D31) it adds $10 to the fraction $B1F7 and carries into $B1F6 until $B1F6 reaches 6; with $B1F8 clear it runs $B1F6.$B1F7 down to 0. The loop copies $B1F6 into the scroll speed $B1F4.","t":"code","b":[173,248,177],"m":"lda","o":"bonus_flying","oa":45560,"x":[26010]},{"a":26456,"t":"code","b":[240,22],"m":"beq","o":"b_6770","oa":26480},{"a":26458,"t":"code","b":[173,246,177],"m":"lda","o":"bonus_speed","oa":45558},{"a":26461,"t":"code","b":[201,6],"m":"cmp","o":"#$06"},{"a":26463,"t":"code","b":[240,14],"m":"beq","o":"r_676F","oa":26479},{"a":26465,"t":"code","b":[173,247,177],"m":"lda","o":"bonus_speed_fraction","oa":45559},{"a":26468,"t":"code","b":[24],"m":"clc"},{"a":26469,"t":"code","b":[105,16],"m":"adc","o":"#$10"},{"a":26471,"t":"code","b":[141,247,177],"m":"sta","o":"bonus_speed_fraction","oa":45559},{"a":26474,"t":"code","b":[144,3],"m":"bcc","o":"r_676F","oa":26479},{"a":26476,"t":"code","b":[238,246,177],"m":"inc","o":"bonus_speed","oa":45558},{"a":26479,"l":"r_676F","t":"code","b":[96],"m":"rts","x":[26463,26474,26494]},{"a":26480,"l":"b_6770","t":"code","b":[173,246,177],"m":"lda","o":"bonus_speed","oa":45558,"x":[26456]},{"a":26483,"t":"code","b":[240,15],"m":"beq","o":"b_6784","oa":26500},{"a":26485,"t":"code","b":[173,247,177],"m":"lda","o":"bonus_speed_fraction","oa":45559},{"a":26488,"t":"code","b":[56],"m":"sec"},{"a":26489,"t":"code","b":[233,16],"m":"sbc","o":"#$10"},{"a":26491,"t":"code","b":[141,247,177],"m":"sta","o":"bonus_speed_fraction","oa":45559},{"a":26494,"t":"code","b":[176,239],"m":"bcs","o":"r_676F","oa":26479},{"a":26496,"t":"code","b":[206,246,177],"m":"dec","o":"bonus_speed","oa":45558},{"a":26499,"t":"code","b":[96],"m":"rts"},{"a":26500,"l":"b_6784","t":"code","b":[141,247,177],"m":"sta","o":"bonus_speed_fraction","oa":45559,"x":[26483]},{"a":26503,"t":"code","b":[96],"m":"rts"},{"a":26504,"l":"clear_landscape_colours","c":"Waits for raster line 266 ($6E92) and fills colour RAM rows 3-22 ($D878-$DB97) with 0; entry $678A takes the colour in A instead.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[25887]},{"a":26506,"l":"fill_landscape_colours","c":"Entry of $6788 with the colour in A (from $652A with $0C): waits for raster line 266 ($6E92, which also moves the stars) and fills $D878-$DB97, colour RAM rows 3-22, 256 bytes at each of $D878, $D978, $DA78 and $DA98.","t":"code","b":[72],"m":"pha","x":[25898]},{"a":26507,"t":"code","b":[32,146,110],"m":"jsr","o":"wait_line_266_and_move_stars","oa":28306},{"a":26510,"t":"code","b":[104],"m":"pla"},{"a":26511,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":26513,"l":"b_6791","t":"code","b":[157,120,216],"m":"sta","o":"$D878,x","x":[26526]},{"a":26516,"t":"code","b":[157,120,217],"m":"sta","o":"$D978,x"},{"a":26519,"t":"code","b":[157,120,218],"m":"sta","o":"$DA78,x"},{"a":26522,"t":"code","b":[157,152,218],"m":"sta","o":"$DA98,x"},{"a":26525,"t":"code","b":[202],"m":"dex"},{"a":26526,"t":"code","b":[208,241],"m":"bne","o":"b_6791","oa":26513},{"a":26528,"t":"code","b":[96],"m":"rts"},{"a":26529,"l":"cycle_hud_colours","c":"Flashes the current side's part of the HUD, from the play display list's band at $89FF (in the raster interrupt). $B88F counts frames, $B890 steps every fourth; the colours come from $B5CB, $B5D7 and $B5DF indexed by $B890 AND 7. Writes colour RAM rows 0-1: six cells from column $71DC/$71DD ('1UP' and score, column 0 or 34), the HI score's columns 17-22 as well when $720A says this side has passed it (not in the Wiz-lab, $AC4E = 0), two cells of row 1 at $71DE/$71DF (columns 9-10 or 29-30; colour 0 while $8309, the copy of $B874, is set) and the lives digit at $71E0/$71E1 (column 7 or 32). In the lab it also fills columns 12-27 of rows 0-1 with the cycling colour $EBD7.","t":"code","b":[238,143,184],"m":"inc","o":"hud_flash_timer","oa":47247,"x":[35327]},{"a":26532,"t":"code","b":[173,143,184],"m":"lda","o":"hud_flash_timer","oa":47247},{"a":26535,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":26537,"t":"code","b":[208,3],"m":"bne","o":"b_67AE","oa":26542},{"a":26539,"t":"code","b":[238,144,184],"m":"inc","o":"hud_flash_step","oa":47248},{"a":26542,"l":"b_67AE","t":"code","b":[173,144,184],"m":"lda","o":"hud_flash_step","oa":47248,"x":[26537]},{"a":26545,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":26547,"t":"code","b":[168],"m":"tay"},{"a":26548,"t":"code","b":[185,215,181],"m":"lda","o":"tbl_pulse_green,y","oa":46551},{"a":26551,"t":"code","b":[72],"m":"pha"},{"a":26552,"t":"code","b":[185,223,181],"m":"lda","o":"tbl_pulse_blue,y","oa":46559},{"a":26555,"t":"code","b":[72],"m":"pha"},{"a":26556,"t":"code","b":[200],"m":"iny"},{"a":26557,"t":"code","b":[185,203,181],"m":"lda","o":"tbl_pulse_red,y","oa":46539},{"a":26560,"t":"code","b":[172,217,191],"m":"ldy","o":"side_playing","oa":49113},{"a":26563,"t":"code","b":[190,219,113],"m":"ldx","o":"tbl_player_score_column,y","oa":29147},{"a":26566,"t":"code","b":[160,6],"m":"ldy","o":"#$06"},{"a":26568,"l":"b_67C8","t":"code","b":[157,0,216],"m":"sta","o":"colour_ram,x","x":[26576]},{"a":26571,"t":"code","b":[157,40,216],"m":"sta","o":"$D828,x"},{"a":26574,"t":"code","b":[232],"m":"inx"},{"a":26575,"t":"code","b":[136],"m":"dey"},{"a":26576,"t":"code","b":[208,246],"m":"bne","o":"b_67C8","oa":26568},{"a":26578,"t":"code","b":[172,78,172],"m":"ldy","o":"in_lab","oa":44110},{"a":26581,"t":"code","b":[208,16],"m":"bne","o":"b_67E7","oa":26599},{"a":26583,"t":"code","b":[172,10,114],"m":"ldy","o":"hiscore_beaten","oa":29194},{"a":26586,"t":"code","b":[240,11],"m":"beq","o":"b_67E7","oa":26599},{"a":26588,"t":"code","b":[162,6],"m":"ldx","o":"#$06"},{"a":26590,"l":"b_67DE","t":"code","b":[157,16,216],"m":"sta","o":"$D810,x","x":[26597]},{"a":26593,"t":"code","b":[157,56,216],"m":"sta","o":"$D838,x"},{"a":26596,"t":"code","b":[202],"m":"dex"},{"a":26597,"t":"code","b":[208,247],"m":"bne","o":"b_67DE","oa":26590},{"a":26599,"l":"b_67E7","t":"code","b":[172,217,191],"m":"ldy","o":"side_playing","oa":49113,"x":[26581,26586]},{"a":26602,"t":"code","b":[190,221,113],"m":"ldx","o":"tbl_player_counter_column,y","oa":29149},{"a":26605,"t":"code","b":[104],"m":"pla"},{"a":26606,"t":"code","b":[172,9,131],"m":"ldy","o":"leaving_flag_copy","oa":33545},{"a":26609,"t":"code","b":[240,2],"m":"beq","o":"b_67F5","oa":26613},{"a":26611,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":26613,"l":"b_67F5","t":"code","b":[157,40,216],"m":"sta","o":"$D828,x","x":[26609]},{"a":26616,"t":"code","b":[157,41,216],"m":"sta","o":"$D829,x"},{"a":26619,"t":"code","b":[172,217,191],"m":"ldy","o":"side_playing","oa":49113},{"a":26622,"t":"code","b":[190,223,113],"m":"ldx","o":"tbl_player_lives_column,y","oa":29151},{"a":26625,"t":"code","b":[104],"m":"pla"},{"a":26626,"t":"code","b":[157,40,216],"m":"sta","o":"$D828,x"},{"a":26629,"t":"code","b":[172,78,172],"m":"ldy","o":"in_lab","oa":44110},{"a":26632,"t":"code","b":[208,1],"m":"bne","o":"b_680B","oa":26635},{"a":26634,"t":"code","b":[96],"m":"rts"},{"a":26635,"l":"b_680B","t":"code","b":[32,190,152],"m":"jsr","o":"cycle_blue_ramp","oa":39102,"x":[26632]},{"a":26638,"t":"code","b":[160,16],"m":"ldy","o":"#$10"},{"a":26640,"l":"b_6810","t":"code","b":[173,215,235],"m":"lda","o":"colours_d7","oa":60375,"x":[26650]},{"a":26643,"t":"code","b":[153,11,216],"m":"sta","o":"$D80B,y"},{"a":26646,"t":"code","b":[153,51,216],"m":"sta","o":"$D833,y"},{"a":26649,"t":"code","b":[136],"m":"dey"},{"a":26650,"t":"code","b":[208,244],"m":"bne","o":"b_6810","oa":26640},{"a":26652,"t":"code","b":[96],"m":"rts"},{"a":26653,"l":"wait_raster_middle","c":"Waits until the raster is between lines 70 and 198 ($46-$C6 with bit 8 clear). The frame loop's second synchronisation point ($6453; also $650A, $65B9): with $6E83 at the top, it keeps the loop to one pass per frame.","t":"code","b":[173,17,208],"m":"lda","o":"vic_control1","x":[25683,25866,26041,26658,26665,26669]},{"a":26656,"t":"code","b":[41,128],"m":"and","o":"#$80"},{"a":26658,"t":"code","b":[208,249],"m":"bne","o":"wait_raster_middle","oa":26653},{"a":26660,"t":"code","b":[173,18,208],"m":"lda","o":"vic_raster"},{"a":26663,"t":"code","b":[201,70],"m":"cmp","o":"#$46"},{"a":26665,"t":"code","b":[144,242],"m":"bcc","o":"wait_raster_middle","oa":26653},{"a":26667,"t":"code","b":[201,199],"m":"cmp","o":"#$C7"},{"a":26669,"t":"code","b":[176,238],"m":"bcs","o":"wait_raster_middle","oa":26653},{"a":26671,"t":"code","b":[96],"m":"rts"},{"a":26672,"l":"init_sides","c":"Game setup for both sides: clears $B116-$B12E (all but the level $B128); for a continued game ($AF7E = n, chosen on the title with the keys 0-5, see $AF85) marks levels 1..n complete ($B11F.. = 3), gives the first n permanent features from $B10D (1, 1, 2, 3, 5) and starts on level $B128 = n; saves the block as both sides' state ($6E08, $6E14); lives $B278 = $B279 = 3; current side $BFD9 = 1; and copies the player-menu mode $B272's record from $B2AC (4 bytes each) into $BFD6-$BFD8: side 1 kind, side 2 kind (1 player, 2 team) and the number of sides (1 or 2).","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[25496]},{"a":26674,"t":"code","b":[141,41,177],"m":"sta","o":"levels_finished","oa":45353},{"a":26677,"t":"code","b":[141,42,177],"m":"sta","o":"rounds_finished","oa":45354},{"a":26680,"t":"code","b":[160,9],"m":"ldy","o":"#$09"},{"a":26682,"l":"b_683A","t":"code","b":[153,30,177],"m":"sta","o":"level_progress_base,y","oa":45342,"x":[26689]},{"a":26685,"t":"code","b":[153,21,177],"m":"sta","o":"player_block_base,y","oa":45333},{"a":26688,"t":"code","b":[136],"m":"dey"},{"a":26689,"t":"code","b":[208,247],"m":"bne","o":"b_683A","oa":26682},{"a":26691,"t":"code","b":[141,43,177],"m":"sta","o":"cauldron_red","oa":45355},{"a":26694,"t":"code","b":[141,44,177],"m":"sta","o":"cauldron_green","oa":45356},{"a":26697,"t":"code","b":[141,45,177],"m":"sta","o":"cauldron_blue","oa":45357},{"a":26700,"t":"code","b":[141,46,177],"m":"sta","o":"cauldron_mix","oa":45358},{"a":26703,"t":"code","b":[173,126,175],"m":"lda","o":"start_level","oa":44926},{"a":26706,"t":"code","b":[141,40,177],"m":"sta","o":"current_level","oa":45352},{"a":26709,"t":"code","b":[170],"m":"tax"},{"a":26710,"t":"code","b":[240,19],"m":"beq","o":"b_686B","oa":26731},{"a":26712,"l":"b_6858","t":"code","b":[169,3],"m":"lda","o":"#$03","x":[26724]},{"a":26714,"t":"code","b":[157,30,177],"m":"sta","o":"level_progress_base,x","oa":45342},{"a":26717,"t":"code","b":[189,12,177],"m":"lda","o":"lab_weapon_chosen,x","oa":45324},{"a":26720,"t":"code","b":[157,21,177],"m":"sta","o":"player_block_base,x","oa":45333},{"a":26723,"t":"code","b":[202],"m":"dex"},{"a":26724,"t":"code","b":[208,242],"m":"bne","o":"b_6858","oa":26712},{"a":26726,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":26728,"t":"code","b":[141,22,177],"m":"sta","o":"permanent_weapons","oa":45334},{"a":26731,"l":"b_686B","t":"code","b":[32,8,110],"m":"jsr","o":"save_side1_state","oa":28168,"x":[26710]},{"a":26734,"t":"code","b":[32,20,110],"m":"jsr","o":"save_side2_state","oa":28180},{"a":26737,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":26739,"t":"code","b":[141,120,178],"m":"sta","o":"lives_side1","oa":45688},{"a":26742,"t":"code","b":[141,121,178],"m":"sta","o":"lives_side2","oa":45689},{"a":26745,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":26747,"t":"code","b":[141,217,191],"m":"sta","o":"side_playing","oa":49113},{"a":26750,"t":"code","b":[173,114,178],"m":"lda","o":"game_mode","oa":45682},{"a":26753,"t":"code","b":[10],"m":"asl","o":"a"},{"a":26754,"t":"code","b":[10],"m":"asl","o":"a"},{"a":26755,"t":"code","b":[168],"m":"tay"},{"a":26756,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":26758,"l":"b_6886","t":"code","b":[185,172,178],"m":"lda","o":"tbl_game_mode_sides,y","oa":45740,"x":[26768]},{"a":26761,"t":"code","b":[157,214,191],"m":"sta","o":"side1_team,x","oa":49110},{"a":26764,"t":"code","b":[200],"m":"iny"},{"a":26765,"t":"code","b":[232],"m":"inx"},{"a":26766,"t":"code","b":[224,3],"m":"cpx","o":"#$03"},{"a":26768,"t":"code","b":[208,244],"m":"bne","o":"b_6886","oa":26758},{"a":26770,"t":"code","b":[96],"m":"rts"},{"a":26771,"l":"get_ready_screen","c":"The 'get ready!' screen, before each life: sprites off, background 10, display list $B4B2 (music bands only), screen $EC00 filled with glyph $DE, colour RAM 0; the page chosen from the word table at $B71B by the side and mode bits (current side, number of sides, side 2 kind, side 1 kind from $BFD9-$BFD6) printed in the large font: 'get ready!', 'wizard / press fire', 'player one / press fire', 'team one / wizard / press fire', 'player two ...', 'team two ...'. Eight white sprites (shape $0C) as the rings, tune $28. Loops ($691C) moving the rings ($90BD), cycling the background ($98BE, $EBD7) and the ring colours every 5 frames ($B87D), showing the rings twice a frame ($915F, $9163 at line $87), until fire on either port ($91FA bit 4). The port pressed goes to $B240 (0: port 2, $10: port 1) for $697D. Screen off, music off.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[25510]},{"a":26773,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":26776,"t":"code","b":[169,10],"m":"lda","o":"#$0A"},{"a":26778,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":26781,"t":"code","b":[174,196,180],"m":"ldx","o":"ptr_display_list_music_only","oa":46276},{"a":26784,"t":"code","b":[172,197,180],"m":"ldy","o":"icon_sprite_positions_base","oa":46277},{"a":26787,"t":"code","b":[32,180,124],"m":"jsr","o":"install_display_list","oa":31924},{"a":26790,"t":"code","b":[32,190,140],"m":"jsr","o":"font_large_inverted","oa":36030},{"a":26793,"t":"code","b":[169,236],"m":"lda","o":"#$EC"},{"a":26795,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":26797,"t":"code","b":[169,222],"m":"lda","o":"#$DE"},{"a":26799,"t":"code","b":[32,94,140],"m":"jsr","o":"fill_four_pages","oa":35934},{"a":26802,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":26804,"t":"code","b":[32,111,140],"m":"jsr","o":"fill_colour_ram","oa":35951},{"a":26807,"t":"code","b":[169,188],"m":"lda","o":"#$BC"},{"a":26809,"t":"code","b":[141,24,208],"m":"sta","o":"vic_memory"},{"a":26812,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":26814,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":26816,"t":"code","b":[162,4],"m":"ldx","o":"#$04"},{"a":26818,"l":"b_68C2","t":"code","b":[189,213,191],"m":"lda","o":"side_flags_base,x","oa":49109,"x":[26828]},{"a":26821,"t":"code","b":[56],"m":"sec"},{"a":26822,"t":"code","b":[233,1],"m":"sbc","o":"#$01"},{"a":26824,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":26825,"t":"code","b":[38,97],"m":"rol","o":"zp_ptr_61","oa":97},{"a":26827,"t":"code","b":[202],"m":"dex"},{"a":26828,"t":"code","b":[208,244],"m":"bne","o":"b_68C2","oa":26818},{"a":26830,"t":"code","b":[6,97],"m":"asl","o":"zp_ptr_61","oa":97},{"a":26832,"t":"code","b":[164,97],"m":"ldy","o":"zp_ptr_61","oa":97},{"a":26834,"t":"code","b":[185,27,183],"m":"lda","o":"tbl_get_ready_pages,y","oa":46875},{"a":26837,"t":"code","b":[170],"m":"tax"},{"a":26838,"t":"code","b":[185,28,183],"m":"lda","o":"tbl_get_ready_pages_hi,y","oa":46876},{"a":26841,"t":"code","b":[168],"m":"tay"},{"a":26842,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":26844,"t":"code","b":[32,244,140],"m":"jsr","o":"print_page_large","oa":36084},{"a":26847,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":26849,"t":"code","b":[141,23,208],"m":"sta","o":"vic_sprite_expand_y"},{"a":26852,"t":"code","b":[141,29,208],"m":"sta","o":"vic_sprite_expand_x"},{"a":26855,"t":"code","b":[141,28,208],"m":"sta","o":"vic_sprite_multicolour"},{"a":26858,"t":"code","b":[141,27,208],"m":"sta","o":"vic_sprite_priority"},{"a":26861,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":26863,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":26866,"t":"code","b":[162,8],"m":"ldx","o":"#$08"},{"a":26868,"l":"b_68F4","t":"code","b":[169,1],"m":"lda","o":"#$01","x":[26879]},{"a":26870,"t":"code","b":[157,38,208],"m":"sta","o":"vic_sprite_mc1,x"},{"a":26873,"t":"code","b":[169,12],"m":"lda","o":"#$0C"},{"a":26875,"t":"code","b":[157,247,239],"m":"sta","o":"icon_ptrs_minus_1,x","oa":61431},{"a":26878,"t":"code","b":[202],"m":"dex"},{"a":26879,"t":"code","b":[208,243],"m":"bne","o":"b_68F4","oa":26868},{"a":26881,"t":"code","b":[32,173,186],"m":"jsr","o":"silence_sid","oa":47789},{"a":26884,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":26886,"t":"code","b":[141,206,69],"m":"sta","o":"music_fade","oa":17870},{"a":26889,"t":"code","b":[32,208,71],"m":"jsr","o":"reset_music","oa":18384},{"a":26892,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":26894,"t":"code","b":[141,242,184],"m":"sta","o":"music_speed","oa":47346},{"a":26897,"t":"code","b":[141,241,184],"m":"sta","o":"music_voices","oa":47345},{"a":26900,"t":"code","b":[160,40],"m":"ldy","o":"#$28"},{"a":26902,"t":"code","b":[32,241,69],"m":"jsr","o":"start_tune","oa":17905},{"a":26905,"t":"code","b":[32,80,140],"m":"jsr","o":"screen_on","oa":35920},{"a":26908,"l":"get_ready_loop","t":"code","b":[32,189,144],"m":"jsr","o":"update_starfield","oa":37053,"x":[26979]},{"a":26911,"t":"code","b":[32,190,152],"m":"jsr","o":"cycle_blue_ramp","oa":39102},{"a":26914,"t":"code","b":[173,215,235],"m":"lda","o":"colours_d7","oa":60375},{"a":26917,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":26920,"t":"code","b":[32,168,110],"m":"jsr","o":"wait_raster_top","oa":28328},{"a":26923,"t":"code","b":[32,95,145],"m":"jsr","o":"place_stars_top","oa":37215},{"a":26926,"t":"code","b":[238,141,184],"m":"inc","o":"rings_colour_timer","oa":47245},{"a":26929,"t":"code","b":[173,141,184],"m":"lda","o":"rings_colour_timer","oa":47245},{"a":26932,"t":"code","b":[201,5],"m":"cmp","o":"#$05"},{"a":26934,"t":"code","b":[208,25],"m":"bne","o":"b_6951","oa":26961},{"a":26936,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":26938,"t":"code","b":[141,141,184],"m":"sta","o":"rings_colour_timer","oa":47245},{"a":26941,"t":"code","b":[238,142,184],"m":"inc","o":"rings_colour_step","oa":47246},{"a":26944,"t":"code","b":[173,142,184],"m":"lda","o":"rings_colour_step","oa":47246},{"a":26947,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":26949,"t":"code","b":[168],"m":"tay"},{"a":26950,"t":"code","b":[185,125,184],"m":"lda","o":"tbl_flash_colours,y","oa":47229},{"a":26953,"t":"code","b":[162,8],"m":"ldx","o":"#$08"},{"a":26955,"l":"b_694B","t":"code","b":[157,38,208],"m":"sta","o":"vic_sprite_mc1,x","x":[26959]},{"a":26958,"t":"code","b":[202],"m":"dex"},{"a":26959,"t":"code","b":[208,250],"m":"bne","o":"b_694B","oa":26955},{"a":26961,"l":"b_6951","t":"code","b":[173,18,208],"m":"lda","o":"vic_raster","x":[26934,26966]},{"a":26964,"t":"code","b":[201,135],"m":"cmp","o":"#$87"},{"a":26966,"t":"code","b":[208,249],"m":"bne","o":"b_6951","oa":26961},{"a":26968,"t":"code","b":[32,99,145],"m":"jsr","o":"place_stars_bottom","oa":37219},{"a":26971,"t":"code","b":[32,41,116],"m":"jsr","o":"scan_keys_play","oa":29737},{"a":26974,"t":"code","b":[32,250,145],"m":"jsr","o":"read_joystick_edge","oa":37370},{"a":26977,"t":"code","b":[41,16],"m":"and","o":"#$10"},{"a":26979,"t":"code","b":[208,183],"m":"bne","o":"get_ready_loop","oa":26908},{"a":26981,"t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102},{"a":26983,"t":"code","b":[41,16],"m":"and","o":"#$10"},{"a":26985,"t":"code","b":[141,64,178],"m":"sta","o":"wizard_port","oa":45632},{"a":26988,"t":"code","b":[32,68,140],"m":"jsr","o":"screen_off","oa":35908},{"a":26991,"t":"code","b":[32,208,71],"m":"jsr","o":"reset_music","oa":18384},{"a":26994,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":26996,"t":"code","b":[141,241,184],"m":"sta","o":"music_voices","oa":47345},{"a":26999,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":27001,"t":"code","b":[141,242,184],"m":"sta","o":"music_speed","oa":47346},{"a":27004,"t":"code","b":[96],"m":"rts"},{"a":27005,"l":"route_joysticks","c":"Gives the joysticks to the Wiz ($B23F) and the cat ($B23E), once a frame after $7429 has read port 2 into $B256 and port 1 into $B257. A team side: the Wiz gets the port fire was pressed on at 'get ready!' ($B240), the cat the other. A single player: the Wiz gets that port and the cat only its fire bit ($EF or $FF); but with the catelite ($B234) and fire held for 10 frames ($B242), the cat gets the whole stick and the Wiz no directions and a fire bit that toggles each frame ($B241), the manual's 'hold fire to steer the cat'.","t":"code","b":[172,217,191],"m":"ldy","o":"side_playing","oa":49113,"x":[25677,25977]},{"a":27008,"t":"code","b":[185,213,191],"m":"lda","o":"side_flags_base,y","oa":49109},{"a":27011,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":27013,"t":"code","b":[240,31],"m":"beq","o":"b_69A6","oa":27046},{"a":27015,"t":"code","b":[173,64,178],"m":"lda","o":"wizard_port","oa":45632},{"a":27018,"t":"code","b":[208,13],"m":"bne","o":"b_6999","oa":27033},{"a":27020,"t":"code","b":[173,86,178],"m":"lda","o":"joystick_port2_raw","oa":45654},{"a":27023,"t":"code","b":[141,63,178],"m":"sta","o":"wizball_input","oa":45631},{"a":27026,"t":"code","b":[173,87,178],"m":"lda","o":"joystick_port1_raw","oa":45655},{"a":27029,"t":"code","b":[141,62,178],"m":"sta","o":"cat_input","oa":45630},{"a":27032,"t":"code","b":[96],"m":"rts"},{"a":27033,"l":"b_6999","t":"code","b":[173,87,178],"m":"lda","o":"joystick_port1_raw","oa":45655,"x":[27018]},{"a":27036,"t":"code","b":[141,63,178],"m":"sta","o":"wizball_input","oa":45631},{"a":27039,"t":"code","b":[173,86,178],"m":"lda","o":"joystick_port2_raw","oa":45654},{"a":27042,"t":"code","b":[141,62,178],"m":"sta","o":"cat_input","oa":45630},{"a":27045,"t":"code","b":[96],"m":"rts"},{"a":27046,"l":"b_69A6","t":"code","b":[173,87,178],"m":"lda","o":"joystick_port1_raw","oa":45655,"x":[27013]},{"a":27049,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":27051,"t":"code","b":[173,64,178],"m":"lda","o":"wizard_port","oa":45632},{"a":27054,"t":"code","b":[208,5],"m":"bne","o":"b_69B5","oa":27061},{"a":27056,"t":"code","b":[173,86,178],"m":"lda","o":"joystick_port2_raw","oa":45654},{"a":27059,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":27061,"l":"b_69B5","t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102,"x":[27054]},{"a":27063,"t":"code","b":[41,16],"m":"and","o":"#$10"},{"a":27065,"t":"code","b":[208,13],"m":"bne","o":"b_69C8","oa":27080},{"a":27067,"t":"code","b":[173,66,178],"m":"lda","o":"solo_fire_hold","oa":45634},{"a":27070,"t":"code","b":[201,10],"m":"cmp","o":"#$0A"},{"a":27072,"t":"code","b":[240,24],"m":"beq","o":"b_69DA","oa":27098},{"a":27074,"t":"code","b":[238,66,178],"m":"inc","o":"solo_fire_hold","oa":45634},{"a":27077,"t":"code","b":[76,205,105],"m":"jmp","o":"j_69CD","oa":27085},{"a":27080,"l":"b_69C8","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[27065,27101]},{"a":27082,"t":"code","b":[141,66,178],"m":"sta","o":"solo_fire_hold","oa":45634},{"a":27085,"l":"j_69CD","t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102,"x":[27077]},{"a":27087,"t":"code","b":[141,63,178],"m":"sta","o":"wizball_input","oa":45631},{"a":27090,"t":"code","b":[41,16],"m":"and","o":"#$10"},{"a":27092,"t":"code","b":[9,239],"m":"ora","o":"#$EF"},{"a":27094,"t":"code","b":[141,62,178],"m":"sta","o":"cat_input","oa":45630},{"a":27097,"t":"code","b":[96],"m":"rts"},{"a":27098,"l":"b_69DA","t":"code","b":[173,52,178],"m":"lda","o":"weapon_catelite","oa":45620,"x":[27072]},{"a":27101,"t":"code","b":[240,233],"m":"beq","o":"b_69C8","oa":27080},{"a":27103,"t":"code","b":[173,65,178],"m":"lda","o":"solo_autofire","oa":45633},{"a":27106,"t":"code","b":[73,16],"m":"eor","o":"#$10"},{"a":27108,"t":"code","b":[141,65,178],"m":"sta","o":"solo_autofire","oa":45633},{"a":27111,"t":"code","b":[9,239],"m":"ora","o":"#$EF"},{"a":27113,"t":"code","b":[141,63,178],"m":"sta","o":"wizball_input","oa":45631},{"a":27116,"t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102},{"a":27118,"t":"code","b":[141,62,178],"m":"sta","o":"cat_input","oa":45630},{"a":27121,"t":"code","b":[96],"m":"rts"},{"a":27122,"l":"show_game_over","c":"After a life: returns at once unless the current side had one Wizball left ($B277,side = 1). Otherwise draws 'game over' ($6AC9, large font, $8E32) into sprite shapes from $B4 (cleared, $B4-$B9) and, from shape $B5 and 42 bytes lower ($8EDB = $2A), the side's name from the table at $6B11 ($8DE4); while shape $B9 is borrowed the first cauldron sprite shows the clean outline (pointer $B51E = $38, back to $B9 at $6AC5). Sets sprites 2-7 from $B4E5-$B504, erases the shots, blanks colour RAM rows 9-11 columns 11-28, plays tune $36 and waits once a frame ($6E92): the sprite colours cycle, fire is only read after the tune has ended ($5513), and it gives up after 1,000 frames ($9215 with 200, stepped every 5 by $921E). Leaves the first cauldron's row counter $9EC6 at 0.","t":"code","b":[174,217,191],"m":"ldx","o":"side_playing","oa":49113,"x":[25531]},{"a":27125,"t":"code","b":[189,119,178],"m":"lda","o":"large_font_ink_mask,x","oa":45687},{"a":27128,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":27130,"t":"code","b":[240,1],"m":"beq","o":"b_69FD","oa":27133},{"a":27132,"t":"code","b":[96],"m":"rts"},{"a":27133,"l":"b_69FD","t":"code","b":[169,56],"m":"lda","o":"#$38","x":[27130]},{"a":27135,"t":"code","b":[141,30,181],"m":"sta","o":"red_cauldron_image","oa":46366},{"a":27138,"t":"code","b":[160,180],"m":"ldy","o":"#$B4"},{"a":27140,"t":"code","b":[162,6],"m":"ldx","o":"#$06"},{"a":27142,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":27144,"t":"code","b":[141,219,142],"m":"sta","o":"print_start_offset","oa":36571},{"a":27147,"t":"code","b":[32,21,143],"m":"jsr","o":"fill_sprite_blocks","oa":36629},{"a":27150,"t":"code","b":[174,15,107],"m":"ldx","o":"ptr_text_game_over","oa":27407},{"a":27153,"t":"code","b":[172,16,107],"m":"ldy","o":"a_6B10","oa":27408},{"a":27156,"t":"code","b":[169,180],"m":"lda","o":"#$B4"},{"a":27158,"t":"code","b":[32,50,142],"m":"jsr","o":"print_sprite_text_large","oa":36402},{"a":27161,"t":"code","b":[169,42],"m":"lda","o":"#$2A"},{"a":27163,"t":"code","b":[141,219,142],"m":"sta","o":"print_start_offset","oa":36571},{"a":27166,"t":"code","b":[173,217,191],"m":"lda","o":"side_playing","oa":49113},{"a":27169,"t":"code","b":[170],"m":"tax"},{"a":27170,"t":"code","b":[56],"m":"sec"},{"a":27171,"t":"code","b":[233,1],"m":"sbc","o":"#$01"},{"a":27173,"t":"code","b":[10],"m":"asl","o":"a"},{"a":27174,"t":"code","b":[10],"m":"asl","o":"a"},{"a":27175,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":27177,"t":"code","b":[189,213,191],"m":"lda","o":"side_flags_base,x","oa":49109},{"a":27180,"t":"code","b":[56],"m":"sec"},{"a":27181,"t":"code","b":[233,1],"m":"sbc","o":"#$01"},{"a":27183,"t":"code","b":[10],"m":"asl","o":"a"},{"a":27184,"t":"code","b":[101,102],"m":"adc","o":"zp_temp_66","oa":102},{"a":27186,"t":"code","b":[168],"m":"tay"},{"a":27187,"t":"code","b":[190,17,107],"m":"ldx","o":"tbl_side_name_texts,y","oa":27409},{"a":27190,"t":"code","b":[185,18,107],"m":"lda","o":"f_6B12,y","oa":27410},{"a":27193,"t":"code","b":[168],"m":"tay"},{"a":27194,"t":"code","b":[169,181],"m":"lda","o":"#$B5"},{"a":27196,"t":"code","b":[32,228,141],"m":"jsr","o":"print_sprite_text","oa":36324},{"a":27199,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":27201,"t":"code","b":[141,219,142],"m":"sta","o":"print_start_offset","oa":36571},{"a":27204,"t":"code","b":[141,212,231],"m":"sta","o":"vic_shadow_x_msb","oa":59348},{"a":27207,"t":"code","b":[162,8],"m":"ldx","o":"#$08"},{"a":27209,"l":"b_6A49","t":"code","b":[189,228,180],"m":"lda","o":"message_sprite_x_base,x","oa":46308,"x":[27234]},{"a":27212,"t":"code","b":[157,195,231],"m":"sta","o":"vic_shadow_minus_1,x","oa":59331},{"a":27215,"t":"code","b":[189,236,180],"m":"lda","o":"message_sprite_y_base,x","oa":46316},{"a":27218,"t":"code","b":[157,203,231],"m":"sta","o":"vic_shadow_spr3_y,x","oa":59339},{"a":27221,"t":"code","b":[189,244,180],"m":"lda","o":"message_sprite_colours_base,x","oa":46324},{"a":27224,"t":"code","b":[157,234,231],"m":"sta","o":"vic_shadow_spr_mc1,x","oa":59370},{"a":27227,"t":"code","b":[189,252,180],"m":"lda","o":"message_sprite_images_base,x","oa":46332},{"a":27230,"t":"code","b":[157,36,181],"m":"sta","o":"landscape_sprite_images_base,x","oa":46372},{"a":27233,"t":"code","b":[202],"m":"dex"},{"a":27234,"t":"code","b":[208,229],"m":"bne","o":"b_6A49","oa":27209},{"a":27236,"t":"code","b":[169,252],"m":"lda","o":"#$FC"},{"a":27238,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":27241,"t":"code","b":[142,178,177],"m":"stx","o":"landscape_sprite_multicolour","oa":45490},{"a":27244,"t":"code","b":[32,144,112],"m":"jsr","o":"erase_bullets","oa":28816},{"a":27247,"t":"code","b":[160,18],"m":"ldy","o":"#$12"},{"a":27249,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":27251,"l":"b_6A73","t":"code","b":[153,114,217],"m":"sta","o":"$D972,y","x":[27261]},{"a":27254,"t":"code","b":[153,154,217],"m":"sta","o":"$D99A,y"},{"a":27257,"t":"code","b":[153,194,217],"m":"sta","o":"$D9C2,y"},{"a":27260,"t":"code","b":[136],"m":"dey"},{"a":27261,"t":"code","b":[208,244],"m":"bne","o":"b_6A73","oa":27251},{"a":27263,"t":"code","b":[169,200],"m":"lda","o":"#$C8"},{"a":27265,"t":"code","b":[32,21,146],"m":"jsr","o":"set_screen_timer","oa":37397},{"a":27268,"t":"code","b":[32,173,186],"m":"jsr","o":"silence_sid","oa":47789},{"a":27271,"t":"code","b":[32,208,71],"m":"jsr","o":"reset_music","oa":18384},{"a":27274,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":27276,"t":"code","b":[141,241,184],"m":"sta","o":"music_voices","oa":47345},{"a":27279,"t":"code","b":[160,54],"m":"ldy","o":"#$36"},{"a":27281,"t":"code","b":[32,241,69],"m":"jsr","o":"start_tune","oa":17905},{"a":27284,"l":"game_over_wait_loop","t":"code","b":[32,146,110],"m":"jsr","o":"wait_line_266_and_move_stars","oa":28306,"x":[27324]},{"a":27287,"t":"code","b":[32,41,116],"m":"jsr","o":"scan_keys_play","oa":29737},{"a":27290,"t":"code","b":[32,19,85],"m":"jsr","o":"test_music_playing","oa":21779},{"a":27293,"t":"code","b":[208,7],"m":"bne","o":"b_6AA6","oa":27302},{"a":27295,"t":"code","b":[32,250,145],"m":"jsr","o":"read_joystick_edge","oa":37370},{"a":27298,"t":"code","b":[41,16],"m":"and","o":"#$10"},{"a":27300,"t":"code","b":[240,24],"m":"beq","o":"b_6ABE","oa":27326},{"a":27302,"l":"b_6AA6","t":"code","b":[32,190,152],"m":"jsr","o":"cycle_blue_ramp","oa":39102,"x":[27293]},{"a":27305,"t":"code","b":[173,215,235],"m":"lda","o":"colours_d7","oa":60375},{"a":27308,"t":"code","b":[162,6],"m":"ldx","o":"#$06"},{"a":27310,"l":"b_6AAE","t":"code","b":[157,236,231],"m":"sta","o":"vic_shadow_spr1_colour,x","oa":59372,"x":[27314]},{"a":27313,"t":"code","b":[202],"m":"dex"},{"a":27314,"t":"code","b":[208,250],"m":"bne","o":"b_6AAE","oa":27310},{"a":27316,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":27318,"l":"b_6AB6","t":"code","b":[136],"m":"dey","x":[27319]},{"a":27319,"t":"code","b":[208,253],"m":"bne","o":"b_6AB6","oa":27318},{"a":27321,"t":"code","b":[32,30,146],"m":"jsr","o":"tick_screen_timer","oa":37406},{"a":27324,"t":"code","b":[208,214],"m":"bne","o":"game_over_wait_loop","oa":27284},{"a":27326,"l":"b_6ABE","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[27300]},{"a":27328,"t":"code","b":[141,198,158],"m":"sta","o":"cauldron_rows_red","oa":40646},{"a":27331,"t":"code","b":[169,185],"m":"lda","o":"#$B9"},{"a":27333,"t":"code","b":[141,30,181],"m":"sta","o":"red_cauldron_image","oa":46366},{"a":27336,"t":"code","b":[96],"m":"rts"},{"a":27337,"l":"text_game_over","c":"Text 'GAME OVER' and its $FF ($6AC9-$6AD2), with no column and row: $69F2 draws it into sprite shapes $B4-$B9 in the large font through the pointer at $6B0F.","t":"byte","b":[71,65,77,69,32,79,86,69]},{"a":27345,"t":"byte","b":[82,255]},{"a":27347,"l":"page_player_one","c":"Column 8 and row 0 of the ' PLAYER ONE' record: the page the high-score entry prints as its heading (entry 0 of the table at $6B19); the text follows at $6AD5.","t":"byte","b":[8,0]},{"a":27349,"l":"text_player_one","c":"' PLAYER ONE', $FF, and the $FF that ends the page ($6AD5-$6AE1): the name the game-over sprites show for side 1 as one player (entry 0 of the table at $6B11).","t":"byte","b":[32,80,76,65,89,69,82,32]},{"a":27357,"t":"byte","b":[79,78,69,255,255]},{"a":27362,"l":"page_team_one","c":"Column 8 and row 0 of the '  TEAM ONE ' record: heading page entry 1 of the table at $6B19; the text is at $6AE4.","t":"byte","b":[8,0]},{"a":27364,"l":"text_team_one","c":"'  TEAM ONE ', $FF, $FF ($6AE4-$6AF0): side 1 as a team, entry 1 of the table at $6B11.","t":"byte","b":[32,32,84,69,65,77,32,79]},{"a":27372,"t":"byte","b":[78,69,32,255,255]},{"a":27377,"l":"page_player_two","c":"Column 8 and row 0 of the ' PLAYER TWO' record: heading page entry 2 of the table at $6B19; the text is at $6AF3.","t":"byte","b":[8,0]},{"a":27379,"l":"text_player_two","c":"' PLAYER TWO', $FF, $FF ($6AF3-$6AFF): side 2 as one player, entry 2 of the table at $6B11.","t":"byte","b":[32,80,76,65,89,69,82,32]},{"a":27387,"t":"byte","b":[84,87,79,255,255]},{"a":27392,"l":"page_team_two","c":"Column 8 and row 0 of the '  TEAM TWO ' record: heading page entry 3 of the table at $6B19; the text is at $6B02.","t":"byte","b":[8,0]},{"a":27394,"l":"text_team_two","c":"'  TEAM TWO ', $FF, $FF ($6B02-$6B0E): side 2 as a team, entry 3 of the table at $6B11.","t":"byte","b":[32,32,84,69,65,77,32,84]},{"a":27402,"t":"byte","b":[87,79,32,255,255]},{"a":27407,"l":"ptr_text_game_over","c":"Pointer to 'GAME OVER' at $6AC9, low byte here, read into X at $6A0E for the sprite text printer $8E32.","t":"byte","b":[201],"x":[27150]},{"a":27408,"l":"a_6B10","c":"High byte of the 'GAME OVER' pointer at $6B0F ($6A), read into Y at $6A11.","t":"byte","b":[106],"x":[27153]},{"a":27409,"l":"tbl_side_name_texts","c":"Word table of the side names without their column and row, for the sprite printer $8DE4 at $6A33 (game over): $6AD5 player one, $6AE4 team one, $6AF3 player two, $6B02 team two, indexed by (side - 1) x 4 + (side kind - 1) x 2.","t":"byte","b":[213],"x":[27187]},{"a":27410,"l":"f_6B12","c":"High byte of entry 0 of the side-name text table at $6B11, and entries 1-3 after it ($6B13-$6B18); $6A36 reads the table as $6B12,Y.","t":"addr","b":[106,228],"oa":58474,"o":"$E46A","x":[27190]},{"a":27412,"t":"addr","b":[106,243],"oa":62314,"o":"$F36A"},{"a":27414,"t":"addr","b":[106,2],"oa":618,"o":"$026A"},{"a":27416,"t":"byte","b":[107]},{"a":27417,"l":"tbl_side_name_pages","c":"Word table of the side-name pages with their column and row, for the high-score entry heading at $6C12: $6AD3 player one, $6AE2 team one, $6AF1 player two, $6B00 team two, indexed by $6B21.","t":"byte","b":[211],"x":[27666]},{"a":27418,"l":"f_6B1A","c":"High byte of entry 0 of the side-name page table at $6B19, followed by entries 1-3 ($6B1B-$6B20); read as $6B1A,Y at $6C15.","t":"addr","b":[106,226],"oa":57962,"o":"$E26A","x":[27669]},{"a":27420,"t":"addr","b":[106,241],"oa":61802,"o":"$F16A"},{"a":27422,"t":"addr","b":[106,0],"oa":106,"o":"$006A"},{"a":27424,"t":"byte","b":[107]},{"a":27425,"l":"hs_name_page","c":"High-score entry: which heading $6BFB prints from the table at $6B19: 0 side 1, 2 side 2 (set at $6BD5, $6BEA), plus 1 for a team entry ($6C08).","t":"byte","b":[0],"x":[27605,27626,27653,27658,27661]},{"a":27426,"l":"hs_side_digit","c":"High-score entry: the side as a digit character, $31 or $32 ($6BD8, $6BED), passed in A to $BD32 through $BFD3 at $6CB6.","t":"byte","b":[0],"x":[27610,27631,27830]},{"a":27427,"l":"hs_result","c":"High-score entry: the side's result code from $BFF2 or $BFF3 (set by the check at $BBA0): below 3 one name, 3 and above two names (wizard and feline); odd also asks for ten characters of 'a few words'.","t":"byte","b":[0],"x":[27600,27621,27646,27705,27789]},{"a":27428,"l":"name_field_column","c":"Column of the name field being typed ($6CBC stores X, $6CCE reads it back for $6D44 each frame).","t":"byte","b":[0],"x":[27836,27854]},{"a":27429,"l":"name_field_row","c":"Row of the name field being typed ($6CBF, read at $6CD1).","t":"byte","b":[0],"x":[27839,27857]},{"a":27430,"l":"name_field_length","c":"Length of the name field being typed, 3 or 10 ($6CC2, read at $6CD4 and passed to $6D44).","t":"byte","b":[0],"x":[27842,27860]},{"a":27431,"l":"end_life","c":"After each life: takes a Wizball from the current side ($B277,$BFD9: $B278 side 1, $B279 side 2). One side ($BFD8 = 1): returns while it has lives. Two sides: when both are at 0 the game ends; otherwise switches $BFD9 to the other side (EOR #3), and back again if that one has none left, so the sides take turns life by life. Game end ($6B5B): drops its return address, takes $B1CE into $AF7D (the reads after loading side 1's and side 2's state compare the same global, so the last side to play decides), clears the continue level $AF7E and the BOREWIZ flag $BB07, subtracts 2 ($AF7D = levels opened, the most the title's keys 0-5 may choose) and goes to $6B92.","t":"code","b":[174,217,191],"m":"ldx","o":"side_playing","oa":49113,"x":[25540]},{"a":27434,"t":"code","b":[222,119,178],"m":"dec","o":"large_font_ink_mask,x","oa":45687},{"a":27437,"t":"code","b":[173,216,191],"m":"lda","o":"sides","oa":49112},{"a":27440,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":27442,"t":"code","b":[240,33],"m":"beq","o":"b_6B55","oa":27477},{"a":27444,"t":"code","b":[173,120,178],"m":"lda","o":"lives_side1","oa":45688},{"a":27447,"t":"code","b":[13,121,178],"m":"ora","o":"lives_side2","oa":45689},{"a":27450,"t":"code","b":[240,31],"m":"beq","o":"end_game","oa":27483},{"a":27452,"t":"code","b":[173,217,191],"m":"lda","o":"side_playing","oa":49113},{"a":27455,"t":"code","b":[73,3],"m":"eor","o":"#$03"},{"a":27457,"t":"code","b":[141,217,191],"m":"sta","o":"side_playing","oa":49113},{"a":27460,"t":"code","b":[172,217,191],"m":"ldy","o":"side_playing","oa":49113},{"a":27463,"t":"code","b":[185,119,178],"m":"lda","o":"large_font_ink_mask,y","oa":45687},{"a":27466,"t":"code","b":[208,8],"m":"bne","o":"r_6B54","oa":27476},{"a":27468,"t":"code","b":[173,217,191],"m":"lda","o":"side_playing","oa":49113},{"a":27471,"t":"code","b":[73,3],"m":"eor","o":"#$03"},{"a":27473,"t":"code","b":[141,217,191],"m":"sta","o":"side_playing","oa":49113},{"a":27476,"l":"r_6B54","t":"code","b":[96],"m":"rts","x":[27466]},{"a":27477,"l":"b_6B55","t":"code","b":[173,120,178],"m":"lda","o":"lives_side1","oa":45688,"x":[27442]},{"a":27480,"t":"code","b":[240,1],"m":"beq","o":"end_game","oa":27483},{"a":27482,"t":"code","b":[96],"m":"rts"},{"a":27483,"l":"end_game","t":"code","b":[104],"m":"pla","x":[27450,27480]},{"a":27484,"t":"code","b":[104],"m":"pla"},{"a":27485,"t":"code","b":[32,32,110],"m":"jsr","o":"load_side1_state","oa":28192},{"a":27488,"t":"code","b":[173,206,177],"m":"lda","o":"max_level","oa":45518},{"a":27491,"t":"code","b":[141,125,175],"m":"sta","o":"continue_level_max","oa":44925},{"a":27494,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":27496,"t":"code","b":[141,126,175],"m":"sta","o":"start_level","oa":44926},{"a":27499,"t":"code","b":[141,7,187],"m":"sta","o":"borewiz","oa":47879},{"a":27502,"t":"code","b":[173,216,191],"m":"lda","o":"sides","oa":49112},{"a":27505,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":27507,"t":"code","b":[240,14],"m":"beq","o":"b_6B83","oa":27523},{"a":27509,"t":"code","b":[32,44,110],"m":"jsr","o":"load_side2_state","oa":28204},{"a":27512,"t":"code","b":[173,206,177],"m":"lda","o":"max_level","oa":45518},{"a":27515,"t":"code","b":[205,125,175],"m":"cmp","o":"continue_level_max","oa":44925},{"a":27518,"t":"code","b":[48,3],"m":"bmi","o":"b_6B83","oa":27523},{"a":27520,"t":"code","b":[141,125,175],"m":"sta","o":"continue_level_max","oa":44925},{"a":27523,"l":"b_6B83","t":"code","b":[173,125,175],"m":"lda","o":"continue_level_max","oa":44925,"x":[27507,27518]},{"a":27526,"t":"code","b":[56],"m":"sec"},{"a":27527,"t":"code","b":[233,2],"m":"sbc","o":"#$02"},{"a":27529,"t":"code","b":[141,125,175],"m":"sta","o":"continue_level_max","oa":44925},{"a":27532,"t":"code","b":[76,146,107],"m":"jmp","o":"enter_high_scores","oa":27538},{"a":27535,"l":"back_to_title","t":"code","b":[76,97,143],"m":"jmp","o":"start_attract","oa":36705,"x":[27577]},{"a":27538,"l":"enter_high_scores","c":"End of a game: black background, screen off, installs the display list $B482 (pointer at $B4B0; colour bands $6DD5-$6E00), text screen, the font's polarity as the title uses it ($8C8D, $8CBE), and runs the check at $BBA0 through $BFD0. With no entry for either side ($BFF2 = $BFF3 = 0) it goes straight to the title at $8F61 (via $6B8F). Otherwise tune $2F, then the name entry $6BFB for side 1 if $BFF2 is set and for side 2 if $BFF3 is set, and back to the title at $8F75.","t":"code","b":[120],"m":"sei","x":[27532]},{"a":27539,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":27541,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":27544,"t":"code","b":[32,68,140],"m":"jsr","o":"screen_off","oa":35908},{"a":27547,"t":"code","b":[32,68,140],"m":"jsr","o":"screen_off","oa":35908},{"a":27550,"t":"code","b":[174,176,180],"m":"ldx","o":"ptr_display_list_name_entry","oa":46256},{"a":27553,"t":"code","b":[172,177,180],"m":"ldy","o":"ptr_display_list_name_entry_hi","oa":46257},{"a":27556,"t":"code","b":[32,180,124],"m":"jsr","o":"install_display_list","oa":31924},{"a":27559,"t":"code","b":[32,65,143],"m":"jsr","o":"setup_text_screen","oa":36673},{"a":27562,"t":"code","b":[32,141,140],"m":"jsr","o":"font_text_inverted","oa":35981},{"a":27565,"t":"code","b":[32,190,140],"m":"jsr","o":"font_large_inverted","oa":36030},{"a":27568,"t":"code","b":[32,208,191],"m":"jsr","o":"hiscore_jump_insert","oa":49104},{"a":27571,"t":"code","b":[173,242,191],"m":"lda","o":"rank_side1","oa":49138},{"a":27574,"t":"code","b":[13,243,191],"m":"ora","o":"rank_side2","oa":49139},{"a":27577,"t":"code","b":[240,212],"m":"beq","o":"back_to_title","oa":27535},{"a":27579,"t":"code","b":[32,208,71],"m":"jsr","o":"reset_music","oa":18384},{"a":27582,"t":"code","b":[160,47],"m":"ldy","o":"#$2F"},{"a":27584,"t":"code","b":[32,241,69],"m":"jsr","o":"start_tune","oa":17905},{"a":27587,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":27589,"t":"code","b":[141,241,184],"m":"sta","o":"music_voices","oa":47345},{"a":27592,"t":"code","b":[141,242,184],"m":"sta","o":"music_speed","oa":47346},{"a":27595,"t":"code","b":[173,242,191],"m":"lda","o":"rank_side1","oa":49138},{"a":27598,"t":"code","b":[240,16],"m":"beq","o":"b_6BE0","oa":27616},{"a":27600,"t":"code","b":[141,35,107],"m":"sta","o":"hs_result","oa":27427},{"a":27603,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":27605,"t":"code","b":[140,33,107],"m":"sty","o":"hs_name_page","oa":27425},{"a":27608,"t":"code","b":[160,49],"m":"ldy","o":"#$31"},{"a":27610,"t":"code","b":[140,34,107],"m":"sty","o":"hs_side_digit","oa":27426},{"a":27613,"t":"code","b":[32,251,107],"m":"jsr","o":"enter_side_names","oa":27643},{"a":27616,"l":"b_6BE0","t":"code","b":[173,243,191],"m":"lda","o":"rank_side2","oa":49139,"x":[27598]},{"a":27619,"t":"code","b":[240,16],"m":"beq","o":"b_6BF5","oa":27637},{"a":27621,"t":"code","b":[141,35,107],"m":"sta","o":"hs_result","oa":27427},{"a":27624,"t":"code","b":[160,2],"m":"ldy","o":"#$02"},{"a":27626,"t":"code","b":[140,33,107],"m":"sty","o":"hs_name_page","oa":27425},{"a":27629,"t":"code","b":[160,50],"m":"ldy","o":"#$32"},{"a":27631,"t":"code","b":[140,34,107],"m":"sty","o":"hs_side_digit","oa":27426},{"a":27634,"t":"code","b":[32,251,107],"m":"jsr","o":"enter_side_names","oa":27643},{"a":27637,"l":"b_6BF5","t":"code","b":[32,68,140],"m":"jsr","o":"screen_off","oa":35908,"x":[27619]},{"a":27640,"t":"code","b":[76,117,143],"m":"jmp","o":"show_title_page","oa":36725},{"a":27643,"l":"enter_side_names","c":"Name entry for one side ($6B21-$6B23 set by the caller): clears the screen ($8F41), heads it with the side's name ($6B19), prints 'what a mega display of fun !!! type your name' ($B633), blanks the name buffer $BFF4-$BFFD. Result below 3: one three-letter name at column 17, row 17 into $BFF4-$BFF6. Otherwise 'wizard' and 'feline' ($B680) and two names at columns 10 and 24, row 17, into $BFF4-$BFF6 and $BFF8-$BFFA. Odd result: 'and also a few words' ($B668) and ten characters at column 10, row 23 into $B6AA-$B6B3, the text shown under the top score ('sensi soft' as loaded). Ends by JMP $BFD3 ($BD32) with the side digit $6B22 in A.","t":"code","b":[32,65,143],"m":"jsr","o":"setup_text_screen","oa":36673,"x":[27613,27634]},{"a":27646,"t":"code","b":[173,35,107],"m":"lda","o":"hs_result","oa":27427},{"a":27649,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":27651,"t":"code","b":[48,8],"m":"bmi","o":"b_6C0D","oa":27661},{"a":27653,"t":"code","b":[173,33,107],"m":"lda","o":"hs_name_page","oa":27425},{"a":27656,"t":"code","b":[9,1],"m":"ora","o":"#$01"},{"a":27658,"t":"code","b":[141,33,107],"m":"sta","o":"hs_name_page","oa":27425},{"a":27661,"l":"b_6C0D","t":"code","b":[173,33,107],"m":"lda","o":"hs_name_page","oa":27425,"x":[27651]},{"a":27664,"t":"code","b":[10],"m":"asl","o":"a"},{"a":27665,"t":"code","b":[168],"m":"tay"},{"a":27666,"t":"code","b":[190,25,107],"m":"ldx","o":"tbl_side_name_pages,y","oa":27417},{"a":27669,"t":"code","b":[185,26,107],"m":"lda","o":"f_6B1A,y","oa":27418},{"a":27672,"t":"code","b":[168],"m":"tay"},{"a":27673,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":27675,"t":"code","b":[32,244,140],"m":"jsr","o":"print_page_large","oa":36084},{"a":27678,"t":"code","b":[174,226,183],"m":"ldx","o":"ptr_text_mega_display","oa":47074},{"a":27681,"t":"code","b":[172,227,183],"m":"ldy","o":"ptr_text_mega_display_hi","oa":47075},{"a":27684,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":27686,"t":"code","b":[32,244,140],"m":"jsr","o":"print_page_large","oa":36084},{"a":27689,"t":"code","b":[32,246,108],"m":"jsr","o":"clear_name_buffer","oa":27894},{"a":27692,"t":"code","b":[160,10],"m":"ldy","o":"#$0A"},{"a":27694,"t":"code","b":[169,32],"m":"lda","o":"#$20"},{"a":27696,"l":"b_6C30","t":"code","b":[153,243,191],"m":"sta","o":"rank_side2,y","oa":49139,"x":[27700]},{"a":27699,"t":"code","b":[136],"m":"dey"},{"a":27700,"t":"code","b":[208,250],"m":"bne","o":"b_6C30","oa":27696},{"a":27702,"t":"code","b":[32,80,140],"m":"jsr","o":"screen_on","oa":35920},{"a":27705,"t":"code","b":[173,35,107],"m":"lda","o":"hs_result","oa":27427},{"a":27708,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":27710,"t":"code","b":[16,23],"m":"bpl","o":"b_6C57","oa":27735},{"a":27712,"t":"code","b":[162,17],"m":"ldx","o":"#$11"},{"a":27714,"t":"code","b":[160,17],"m":"ldy","o":"#$11"},{"a":27716,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":27718,"t":"code","b":[32,188,108],"m":"jsr","o":"read_name_field","oa":27836},{"a":27721,"t":"code","b":[160,3],"m":"ldy","o":"#$03"},{"a":27723,"l":"b_6C4B","t":"code","b":[185,117,109],"m":"lda","o":"name_record_row,y","oa":28021,"x":[27730]},{"a":27726,"t":"code","b":[153,243,191],"m":"sta","o":"rank_side2,y","oa":49139},{"a":27729,"t":"code","b":[136],"m":"dey"},{"a":27730,"t":"code","b":[208,247],"m":"bne","o":"b_6C4B","oa":27723},{"a":27732,"t":"code","b":[76,141,108],"m":"jmp","o":"j_6C8D","oa":27789},{"a":27735,"l":"b_6C57","t":"code","b":[174,230,183],"m":"ldx","o":"ptr_text_wizard_feline","oa":47078,"x":[27710]},{"a":27738,"t":"code","b":[172,231,183],"m":"ldy","o":"ptr_text_wizard_feline_hi","oa":47079},{"a":27741,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":27743,"t":"code","b":[32,250,140],"m":"jsr","o":"print_page","oa":36090},{"a":27746,"t":"code","b":[162,10],"m":"ldx","o":"#$0A"},{"a":27748,"t":"code","b":[160,17],"m":"ldy","o":"#$11"},{"a":27750,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":27752,"t":"code","b":[32,188,108],"m":"jsr","o":"read_name_field","oa":27836},{"a":27755,"t":"code","b":[160,3],"m":"ldy","o":"#$03"},{"a":27757,"l":"b_6C6D","t":"code","b":[185,117,109],"m":"lda","o":"name_record_row,y","oa":28021,"x":[27764]},{"a":27760,"t":"code","b":[153,243,191],"m":"sta","o":"rank_side2,y","oa":49139},{"a":27763,"t":"code","b":[136],"m":"dey"},{"a":27764,"t":"code","b":[208,247],"m":"bne","o":"b_6C6D","oa":27757},{"a":27766,"t":"code","b":[32,246,108],"m":"jsr","o":"clear_name_buffer","oa":27894},{"a":27769,"t":"code","b":[162,24],"m":"ldx","o":"#$18"},{"a":27771,"t":"code","b":[160,17],"m":"ldy","o":"#$11"},{"a":27773,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":27775,"t":"code","b":[32,188,108],"m":"jsr","o":"read_name_field","oa":27836},{"a":27778,"t":"code","b":[160,3],"m":"ldy","o":"#$03"},{"a":27780,"l":"b_6C84","t":"code","b":[185,117,109],"m":"lda","o":"name_record_row,y","oa":28021,"x":[27787]},{"a":27783,"t":"code","b":[153,247,191],"m":"sta","o":"name_buffer_cat_base,y","oa":49143},{"a":27786,"t":"code","b":[136],"m":"dey"},{"a":27787,"t":"code","b":[208,247],"m":"bne","o":"b_6C84","oa":27780},{"a":27789,"l":"j_6C8D","t":"code","b":[173,35,107],"m":"lda","o":"hs_result","oa":27427,"x":[27732]},{"a":27792,"t":"code","b":[41,1],"m":"and","o":"#$01"},{"a":27794,"t":"code","b":[240,34],"m":"beq","o":"b_6CB6","oa":27830},{"a":27796,"t":"code","b":[174,228,183],"m":"ldx","o":"ptr_text_few_words","oa":47076},{"a":27799,"t":"code","b":[172,229,183],"m":"ldy","o":"ptr_text_few_words_hi","oa":47077},{"a":27802,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":27804,"t":"code","b":[32,244,140],"m":"jsr","o":"print_page_large","oa":36084},{"a":27807,"t":"code","b":[32,246,108],"m":"jsr","o":"clear_name_buffer","oa":27894},{"a":27810,"t":"code","b":[162,10],"m":"ldx","o":"#$0A"},{"a":27812,"t":"code","b":[160,23],"m":"ldy","o":"#$17"},{"a":27814,"t":"code","b":[169,10],"m":"lda","o":"#$0A"},{"a":27816,"t":"code","b":[32,188,108],"m":"jsr","o":"read_name_field","oa":27836},{"a":27819,"t":"code","b":[160,10],"m":"ldy","o":"#$0A"},{"a":27821,"l":"b_6CAD","t":"code","b":[185,117,109],"m":"lda","o":"name_record_row,y","oa":28021,"x":[27828]},{"a":27824,"t":"code","b":[153,169,182],"m":"sta","o":"best_message_base,y","oa":46761},{"a":27827,"t":"code","b":[136],"m":"dey"},{"a":27828,"t":"code","b":[208,247],"m":"bne","o":"b_6CAD","oa":27821},{"a":27830,"l":"b_6CB6","t":"code","b":[173,34,107],"m":"lda","o":"hs_side_digit","oa":27426,"x":[27794]},{"a":27833,"t":"code","b":[76,211,191],"m":"jmp","o":"hiscore_jump_store_name","oa":49107},{"a":27836,"l":"read_name_field","c":"Reads one name field: X column, Y row, A length (3 or 10), kept in $6B24-$6B26. Once a frame (after $6EA8) it cycles the band colours ($9436), takes a key ($6D07) and redraws the field ($6D44), until RETURN (key $3F) with at least one character typed; then fills the buffer from the cursor to 10 with spaces.","t":"code","b":[142,36,107],"m":"stx","o":"name_field_column","oa":27428,"x":[27718,27752,27775,27816]},{"a":27839,"t":"code","b":[140,37,107],"m":"sty","o":"name_field_row","oa":27429},{"a":27842,"t":"code","b":[141,38,107],"m":"sta","o":"name_field_length","oa":27430},{"a":27845,"l":"b_6CC5","t":"code","b":[32,168,110],"m":"jsr","o":"wait_raster_top","oa":28328,"x":[27869,27876]},{"a":27848,"t":"code","b":[32,54,148],"m":"jsr","o":"cycle_all_text_colours","oa":37942},{"a":27851,"t":"code","b":[32,7,109],"m":"jsr","o":"edit_name_buffer","oa":27911},{"a":27854,"t":"code","b":[174,36,107],"m":"ldx","o":"name_field_column","oa":27428},{"a":27857,"t":"code","b":[172,37,107],"m":"ldy","o":"name_field_row","oa":27429},{"a":27860,"t":"code","b":[173,38,107],"m":"lda","o":"name_field_length","oa":27430},{"a":27863,"t":"code","b":[32,68,109],"m":"jsr","o":"draw_name_field","oa":27972},{"a":27866,"t":"code","b":[172,115,109],"m":"ldy","o":"name_cursor","oa":28019},{"a":27869,"t":"code","b":[240,230],"m":"beq","o":"b_6CC5","oa":27845},{"a":27871,"t":"code","b":[173,84,178],"m":"lda","o":"key_new","oa":45652},{"a":27874,"t":"code","b":[201,63],"m":"cmp","o":"#$3F"},{"a":27876,"t":"code","b":[208,223],"m":"bne","o":"b_6CC5","oa":27845},{"a":27878,"t":"code","b":[172,115,109],"m":"ldy","o":"name_cursor","oa":28019},{"a":27881,"t":"code","b":[169,32],"m":"lda","o":"#$20"},{"a":27883,"l":"b_6CEB","t":"code","b":[192,10],"m":"cpy","o":"#$0A","x":[27891]},{"a":27885,"t":"code","b":[240,6],"m":"beq","o":"r_6CF5","oa":27893},{"a":27887,"t":"code","b":[153,118,109],"m":"sta","o":"name_buffer,y","oa":28022},{"a":27890,"t":"code","b":[200],"m":"iny"},{"a":27891,"t":"code","b":[208,246],"m":"bne","o":"b_6CEB","oa":27883},{"a":27893,"l":"r_6CF5","t":"code","b":[96],"m":"rts","x":[27885]},{"a":27894,"l":"clear_name_buffer","c":"Scans the keyboard once ($73D4, which updates the last-key memory $B255 and leaves $B254 at 0 unless a new key is down), fills the name buffer $6D76-$6D7F with $30 and puts the cursor $6D73 at 0.","t":"code","b":[32,212,115],"m":"jsr","o":"scan_keyboard","oa":29652,"x":[27689,27766,27807]},{"a":27897,"t":"code","b":[160,10],"m":"ldy","o":"#$0A"},{"a":27899,"t":"code","b":[169,48],"m":"lda","o":"#$30"},{"a":27901,"l":"b_6CFD","t":"code","b":[153,117,109],"m":"sta","o":"name_record_row,y","oa":28021,"x":[27905]},{"a":27904,"t":"code","b":[136],"m":"dey"},{"a":27905,"t":"code","b":[208,250],"m":"bne","o":"b_6CFD","oa":27901},{"a":27907,"t":"code","b":[140,115,109],"m":"sty","o":"name_cursor","oa":28019},{"a":27910,"t":"code","b":[96],"m":"rts"},{"a":27911,"l":"edit_name_buffer","c":"Scans the keyboard ($73D4) and applies the new key $B254 through the table at $6D94: DEL ($14) moves the cursor back and puts $30 there; space, $21 (the 1 key) and the letters $41-$5A are stored at the cursor, which advances until it reaches the field length $6D72 (a further key overwrites the byte after the field, which $6D44 then sets to $FF). Anything else is ignored.","t":"code","b":[32,212,115],"m":"jsr","o":"scan_keyboard","oa":29652,"x":[27851]},{"a":27914,"t":"code","b":[172,84,178],"m":"ldy","o":"key_new","oa":45652},{"a":27917,"t":"code","b":[185,148,109],"m":"lda","o":"tbl_key_to_petscii,y","oa":28052},{"a":27920,"t":"code","b":[201,20],"m":"cmp","o":"#$14"},{"a":27922,"t":"code","b":[240,31],"m":"beq","o":"b_6D33","oa":27955},{"a":27924,"t":"code","b":[201,32],"m":"cmp","o":"#$20"},{"a":27926,"t":"code","b":[240,12],"m":"beq","o":"b_6D24","oa":27940},{"a":27928,"t":"code","b":[201,33],"m":"cmp","o":"#$21"},{"a":27930,"t":"code","b":[240,8],"m":"beq","o":"b_6D24","oa":27940},{"a":27932,"t":"code","b":[201,65],"m":"cmp","o":"#$41"},{"a":27934,"t":"code","b":[48,18],"m":"bmi","o":"r_6D32","oa":27954},{"a":27936,"t":"code","b":[201,91],"m":"cmp","o":"#$5B"},{"a":27938,"t":"code","b":[16,14],"m":"bpl","o":"r_6D32","oa":27954},{"a":27940,"l":"b_6D24","t":"code","b":[172,115,109],"m":"ldy","o":"name_cursor","oa":28019,"x":[27926,27930]},{"a":27943,"t":"code","b":[153,118,109],"m":"sta","o":"name_buffer,y","oa":28022},{"a":27946,"t":"code","b":[204,114,109],"m":"cpy","o":"name_length","oa":28018},{"a":27949,"t":"code","b":[240,3],"m":"beq","o":"r_6D32","oa":27954},{"a":27951,"t":"code","b":[238,115,109],"m":"inc","o":"name_cursor","oa":28019},{"a":27954,"l":"r_6D32","t":"code","b":[96],"m":"rts","x":[27934,27938,27949]},{"a":27955,"l":"b_6D33","t":"code","b":[172,115,109],"m":"ldy","o":"name_cursor","oa":28019,"x":[27922]},{"a":27958,"t":"code","b":[240,6],"m":"beq","o":"b_6D3E","oa":27966},{"a":27960,"t":"code","b":[206,115,109],"m":"dec","o":"name_cursor","oa":28019},{"a":27963,"t":"code","b":[172,115,109],"m":"ldy","o":"name_cursor","oa":28019},{"a":27966,"l":"b_6D3E","t":"code","b":[169,48],"m":"lda","o":"#$30","x":[27958]},{"a":27968,"t":"code","b":[153,118,109],"m":"sta","o":"name_buffer,y","oa":28022},{"a":27971,"t":"code","b":[96],"m":"rts"},{"a":27972,"l":"draw_name_field","c":"Draws the name field at column X, row Y with length A: stores the position in both records ($6D74/$6D75 and $6D82/$6D83), ends the text after A characters with $FF $FF, prints the blank record at $6D82 and then the name record at $6D74 in the large font in colour 0 ($8CF4).","t":"code","b":[142,116,109],"m":"stx","o":"name_record","oa":28020,"x":[27863]},{"a":27975,"t":"code","b":[140,117,109],"m":"sty","o":"name_record_row","oa":28021},{"a":27978,"t":"code","b":[142,130,109],"m":"stx","o":"name_blank_record","oa":28034},{"a":27981,"t":"code","b":[140,131,109],"m":"sty","o":"name_blank_row","oa":28035},{"a":27984,"t":"code","b":[141,114,109],"m":"sta","o":"name_length","oa":28018},{"a":27987,"t":"code","b":[168],"m":"tay"},{"a":27988,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":27990,"t":"code","b":[153,118,109],"m":"sta","o":"name_buffer,y","oa":28022},{"a":27993,"t":"code","b":[153,119,109],"m":"sta","o":"f_6D77,y","oa":28023},{"a":27996,"t":"code","b":[174,146,109],"m":"ldx","o":"ptr_name_blank_record","oa":28050},{"a":27999,"t":"code","b":[172,147,109],"m":"ldy","o":"a_6D93","oa":28051},{"a":28002,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":28004,"t":"code","b":[32,244,140],"m":"jsr","o":"print_page_large","oa":36084},{"a":28007,"t":"code","b":[174,144,109],"m":"ldx","o":"ptr_name_record","oa":28048},{"a":28010,"t":"code","b":[172,145,109],"m":"ldy","o":"a_6D91","oa":28049},{"a":28013,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":28015,"t":"code","b":[76,244,140],"m":"jmp","o":"print_page_large","oa":36084},{"a":28018,"l":"name_length","c":"Length of the field being edited (3 or 10), set by $6D50; $6D2A stops the cursor there.","t":"byte","b":[0],"x":[27946,27984]},{"a":28019,"l":"name_cursor","c":"Cursor in the name buffer, the number of characters typed (0 to the length); $6CDA needs it non-zero for RETURN.","t":"byte","b":[0],"x":[27866,27878,27907,27940,27951,27955,27960,27963]},{"a":28020,"l":"name_record","c":"Text record of the name field: this byte is its column (X at $6D44), then the row at $6D75, the ten characters $6D76-$6D7F and the terminators $6D44 writes after them; pointer at $6D90.","t":"byte","b":[0],"x":[27972]},{"a":28021,"l":"name_record_row","c":"Row byte of the name record at $6D74 ($6D47), and the base the name copies use as $6D75,Y with Y from 1 ($6C4B, $6C6D, $6C84, $6CAD, $6CFD), so that Y = 1 is the first character.","t":"byte","b":[0],"x":[27723,27757,27780,27821,27901,27975]},{"a":28022,"l":"name_buffer","c":"First character of the ten-character name buffer $6D76-$6D7F (stored at $6D27, $6D40, filled at $6CEF, ended at $6D56). As loaded it holds CC 1F 02 90 14 CC 20 02 B0 0F A9 01 to $6D81, the same bytes as the instructions at $6FC8-$6FD3: leftovers, overwritten before use.","t":"byte","b":[204],"x":[27887,27943,27968,27990]},{"a":28023,"l":"f_6D77","c":"Second character of the name buffer, named because $6D59 writes the second $FF terminator as $6D77,Y; its span covers the rest of the buffer to $6D7F and $6D80-$6D81, where the terminators of a ten-character field land.","t":"byte","b":[31,2,144,20,204,32,2,176],"x":[27993]},{"a":28031,"t":"byte","b":[15,169,1]},{"a":28034,"l":"name_blank_record","c":"Blanking record for the name field: column here, row at $6D83 (both set by $6D44), ten spaces $6D84-$6D8D and $FF $FF; printed before the name so a deleted character disappears.","t":"byte","b":[0],"x":[27978]},{"a":28035,"l":"name_blank_row","c":"Row byte of the blanking record at $6D82 ($6D4D), followed by its ten spaces and $FF $FF ($6D84-$6D8F).","t":"byte","b":[0,32,32,32,32,32,32,32],"x":[27981]},{"a":28043,"t":"byte","b":[32,32,32,255,255]},{"a":28048,"l":"ptr_name_record","c":"Pointer to the name record $6D74 (low byte), loaded into X at $6D67 for the printer.","t":"byte","b":[116],"x":[28007]},{"a":28049,"l":"a_6D91","c":"High byte ($6D) of the name record pointer at $6D90, loaded into Y at $6D6A.","t":"byte","b":[109],"x":[28010]},{"a":28050,"l":"ptr_name_blank_record","c":"Pointer to the blanking record $6D82 (low byte), loaded into X at $6D5C.","t":"byte","b":[130],"x":[27996]},{"a":28051,"l":"a_6D93","c":"High byte ($6D) of the blanking record pointer at $6D92, loaded into Y at $6D5F.","t":"byte","b":[109],"x":[27999]},{"a":28052,"l":"tbl_key_to_petscii","c":"Keyboard table, 65 bytes, indexed by the key number $73D4 leaves in $B254 (64 minus the key's matrix row x 8 + column; 0 no key): 1 RUN/STOP $03, 2 Q, 4 space, 5 '2', 7 left arrow, 8 '1' as $21, 9 '/', ..., 58-61 F5 F3 F1 F7 ($87 $86 $85 $88), 62 CRSR right $1D, 63 RETURN $0D, 64 DEL $14; $00 for the shift, C= and CTRL keys. Read at $6D0D by the name entry; decoding the title's keys with it gives 'BOREWIZ' for the cheat table at $AFCE and 0-5 for the continue keys at $AF7F.","t":"byte","b":[0,3,81,0,32,50,0,95],"x":[27917]},{"a":28060,"t":"byte","b":[33,47,94,61,0,19,59,42]},{"a":28068,"t":"byte","b":[92,44,64,58,46,45,76,80]},{"a":28076,"t":"byte","b":[43,78,79,75,77,48,74,73]},{"a":28084,"t":"byte","b":[57,86,85,72,66,56,71,89]},{"a":28092,"t":"byte","b":[55,88,84,70,67,54,68,82]},{"a":28100,"t":"byte","b":[53,0,69,83,90,52,65,87]},{"a":28108,"t":"byte","b":[51,17,135,134,133,136,29,13]},{"a":28116,"t":"byte","b":[20]},{"a":28117,"l":"band_hs_line_2c","c":"High-score entry screen (display list $B482, installed at $6BA4), band from raster line $2C: background $D021 = $EBD2, the front of the three-colour ring $EBD2-$EBD5 that $9916 shifts every third frame (one of the colour cycles $9436 runs each frame while a name is typed).","t":"code","b":[173,210,235],"m":"lda","o":"colours_d2","oa":60370},{"a":28120,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":28123,"t":"code","b":[96],"m":"rts"},{"a":28124,"l":"band_hs_line_4e","c":"High-score entry screen band from line $4E: background = $EBF1, which $997D sets every fourth frame from the eight colours at $B5DF.","t":"code","b":[173,241,235],"m":"lda","o":"colours_f1","oa":60401},{"a":28127,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":28130,"t":"code","b":[96],"m":"rts"},{"a":28131,"l":"band_hs_line_8e","c":"High-score entry screen band from line $8E: calls $973B twice with Y = $90, which sets the background every second line from $91 to $9F to $EBE4-$EBE7, twice over (the ring $EBE4-$EBF0 that $98E9 shifts every third frame).","t":"code","b":[160,144],"m":"ldy","o":"#$90"},{"a":28133,"t":"code","b":[32,59,151],"m":"jsr","o":"colour_row_red_ramp","oa":38715},{"a":28136,"t":"code","b":[76,59,151],"m":"jmp","o":"colour_row_red_ramp","oa":38715},{"a":28139,"l":"band_hs_line_a6","c":"High-score entry screen band from line $A6: background = $EBD6, set by $996A from the four colours at $B5F3.","t":"code","b":[173,214,235],"m":"lda","o":"colours_d6","oa":60374},{"a":28142,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":28145,"t":"code","b":[96],"m":"rts"},{"a":28146,"l":"band_hs_line_b6","c":"High-score entry screen band from line $B6: background = $EBE4, the front of $98E9's ring.","t":"code","b":[173,228,235],"m":"lda","o":"colours_e4","oa":60388},{"a":28149,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":28152,"t":"code","b":[96],"m":"rts"},{"a":28153,"l":"band_hs_line_cf","c":"High-score entry screen band from line $CF: background = $EBD1, which $994A sets every seventh frame from the four colours at $B5EF.","t":"code","b":[173,209,235],"m":"lda","o":"title_band_bg","oa":60369},{"a":28156,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":28159,"t":"code","b":[96],"m":"rts"},{"a":28160,"l":"band_hs_line_e6","c":"High-score entry screen band from line $E6: calls $9401 twice with Y = $E8, which steps the background every second line through $EBDA down to $EBD7 (the ring $98BE shifts) and ends each call with colour 6 (blue).","t":"code","b":[160,232],"m":"ldy","o":"#$E8"},{"a":28162,"t":"code","b":[32,1,148],"m":"jsr","o":"colour_row_blue_ramp","oa":37889},{"a":28165,"t":"code","b":[76,1,148],"m":"jmp","o":"colour_row_blue_ramp","oa":37889},{"a":28168,"l":"save_side1_state","c":"Saves the per-side block $B116-$B12D (24 bytes) as side 1's state at $E3C0-$E3D7.","t":"code","b":[160,24],"m":"ldy","o":"#$18","x":[26731,28221]},{"a":28170,"l":"b_6E0A","t":"code","b":[185,21,177],"m":"lda","o":"player_block_base,y","oa":45333,"x":[28177]},{"a":28173,"t":"code","b":[153,191,227],"m":"sta","o":"player1_save_minus_1,y","oa":58303},{"a":28176,"t":"code","b":[136],"m":"dey"},{"a":28177,"t":"code","b":[208,247],"m":"bne","o":"b_6E0A","oa":28170},{"a":28179,"t":"code","b":[96],"m":"rts"},{"a":28180,"l":"save_side2_state","c":"Saves the per-side block $B116-$B12D as side 2's state at $E3D8-$E3EF.","t":"code","b":[160,24],"m":"ldy","o":"#$18","x":[26734,28223]},{"a":28182,"l":"b_6E16","t":"code","b":[185,21,177],"m":"lda","o":"player_block_base,y","oa":45333,"x":[28189]},{"a":28185,"t":"code","b":[153,215,227],"m":"sta","o":"player2_save_minus_1,y","oa":58327},{"a":28188,"t":"code","b":[136],"m":"dey"},{"a":28189,"t":"code","b":[208,247],"m":"bne","o":"b_6E16","oa":28182},{"a":28191,"t":"code","b":[96],"m":"rts"},{"a":28192,"l":"load_side1_state","c":"Loads side 1's saved state $E3C0-$E3D7 into the per-side block $B116-$B12D.","t":"code","b":[160,24],"m":"ldy","o":"#$18","x":[27485,28234]},{"a":28194,"l":"b_6E22","t":"code","b":[185,191,227],"m":"lda","o":"player1_save_minus_1,y","oa":58303,"x":[28201]},{"a":28197,"t":"code","b":[153,21,177],"m":"sta","o":"player_block_base,y","oa":45333},{"a":28200,"t":"code","b":[136],"m":"dey"},{"a":28201,"t":"code","b":[208,247],"m":"bne","o":"b_6E22","oa":28194},{"a":28203,"t":"code","b":[96],"m":"rts"},{"a":28204,"l":"load_side2_state","c":"Loads side 2's saved state $E3D8-$E3EF into the per-side block $B116-$B12D.","t":"code","b":[160,24],"m":"ldy","o":"#$18","x":[27509,28236]},{"a":28206,"l":"b_6E2E","t":"code","b":[185,215,227],"m":"lda","o":"player2_save_minus_1,y","oa":58327,"x":[28213]},{"a":28209,"t":"code","b":[153,21,177],"m":"sta","o":"player_block_base,y","oa":45333},{"a":28212,"t":"code","b":[136],"m":"dey"},{"a":28213,"t":"code","b":[208,247],"m":"bne","o":"b_6E2E","oa":28206},{"a":28215,"t":"code","b":[96],"m":"rts"},{"a":28216,"l":"save_side_state","c":"Saves the per-side block for the current side $BFD9 (1: $6E08, 2: $6E14), after each life.","t":"code","b":[173,217,191],"m":"lda","o":"side_playing","oa":49113,"x":[25537]},{"a":28219,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":28221,"t":"code","b":[240,201],"m":"beq","o":"save_side1_state","oa":28168},{"a":28223,"t":"code","b":[76,20,110],"m":"jmp","o":"save_side2_state","oa":28180,"x":[16088]},{"a":28226,"l":"reset_life_and_load_side","c":"Start of each life: resets the Wizball's variables $B20D-$B26C, the sprite table and the death flags $B1CF/$B1D0 ($7CDA), then loads the current side's saved block (1: $6E20, 2: $6E2C).","t":"code","b":[32,218,124],"m":"jsr","o":"reset_wizball_state","oa":31962,"x":[25504]},{"a":28229,"t":"code","b":[173,217,191],"m":"lda","o":"side_playing","oa":49113},{"a":28232,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":28234,"t":"code","b":[240,212],"m":"beq","o":"load_side1_state","oa":28192},{"a":28236,"t":"code","b":[76,44,110],"m":"jmp","o":"load_side2_state","oa":28204},{"a":28239,"l":"reapply_permanent_features","c":"Re-applies the side's permanent Wiz-lab features at the start of a life: waits for raster line $23, sets $B074 (non-zero: $72DF skips the activation sound and the band at $89D4 uses sprite multicolour 2) and activates each icon number in $B11E down to $B116 through $72DF, then clears $B074.","t":"code","b":[173,18,208],"m":"lda","o":"vic_raster","x":[25571,28244]},{"a":28242,"t":"code","b":[201,35],"m":"cmp","o":"#$23"},{"a":28244,"t":"code","b":[208,249],"m":"bne","o":"reapply_permanent_features","oa":28239},{"a":28246,"t":"code","b":[141,116,176],"m":"sta","o":"lab_icon_mode","oa":45172},{"a":28249,"t":"code","b":[160,9],"m":"ldy","o":"#$09"},{"a":28251,"l":"b_6E5B","t":"code","b":[185,21,177],"m":"lda","o":"player_block_base,y","oa":45333,"x":[28265]},{"a":28254,"t":"code","b":[141,88,178],"m":"sta","o":"icon_cursor","oa":45656},{"a":28257,"t":"code","b":[152],"m":"tya"},{"a":28258,"t":"code","b":[72],"m":"pha"},{"a":28259,"t":"code","b":[32,223,114],"m":"jsr","o":"take_lit_icon","oa":29407},{"a":28262,"t":"code","b":[104],"m":"pla"},{"a":28263,"t":"code","b":[168],"m":"tay"},{"a":28264,"t":"code","b":[136],"m":"dey"},{"a":28265,"t":"code","b":[208,240],"m":"bne","o":"b_6E5B","oa":28251},{"a":28267,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":28269,"t":"code","b":[141,116,176],"m":"sta","o":"lab_icon_mode","oa":45172},{"a":28272,"t":"code","b":[96],"m":"rts"},{"a":28273,"l":"wait_raster_bottom","c":"Waits until the raster is between lines $CD and $FE (205-254, bit 8 clear): the pace of the colour-completed loop and the pause loop, and of the title loops ($8FEE).","t":"code","b":[173,17,208],"m":"lda","o":"vic_control1","x":[25807,28278,28288,28355,36846,43899,44700]},{"a":28276,"t":"code","b":[41,128],"m":"and","o":"#$80"},{"a":28278,"t":"code","b":[208,249],"m":"bne","o":"wait_raster_bottom","oa":28273},{"a":28280,"t":"code","b":[173,18,208],"m":"lda","o":"vic_raster"},{"a":28283,"t":"code","b":[56],"m":"sec"},{"a":28284,"t":"code","b":[233,205],"m":"sbc","o":"#$CD"},{"a":28286,"t":"code","b":[201,50],"m":"cmp","o":"#$32"},{"a":28288,"t":"code","b":[176,239],"m":"bcs","o":"wait_raster_bottom","oa":28273},{"a":28290,"t":"code","b":[96],"m":"rts"},{"a":28291,"l":"wait_raster_low","c":"Waits until the raster is between lines 200 and 255 ($C8-$FF with bit 8 clear): the first synchronisation point of the frame loop ($640E) and the bonus loop ($6576).","t":"code","b":[173,17,208],"m":"lda","o":"vic_control1","x":[25614,25974,28296,28303,30403]},{"a":28294,"t":"code","b":[41,128],"m":"and","o":"#$80"},{"a":28296,"t":"code","b":[208,249],"m":"bne","o":"wait_raster_low","oa":28291},{"a":28298,"t":"code","b":[173,18,208],"m":"lda","o":"vic_raster"},{"a":28301,"t":"code","b":[201,200],"m":"cmp","o":"#$C8"},{"a":28303,"t":"code","b":[144,242],"m":"bcc","o":"wait_raster_low","oa":28291},{"a":28305,"t":"code","b":[96],"m":"rts"},{"a":28306,"l":"wait_line_266_and_move_stars","c":"Waits for raster line 266 exactly (bit 8 set, $D012 = $0A), then moves the stars ($747E); X is kept. Used as the frame wait of the game-over loop, by $678A and by many routines from $82E1 on.","t":"code","b":[138],"m":"txa","x":[26507,27284,33505,33548,33590,44686,44737,44889]},{"a":28307,"t":"code","b":[72],"m":"pha"},{"a":28308,"l":"b_6E94","t":"code","b":[173,17,208],"m":"lda","o":"vic_control1","x":[28313,28320]},{"a":28311,"t":"code","b":[41,128],"m":"and","o":"#$80"},{"a":28313,"t":"code","b":[240,249],"m":"beq","o":"b_6E94","oa":28308},{"a":28315,"t":"code","b":[173,18,208],"m":"lda","o":"vic_raster"},{"a":28318,"t":"code","b":[201,10],"m":"cmp","o":"#$0A"},{"a":28320,"t":"code","b":[208,242],"m":"bne","o":"b_6E94","oa":28308},{"a":28322,"t":"code","b":[32,126,116],"m":"jsr","o":"move_stars","oa":29822},{"a":28325,"t":"code","b":[104],"m":"pla"},{"a":28326,"t":"code","b":[170],"m":"tax"},{"a":28327,"t":"code","b":[96],"m":"rts"},{"a":28328,"l":"wait_raster_top","c":"Waits until the raster is between lines 256 and 275 (bit 8 set, $D012 below $14), below the visible screen; used before screen switches ($7CB4, $8C44, $8C50) and as the frame wait of the get-ready and name-entry loops.","t":"code","b":[173,18,208],"m":"lda","o":"vic_raster","x":[26920,27845,28333,28340,31924,35908,35920,36994,38078]},{"a":28331,"t":"code","b":[201,20],"m":"cmp","o":"#$14"},{"a":28333,"t":"code","b":[176,249],"m":"bcs","o":"wait_raster_top","oa":28328},{"a":28335,"t":"code","b":[173,17,208],"m":"lda","o":"vic_control1"},{"a":28338,"t":"code","b":[41,128],"m":"and","o":"#$80"},{"a":28340,"t":"code","b":[240,242],"m":"beq","o":"wait_raster_top","oa":28328},{"a":28342,"t":"code","b":[96],"m":"rts"},{"a":28343,"l":"check_pause","c":"Pause: returns unless the play-key scan left RUN/STOP ($B254 = 1; a test for Q, 2, at $6EBE branches to the RTS either way). Paused, it loops on the raster wait $6E71 and the play-key scan $7429, several passes in each frame's lines 205-254 (about seven, measured live): RUN/STOP again resumes, Q ($6ED7) clears the continue level $AF7E and the BOREWIZ flag $BB07, drops one return address and jumps to the title $8F61. The CMP #5 at $6ECC is overwritten by the CMP #2 after it. Live: RUN/STOP stopped the frame loop, and Q then reached the title.","t":"code","b":[173,84,178],"m":"lda","o":"key_new","oa":45652,"x":[25631,25810,25991]},{"a":28346,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":28348,"t":"code","b":[240,5],"m":"beq","o":"pause_loop","oa":28355},{"a":28350,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":28352,"t":"code","b":[208,0],"m":"bne","o":"r_6EC2","oa":28354},{"a":28354,"l":"r_6EC2","t":"code","b":[96],"m":"rts","x":[28352]},{"a":28355,"l":"pause_loop","t":"code","b":[32,113,110],"m":"jsr","o":"wait_raster_bottom","oa":28273,"x":[28348,28372]},{"a":28358,"t":"code","b":[32,41,116],"m":"jsr","o":"scan_keys_play","oa":29737},{"a":28361,"t":"code","b":[173,84,178],"m":"lda","o":"key_new","oa":45652},{"a":28364,"t":"code","b":[201,5],"m":"cmp","o":"#$05"},{"a":28366,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":28368,"t":"code","b":[240,5],"m":"beq","o":"quit_to_title","oa":28375},{"a":28370,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":28372,"t":"code","b":[208,237],"m":"bne","o":"pause_loop","oa":28355},{"a":28374,"t":"code","b":[96],"m":"rts"},{"a":28375,"l":"quit_to_title","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[28368]},{"a":28377,"t":"code","b":[141,126,175],"m":"sta","o":"start_level","oa":44926},{"a":28380,"t":"code","b":[141,7,187],"m":"sta","o":"borewiz","oa":47879},{"a":28383,"t":"code","b":[104],"m":"pla"},{"a":28384,"t":"code","b":[104],"m":"pla"},{"a":28385,"t":"code","b":[76,97,143],"m":"jmp","o":"start_attract","oa":36705},{"a":28388,"l":"unused_complete_level","c":"41 bytes of code that no traced instruction reaches: if level $B128's count $B11F,X is not yet 3 it sets it to 3, clears the key $B254, takes the level's colours from $B1D1 into $B27D/$B27E and jumps to $ADEF, which recomputes $B1CE and, with the count at 3, runs the level-completed sequence ($AE11). Its BEQ at $6EEC targets the RTS at $6EC2, inside $6EB7, whose test for Q at $6EBE branches nowhere ($D0 $00): apparently a developer key that completed the level, disconnected.","t":"byte","b":[174,40,177,189,31,177,201,3]},{"a":28396,"t":"byte","b":[240,212,169,3,157,31,177,169]},{"a":28404,"t":"byte","b":[0,141,84,178,173,40,177,10]},{"a":28412,"t":"byte","b":[10,170,189,209,177,141,125,178]},{"a":28420,"t":"byte","b":[189,210,177,141,126,178,76,239]},{"a":28428,"t":"byte","b":[173]},{"a":28429,"l":"update_shots","c":"Moves and draws the character-mode shots, once a frame: six 12-byte slots at $0480-$04C7 (0-1 the Wizball's fire from $8467, 2 the cat's from $881F, 3-5 the spray from $8505), each handled by $6F21 while its character $0484,X is non-zero. Slot layout: +0 column, +1 row, +2/+3 step, +4 character (0 free), +5 colour, +6 saved screen character, +7/+8 screen address high/low, +9 colour RAM high, +10 second character of a two-cell shot (0 none), +11 its saved character. $7090 restores the saved characters before the landscape moves.","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[25660,26024]},{"a":28431,"l":"b_6F0F","t":"code","b":[189,132,4],"m":"lda","o":"shot_char,x","oa":1156,"x":[28446]},{"a":28434,"t":"code","b":[240,3],"m":"beq","o":"b_6F17","oa":28439},{"a":28436,"t":"code","b":[32,33,111],"m":"jsr","o":"move_draw_shot","oa":28449},{"a":28439,"l":"b_6F17","t":"code","b":[138],"m":"txa","x":[28434]},{"a":28440,"t":"code","b":[24],"m":"clc"},{"a":28441,"t":"code","b":[105,12],"m":"adc","o":"#$0C"},{"a":28443,"t":"code","b":[170],"m":"tax"},{"a":28444,"t":"code","b":[224,72],"m":"cpx","o":"#$48"},{"a":28446,"t":"code","b":[208,239],"m":"bne","o":"b_6F0F","oa":28431},{"a":28448,"t":"code","b":[96],"m":"rts"},{"a":28449,"l":"move_draw_shot","c":"Moves shot X with the landscape's character steps (column - 1 when $B1FF is positive, + 1 when negative), then by its step; frees the slot off screen (column 39 or more, row 20 or more). Tests the aliens ($6FAE), finds the screen row (table $0500/$0519 with row + 3, screen $E000 or $E400 from $B1FD, colour RAM to match), and if the cell holds a character of $80 or more (apparently scenery) frees the slot; otherwise saves the character and draws the shot and its colour. A second cell is drawn the same way, and dropped if it meets scenery.","t":"code","b":[173,255,177],"m":"lda","o":"scroll_step","oa":45567,"x":[28436]},{"a":28452,"t":"code","b":[240,11],"m":"beq","o":"b_6F31","oa":28465},{"a":28454,"t":"code","b":[48,6],"m":"bmi","o":"b_6F2E","oa":28462},{"a":28456,"t":"code","b":[222,128,4],"m":"dec","o":"shot_column,x","oa":1152},{"a":28459,"t":"code","b":[222,128,4],"m":"dec","o":"shot_column,x","oa":1152},{"a":28462,"l":"b_6F2E","t":"code","b":[254,128,4],"m":"inc","o":"shot_column,x","oa":1152,"x":[28454]},{"a":28465,"l":"b_6F31","t":"code","b":[189,128,4],"m":"lda","o":"shot_column,x","oa":1152,"x":[28452]},{"a":28468,"t":"code","b":[24],"m":"clc"},{"a":28469,"t":"code","b":[125,130,4],"m":"adc","o":"shot_dx,x","oa":1154},{"a":28472,"t":"code","b":[157,128,4],"m":"sta","o":"shot_column,x","oa":1152},{"a":28475,"t":"code","b":[201,39],"m":"cmp","o":"#$27","x":[14839]},{"a":28477,"t":"code","b":[176,14],"m":"bcs","o":"b_6F4D","oa":28493},{"a":28479,"t":"code","b":[189,129,4],"m":"lda","o":"shot_row,x","oa":1153},{"a":28482,"t":"code","b":[24],"m":"clc"},{"a":28483,"t":"code","b":[125,131,4],"m":"adc","o":"shot_dy,x","oa":1155},{"a":28486,"t":"code","b":[157,129,4],"m":"sta","o":"shot_row,x","oa":1153},{"a":28489,"t":"code","b":[201,20],"m":"cmp","o":"#$14"},{"a":28491,"t":"code","b":[144,6],"m":"bcc","o":"b_6F53","oa":28499},{"a":28493,"l":"b_6F4D","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[28477,28545]},{"a":28495,"t":"code","b":[157,132,4],"m":"sta","o":"shot_char,x","oa":1156},{"a":28498,"t":"code","b":[96],"m":"rts"},{"a":28499,"l":"b_6F53","t":"code","b":[32,174,111],"m":"jsr","o":"test_shot_hits_alien","oa":28590,"x":[28491]},{"a":28502,"t":"code","b":[173,253,177],"m":"lda","o":"screen_shown","oa":45565},{"a":28505,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":28506,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":28507,"t":"code","b":[188,129,4],"m":"ldy","o":"shot_row,x","oa":1153},{"a":28510,"t":"code","b":[200],"m":"iny"},{"a":28511,"t":"code","b":[200],"m":"iny"},{"a":28512,"t":"code","b":[200],"m":"iny"},{"a":28513,"t":"code","b":[25,25,5],"m":"ora","o":"screen_row_hi,y","oa":1305},{"a":28516,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":28518,"t":"code","b":[157,135,4],"m":"sta","o":"shot_screen_hi,x","oa":1159},{"a":28521,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":28523,"t":"code","b":[9,216],"m":"ora","o":"#$D8"},{"a":28525,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":28527,"t":"code","b":[157,137,4],"m":"sta","o":"shot_colour_page,x","oa":1161},{"a":28530,"t":"code","b":[185,0,5],"m":"lda","o":"screen_row_lo,y","oa":1280},{"a":28533,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":28535,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":28537,"t":"code","b":[157,136,4],"m":"sta","o":"shot_screen_lo,x","oa":1160},{"a":28540,"t":"code","b":[188,128,4],"m":"ldy","o":"shot_column,x","oa":1152},{"a":28543,"t":"code","b":[177,96],"m":"lda","o":"(zp_ptr_60),y","oa":96},{"a":28545,"t":"code","b":[48,202],"m":"bmi","o":"b_6F4D","oa":28493},{"a":28547,"t":"code","b":[157,134,4],"m":"sta","o":"shot_saved_char,x","oa":1158},{"a":28550,"t":"code","b":[189,132,4],"m":"lda","o":"shot_char,x","oa":1156},{"a":28553,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":28555,"t":"code","b":[189,133,4],"m":"lda","o":"shot_colour,x","oa":1157},{"a":28558,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":28560,"t":"code","b":[189,138,4],"m":"lda","o":"shot_second_char,x","oa":1162},{"a":28563,"t":"code","b":[240,18],"m":"beq","o":"r_6FA7","oa":28583},{"a":28565,"t":"code","b":[200],"m":"iny"},{"a":28566,"t":"code","b":[177,96],"m":"lda","o":"(zp_ptr_60),y","oa":96},{"a":28568,"t":"code","b":[48,14],"m":"bmi","o":"b_6FA8","oa":28584},{"a":28570,"t":"code","b":[157,139,4],"m":"sta","o":"shot_second_saved,x","oa":1163},{"a":28573,"t":"code","b":[189,132,4],"m":"lda","o":"shot_char,x","oa":1156},{"a":28576,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":28578,"t":"code","b":[189,133,4],"m":"lda","o":"shot_colour,x","oa":1157},{"a":28581,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":28583,"l":"r_6FA7","t":"code","b":[96],"m":"rts","x":[28563]},{"a":28584,"l":"b_6FA8","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[28568]},{"a":28586,"t":"code","b":[157,138,4],"m":"sta","o":"shot_second_char,x","oa":1162},{"a":28589,"t":"code","b":[96],"m":"rts"},{"a":28590,"l":"test_shot_hits_alien","c":"Converts shot X's cell to pixel coordinates (y = row x 8 + $4B in Y, x = column x 4 + $0C in A) and falls into the alien test at $6FBE.","t":"code","b":[189,129,4],"m":"lda","o":"shot_row,x","oa":1153,"x":[28499]},{"a":28593,"t":"code","b":[10],"m":"asl","o":"a"},{"a":28594,"t":"code","b":[10],"m":"asl","o":"a"},{"a":28595,"t":"code","b":[10],"m":"asl","o":"a"},{"a":28596,"t":"code","b":[105,75],"m":"adc","o":"#$4B"},{"a":28598,"t":"code","b":[168],"m":"tay"},{"a":28599,"t":"code","b":[189,128,4],"m":"lda","o":"shot_column,x","oa":1152},{"a":28602,"t":"code","b":[10],"m":"asl","o":"a"},{"a":28603,"t":"code","b":[10],"m":"asl","o":"a"},{"a":28604,"t":"code","b":[105,12],"m":"adc","o":"#$0C"},{"a":28606,"l":"test_point_hits_alien","c":"Tests the point A (x), Y (y) against the boxes of the six aliens, $021D-$0220 (left, right, top, bottom) and every $2A bytes on, to $02EF-$02F2 in $706D. On a hit: sets that alien's hit byte ($0225 + $2A x n) to 1, frees slot X ($0484,X = 0), sets Y to the alien's offset and returns past its caller (PLA PLA RTS). Other callers ($7E98, $8613, $88FA) pass X = $48, a spare slot at $04C8-$04D3.","t":"code","b":[205,29,2],"m":"cmp","o":"alien_box_left","oa":541,"x":[32410,34325,35068]},{"a":28609,"t":"code","b":[144,30],"m":"bcc","o":"b_6FE1","oa":28641},{"a":28611,"t":"code","b":[205,30,2],"m":"cmp","o":"alien_box_right","oa":542},{"a":28614,"t":"code","b":[176,25],"m":"bcs","o":"b_6FE1","oa":28641},{"a":28616,"t":"code","b":[204,31,2],"m":"cpy","o":"alien_box_top","oa":543},{"a":28619,"t":"code","b":[144,20],"m":"bcc","o":"b_6FE1","oa":28641},{"a":28621,"t":"code","b":[204,32,2],"m":"cpy","o":"alien_box_bottom","oa":544},{"a":28624,"t":"code","b":[176,15],"m":"bcs","o":"b_6FE1","oa":28641},{"a":28626,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":28628,"t":"code","b":[141,37,2],"m":"sta","o":"alien_hit","oa":549},{"a":28631,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":28633,"t":"code","b":[157,132,4],"m":"sta","o":"shot_char,x","oa":1156},{"a":28636,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":28638,"t":"code","b":[104],"m":"pla"},{"a":28639,"t":"code","b":[104],"m":"pla"},{"a":28640,"t":"code","b":[96],"m":"rts"},{"a":28641,"l":"b_6FE1","t":"code","b":[205,71,2],"m":"cmp","o":"alien1_box_left","oa":583,"x":[28609,28614,28619,28624]},{"a":28644,"t":"code","b":[144,30],"m":"bcc","o":"b_7004","oa":28676},{"a":28646,"t":"code","b":[205,72,2],"m":"cmp","o":"alien1_box_right","oa":584},{"a":28649,"t":"code","b":[176,25],"m":"bcs","o":"b_7004","oa":28676},{"a":28651,"t":"code","b":[204,73,2],"m":"cpy","o":"alien1_box_top","oa":585},{"a":28654,"t":"code","b":[144,20],"m":"bcc","o":"b_7004","oa":28676},{"a":28656,"t":"code","b":[204,74,2],"m":"cpy","o":"alien1_box_bottom","oa":586},{"a":28659,"t":"code","b":[176,15],"m":"bcs","o":"b_7004","oa":28676},{"a":28661,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":28663,"t":"code","b":[141,79,2],"m":"sta","o":"alien1_hit","oa":591},{"a":28666,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":28668,"t":"code","b":[157,132,4],"m":"sta","o":"shot_char,x","oa":1156},{"a":28671,"t":"code","b":[160,42],"m":"ldy","o":"#$2A"},{"a":28673,"t":"code","b":[104],"m":"pla"},{"a":28674,"t":"code","b":[104],"m":"pla"},{"a":28675,"t":"code","b":[96],"m":"rts"},{"a":28676,"l":"b_7004","t":"code","b":[205,113,2],"m":"cmp","o":"alien2_box_left","oa":625,"x":[28644,28649,28654,28659]},{"a":28679,"t":"code","b":[144,30],"m":"bcc","o":"b_7027","oa":28711},{"a":28681,"t":"code","b":[205,114,2],"m":"cmp","o":"alien2_box_right","oa":626},{"a":28684,"t":"code","b":[176,25],"m":"bcs","o":"b_7027","oa":28711},{"a":28686,"t":"code","b":[204,115,2],"m":"cpy","o":"alien2_box_top","oa":627},{"a":28689,"t":"code","b":[144,20],"m":"bcc","o":"b_7027","oa":28711},{"a":28691,"t":"code","b":[204,116,2],"m":"cpy","o":"alien2_box_bottom","oa":628},{"a":28694,"t":"code","b":[176,15],"m":"bcs","o":"b_7027","oa":28711},{"a":28696,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":28698,"t":"code","b":[141,121,2],"m":"sta","o":"alien2_hit","oa":633},{"a":28701,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":28703,"t":"code","b":[157,132,4],"m":"sta","o":"shot_char,x","oa":1156},{"a":28706,"t":"code","b":[160,84],"m":"ldy","o":"#$54"},{"a":28708,"t":"code","b":[104],"m":"pla"},{"a":28709,"t":"code","b":[104],"m":"pla"},{"a":28710,"t":"code","b":[96],"m":"rts"},{"a":28711,"l":"b_7027","t":"code","b":[205,155,2],"m":"cmp","o":"alien3_box_left","oa":667,"x":[28679,28684,28689,28694]},{"a":28714,"t":"code","b":[144,30],"m":"bcc","o":"b_704A","oa":28746},{"a":28716,"t":"code","b":[205,156,2],"m":"cmp","o":"alien3_box_right","oa":668},{"a":28719,"t":"code","b":[176,25],"m":"bcs","o":"b_704A","oa":28746},{"a":28721,"t":"code","b":[204,157,2],"m":"cpy","o":"alien3_box_top","oa":669},{"a":28724,"t":"code","b":[144,20],"m":"bcc","o":"b_704A","oa":28746},{"a":28726,"t":"code","b":[204,158,2],"m":"cpy","o":"alien3_box_bottom","oa":670},{"a":28729,"t":"code","b":[176,15],"m":"bcs","o":"b_704A","oa":28746},{"a":28731,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":28733,"t":"code","b":[141,163,2],"m":"sta","o":"alien3_hit","oa":675},{"a":28736,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":28738,"t":"code","b":[157,132,4],"m":"sta","o":"shot_char,x","oa":1156},{"a":28741,"t":"code","b":[160,126],"m":"ldy","o":"#$7E"},{"a":28743,"t":"code","b":[104],"m":"pla"},{"a":28744,"t":"code","b":[104],"m":"pla"},{"a":28745,"t":"code","b":[96],"m":"rts"},{"a":28746,"l":"b_704A","t":"code","b":[205,197,2],"m":"cmp","o":"alien4_box_left","oa":709,"x":[28714,28719,28724,28729]},{"a":28749,"t":"code","b":[144,30],"m":"bcc","o":"b_706D","oa":28781},{"a":28751,"t":"code","b":[205,198,2],"m":"cmp","o":"alien4_box_right","oa":710},{"a":28754,"t":"code","b":[176,25],"m":"bcs","o":"b_706D","oa":28781},{"a":28756,"t":"code","b":[204,199,2],"m":"cpy","o":"alien4_box_top","oa":711},{"a":28759,"t":"code","b":[144,20],"m":"bcc","o":"b_706D","oa":28781},{"a":28761,"t":"code","b":[204,200,2],"m":"cpy","o":"alien4_box_bottom","oa":712},{"a":28764,"t":"code","b":[176,15],"m":"bcs","o":"b_706D","oa":28781},{"a":28766,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":28768,"t":"code","b":[141,205,2],"m":"sta","o":"alien4_hit","oa":717},{"a":28771,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":28773,"t":"code","b":[157,132,4],"m":"sta","o":"shot_char,x","oa":1156},{"a":28776,"t":"code","b":[160,168],"m":"ldy","o":"#$A8"},{"a":28778,"t":"code","b":[104],"m":"pla"},{"a":28779,"t":"code","b":[104],"m":"pla"},{"a":28780,"t":"code","b":[96],"m":"rts"},{"a":28781,"l":"b_706D","t":"code","b":[205,239,2],"m":"cmp","o":"alien5_box_left","oa":751,"x":[28749,28754,28759,28764]},{"a":28784,"t":"code","b":[144,29],"m":"bcc","o":"r_708F","oa":28815},{"a":28786,"t":"code","b":[205,240,2],"m":"cmp","o":"alien5_box_right","oa":752},{"a":28789,"t":"code","b":[176,24],"m":"bcs","o":"r_708F","oa":28815},{"a":28791,"t":"code","b":[204,241,2],"m":"cpy","o":"alien5_box_top","oa":753},{"a":28794,"t":"code","b":[144,19],"m":"bcc","o":"r_708F","oa":28815},{"a":28796,"t":"code","b":[204,242,2],"m":"cpy","o":"alien5_box_bottom","oa":754},{"a":28799,"t":"code","b":[176,14],"m":"bcs","o":"r_708F","oa":28815},{"a":28801,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":28803,"t":"code","b":[141,247,2],"m":"sta","o":"alien5_hit","oa":759},{"a":28806,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":28808,"t":"code","b":[157,132,4],"m":"sta","o":"shot_char,x","oa":1156},{"a":28811,"t":"code","b":[160,210],"m":"ldy","o":"#$D2"},{"a":28813,"t":"code","b":[104],"m":"pla"},{"a":28814,"t":"code","b":[104],"m":"pla"},{"a":28815,"l":"r_708F","t":"code","b":[96],"m":"rts","x":[28784,28789,28794,28799]},{"a":28816,"l":"erase_bullets","c":"Erases the Wizball's bullets before they move: for each of the six 12-byte bullet records at $0480-$04C7 (X = $3C down to 0) whose +4 byte (the bullet's character; 0 = free slot) is non-zero, calls erase_bullet to put back what the bullet covered. Once a frame from the frame loop ($642A) and from $64B6, $6584, $6A6C; $6F0D then moves and redraws the bullets. Record: +0 column, +1 row, +2/+3 column and row step, +4 character, +5 colour, +6 character saved under it, +7 screen address high, +8 screen and colour address low, +9 colour RAM high, +10 non-zero when two cells wide, +11 character saved under the second cell.","t":"code","b":[162,60],"m":"ldx","o":"#$3C","x":[25642,25782,25988,27244]},{"a":28818,"l":"b_7092","t":"code","b":[189,132,4],"m":"lda","o":"shot_char,x","oa":1156,"x":[28833]},{"a":28821,"t":"code","b":[240,3],"m":"beq","o":"b_709A","oa":28826},{"a":28823,"t":"code","b":[32,164,112],"m":"jsr","o":"erase_bullet","oa":28836},{"a":28826,"l":"b_709A","t":"code","b":[138],"m":"txa","x":[28821]},{"a":28827,"t":"code","b":[56],"m":"sec"},{"a":28828,"t":"code","b":[233,12],"m":"sbc","o":"#$0C"},{"a":28830,"t":"code","b":[170],"m":"tax"},{"a":28831,"t":"code","b":[224,244],"m":"cpx","o":"#$F4"},{"a":28833,"t":"code","b":[208,239],"m":"bne","o":"b_7092","oa":28818},{"a":28835,"t":"code","b":[96],"m":"rts"},{"a":28836,"l":"erase_bullet","c":"Erases one bullet (X = its record offset in $0480-$04C7): writes the saved character (+6) back at column +0 of the screen row at +7/+8 and the landscape colour from $894D (the level's character colour $B27F, or 8 while $8959 is set) at the colour RAM row +9/+8; when +10 is non-zero it also restores the next cell from +11. Uses $60/$61 (screen) and $62/$63 (colour RAM) as pointers.","t":"code","b":[189,135,4],"m":"lda","o":"shot_screen_hi,x","oa":1159,"x":[28823]},{"a":28839,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":28841,"t":"code","b":[189,137,4],"m":"lda","o":"shot_colour_page,x","oa":1161},{"a":28844,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":28846,"t":"code","b":[189,136,4],"m":"lda","o":"shot_screen_lo,x","oa":1160},{"a":28849,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":28851,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":28853,"t":"code","b":[189,134,4],"m":"lda","o":"shot_saved_char,x","oa":1158},{"a":28856,"t":"code","b":[188,128,4],"m":"ldy","o":"shot_column,x","oa":1152},{"a":28859,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":28861,"t":"code","b":[32,77,137],"m":"jsr","o":"get_scenery_colour","oa":35149},{"a":28864,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":28866,"t":"code","b":[189,138,4],"m":"lda","o":"shot_second_char,x","oa":1162},{"a":28869,"t":"code","b":[240,11],"m":"beq","o":"r_70D2","oa":28882},{"a":28871,"t":"code","b":[200],"m":"iny"},{"a":28872,"t":"code","b":[189,139,4],"m":"lda","o":"shot_second_saved,x","oa":1163},{"a":28875,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":28877,"t":"code","b":[32,77,137],"m":"jsr","o":"get_scenery_colour","oa":35149},{"a":28880,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":28882,"l":"r_70D2","t":"code","b":[96],"m":"rts","x":[28869]},{"a":28883,"l":"reset_scores","c":"New game ($6395, once before the first turn): clears both players' score digits $BFDA-$BFE7 (player one $BFDA-$BFE0, player two $BFE1-$BFE7: an overflow digit and six digits each) and copies the six PETSCII digits of the first high-score table row ($BFEB-$BFF0, after \"1. \" at $BFE8) into hiscore_digits ($71D4-$71D9) as values 0-9.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[25493]},{"a":28885,"t":"code","b":[160,14],"m":"ldy","o":"#$0E"},{"a":28887,"l":"b_70D7","t":"code","b":[153,217,191],"m":"sta","o":"side_playing,y","oa":49113,"x":[28891]},{"a":28890,"t":"code","b":[136],"m":"dey"},{"a":28891,"t":"code","b":[208,250],"m":"bne","o":"b_70D7","oa":28887},{"a":28893,"t":"code","b":[160,6],"m":"ldy","o":"#$06"},{"a":28895,"l":"b_70DF","t":"code","b":[185,234,191],"m":"lda","o":"best_score_digits_base,y","oa":49130,"x":[28905]},{"a":28898,"t":"code","b":[56],"m":"sec"},{"a":28899,"t":"code","b":[233,48],"m":"sbc","o":"#$30"},{"a":28901,"t":"code","b":[153,211,113],"m":"sta","o":"hiscore_base,y","oa":29139},{"a":28904,"t":"code","b":[136],"m":"dey"},{"a":28905,"t":"code","b":[208,244],"m":"bne","o":"b_70DF","oa":28895},{"a":28907,"t":"code","b":[96],"m":"rts"},{"a":28908,"l":"draw_score_line","c":"Draws the score line at the top of the landscape screen $E000: colour RAM rows 0-1 ($D800-$D84F) light blue ($0E), clears hiscore_beaten, calls add_score with 0 points so both scores and the high score are printed on row 1, then prints the 40-byte header from $71E2 on row 0 ($E000-$E027, AND #$3F): \"1UP\" at columns 0-2, \"HI\" at 19-20, \"2UP\" at 37-39. Called from the outer cycle ($63A9) and on leaving the Wiz-lab ($B070).","t":"code","b":[160,80],"m":"ldy","o":"#$50","x":[25513,45168]},{"a":28910,"l":"b_70EE","t":"code","b":[169,14],"m":"lda","o":"#$0E","x":[28916]},{"a":28912,"t":"code","b":[153,255,215],"m":"sta","o":"$D7FF,y"},{"a":28915,"t":"code","b":[136],"m":"dey"},{"a":28916,"t":"code","b":[208,248],"m":"bne","o":"b_70EE","oa":28910},{"a":28918,"t":"code","b":[140,10,114],"m":"sty","o":"hiscore_beaten","oa":29194},{"a":28921,"t":"code","b":[152],"m":"tya"},{"a":28922,"t":"code","b":[32,11,113],"m":"jsr","o":"add_score","oa":28939},{"a":28925,"t":"code","b":[160,40],"m":"ldy","o":"#$28"},{"a":28927,"l":"b_70FF","t":"code","b":[185,225,113],"m":"lda","o":"text_score_header,y","oa":29153,"x":[28936]},{"a":28930,"t":"code","b":[41,63],"m":"and","o":"#$3F"},{"a":28932,"t":"code","b":[153,255,223],"m":"sta","o":"$DFFF,y"},{"a":28935,"t":"code","b":[136],"m":"dey"},{"a":28936,"t":"code","b":[208,245],"m":"bne","o":"b_70FF","oa":28927},{"a":28938,"t":"code","b":[96],"m":"rts"},{"a":28939,"l":"add_score","c":"Adds A x 10 points to the current player's score ($BFD9 = 1 or 2; X preserved in $66) and reprints the scores. A score is six decimal digits, one per byte, most significant first: $BFDB-$BFE0 for player one, $BFE2-$BFE7 for player two, each after an overflow digit; tbl_player_score_offset gives their offset from $BFD4 (7 or 14). A is split by repeated subtraction: hundreds go to the thousands digit, tens to the hundreds, the rest to the tens; the units digit is never added to, so scores end in 0. Carries run up six places; an overflow sets all six digits to 9, so the score stops at 999,999. An equal or higher score than hiscore_digits is copied there and sets hiscore_beaten. Prints player one's score at columns 0-5 and player two's at 34-39 of row 1 of $E000, and the high score at 17-22 unless $AC4E is set. If the hundred-thousands digit changed, the player gets an extra life (INC $B277 + player), sound $11 and draw_lives: an extra Wizball every 100,000 points. Callers pass 0 ($70FA), 1 ($AEB0), 4 ($66AC), 5 ($88F2), 10 ($7E90, a pearl), 100 ($9F51, $ADC2), $66 ($AD94) and $0216,X ($A894, $A8DF, $A944).","t":"code","b":[172,217,191],"m":"ldy","o":"side_playing","oa":49113,"x":[26284,28922,32400,35058,40785,43156,43231,43332,44436,44482,44720]},{"a":28942,"t":"code","b":[134,102],"m":"stx","o":"zp_temp_66","oa":102},{"a":28944,"t":"code","b":[190,217,113],"m":"ldx","o":"tbl_player_score_offset,y","oa":29145},{"a":28947,"t":"code","b":[188,212,191],"m":"ldy","o":"score_digits_base,x","oa":49108},{"a":28950,"t":"code","b":[132,103],"m":"sty","o":"zp_temp_67","oa":103},{"a":28952,"l":"b_7118","t":"code","b":[201,100],"m":"cmp","o":"#$64","x":[28962]},{"a":28954,"t":"code","b":[144,8],"m":"bcc","o":"b_7124","oa":28964},{"a":28956,"t":"code","b":[254,214,191],"m":"inc","o":"side1_team,x","oa":49110},{"a":28959,"t":"code","b":[56],"m":"sec"},{"a":28960,"t":"code","b":[233,100],"m":"sbc","o":"#$64"},{"a":28962,"t":"code","b":[176,244],"m":"bcs","o":"b_7118","oa":28952},{"a":28964,"l":"b_7124","t":"code","b":[201,10],"m":"cmp","o":"#$0A","x":[28954,28974]},{"a":28966,"t":"code","b":[144,8],"m":"bcc","o":"b_7130","oa":28976},{"a":28968,"t":"code","b":[254,215,191],"m":"inc","o":"side2_team,x","oa":49111},{"a":28971,"t":"code","b":[56],"m":"sec"},{"a":28972,"t":"code","b":[233,10],"m":"sbc","o":"#$0A"},{"a":28974,"t":"code","b":[176,244],"m":"bcs","o":"b_7124","oa":28964},{"a":28976,"l":"b_7130","t":"code","b":[24],"m":"clc","x":[28966]},{"a":28977,"t":"code","b":[125,216,191],"m":"adc","o":"sides,x","oa":49112},{"a":28980,"t":"code","b":[157,216,191],"m":"sta","o":"sides,x","oa":49112},{"a":28983,"t":"code","b":[160,6],"m":"ldy","o":"#$06"},{"a":28985,"l":"b_7139","t":"code","b":[189,216,191],"m":"lda","o":"sides,x","oa":49112,"x":[29003]},{"a":28988,"t":"code","b":[201,10],"m":"cmp","o":"#$0A"},{"a":28990,"t":"code","b":[144,9],"m":"bcc","o":"b_7149","oa":29001},{"a":28992,"t":"code","b":[56],"m":"sec"},{"a":28993,"t":"code","b":[233,10],"m":"sbc","o":"#$0A"},{"a":28995,"t":"code","b":[157,216,191],"m":"sta","o":"sides,x","oa":49112},{"a":28998,"t":"code","b":[254,215,191],"m":"inc","o":"side2_team,x","oa":49111},{"a":29001,"l":"b_7149","t":"code","b":[202],"m":"dex","x":[28990]},{"a":29002,"t":"code","b":[136],"m":"dey"},{"a":29003,"t":"code","b":[208,236],"m":"bne","o":"b_7139","oa":28985},{"a":29005,"t":"code","b":[189,217,191],"m":"lda","o":"side_playing,x","oa":49113},{"a":29008,"s":"overflow digit set: saturate at 999999","t":"code","b":[240,15],"m":"beq","o":"b_7161","oa":29025},{"a":29010,"t":"code","b":[152],"m":"tya"},{"a":29011,"t":"code","b":[157,217,191],"m":"sta","o":"side_playing,x","oa":49113},{"a":29014,"t":"code","b":[169,9],"m":"lda","o":"#$09"},{"a":29016,"t":"code","b":[160,6],"m":"ldy","o":"#$06"},{"a":29018,"l":"b_715A","t":"code","b":[157,218,191],"m":"sta","o":"side1_score_overflow,x","oa":49114,"x":[29023]},{"a":29021,"t":"code","b":[232],"m":"inx"},{"a":29022,"t":"code","b":[136],"m":"dey"},{"a":29023,"t":"code","b":[208,249],"m":"bne","o":"b_715A","oa":29018},{"a":29025,"l":"b_7161","t":"code","b":[172,217,191],"m":"ldy","o":"side_playing","oa":49113,"x":[29008]},{"a":29028,"t":"code","b":[190,217,113],"m":"ldx","o":"tbl_player_score_offset,y","oa":29145},{"a":29031,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":29033,"l":"b_7169","t":"code","b":[189,212,191],"m":"lda","o":"score_digits_base,x","oa":49108,"x":[29047]},{"a":29036,"t":"code","b":[217,212,113],"m":"cmp","o":"hiscore_digits,y","oa":29140},{"a":29039,"t":"code","b":[48,31],"m":"bmi","o":"b_7190","oa":29072},{"a":29041,"t":"code","b":[208,6],"m":"bne","o":"b_7179","oa":29049},{"a":29043,"t":"code","b":[232],"m":"inx"},{"a":29044,"t":"code","b":[200],"m":"iny"},{"a":29045,"t":"code","b":[192,6],"m":"cpy","o":"#$06"},{"a":29047,"t":"code","b":[208,240],"m":"bne","o":"b_7169","oa":29033},{"a":29049,"l":"b_7179","t":"code","b":[172,217,191],"m":"ldy","o":"side_playing","oa":49113,"x":[29041]},{"a":29052,"t":"code","b":[190,217,113],"m":"ldx","o":"tbl_player_score_offset,y","oa":29145},{"a":29055,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":29057,"l":"b_7181","t":"code","b":[189,212,191],"m":"lda","o":"score_digits_base,x","oa":49108,"x":[29067]},{"a":29060,"t":"code","b":[153,212,113],"m":"sta","o":"hiscore_digits,y","oa":29140},{"a":29063,"t":"code","b":[232],"m":"inx"},{"a":29064,"t":"code","b":[200],"m":"iny"},{"a":29065,"t":"code","b":[192,6],"m":"cpy","o":"#$06"},{"a":29067,"t":"code","b":[208,244],"m":"bne","o":"b_7181","oa":29057},{"a":29069,"t":"code","b":[140,10,114],"m":"sty","o":"hiscore_beaten","oa":29194},{"a":29072,"l":"b_7190","t":"code","b":[160,6],"m":"ldy","o":"#$06","x":[29039]},{"a":29074,"l":"b_7192","t":"code","b":[185,218,191],"m":"lda","o":"side1_score_overflow,y","oa":49114,"x":[29107]},{"a":29077,"t":"code","b":[24],"m":"clc"},{"a":29078,"t":"code","b":[105,48],"m":"adc","o":"#$30"},{"a":29080,"t":"code","b":[153,39,224],"m":"sta","o":"score_p1_digits_minus_1,y","oa":57383},{"a":29083,"t":"code","b":[185,225,191],"m":"lda","o":"side2_score_overflow,y","oa":49121},{"a":29086,"t":"code","b":[24],"m":"clc"},{"a":29087,"t":"code","b":[105,48],"m":"adc","o":"#$30"},{"a":29089,"t":"code","b":[153,73,224],"m":"sta","o":"score_p2_digits_minus_1,y","oa":57417},{"a":29092,"t":"code","b":[173,78,172],"m":"lda","o":"in_lab","oa":44110},{"a":29095,"t":"code","b":[208,9],"m":"bne","o":"b_71B2","oa":29106},{"a":29097,"t":"code","b":[185,211,113],"m":"lda","o":"hiscore_base,y","oa":29139},{"a":29100,"t":"code","b":[24],"m":"clc"},{"a":29101,"t":"code","b":[105,48],"m":"adc","o":"#$30"},{"a":29103,"t":"code","b":[153,56,224],"m":"sta","o":"hiscore_digits_minus_1,y","oa":57400},{"a":29106,"l":"b_71B2","t":"code","b":[136],"m":"dey","x":[29095]},{"a":29107,"t":"code","b":[208,221],"m":"bne","o":"b_7192","oa":29074},{"a":29109,"t":"code","b":[172,217,191],"m":"ldy","o":"side_playing","oa":49113},{"a":29112,"t":"code","b":[190,217,113],"m":"ldx","o":"tbl_player_score_offset,y","oa":29145},{"a":29115,"t":"code","b":[165,103],"m":"lda","o":"zp_temp_67","oa":103},{"a":29117,"t":"code","b":[221,212,191],"m":"cmp","o":"score_digits_base,x","oa":49108},{"a":29120,"s":"hundred-thousands digit unchanged: no extra life","t":"code","b":[240,14],"m":"beq","o":"b_71D0","oa":29136},{"a":29122,"t":"code","b":[174,217,191],"m":"ldx","o":"side_playing","oa":49113},{"a":29125,"t":"code","b":[254,119,178],"m":"inc","o":"large_font_ink_mask,x","oa":45687},{"a":29128,"t":"code","b":[160,17],"m":"ldy","o":"#$11"},{"a":29130,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":29133,"t":"code","b":[32,94,125],"m":"jsr","o":"draw_lives","oa":32094},{"a":29136,"l":"b_71D0","t":"code","b":[166,102],"m":"ldx","o":"zp_temp_66","oa":102,"x":[29120]},{"a":29138,"t":"code","b":[96],"m":"rts"},{"a":29139,"l":"hiscore_base","c":"The byte before hiscore_digits: reset_scores writes through $71D3,Y and add_score prints from it with Y = 6 down to 1, so this byte ($00) itself is never read or written.","t":"byte","b":[0],"x":[28901,29097]},{"a":29140,"l":"hiscore_digits","c":"The high score shown in the middle of the score line: six digits 0-9, most significant first, $71D4-$71D9. Loaded from the high-score table by reset_scores, compared by add_score at $716C and replaced there ($7184) when the current player reaches it, printed at $71A9.","t":"byte","b":[0,0,0,0,0],"x":[29036,29060]},{"a":29145,"l":"tbl_player_score_offset","c":"Two things in one: $71D9 is the last high-score digit (0, since scores end in 0, unless a score saturated at 999,999), and it is the base of a table indexed by the player number (1 or 2, $BFD9): $71DA = 7 and $71DB = 14, the offsets from $BFD4 of player one's and player two's score digits. Read at $7110, $7164, $717C and $71B8.","t":"byte","b":[0,7],"x":[28944,29028,29052,29112]},{"a":29147,"l":"tbl_player_score_column","c":"Player two's score-digit offset (14, the second entry of tbl_player_score_offset) and the base of a table indexed by the player number: $71DC = 0 and $71DD = 34, the first column of each player's score on rows 0-1, which $67C3 colours in the player's flashing colour.","t":"byte","b":[14,0],"x":[26563]},{"a":29149,"l":"tbl_player_counter_column","c":"Player two's score column (34, see tbl_player_score_column) and the base of a table indexed by the player number: $71DE = 9 and $71DF = 29, the column on row 1 of each player's two-digit counter (the value $B1AF, printed at $9F06 and coloured at $67EA).","t":"byte","b":[34,9],"x":[26602,40710]},{"a":29151,"l":"tbl_player_lives_column","c":"Player two's counter column (29, see tbl_player_counter_column) and the base of a table indexed by the player number: $71E0 = 7 and $71E1 = 32, the column on row 1 of each player's spare-lives digit, used by draw_lives ($7D6A) and coloured at $67FE.","t":"byte","b":[29,7],"x":[26622,32106]},{"a":29153,"l":"text_score_header","c":"Player two's lives column (32, a space byte doubling as the second entry of tbl_player_lives_column) and the base of the score-line header, $71E2-$7209, 40 bytes that draw_score_line prints on row 0 of $E000 after AND #$3F: \"1UP\" at columns 0-2, \"HI\" at 19-20, \"2UP\" at 37-39, spaces between. Bytes $3A, $3B, $3C, $3D stand for H, I, U, P in the game's character set, so the stored text reads \"1<=\", \":;\", \"2<=\" in PETSCII.","t":"byte","b":[32,49,60,61,32,32,32,32],"x":[28927]},{"a":29161,"t":"byte","b":[32,32,32,32,32,32,32,32]},{"a":29169,"t":"byte","b":[32,32,32,32,58,59,32,32]},{"a":29177,"t":"byte","b":[32,32,32,32,32,32,32,32]},{"a":29185,"t":"byte","b":[32,32,32,32,32,32,50,60]},{"a":29193,"t":"byte","b":[61]},{"a":29194,"l":"hiscore_beaten","c":"Non-zero (6) once the current player's score has reached the high score: set by add_score ($718D), cleared by draw_score_line ($70F6); while it is set $67D7 colours the HI label and high score in the player's flashing colour too.","t":"byte","b":[0],"x":[26583,28918,29069]},{"a":29195,"l":"init_turn_icons","c":"Start of the play routine ($63E0), once a turn: sets the eight sprite pointers of the icon bar, $EFF8-$EFFF (the screen at $EC00 that the icon band shows), from $B4DE-$B4E5: shapes 7, $0B, 2, 6, 8, 1, 0 for icons 1-7 and 0 for sprite 7; clears the weapon flags $B231-$B239; sets the beam's two sprite shapes $B8DE/$B8DF to 5 and clears shape 5 ($C140-$C17F) through $8F15 (A = 0, X = 1 shape, Y = 5), so the beam shows nothing.","t":"code","b":[162,8],"m":"ldx","o":"#$08","x":[25568]},{"a":29197,"l":"b_720D","t":"code","b":[189,221,180],"m":"lda","o":"icon_pointers_base,x","oa":46301,"x":[29204]},{"a":29200,"t":"code","b":[157,247,239],"m":"sta","o":"icon_ptrs_minus_1,x","oa":61431},{"a":29203,"t":"code","b":[202],"m":"dex"},{"a":29204,"t":"code","b":[208,247],"m":"bne","o":"b_720D","oa":29197},{"a":29206,"t":"code","b":[162,9],"m":"ldx","o":"#$09"},{"a":29208,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":29210,"l":"b_721A","t":"code","b":[157,48,178],"m":"sta","o":"weapon_flags_base,x","oa":45616,"x":[29214]},{"a":29213,"t":"code","b":[202],"m":"dex"},{"a":29214,"t":"code","b":[208,250],"m":"bne","o":"b_721A","oa":29210},{"a":29216,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":29218,"t":"code","b":[141,222,184],"m":"sta","o":"beam_image_upper","oa":47326},{"a":29221,"t":"code","b":[141,223,184],"m":"sta","o":"beam_image_lower","oa":47327},{"a":29224,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":29226,"t":"code","b":[141,49,178],"m":"sta","o":"weapon_thrust","oa":45617},{"a":29229,"t":"code","b":[141,50,178],"m":"sta","o":"weapon_antigrav","oa":45618},{"a":29232,"t":"code","b":[160,5],"m":"ldy","o":"#$05"},{"a":29234,"t":"code","b":[162,1],"m":"ldx","o":"#$01"},{"a":29236,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":29238,"t":"code","b":[32,21,143],"m":"jsr","o":"fill_sprite_blocks","oa":36629},{"a":29241,"t":"code","b":[96],"m":"rts"},{"a":29242,"l":"wiggle_expect","c":"The stick direction detect_wiggle waits for next, as a joystick bit mask: 4 (left) or 8 (right), flipped with EOR #$0C each time it is seen. 4 in the loaded image; nothing resets it between lives.","t":"byte","b":[4],"x":[29248,29253,29258]},{"a":29243,"l":"wiggle_idle","c":"Frames since the last direction reversal of the wiggle: cleared by detect_wiggle on a reversal; at 10 detect_wiggle clears it and wiggle_count.","t":"byte","b":[0],"x":[29263,29270,29273,29282]},{"a":29244,"l":"wiggle_count","c":"Direction reversals in the current wiggle: detect_wiggle adds one per reversal and clears it after 10 frames without one; update_icons takes the lit icon when it is exactly 4 ($72D2).","t":"byte","b":[0],"x":[29266,29285,29394]},{"a":29245,"l":"detect_wiggle","c":"Counts the left-right wiggle that takes a feature, once a frame from update_wizball ($7E1E): tests the Wiz's stick $B23F (active low) for the direction in wiggle_expect; if that bit is low it flips the expected direction, clears wiggle_idle and adds one to wiggle_count. Otherwise wiggle_idle counts frames, and at 10 (a fifth of a second at 50 frames a second) both counters go back to 0. So every push the opposite way from the last one counts, as long as less than 10 frames pass between pushes.","t":"code","b":[173,63,178],"m":"lda","o":"wizball_input","oa":45631,"x":[32286]},{"a":29248,"t":"code","b":[45,58,114],"m":"and","o":"wiggle_expect","oa":29242},{"a":29251,"t":"code","b":[208,17],"m":"bne","o":"b_7256","oa":29270},{"a":29253,"t":"code","b":[173,58,114],"m":"lda","o":"wiggle_expect","oa":29242},{"a":29256,"t":"code","b":[73,12],"m":"eor","o":"#$0C"},{"a":29258,"t":"code","b":[141,58,114],"m":"sta","o":"wiggle_expect","oa":29242},{"a":29261,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":29263,"t":"code","b":[141,59,114],"m":"sta","o":"wiggle_idle","oa":29243},{"a":29266,"t":"code","b":[238,60,114],"m":"inc","o":"wiggle_count","oa":29244},{"a":29269,"t":"code","b":[96],"m":"rts"},{"a":29270,"l":"b_7256","t":"code","b":[238,59,114],"m":"inc","o":"wiggle_idle","oa":29243,"x":[29251]},{"a":29273,"t":"code","b":[173,59,114],"m":"lda","o":"wiggle_idle","oa":29243},{"a":29276,"t":"code","b":[201,10],"m":"cmp","o":"#$0A"},{"a":29278,"t":"code","b":[208,8],"m":"bne","o":"r_7268","oa":29288},{"a":29280,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":29282,"t":"code","b":[141,59,114],"m":"sta","o":"wiggle_idle","oa":29243},{"a":29285,"t":"code","b":[141,60,114],"m":"sta","o":"wiggle_count","oa":29244},{"a":29288,"l":"r_7268","t":"code","b":[96],"m":"rts","x":[29278]},{"a":29289,"l":"flash_lit_icon","c":"Colours the icon bar, from the icon band ($89FC, once a frame) and $9686: the seven icon sprite colours $B4D6-$B4DC light blue ($0E), or light red ($0A) while $B074 is set (the Wiz-lab), then the lit icon ($B258, 1-7; none when 0) gets a flashing colour: $B25A counts frames, every fourth frame $B25B steps 0-5, and the colour is $B53D + step (black, blue, light blue, light grey, light blue, blue) or in the lab $B543 + step (black, red, light red, light grey, light red, red).","t":"code","b":[169,14],"m":"lda","o":"#$0E","x":[35324,38534]},{"a":29291,"t":"code","b":[172,116,176],"m":"ldy","o":"lab_icon_mode","oa":45172},{"a":29294,"t":"code","b":[240,2],"m":"beq","o":"b_7272","oa":29298},{"a":29296,"t":"code","b":[169,10],"m":"lda","o":"#$0A"},{"a":29298,"l":"b_7272","t":"code","b":[162,7],"m":"ldx","o":"#$07","x":[29294]},{"a":29300,"l":"b_7274","t":"code","b":[157,213,180],"m":"sta","o":"icon_colours_base,x","oa":46293,"x":[29304]},{"a":29303,"t":"code","b":[202],"m":"dex"},{"a":29304,"t":"code","b":[208,250],"m":"bne","o":"b_7274","oa":29300},{"a":29306,"t":"code","b":[238,90,178],"m":"inc","o":"icon_pulse_timer","oa":45658},{"a":29309,"t":"code","b":[173,90,178],"m":"lda","o":"icon_pulse_timer","oa":45658},{"a":29312,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":29314,"t":"code","b":[208,13],"m":"bne","o":"b_7291","oa":29329},{"a":29316,"t":"code","b":[238,91,178],"m":"inc","o":"icon_pulse_step","oa":45659},{"a":29319,"t":"code","b":[173,91,178],"m":"lda","o":"icon_pulse_step","oa":45659},{"a":29322,"t":"code","b":[201,6],"m":"cmp","o":"#$06"},{"a":29324,"t":"code","b":[208,3],"m":"bne","o":"b_7291","oa":29329},{"a":29326,"t":"code","b":[142,91,178],"m":"stx","o":"icon_pulse_step","oa":45659},{"a":29329,"l":"b_7291","t":"code","b":[172,91,178],"m":"ldy","o":"icon_pulse_step","oa":45659,"x":[29314,29324]},{"a":29332,"t":"code","b":[173,116,176],"m":"lda","o":"lab_icon_mode","oa":45172},{"a":29335,"t":"code","b":[240,5],"m":"beq","o":"b_729E","oa":29342},{"a":29337,"t":"code","b":[152],"m":"tya"},{"a":29338,"t":"code","b":[24],"m":"clc"},{"a":29339,"t":"code","b":[105,6],"m":"adc","o":"#$06"},{"a":29341,"t":"code","b":[168],"m":"tay"},{"a":29342,"l":"b_729E","t":"code","b":[185,61,181],"m":"lda","o":"tbl_icon_pulse,y","oa":46397,"x":[29335]},{"a":29345,"t":"code","b":[172,88,178],"m":"ldy","o":"icon_cursor","oa":45656},{"a":29348,"t":"code","b":[240,3],"m":"beq","o":"r_72A9","oa":29353},{"a":29350,"t":"code","b":[153,213,180],"m":"sta","o":"icon_colours_base,y","oa":46293},{"a":29353,"l":"r_72A9","t":"code","b":[96],"m":"rts","x":[29348]},{"a":29354,"l":"update_icons","c":"Once a frame (frame loop $6436; $64E8, $65B3): if pearls are waiting ($B259, added by check_wizball_hits), takes one and lights the next icon ($B258 steps 1-7, 7 wraps to 1) with sound 9. Otherwise, when wiggle_count is exactly 4, takes the lit icon through take_lit_icon. Two leftovers do nothing: a test of key code 4 at $72B5 whose BNE and BEQ both go to $72D2, and LDA $B254 / CMP #3 before the RTS at $72D9, whose flags no caller uses.","t":"code","b":[173,89,178],"m":"lda","o":"pearls_pending","oa":45657,"x":[25654,25832,26035]},{"a":29357,"t":"code","b":[240,6],"m":"beq","o":"b_72B5","oa":29365},{"a":29359,"t":"code","b":[206,89,178],"m":"dec","o":"pearls_pending","oa":45657},{"a":29362,"t":"code","b":[76,190,114],"m":"jmp","o":"j_72BE","oa":29374},{"a":29365,"l":"b_72B5","t":"code","b":[173,84,178],"m":"lda","o":"key_new","oa":45652,"x":[29357]},{"a":29368,"t":"code","b":[201,4],"m":"cmp","o":"#$04"},{"a":29370,"s":"dead test: both branches go to $72D2","t":"code","b":[208,22],"m":"bne","o":"b_72D2","oa":29394},{"a":29372,"t":"code","b":[240,20],"m":"beq","o":"b_72D2","oa":29394},{"a":29374,"l":"j_72BE","t":"code","b":[238,88,178],"m":"inc","o":"icon_cursor","oa":45656,"x":[29362]},{"a":29377,"t":"code","b":[173,88,178],"m":"lda","o":"icon_cursor","oa":45656},{"a":29380,"t":"code","b":[201,8],"m":"cmp","o":"#$08"},{"a":29382,"t":"code","b":[208,5],"m":"bne","o":"b_72CD","oa":29389},{"a":29384,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":29386,"t":"code","b":[141,88,178],"m":"sta","o":"icon_cursor","oa":45656},{"a":29389,"l":"b_72CD","t":"code","b":[160,9],"m":"ldy","o":"#$09","x":[29382]},{"a":29391,"t":"code","b":[76,83,69],"m":"jmp","o":"start_sound_effect","oa":17747},{"a":29394,"l":"b_72D2","t":"code","b":[173,60,114],"m":"lda","o":"wiggle_count","oa":29244,"x":[29370,29372]},{"a":29397,"t":"code","b":[201,4],"m":"cmp","o":"#$04"},{"a":29399,"t":"code","b":[240,6],"m":"beq","o":"take_lit_icon","oa":29407},{"a":29401,"s":"leftover: flags returned but unused","t":"code","b":[173,84,178],"m":"lda","o":"key_new","oa":45652},{"a":29404,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":29406,"t":"code","b":[96],"m":"rts"},{"a":29407,"l":"take_lit_icon","c":"Takes the feature of the lit icon $B258 (1-7). Returns at once when none is lit or the icon's sprite pointer ($EFF7 + icon) is 9, the used-up shape. Plays sound 8 (sound $0D for the smart bomb, icon 6) unless $B074 is set (the Wiz-lab, and $6E4F applying the permanent weapons at the start of a turn), puts the light out ($B258 = 0) and jumps through the word table $B549, indexed by the icon number, by writing the address into the JMP at $7316: 1 $7379, 2 $734B, 3 $7366, 4 $731A, 5 $7325, 6 $7394, 7 $73B0 (entry 0 is $7319 and is never used). Callers: update_icons ($72D7), $6E63, $B00C and $B0DE.","t":"code","b":[172,88,178],"m":"ldy","o":"icon_cursor","oa":45656,"x":[28259,29399,45068,45278]},{"a":29410,"t":"code","b":[240,7],"m":"beq","o":"r_72EB","oa":29419},{"a":29412,"t":"code","b":[185,247,239],"m":"lda","o":"icon_ptrs_minus_1,y","oa":61431},{"a":29415,"t":"code","b":[201,9],"m":"cmp","o":"#$09"},{"a":29417,"t":"code","b":[208,1],"m":"bne","o":"b_72EC","oa":29420},{"a":29419,"l":"r_72EB","t":"code","b":[96],"m":"rts","x":[29410]},{"a":29420,"l":"b_72EC","t":"code","b":[169,8],"m":"lda","o":"#$08","x":[29417]},{"a":29422,"t":"code","b":[192,6],"m":"cpy","o":"#$06"},{"a":29424,"t":"code","b":[208,2],"m":"bne","o":"b_72F4","oa":29428},{"a":29426,"t":"code","b":[169,13],"m":"lda","o":"#$0D"},{"a":29428,"l":"b_72F4","t":"code","b":[168],"m":"tay","x":[29424]},{"a":29429,"t":"code","b":[173,116,176],"m":"lda","o":"lab_icon_mode","oa":45172},{"a":29432,"t":"code","b":[208,3],"m":"bne","o":"b_72FD","oa":29437},{"a":29434,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":29437,"l":"b_72FD","t":"code","b":[173,88,178],"m":"lda","o":"icon_cursor","oa":45656,"x":[29432]},{"a":29440,"l":"rng_table","c":"Two things in one: this LDY #0 is part of take_lit_icon's dispatch (the STA/STY $B258 put the icon out, A x 2 indexes $B549, the handler address goes into the JMP operand), and $7300 is the base of the 256 bytes $7300-$73FF that random ($7533) reads as its table with LDA $7300,Y: the machine code of this dispatch, the icon handlers and the start of the keyboard scanners serves as a fixed list of pseudo-random bytes.","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[30009]},{"a":29442,"t":"code","b":[141,88,178],"m":"sta","o":"icon_cursor","oa":45656},{"a":29445,"t":"code","b":[140,88,178],"m":"sty","o":"icon_cursor","oa":45656},{"a":29448,"t":"code","b":[10],"m":"asl","o":"a"},{"a":29449,"t":"code","b":[168],"m":"tay"},{"a":29450,"t":"code","b":[185,73,181],"m":"lda","o":"tbl_icon_handlers,y","oa":46409},{"a":29453,"t":"code","b":[141,23,115],"m":"sta","o":"icon_jump_lo","oa":29463},{"a":29456,"t":"code","b":[185,74,181],"m":"lda","o":"tbl_icon_handlers_hi,y","oa":46410},{"a":29459,"t":"code","b":[141,24,115],"m":"sta","o":"icon_jump_hi","oa":29464},{"a":29462,"t":"code","b":[76,0,0],"m":"jmp","o":"cpu_port_ddr","oa":0},{"a":29463,"t":"note","l":"icon_jump_lo","c":"Low byte of the JMP operand at $7316, written by take_lit_icon ($730D) from the icon jump table $B549; $00 in the loaded image.","note":"inside the item at $7316","x":[29453]},{"a":29464,"t":"note","l":"icon_jump_hi","c":"High byte of the JMP operand at $7316, written by take_lit_icon ($7313) from $B54A: with icon_jump_lo, the address of the handler of the icon being taken.","note":"inside the item at $7316","x":[29459]},{"a":29465,"l":"icon_none","c":"A lone RTS byte ($60) that entry 0 of the icon jump table $B549 points at, a handler for no icon. take_lit_icon returns before the jump when no icon is lit, and nothing else jumps here, so it is left as data.","t":"byte","b":[96]},{"a":29466,"l":"take_blazers","c":"Icon 4, blazers: sets $B236 (read when bullets are fired, $84E3 for Wiz and $888D for the cat) and turns the icon into the used-up shape 9 ($EFFB).","t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":29468,"t":"code","b":[141,54,178],"m":"sta","o":"weapon_blazers","oa":45622},{"a":29471,"t":"code","b":[169,9],"m":"lda","o":"#$09"},{"a":29473,"t":"code","b":[141,251,239],"m":"sta","o":"icon4_ptr","oa":61435},{"a":29476,"t":"code","b":[96],"m":"rts"},{"a":29477,"l":"take_spray","c":"Icon 5, spray. The first take sets $B237 (spray on, tested at $84FF) with the spray on Wiz ($B238 = 0) and shows shape $0A on the icon; every later take flips $B238 between Wiz (0) and the cat (1; the cat's spray is at $855E) and shows shape $0A or 8, the other one's spray. The icon never runs out, and Wiz and the cat never both have a spray. Remember's crack swaps the two images (8 and $0A) in its copy of this handler, so its icon shows who holds the spray; here, as for every icon, it shows what the next take gives.","t":"code","b":[173,55,178],"m":"lda","o":"weapon_spray","oa":45623},{"a":29480,"t":"code","b":[208,11],"m":"bne","o":"b_7335","oa":29493},{"a":29482,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":29484,"t":"code","b":[141,55,178],"m":"sta","o":"weapon_spray","oa":45623},{"a":29487,"t":"code","b":[169,10],"m":"lda","o":"#$0A"},{"a":29489,"t":"code","b":[141,252,239],"m":"sta","o":"icon5_ptr","oa":61436},{"a":29492,"t":"code","b":[96],"m":"rts"},{"a":29493,"l":"b_7335","t":"code","b":[173,56,178],"m":"lda","o":"weapon_spray_on_cat","oa":45624,"x":[29480]},{"a":29496,"t":"code","b":[73,1],"m":"eor","o":"#$01"},{"a":29498,"t":"code","b":[141,56,178],"m":"sta","o":"weapon_spray_on_cat","oa":45624},{"a":29501,"t":"code","b":[208,6],"m":"bne","o":"b_7345","oa":29509},{"a":29503,"t":"code","b":[169,10],"m":"lda","o":"#$0A"},{"a":29505,"t":"code","b":[141,252,239],"m":"sta","o":"icon5_ptr","oa":61436},{"a":29508,"t":"code","b":[96],"m":"rts"},{"a":29509,"l":"b_7345","t":"code","b":[169,8],"m":"lda","o":"#$08","x":[29501]},{"a":29511,"t":"code","b":[141,252,239],"m":"sta","o":"icon5_ptr","oa":61436},{"a":29514,"t":"code","b":[96],"m":"rts"},{"a":29515,"l":"take_beam_or_double","c":"Icon 2. The first take sets $B235, the beam (animated by $8592), and shows shape 4 on the icon; the second sets $B233, double fire (each shot alternates direction at $84B6), and turns the icon into the used-up shape 9. $B235 is not cleared, so the beam flag stays set with double.","t":"code","b":[173,53,178],"m":"lda","o":"weapon_beam","oa":45621},{"a":29518,"t":"code","b":[208,11],"m":"bne","o":"b_735B","oa":29531},{"a":29520,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":29522,"t":"code","b":[141,53,178],"m":"sta","o":"weapon_beam","oa":45621},{"a":29525,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":29527,"t":"code","b":[141,249,239],"m":"sta","o":"icon2_ptr","oa":61433},{"a":29530,"t":"code","b":[96],"m":"rts"},{"a":29531,"l":"b_735B","t":"code","b":[169,1],"m":"lda","o":"#$01","x":[29518]},{"a":29533,"t":"code","b":[141,51,178],"m":"sta","o":"weapon_double","oa":45619},{"a":29536,"t":"code","b":[169,9],"m":"lda","o":"#$09"},{"a":29538,"t":"code","b":[141,249,239],"m":"sta","o":"icon2_ptr","oa":61433},{"a":29541,"t":"code","b":[96],"m":"rts"},{"a":29542,"l":"take_catelite","c":"Icon 3, catelite: sets $B234 (the cat is present: read at $69DA, $8640, $881F), turns the icon into the used-up shape 9 ($EFFA) and clears $B26C and $861A, two bytes of the cat's state that $806F and $805A also clear when a Wizball materialises.","t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":29544,"t":"code","b":[141,52,178],"m":"sta","o":"weapon_catelite","oa":45620},{"a":29547,"t":"code","b":[169,9],"m":"lda","o":"#$09"},{"a":29549,"t":"code","b":[141,250,239],"m":"sta","o":"icon3_ptr","oa":61434},{"a":29552,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":29554,"t":"code","b":[141,108,178],"m":"sta","o":"cat_hits","oa":45676},{"a":29557,"t":"code","b":[141,26,134],"m":"sta","o":"mutant_cat","oa":34330},{"a":29560,"t":"code","b":[96],"m":"rts"},{"a":29561,"l":"take_thrust_or_antigrav","c":"Icon 1. The first take sets thrust ($B231: update_wizball then applies the stick's spin every frame through $818E, where without it the spin only changes the speed at a bounce) and shows shape 3 on the icon; the second sets anti-grav ($B232: bounce_wizball hands vertical motion to $8BEA) and turns the icon into the used-up shape 9. $64C4 and $64C7 call it twice to give both.","t":"code","b":[173,49,178],"m":"lda","o":"weapon_thrust","oa":45617,"x":[25796,25799]},{"a":29564,"t":"code","b":[208,11],"m":"bne","o":"b_7389","oa":29577},{"a":29566,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":29568,"t":"code","b":[141,49,178],"m":"sta","o":"weapon_thrust","oa":45617},{"a":29571,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":29573,"t":"code","b":[141,248,239],"m":"sta","o":"icon1_ptr","oa":61432},{"a":29576,"t":"code","b":[96],"m":"rts"},{"a":29577,"l":"b_7389","t":"code","b":[169,1],"m":"lda","o":"#$01","x":[29564]},{"a":29579,"t":"code","b":[141,50,178],"m":"sta","o":"weapon_antigrav","oa":45618},{"a":29582,"t":"code","b":[169,9],"m":"lda","o":"#$09"},{"a":29584,"t":"code","b":[141,248,239],"m":"sta","o":"icon1_ptr","oa":61432},{"a":29587,"t":"code","b":[96],"m":"rts"},{"a":29588,"l":"take_smart_bomb","c":"Icon 6, smart bomb: $B25C = 1 starts the background flash (the band at $8A44 then counts it up, writing each value to $D021, for 127 frames until it reaches $80), sets the hit flag +$25 of all six objects at $0200-$02FB (records of $2A bytes; X steps $2A up to $FC), then calls $9AD6 and $9CCB (which clears $0300-$03FF). The icon is not used up: it can be lit and taken again.","t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":29590,"t":"code","b":[141,92,178],"m":"sta","o":"background_flash","oa":45660},{"a":29593,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":29595,"l":"b_739B","t":"code","b":[169,1],"m":"lda","o":"#$01","x":[29607]},{"a":29597,"t":"code","b":[157,37,2],"m":"sta","o":"alien_hit,x","oa":549},{"a":29600,"t":"code","b":[138],"m":"txa"},{"a":29601,"t":"code","b":[24],"m":"clc"},{"a":29602,"t":"code","b":[105,42],"m":"adc","o":"#$2A"},{"a":29604,"t":"code","b":[170],"m":"tax"},{"a":29605,"t":"code","b":[224,252],"m":"cpx","o":"#$FC"},{"a":29607,"t":"code","b":[208,242],"m":"bne","o":"b_739B","oa":29595},{"a":29609,"t":"code","b":[32,214,154],"m":"jsr","o":"erase_bullets_check_hits","oa":39638},{"a":29612,"t":"code","b":[32,203,156],"m":"jsr","o":"clear_alien_bullets","oa":40139},{"a":29615,"t":"code","b":[96],"m":"rts"},{"a":29616,"l":"take_shield","c":"Icon 7, shields: shield_time = 40 and the cat's copy $89B6 = 40, clears shield_frames and shield_warned and the cat's $89B7 and $89B9, sets shield_flicker and the cat's $89B8 to $34, and shows the used-up shape 9 on the icon; update_shield gives the icon back (shape 0) when the shield runs out.","t":"code","b":[169,40],"m":"lda","o":"#$28"},{"a":29618,"t":"code","b":[141,6,127],"m":"sta","o":"shield_time","oa":32518},{"a":29621,"t":"code","b":[141,182,137],"m":"sta","o":"cat_shield_time","oa":35254},{"a":29624,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":29626,"t":"code","b":[141,7,127],"m":"sta","o":"shield_frames","oa":32519},{"a":29629,"t":"code","b":[141,183,137],"m":"sta","o":"cat_shield_frames","oa":35255},{"a":29632,"t":"code","b":[141,9,127],"m":"sta","o":"shield_warned","oa":32521},{"a":29635,"t":"code","b":[141,185,137],"m":"sta","o":"cat_shield_warned","oa":35257},{"a":29638,"t":"code","b":[169,52],"m":"lda","o":"#$34"},{"a":29640,"t":"code","b":[141,8,127],"m":"sta","o":"shield_flicker","oa":32520},{"a":29643,"t":"code","b":[141,184,137],"m":"sta","o":"cat_shield_blink","oa":35256},{"a":29646,"t":"code","b":[169,9],"m":"lda","o":"#$09"},{"a":29648,"t":"code","b":[141,254,239],"m":"sta","o":"icon7_ptr","oa":61438},{"a":29651,"t":"code","b":[96],"m":"rts"},{"a":29652,"l":"scan_keyboard","c":"Full keyboard and joystick scan, for name entry ($6CF6, $6D07) and the title and menu loops ($9006, $90A2, $94C4). First, with both CIA 1 data-direction registers set to input so no keyboard row is driven, reads $DC00 into $B256 (joystick port 2) and $DC01 into $B257 (port 1): bits 0-4 up, down, left, right, fire, active low. Then restores DDRA = $FF and DDRB = 0 and scans all 64 keys, rows 7 down to 0 ($DC00 = $7F, $BF ... $FE) and in each row columns 7 down to 0, numbering them 1-64 in that order: 1 RUN/STOP, 2 Q, 3 C=, 4 SPACE, 9 /, 10 up-arrow, 11 =, 63 RETURN, 64 DEL (the game's own tables agree: key to PETSCII at $6D94, BOREWIZ at $AFCE). The highest-numbered key held is kept in $B255 and reported in $B254 only when it differs from the last scan, else $B254 = 0, so each press is seen once. Uses $5E (key found), $5F (rows left), $66 (row mask).","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[27894,27911,36870,37026,38084]},{"a":29654,"t":"code","b":[141,2,220],"m":"sta","o":"cia1_ddr_a"},{"a":29657,"t":"code","b":[141,3,220],"m":"sta","o":"cia1_ddr_b"},{"a":29660,"t":"code","b":[173,0,220],"m":"lda","o":"cia1_port_a"},{"a":29663,"t":"code","b":[141,86,178],"m":"sta","o":"joystick_port2_raw","oa":45654},{"a":29666,"t":"code","b":[173,1,220],"m":"lda","o":"cia1_port_b"},{"a":29669,"t":"code","b":[141,87,178],"m":"sta","o":"joystick_port1_raw","oa":45655},{"a":29672,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":29674,"t":"code","b":[141,2,220],"m":"sta","o":"cia1_ddr_a"},{"a":29677,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":29679,"t":"code","b":[141,3,220],"m":"sta","o":"cia1_ddr_b"},{"a":29682,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":29684,"t":"code","b":[133,94],"m":"sta","o":"zp_temp_5e","oa":94},{"a":29686,"t":"code","b":[162,1],"m":"ldx","o":"#$01"},{"a":29688,"t":"code","b":[169,127],"m":"lda","o":"#$7F"},{"a":29690,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":29692,"t":"code","b":[169,8],"m":"lda","o":"#$08"},{"a":29694,"t":"code","b":[133,95],"m":"sta","o":"zp_temp_5f","oa":95},{"a":29696,"l":"b_7400","t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102,"x":[29720]},{"a":29698,"t":"code","b":[141,0,220],"m":"sta","o":"cia1_port_a"},{"a":29701,"t":"code","b":[173,1,220],"m":"lda","o":"cia1_port_b"},{"a":29704,"t":"code","b":[160,8],"m":"ldy","o":"#$08"},{"a":29706,"l":"b_740A","t":"code","b":[10],"m":"asl","o":"a","x":[29713]},{"a":29707,"t":"code","b":[176,2],"m":"bcs","o":"b_740F","oa":29711},{"a":29709,"t":"code","b":[134,94],"m":"stx","o":"zp_temp_5e","oa":94},{"a":29711,"l":"b_740F","t":"code","b":[232],"m":"inx","x":[29707]},{"a":29712,"t":"code","b":[136],"m":"dey"},{"a":29713,"t":"code","b":[208,247],"m":"bne","o":"b_740A","oa":29706},{"a":29715,"t":"code","b":[56],"m":"sec"},{"a":29716,"t":"code","b":[102,102],"m":"ror","o":"zp_temp_66","oa":102},{"a":29718,"t":"code","b":[198,95],"m":"dec","o":"zp_temp_5f","oa":95},{"a":29720,"t":"code","b":[208,230],"m":"bne","o":"b_7400","oa":29696},{"a":29722,"t":"code","b":[165,94],"m":"lda","o":"zp_temp_5e","oa":94},{"a":29724,"t":"code","b":[205,85,178],"m":"cmp","o":"key_held","oa":45653},{"a":29727,"t":"code","b":[240,4],"m":"beq","o":"b_7425","oa":29733},{"a":29729,"t":"code","b":[141,85,178],"m":"sta","o":"key_held","oa":45653},{"a":29732,"t":"code","b":[168],"m":"tay"},{"a":29733,"l":"b_7425","t":"code","b":[140,84,178],"m":"sty","o":"key_new","oa":45652,"x":[29727]},{"a":29736,"t":"code","b":[96],"m":"rts"},{"a":29737,"l":"scan_keys_play","c":"The key scan used in play and on the get-ready and pause screens (frame loop $644A; $65C9, $695B, $6A97, $6EC6, $9420): the same joystick latch into $B256 (port 2) and $B257 (port 1) as scan_keyboard, then only rows 7, 6, 5 and in each only columns 7, 6, 5, numbered 1-9: 1 RUN/STOP, 2 Q, 3 C=, 4 /, 5 up-arrow, 6 =, 7 comma, 8 @, 9 colon. Columns 7-5 are $DC01 bits that a joystick in port 1 cannot pull low, so the port-1 stick never reads as a key. $B254 gets the code when it changes, as in scan_keyboard. Users: $6EB7 (RUN/STOP pauses; while paused RUN/STOP resumes and Q quits) and $BA82 (up-arrow raises and = lowers the firing volume, $BA81 0-15).","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[25674,26057,26971,27287,28358,37920]},{"a":29739,"t":"code","b":[141,2,220],"m":"sta","o":"cia1_ddr_a"},{"a":29742,"t":"code","b":[141,3,220],"m":"sta","o":"cia1_ddr_b"},{"a":29745,"t":"code","b":[173,0,220],"m":"lda","o":"cia1_port_a"},{"a":29748,"t":"code","b":[141,86,178],"m":"sta","o":"joystick_port2_raw","oa":45654},{"a":29751,"t":"code","b":[173,1,220],"m":"lda","o":"cia1_port_b"},{"a":29754,"t":"code","b":[141,87,178],"m":"sta","o":"joystick_port1_raw","oa":45655},{"a":29757,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":29759,"t":"code","b":[141,2,220],"m":"sta","o":"cia1_ddr_a"},{"a":29762,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":29764,"t":"code","b":[141,3,220],"m":"sta","o":"cia1_ddr_b"},{"a":29767,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":29769,"t":"code","b":[133,94],"m":"sta","o":"zp_temp_5e","oa":94},{"a":29771,"t":"code","b":[162,1],"m":"ldx","o":"#$01"},{"a":29773,"t":"code","b":[169,127],"m":"lda","o":"#$7F"},{"a":29775,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":29777,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":29779,"t":"code","b":[133,95],"m":"sta","o":"zp_temp_5f","oa":95},{"a":29781,"l":"b_7455","t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102,"x":[29805]},{"a":29783,"t":"code","b":[141,0,220],"m":"sta","o":"cia1_port_a"},{"a":29786,"t":"code","b":[173,1,220],"m":"lda","o":"cia1_port_b"},{"a":29789,"t":"code","b":[160,3],"m":"ldy","o":"#$03"},{"a":29791,"l":"b_745F","t":"code","b":[10],"m":"asl","o":"a","x":[29798]},{"a":29792,"t":"code","b":[176,2],"m":"bcs","o":"b_7464","oa":29796},{"a":29794,"t":"code","b":[134,94],"m":"stx","o":"zp_temp_5e","oa":94},{"a":29796,"l":"b_7464","t":"code","b":[232],"m":"inx","x":[29792]},{"a":29797,"t":"code","b":[136],"m":"dey"},{"a":29798,"t":"code","b":[208,247],"m":"bne","o":"b_745F","oa":29791},{"a":29800,"t":"code","b":[56],"m":"sec"},{"a":29801,"t":"code","b":[102,102],"m":"ror","o":"zp_temp_66","oa":102},{"a":29803,"t":"code","b":[198,95],"m":"dec","o":"zp_temp_5f","oa":95},{"a":29805,"t":"code","b":[208,230],"m":"bne","o":"b_7455","oa":29781},{"a":29807,"t":"code","b":[165,94],"m":"lda","o":"zp_temp_5e","oa":94},{"a":29809,"t":"code","b":[205,85,178],"m":"cmp","o":"key_held","oa":45653},{"a":29812,"t":"code","b":[240,4],"m":"beq","o":"b_747A","oa":29818},{"a":29814,"t":"code","b":[141,85,178],"m":"sta","o":"key_held","oa":45653},{"a":29817,"t":"code","b":[168],"m":"tay"},{"a":29818,"l":"b_747A","t":"code","b":[140,84,178],"m":"sty","o":"key_new","oa":45652,"x":[29812]},{"a":29821,"t":"code","b":[96],"m":"rts"},{"a":29822,"l":"move_stars","c":"Moves the five sky stars, once a frame in play (frame loop $6447; $64D5, $65A5, $6EA2, $AB84, $AEAB): for star n = 0-4 (X = 5n into the records at $B1B4) calls move_star with ($60) = $F80A + 144n, the star's strip of 18 sky glyphs (8 bytes each) in the landscape character set at $F800.","t":"code","b":[169,10],"m":"lda","o":"#$0A","x":[25671,25813,26021,28322,43908,44715]},{"a":29824,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":29826,"t":"code","b":[169,248],"m":"lda","o":"#$F8"},{"a":29828,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":29830,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":29832,"l":"b_7488","t":"code","b":[32,160,116],"m":"jsr","o":"move_star","oa":29856,"x":[29853]},{"a":29835,"t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96},{"a":29837,"t":"code","b":[24],"m":"clc"},{"a":29838,"t":"code","b":[105,144],"m":"adc","o":"#$90"},{"a":29840,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":29842,"t":"code","b":[144,2],"m":"bcc","o":"b_7496","oa":29846},{"a":29844,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":29846,"l":"b_7496","t":"code","b":[138],"m":"txa","x":[29842]},{"a":29847,"t":"code","b":[24],"m":"clc"},{"a":29848,"t":"code","b":[105,5],"m":"adc","o":"#$05"},{"a":29850,"t":"code","b":[170],"m":"tax"},{"a":29851,"t":"code","b":[224,25],"m":"cpx","o":"#$19"},{"a":29853,"t":"code","b":[208,233],"m":"bne","o":"b_7488","oa":29832},{"a":29855,"t":"code","b":[96],"m":"rts"},{"a":29856,"l":"move_star","c":"Moves one star, record X at $B1B4 (+0 byte offset in its strip 0-$8F, +1 position 0-$7F within the glyph, +2 layer $00/$08/$10/$18, +3 frame counter, +4 twinkle phase): erases its byte, then moves it against the scroll velocity $B1F4 by $B8A1 + layer + |velocity| (four layers, 1 to 4 times as fast; velocity 1-6 gives 1, 2, 4, 8, 12, 16 in the slowest), stepping 8 bytes to the next glyph (wrapping within the strip) when the position crosses 7 bits. Every fourth frame it picks a random twinkle phase 0, 4, 8 or 12; the pattern $B891 + phase + (bits 6-5 of the position) sets one multicolour pixel in $D023, $D022, nothing or the character colour.","t":"code","b":[188,180,177],"m":"ldy","o":"star_table,x","oa":45492,"x":[29832]},{"a":29859,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":29861,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":29863,"t":"code","b":[173,244,177],"m":"lda","o":"wizball_speed","oa":45556},{"a":29866,"t":"code","b":[48,91],"m":"bmi","o":"b_7507","oa":29959},{"a":29868,"t":"code","b":[189,182,177],"m":"lda","o":"star_layer,x","oa":45494},{"a":29871,"t":"code","b":[13,244,177],"m":"ora","o":"wizball_speed","oa":45556},{"a":29874,"t":"code","b":[168],"m":"tay"},{"a":29875,"t":"code","b":[189,181,177],"m":"lda","o":"star_x,x","oa":45493},{"a":29878,"t":"code","b":[56],"m":"sec"},{"a":29879,"t":"code","b":[249,161,184],"m":"sbc","o":"tbl_star_speeds,y","oa":47265},{"a":29882,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":29884,"t":"code","b":[41,127],"m":"and","o":"#$7F"},{"a":29886,"t":"code","b":[157,181,177],"m":"sta","o":"star_x,x","oa":45493},{"a":29889,"t":"code","b":[197,102],"m":"cmp","o":"zp_temp_66","oa":102},{"a":29891,"t":"code","b":[240,15],"m":"beq","o":"b_74D4","oa":29908},{"a":29893,"t":"code","b":[189,180,177],"m":"lda","o":"star_table,x","oa":45492},{"a":29896,"t":"code","b":[56],"m":"sec"},{"a":29897,"t":"code","b":[233,8],"m":"sbc","o":"#$08"},{"a":29899,"t":"code","b":[201,144],"m":"cmp","o":"#$90"},{"a":29901,"t":"code","b":[144,2],"m":"bcc","o":"b_74D1","oa":29905},{"a":29903,"t":"code","b":[169,136],"m":"lda","o":"#$88"},{"a":29905,"l":"b_74D1","t":"code","b":[157,180,177],"m":"sta","o":"star_table,x","oa":45492,"x":[29901]},{"a":29908,"l":"b_74D4","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[29891,29982,29999]},{"a":29910,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":29912,"t":"code","b":[254,183,177],"m":"inc","o":"star_timer,x","oa":45495},{"a":29915,"t":"code","b":[189,183,177],"m":"lda","o":"star_timer,x","oa":45495},{"a":29918,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":29920,"t":"code","b":[208,12],"m":"bne","o":"b_74EE","oa":29934},{"a":29922,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":29925,"t":"code","b":[41,12],"m":"and","o":"#$0C"},{"a":29927,"t":"code","b":[157,184,177],"m":"sta","o":"star_twinkle,x","oa":45496},{"a":29930,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":29932,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":29934,"l":"b_74EE","t":"code","b":[189,181,177],"m":"lda","o":"star_x,x","oa":45493,"x":[29920]},{"a":29937,"t":"code","b":[10],"m":"asl","o":"a"},{"a":29938,"t":"code","b":[10],"m":"asl","o":"a"},{"a":29939,"t":"code","b":[38,102],"m":"rol","o":"zp_temp_66","oa":102},{"a":29941,"t":"code","b":[10],"m":"asl","o":"a"},{"a":29942,"t":"code","b":[38,102],"m":"rol","o":"zp_temp_66","oa":102},{"a":29944,"t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102},{"a":29946,"t":"code","b":[29,184,177],"m":"ora","o":"star_twinkle,x","oa":45496},{"a":29949,"t":"code","b":[168],"m":"tay"},{"a":29950,"t":"code","b":[185,145,184],"m":"lda","o":"tbl_star_pixels,y","oa":47249},{"a":29953,"t":"code","b":[188,180,177],"m":"ldy","o":"star_table,x","oa":45492},{"a":29956,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":29958,"t":"code","b":[96],"m":"rts"},{"a":29959,"l":"b_7507","t":"code","b":[73,255],"m":"eor","o":"#$FF","x":[29866]},{"a":29961,"t":"code","b":[29,182,177],"m":"ora","o":"star_layer,x","oa":45494},{"a":29964,"t":"code","b":[168],"m":"tay"},{"a":29965,"t":"code","b":[200],"m":"iny"},{"a":29966,"t":"code","b":[189,181,177],"m":"lda","o":"star_x,x","oa":45493},{"a":29969,"t":"code","b":[24],"m":"clc"},{"a":29970,"t":"code","b":[121,161,184],"m":"adc","o":"tbl_star_speeds,y","oa":47265},{"a":29973,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":29975,"t":"code","b":[41,127],"m":"and","o":"#$7F"},{"a":29977,"t":"code","b":[157,181,177],"m":"sta","o":"star_x,x","oa":45493},{"a":29980,"t":"code","b":[197,102],"m":"cmp","o":"zp_temp_66","oa":102},{"a":29982,"t":"code","b":[240,180],"m":"beq","o":"b_74D4","oa":29908},{"a":29984,"t":"code","b":[189,180,177],"m":"lda","o":"star_table,x","oa":45492},{"a":29987,"t":"code","b":[24],"m":"clc"},{"a":29988,"t":"code","b":[105,8],"m":"adc","o":"#$08"},{"a":29990,"t":"code","b":[201,144],"m":"cmp","o":"#$90"},{"a":29992,"t":"code","b":[144,2],"m":"bcc","o":"b_752C","oa":29996},{"a":29994,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":29996,"l":"b_752C","t":"code","b":[157,180,177],"m":"sta","o":"star_table,x","oa":45492,"x":[29992]},{"a":29999,"t":"code","b":[76,212,116],"m":"jmp","o":"b_74D4","oa":29908},{"a":30002,"l":"rng_index","c":"The state of random: an index into rng_table ($7300-$73FF), incremented before each use, one byte wrapping at 256. 0 in the loaded image; the initialisation calls random 98 times ($EC93) while it overwrites itself.","t":"byte","b":[0],"x":[30003,30006]},{"a":30003,"l":"random","c":"Returns a pseudo-random byte in A (Y = the new index; flags from A): increments rng_index and exclusive-ORs the byte at $7300 + index, the game's own code used as a 256-byte table, with the low byte of CIA 2 timer B ($DD06). The initialisation sets timer B's latch to $FFFF and starts it counting every cycle ($EC43-$EC67), so that byte is the cycle count modulo 256 at the moment of the call: the result depends on exactly when the game calls, which varies with everything the player does. 28 callers, among them the stars, sound effect $18 ($455B), the explosion debris, the aliens and the start position.","t":"code","b":[238,50,117],"m":"inc","o":"rng_index","oa":30002,"x":[17755,29922,30046,30056,30120,32142,32153,32897,34342,37060,37075,37083,39963,40023,40395,40909,40920,40931,40942,40951,40963,41113,41174,41183,43704,44892,44903,60563]},{"a":30006,"t":"code","b":[172,50,117],"m":"ldy","o":"rng_index","oa":30002},{"a":30009,"t":"code","b":[185,0,115],"m":"lda","o":"rng_table,y","oa":29440},{"a":30012,"s":"CIA 2 timer B low byte, free-running","t":"code","b":[77,6,221],"m":"eor","o":"cia2_timer_b_lo"},{"a":30015,"t":"code","b":[96],"m":"rts"},{"a":30016,"l":"clear_sky_and_bullets","c":"Before each turn ($63DA): clears the 90 sky glyphs at $F808-$FAD7 (glyphs 1-90 of the landscape set at $F800, five strips of 18) and $0480-$04FF (the bullet records and what follows), then puts one fixed dot in each strip: a random single-pixel pattern from $B891-$B898 at a random offset 0-127 from $F808 + 144n.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[25562]},{"a":30018,"t":"code","b":[170],"m":"tax"},{"a":30019,"l":"b_7543","t":"code","b":[157,8,248],"m":"sta","o":"glyphs_stars_01_20,x","oa":63496,"x":[30036]},{"a":30022,"t":"code","b":[157,8,249],"m":"sta","o":"glyphs_stars_21_40,x","oa":63752},{"a":30025,"t":"code","b":[157,216,249],"m":"sta","o":"glyphs_stars_3b_5a,x","oa":63960},{"a":30028,"t":"code","b":[224,128],"m":"cpx","o":"#$80"},{"a":30030,"t":"code","b":[16,3],"m":"bpl","o":"b_7553","oa":30035},{"a":30032,"t":"code","b":[157,128,4],"m":"sta","o":"shot_column,x","oa":1152},{"a":30035,"l":"b_7553","t":"code","b":[232],"m":"inx","x":[30030]},{"a":30036,"t":"code","b":[208,237],"m":"bne","o":"b_7543","oa":30019},{"a":30038,"t":"code","b":[169,8],"m":"lda","o":"#$08"},{"a":30040,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":30042,"t":"code","b":[169,248],"m":"lda","o":"#$F8"},{"a":30044,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":30046,"l":"b_755E","t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003,"x":[30083]},{"a":30049,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":30051,"t":"code","b":[168],"m":"tay"},{"a":30052,"t":"code","b":[185,145,184],"m":"lda","o":"tbl_star_pixels,y","oa":47249},{"a":30055,"t":"code","b":[72],"m":"pha"},{"a":30056,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":30059,"t":"code","b":[41,127],"m":"and","o":"#$7F"},{"a":30061,"t":"code","b":[168],"m":"tay"},{"a":30062,"t":"code","b":[104],"m":"pla"},{"a":30063,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":30065,"t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96},{"a":30067,"t":"code","b":[24],"m":"clc"},{"a":30068,"t":"code","b":[105,144],"m":"adc","o":"#$90"},{"a":30070,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":30072,"t":"code","b":[144,2],"m":"bcc","o":"b_757C","oa":30076},{"a":30074,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":30076,"l":"b_757C","t":"code","b":[138],"m":"txa","x":[30072]},{"a":30077,"t":"code","b":[24],"m":"clc"},{"a":30078,"t":"code","b":[105,5],"m":"adc","o":"#$05"},{"a":30080,"t":"code","b":[170],"m":"tax"},{"a":30081,"t":"code","b":[224,25],"m":"cpx","o":"#$19"},{"a":30083,"t":"code","b":[208,217],"m":"bne","o":"b_755E","oa":30046},{"a":30085,"t":"code","b":[96],"m":"rts"},{"a":30086,"l":"choose_start_column","c":"Picks where the view starts for a new turn (from start_landscape): from the level's record at $B2F0 + 4 x level ($B128: start block column, block row, column within the block, 0) it takes that block row of the map (pointers $0460/$0470) from 6 blocks right of the start column, and from a random block 0-31 searches right up to block 36 (then left down to 0, and round again) for two consecutive empty blocks (number 0); the view column $B1F1 = 5 x (index of the second) + 2. The search has no exit if no such pair exists.","t":"code","b":[173,40,177],"m":"lda","o":"current_level","oa":45352,"x":[30176]},{"a":30089,"t":"code","b":[10],"m":"asl","o":"a"},{"a":30090,"t":"code","b":[10],"m":"asl","o":"a"},{"a":30091,"t":"code","b":[170],"m":"tax"},{"a":30092,"t":"code","b":[188,241,178],"m":"ldy","o":"tbl_level_map_rows,x","oa":45809},{"a":30095,"t":"code","b":[185,112,4],"m":"lda","o":"map_row_hi,y","oa":1136},{"a":30098,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":30100,"t":"code","b":[189,240,178],"m":"lda","o":"tbl_level_map_start,x","oa":45808},{"a":30103,"t":"code","b":[24],"m":"clc"},{"a":30104,"t":"code","b":[105,6],"m":"adc","o":"#$06"},{"a":30106,"t":"code","b":[133,129],"m":"sta","o":"start_column_offset","oa":129},{"a":30108,"t":"code","b":[185,96,4],"m":"lda","o":"map_row_lo,y","oa":1120},{"a":30111,"t":"code","b":[24],"m":"clc"},{"a":30112,"t":"code","b":[101,129],"m":"adc","o":"start_column_offset","oa":129},{"a":30114,"t":"code","b":[144,2],"m":"bcc","o":"b_75A6","oa":30118},{"a":30116,"t":"code","b":[230,99],"m":"inc","o":"zp_ptr_63","oa":99},{"a":30118,"l":"b_75A6","t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98,"x":[30114]},{"a":30120,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":30123,"t":"code","b":[41,31],"m":"and","o":"#$1F"},{"a":30125,"t":"code","b":[168],"m":"tay"},{"a":30126,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":30128,"l":"b_75B0","t":"code","b":[177,98],"m":"lda","o":"(zp_ptr_62),y","oa":98,"x":[30145,30150,30155,30158]},{"a":30130,"t":"code","b":[208,6],"m":"bne","o":"b_75BA","oa":30138},{"a":30132,"t":"code","b":[200],"m":"iny"},{"a":30133,"t":"code","b":[177,98],"m":"lda","o":"(zp_ptr_62),y","oa":98},{"a":30135,"t":"code","b":[240,23],"m":"beq","o":"b_75D0","oa":30160},{"a":30137,"t":"code","b":[136],"m":"dey"},{"a":30138,"l":"b_75BA","t":"code","b":[224,0],"m":"cpx","o":"#$00","x":[30130]},{"a":30140,"t":"code","b":[240,10],"m":"beq","o":"b_75C8","oa":30152},{"a":30142,"t":"code","b":[136],"m":"dey"},{"a":30143,"t":"code","b":[192,255],"m":"cpy","o":"#$FF"},{"a":30145,"t":"code","b":[208,237],"m":"bne","o":"b_75B0","oa":30128},{"a":30147,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":30149,"t":"code","b":[202],"m":"dex"},{"a":30150,"t":"code","b":[240,232],"m":"beq","o":"b_75B0","oa":30128},{"a":30152,"l":"b_75C8","t":"code","b":[200],"m":"iny","x":[30140]},{"a":30153,"t":"code","b":[192,36],"m":"cpy","o":"#$24"},{"a":30155,"t":"code","b":[208,227],"m":"bne","o":"b_75B0","oa":30128},{"a":30157,"t":"code","b":[232],"m":"inx"},{"a":30158,"t":"code","b":[208,224],"m":"bne","o":"b_75B0","oa":30128},{"a":30160,"l":"b_75D0","t":"code","b":[152],"m":"tya","x":[30135]},{"a":30161,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":30163,"t":"code","b":[10],"m":"asl","o":"a"},{"a":30164,"t":"code","b":[10],"m":"asl","o":"a"},{"a":30165,"t":"code","b":[24],"m":"clc"},{"a":30166,"t":"code","b":[101,102],"m":"adc","o":"zp_temp_66","oa":102},{"a":30168,"t":"code","b":[24],"m":"clc"},{"a":30169,"t":"code","b":[105,2],"m":"adc","o":"#$02"},{"a":30171,"t":"code","b":[141,241,177],"m":"sta","o":"view_column","oa":45553},{"a":30174,"t":"code","b":[96],"m":"rts"},{"a":30175,"l":"draw_jump_blocks","c":"How many block columns draw_landscape draws before its map source jumps 4 block rows down and 4 block columns back, so one screen is made of two parts of the map: $FF from start_landscape (never within 8 blocks), 5 from $AB25 and $AF2A, $38 from $AE16. Counted down at $7697.","t":"byte","b":[0],"x":[30181,30359,43813,44566,44842]},{"a":30176,"l":"start_landscape","c":"Starts a turn's landscape (JMP from $63DD at the end of $63CA; JSR from $6522 and $8267): choose_start_column, draw_jump_blocks = $FF, then draw_landscape with A = 1 (full level set-up).","t":"code","b":[32,134,117],"m":"jsr","o":"choose_start_column","oa":30086,"x":[25565,25890,33383]},{"a":30179,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":30181,"t":"code","b":[141,223,117],"m":"sta","o":"draw_jump_blocks","oa":30175},{"a":30184,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":30186,"l":"draw_landscape","c":"Draws a whole landscape screen into a hidden buffer and shows it. A = 1 also sets up the level's graphics and colours (setup_level_graphics), 0 only copies the glyphs and applies the colours; A is kept in $AB9C. If the band shows screen 0 ($B1FD = 0) it draws into screen 1 ($E400), else into screen 0 ($E000), with $B1FE the target, and resets the roles $B203-$B205 and build counters $B200-$B202 to match. The map position $B209-$B20C is the level's record at $B2F0 plus the view column $B1F1 in blocks of 5 columns. For each of 40 columns it fetches the map column (fetch_left_column; a blank one while $B874 is set), fills in the sky (sky_fill_next) and writes it to rows 3-22 (put_column); draw_jump_blocks can move the source mid-screen. After the raster passes line $C8 ($6E83) it shows the new screen and builds the other two with eight calls of build_scroll_buffer.","t":"code","b":[141,156,171],"m":"sta","o":"landscape_load_mode","oa":43932,"x":[43816,44580,44847]},{"a":30189,"t":"code","b":[173,253,177],"m":"lda","o":"screen_shown","oa":45565},{"a":30192,"t":"code","b":[240,31],"m":"beq","o":"b_7611","oa":30225},{"a":30194,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":30196,"t":"code","b":[141,254,177],"m":"sta","o":"screen_drawn","oa":45566},{"a":30199,"t":"code","b":[141,1,178],"m":"sta","o":"strip_rebuild_e400","oa":45569},{"a":30202,"t":"code","b":[141,2,178],"m":"sta","o":"strip_rebuild_e800","oa":45570},{"a":30205,"t":"code","b":[141,3,178],"m":"sta","o":"strip_role_e000","oa":45571},{"a":30208,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":30210,"t":"code","b":[141,4,178],"m":"sta","o":"strip_role_e400","oa":45572},{"a":30213,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":30215,"t":"code","b":[141,5,178],"m":"sta","o":"strip_role_e800","oa":45573},{"a":30218,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":30220,"t":"code","b":[141,0,178],"m":"sta","o":"strip_rebuild_e000","oa":45568},{"a":30223,"t":"code","b":[208,31],"m":"bne","o":"b_7630","oa":30256},{"a":30225,"l":"b_7611","t":"code","b":[169,16],"m":"lda","o":"#$10","x":[30192]},{"a":30227,"t":"code","b":[141,254,177],"m":"sta","o":"screen_drawn","oa":45566},{"a":30230,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":30232,"t":"code","b":[141,0,178],"m":"sta","o":"strip_rebuild_e000","oa":45568},{"a":30235,"t":"code","b":[141,2,178],"m":"sta","o":"strip_rebuild_e800","oa":45570},{"a":30238,"t":"code","b":[141,4,178],"m":"sta","o":"strip_role_e400","oa":45572},{"a":30241,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":30243,"t":"code","b":[141,1,178],"m":"sta","o":"strip_rebuild_e400","oa":45569},{"a":30246,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":30248,"t":"code","b":[141,3,178],"m":"sta","o":"strip_role_e000","oa":45571},{"a":30251,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":30253,"t":"code","b":[141,5,178],"m":"sta","o":"strip_role_e800","oa":45573},{"a":30256,"l":"b_7630","t":"code","b":[173,40,177],"m":"lda","o":"current_level","oa":45352,"x":[30223]},{"a":30259,"t":"code","b":[10],"m":"asl","o":"a"},{"a":30260,"t":"code","b":[10],"m":"asl","o":"a"},{"a":30261,"t":"code","b":[168],"m":"tay"},{"a":30262,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":30264,"l":"b_7638","t":"code","b":[185,240,178],"m":"lda","o":"tbl_level_map_start,y","oa":45808,"x":[30274]},{"a":30267,"t":"code","b":[157,9,178],"m":"sta","o":"map_column,x","oa":45577},{"a":30270,"t":"code","b":[200],"m":"iny"},{"a":30271,"t":"code","b":[232],"m":"inx"},{"a":30272,"t":"code","b":[224,4],"m":"cpx","o":"#$04"},{"a":30274,"t":"code","b":[208,244],"m":"bne","o":"b_7638","oa":30264},{"a":30276,"t":"code","b":[173,11,178],"m":"lda","o":"map_subcolumn","oa":45579},{"a":30279,"t":"code","b":[24],"m":"clc"},{"a":30280,"t":"code","b":[109,241,177],"m":"adc","o":"view_column","oa":45553},{"a":30283,"t":"code","b":[206,9,178],"m":"dec","o":"map_column","oa":45577},{"a":30286,"l":"b_764E","t":"code","b":[238,9,178],"m":"inc","o":"map_column","oa":45577,"x":[30292]},{"a":30289,"t":"code","b":[56],"m":"sec"},{"a":30290,"t":"code","b":[233,5],"m":"sbc","o":"#$05"},{"a":30292,"t":"code","b":[176,248],"m":"bcs","o":"b_764E","oa":30286},{"a":30294,"t":"code","b":[105,5],"m":"adc","o":"#$05"},{"a":30296,"t":"code","b":[141,11,178],"m":"sta","o":"map_subcolumn","oa":45579},{"a":30299,"t":"code","b":[72],"m":"pha"},{"a":30300,"t":"code","b":[173,9,178],"m":"lda","o":"map_column","oa":45577},{"a":30303,"t":"code","b":[72],"m":"pha"},{"a":30304,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":30306,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":30308,"t":"code","b":[208,36],"m":"bne","o":"b_768A","oa":30346},{"a":30310,"l":"b_7666","t":"code","b":[173,116,184],"m":"lda","o":"bonus_stage","oa":47220,"x":[30393]},{"a":30313,"t":"code","b":[240,12],"m":"beq","o":"b_7677","oa":30327},{"a":30315,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":30317,"t":"code","b":[162,20],"m":"ldx","o":"#$14"},{"a":30319,"l":"b_766F","t":"code","b":[157,153,231],"m":"sta","o":"scroll_column_minus_1,x","oa":59289,"x":[30323]},{"a":30322,"t":"code","b":[202],"m":"dex"},{"a":30323,"t":"code","b":[208,250],"m":"bne","o":"b_766F","oa":30319},{"a":30325,"t":"code","b":[240,3],"m":"beq","o":"b_767A","oa":30330},{"a":30327,"l":"b_7677","t":"code","b":[32,207,120],"m":"jsr","o":"fetch_left_column","oa":30927,"x":[30313]},{"a":30330,"l":"b_767A","t":"code","b":[32,120,121],"m":"jsr","o":"sky_fill_next","oa":31096,"x":[30325]},{"a":30333,"t":"code","b":[173,254,177],"m":"lda","o":"screen_drawn","oa":45566},{"a":30336,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":30337,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":30338,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":30339,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":30340,"t":"code","b":[170],"m":"tax"},{"a":30341,"t":"code","b":[165,103],"m":"lda","o":"zp_temp_67","oa":103},{"a":30343,"t":"code","b":[32,67,122],"m":"jsr","o":"put_column","oa":31299},{"a":30346,"l":"b_768A","t":"code","b":[238,11,178],"m":"inc","o":"map_subcolumn","oa":45579,"x":[30308]},{"a":30349,"t":"code","b":[173,11,178],"m":"lda","o":"map_subcolumn","oa":45579},{"a":30352,"t":"code","b":[201,5],"m":"cmp","o":"#$05"},{"a":30354,"t":"code","b":[48,31],"m":"bmi","o":"b_76B3","oa":30387},{"a":30356,"t":"code","b":[238,9,178],"m":"inc","o":"map_column","oa":45577},{"a":30359,"t":"code","b":[206,223,117],"m":"dec","o":"draw_jump_blocks","oa":30175},{"a":30362,"t":"code","b":[208,18],"m":"bne","o":"b_76AE","oa":30382},{"a":30364,"t":"code","b":[173,10,178],"m":"lda","o":"map_row_base","oa":45578},{"a":30367,"t":"code","b":[24],"m":"clc"},{"a":30368,"t":"code","b":[105,4],"m":"adc","o":"#$04"},{"a":30370,"t":"code","b":[141,10,178],"m":"sta","o":"map_row_base","oa":45578},{"a":30373,"t":"code","b":[173,9,178],"m":"lda","o":"map_column","oa":45577},{"a":30376,"t":"code","b":[56],"m":"sec"},{"a":30377,"t":"code","b":[233,4],"m":"sbc","o":"#$04"},{"a":30379,"t":"code","b":[141,9,178],"m":"sta","o":"map_column","oa":45577},{"a":30382,"l":"b_76AE","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[30362]},{"a":30384,"t":"code","b":[141,11,178],"m":"sta","o":"map_subcolumn","oa":45579},{"a":30387,"l":"b_76B3","t":"code","b":[230,103],"m":"inc","o":"zp_temp_67","oa":103,"x":[30354]},{"a":30389,"t":"code","b":[165,103],"m":"lda","o":"zp_temp_67","oa":103},{"a":30391,"t":"code","b":[201,40],"m":"cmp","o":"#$28"},{"a":30393,"t":"code","b":[208,171],"m":"bne","o":"b_7666","oa":30310},{"a":30395,"t":"code","b":[104],"m":"pla"},{"a":30396,"t":"code","b":[141,9,178],"m":"sta","o":"map_column","oa":45577},{"a":30399,"t":"code","b":[104],"m":"pla"},{"a":30400,"t":"code","b":[141,11,178],"m":"sta","o":"map_subcolumn","oa":45579},{"a":30403,"t":"code","b":[32,131,110],"m":"jsr","o":"wait_raster_low","oa":28291},{"a":30406,"t":"code","b":[173,254,177],"m":"lda","o":"screen_drawn","oa":45566},{"a":30409,"t":"code","b":[141,253,177],"m":"sta","o":"screen_shown","oa":45565},{"a":30412,"t":"code","b":[173,156,171],"m":"lda","o":"landscape_load_mode","oa":43932},{"a":30415,"t":"code","b":[240,6],"m":"beq","o":"b_76D7","oa":30423},{"a":30417,"t":"code","b":[32,109,119],"m":"jsr","o":"setup_level_graphics","oa":30573},{"a":30420,"t":"code","b":[76,221,118],"m":"jmp","o":"j_76DD","oa":30429},{"a":30423,"l":"b_76D7","t":"code","b":[32,198,119],"m":"jsr","o":"copy_level_glyphs","oa":30662,"x":[30415]},{"a":30426,"t":"code","b":[32,26,125],"m":"jsr","o":"set_landscape_colours","oa":32026},{"a":30429,"l":"j_76DD","t":"code","b":[169,8],"m":"lda","o":"#$08","x":[30420]},{"a":30431,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":30433,"l":"b_76E1","t":"code","b":[32,247,119],"m":"jsr","o":"build_scroll_buffer","oa":30711,"x":[30438]},{"a":30436,"t":"code","b":[198,103],"m":"dec","o":"zp_temp_67","oa":103},{"a":30438,"t":"code","b":[208,249],"m":"bne","o":"b_76E1","oa":30433},{"a":30440,"t":"code","b":[96],"m":"rts"},{"a":30441,"l":"tbl_wide_pixel","c":"Sprite-row masks for draw_level_digit_sprite, 8 entries of 3 bytes ($76E9-$7700): entry n, for bit n of a glyph row (bit 0 at the right), sets 3 adjacent pixels of a 24-pixel sprite row: 00 00 07, 00 00 38, 00 01 C0, 00 0E 00, 00 70 00, 03 80 00, 1C 00 00, E0 00 00. $76E9 is the left byte of each entry, read as $76E9,Y with Y = 3n.","t":"byte","b":[0],"x":[30508]},{"a":30442,"l":"tbl_wide_pixel_mid","c":"The middle byte of each 3-byte entry of tbl_wide_pixel, read by draw_level_digit_sprite as $76EA,Y (Y = 3n); this label owns the one byte of entry 0.","t":"byte","b":[0],"x":[30520]},{"a":30443,"l":"tbl_wide_pixel_right","c":"The right byte of each 3-byte entry of tbl_wide_pixel, read as $76EB,Y (Y = 3n); this label's span runs to $7700 and so holds entries 1-7 of the table.","t":"byte","b":[7,0,0,56,0,1,192,0],"x":[30532]},{"a":30451,"t":"byte","b":[14,0,0,112,0,3,128,0]},{"a":30459,"t":"byte","b":[28,0,0,224,0,0]},{"a":30465,"l":"tbl_digit_flash_offset","c":"One byte per level (9 entries, $7701-$7709, index $B128): 0, $0C, $14 in turn, the start in the colour table $B5CB of the level-number sprite's flashing; draw_level_digit_sprite copies it to digit_flash_offset.","t":"byte","b":[0,12,20,0,12,20,0,12],"x":[30566]},{"a":30473,"t":"byte","b":[20]},{"a":30474,"l":"digit_flash_frame","c":"Frame counter for the level-number sprite's flashing, incremented by the cauldron band at $8B9A; every second frame it advances digit_flash_step.","t":"byte","b":[0],"x":[35738,35741]},{"a":30475,"l":"digit_flash_step","c":"Step of the level-number sprite's colour cycle, advanced every second frame at $8BA4; the band takes it AND 7, adds digit_flash_offset and stores the colour from $B5CB + that in $B515, sprite 0's colour in the cauldron band.","t":"byte","b":[0],"x":[35748,35751]},{"a":30476,"l":"digit_flash_offset","c":"Offset (0, $0C or $14) of the level-number sprite's colour cycle within $B5CB, set per level by draw_level_digit_sprite from tbl_digit_flash_offset and added at $8BAD.","t":"byte","b":[0],"x":[30569,35757]},{"a":30477,"l":"draw_level_digit_sprite","c":"Draws the level number into sprite shape $A0 at $E800 (cleared just before by setup_level_graphics): the digit is glyph $31 + level ($B128) of the character set at $F000, read from $F188 + 8 x level; each of its first 7 rows is widened three times through tbl_wide_pixel and written to two sprite rows, a 24 x 14-pixel digit. The cauldron band shows it as sprite 0 (pointer $B51D = $A0). Also sets digit_flash_offset from tbl_digit_flash_offset.","t":"code","b":[169,241],"m":"lda","o":"#$F1","x":[30588]},{"a":30479,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":30481,"t":"code","b":[173,40,177],"m":"lda","o":"current_level","oa":45352},{"a":30484,"t":"code","b":[10],"m":"asl","o":"a"},{"a":30485,"t":"code","b":[10],"m":"asl","o":"a"},{"a":30486,"t":"code","b":[10],"m":"asl","o":"a"},{"a":30487,"t":"code","b":[24],"m":"clc"},{"a":30488,"t":"code","b":[105,136],"m":"adc","o":"#$88"},{"a":30490,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":30492,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":30494,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":30496,"l":"b_7720","t":"code","b":[177,98],"m":"lda","o":"(zp_ptr_62),y","oa":98,"x":[30561]},{"a":30498,"t":"code","b":[132,95],"m":"sty","o":"zp_temp_5f","oa":95},{"a":30500,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":30502,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":30504,"l":"b_7728","t":"code","b":[70,102],"m":"lsr","o":"zp_temp_66","oa":102,"x":[30549]},{"a":30506,"t":"code","b":[144,36],"m":"bcc","o":"b_7750","oa":30544},{"a":30508,"t":"code","b":[185,233,118],"m":"lda","o":"tbl_wide_pixel,y","oa":30441},{"a":30511,"t":"code","b":[29,0,232],"m":"ora","o":"sprite_level_digit,x","oa":59392},{"a":30514,"t":"code","b":[157,0,232],"m":"sta","o":"sprite_level_digit,x","oa":59392},{"a":30517,"t":"code","b":[157,3,232],"m":"sta","o":"sprite_level_digit_row1,x","oa":59395},{"a":30520,"t":"code","b":[185,234,118],"m":"lda","o":"tbl_wide_pixel_mid,y","oa":30442},{"a":30523,"t":"code","b":[29,1,232],"m":"ora","o":"sprite_level_digit_b1,x","oa":59393},{"a":30526,"t":"code","b":[157,1,232],"m":"sta","o":"sprite_level_digit_b1,x","oa":59393},{"a":30529,"t":"code","b":[157,4,232],"m":"sta","o":"sprite_level_digit_row1_b1,x","oa":59396},{"a":30532,"t":"code","b":[185,235,118],"m":"lda","o":"tbl_wide_pixel_right,y","oa":30443},{"a":30535,"t":"code","b":[29,2,232],"m":"ora","o":"sprite_level_digit_b2,x","oa":59394},{"a":30538,"t":"code","b":[157,2,232],"m":"sta","o":"sprite_level_digit_b2,x","oa":59394},{"a":30541,"t":"code","b":[157,5,232],"m":"sta","o":"sprite_level_digit_row1_b2,x","oa":59397},{"a":30544,"l":"b_7750","t":"code","b":[200],"m":"iny","x":[30506]},{"a":30545,"t":"code","b":[200],"m":"iny"},{"a":30546,"t":"code","b":[200],"m":"iny"},{"a":30547,"t":"code","b":[192,24],"m":"cpy","o":"#$18"},{"a":30549,"t":"code","b":[208,209],"m":"bne","o":"b_7728","oa":30504},{"a":30551,"t":"code","b":[138],"m":"txa"},{"a":30552,"t":"code","b":[24],"m":"clc"},{"a":30553,"t":"code","b":[105,6],"m":"adc","o":"#$06"},{"a":30555,"t":"code","b":[170],"m":"tax"},{"a":30556,"t":"code","b":[164,95],"m":"ldy","o":"zp_temp_5f","oa":95},{"a":30558,"t":"code","b":[200],"m":"iny"},{"a":30559,"t":"code","b":[192,7],"m":"cpy","o":"#$07"},{"a":30561,"t":"code","b":[208,189],"m":"bne","o":"b_7720","oa":30496},{"a":30563,"t":"code","b":[174,40,177],"m":"ldx","o":"current_level","oa":45352},{"a":30566,"t":"code","b":[189,1,119],"m":"lda","o":"tbl_digit_flash_offset,x","oa":30465},{"a":30569,"t":"code","b":[141,12,119],"m":"sta","o":"digit_flash_offset","oa":30476},{"a":30572,"t":"code","b":[96],"m":"rts"},{"a":30573,"l":"setup_level_graphics","c":"Sets up a level's graphics (from draw_landscape with A = 1; $9E09, $AE27): copies its glyphs to $FD00 (copy_level_glyphs), clears sprite shape $A0 and draws the level digit in it (draw_level_digit_sprite), clears $9EC9, copies the target cauldron's shape $CE00-$CE3F to shape $BC at $EF00-$EF3F, then sets the landscape colours: the greys $B27D = $0B, $B27E = $0C, $B27F = 9, of which the first $B11F + level are replaced by the level's own colours from $B1D1 + 4 x level (the colours already restored), while the next byte of that record, the colour to mix now, goes to $B51A, the target cauldron's sprite colour. $B27F gets bit 3 (multicolour) and set_landscape_colours applies them.","t":"code","b":[32,198,119],"m":"jsr","o":"copy_level_glyphs","oa":30662,"x":[30417,40457,44583]},{"a":30576,"t":"code","b":[160,160],"m":"ldy","o":"#$A0"},{"a":30578,"t":"code","b":[162,1],"m":"ldx","o":"#$01"},{"a":30580,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":30582,"t":"code","b":[141,201,158],"m":"sta","o":"cauldron_rows_mix","oa":40649},{"a":30585,"t":"code","b":[32,21,143],"m":"jsr","o":"fill_sprite_blocks","oa":36629},{"a":30588,"t":"code","b":[32,13,119],"m":"jsr","o":"draw_level_digit_sprite","oa":30477},{"a":30591,"t":"code","b":[160,64],"m":"ldy","o":"#$40"},{"a":30593,"l":"b_7781","t":"code","b":[185,255,205],"m":"lda","o":"cauldron_empty_minus_1,y","oa":52735,"x":[30600]},{"a":30596,"t":"code","b":[153,255,238],"m":"sta","o":"cauldron_target_minus_1,y","oa":61183},{"a":30599,"t":"code","b":[136],"m":"dey"},{"a":30600,"t":"code","b":[208,247],"m":"bne","o":"b_7781","oa":30593},{"a":30602,"t":"code","b":[169,11],"m":"lda","o":"#$0B"},{"a":30604,"t":"code","b":[141,125,178],"m":"sta","o":"landscape_colour_1","oa":45693},{"a":30607,"t":"code","b":[169,12],"m":"lda","o":"#$0C"},{"a":30609,"t":"code","b":[141,126,178],"m":"sta","o":"landscape_colour_2","oa":45694},{"a":30612,"t":"code","b":[169,9],"m":"lda","o":"#$09"},{"a":30614,"t":"code","b":[141,127,178],"m":"sta","o":"landscape_colour_3","oa":45695},{"a":30617,"t":"code","b":[173,40,177],"m":"lda","o":"current_level","oa":45352},{"a":30620,"t":"code","b":[168],"m":"tay"},{"a":30621,"t":"code","b":[10],"m":"asl","o":"a"},{"a":30622,"t":"code","b":[10],"m":"asl","o":"a"},{"a":30623,"t":"code","b":[170],"m":"tax"},{"a":30624,"t":"code","b":[185,31,177],"m":"lda","o":"level_colours_done,y","oa":45343},{"a":30627,"t":"code","b":[240,16],"m":"beq","o":"b_77B5","oa":30645},{"a":30629,"t":"code","b":[133,95],"m":"sta","o":"zp_temp_5f","oa":95},{"a":30631,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":30633,"l":"b_77A9","t":"code","b":[189,209,177],"m":"lda","o":"level_colour_recipe,x","oa":45521,"x":[30643]},{"a":30636,"t":"code","b":[153,125,178],"m":"sta","o":"landscape_colour_1,y","oa":45693},{"a":30639,"t":"code","b":[232],"m":"inx"},{"a":30640,"t":"code","b":[200],"m":"iny"},{"a":30641,"t":"code","b":[198,95],"m":"dec","o":"zp_temp_5f","oa":95},{"a":30643,"t":"code","b":[208,244],"m":"bne","o":"b_77A9","oa":30633},{"a":30645,"l":"b_77B5","t":"code","b":[189,209,177],"m":"lda","o":"level_colour_recipe,x","oa":45521,"x":[30627]},{"a":30648,"t":"code","b":[141,26,181],"m":"sta","o":"target_colour","oa":46362},{"a":30651,"t":"code","b":[173,127,178],"m":"lda","o":"landscape_colour_3","oa":45695},{"a":30654,"t":"code","b":[9,8],"m":"ora","o":"#$08"},{"a":30656,"t":"code","b":[141,127,178],"m":"sta","o":"landscape_colour_3","oa":45695},{"a":30659,"t":"code","b":[76,26,125],"m":"jmp","o":"set_landscape_colours","oa":32026},{"a":30662,"l":"copy_level_glyphs","c":"Copies the level's 760 bytes of landscape glyphs to $FD00-$FFF7, glyphs $A0-$FE of the character set at $F800, stopping short of glyph $FF so the processor vectors at $FFFA-$FFFF survive. The source is the word at $B31C + 2 x level ($B128), $1142 for the first level.","t":"code","b":[173,40,177],"m":"lda","o":"current_level","oa":45352,"x":[30423,30573]},{"a":30665,"t":"code","b":[10],"m":"asl","o":"a"},{"a":30666,"t":"code","b":[168],"m":"tay"},{"a":30667,"t":"code","b":[185,28,179],"m":"lda","o":"tbl_level_graphics,y","oa":45852},{"a":30670,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":30672,"t":"code","b":[185,29,179],"m":"lda","o":"tbl_level_graphics_hi,y","oa":45853},{"a":30675,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":30677,"t":"code","b":[162,2],"m":"ldx","o":"#$02"},{"a":30679,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":30681,"t":"code","b":[132,96],"m":"sty","o":"zp_ptr_60","oa":96},{"a":30683,"t":"code","b":[169,253],"m":"lda","o":"#$FD"},{"a":30685,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":30687,"l":"b_77DF","t":"code","b":[177,98],"m":"lda","o":"(zp_ptr_62),y","oa":98,"x":[30692,30699]},{"a":30689,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":30691,"t":"code","b":[200],"m":"iny"},{"a":30692,"t":"code","b":[208,249],"m":"bne","o":"b_77DF","oa":30687},{"a":30694,"t":"code","b":[230,99],"m":"inc","o":"zp_ptr_63","oa":99},{"a":30696,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":30698,"t":"code","b":[202],"m":"dex"},{"a":30699,"t":"code","b":[208,242],"m":"bne","o":"b_77DF","oa":30687},{"a":30701,"l":"b_77ED","t":"code","b":[177,98],"m":"lda","o":"(zp_ptr_62),y","oa":98,"x":[30708]},{"a":30703,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":30705,"t":"code","b":[200],"m":"iny"},{"a":30706,"t":"code","b":[192,248],"m":"cpy","o":"#$F8"},{"a":30708,"t":"code","b":[208,247],"m":"bne","o":"b_77ED","oa":30701},{"a":30710,"t":"code","b":[96],"m":"rts"},{"a":30711,"l":"build_scroll_buffer","c":"Builds a quarter of a scroll buffer, once a frame (frame loop $6439; eight times at $76E1; $AEA5). The landscape band shows one of three screens, $E000, $E400 or $E800 ($B1FD = 0, $10, $20); each has a role in $B203-$B205 (0 shown, 1 ready for a one-column step left, 2 for a step right) and a build counter 0-4 in $B200-$B202. This picks the first unfinished one (screen 2, 1, 0), counts it up and copies the next of four chunks of rows 3-22 of the shown screen into it, shifted one column (right for role 1, left for role 2): 226 bytes a chunk, 126 the last, through the self-modified loop at $787A. After the fourth chunk it draws the new edge column from the map: column 0 for role 1 (fetch_left_column, sky_fill_previous, put_column_left), column 39 for role 2 (fetch_right_column, sky_fill_right, put_column_right). $64 = the screen, $65 = its role, $61 = the chunk's byte count.","t":"code","b":[162,3],"m":"ldx","o":"#$03","x":[25657,30433,44709]},{"a":30713,"l":"b_77F9","t":"code","b":[189,255,177],"m":"lda","o":"scroll_step,x","oa":45567,"x":[30721]},{"a":30716,"t":"code","b":[201,4],"m":"cmp","o":"#$04"},{"a":30718,"t":"code","b":[48,4],"m":"bmi","o":"b_7804","oa":30724},{"a":30720,"t":"code","b":[202],"m":"dex"},{"a":30721,"t":"code","b":[208,246],"m":"bne","o":"b_77F9","oa":30713},{"a":30723,"t":"code","b":[96],"m":"rts"},{"a":30724,"l":"b_7804","t":"code","b":[202],"m":"dex","x":[30718]},{"a":30725,"t":"code","b":[134,100],"m":"stx","o":"zp_ptr_64","oa":100},{"a":30727,"t":"code","b":[254,0,178],"m":"inc","o":"strip_rebuild_e000,x","oa":45568},{"a":30730,"t":"code","b":[72],"m":"pha"},{"a":30731,"t":"code","b":[168],"m":"tay"},{"a":30732,"t":"code","b":[169,113],"m":"lda","o":"#$71"},{"a":30734,"t":"code","b":[192,3],"m":"cpy","o":"#$03"},{"a":30736,"t":"code","b":[208,2],"m":"bne","o":"b_7814","oa":30740},{"a":30738,"t":"code","b":[169,63],"m":"lda","o":"#$3F"},{"a":30740,"l":"b_7814","t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97,"x":[30736]},{"a":30742,"t":"code","b":[185,50,179],"m":"lda","o":"tbl_strip_quarter_lo,y","oa":45874},{"a":30745,"t":"code","b":[141,123,120],"m":"sta","o":"shift_src1_lo","oa":30843},{"a":30748,"t":"code","b":[141,126,120],"m":"sta","o":"shift_dst1_lo","oa":30846},{"a":30751,"t":"code","b":[185,54,179],"m":"lda","o":"tbl_strip_quarter_hi,y","oa":45878},{"a":30754,"t":"code","b":[133,95],"m":"sta","o":"zp_temp_5f","oa":95},{"a":30756,"t":"code","b":[24],"m":"clc"},{"a":30757,"t":"code","b":[125,58,179],"m":"adc","o":"tbl_screen_pages,x","oa":45882},{"a":30760,"t":"code","b":[141,127,120],"m":"sta","o":"shift_dst1_hi","oa":30847},{"a":30763,"t":"code","b":[173,253,177],"m":"lda","o":"screen_shown","oa":45565},{"a":30766,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":30767,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":30768,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":30769,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":30770,"t":"code","b":[168],"m":"tay"},{"a":30771,"t":"code","b":[185,58,179],"m":"lda","o":"tbl_screen_pages,y","oa":45882},{"a":30774,"t":"code","b":[24],"m":"clc"},{"a":30775,"t":"code","b":[101,95],"m":"adc","o":"zp_temp_5f","oa":95},{"a":30777,"t":"code","b":[141,124,120],"m":"sta","o":"shift_src1_hi","oa":30844},{"a":30780,"t":"code","b":[206,123,120],"m":"dec","o":"shift_src1_lo","oa":30843},{"a":30783,"t":"code","b":[189,3,178],"m":"lda","o":"strip_role_e000,x","oa":45571},{"a":30786,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":30788,"t":"code","b":[240,6],"m":"beq","o":"b_784C","oa":30796},{"a":30790,"t":"code","b":[206,126,120],"m":"dec","o":"shift_dst1_lo","oa":30846},{"a":30793,"t":"code","b":[238,123,120],"m":"inc","o":"shift_src1_lo","oa":30843},{"a":30796,"l":"b_784C","t":"code","b":[133,101],"m":"sta","o":"zp_ptr_65","oa":101,"x":[30788]},{"a":30798,"t":"code","b":[173,124,120],"m":"lda","o":"shift_src1_hi","oa":30844},{"a":30801,"t":"code","b":[141,130,120],"m":"sta","o":"shift_src2_hi","oa":30850},{"a":30804,"t":"code","b":[173,127,120],"m":"lda","o":"shift_dst1_hi","oa":30847},{"a":30807,"t":"code","b":[141,133,120],"m":"sta","o":"shift_dst2_hi","oa":30853},{"a":30810,"t":"code","b":[173,123,120],"m":"lda","o":"shift_src1_lo","oa":30843},{"a":30813,"t":"code","b":[24],"m":"clc"},{"a":30814,"t":"code","b":[101,97],"m":"adc","o":"zp_ptr_61","oa":97},{"a":30816,"t":"code","b":[141,129,120],"m":"sta","o":"shift_src2_lo","oa":30849},{"a":30819,"t":"code","b":[144,3],"m":"bcc","o":"b_7868","oa":30824},{"a":30821,"t":"code","b":[238,130,120],"m":"inc","o":"shift_src2_hi","oa":30850},{"a":30824,"l":"b_7868","t":"code","b":[173,126,120],"m":"lda","o":"shift_dst1_lo","oa":30846,"x":[30819]},{"a":30827,"t":"code","b":[24],"m":"clc"},{"a":30828,"t":"code","b":[101,97],"m":"adc","o":"zp_ptr_61","oa":97},{"a":30830,"t":"code","b":[141,132,120],"m":"sta","o":"shift_dst2_lo","oa":30852},{"a":30833,"t":"code","b":[144,3],"m":"bcc","o":"b_7876","oa":30838},{"a":30835,"t":"code","b":[238,133,120],"m":"inc","o":"shift_dst2_hi","oa":30853},{"a":30838,"l":"b_7876","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[30833]},{"a":30840,"t":"code","b":[164,97],"m":"ldy","o":"zp_ptr_61","oa":97},{"a":30842,"l":"b_787A","t":"code","b":[185,232,3],"m":"lda","o":"copy_operand_03e8,y","oa":1000,"x":[30855]},{"a":30843,"t":"note","l":"shift_src1_lo","c":"Low byte of the source operand of the LDA at $787A in build_scroll_buffer's copy loop: $B332 + chunk ($78, $59, $3A, $1B), minus 1 for a role-1 screen.","note":"inside the item at $787A","x":[30745,30780,30793,30810]},{"a":30844,"t":"note","l":"shift_src1_hi","c":"High byte of the LDA $787A source: the shown screen's page ($B33A + shown screen: $E0, $E4, $E8) plus the chunk's page ($B336 + chunk, 0-3).","note":"inside the item at $787A","x":[30777,30798]},{"a":30845,"t":"code","b":[153,232,3],"m":"sta","o":"copy_operand_03e8,y","oa":1000},{"a":30846,"t":"note","l":"shift_dst1_lo","c":"Low byte of the destination operand of the STA at $787D: $B332 + chunk, minus 1 for a role-2 screen.","note":"inside the item at $787D","x":[30748,30790,30824]},{"a":30847,"t":"note","l":"shift_dst1_hi","c":"High byte of the STA $787D destination: the target screen's page ($B33A + screen) plus the chunk's page.","note":"inside the item at $787D","x":[30760,30804]},{"a":30848,"t":"code","b":[185,232,3],"m":"lda","o":"copy_operand_03e8,y","oa":1000},{"a":30849,"t":"note","l":"shift_src2_lo","c":"Low byte of the source of the second LDA, at $7880: the first source plus the chunk's count ($71, or $3F for the last chunk), so each pass of the loop moves two bytes that far apart.","note":"inside the item at $7880","x":[30816]},{"a":30850,"t":"note","l":"shift_src2_hi","c":"High byte of the LDA $7880 source, the first source's page with the carry from shift_src2_lo.","note":"inside the item at $7880","x":[30801,30821]},{"a":30851,"t":"code","b":[153,232,3],"m":"sta","o":"copy_operand_03e8,y","oa":1000},{"a":30852,"t":"note","l":"shift_dst2_lo","c":"Low byte of the destination of the second STA, at $7883: the first destination plus the chunk's count.","note":"inside the item at $7883","x":[30830]},{"a":30853,"t":"note","l":"shift_dst2_hi","c":"High byte of the STA $7883 destination, with the carry from shift_dst2_lo. After it the loop counts Y down to 1, and after the fourth chunk (counter pulled back as 3) build_scroll_buffer draws the new edge column: $7895-$789D for role 1, $78A2-$78AA for role 2.","note":"inside the item at $7883","x":[30807,30835]},{"a":30854,"t":"code","b":[136],"m":"dey"},{"a":30855,"t":"code","b":[208,241],"m":"bne","o":"b_787A","oa":30842},{"a":30857,"t":"code","b":[104],"m":"pla"},{"a":30858,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":30860,"t":"code","b":[240,1],"m":"beq","o":"b_788F","oa":30863},{"a":30862,"t":"code","b":[96],"m":"rts"},{"a":30863,"l":"b_788F","t":"code","b":[165,101],"m":"lda","o":"zp_ptr_65","oa":101,"x":[30860]},{"a":30865,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":30867,"t":"code","b":[240,12],"m":"beq","o":"b_78A1","oa":30881},{"a":30869,"t":"code","b":[32,207,120],"m":"jsr","o":"fetch_left_column","oa":30927},{"a":30872,"t":"code","b":[32,137,121],"m":"jsr","o":"sky_fill_previous","oa":31113},{"a":30875,"t":"code","b":[165,100],"m":"lda","o":"zp_ptr_64","oa":100},{"a":30877,"t":"code","b":[32,64,122],"m":"jsr","o":"put_column_left","oa":31296},{"a":30880,"t":"code","b":[96],"m":"rts"},{"a":30881,"l":"b_78A1","t":"code","b":[234],"m":"nop","x":[30867]},{"a":30882,"t":"code","b":[32,174,120],"m":"jsr","o":"fetch_right_column","oa":30894},{"a":30885,"t":"code","b":[32,154,121],"m":"jsr","o":"sky_fill_right","oa":31130},{"a":30888,"t":"code","b":[165,100],"m":"lda","o":"zp_ptr_64","oa":100},{"a":30890,"t":"code","b":[32,58,122],"m":"jsr","o":"put_column_right","oa":31290},{"a":30893,"t":"code","b":[96],"m":"rts"},{"a":30894,"l":"fetch_right_column","c":"Fetches, for a new right-hand edge, the map column 8 blocks and one column to the right of the view's map position ($B209 + 8 block columns, $B20B + 1 columns, carried into the next block at 5) into the column buffer $E79A-$E7AD, through the code of fetch_left_column from $78DE.","t":"code","b":[173,9,178],"m":"lda","o":"map_column","oa":45577,"x":[30882]},{"a":30897,"t":"code","b":[24],"m":"clc"},{"a":30898,"t":"code","b":[105,8],"m":"adc","o":"#$08"},{"a":30900,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":30902,"t":"code","b":[173,10,178],"m":"lda","o":"map_row_base","oa":45578},{"a":30905,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":30907,"t":"code","b":[173,11,178],"m":"lda","o":"map_subcolumn","oa":45579},{"a":30910,"t":"code","b":[24],"m":"clc"},{"a":30911,"t":"code","b":[105,1],"m":"adc","o":"#$01"},{"a":30913,"t":"code","b":[201,5],"m":"cmp","o":"#$05"},{"a":30915,"t":"code","b":[48,5],"m":"bmi","o":"b_78CA","oa":30922},{"a":30917,"t":"code","b":[230,98],"m":"inc","o":"zp_ptr_62","oa":98},{"a":30919,"t":"code","b":[56],"m":"sec"},{"a":30920,"t":"code","b":[233,5],"m":"sbc","o":"#$05"},{"a":30922,"l":"b_78CA","t":"code","b":[133,94],"m":"sta","o":"zp_temp_5e","oa":94,"x":[30915]},{"a":30924,"t":"code","b":[76,222,120],"m":"jmp","o":"j_78DE","oa":30942},{"a":30927,"l":"fetch_left_column","c":"Fetches the map column at the view's map position ($B209 block column, $B20A block row, $B20B column 0-4 within the block) into the 20-byte column buffer $E79A-$E7AD: for 4 block rows it reads the block number from the map row at $0460/$0470 + row, and copies that column's 5 characters from the block graphics at ($B62B) + 25 x block + column (blocks are 5 x 5 characters, rows 5 bytes apart). Used for every column by draw_landscape and for a new left-hand edge by build_scroll_buffer.","t":"code","b":[173,9,178],"m":"lda","o":"map_column","oa":45577,"x":[30327,30869]},{"a":30930,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":30932,"t":"code","b":[173,10,178],"m":"lda","o":"map_row_base","oa":45578},{"a":30935,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":30937,"t":"code","b":[173,11,178],"m":"lda","o":"map_subcolumn","oa":45579},{"a":30940,"t":"code","b":[133,94],"m":"sta","o":"zp_temp_5e","oa":94},{"a":30942,"l":"j_78DE","t":"code","b":[169,4],"m":"lda","o":"#$04","x":[30924]},{"a":30944,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":30946,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":30948,"l":"j_78E4","t":"code","b":[164,99],"m":"ldy","o":"zp_ptr_63","oa":99,"x":[31092]},{"a":30950,"t":"code","b":[185,112,4],"m":"lda","o":"map_row_hi,y","oa":1136},{"a":30953,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":30955,"t":"code","b":[185,96,4],"m":"lda","o":"map_row_lo,y","oa":1120},{"a":30958,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":30960,"t":"code","b":[164,98],"m":"ldy","o":"zp_ptr_62","oa":98},{"a":30962,"t":"code","b":[177,96],"m":"lda","o":"(zp_ptr_60),y","oa":96},{"a":30964,"t":"code","b":[133,130],"m":"sta","o":"map_offset_lo","oa":130},{"a":30966,"t":"code","b":[173,44,182],"m":"lda","o":"tile_graphics_address_hi","oa":46636},{"a":30969,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":30971,"t":"code","b":[165,130],"m":"lda","o":"map_offset_lo","oa":130},{"a":30973,"t":"code","b":[24],"m":"clc"},{"a":30974,"t":"code","b":[109,43,182],"m":"adc","o":"tile_graphics_address","oa":46635},{"a":30977,"t":"code","b":[144,2],"m":"bcc","o":"b_7905","oa":30981},{"a":30979,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":30981,"l":"b_7905","t":"code","b":[24],"m":"clc","x":[30977]},{"a":30982,"t":"code","b":[101,94],"m":"adc","o":"zp_temp_5e","oa":94},{"a":30984,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":30986,"t":"code","b":[144,2],"m":"bcc","o":"b_790E","oa":30990},{"a":30988,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":30990,"l":"b_790E","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[30986]},{"a":30992,"t":"code","b":[133,131],"m":"sta","o":"map_offset_hi","oa":131},{"a":30994,"t":"code","b":[6,130],"m":"asl","o":"map_offset_lo","oa":130},{"a":30996,"t":"code","b":[38,131],"m":"rol","o":"map_offset_hi","oa":131},{"a":30998,"t":"code","b":[6,130],"m":"asl","o":"map_offset_lo","oa":130},{"a":31000,"t":"code","b":[38,131],"m":"rol","o":"map_offset_hi","oa":131},{"a":31002,"t":"code","b":[6,130],"m":"asl","o":"map_offset_lo","oa":130},{"a":31004,"t":"code","b":[38,131],"m":"rol","o":"map_offset_hi","oa":131},{"a":31006,"t":"code","b":[165,130],"m":"lda","o":"map_offset_lo","oa":130},{"a":31008,"t":"code","b":[24],"m":"clc"},{"a":31009,"t":"code","b":[101,96],"m":"adc","o":"zp_ptr_60","oa":96},{"a":31011,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":31013,"t":"code","b":[144,2],"m":"bcc","o":"b_7929","oa":31017},{"a":31015,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":31017,"l":"b_7929","t":"code","b":[165,131],"m":"lda","o":"map_offset_hi","oa":131,"x":[31013]},{"a":31019,"t":"code","b":[24],"m":"clc"},{"a":31020,"t":"code","b":[101,97],"m":"adc","o":"zp_ptr_61","oa":97},{"a":31022,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":31024,"t":"code","b":[6,130],"m":"asl","o":"map_offset_lo","oa":130},{"a":31026,"t":"code","b":[38,131],"m":"rol","o":"map_offset_hi","oa":131},{"a":31028,"t":"code","b":[165,130],"m":"lda","o":"map_offset_lo","oa":130},{"a":31030,"t":"code","b":[24],"m":"clc"},{"a":31031,"t":"code","b":[101,96],"m":"adc","o":"zp_ptr_60","oa":96},{"a":31033,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":31035,"t":"code","b":[144,2],"m":"bcc","o":"b_793F","oa":31039},{"a":31037,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":31039,"l":"b_793F","t":"code","b":[165,131],"m":"lda","o":"map_offset_hi","oa":131,"x":[31035]},{"a":31041,"t":"code","b":[24],"m":"clc"},{"a":31042,"t":"code","b":[101,97],"m":"adc","o":"zp_ptr_61","oa":97},{"a":31044,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":31046,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":31048,"t":"code","b":[177,96],"m":"lda","o":"(zp_ptr_60),y","oa":96},{"a":31050,"t":"code","b":[157,154,231],"m":"sta","o":"scroll_column,x","oa":59290},{"a":31053,"t":"code","b":[160,5],"m":"ldy","o":"#$05"},{"a":31055,"t":"code","b":[177,96],"m":"lda","o":"(zp_ptr_60),y","oa":96},{"a":31057,"t":"code","b":[157,155,231],"m":"sta","o":"scroll_column_row4,x","oa":59291},{"a":31060,"t":"code","b":[160,10],"m":"ldy","o":"#$0A"},{"a":31062,"t":"code","b":[177,96],"m":"lda","o":"(zp_ptr_60),y","oa":96},{"a":31064,"t":"code","b":[157,156,231],"m":"sta","o":"scroll_column_row5,x","oa":59292},{"a":31067,"t":"code","b":[160,15],"m":"ldy","o":"#$0F"},{"a":31069,"t":"code","b":[177,96],"m":"lda","o":"(zp_ptr_60),y","oa":96},{"a":31071,"t":"code","b":[157,157,231],"m":"sta","o":"scroll_column_row6,x","oa":59293},{"a":31074,"t":"code","b":[160,20],"m":"ldy","o":"#$14"},{"a":31076,"t":"code","b":[177,96],"m":"lda","o":"(zp_ptr_60),y","oa":96},{"a":31078,"t":"code","b":[157,158,231],"m":"sta","o":"scroll_column_row7,x","oa":59294},{"a":31081,"t":"code","b":[138],"m":"txa"},{"a":31082,"t":"code","b":[24],"m":"clc"},{"a":31083,"t":"code","b":[105,5],"m":"adc","o":"#$05"},{"a":31085,"t":"code","b":[170],"m":"tax"},{"a":31086,"t":"code","b":[230,99],"m":"inc","o":"zp_ptr_63","oa":99},{"a":31088,"t":"code","b":[198,102],"m":"dec","o":"zp_temp_66","oa":102},{"a":31090,"t":"code","b":[240,3],"m":"beq","o":"r_7977","oa":31095},{"a":31092,"t":"code","b":[76,228,120],"m":"jmp","o":"j_78E4","oa":30948},{"a":31095,"l":"r_7977","t":"code","b":[96],"m":"rts","x":[31090]},{"a":31096,"l":"sky_fill_next","c":"Steps the sky glyph number $B27A up by one ($5B wraps to $49), then (from $79C2) gives every empty cell (0) of the column buffer a sky glyph: in each block row the bottom character row gets the row's glyph and each row above 18 less, the four block rows starting at $B27A plus 0, 7, 16 and 11 (wrapped into $49-$5A). So the empty sky is made of the 90 star glyphs 1-90 of the $F800 set. Used for every column by draw_landscape.","t":"code","b":[238,122,178],"m":"inc","o":"background_char_phase","oa":45690,"x":[30330]},{"a":31099,"t":"code","b":[173,122,178],"m":"lda","o":"background_char_phase","oa":45690},{"a":31102,"t":"code","b":[201,91],"m":"cmp","o":"#$5B"},{"a":31104,"t":"code","b":[208,64],"m":"bne","o":"b_79C2","oa":31170},{"a":31106,"t":"code","b":[169,73],"m":"lda","o":"#$49"},{"a":31108,"t":"code","b":[141,122,178],"m":"sta","o":"background_char_phase","oa":45690},{"a":31111,"t":"code","b":[208,57],"m":"bne","o":"b_79C2","oa":31170},{"a":31113,"l":"sky_fill_previous","c":"Steps the sky glyph number $B27A down by one ($48 wraps to $5A) and fills the column buffer's empty cells with sky glyphs as sky_fill_next does; for a new left-hand column.","t":"code","b":[206,122,178],"m":"dec","o":"background_char_phase","oa":45690,"x":[30872]},{"a":31116,"t":"code","b":[173,122,178],"m":"lda","o":"background_char_phase","oa":45690},{"a":31119,"t":"code","b":[201,72],"m":"cmp","o":"#$48"},{"a":31121,"t":"code","b":[208,47],"m":"bne","o":"b_79C2","oa":31170},{"a":31123,"t":"code","b":[169,90],"m":"lda","o":"#$5A"},{"a":31125,"t":"code","b":[141,122,178],"m":"sta","o":"background_char_phase","oa":45690},{"a":31128,"t":"code","b":[208,40],"m":"bne","o":"b_79C2","oa":31170},{"a":31130,"l":"sky_fill_right","c":"For a new right-hand column: steps $B27A up by one (wrapping at $5B), keeps that in $B27B, fills the column buffer's empty cells with the sky glyphs one number further on, then puts the kept value back in $B27A.","t":"code","b":[238,122,178],"m":"inc","o":"background_char_phase","oa":45690,"x":[30885]},{"a":31133,"t":"code","b":[173,122,178],"m":"lda","o":"background_char_phase","oa":45690},{"a":31136,"t":"code","b":[201,91],"m":"cmp","o":"#$5B"},{"a":31138,"t":"code","b":[208,5],"m":"bne","o":"b_79A9","oa":31145},{"a":31140,"t":"code","b":[169,73],"m":"lda","o":"#$49"},{"a":31142,"t":"code","b":[141,122,178],"m":"sta","o":"background_char_phase","oa":45690},{"a":31145,"l":"b_79A9","t":"code","b":[141,123,178],"m":"sta","o":"background_char_saved","oa":45691,"x":[31138]},{"a":31148,"t":"code","b":[24],"m":"clc"},{"a":31149,"t":"code","b":[105,1],"m":"adc","o":"#$01"},{"a":31151,"t":"code","b":[201,91],"m":"cmp","o":"#$5B"},{"a":31153,"t":"code","b":[208,2],"m":"bne","o":"b_79B5","oa":31157},{"a":31155,"t":"code","b":[169,73],"m":"lda","o":"#$49"},{"a":31157,"l":"b_79B5","t":"code","b":[141,122,178],"m":"sta","o":"background_char_phase","oa":45690,"x":[31153]},{"a":31160,"t":"code","b":[32,194,121],"m":"jsr","o":"b_79C2","oa":31170},{"a":31163,"t":"code","b":[173,123,178],"m":"lda","o":"background_char_saved","oa":45691},{"a":31166,"t":"code","b":[141,122,178],"m":"sta","o":"background_char_phase","oa":45690},{"a":31169,"t":"code","b":[96],"m":"rts"},{"a":31170,"l":"b_79C2","t":"code","b":[168],"m":"tay","x":[31104,31111,31121,31128,31160]},{"a":31171,"t":"code","b":[162,5],"m":"ldx","o":"#$05"},{"a":31173,"l":"b_79C5","t":"code","b":[189,153,231],"m":"lda","o":"scroll_column_minus_1,x","oa":59289,"x":[31188]},{"a":31176,"t":"code","b":[208,4],"m":"bne","o":"b_79CE","oa":31182},{"a":31178,"t":"code","b":[152],"m":"tya"},{"a":31179,"t":"code","b":[157,153,231],"m":"sta","o":"scroll_column_minus_1,x","oa":59289},{"a":31182,"l":"b_79CE","t":"code","b":[152],"m":"tya","x":[31176]},{"a":31183,"t":"code","b":[56],"m":"sec"},{"a":31184,"t":"code","b":[233,18],"m":"sbc","o":"#$12"},{"a":31186,"t":"code","b":[168],"m":"tay"},{"a":31187,"t":"code","b":[202],"m":"dex"},{"a":31188,"t":"code","b":[208,239],"m":"bne","o":"b_79C5","oa":31173},{"a":31190,"t":"code","b":[173,122,178],"m":"lda","o":"background_char_phase","oa":45690},{"a":31193,"t":"code","b":[24],"m":"clc"},{"a":31194,"t":"code","b":[105,7],"m":"adc","o":"#$07"},{"a":31196,"t":"code","b":[201,91],"m":"cmp","o":"#$5B"},{"a":31198,"t":"code","b":[48,3],"m":"bmi","o":"b_79E3","oa":31203},{"a":31200,"t":"code","b":[56],"m":"sec"},{"a":31201,"t":"code","b":[233,18],"m":"sbc","o":"#$12"},{"a":31203,"l":"b_79E3","t":"code","b":[168],"m":"tay","x":[31198]},{"a":31204,"t":"code","b":[162,5],"m":"ldx","o":"#$05"},{"a":31206,"l":"b_79E6","t":"code","b":[189,158,231],"m":"lda","o":"scroll_column_row7,x","oa":59294,"x":[31221]},{"a":31209,"t":"code","b":[208,4],"m":"bne","o":"b_79EF","oa":31215},{"a":31211,"t":"code","b":[152],"m":"tya"},{"a":31212,"t":"code","b":[157,158,231],"m":"sta","o":"scroll_column_row7,x","oa":59294},{"a":31215,"l":"b_79EF","t":"code","b":[152],"m":"tya","x":[31209]},{"a":31216,"t":"code","b":[56],"m":"sec"},{"a":31217,"t":"code","b":[233,18],"m":"sbc","o":"#$12"},{"a":31219,"t":"code","b":[168],"m":"tay"},{"a":31220,"t":"code","b":[202],"m":"dex"},{"a":31221,"t":"code","b":[208,239],"m":"bne","o":"b_79E6","oa":31206},{"a":31223,"t":"code","b":[173,122,178],"m":"lda","o":"background_char_phase","oa":45690},{"a":31226,"t":"code","b":[24],"m":"clc"},{"a":31227,"t":"code","b":[105,16],"m":"adc","o":"#$10"},{"a":31229,"t":"code","b":[201,91],"m":"cmp","o":"#$5B"},{"a":31231,"t":"code","b":[48,3],"m":"bmi","o":"b_7A04","oa":31236},{"a":31233,"t":"code","b":[56],"m":"sec"},{"a":31234,"t":"code","b":[233,18],"m":"sbc","o":"#$12"},{"a":31236,"l":"b_7A04","t":"code","b":[168],"m":"tay","x":[31231]},{"a":31237,"t":"code","b":[162,5],"m":"ldx","o":"#$05"},{"a":31239,"l":"b_7A07","t":"code","b":[189,163,231],"m":"lda","o":"scroll_column_row12,x","oa":59299,"x":[31254]},{"a":31242,"t":"code","b":[208,4],"m":"bne","o":"b_7A10","oa":31248},{"a":31244,"t":"code","b":[152],"m":"tya"},{"a":31245,"t":"code","b":[157,163,231],"m":"sta","o":"scroll_column_row12,x","oa":59299},{"a":31248,"l":"b_7A10","t":"code","b":[152],"m":"tya","x":[31242]},{"a":31249,"t":"code","b":[56],"m":"sec"},{"a":31250,"t":"code","b":[233,18],"m":"sbc","o":"#$12"},{"a":31252,"t":"code","b":[168],"m":"tay"},{"a":31253,"t":"code","b":[202],"m":"dex"},{"a":31254,"t":"code","b":[208,239],"m":"bne","o":"b_7A07","oa":31239},{"a":31256,"t":"code","b":[173,122,178],"m":"lda","o":"background_char_phase","oa":45690},{"a":31259,"t":"code","b":[24],"m":"clc"},{"a":31260,"t":"code","b":[105,11],"m":"adc","o":"#$0B"},{"a":31262,"t":"code","b":[201,91],"m":"cmp","o":"#$5B"},{"a":31264,"t":"code","b":[48,3],"m":"bmi","o":"b_7A25","oa":31269},{"a":31266,"t":"code","b":[56],"m":"sec"},{"a":31267,"t":"code","b":[233,18],"m":"sbc","o":"#$12"},{"a":31269,"l":"b_7A25","t":"code","b":[168],"m":"tay","x":[31264]},{"a":31270,"t":"code","b":[162,5],"m":"ldx","o":"#$05"},{"a":31272,"l":"b_7A28","t":"code","b":[189,168,231],"m":"lda","o":"scroll_column_row17,x","oa":59304,"x":[31287]},{"a":31275,"t":"code","b":[208,4],"m":"bne","o":"b_7A31","oa":31281},{"a":31277,"t":"code","b":[152],"m":"tya"},{"a":31278,"t":"code","b":[157,168,231],"m":"sta","o":"scroll_column_row17,x","oa":59304},{"a":31281,"l":"b_7A31","t":"code","b":[152],"m":"tya","x":[31275]},{"a":31282,"t":"code","b":[56],"m":"sec"},{"a":31283,"t":"code","b":[233,18],"m":"sbc","o":"#$12"},{"a":31285,"t":"code","b":[168],"m":"tay"},{"a":31286,"t":"code","b":[202],"m":"dex"},{"a":31287,"t":"code","b":[208,239],"m":"bne","o":"b_7A28","oa":31272},{"a":31289,"t":"code","b":[96],"m":"rts"},{"a":31290,"l":"put_column_right","c":"Writes the column buffer into column 39 of screen A (0-2) through put_column.","t":"code","b":[170],"m":"tax","x":[30890]},{"a":31291,"t":"code","b":[169,39],"m":"lda","o":"#$27"},{"a":31293,"t":"code","b":[76,67,122],"m":"jmp","o":"put_column","oa":31299},{"a":31296,"l":"put_column_left","c":"Writes the column buffer into column 0 of screen A (0-2) through put_column.","t":"code","b":[170],"m":"tax","x":[30877]},{"a":31297,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":31299,"l":"put_column","c":"Writes the 20-character column buffer $E79A-$E7AD into column A of screen X (0-2: $E000, $E400, $E800 from $B33A), rows 3-22: sets the operands of the four STAs in the loop at $7A75 to the column's address in rows 3, 8, 13 and 18, one per block row, then copies 5 rows of each, 40 bytes apart.","t":"code","b":[133,95],"m":"sta","o":"zp_temp_5f","oa":95,"x":[30343,31293]},{"a":31301,"t":"code","b":[189,58,179],"m":"lda","o":"tbl_screen_pages,x","oa":45882},{"a":31304,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":31306,"t":"code","b":[169,120],"m":"lda","o":"#$78"},{"a":31308,"t":"code","b":[24],"m":"clc"},{"a":31309,"t":"code","b":[101,95],"m":"adc","o":"zp_temp_5f","oa":95},{"a":31311,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":31313,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":31315,"l":"b_7A53","t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96,"x":[31343]},{"a":31317,"t":"code","b":[157,121,122],"m":"sta","o":"put_column_row3_lo,x","oa":31353},{"a":31320,"t":"code","b":[165,97],"m":"lda","o":"zp_ptr_61","oa":97},{"a":31322,"t":"code","b":[157,122,122],"m":"sta","o":"put_column_row3_hi,x","oa":31354},{"a":31325,"t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96},{"a":31327,"t":"code","b":[24],"m":"clc"},{"a":31328,"t":"code","b":[105,200],"m":"adc","o":"#$C8"},{"a":31330,"t":"code","b":[144,2],"m":"bcc","o":"b_7A66","oa":31334},{"a":31332,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":31334,"l":"b_7A66","t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96,"x":[31330]},{"a":31336,"t":"code","b":[138],"m":"txa"},{"a":31337,"t":"code","b":[24],"m":"clc"},{"a":31338,"t":"code","b":[105,6],"m":"adc","o":"#$06"},{"a":31340,"t":"code","b":[170],"m":"tax"},{"a":31341,"t":"code","b":[201,24],"m":"cmp","o":"#$18"},{"a":31343,"t":"code","b":[208,226],"m":"bne","o":"b_7A53","oa":31315},{"a":31345,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":31347,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":31349,"l":"b_7A75","t":"code","b":[185,154,231],"m":"lda","o":"scroll_column,y","oa":59290,"x":[31381]},{"a":31352,"t":"code","b":[157,232,3],"m":"sta","o":"copy_operand_03e8,x","oa":1000},{"a":31353,"t":"note","l":"put_column_row3_lo","c":"Low byte of the operand of the STA at $7A78, the column's address in row 3, written by put_column through $7A79,X; the operands of the other three STAs, $7A7F, $7A85 and $7A8B, are written the same way 6 bytes apart.","note":"inside the item at $7A78","x":[31317]},{"a":31354,"t":"note","l":"put_column_row3_hi","c":"High byte of the STA $7A78 operand (and, through $7A7A,X, of the STAs at $7A7E, $7A84, $7A8A). From here the loop copies the four block rows of the column buffer 5 rows down, 40 bytes a row, and returns.","note":"inside the item at $7A78","x":[31322]},{"a":31355,"t":"code","b":[185,159,231],"m":"lda","o":"scroll_column_rows8_12,y","oa":59295},{"a":31358,"t":"code","b":[157,232,3],"m":"sta","o":"copy_operand_03e8,x","oa":1000},{"a":31361,"t":"code","b":[185,164,231],"m":"lda","o":"scroll_column_rows13_17,y","oa":59300},{"a":31364,"t":"code","b":[157,232,3],"m":"sta","o":"copy_operand_03e8,x","oa":1000},{"a":31367,"t":"code","b":[185,169,231],"m":"lda","o":"scroll_column_rows18_22,y","oa":59305},{"a":31370,"t":"code","b":[157,232,3],"m":"sta","o":"copy_operand_03e8,x","oa":1000},{"a":31373,"t":"code","b":[138],"m":"txa"},{"a":31374,"t":"code","b":[24],"m":"clc"},{"a":31375,"t":"code","b":[105,40],"m":"adc","o":"#$28"},{"a":31377,"t":"code","b":[170],"m":"tax"},{"a":31378,"t":"code","b":[200],"m":"iny"},{"a":31379,"t":"code","b":[201,200],"m":"cmp","o":"#$C8"},{"a":31381,"t":"code","b":[208,222],"m":"bne","o":"b_7A75","oa":31349},{"a":31383,"t":"code","b":[96],"m":"rts"},{"a":31384,"l":"scroll_landscape","c":"Scrolls the landscape, once a frame (frame loop $642D; $63F2, $AEA2). Advances the scroll position $B1F2/$B1F3 by the velocity (advance_scroll_position) and keeps the frame's pixel step in $B1FB. When the fine scroll (low 3 bits) passes 7 or 0 it moves the column counter $B1F1 and, while that stays below $BB (the scrolling part of the level) and $B25D is clear, steps the map position ($B209 blocks, $B20B columns 0-4) and swaps screens: the one ready for that direction becomes the shown one ($B1FD), the old shown one takes the opposite role, the stale third takes this direction's role with its build counter reset for build_scroll_buffer, and $B1FF = 2 (right) or $FF (left) makes the bullets shift a column ($6F21). From $BB up the view has reached an edge: the map stops, $B25D is set (it also blocks the first step back), and $B1F9, the Wizball's signed offset from the screen centre, becomes 8 x (count - $BB) + fine on the right, or -(8 x ($FF - count) + 7 - fine) on the left, where the count has gone below 0 ($DC and up). $B1FC gets the fine scroll for the band's $D016.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[25586,25645,44706]},{"a":31386,"t":"code","b":[141,255,177],"m":"sta","o":"scroll_step","oa":45567},{"a":31389,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":31391,"t":"code","b":[173,242,177],"m":"lda","o":"scroll_fine","oa":45554},{"a":31394,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":31396,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":31398,"t":"code","b":[32,203,123],"m":"jsr","o":"advance_scroll_position","oa":31691},{"a":31401,"t":"code","b":[173,242,177],"m":"lda","o":"scroll_fine","oa":45554},{"a":31404,"t":"code","b":[56],"m":"sec"},{"a":31405,"t":"code","b":[237,250,177],"m":"sbc","o":"scroll_fine_previous","oa":45562},{"a":31408,"t":"code","b":[141,251,177],"m":"sta","o":"scroll_delta","oa":45563},{"a":31411,"t":"code","b":[173,242,177],"m":"lda","o":"scroll_fine","oa":45554},{"a":31414,"t":"code","b":[141,250,177],"m":"sta","o":"scroll_fine_previous","oa":45562},{"a":31417,"t":"code","b":[165,99],"m":"lda","o":"zp_ptr_63","oa":99},{"a":31419,"t":"code","b":[201,0],"m":"cmp","o":"#$00"},{"a":31421,"t":"code","b":[48,44],"m":"bmi","o":"b_7AEB","oa":31467},{"a":31423,"t":"code","b":[201,8],"m":"cmp","o":"#$08"},{"a":31425,"t":"code","b":[48,77],"m":"bmi","o":"b_7B10","oa":31504},{"a":31427,"t":"code","b":[238,241,177],"m":"inc","o":"view_column","oa":45553},{"a":31430,"t":"code","b":[173,241,177],"m":"lda","o":"view_column","oa":45553},{"a":31433,"t":"code","b":[201,187],"m":"cmp","o":"#$BB"},{"a":31435,"t":"code","b":[176,67],"m":"bcs","o":"b_7B10","oa":31504},{"a":31437,"t":"code","b":[173,93,178],"m":"lda","o":"scroll_held","oa":45661},{"a":31440,"t":"code","b":[208,62],"m":"bne","o":"b_7B10","oa":31504},{"a":31442,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":31444,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":31446,"t":"code","b":[238,11,178],"m":"inc","o":"map_subcolumn","oa":45579},{"a":31449,"t":"code","b":[173,11,178],"m":"lda","o":"map_subcolumn","oa":45579},{"a":31452,"t":"code","b":[201,5],"m":"cmp","o":"#$05"},{"a":31454,"t":"code","b":[208,48],"m":"bne","o":"b_7B10","oa":31504},{"a":31456,"t":"code","b":[238,9,178],"m":"inc","o":"map_column","oa":45577},{"a":31459,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":31461,"t":"code","b":[141,11,178],"m":"sta","o":"map_subcolumn","oa":45579},{"a":31464,"t":"code","b":[76,16,123],"m":"jmp","o":"b_7B10","oa":31504},{"a":31467,"l":"b_7AEB","t":"code","b":[206,241,177],"m":"dec","o":"view_column","oa":45553,"x":[31421]},{"a":31470,"t":"code","b":[173,241,177],"m":"lda","o":"view_column","oa":45553},{"a":31473,"t":"code","b":[201,187],"m":"cmp","o":"#$BB"},{"a":31475,"t":"code","b":[176,27],"m":"bcs","o":"b_7B10","oa":31504},{"a":31477,"t":"code","b":[173,93,178],"m":"lda","o":"scroll_held","oa":45661},{"a":31480,"t":"code","b":[208,22],"m":"bne","o":"b_7B10","oa":31504},{"a":31482,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":31484,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":31486,"t":"code","b":[206,11,178],"m":"dec","o":"map_subcolumn","oa":45579},{"a":31489,"t":"code","b":[173,11,178],"m":"lda","o":"map_subcolumn","oa":45579},{"a":31492,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":31494,"t":"code","b":[208,8],"m":"bne","o":"b_7B10","oa":31504},{"a":31496,"t":"code","b":[206,9,178],"m":"dec","o":"map_column","oa":45577},{"a":31499,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":31501,"t":"code","b":[141,11,178],"m":"sta","o":"map_subcolumn","oa":45579},{"a":31504,"l":"b_7B10","t":"code","b":[173,241,177],"m":"lda","o":"view_column","oa":45553,"x":[31425,31435,31440,31454,31464,31475,31480,31494]},{"a":31507,"t":"code","b":[56],"m":"sec"},{"a":31508,"t":"code","b":[233,187],"m":"sbc","o":"#$BB"},{"a":31510,"t":"code","b":[176,115],"m":"bcs","o":"b_7B8B","oa":31627},{"a":31512,"t":"code","b":[173,242,177],"m":"lda","o":"scroll_fine","oa":45554},{"a":31515,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":31517,"t":"code","b":[141,252,177],"m":"sta","o":"scroll_fine_bits","oa":45564},{"a":31520,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":31522,"t":"code","b":[141,93,178],"m":"sta","o":"scroll_held","oa":45661},{"a":31525,"t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96},{"a":31527,"t":"code","b":[208,1],"m":"bne","o":"b_7B2A","oa":31530},{"a":31529,"t":"code","b":[96],"m":"rts"},{"a":31530,"l":"b_7B2A","t":"code","b":[173,3,178],"m":"lda","o":"strip_role_e000","oa":45571,"x":[31527]},{"a":31533,"t":"code","b":[141,6,178],"m":"sta","o":"strip_roles_copy","oa":45574},{"a":31536,"t":"code","b":[173,4,178],"m":"lda","o":"strip_role_e400","oa":45572},{"a":31539,"t":"code","b":[141,7,178],"m":"sta","o":"strip_roles_copy_e400","oa":45575},{"a":31542,"t":"code","b":[173,5,178],"m":"lda","o":"strip_role_e800","oa":45573},{"a":31545,"t":"code","b":[141,8,178],"m":"sta","o":"strip_roles_copy_e800","oa":45576},{"a":31548,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":31550,"t":"code","b":[32,120,123],"m":"jsr","o":"find_buffer_role","oa":31608},{"a":31553,"t":"code","b":[32,129,123],"m":"jsr","o":"opposite_direction","oa":31617},{"a":31556,"t":"code","b":[157,3,178],"m":"sta","o":"strip_role_e000,x","oa":45571},{"a":31559,"t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96},{"a":31561,"t":"code","b":[32,120,123],"m":"jsr","o":"find_buffer_role","oa":31608},{"a":31564,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":31566,"t":"code","b":[157,3,178],"m":"sta","o":"strip_role_e000,x","oa":45571},{"a":31569,"t":"code","b":[138],"m":"txa"},{"a":31570,"t":"code","b":[10],"m":"asl","o":"a"},{"a":31571,"t":"code","b":[10],"m":"asl","o":"a"},{"a":31572,"t":"code","b":[10],"m":"asl","o":"a"},{"a":31573,"t":"code","b":[10],"m":"asl","o":"a"},{"a":31574,"t":"code","b":[141,253,177],"m":"sta","o":"screen_shown","oa":45565},{"a":31577,"t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96},{"a":31579,"t":"code","b":[141,255,177],"m":"sta","o":"scroll_step","oa":45567},{"a":31582,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":31584,"t":"code","b":[240,5],"m":"beq","o":"b_7B67","oa":31591},{"a":31586,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":31588,"t":"code","b":[141,255,177],"m":"sta","o":"scroll_step","oa":45567},{"a":31591,"l":"b_7B67","t":"code","b":[32,129,123],"m":"jsr","o":"opposite_direction","oa":31617,"x":[31584]},{"a":31594,"t":"code","b":[32,120,123],"m":"jsr","o":"find_buffer_role","oa":31608},{"a":31597,"t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96},{"a":31599,"t":"code","b":[157,3,178],"m":"sta","o":"strip_role_e000,x","oa":45571},{"a":31602,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":31604,"t":"code","b":[157,0,178],"m":"sta","o":"strip_rebuild_e000,x","oa":45568},{"a":31607,"t":"code","b":[96],"m":"rts"},{"a":31608,"l":"find_buffer_role","c":"Returns in X (0-2) the first screen whose role in the copy $B206-$B208 equals A; the search has no limit.","t":"code","b":[162,255],"m":"ldx","o":"#$FF","x":[31550,31561,31594]},{"a":31610,"l":"b_7B7A","t":"code","b":[232],"m":"inx","x":[31614]},{"a":31611,"t":"code","b":[221,6,178],"m":"cmp","o":"strip_roles_copy,x","oa":45574},{"a":31614,"t":"code","b":[208,250],"m":"bne","o":"b_7B7A","oa":31610},{"a":31616,"t":"code","b":[96],"m":"rts"},{"a":31617,"l":"opposite_direction","c":"Returns in A the step direction opposite to $60: 2 for 1, 1 for 2.","t":"code","b":[164,96],"m":"ldy","o":"zp_ptr_60","oa":96,"x":[31553,31591]},{"a":31619,"t":"code","b":[136],"m":"dey"},{"a":31620,"t":"code","b":[152],"m":"tya"},{"a":31621,"t":"code","b":[73,1],"m":"eor","o":"#$01"},{"a":31623,"t":"code","b":[24],"m":"clc"},{"a":31624,"t":"code","b":[105,1],"m":"adc","o":"#$01"},{"a":31626,"t":"code","b":[96],"m":"rts"},{"a":31627,"l":"b_7B8B","t":"code","b":[169,1],"m":"lda","o":"#$01","x":[31510]},{"a":31629,"t":"code","b":[141,93,178],"m":"sta","o":"scroll_held","oa":45661},{"a":31632,"t":"code","b":[173,241,177],"m":"lda","o":"view_column","oa":45553},{"a":31635,"t":"code","b":[201,220],"m":"cmp","o":"#$DC"},{"a":31637,"t":"code","b":[144,32],"m":"bcc","o":"b_7BB7","oa":31671},{"a":31639,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":31641,"t":"code","b":[56],"m":"sec"},{"a":31642,"t":"code","b":[237,241,177],"m":"sbc","o":"view_column","oa":45553},{"a":31645,"t":"code","b":[10],"m":"asl","o":"a"},{"a":31646,"t":"code","b":[10],"m":"asl","o":"a"},{"a":31647,"t":"code","b":[10],"m":"asl","o":"a"},{"a":31648,"t":"code","b":[133,95],"m":"sta","o":"zp_temp_5f","oa":95},{"a":31650,"t":"code","b":[173,242,177],"m":"lda","o":"scroll_fine","oa":45554},{"a":31653,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":31655,"t":"code","b":[73,7],"m":"eor","o":"#$07"},{"a":31657,"t":"code","b":[24],"m":"clc"},{"a":31658,"t":"code","b":[101,95],"m":"adc","o":"zp_temp_5f","oa":95},{"a":31660,"t":"code","b":[133,95],"m":"sta","o":"zp_temp_5f","oa":95},{"a":31662,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":31664,"t":"code","b":[56],"m":"sec"},{"a":31665,"t":"code","b":[229,95],"m":"sbc","o":"zp_temp_5f","oa":95},{"a":31667,"t":"code","b":[141,249,177],"m":"sta","o":"wizball_screen_offset","oa":45561},{"a":31670,"t":"code","b":[96],"m":"rts"},{"a":31671,"l":"b_7BB7","t":"code","b":[56],"m":"sec","x":[31637]},{"a":31672,"t":"code","b":[233,187],"m":"sbc","o":"#$BB"},{"a":31674,"t":"code","b":[10],"m":"asl","o":"a"},{"a":31675,"t":"code","b":[10],"m":"asl","o":"a"},{"a":31676,"t":"code","b":[10],"m":"asl","o":"a"},{"a":31677,"t":"code","b":[133,95],"m":"sta","o":"zp_temp_5f","oa":95},{"a":31679,"t":"code","b":[173,242,177],"m":"lda","o":"scroll_fine","oa":45554},{"a":31682,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":31684,"t":"code","b":[24],"m":"clc"},{"a":31685,"t":"code","b":[101,95],"m":"adc","o":"zp_temp_5f","oa":95},{"a":31687,"t":"code","b":[141,249,177],"m":"sta","o":"wizball_screen_offset","oa":45561},{"a":31690,"t":"code","b":[96],"m":"rts"},{"a":31691,"l":"advance_scroll_position","c":"Adds the scroll velocity $B1F4 (-6 to +6) to the 8.8 fixed-point position $B1F2/$B1F3 and the same whole-pixel change to $63: 0, 1/8, 1/4, 1/2, 1, 1 1/2 or 2 pixels a frame, from the fraction and whole tables $B33D/$B344 (forward) and $B34B/$B351 (backward). Called by scroll_landscape and, while the screen is fixed, by slide_on_fixed_screen.","t":"code","b":[173,244,177],"m":"lda","o":"wizball_speed","oa":45556,"x":[31398,32529]},{"a":31694,"t":"code","b":[16,40],"m":"bpl","o":"b_7BF8","oa":31736},{"a":31696,"t":"code","b":[24],"m":"clc"},{"a":31697,"t":"code","b":[105,6],"m":"adc","o":"#$06"},{"a":31699,"t":"code","b":[168],"m":"tay"},{"a":31700,"t":"code","b":[173,243,177],"m":"lda","o":"scroll_fraction","oa":45555},{"a":31703,"t":"code","b":[24],"m":"clc"},{"a":31704,"t":"code","b":[121,75,179],"m":"adc","o":"tbl_speed_back_fraction,y","oa":45899},{"a":31707,"t":"code","b":[141,243,177],"m":"sta","o":"scroll_fraction","oa":45555},{"a":31710,"t":"code","b":[144,5],"m":"bcc","o":"b_7BE5","oa":31717},{"a":31712,"t":"code","b":[206,242,177],"m":"dec","o":"scroll_fine","oa":45554},{"a":31715,"t":"code","b":[198,99],"m":"dec","o":"zp_ptr_63","oa":99},{"a":31717,"l":"b_7BE5","t":"code","b":[173,242,177],"m":"lda","o":"scroll_fine","oa":45554,"x":[31710]},{"a":31720,"t":"code","b":[56],"m":"sec"},{"a":31721,"t":"code","b":[249,81,179],"m":"sbc","o":"tbl_speed_back_whole,y","oa":45905},{"a":31724,"t":"code","b":[141,242,177],"m":"sta","o":"scroll_fine","oa":45554},{"a":31727,"t":"code","b":[165,99],"m":"lda","o":"zp_ptr_63","oa":99},{"a":31729,"t":"code","b":[56],"m":"sec"},{"a":31730,"t":"code","b":[249,81,179],"m":"sbc","o":"tbl_speed_back_whole,y","oa":45905},{"a":31733,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":31735,"t":"code","b":[96],"m":"rts"},{"a":31736,"l":"b_7BF8","t":"code","b":[168],"m":"tay","x":[31694]},{"a":31737,"t":"code","b":[173,243,177],"m":"lda","o":"scroll_fraction","oa":45555},{"a":31740,"t":"code","b":[24],"m":"clc"},{"a":31741,"t":"code","b":[121,61,179],"m":"adc","o":"tbl_speed_fraction,y","oa":45885},{"a":31744,"t":"code","b":[141,243,177],"m":"sta","o":"scroll_fraction","oa":45555},{"a":31747,"t":"code","b":[144,5],"m":"bcc","o":"b_7C0A","oa":31754},{"a":31749,"t":"code","b":[238,242,177],"m":"inc","o":"scroll_fine","oa":45554},{"a":31752,"t":"code","b":[230,99],"m":"inc","o":"zp_ptr_63","oa":99},{"a":31754,"l":"b_7C0A","t":"code","b":[173,242,177],"m":"lda","o":"scroll_fine","oa":45554,"x":[31747]},{"a":31757,"t":"code","b":[24],"m":"clc"},{"a":31758,"t":"code","b":[121,68,179],"m":"adc","o":"tbl_speed_whole,y","oa":45892},{"a":31761,"t":"code","b":[141,242,177],"m":"sta","o":"scroll_fine","oa":45554},{"a":31764,"t":"code","b":[165,99],"m":"lda","o":"zp_ptr_63","oa":99},{"a":31766,"t":"code","b":[24],"m":"clc"},{"a":31767,"t":"code","b":[121,68,179],"m":"adc","o":"tbl_speed_whole,y","oa":45892},{"a":31770,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":31772,"t":"code","b":[96],"m":"rts"},{"a":31773,"l":"screen_address_at","c":"Converts a sprite position to the address of the character under it in the shown landscape screen: X = sprite x / 2, Y = sprite y; column = (x - 12 + fine / 2) / 4 with the fine scroll $B1FC, row = (y - 51) / 8; returns ($60) = the row's start from $0500/$0519 on the screen chosen by $B1FD, plus the column. Used for the Wizball ($8382) and for objects ($A69B).","t":"code","b":[173,252,177],"m":"lda","o":"scroll_fine_bits","oa":45564,"x":[33666,42651]},{"a":31776,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":31777,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":31779,"t":"code","b":[138],"m":"txa"},{"a":31780,"t":"code","b":[56],"m":"sec"},{"a":31781,"t":"code","b":[233,12],"m":"sbc","o":"#$0C"},{"a":31783,"t":"code","b":[24],"m":"clc"},{"a":31784,"t":"code","b":[101,96],"m":"adc","o":"zp_ptr_60","oa":96},{"a":31786,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":31787,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":31788,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":31790,"t":"code","b":[152],"m":"tya"},{"a":31791,"t":"code","b":[56],"m":"sec"},{"a":31792,"t":"code","b":[233,51],"m":"sbc","o":"#$33"},{"a":31794,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":31795,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":31796,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":31797,"t":"code","b":[168],"m":"tay"},{"a":31798,"t":"code","b":[173,253,177],"m":"lda","o":"screen_shown","oa":45565},{"a":31801,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":31802,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":31803,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":31805,"t":"code","b":[185,25,5],"m":"lda","o":"screen_row_hi,y","oa":1305},{"a":31808,"t":"code","b":[5,97],"m":"ora","o":"zp_ptr_61","oa":97},{"a":31810,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":31812,"t":"code","b":[185,0,5],"m":"lda","o":"screen_row_lo,y","oa":1280},{"a":31815,"t":"code","b":[24],"m":"clc"},{"a":31816,"t":"code","b":[101,96],"m":"adc","o":"zp_ptr_60","oa":96},{"a":31818,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":31820,"t":"code","b":[144,2],"m":"bcc","o":"r_7C50","oa":31824},{"a":31822,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":31824,"l":"r_7C50","t":"code","b":[96],"m":"rts","x":[31820]},{"a":31825,"l":"clear_screen_tops","c":"Clears the first 256 bytes (rows 0-6) of each of the three landscape screens $E000, $E400 and $E800, before each turn ($63CA); on $E800 that includes sprite shape $A0, the level digit.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[25546]},{"a":31827,"t":"code","b":[170],"m":"tax"},{"a":31828,"l":"b_7C54","t":"code","b":[157,0,224],"m":"sta","o":"screen_e000,x","oa":57344,"x":[31838]},{"a":31831,"t":"code","b":[157,0,228],"m":"sta","o":"screen_e400,x","oa":58368},{"a":31834,"t":"code","b":[157,0,232],"m":"sta","o":"sprite_level_digit,x","oa":59392},{"a":31837,"t":"code","b":[202],"m":"dex"},{"a":31838,"t":"code","b":[208,244],"m":"bne","o":"b_7C54","oa":31828},{"a":31840,"t":"code","b":[96],"m":"rts"},{"a":31841,"l":"nmi_handler","c":"NMI handler (vector $FFFA). CIA 2 timer A calls it once a frame: the initialisation sets the latch to $4CC7 (19,656 cycles, one PAL frame) and starts it at raster line $1E, so it comes at the same raster position every frame; the RESTORE key also lands here. It saves A, reads $DD0D to acknowledge CIA 2, writes 0 to $85 and returns; eight NOPs pad it. $85 is a watchdog: band $8BBB sets it non-zero at raster line $F7 in play (the title bands $936A-$93C5 add to it through INC $FFB0,X, which wraps to $0085), and the checks at $8B04 and $9287, written in undocumented opcodes (LAX $86 / DCP $FF86,X, which wraps to $0085), pass only if this NMI has cleared it since; otherwise they unbalance the stack and the game crashes. Because those readers use undocumented opcodes and wrapped indexed addresses, a search of ordinary operands finds no reader of $85. RESTORE only brings the next clearing forward, so it does no harm.","t":"code","b":[72],"m":"pha"},{"a":31842,"t":"code","b":[173,13,221],"m":"lda","o":"cia2_interrupt"},{"a":31845,"t":"code","b":[234],"m":"nop"},{"a":31846,"t":"code","b":[234],"m":"nop"},{"a":31847,"t":"code","b":[234],"m":"nop"},{"a":31848,"t":"code","b":[234],"m":"nop"},{"a":31849,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":31851,"t":"code","b":[133,133],"m":"sta","o":"nmi_watchdog_flag","oa":133},{"a":31853,"t":"code","b":[234],"m":"nop"},{"a":31854,"t":"code","b":[234],"m":"nop"},{"a":31855,"t":"code","b":[234],"m":"nop"},{"a":31856,"t":"code","b":[234],"m":"nop"},{"a":31857,"t":"code","b":[104],"m":"pla"},{"a":31858,"t":"code","b":[64],"m":"rti"},{"a":31859,"l":"irq_handler","c":"Raster IRQ handler (vector $FFFE): runs one entry of the current display list per interrupt. Saves A, waits until $D019 bit 0 (raster) is set and acknowledges it, saves Y and X, then reads the entry at index $B1CD of the list at ($68): the band routine's address into the JSR operand at $7C9D, the raster line of the next interrupt into $D012; the index steps by 4, the routine is called and the registers restored. An entry whose next-line byte is 0 ends the list ($7CA6): the index goes back to 2, $D012 gets the list's first line (byte 0) and that last routine still runs, so the list repeats every frame. A list is: first raster line, 0, then entries of routine (low, high), next line, 0. Entered without the raster flag (a BRK), it loops back to the PHA and pushes A again on every pass.","t":"code","b":[72],"m":"pha","x":[31865]},{"a":31860,"t":"code","b":[173,25,208],"m":"lda","o":"vic_irq_status"},{"a":31863,"t":"code","b":[41,1],"m":"and","o":"#$01"},{"a":31865,"s":"no raster flag: loops back to the PHA","t":"code","b":[240,248],"m":"beq","o":"irq_handler","oa":31859},{"a":31867,"t":"code","b":[141,25,208],"m":"sta","o":"vic_irq_status"},{"a":31870,"t":"code","b":[152],"m":"tya"},{"a":31871,"t":"code","b":[72],"m":"pha"},{"a":31872,"t":"code","b":[138],"m":"txa"},{"a":31873,"t":"code","b":[72],"m":"pha"},{"a":31874,"t":"code","b":[172,205,177],"m":"ldy","o":"raster_list_index","oa":45517},{"a":31877,"t":"code","b":[177,104],"m":"lda","o":"(display_list_lo),y","oa":104},{"a":31879,"t":"code","b":[141,158,124],"m":"sta","o":"irq_band_lo","oa":31902},{"a":31882,"t":"code","b":[200],"m":"iny"},{"a":31883,"t":"code","b":[177,104],"m":"lda","o":"(display_list_lo),y","oa":104},{"a":31885,"t":"code","b":[141,159,124],"m":"sta","o":"irq_band_hi","oa":31903},{"a":31888,"t":"code","b":[200],"m":"iny"},{"a":31889,"t":"code","b":[177,104],"m":"lda","o":"(display_list_lo),y","oa":104},{"a":31891,"t":"code","b":[240,17],"m":"beq","o":"b_7CA6","oa":31910},{"a":31893,"t":"code","b":[141,18,208],"m":"sta","o":"vic_raster"},{"a":31896,"t":"code","b":[200],"m":"iny"},{"a":31897,"t":"code","b":[200],"m":"iny"},{"a":31898,"t":"code","b":[140,205,177],"m":"sty","o":"raster_list_index","oa":45517},{"a":31901,"l":"b_7C9D","t":"code","b":[32,0,0],"m":"jsr","o":"cpu_port_ddr","oa":0,"x":[31922]},{"a":31902,"t":"note","l":"irq_band_lo","c":"Low byte of the JSR operand at $7C9D, the current band routine, written by irq_handler ($7C87) from the display list.","note":"inside the item at $7C9D","x":[31879]},{"a":31903,"t":"note","l":"irq_band_hi","c":"High byte of the JSR operand at $7C9D, written at $7C8D. Then irq_handler's exit (X, Y and A restored, RTI) and, at $7CA6, the end of a list: index back to 2, $D012 = the list's first line, BNE back to $7C9D to run the last routine.","note":"inside the item at $7C9D","x":[31885]},{"a":31904,"t":"code","b":[104],"m":"pla"},{"a":31905,"t":"code","b":[170],"m":"tax"},{"a":31906,"t":"code","b":[104],"m":"pla"},{"a":31907,"t":"code","b":[168],"m":"tay"},{"a":31908,"t":"code","b":[104],"m":"pla"},{"a":31909,"t":"code","b":[64],"m":"rti"},{"a":31910,"l":"b_7CA6","s":"end of list: restart at entry 0, next IRQ at the first line","t":"code","b":[160,2],"m":"ldy","o":"#$02","x":[31891]},{"a":31912,"t":"code","b":[140,205,177],"m":"sty","o":"raster_list_index","oa":45517},{"a":31915,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":31917,"t":"code","b":[177,104],"m":"lda","o":"(display_list_lo),y","oa":104},{"a":31919,"t":"code","b":[141,18,208],"m":"sta","o":"vic_raster"},{"a":31922,"t":"code","b":[208,233],"m":"bne","o":"b_7C9D","oa":31901},{"a":31924,"l":"install_display_list","c":"Switches the raster IRQ to the display list at X (low), Y (high): waits for raster lines $100-$113 ($6EA8), then with interrupts off stores the pointer in $68/$69, sets the index $B1CD to 2 (the first entry), $D012 to the list's first line with the compare's bit 8 cleared in $D011, acknowledges and enables the raster interrupt ($81 to $D019 and $D01A) and turns interrupts back on. Callers: $63B5 (the play list $B3E2), $68A3, $6BA4, $8F89, $9020, $9469.","t":"code","b":[32,168,110],"m":"jsr","o":"wait_raster_top","oa":28328,"x":[25525,26787,27556,36745,36896,37993]},{"a":31927,"t":"code","b":[120],"m":"sei"},{"a":31928,"t":"code","b":[134,104],"m":"stx","o":"display_list_lo","oa":104},{"a":31930,"t":"code","b":[132,105],"m":"sty","o":"display_list_hi","oa":105},{"a":31932,"t":"code","b":[160,2],"m":"ldy","o":"#$02"},{"a":31934,"t":"code","b":[140,205,177],"m":"sty","o":"raster_list_index","oa":45517},{"a":31937,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":31939,"t":"code","b":[177,104],"m":"lda","o":"(display_list_lo),y","oa":104},{"a":31941,"t":"code","b":[141,18,208],"m":"sta","o":"vic_raster"},{"a":31944,"t":"code","b":[173,17,208],"m":"lda","o":"vic_control1"},{"a":31947,"t":"code","b":[41,127],"m":"and","o":"#$7F"},{"a":31949,"t":"code","b":[141,17,208],"m":"sta","o":"vic_control1"},{"a":31952,"t":"code","b":[169,129],"m":"lda","o":"#$81"},{"a":31954,"t":"code","b":[141,25,208],"m":"sta","o":"vic_irq_status"},{"a":31957,"t":"code","b":[141,26,208],"m":"sta","o":"vic_irq_enable"},{"a":31960,"t":"code","b":[88],"m":"cli"},{"a":31961,"t":"code","b":[96],"m":"rts"},{"a":31962,"l":"reset_wizball_state","c":"At the start of each turn ($6E42): clears the 96 bytes $B20D-$B26C (the Wizball's position and motion, weapon flags, stick copies $B23E/$B23F, the port choice $B240, key and joystick bytes $B254-$B257, the lit icon and more) and the sprite copies $E7C4-$E7D4; puts the Wizball at y = $49 with the view column $B1F1 = $B4; stops the scroll ($B1F4 = 0); clears $B1CF and $B1D0 (death flag and death timer); turns sprite expansion and priority off; sets the sprite-enable copy $E7D9 = 3; calls $8C84 and $8CB5.","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[28226]},{"a":31964,"t":"code","b":[152],"m":"tya"},{"a":31965,"l":"b_7CDD","t":"code","b":[153,13,178],"m":"sta","o":"wizball_x,y","oa":45581,"x":[31972]},{"a":31968,"t":"code","b":[200],"m":"iny"},{"a":31969,"t":"code","b":[204,110,178],"m":"cpy","o":"life_clear_length","oa":45678},{"a":31972,"t":"code","b":[208,247],"m":"bne","o":"b_7CDD","oa":31965},{"a":31974,"t":"code","b":[160,17],"m":"ldy","o":"#$11"},{"a":31976,"l":"b_7CE8","t":"code","b":[153,195,231],"m":"sta","o":"vic_shadow_minus_1,y","oa":59331,"x":[31980]},{"a":31979,"t":"code","b":[136],"m":"dey"},{"a":31980,"t":"code","b":[208,250],"m":"bne","o":"b_7CE8","oa":31976},{"a":31982,"t":"code","b":[169,73],"m":"lda","o":"#$49"},{"a":31984,"t":"code","b":[141,15,178],"m":"sta","o":"wizball_y","oa":45583},{"a":31987,"t":"code","b":[169,180],"m":"lda","o":"#$B4"},{"a":31989,"t":"code","b":[141,241,177],"m":"sta","o":"view_column","oa":45553},{"a":31992,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":31994,"t":"code","b":[141,244,177],"m":"sta","o":"wizball_speed","oa":45556},{"a":31997,"t":"code","b":[141,207,177],"m":"sta","o":"life_over","oa":45519},{"a":32000,"t":"code","b":[141,208,177],"m":"sta","o":"death_timer","oa":45520},{"a":32003,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32005,"t":"code","b":[141,23,208],"m":"sta","o":"vic_sprite_expand_y"},{"a":32008,"t":"code","b":[141,29,208],"m":"sta","o":"vic_sprite_expand_x"},{"a":32011,"t":"code","b":[141,27,208],"m":"sta","o":"vic_sprite_priority"},{"a":32014,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":32016,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":32019,"t":"code","b":[32,132,140],"m":"jsr","o":"font_text_normal","oa":35972},{"a":32022,"t":"code","b":[32,181,140],"m":"jsr","o":"font_large_normal","oa":36021},{"a":32025,"t":"code","b":[96],"m":"rts"},{"a":32026,"l":"set_landscape_colours","c":"Applies the landscape colours: colour RAM rows 2-22 ($D850-$DB97) get the character colour $B27F (8 while $8959 is set), rows 23-24 black, border and background black, and $D022/$D023 get $B27D/$B27E (black while $8959 is set).","t":"code","b":[173,127,178],"m":"lda","o":"landscape_colour_3","oa":45695,"x":[25574,30426,30659,35145,40871,43845,44870]},{"a":32029,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":32031,"t":"code","b":[172,89,137],"m":"ldy","o":"freaky_bits","oa":35161},{"a":32034,"t":"code","b":[240,2],"m":"beq","o":"b_7D26","oa":32038},{"a":32036,"t":"code","b":[169,8],"m":"lda","o":"#$08"},{"a":32038,"l":"b_7D26","t":"code","b":[157,80,216],"m":"sta","o":"$D850,x","x":[32034,32051]},{"a":32041,"t":"code","b":[157,0,217],"m":"sta","o":"$D900,x"},{"a":32044,"t":"code","b":[157,0,218],"m":"sta","o":"$DA00,x"},{"a":32047,"t":"code","b":[157,152,218],"m":"sta","o":"$DA98,x"},{"a":32050,"t":"code","b":[202],"m":"dex"},{"a":32051,"t":"code","b":[208,241],"m":"bne","o":"b_7D26","oa":32038},{"a":32053,"t":"code","b":[162,80],"m":"ldx","o":"#$50"},{"a":32055,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32057,"l":"b_7D39","t":"code","b":[157,151,219],"m":"sta","o":"$DB97,x","x":[32061]},{"a":32060,"t":"code","b":[202],"m":"dex"},{"a":32061,"t":"code","b":[208,250],"m":"bne","o":"b_7D39","oa":32057},{"a":32063,"t":"code","b":[141,32,208],"m":"sta","o":"vic_border"},{"a":32066,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":32069,"t":"code","b":[172,89,137],"m":"ldy","o":"freaky_bits","oa":35161},{"a":32072,"t":"code","b":[208,13],"m":"bne","o":"b_7D57","oa":32087},{"a":32074,"t":"code","b":[173,125,178],"m":"lda","o":"landscape_colour_1","oa":45693},{"a":32077,"t":"code","b":[141,34,208],"m":"sta","o":"vic_background1"},{"a":32080,"t":"code","b":[173,126,178],"m":"lda","o":"landscape_colour_2","oa":45694},{"a":32083,"t":"code","b":[141,35,208],"m":"sta","o":"vic_background2"},{"a":32086,"t":"code","b":[96],"m":"rts"},{"a":32087,"l":"b_7D57","t":"code","b":[141,34,208],"m":"sta","o":"vic_background1","x":[32072]},{"a":32090,"t":"code","b":[141,35,208],"m":"sta","o":"vic_background2"},{"a":32093,"t":"code","b":[96],"m":"rts"},{"a":32094,"l":"draw_lives","c":"Prints the current player's spare lives on row 1 of $E000 at the column from tbl_player_lives_column (7 or 32): glyph $2F + lives ($B277 + player), lives capped at 10, so it shows lives - 1 as a digit up to 9 (0 lives would give glyph $2F).","t":"code","b":[172,217,191],"m":"ldy","o":"side_playing","oa":49113,"x":[29133,32244]},{"a":32097,"t":"code","b":[185,119,178],"m":"lda","o":"large_font_ink_mask,y","oa":45687},{"a":32100,"t":"code","b":[201,10],"m":"cmp","o":"#$0A"},{"a":32102,"t":"code","b":[144,2],"m":"bcc","o":"b_7D6A","oa":32106},{"a":32104,"t":"code","b":[169,10],"m":"lda","o":"#$0A"},{"a":32106,"l":"b_7D6A","t":"code","b":[190,223,113],"m":"ldx","o":"tbl_player_lives_column,y","oa":29151,"x":[32102]},{"a":32109,"t":"code","b":[24],"m":"clc"},{"a":32110,"t":"code","b":[105,47],"m":"adc","o":"#$2F"},{"a":32112,"t":"code","b":[157,40,224],"m":"sta","o":"score_row1,x","oa":57384},{"a":32115,"t":"code","b":[96],"m":"rts"},{"a":32116,"l":"spawn_debris","c":"Starts the Wizball's explosion (from start_death_sequence): fills the 16 records of 16 bytes at $0300-$03FF with the Wizball's character position (+0 column (x - 16) / 8, +1 row (y - 64) / 8), a random step -7 to +8 in each direction (+4, +5), +10 = 2 and +11 = 0.","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[32187]},{"a":32118,"l":"b_7D76","t":"code","b":[173,15,178],"m":"lda","o":"wizball_y","oa":45583,"x":[32181]},{"a":32121,"t":"code","b":[56],"m":"sec"},{"a":32122,"t":"code","b":[233,64],"m":"sbc","o":"#$40"},{"a":32124,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":32125,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":32126,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":32127,"t":"code","b":[157,1,3],"m":"sta","o":"bullet_row,x","oa":769},{"a":32130,"t":"code","b":[173,13,178],"m":"lda","o":"wizball_x","oa":45581},{"a":32133,"t":"code","b":[56],"m":"sec"},{"a":32134,"t":"code","b":[233,16],"m":"sbc","o":"#$10"},{"a":32136,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":32137,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":32138,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":32139,"t":"code","b":[157,0,3],"m":"sta","o":"bullet_column,x","oa":768},{"a":32142,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":32145,"t":"code","b":[41,15],"m":"and","o":"#$0F"},{"a":32147,"t":"code","b":[56],"m":"sec"},{"a":32148,"t":"code","b":[233,7],"m":"sbc","o":"#$07"},{"a":32150,"t":"code","b":[157,4,3],"m":"sta","o":"bullet_dx,x","oa":772},{"a":32153,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":32156,"t":"code","b":[41,15],"m":"and","o":"#$0F"},{"a":32158,"t":"code","b":[56],"m":"sec"},{"a":32159,"t":"code","b":[233,7],"m":"sbc","o":"#$07"},{"a":32161,"t":"code","b":[157,5,3],"m":"sta","o":"bullet_dy,x","oa":773},{"a":32164,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32166,"t":"code","b":[157,11,3],"m":"sta","o":"bullet_colour_count,x","oa":779},{"a":32169,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":32171,"t":"code","b":[157,10,3],"m":"sta","o":"bullet_state,x","oa":778},{"a":32174,"t":"code","b":[138],"m":"txa"},{"a":32175,"t":"code","b":[24],"m":"clc"},{"a":32176,"t":"code","b":[105,16],"m":"adc","o":"#$10"},{"a":32178,"t":"code","b":[170],"m":"tax"},{"a":32179,"t":"code","b":[224,0],"m":"cpx","o":"#$00"},{"a":32181,"t":"code","b":[208,191],"m":"bne","o":"b_7D76","oa":32118},{"a":32183,"t":"code","b":[96],"m":"rts"},{"a":32184,"l":"start_death_sequence","c":"The Wizball has just died (update_wizball, after setting the death timer $B1D0 = 200): calls $9AD6 and spawn_debris, stops the music ($B8F1 = 0) and the filter routing ($D417 = 0), plays sounds $15, $16 and $17, stops the scroll ($B1F4 = 0) and runs the first step of continue_death_sequence.","t":"code","b":[32,214,154],"m":"jsr","o":"erase_bullets_check_hits","oa":39638,"x":[32283]},{"a":32187,"t":"code","b":[32,116,125],"m":"jsr","o":"spawn_debris","oa":32116},{"a":32190,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32192,"t":"code","b":[141,241,184],"m":"sta","o":"music_voices","oa":47345},{"a":32195,"t":"code","b":[141,23,212],"m":"sta","o":"sid_filter_resonance"},{"a":32198,"t":"code","b":[160,21],"m":"ldy","o":"#$15"},{"a":32200,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":32203,"t":"code","b":[160,22],"m":"ldy","o":"#$16"},{"a":32205,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":32208,"t":"code","b":[160,23],"m":"ldy","o":"#$17"},{"a":32210,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":32213,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32215,"t":"code","b":[141,244,177],"m":"sta","o":"wizball_speed","oa":45556},{"a":32218,"l":"continue_death_sequence","c":"One frame of the death sequence: counts the death timer $B1D0 down, holding at 1 (which ends the frame loop at $6467, 199 frames after the death), calls $99BD unless $B874 is set, and clears sprite 0 (the Wizball) in the sprite-enable copy $E7D9.","t":"code","b":[206,208,177],"m":"dec","o":"death_timer","oa":45520,"x":[32270]},{"a":32221,"t":"code","b":[208,3],"m":"bne","o":"b_7DE2","oa":32226},{"a":32223,"t":"code","b":[238,208,177],"m":"inc","o":"death_timer","oa":45520},{"a":32226,"l":"b_7DE2","t":"code","b":[173,116,184],"m":"lda","o":"bonus_stage","oa":47220,"x":[32221]},{"a":32229,"t":"code","b":[208,3],"m":"bne","o":"b_7DEA","oa":32234},{"a":32231,"t":"code","b":[32,189,153],"m":"jsr","o":"update_alien_bullets","oa":39357},{"a":32234,"l":"b_7DEA","t":"code","b":[173,217,231],"m":"lda","o":"vic_shadow_sprite_on","oa":59353,"x":[32229]},{"a":32237,"t":"code","b":[41,254],"m":"and","o":"#$FE"},{"a":32239,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":32242,"t":"code","b":[96],"m":"rts"},{"a":32243,"l":"hum_count","c":"Frame counter of update_wizball (and of $AAAB): when it wraps to 0, or whenever the sound slot byte $0422 is 0, sound $18 is started again.","t":"byte","b":[0],"x":[32252,32255,43691,43694]},{"a":32244,"l":"update_wizball","c":"The Wizball's work for one frame (frame loop $6430; $64E2, $6591, $65D2, $8306, $AC81, $ACB9): draw_lives; restarts sound $18 when $0422 is 0 or every 256 frames (hum_count); while the death timer $B1D0 runs, continue_death_sequence; when $B1CF has just been set, starts it with $B1D0 = 200. Otherwise detect_wiggle, and $8216 when $B213 is set; else set_wizball_x, bounce_wizball, $80F8, animate_materialise, $8097, $836E (unless $B216), the fire routines $8444 and $8467, $857B, the beam $8592, the horizontal control $818E when thrust ($B231) or $AC4E is set, check_wizball_hits, update_shield, the firing-volume keys ($BA82) and slide_on_fixed_screen.","t":"code","b":[32,94,125],"m":"jsr","o":"draw_lives","oa":32094,"x":[25648,25826,26001,26066,33542,44161,44217]},{"a":32247,"t":"code","b":[173,34,4],"m":"lda","o":"sfx_slot2_time1","oa":1058},{"a":32250,"t":"code","b":[240,8],"m":"beq","o":"b_7E04","oa":32260},{"a":32252,"t":"code","b":[238,243,125],"m":"inc","o":"hum_count","oa":32243},{"a":32255,"t":"code","b":[173,243,125],"m":"lda","o":"hum_count","oa":32243},{"a":32258,"t":"code","b":[208,5],"m":"bne","o":"b_7E09","oa":32265},{"a":32260,"l":"b_7E04","t":"code","b":[160,24],"m":"ldy","o":"#$18","x":[32250]},{"a":32262,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":32265,"l":"b_7E09","t":"code","b":[173,208,177],"m":"lda","o":"death_timer","oa":45520,"x":[32258]},{"a":32268,"t":"code","b":[240,3],"m":"beq","o":"b_7E11","oa":32273},{"a":32270,"t":"code","b":[76,218,125],"m":"jmp","o":"continue_death_sequence","oa":32218},{"a":32273,"l":"b_7E11","t":"code","b":[173,207,177],"m":"lda","o":"life_over","oa":45519,"x":[32268]},{"a":32276,"t":"code","b":[240,8],"m":"beq","o":"b_7E1E","oa":32286},{"a":32278,"t":"code","b":[169,200],"m":"lda","o":"#$C8"},{"a":32280,"t":"code","b":[141,208,177],"m":"sta","o":"death_timer","oa":45520},{"a":32283,"t":"code","b":[76,184,125],"m":"jmp","o":"start_death_sequence","oa":32184},{"a":32286,"l":"b_7E1E","t":"code","b":[32,61,114],"m":"jsr","o":"detect_wiggle","oa":29245,"x":[32276]},{"a":32289,"t":"code","b":[173,19,178],"m":"lda","o":"tube_timer","oa":45587},{"a":32292,"t":"code","b":[240,3],"m":"beq","o":"b_7E29","oa":32297},{"a":32294,"t":"code","b":[76,22,130],"m":"jmp","o":"sink_into_tube","oa":33302},{"a":32297,"l":"b_7E29","t":"code","b":[32,61,127],"m":"jsr","o":"set_wizball_x","oa":32573,"x":[32292]},{"a":32300,"t":"code","b":[32,98,127],"m":"jsr","o":"bounce_wizball","oa":32610},{"a":32303,"t":"code","b":[32,248,128],"m":"jsr","o":"read_spin_control","oa":33016},{"a":32306,"t":"code","b":[32,234,127],"m":"jsr","o":"animate_materialise","oa":32746},{"a":32309,"t":"code","b":[32,151,128],"m":"jsr","o":"place_wizball_sprite","oa":32919},{"a":32312,"t":"code","b":[173,22,178],"m":"lda","o":"warp_direction","oa":45590},{"a":32315,"t":"code","b":[208,3],"m":"bne","o":"b_7E40","oa":32320},{"a":32317,"t":"code","b":[32,110,131],"m":"jsr","o":"check_wizball_scenery","oa":33646},{"a":32320,"l":"b_7E40","t":"code","b":[32,68,132],"m":"jsr","o":"read_fire_press","oa":33860,"x":[32315]},{"a":32323,"t":"code","b":[32,103,132],"m":"jsr","o":"fire_wiz_shot","oa":33895},{"a":32326,"t":"code","b":[32,123,133],"m":"jsr","o":"record_wizball_trail","oa":34171},{"a":32329,"t":"code","b":[32,146,133],"m":"jsr","o":"animate_beam","oa":34194},{"a":32332,"t":"code","b":[173,49,178],"m":"lda","o":"weapon_thrust","oa":45617},{"a":32335,"t":"code","b":[13,78,172],"m":"ora","o":"in_lab","oa":44110},{"a":32338,"t":"code","b":[240,3],"m":"beq","o":"b_7E57","oa":32343},{"a":32340,"t":"code","b":[32,142,129],"m":"jsr","o":"spin_to_roll_speed","oa":33166},{"a":32343,"l":"b_7E57","t":"code","b":[32,99,126],"m":"jsr","o":"check_wizball_hits","oa":32355,"x":[32338]},{"a":32346,"t":"code","b":[32,165,126],"m":"jsr","o":"update_shield","oa":32421},{"a":32349,"t":"code","b":[32,130,186],"m":"jsr","o":"adjust_firing_volume","oa":47746},{"a":32352,"t":"code","b":[76,11,127],"m":"jmp","o":"slide_on_fixed_screen","oa":32523},{"a":32355,"l":"check_wizball_hits","c":"Tests the point (Wizball x / 2, Wizball y + 11) against the six objects' boxes (test_wizball_point). On a hit, with Y = the object's offset in $0200: type ($0215 + Y) below 2 sets wizball_hit for update_shield; type 5, a pearl, is removed ($0202, $021F and $0220 cleared), adds one to the pearls waiting ($B259) and scores 100 (A = 10); other types are ignored.","t":"code","b":[173,15,178],"m":"lda","o":"wizball_y","oa":45583,"x":[32343]},{"a":32358,"t":"code","b":[24],"m":"clc"},{"a":32359,"t":"code","b":[105,11],"m":"adc","o":"#$0B"},{"a":32361,"t":"code","b":[168],"m":"tay"},{"a":32362,"t":"code","b":[173,14,178],"m":"lda","o":"wizball_x_high","oa":45582},{"a":32365,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":32366,"t":"code","b":[173,13,178],"m":"lda","o":"wizball_x","oa":45581},{"a":32369,"t":"code","b":[106],"m":"ror","o":"a"},{"a":32370,"t":"code","b":[32,152,126],"m":"jsr","o":"test_wizball_point","oa":32408},{"a":32373,"t":"code","b":[185,21,2],"m":"lda","o":"alien_state,y","oa":533},{"a":32376,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":32378,"t":"code","b":[48,24],"m":"bmi","o":"b_7E94","oa":32404},{"a":32380,"t":"code","b":[201,5],"m":"cmp","o":"#$05"},{"a":32382,"t":"code","b":[208,19],"m":"bne","o":"r_7E93","oa":32403},{"a":32384,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32386,"t":"code","b":[153,2,2],"m":"sta","o":"alien_line,y","oa":514},{"a":32389,"t":"code","b":[153,32,2],"m":"sta","o":"alien_box_bottom,y","oa":544},{"a":32392,"t":"code","b":[153,31,2],"m":"sta","o":"alien_box_top,y","oa":543},{"a":32395,"t":"code","b":[238,89,178],"m":"inc","o":"pearls_pending","oa":45657},{"a":32398,"t":"code","b":[169,10],"m":"lda","o":"#$0A"},{"a":32400,"t":"code","b":[32,11,113],"m":"jsr","o":"add_score","oa":28939},{"a":32403,"l":"r_7E93","t":"code","b":[96],"m":"rts","x":[32382]},{"a":32404,"l":"b_7E94","t":"code","b":[238,10,127],"m":"inc","o":"wizball_hit","oa":32522,"x":[32378]},{"a":32407,"t":"code","b":[96],"m":"rts"},{"a":32408,"l":"test_wizball_point","c":"Calls the box test at $6FBE with X = $48, a dummy bullet slot ($6FBE clears $0484 + X, here $04CC). On a hit $6FBE sets the object's hit flag (+$25), drops its own return address and returns to $7E75 in check_wizball_hits with Y = the object's offset; with no hit it returns here, and the PLA PLA drops check_wizball_hits's return address so that routine ends too.","t":"code","b":[162,72],"m":"ldx","o":"#$48","x":[32370]},{"a":32410,"t":"code","b":[32,190,111],"m":"jsr","o":"test_point_hits_alien","oa":28606},{"a":32413,"t":"code","b":[104],"m":"pla"},{"a":32414,"t":"code","b":[104],"m":"pla"},{"a":32415,"t":"code","b":[96],"m":"rts"},{"a":32416,"l":"b_7EA0","t":"code","b":[141,254,239],"m":"sta","o":"icon7_ptr","oa":61438,"x":[32424]},{"a":32419,"t":"code","b":[240,58],"m":"beq","o":"b_7EDF","oa":32479},{"a":32421,"l":"update_shield","c":"Shields and collisions, once a frame from update_wizball. While shield_time is non-zero it goes down one every 50 frames (shield_frames); below 8, sound $12 plays once (shield_warned); below 5 the shield is off (0). While it is 0 the shield icon's sprite pointer $EFFE is kept at 0, so the icon can be taken again. Then a collision flagged in wizball_hit: with a shield it costs 8; without one the Wizball dies ($B1CF = 1) unless $BB07 is set (BOREWIZ, typed on the title at $AF85) and $B874 is clear.","t":"code","b":[173,6,127],"m":"lda","o":"shield_time","oa":32518,"x":[32346]},{"a":32424,"t":"code","b":[240,246],"m":"beq","o":"b_7EA0","oa":32416},{"a":32426,"t":"code","b":[238,7,127],"m":"inc","o":"shield_frames","oa":32519},{"a":32429,"t":"code","b":[173,7,127],"m":"lda","o":"shield_frames","oa":32519},{"a":32432,"t":"code","b":[201,50],"m":"cmp","o":"#$32"},{"a":32434,"t":"code","b":[208,8],"m":"bne","o":"b_7EBC","oa":32444},{"a":32436,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32438,"t":"code","b":[141,7,127],"m":"sta","o":"shield_frames","oa":32519},{"a":32441,"t":"code","b":[206,6,127],"m":"dec","o":"shield_time","oa":32518},{"a":32444,"l":"b_7EBC","t":"code","b":[173,9,127],"m":"lda","o":"shield_warned","oa":32521,"x":[32434]},{"a":32447,"t":"code","b":[208,15],"m":"bne","o":"b_7ED0","oa":32464},{"a":32449,"t":"code","b":[173,6,127],"m":"lda","o":"shield_time","oa":32518},{"a":32452,"t":"code","b":[201,8],"m":"cmp","o":"#$08"},{"a":32454,"t":"code","b":[16,8],"m":"bpl","o":"b_7ED0","oa":32464},{"a":32456,"t":"code","b":[160,18],"m":"ldy","o":"#$12"},{"a":32458,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":32461,"t":"code","b":[238,9,127],"m":"inc","o":"shield_warned","oa":32521},{"a":32464,"l":"b_7ED0","t":"code","b":[173,6,127],"m":"lda","o":"shield_time","oa":32518,"x":[32447,32454]},{"a":32467,"t":"code","b":[201,5],"m":"cmp","o":"#$05"},{"a":32469,"t":"code","b":[16,8],"m":"bpl","o":"b_7EDF","oa":32479},{"a":32471,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32473,"t":"code","b":[141,6,127],"m":"sta","o":"shield_time","oa":32518},{"a":32476,"t":"code","b":[141,254,239],"m":"sta","o":"icon7_ptr","oa":61438},{"a":32479,"l":"b_7EDF","t":"code","b":[173,10,127],"m":"lda","o":"wizball_hit","oa":32522,"x":[32419,32469]},{"a":32482,"t":"code","b":[208,1],"m":"bne","o":"b_7EE5","oa":32485},{"a":32484,"l":"r_7EE4","t":"code","b":[96],"m":"rts","x":[32503]},{"a":32485,"l":"b_7EE5","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[32482]},{"a":32487,"t":"code","b":[141,10,127],"m":"sta","o":"wizball_hit","oa":32522},{"a":32490,"t":"code","b":[173,6,127],"m":"lda","o":"shield_time","oa":32518},{"a":32493,"t":"code","b":[208,16],"m":"bne","o":"b_7EFF","oa":32511},{"a":32495,"t":"code","b":[173,116,184],"m":"lda","o":"bonus_stage","oa":47220},{"a":32498,"t":"code","b":[208,5],"m":"bne","o":"b_7EF9","oa":32505},{"a":32500,"t":"code","b":[173,7,187],"m":"lda","o":"borewiz","oa":47879},{"a":32503,"t":"code","b":[208,235],"m":"bne","o":"r_7EE4","oa":32484},{"a":32505,"l":"b_7EF9","t":"code","b":[169,1],"m":"lda","o":"#$01","x":[32498]},{"a":32507,"t":"code","b":[141,207,177],"m":"sta","o":"life_over","oa":45519},{"a":32510,"t":"code","b":[96],"m":"rts"},{"a":32511,"l":"b_7EFF","t":"code","b":[56],"m":"sec","x":[32493]},{"a":32512,"t":"code","b":[233,8],"m":"sbc","o":"#$08"},{"a":32514,"t":"code","b":[141,6,127],"m":"sta","o":"shield_time","oa":32518},{"a":32517,"t":"code","b":[96],"m":"rts"},{"a":32518,"l":"shield_time","c":"The Wizball's shield in units of 50 frames: 40 from take_shield, -1 a second, -8 a collision, off below 5, so a shield lasts 36 seconds without collisions. Cleared by update_shield and at $AB14; nothing on the way from a quit to a new game clears it. Live: 40 to 38 in 100 frames; a collision cost 8 with no life lost; a shield running at a quit was still running in the next game.","t":"byte","b":[0],"x":[29618,32421,32441,32449,32464,32473,32490,32514,32995,43796]},{"a":32519,"l":"shield_frames","c":"Frames towards the next second of shield_time, 0-49, counted by update_shield.","t":"byte","b":[0],"x":[29626,32426,32429,32438]},{"a":32520,"l":"shield_flicker","c":"Counter for the Wizball's flicker while shielded: $34 from take_shield, incremented at $80E8 each frame while shield_time is non-zero; when its bit 1 is set, $80F2 turns the Wizball's colour copy $E7EB (5, green) to black, two frames in four.","t":"byte","b":[0],"x":[29640,33000,33003]},{"a":32521,"l":"shield_warned","c":"Non-zero once the running-out sound $12 has played for this shield; cleared by take_shield.","t":"byte","b":[0],"x":[29632,32444,32461]},{"a":32522,"l":"wizball_hit","c":"Set when something harmful touches the Wizball: by check_wizball_hits ($7E94, an object of type 0 or 1) and by $9B94 (a record of the $0300 table inside the Wizball's box). update_shield clears it and takes 8 from the shield or kills the Wizball; $806C also clears it when a Wizball materialises.","t":"byte","b":[0],"x":[32404,32479,32487,32876,39828]},{"a":32523,"l":"slide_on_fixed_screen","c":"The end of update_wizball: while $B874 is set (the landscape does not scroll) the scroll velocity $B1F4 moves the Wizball across the screen instead: advance_scroll_position runs on $B1F2, which becomes the Wizball's offset $B1F9 (copied before the limit is applied) and is held between -121 ($87) and +83 ($53), the spin $B21C cleared at either limit. Does nothing while $B874 is 0.","t":"code","b":[173,116,184],"m":"lda","o":"bonus_stage","oa":47220,"x":[32352]},{"a":32526,"t":"code","b":[208,1],"m":"bne","o":"b_7F11","oa":32529},{"a":32528,"t":"code","b":[96],"m":"rts"},{"a":32529,"l":"b_7F11","t":"code","b":[32,203,123],"m":"jsr","o":"advance_scroll_position","oa":31691,"x":[32526]},{"a":32532,"t":"code","b":[173,242,177],"m":"lda","o":"scroll_fine","oa":45554},{"a":32535,"t":"code","b":[141,249,177],"m":"sta","o":"wizball_screen_offset","oa":45561},{"a":32538,"t":"code","b":[173,242,177],"m":"lda","o":"scroll_fine","oa":45554},{"a":32541,"t":"code","b":[16,15],"m":"bpl","o":"b_7F2E","oa":32558},{"a":32543,"t":"code","b":[201,135],"m":"cmp","o":"#$87"},{"a":32545,"t":"code","b":[176,10],"m":"bcs","o":"r_7F2D","oa":32557},{"a":32547,"t":"code","b":[169,135],"m":"lda","o":"#$87"},{"a":32549,"t":"code","b":[141,242,177],"m":"sta","o":"scroll_fine","oa":45554},{"a":32552,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32554,"t":"code","b":[141,28,178],"m":"sta","o":"spin","oa":45596},{"a":32557,"l":"r_7F2D","t":"code","b":[96],"m":"rts","x":[32545]},{"a":32558,"l":"b_7F2E","t":"code","b":[201,84],"m":"cmp","o":"#$54","x":[32541]},{"a":32560,"t":"code","b":[144,10],"m":"bcc","o":"r_7F3C","oa":32572},{"a":32562,"t":"code","b":[169,83],"m":"lda","o":"#$53"},{"a":32564,"t":"code","b":[141,242,177],"m":"sta","o":"scroll_fine","oa":45554},{"a":32567,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32569,"t":"code","b":[141,28,178],"m":"sta","o":"spin","oa":45596},{"a":32572,"l":"r_7F3C","t":"code","b":[96],"m":"rts","x":[32560]},{"a":32573,"l":"set_wizball_x","c":"Sets the Wizball's sprite x ($B20D, bit 8 in $B20E) to 172 + its signed offset $B1F9: 0 from the start of a turn ($63D2) while the landscape scrolls under it, set by scroll_landscape at the level's edges and by slide_on_fixed_screen on a fixed screen.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[32297]},{"a":32575,"t":"code","b":[141,14,178],"m":"sta","o":"wizball_x_high","oa":45582},{"a":32578,"t":"code","b":[173,249,177],"m":"lda","o":"wizball_screen_offset","oa":45561},{"a":32581,"t":"code","b":[16,12],"m":"bpl","o":"b_7F53","oa":32595},{"a":32583,"t":"code","b":[169,172],"m":"lda","o":"#$AC"},{"a":32585,"t":"code","b":[24],"m":"clc"},{"a":32586,"t":"code","b":[109,249,177],"m":"adc","o":"wizball_screen_offset","oa":45561},{"a":32589,"t":"code","b":[141,13,178],"m":"sta","o":"wizball_x","oa":45581},{"a":32592,"t":"code","b":[76,97,127],"m":"jmp","o":"r_7F61","oa":32609},{"a":32595,"l":"b_7F53","t":"code","b":[169,172],"m":"lda","o":"#$AC","x":[32581]},{"a":32597,"t":"code","b":[24],"m":"clc"},{"a":32598,"t":"code","b":[109,249,177],"m":"adc","o":"wizball_screen_offset","oa":45561},{"a":32601,"t":"code","b":[141,13,178],"m":"sta","o":"wizball_x","oa":45581},{"a":32604,"t":"code","b":[144,3],"m":"bcc","o":"r_7F61","oa":32609},{"a":32606,"t":"code","b":[238,14,178],"m":"inc","o":"wizball_x_high","oa":45582},{"a":32609,"l":"r_7F61","t":"code","b":[96],"m":"rts","x":[32592,32604]},{"a":32610,"l":"bounce_wizball","c":"The Wizball's vertical motion. With anti-grav ($B232) or $AC4E set, jumps to $8BEA. Otherwise the y position $B20F.$B210 moves by the speed $B211.$B212 (8.8 fixed point) in the direction $B217 (1 down, 0 up); gravity $B27C (constant $10, 1/16 pixel per frame per frame) adds to the speed going down and takes from it going up. At y $C8 (200) the ball bounces: the direction flips with the speed kept and $818E turns its spin into the scroll velocity; at speed 0 going up it starts to fall.","t":"code","b":[173,50,178],"m":"lda","o":"weapon_antigrav","oa":45618,"x":[32300]},{"a":32613,"t":"code","b":[13,78,172],"m":"ora","o":"in_lab","oa":44110},{"a":32616,"t":"code","b":[240,3],"m":"beq","o":"b_7F6D","oa":32621},{"a":32618,"t":"code","b":[76,234,139],"m":"jmp","o":"move_antigrav","oa":35818},{"a":32621,"l":"b_7F6D","t":"code","b":[173,23,178],"m":"lda","o":"wizball_falling","oa":45591,"x":[32616]},{"a":32624,"t":"code","b":[240,55],"m":"beq","o":"b_7FA9","oa":32681},{"a":32626,"t":"code","b":[173,16,178],"m":"lda","o":"wizball_y_fraction","oa":45584},{"a":32629,"t":"code","b":[24],"m":"clc"},{"a":32630,"t":"code","b":[109,18,178],"m":"adc","o":"wizball_vspeed_fraction","oa":45586},{"a":32633,"t":"code","b":[141,16,178],"m":"sta","o":"wizball_y_fraction","oa":45584},{"a":32636,"t":"code","b":[144,3],"m":"bcc","o":"b_7F81","oa":32641},{"a":32638,"t":"code","b":[238,15,178],"m":"inc","o":"wizball_y","oa":45583},{"a":32641,"l":"b_7F81","t":"code","b":[173,15,178],"m":"lda","o":"wizball_y","oa":45583,"x":[32636]},{"a":32644,"t":"code","b":[24],"m":"clc"},{"a":32645,"t":"code","b":[109,17,178],"m":"adc","o":"wizball_vspeed","oa":45585},{"a":32648,"t":"code","b":[141,15,178],"m":"sta","o":"wizball_y","oa":45583},{"a":32651,"t":"code","b":[56],"m":"sec"},{"a":32652,"t":"code","b":[233,200],"m":"sbc","o":"#$C8"},{"a":32654,"t":"code","b":[144,9],"m":"bcc","o":"b_7F99","oa":32665},{"a":32656,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32658,"t":"code","b":[141,23,178],"m":"sta","o":"wizball_falling","oa":45591},{"a":32661,"t":"code","b":[32,142,129],"m":"jsr","o":"spin_to_roll_speed","oa":33166},{"a":32664,"t":"code","b":[96],"m":"rts"},{"a":32665,"l":"b_7F99","t":"code","b":[173,18,178],"m":"lda","o":"wizball_vspeed_fraction","oa":45586,"x":[32654,33815]},{"a":32668,"t":"code","b":[24],"m":"clc"},{"a":32669,"t":"code","b":[109,124,178],"m":"adc","o":"gravity","oa":45692},{"a":32672,"t":"code","b":[141,18,178],"m":"sta","o":"wizball_vspeed_fraction","oa":45586},{"a":32675,"t":"code","b":[144,3],"m":"bcc","o":"r_7FA8","oa":32680},{"a":32677,"t":"code","b":[238,17,178],"m":"inc","o":"wizball_vspeed","oa":45585},{"a":32680,"l":"r_7FA8","t":"code","b":[96],"m":"rts","x":[32675]},{"a":32681,"l":"b_7FA9","t":"code","b":[173,16,178],"m":"lda","o":"wizball_y_fraction","oa":45584,"x":[32624]},{"a":32684,"t":"code","b":[56],"m":"sec"},{"a":32685,"t":"code","b":[237,18,178],"m":"sbc","o":"wizball_vspeed_fraction","oa":45586},{"a":32688,"t":"code","b":[141,16,178],"m":"sta","o":"wizball_y_fraction","oa":45584},{"a":32691,"t":"code","b":[176,3],"m":"bcs","o":"b_7FB8","oa":32696},{"a":32693,"t":"code","b":[206,15,178],"m":"dec","o":"wizball_y","oa":45583},{"a":32696,"l":"b_7FB8","t":"code","b":[173,15,178],"m":"lda","o":"wizball_y","oa":45583,"x":[32691]},{"a":32699,"t":"code","b":[56],"m":"sec"},{"a":32700,"t":"code","b":[237,17,178],"m":"sbc","o":"wizball_vspeed","oa":45585},{"a":32703,"t":"code","b":[141,15,178],"m":"sta","o":"wizball_y","oa":45583},{"a":32706,"t":"code","b":[173,17,178],"m":"lda","o":"wizball_vspeed","oa":45585},{"a":32709,"t":"code","b":[13,18,178],"m":"ora","o":"wizball_vspeed_fraction","oa":45586},{"a":32712,"t":"code","b":[208,6],"m":"bne","o":"b_7FD0","oa":32720},{"a":32714,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":32716,"t":"code","b":[141,23,178],"m":"sta","o":"wizball_falling","oa":45591},{"a":32719,"t":"code","b":[96],"m":"rts"},{"a":32720,"l":"b_7FD0","t":"code","b":[173,18,178],"m":"lda","o":"wizball_vspeed_fraction","oa":45586,"x":[32712,33836]},{"a":32723,"t":"code","b":[56],"m":"sec"},{"a":32724,"t":"code","b":[237,124,178],"m":"sbc","o":"gravity","oa":45692},{"a":32727,"t":"code","b":[141,18,178],"m":"sta","o":"wizball_vspeed_fraction","oa":45586},{"a":32730,"t":"code","b":[176,13],"m":"bcs","o":"r_7FE9","oa":32745},{"a":32732,"t":"code","b":[206,17,178],"m":"dec","o":"wizball_vspeed","oa":45585},{"a":32735,"t":"code","b":[16,8],"m":"bpl","o":"r_7FE9","oa":32745},{"a":32737,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32739,"t":"code","b":[141,17,178],"m":"sta","o":"wizball_vspeed","oa":45585},{"a":32742,"t":"code","b":[141,18,178],"m":"sta","o":"wizball_vspeed_fraction","oa":45586},{"a":32745,"l":"r_7FE9","t":"code","b":[96],"m":"rts","x":[32730,32735]},{"a":32746,"l":"animate_materialise","c":"The Wizball's materialising animation: while $B216 is 1 the frame $B214 counts down from $17 to 0 one step every 3 frames ($B215), while 2 it counts up to $17, then $B216 goes to 0; the sprite shape offset $B21A = frame + $10 and $E7DF = 1 while it runs, 0 otherwise. (Continues at $8000.)","t":"code","b":[173,22,178],"m":"lda","o":"warp_direction","oa":45590,"x":[32306]},{"a":32749,"t":"code","b":[208,6],"m":"bne","o":"b_7FF5","oa":32757},{"a":32751,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32753,"t":"code","b":[141,223,231],"m":"sta","o":"vic_shadow_priority","oa":59359},{"a":32756,"t":"code","b":[96],"m":"rts"},{"a":32757,"l":"b_7FF5","t":"code","b":[238,21,178],"m":"inc","o":"warp_divider","oa":45589,"x":[32749]},{"a":32760,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":32762,"t":"code","b":[240,26],"m":"beq","o":"b_8016","oa":32790},{"a":32764,"t":"code","b":[173,21,178],"m":"lda","o":"warp_divider","oa":45589},{"a":32767,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":32768,"t":"note","l":"materialise_step_tail","c":"Tail of the routine at $7FEA (the Wizball's appear and vanish animation, called every frame from $7E32), cut here by the $8000 edge; this label sits on the operand of CMP #$03 at $7FFF. The animation steps every third frame ($B215 counts to 3). Appearing ($B216 = 1, set by $8040 and $6539): $B214 counts down from 23, and when it passes 0 $B216 and $B21A are cleared. Vanishing ($B216 = 2, set at $6476): $B214 counts up, and at 23 $B216 is cleared. Otherwise the frame $B21A = $B214 + 16 (sprite shapes $20-$37 through $8097) and sprite 0 goes behind the scenery ($E7DF = 1, the shadow of $D01B).","note":"inside the item at $7FFF"},{"a":32769,"t":"code","b":[208,46],"m":"bne","o":"b_8031","oa":32817},{"a":32771,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32773,"t":"code","b":[141,21,178],"m":"sta","o":"warp_divider","oa":45589},{"a":32776,"t":"code","b":[206,20,178],"m":"dec","o":"warp_frame","oa":45588},{"a":32779,"t":"code","b":[16,36],"m":"bpl","o":"b_8031","oa":32817},{"a":32781,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32783,"t":"code","b":[141,22,178],"m":"sta","o":"warp_direction","oa":45590},{"a":32786,"t":"code","b":[141,26,178],"m":"sta","o":"spin_frame","oa":45594},{"a":32789,"t":"code","b":[96],"m":"rts"},{"a":32790,"l":"b_8016","t":"code","b":[173,21,178],"m":"lda","o":"warp_divider","oa":45589,"x":[32762]},{"a":32793,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":32795,"t":"code","b":[208,20],"m":"bne","o":"b_8031","oa":32817},{"a":32797,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32799,"t":"code","b":[141,21,178],"m":"sta","o":"warp_divider","oa":45589},{"a":32802,"t":"code","b":[238,20,178],"m":"inc","o":"warp_frame","oa":45588},{"a":32805,"t":"code","b":[173,20,178],"m":"lda","o":"warp_frame","oa":45588},{"a":32808,"t":"code","b":[201,23],"m":"cmp","o":"#$17"},{"a":32810,"t":"code","b":[208,5],"m":"bne","o":"b_8031","oa":32817},{"a":32812,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32814,"t":"code","b":[141,22,178],"m":"sta","o":"warp_direction","oa":45590},{"a":32817,"l":"b_8031","t":"code","b":[173,20,178],"m":"lda","o":"warp_frame","oa":45588,"x":[32769,32779,32795,32810]},{"a":32820,"t":"code","b":[24],"m":"clc"},{"a":32821,"t":"code","b":[105,16],"m":"adc","o":"#$10"},{"a":32823,"t":"code","b":[141,26,178],"m":"sta","o":"spin_frame","oa":45594},{"a":32826,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":32828,"t":"code","b":[141,223,231],"m":"sta","o":"vic_shadow_priority","oa":59359},{"a":32831,"t":"code","b":[96],"m":"rts"},{"a":32832,"l":"init_wizball","c":"Resets the Wizball before the frame loop (JSR at $63FE in the play routine): starts the appear animation ($B216 = 1, $B214 = 23), puts it on the ground at Y $C8 ($B20F, fraction $B210 = 0) with a bounce speed of 3 + $F0/256 pixels a frame ($B211/$B212), makes sprites 0 and 1 multicolour ($B1B2 = 3), and clears $A1B7, $A1B8, the mutant-cat flag $861A, $A133, $A9A7, freaky bits $8959, $AB9B, $B1CF, the Wizball-hit flag $7F0A and the cat's lost lives $B26C. Puts five random multiples of 8 ($7533 AND #$F8) in $A76D-$A771 (read at $A7C2 and $A7CF; purpose unknown). With anti-grav owned ($B232, re-granted as a permanent weapon by $6E4F just before) the Wizball starts at Y $49, the top limit, instead.","t":"code","b":[169,1],"m":"lda","o":"#$01","x":[25598]},{"a":32834,"t":"code","b":[141,22,178],"m":"sta","o":"warp_direction","oa":45590},{"a":32837,"t":"code","b":[169,23],"m":"lda","o":"#$17"},{"a":32839,"t":"code","b":[141,20,178],"m":"sta","o":"warp_frame","oa":45588},{"a":32842,"t":"code","b":[169,200],"m":"lda","o":"#$C8"},{"a":32844,"t":"code","b":[141,15,178],"m":"sta","o":"wizball_y","oa":45583},{"a":32847,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":32849,"t":"code","b":[141,16,178],"m":"sta","o":"wizball_y_fraction","oa":45584},{"a":32852,"t":"code","b":[141,183,161],"m":"sta","o":"no_kill_frames","oa":41399},{"a":32855,"t":"code","b":[141,184,161],"m":"sta","o":"no_kill_seconds","oa":41400},{"a":32858,"t":"code","b":[141,26,134],"m":"sta","o":"mutant_cat","oa":34330},{"a":32861,"t":"code","b":[141,51,161],"m":"sta","o":"police_queue","oa":41267},{"a":32864,"t":"code","b":[141,167,169],"m":"sta","o":"police_present","oa":43431},{"a":32867,"t":"code","b":[141,89,137],"m":"sta","o":"freaky_bits","oa":35161},{"a":32870,"t":"code","b":[141,155,171],"m":"sta","o":"lab_column_mode","oa":43931},{"a":32873,"t":"code","b":[141,207,177],"m":"sta","o":"life_over","oa":45519},{"a":32876,"t":"code","b":[141,10,127],"m":"sta","o":"wizball_hit","oa":32522},{"a":32879,"t":"code","b":[141,108,178],"m":"sta","o":"cat_hits","oa":45676},{"a":32882,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":32884,"t":"code","b":[141,17,178],"m":"sta","o":"wizball_vspeed","oa":45585},{"a":32887,"t":"code","b":[141,178,177],"m":"sta","o":"landscape_sprite_multicolour","oa":45490},{"a":32890,"t":"code","b":[169,240],"m":"lda","o":"#$F0"},{"a":32892,"t":"code","b":[141,18,178],"m":"sta","o":"wizball_vspeed_fraction","oa":45586},{"a":32895,"t":"code","b":[162,5],"m":"ldx","o":"#$05"},{"a":32897,"l":"b_8081","t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003,"x":[32906]},{"a":32900,"t":"code","b":[41,248],"m":"and","o":"#$F8"},{"a":32902,"t":"code","b":[157,108,167],"m":"sta","o":"tbl_special_droplet_threshold,x","oa":42860},{"a":32905,"t":"code","b":[202],"m":"dex"},{"a":32906,"t":"code","b":[208,245],"m":"bne","o":"b_8081","oa":32897},{"a":32908,"t":"code","b":[173,50,178],"m":"lda","o":"weapon_antigrav","oa":45618},{"a":32911,"t":"code","b":[240,5],"m":"beq","o":"r_8096","oa":32918},{"a":32913,"t":"code","b":[169,73],"m":"lda","o":"#$49"},{"a":32915,"t":"code","b":[141,15,178],"m":"sta","o":"wizball_y","oa":45583},{"a":32918,"l":"r_8096","t":"code","b":[96],"m":"rts","x":[32911]},{"a":32919,"l":"place_wizball_sprite","c":"Every frame from $7E35, and from $8236 while sinking into a tube: keeps the Wizball's Y $B20F within $49-$C8, setting the anti-grav vertical speed $B218 to +1 at the top limit and -1 at the bottom; copies X ($B20D, bit 8 in $B20E) and Y into the VIC register shadow for sprite 0 ($E7C4, bit 0 of $E7D4, $E7C5); sets sprite 0's colour to green (5 in $E7EB) and its shape to $B21A + $10 in $B525 (rotation frames $10-$1F, appear frames $20-$37, $B4 in a tube); writes 1 to $E7E0, the shadow's $D01C slot, which no traced code reads (band $8A52 takes $D01C from $B1B2). While the Wiz's shield runs ($7F06) the colour is black whenever bit 1 of the counter $7F08 is set, so the ball blinks. LDA #$F3 / TAY at $80CD is dead: Y is not used.","t":"code","b":[173,15,178],"m":"lda","o":"wizball_y","oa":45583,"x":[32309,33334]},{"a":32922,"t":"code","b":[201,73],"m":"cmp","o":"#$49"},{"a":32924,"t":"code","b":[176,10],"m":"bcs","o":"b_80A8","oa":32936},{"a":32926,"t":"code","b":[169,73],"m":"lda","o":"#$49"},{"a":32928,"t":"code","b":[141,15,178],"m":"sta","o":"wizball_y","oa":45583},{"a":32931,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":32933,"t":"code","b":[141,24,178],"m":"sta","o":"antigrav_vspeed","oa":45592},{"a":32936,"l":"b_80A8","t":"code","b":[201,200],"m":"cmp","o":"#$C8","x":[32924]},{"a":32938,"t":"code","b":[144,10],"m":"bcc","o":"b_80B6","oa":32950},{"a":32940,"t":"code","b":[169,200],"m":"lda","o":"#$C8"},{"a":32942,"t":"code","b":[141,15,178],"m":"sta","o":"wizball_y","oa":45583},{"a":32945,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":32947,"t":"code","b":[141,24,178],"m":"sta","o":"antigrav_vspeed","oa":45592},{"a":32950,"l":"b_80B6","t":"code","b":[173,13,178],"m":"lda","o":"wizball_x","oa":45581,"x":[32938]},{"a":32953,"t":"code","b":[141,196,231],"m":"sta","o":"vic_shadow_spr0_x","oa":59332},{"a":32956,"t":"code","b":[173,212,231],"m":"lda","o":"vic_shadow_x_msb","oa":59348},{"a":32959,"t":"code","b":[41,254],"m":"and","o":"#$FE"},{"a":32961,"t":"code","b":[13,14,178],"m":"ora","o":"wizball_x_high","oa":45582},{"a":32964,"t":"code","b":[141,212,231],"m":"sta","o":"vic_shadow_x_msb","oa":59348},{"a":32967,"t":"code","b":[173,15,178],"m":"lda","o":"wizball_y","oa":45583},{"a":32970,"t":"code","b":[141,197,231],"m":"sta","o":"vic_shadow_spr0_y","oa":59333},{"a":32973,"s":"dead: Y is not used afterwards","t":"code","b":[169,243],"m":"lda","o":"#$F3"},{"a":32975,"t":"code","b":[168],"m":"tay"},{"a":32976,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":32978,"t":"code","b":[141,235,231],"m":"sta","o":"vic_shadow_spr0_colour","oa":59371},{"a":32981,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":32983,"t":"code","b":[141,224,231],"m":"sta","o":"vic_shadow_multicolour","oa":59360},{"a":32986,"t":"code","b":[173,26,178],"m":"lda","o":"spin_frame","oa":45594},{"a":32989,"t":"code","b":[24],"m":"clc"},{"a":32990,"t":"code","b":[105,16],"m":"adc","o":"#$10"},{"a":32992,"t":"code","b":[141,37,181],"m":"sta","o":"wizball_image","oa":46373},{"a":32995,"t":"code","b":[173,6,127],"m":"lda","o":"shield_time","oa":32518},{"a":32998,"t":"code","b":[240,15],"m":"beq","o":"r_80F7","oa":33015},{"a":33000,"t":"code","b":[238,8,127],"m":"inc","o":"shield_flicker","oa":32520},{"a":33003,"t":"code","b":[173,8,127],"m":"lda","o":"shield_flicker","oa":32520},{"a":33006,"t":"code","b":[41,2],"m":"and","o":"#$02"},{"a":33008,"t":"code","b":[240,5],"m":"beq","o":"r_80F7","oa":33015},{"a":33010,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":33012,"t":"code","b":[141,235,231],"m":"sta","o":"vic_shadow_spr0_colour","oa":59371},{"a":33015,"l":"r_80F7","t":"code","b":[96],"m":"rts","x":[32998,33008]},{"a":33016,"l":"read_spin_control","c":"Spin control, every frame from $7E2F, from the Wiz's joystick bits in $B23F (0 = pressed). Left (bit 2) lowers the spin $B21C by 6 to at most -48 ($D0); right (bit 3) raises it by 6 to at most +48. With neither pressed the spin decays by 1 a frame toward 0, but only when thrust $B231 and anti-grav $B232 are both owned or $AC4E is set; otherwise the ball keeps spinning. A non-zero spin is copied to $B21D, whose sign gives the direction of the Wiz's shots ($84AF) and the side the cat trails on ($8717). The angle $B21A.$B21B then advances by twice the spin (signed), and $B21A is kept to 0-15, the rotation frame.","t":"code","b":[173,63,178],"m":"lda","o":"wizball_input","oa":45631,"x":[32303]},{"a":33019,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":33021,"t":"code","b":[41,12],"m":"and","o":"#$0C"},{"a":33023,"t":"code","b":[201,12],"m":"cmp","o":"#$0C"},{"a":33025,"t":"code","b":[240,53],"m":"beq","o":"b_8138","oa":33080},{"a":33027,"t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102},{"a":33029,"t":"code","b":[41,4],"m":"and","o":"#$04"},{"a":33031,"t":"code","b":[208,19],"m":"bne","o":"b_811C","oa":33052},{"a":33033,"t":"code","b":[173,28,178],"m":"lda","o":"spin","oa":45596},{"a":33036,"t":"code","b":[201,208],"m":"cmp","o":"#$D0"},{"a":33038,"t":"code","b":[240,12],"m":"beq","o":"b_811C","oa":33052},{"a":33040,"t":"code","b":[56],"m":"sec"},{"a":33041,"t":"code","b":[233,6],"m":"sbc","o":"#$06"},{"a":33043,"t":"code","b":[201,208],"m":"cmp","o":"#$D0"},{"a":33045,"t":"code","b":[16,2],"m":"bpl","o":"b_8119","oa":33049},{"a":33047,"t":"code","b":[169,208],"m":"lda","o":"#$D0"},{"a":33049,"l":"b_8119","t":"code","b":[141,28,178],"m":"sta","o":"spin","oa":45596,"x":[33045]},{"a":33052,"l":"b_811C","t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102,"x":[33031,33038]},{"a":33054,"t":"code","b":[41,8],"m":"and","o":"#$08"},{"a":33056,"t":"code","b":[208,51],"m":"bne","o":"b_8155","oa":33109},{"a":33058,"t":"code","b":[173,28,178],"m":"lda","o":"spin","oa":45596},{"a":33061,"t":"code","b":[201,48],"m":"cmp","o":"#$30"},{"a":33063,"t":"code","b":[240,44],"m":"beq","o":"b_8155","oa":33109},{"a":33065,"t":"code","b":[24],"m":"clc"},{"a":33066,"t":"code","b":[105,6],"m":"adc","o":"#$06"},{"a":33068,"t":"code","b":[201,48],"m":"cmp","o":"#$30"},{"a":33070,"t":"code","b":[48,2],"m":"bmi","o":"b_8132","oa":33074},{"a":33072,"t":"code","b":[169,48],"m":"lda","o":"#$30"},{"a":33074,"l":"b_8132","t":"code","b":[141,28,178],"m":"sta","o":"spin","oa":45596,"x":[33070]},{"a":33077,"t":"code","b":[76,85,129],"m":"jmp","o":"b_8155","oa":33109},{"a":33080,"l":"b_8138","t":"code","b":[173,49,178],"m":"lda","o":"weapon_thrust","oa":45617,"x":[33025]},{"a":33083,"t":"code","b":[45,50,178],"m":"and","o":"weapon_antigrav","oa":45618},{"a":33086,"t":"code","b":[13,78,172],"m":"ora","o":"in_lab","oa":44110},{"a":33089,"t":"code","b":[240,18],"m":"beq","o":"b_8155","oa":33109},{"a":33091,"t":"code","b":[173,28,178],"m":"lda","o":"spin","oa":45596},{"a":33094,"t":"code","b":[240,13],"m":"beq","o":"b_8155","oa":33109},{"a":33096,"t":"code","b":[206,28,178],"m":"dec","o":"spin","oa":45596},{"a":33099,"t":"code","b":[201,0],"m":"cmp","o":"#$00"},{"a":33101,"t":"code","b":[16,6],"m":"bpl","o":"b_8155","oa":33109},{"a":33103,"t":"code","b":[238,28,178],"m":"inc","o":"spin","oa":45596},{"a":33106,"t":"code","b":[238,28,178],"m":"inc","o":"spin","oa":45596},{"a":33109,"l":"b_8155","t":"code","b":[173,28,178],"m":"lda","o":"spin","oa":45596,"x":[33056,33063,33077,33089,33094,33101]},{"a":33112,"t":"code","b":[240,3],"m":"beq","o":"b_815D","oa":33117},{"a":33114,"t":"code","b":[141,29,178],"m":"sta","o":"spin_last","oa":45597},{"a":33117,"l":"b_815D","t":"code","b":[162,2],"m":"ldx","o":"#$02","x":[33112]},{"a":33119,"l":"b_815F","t":"code","b":[173,28,178],"m":"lda","o":"spin","oa":45596,"x":[33155]},{"a":33122,"t":"code","b":[48,15],"m":"bmi","o":"b_8173","oa":33139},{"a":33124,"t":"code","b":[24],"m":"clc"},{"a":33125,"t":"code","b":[109,27,178],"m":"adc","o":"spin_fraction","oa":45595},{"a":33128,"t":"code","b":[141,27,178],"m":"sta","o":"spin_fraction","oa":45595},{"a":33131,"t":"code","b":[144,21],"m":"bcc","o":"b_8182","oa":33154},{"a":33133,"t":"code","b":[238,26,178],"m":"inc","o":"spin_frame","oa":45594},{"a":33136,"t":"code","b":[76,130,129],"m":"jmp","o":"b_8182","oa":33154},{"a":33139,"l":"b_8173","t":"code","b":[173,27,178],"m":"lda","o":"spin_fraction","oa":45595,"x":[33122]},{"a":33142,"t":"code","b":[24],"m":"clc"},{"a":33143,"t":"code","b":[109,28,178],"m":"adc","o":"spin","oa":45596},{"a":33146,"t":"code","b":[141,27,178],"m":"sta","o":"spin_fraction","oa":45595},{"a":33149,"t":"code","b":[176,3],"m":"bcs","o":"b_8182","oa":33154},{"a":33151,"t":"code","b":[206,26,178],"m":"dec","o":"spin_frame","oa":45594},{"a":33154,"l":"b_8182","t":"code","b":[202],"m":"dex","x":[33131,33136,33149]},{"a":33155,"t":"code","b":[208,218],"m":"bne","o":"b_815F","oa":33119},{"a":33157,"t":"code","b":[173,26,178],"m":"lda","o":"spin_frame","oa":45594},{"a":33160,"t":"code","b":[41,15],"m":"and","o":"#$0F"},{"a":33162,"t":"code","b":[141,26,178],"m":"sta","o":"spin_frame","oa":45594},{"a":33165,"t":"code","b":[96],"m":"rts"},{"a":33166,"l":"spin_to_roll_speed","c":"Turns the spin $B21C into the horizontal speed $B1F4 (read at $74A7 and $7BCB): 0 when |spin| < 4, else ((|spin| - 4) >> 3) + 1 with the spin's sign, so -6 to +6. Does nothing while sinking into a tube ($B213). Called when the ball bounces on the ground ($7F95), after a bounce off scenery ($83E4), and every frame only with thrust $B231 or $AC4E ($7E54): without thrust the horizontal speed changes only when the ball touches something.","t":"code","b":[173,19,178],"m":"lda","o":"tube_timer","oa":45587,"x":[32340,32661,33764]},{"a":33169,"t":"code","b":[240,1],"m":"beq","o":"b_8194","oa":33172},{"a":33171,"t":"code","b":[96],"m":"rts"},{"a":33172,"l":"b_8194","t":"code","b":[173,28,178],"m":"lda","o":"spin","oa":45596,"x":[33169]},{"a":33175,"t":"code","b":[48,15],"m":"bmi","o":"b_81A8","oa":33192},{"a":33177,"t":"code","b":[56],"m":"sec"},{"a":33178,"t":"code","b":[233,4],"m":"sbc","o":"#$04"},{"a":33180,"t":"code","b":[144,37],"m":"bcc","o":"b_81C3","oa":33219},{"a":33182,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":33183,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":33184,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":33185,"t":"code","b":[141,244,177],"m":"sta","o":"wizball_speed","oa":45556},{"a":33188,"t":"code","b":[238,244,177],"m":"inc","o":"wizball_speed","oa":45556},{"a":33191,"t":"code","b":[96],"m":"rts"},{"a":33192,"l":"b_81A8","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[33175]},{"a":33194,"t":"code","b":[56],"m":"sec"},{"a":33195,"t":"code","b":[237,28,178],"m":"sbc","o":"spin","oa":45596},{"a":33198,"t":"code","b":[56],"m":"sec"},{"a":33199,"t":"code","b":[233,4],"m":"sbc","o":"#$04"},{"a":33201,"t":"code","b":[144,16],"m":"bcc","o":"b_81C3","oa":33219},{"a":33203,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":33204,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":33205,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":33206,"t":"code","b":[133,95],"m":"sta","o":"zp_temp_5f","oa":95},{"a":33208,"t":"code","b":[230,95],"m":"inc","o":"zp_temp_5f","oa":95},{"a":33210,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":33212,"t":"code","b":[56],"m":"sec"},{"a":33213,"t":"code","b":[229,95],"m":"sbc","o":"zp_temp_5f","oa":95},{"a":33215,"t":"code","b":[141,244,177],"m":"sta","o":"wizball_speed","oa":45556},{"a":33218,"t":"code","b":[96],"m":"rts"},{"a":33219,"l":"b_81C3","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[33180,33201]},{"a":33221,"t":"code","b":[141,244,177],"m":"sta","o":"wizball_speed","oa":45556},{"a":33224,"t":"code","b":[96],"m":"rts"},{"a":33225,"l":"enter_tube","c":"Enters a tube, jumped to from $83A6 with A holding the character found beside the tube mouth: $BE (the up arrow) raises the level $B128 by one unless it already equals $B1CE; anything else lowers it by one. Clears $A1B7/$A1B8, copies the Wizball's current frame (64 bytes from $C400 + 64 x $B21A) into sprite block $B4 ($ED00), sets the sinking counter $B213 to 21, stops rolling and spinning ($B1F4, $B1FF and $B21C = 0) and starts sound effect 3 through $4553.","t":"code","b":[201,190],"m":"cmp","o":"#$BE","x":[33702]},{"a":33227,"t":"code","b":[208,14],"m":"bne","o":"b_81DB","oa":33243},{"a":33229,"t":"code","b":[174,40,177],"m":"ldx","o":"current_level","oa":45352},{"a":33232,"t":"code","b":[238,40,177],"m":"inc","o":"current_level","oa":45352},{"a":33235,"t":"code","b":[236,206,177],"m":"cpx","o":"max_level","oa":45518},{"a":33238,"t":"code","b":[240,3],"m":"beq","o":"b_81DB","oa":33243},{"a":33240,"t":"code","b":[238,40,177],"m":"inc","o":"current_level","oa":45352},{"a":33243,"l":"b_81DB","t":"code","b":[206,40,177],"m":"dec","o":"current_level","oa":45352,"x":[33227,33238]},{"a":33246,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":33248,"t":"code","b":[141,183,161],"m":"sta","o":"no_kill_frames","oa":41399},{"a":33251,"t":"code","b":[141,184,161],"m":"sta","o":"no_kill_seconds","oa":41400},{"a":33254,"t":"code","b":[168],"m":"tay"},{"a":33255,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":33257,"t":"code","b":[173,26,178],"m":"lda","o":"spin_frame","oa":45594},{"a":33260,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":33261,"t":"code","b":[102,98],"m":"ror","o":"zp_ptr_62","oa":98},{"a":33263,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":33264,"t":"code","b":[102,98],"m":"ror","o":"zp_ptr_62","oa":98},{"a":33266,"t":"code","b":[24],"m":"clc"},{"a":33267,"t":"code","b":[105,196],"m":"adc","o":"#$C4"},{"a":33269,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":33271,"l":"b_81F7","t":"code","b":[177,98],"m":"lda","o":"(zp_ptr_62),y","oa":98,"x":[33279]},{"a":33273,"t":"code","b":[153,0,237],"m":"sta","o":"sprite_b4,y","oa":60672},{"a":33276,"t":"code","b":[200],"m":"iny"},{"a":33277,"t":"code","b":[192,64],"m":"cpy","o":"#$40"},{"a":33279,"t":"code","b":[208,246],"m":"bne","o":"b_81F7","oa":33271},{"a":33281,"t":"code","b":[169,21],"m":"lda","o":"#$15"},{"a":33283,"t":"code","b":[141,19,178],"m":"sta","o":"tube_timer","oa":45587},{"a":33286,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":33288,"t":"code","b":[141,244,177],"m":"sta","o":"wizball_speed","oa":45556},{"a":33291,"t":"code","b":[141,255,177],"m":"sta","o":"scroll_step","oa":45567},{"a":33294,"t":"code","b":[141,28,178],"m":"sta","o":"spin","oa":45596},{"a":33297,"t":"code","b":[160,3],"m":"ldy","o":"#$03"},{"a":33299,"t":"code","b":[76,83,69],"m":"jmp","o":"start_sound_effect","oa":17747},{"a":33302,"l":"sink_into_tube","c":"One frame of sinking into a tube, run instead of the Wizball's movement while $B213 is non-zero (JMP from $7E26): moves the copied image in sprite block $B4 ($ED00) down one pixel row and clears its top row, sets $B21A = $A4 so that $8097 shows shape $B4, and jumps to $8097; band $8B22 meanwhile puts sprite 0 behind the scenery below the tube mouth. When $B213 reaches 0, after 21 frames, it goes on to $8239.","t":"code","b":[160,62],"m":"ldy","o":"#$3E","x":[32294]},{"a":33304,"l":"b_8218","t":"code","b":[185,253,236],"m":"lda","o":"sprite_b4_minus_3,y","oa":60669,"x":[33311]},{"a":33307,"t":"code","b":[153,0,237],"m":"sta","o":"sprite_b4,y","oa":60672},{"a":33310,"t":"code","b":[136],"m":"dey"},{"a":33311,"t":"code","b":[208,247],"m":"bne","o":"b_8218","oa":33304},{"a":33313,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":33315,"t":"code","b":[141,0,237],"m":"sta","o":"sprite_b4","oa":60672},{"a":33318,"t":"code","b":[141,1,237],"m":"sta","o":"sprite_b4_b1","oa":60673},{"a":33321,"t":"code","b":[141,2,237],"m":"sta","o":"wave_script_copy","oa":60674},{"a":33324,"t":"code","b":[206,19,178],"m":"dec","o":"tube_timer","oa":45587},{"a":33327,"t":"code","b":[240,8],"m":"beq","o":"arrive_from_tube","oa":33337},{"a":33329,"t":"code","b":[169,164],"m":"lda","o":"#$A4"},{"a":33331,"t":"code","b":[141,26,178],"m":"sta","o":"spin_frame","oa":45594},{"a":33334,"t":"code","b":[76,151,128],"m":"jmp","o":"place_wizball_sprite","oa":32919},{"a":33337,"l":"arrive_from_tube","c":"Arrives on a level out of a tube: after sinking ($822F), and called from $AE09 and $AF18. Puts the Wizball at X $AC, Y $4C with no speed ($B211, $B212, $B218, $B1F9 = 0), the cat at $B261 = 0, $B262 = $3C, $B1FC = $B1F2 AND 7, hides all sprites ($E7D9 = 0) and calls $A1C9, $75E0, $9ECF, $8C50 (screen on) and $9CCB, apparently to set up the new level. Then the tube animation, one step a frame ($6E92): sprites 1 and 2 (cyan, double height, X $D0 and $E8, Y $46, shapes $B5 and $B7 cleared by $8F15) lower the images of sprite blocks $3A/$3B (the tube's end, going by the shapes) one row a frame for 21 frames ($830A); the Wizball, drawn as sprite 3 (shape $10, green), rolls left one pixel a frame from X $D0 to $AC; the images drop 5 rows more, then rise out of the sprites in 21 frames ($8334). Ends with sprites 0 and 1 on ($E7D9 = 3), $B21A = 0 and a jump to the Wizball update at $7DF4.","t":"code","b":[169,76],"m":"lda","o":"#$4C","x":[33327,44553,44824]},{"a":33339,"t":"code","b":[141,15,178],"m":"sta","o":"wizball_y","oa":45583},{"a":33342,"t":"code","b":[169,172],"m":"lda","o":"#$AC"},{"a":33344,"t":"code","b":[141,13,178],"m":"sta","o":"wizball_x","oa":45581},{"a":33347,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":33349,"t":"code","b":[141,249,177],"m":"sta","o":"wizball_screen_offset","oa":45561},{"a":33352,"t":"code","b":[141,17,178],"m":"sta","o":"wizball_vspeed","oa":45585},{"a":33355,"t":"code","b":[141,18,178],"m":"sta","o":"wizball_vspeed_fraction","oa":45586},{"a":33358,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":33361,"t":"code","b":[141,24,178],"m":"sta","o":"antigrav_vspeed","oa":45592},{"a":33364,"t":"code","b":[141,97,178],"m":"sta","o":"cat_x","oa":45665},{"a":33367,"t":"code","b":[169,60],"m":"lda","o":"#$3C"},{"a":33369,"t":"code","b":[141,98,178],"m":"sta","o":"cat_y","oa":45666},{"a":33372,"t":"code","b":[173,242,177],"m":"lda","o":"scroll_fine","oa":45554},{"a":33375,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":33377,"t":"code","b":[141,252,177],"m":"sta","o":"scroll_fine_bits","oa":45564},{"a":33380,"t":"code","b":[32,201,161],"m":"jsr","o":"clear_aliens","oa":41417},{"a":33383,"t":"code","b":[32,224,117],"m":"jsr","o":"start_landscape","oa":30176},{"a":33386,"t":"code","b":[32,207,158],"m":"jsr","o":"count_landscape_aliens","oa":40655},{"a":33389,"t":"code","b":[32,80,140],"m":"jsr","o":"screen_on","oa":35920},{"a":33392,"t":"code","b":[32,203,156],"m":"jsr","o":"clear_alien_bullets","oa":40139},{"a":33395,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":33397,"t":"code","b":[141,167,169],"m":"sta","o":"police_present","oa":43431},{"a":33400,"t":"code","b":[141,174,177],"m":"sta","o":"alien_spawn_cursor","oa":45486},{"a":33403,"t":"code","b":[141,212,231],"m":"sta","o":"vic_shadow_x_msb","oa":59348},{"a":33406,"t":"code","b":[169,208],"m":"lda","o":"#$D0"},{"a":33408,"t":"code","b":[141,198,231],"m":"sta","o":"vic_shadow_spr1_x","oa":59334},{"a":33411,"t":"code","b":[169,232],"m":"lda","o":"#$E8"},{"a":33413,"t":"code","b":[141,200,231],"m":"sta","o":"vic_shadow_spr2_x","oa":59336},{"a":33416,"t":"code","b":[169,70],"m":"lda","o":"#$46"},{"a":33418,"t":"code","b":[141,199,231],"m":"sta","o":"vic_shadow_spr1_y","oa":59335},{"a":33421,"t":"code","b":[141,201,231],"m":"sta","o":"vic_shadow_spr2_y","oa":59337},{"a":33424,"t":"code","b":[160,180],"m":"ldy","o":"#$B4"},{"a":33426,"t":"code","b":[162,4],"m":"ldx","o":"#$04"},{"a":33428,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":33430,"t":"code","b":[32,21,143],"m":"jsr","o":"fill_sprite_blocks","oa":36629},{"a":33433,"t":"code","b":[169,181],"m":"lda","o":"#$B5"},{"a":33435,"t":"code","b":[141,38,181],"m":"sta","o":"cat_image","oa":46374},{"a":33438,"t":"code","b":[169,183],"m":"lda","o":"#$B7"},{"a":33440,"t":"code","b":[141,39,181],"m":"sta","o":"sprite2_image","oa":46375},{"a":33443,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":33445,"t":"code","b":[141,236,231],"m":"sta","o":"vic_shadow_spr1_colour","oa":59372},{"a":33448,"t":"code","b":[141,237,231],"m":"sta","o":"vic_shadow_spr2_colour","oa":59373},{"a":33451,"t":"code","b":[169,6],"m":"lda","o":"#$06"},{"a":33453,"t":"code","b":[141,219,231],"m":"sta","o":"vic_shadow_y_expand","oa":59355},{"a":33456,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":33459,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":33461,"t":"code","b":[141,2,187],"m":"sta","o":"sfx_requested","oa":47874},{"a":33464,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":33466,"t":"code","b":[141,178,177],"m":"sta","o":"landscape_sprite_multicolour","oa":45490},{"a":33469,"t":"code","b":[169,21],"m":"lda","o":"#$15"},{"a":33471,"t":"code","b":[32,10,131],"m":"jsr","o":"lower_tube_sprites","oa":33546},{"a":33474,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":33476,"t":"code","b":[32,52,131],"m":"jsr","o":"raise_tube_sprites","oa":33588},{"a":33479,"t":"code","b":[169,208],"m":"lda","o":"#$D0"},{"a":33481,"t":"code","b":[141,202,231],"m":"sta","o":"vic_shadow_spr3_x","oa":59338},{"a":33484,"t":"code","b":[173,15,178],"m":"lda","o":"wizball_y","oa":45583},{"a":33487,"t":"code","b":[141,203,231],"m":"sta","o":"vic_shadow_spr3_y","oa":59339},{"a":33490,"t":"code","b":[169,16],"m":"lda","o":"#$10"},{"a":33492,"t":"code","b":[141,40,181],"m":"sta","o":"sprite3_image","oa":46376},{"a":33495,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":33497,"t":"code","b":[141,238,231],"m":"sta","o":"vic_shadow_spr3_colour","oa":59374},{"a":33500,"t":"code","b":[169,14],"m":"lda","o":"#$0E"},{"a":33502,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":33505,"l":"b_82E1","t":"code","b":[32,146,110],"m":"jsr","o":"wait_line_266_and_move_stars","oa":28306,"x":[33517]},{"a":33508,"t":"code","b":[206,202,231],"m":"dec","o":"vic_shadow_spr3_x","oa":59338},{"a":33511,"t":"code","b":[173,202,231],"m":"lda","o":"vic_shadow_spr3_x","oa":59338},{"a":33514,"t":"code","b":[205,13,178],"m":"cmp","o":"wizball_x","oa":45581},{"a":33517,"t":"code","b":[208,242],"m":"bne","o":"b_82E1","oa":33505},{"a":33519,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":33521,"t":"code","b":[32,10,131],"m":"jsr","o":"lower_tube_sprites","oa":33546},{"a":33524,"t":"code","b":[169,21],"m":"lda","o":"#$15"},{"a":33526,"t":"code","b":[32,52,131],"m":"jsr","o":"raise_tube_sprites","oa":33588},{"a":33529,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":33531,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":33534,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":33536,"t":"code","b":[141,219,231],"m":"sta","o":"vic_shadow_y_expand","oa":59355},{"a":33539,"t":"code","b":[141,26,178],"m":"sta","o":"spin_frame","oa":45594},{"a":33542,"t":"code","b":[76,244,125],"m":"jmp","o":"update_wizball","oa":32244},{"a":33545,"l":"leaving_flag_copy","c":"One byte: a copy of $B874 stored every frame by the frame loop ($6417), which leaves for $646F, the bonus stage's setup, when $B874 is non-zero; $67EE reads this copy to blank two colour cells of the current player's score line while it is set.","t":"byte","b":[0],"x":[25623,26606]},{"a":33546,"l":"lower_tube_sprites","c":"Tube animation, moving down, for A frames (21, then 5, from $8239; count in $65). Each frame waits for the raster ($6E92), adds 3 to $BB02 and copies 64 bytes from $CE7F to $ED00 + $BB02 and from $CEBF to $ED80 + $BB02, so the images of sprite blocks $3A and $3B slide one pixel row a frame down through sprite blocks $B4-$B5 and $B6-$B7, of which sprites 1 and 2 show $B5 and $B7.","t":"code","b":[133,101],"m":"sta","o":"zp_ptr_65","oa":101,"x":[33471,33521]},{"a":33548,"l":"b_830C","t":"code","b":[32,146,110],"m":"jsr","o":"wait_line_266_and_move_stars","oa":28306,"x":[33585]},{"a":33551,"t":"code","b":[238,2,187],"m":"inc","o":"sfx_requested","oa":47874},{"a":33554,"t":"code","b":[238,2,187],"m":"inc","o":"sfx_requested","oa":47874},{"a":33557,"t":"code","b":[238,2,187],"m":"inc","o":"sfx_requested","oa":47874},{"a":33560,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":33562,"t":"code","b":[172,2,187],"m":"ldy","o":"sfx_requested","oa":47874},{"a":33565,"l":"b_831D","t":"code","b":[189,127,206],"m":"lda","o":"pipe_left_minus_1,x","oa":52863,"x":[33581]},{"a":33568,"t":"code","b":[153,0,237],"m":"sta","o":"sprite_b4,y","oa":60672},{"a":33571,"t":"code","b":[189,191,206],"m":"lda","o":"pipe_right_minus_1,x","oa":52927},{"a":33574,"t":"code","b":[153,128,237],"m":"sta","o":"sprite_b6,y","oa":60800},{"a":33577,"t":"code","b":[200],"m":"iny"},{"a":33578,"t":"code","b":[232],"m":"inx"},{"a":33579,"t":"code","b":[224,64],"m":"cpx","o":"#$40"},{"a":33581,"t":"code","b":[208,238],"m":"bne","o":"b_831D","oa":33565},{"a":33583,"t":"code","b":[198,101],"m":"dec","o":"zp_ptr_65","oa":101},{"a":33585,"t":"code","b":[208,217],"m":"bne","o":"b_830C","oa":33548},{"a":33587,"t":"code","b":[96],"m":"rts"},{"a":33588,"l":"raise_tube_sprites","c":"Tube animation, moving up, for A frames (21 from $8239; count in $65). Each frame waits for the raster ($6E92), subtracts 3 from $BB02 and moves the contents of sprite blocks $B5 ($ED40) and $B7 ($EDC0) up one pixel row (copying from three bytes on), then clears their last row ($ED7C-$ED7E, $EDFC-$EDFE).","t":"code","b":[133,101],"m":"sta","o":"zp_ptr_65","oa":101,"x":[33476,33526]},{"a":33590,"l":"b_8336","t":"code","b":[32,146,110],"m":"jsr","o":"wait_line_266_and_move_stars","oa":28306,"x":[33643]},{"a":33593,"t":"code","b":[206,2,187],"m":"dec","o":"sfx_requested","oa":47874},{"a":33596,"t":"code","b":[206,2,187],"m":"dec","o":"sfx_requested","oa":47874},{"a":33599,"t":"code","b":[206,2,187],"m":"dec","o":"sfx_requested","oa":47874},{"a":33602,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":33604,"l":"b_8344","t":"code","b":[185,67,237],"m":"lda","o":"sprite_b5_row1,y","oa":60739,"x":[33619]},{"a":33607,"t":"code","b":[153,64,237],"m":"sta","o":"sprite_b5,y","oa":60736},{"a":33610,"t":"code","b":[185,195,237],"m":"lda","o":"sprite_b7_row1,y","oa":60867},{"a":33613,"t":"code","b":[153,192,237],"m":"sta","o":"sprite_b7,y","oa":60864},{"a":33616,"t":"code","b":[200],"m":"iny"},{"a":33617,"t":"code","b":[192,64],"m":"cpy","o":"#$40"},{"a":33619,"t":"code","b":[208,239],"m":"bne","o":"b_8344","oa":33604},{"a":33621,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":33623,"t":"code","b":[141,252,237],"m":"sta","o":"sprite_b7_last_row","oa":60924},{"a":33626,"t":"code","b":[141,124,237],"m":"sta","o":"sprite_b5_last_row","oa":60796},{"a":33629,"t":"code","b":[141,253,237],"m":"sta","o":"sprite_b7_last_row_b1","oa":60925},{"a":33632,"t":"code","b":[141,125,237],"m":"sta","o":"sprite_b5_last_row_b1","oa":60797},{"a":33635,"t":"code","b":[141,254,237],"m":"sta","o":"sprite_b7_last_row_b2","oa":60926},{"a":33638,"t":"code","b":[141,126,237],"m":"sta","o":"sprite_b5_last_row_b2","oa":60798},{"a":33641,"t":"code","b":[198,101],"m":"dec","o":"zp_ptr_65","oa":101},{"a":33643,"t":"code","b":[208,201],"m":"bne","o":"b_8336","oa":33590},{"a":33645,"l":"r_836D","t":"code","b":[96],"m":"rts","x":[33652]},{"a":33646,"l":"check_wizball_scenery","c":"The Wizball against the scenery, every frame from $7E3D unless it is appearing or vanishing ($B216); skipped while $B874 or $AC4E is set. $7C1D gives in $60/$61 the screen address of the character under the sprite's top-left corner, and the 3 x 3 characters from there are probed. If the bottom-middle one (offset $51) is a tube mouth ($C2, $C3, $C6 or $C7), the next three characters of that row are searched for the up arrow $BE and it jumps to $81C9. Otherwise the eight probes of $B3B6 (bottom, left, right, top, then the corners) are tried in turn; the first character of $98 or above (solid scenery) sets the freaky-bits flash $895A = 3 and selects a pair of bounce handlers from $B3BE (4 bytes a probe), whose addresses are written into the JSRs at $83D0 and $83E1 and called; then it jumps to $818E.","t":"code","b":[173,116,184],"m":"lda","o":"bonus_stage","oa":47220,"x":[32317]},{"a":33649,"t":"code","b":[13,78,172],"m":"ora","o":"in_lab","oa":44110},{"a":33652,"t":"code","b":[208,247],"m":"bne","o":"r_836D","oa":33645},{"a":33654,"t":"code","b":[173,14,178],"m":"lda","o":"wizball_x_high","oa":45582},{"a":33657,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":33658,"t":"code","b":[173,13,178],"m":"lda","o":"wizball_x","oa":45581},{"a":33661,"t":"code","b":[106],"m":"ror","o":"a"},{"a":33662,"t":"code","b":[170],"m":"tax"},{"a":33663,"t":"code","b":[172,15,178],"m":"ldy","o":"wizball_y","oa":45583},{"a":33666,"t":"code","b":[32,29,124],"m":"jsr","o":"screen_address_at","oa":31773},{"a":33669,"t":"code","b":[160,81],"m":"ldy","o":"#$51"},{"a":33671,"t":"code","b":[177,96],"m":"lda","o":"(zp_ptr_60),y","oa":96},{"a":33673,"t":"code","b":[201,194],"m":"cmp","o":"#$C2"},{"a":33675,"t":"code","b":[48,28],"m":"bmi","o":"b_83A9","oa":33705},{"a":33677,"t":"code","b":[201,196],"m":"cmp","o":"#$C4"},{"a":33679,"t":"code","b":[48,8],"m":"bmi","o":"b_8399","oa":33689},{"a":33681,"t":"code","b":[201,198],"m":"cmp","o":"#$C6"},{"a":33683,"t":"code","b":[240,4],"m":"beq","o":"b_8399","oa":33689},{"a":33685,"t":"code","b":[201,199],"m":"cmp","o":"#$C7"},{"a":33687,"t":"code","b":[208,16],"m":"bne","o":"b_83A9","oa":33705},{"a":33689,"l":"b_8399","t":"code","b":[200],"m":"iny","x":[33679,33683]},{"a":33690,"t":"code","b":[162,3],"m":"ldx","o":"#$03"},{"a":33692,"l":"b_839C","t":"code","b":[177,96],"m":"lda","o":"(zp_ptr_60),y","oa":96,"x":[33700]},{"a":33694,"t":"code","b":[201,190],"m":"cmp","o":"#$BE"},{"a":33696,"t":"code","b":[240,4],"m":"beq","o":"b_83A6","oa":33702},{"a":33698,"t":"code","b":[200],"m":"iny"},{"a":33699,"t":"code","b":[202],"m":"dex"},{"a":33700,"t":"code","b":[208,246],"m":"bne","o":"b_839C","oa":33692},{"a":33702,"l":"b_83A6","t":"code","b":[76,201,129],"m":"jmp","o":"enter_tube","oa":33225,"x":[33696]},{"a":33705,"l":"b_83A9","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[33675,33687]},{"a":33707,"l":"b_83AB","t":"code","b":[188,182,179],"m":"ldy","o":"tbl_probe_cells,x","oa":46006,"x":[33719]},{"a":33710,"t":"code","b":[177,96],"m":"lda","o":"(zp_ptr_60),y","oa":96},{"a":33712,"t":"code","b":[201,152],"m":"cmp","o":"#$98"},{"a":33714,"t":"code","b":[176,6],"m":"bcs","o":"b_83BA","oa":33722},{"a":33716,"t":"code","b":[232],"m":"inx"},{"a":33717,"t":"code","b":[224,8],"m":"cpx","o":"#$08"},{"a":33719,"t":"code","b":[208,242],"m":"bne","o":"b_83AB","oa":33707},{"a":33721,"t":"code","b":[96],"m":"rts"},{"a":33722,"l":"b_83BA","t":"code","b":[169,3],"m":"lda","o":"#$03","x":[33714]},{"a":33724,"t":"code","b":[141,90,137],"m":"sta","o":"freaky_flash_frames","oa":35162},{"a":33727,"t":"code","b":[138],"m":"txa"},{"a":33728,"t":"code","b":[10],"m":"asl","o":"a"},{"a":33729,"t":"code","b":[10],"m":"asl","o":"a"},{"a":33730,"t":"code","b":[72],"m":"pha"},{"a":33731,"t":"code","b":[168],"m":"tay"},{"a":33732,"t":"code","b":[185,190,179],"m":"lda","o":"tbl_wizball_bump_handlers,y","oa":46014},{"a":33735,"t":"code","b":[141,209,131],"m":"sta","o":"bounce_jsr1_lo","oa":33745},{"a":33738,"t":"code","b":[185,191,179],"m":"lda","o":"tbl_wizball_bump_handlers_1hi,y","oa":46015},{"a":33741,"t":"code","b":[141,210,131],"m":"sta","o":"bounce_jsr1_hi","oa":33746},{"a":33744,"t":"code","b":[32,0,0],"m":"jsr","o":"cpu_port_ddr","oa":0},{"a":33745,"t":"note","l":"bounce_jsr1_lo","c":"Low byte of the JSR at $83D0 (it assembles as JSR $0000), rewritten by $83C7 from $B3BE + 4n, n being the probe that hit: the first bounce handler of the pair.","note":"inside the item at $83D0","x":[33735]},{"a":33746,"t":"note","l":"bounce_jsr1_hi","c":"High byte of the JSR at $83D0, rewritten by $83CD from $B3BF + 4n. After the call $83D3-$83DE fetch the second handler of the pair into the JSR at $83E1.","note":"inside the item at $83D0","x":[33741]},{"a":33747,"t":"code","b":[104],"m":"pla"},{"a":33748,"t":"code","b":[168],"m":"tay"},{"a":33749,"t":"code","b":[185,192,179],"m":"lda","o":"tbl_wizball_bump_handlers_2lo,y","oa":46016},{"a":33752,"t":"code","b":[141,226,131],"m":"sta","o":"bounce_jsr2_lo","oa":33762},{"a":33755,"t":"code","b":[185,193,179],"m":"lda","o":"tbl_wizball_bump_handlers_2hi,y","oa":46017},{"a":33758,"t":"code","b":[141,227,131],"m":"sta","o":"bounce_jsr2_hi","oa":33763},{"a":33761,"t":"code","b":[32,0,0],"m":"jsr","o":"cpu_port_ddr","oa":0},{"a":33762,"t":"note","l":"bounce_jsr2_lo","c":"Low byte of the JSR at $83E1, rewritten by $83D8 from $B3C0 + 4n: the second bounce handler of the pair ($8404, an RTS, for the four edge probes).","note":"inside the item at $83E1","x":[33752]},{"a":33763,"t":"note","l":"bounce_jsr2_hi","c":"High byte of the JSR at $83E1, rewritten by $83DE from $B3C1 + 4n. After the call $83E4 jumps to $818E to recompute the rolling speed.","note":"inside the item at $83E1","x":[33758]},{"a":33764,"t":"code","b":[76,142,129],"m":"jmp","o":"spin_to_roll_speed","oa":33166},{"a":33767,"l":"reverse_fall_antigrav","c":"Part of the floor bounce under anti-grav (from $8420): if the vertical speed $B218 is 0 or downward it is negated and the Wizball moved by the new speed ($B20F), that is back up. $83EC, the negate-and-move, is shared with $83FD.","t":"code","b":[173,24,178],"m":"lda","o":"antigrav_vspeed","oa":45592,"x":[33824]},{"a":33770,"t":"code","b":[48,16],"m":"bmi","o":"r_83FC","oa":33788},{"a":33772,"l":"b_83EC","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[33794]},{"a":33774,"t":"code","b":[56],"m":"sec"},{"a":33775,"t":"code","b":[237,24,178],"m":"sbc","o":"antigrav_vspeed","oa":45592},{"a":33778,"t":"code","b":[141,24,178],"m":"sta","o":"antigrav_vspeed","oa":45592},{"a":33781,"t":"code","b":[24],"m":"clc"},{"a":33782,"t":"code","b":[109,15,178],"m":"adc","o":"wizball_y","oa":45583},{"a":33785,"t":"code","b":[141,15,178],"m":"sta","o":"wizball_y","oa":45583},{"a":33788,"l":"r_83FC","t":"code","b":[96],"m":"rts","x":[33770]},{"a":33789,"l":"reverse_rise_antigrav","c":"Part of the ceiling bounce under anti-grav (from $840B): if the vertical speed $B218 is below 1 (upward or still) it is negated and the Wizball moved by the new speed through $83EC.","t":"code","b":[173,24,178],"m":"lda","o":"antigrav_vspeed","oa":45592,"x":[33803]},{"a":33792,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":33794,"t":"code","b":[48,232],"m":"bmi","o":"b_83EC","oa":33772},{"a":33796,"l":"bounce_none","c":"RTS: the do-nothing second handler of the four edge probes in $B3BE, and the exit of $8405 and $841A.","t":"code","b":[96],"m":"rts","x":[33808,33829]},{"a":33797,"l":"bounce_ceiling","c":"Bounce handler (table $B3BE) for scenery touching the Wizball's top (probes top, top-left, top-right). Under anti-grav ($B232 or $AC4E) an upward speed is reversed ($83FD). Under gravity, if the ball was rising ($B217 = 0) it starts falling ($B217 = 1) and gets one step of gravity at $7F99.","t":"code","b":[173,50,178],"m":"lda","o":"weapon_antigrav","oa":45618},{"a":33800,"t":"code","b":[13,78,172],"m":"ora","o":"in_lab","oa":44110},{"a":33803,"t":"code","b":[208,240],"m":"bne","o":"reverse_rise_antigrav","oa":33789},{"a":33805,"t":"code","b":[173,23,178],"m":"lda","o":"wizball_falling","oa":45591},{"a":33808,"t":"code","b":[208,242],"m":"bne","o":"bounce_none","oa":33796},{"a":33810,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":33812,"t":"code","b":[141,23,178],"m":"sta","o":"wizball_falling","oa":45591},{"a":33815,"t":"code","b":[76,153,127],"m":"jmp","o":"b_7F99","oa":32665},{"a":33818,"l":"bounce_floor","c":"Bounce handler (table $B3BE) for scenery under the Wizball (probes bottom, bottom-left, bottom-right). Under anti-grav ($B232 or $AC4E) a downward speed is reversed ($83E7). Under gravity, if the ball was falling ($B217 = 1) it bounces: $B217 = 0 and the rising step at $7FD0.","t":"code","b":[173,50,178],"m":"lda","o":"weapon_antigrav","oa":45618},{"a":33821,"t":"code","b":[13,78,172],"m":"ora","o":"in_lab","oa":44110},{"a":33824,"t":"code","b":[208,197],"m":"bne","o":"reverse_fall_antigrav","oa":33767},{"a":33826,"t":"code","b":[173,23,178],"m":"lda","o":"wizball_falling","oa":45591},{"a":33829,"t":"code","b":[240,221],"m":"beq","o":"bounce_none","oa":33796},{"a":33831,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":33833,"t":"code","b":[141,23,178],"m":"sta","o":"wizball_falling","oa":45591},{"a":33836,"t":"code","b":[76,208,127],"m":"jmp","o":"b_7FD0","oa":32720},{"a":33839,"l":"bounce_right_wall","c":"Bounce handler (table $B3BE) for scenery to the right (probes right, bottom-right, top-right): a spin $B21C of 0 or more is negated, so the ball turns back; $8434 is the negate shared with $843E.","t":"code","b":[173,28,178],"m":"lda","o":"spin","oa":45596},{"a":33842,"t":"code","b":[48,9],"m":"bmi","o":"r_843D","oa":33853},{"a":33844,"l":"b_8434","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[33857]},{"a":33846,"t":"code","b":[56],"m":"sec"},{"a":33847,"t":"code","b":[237,28,178],"m":"sbc","o":"spin","oa":45596},{"a":33850,"t":"code","b":[141,28,178],"m":"sta","o":"spin","oa":45596},{"a":33853,"l":"r_843D","t":"code","b":[96],"m":"rts","x":[33842]},{"a":33854,"l":"bounce_left_wall","c":"Bounce handler (table $B3BE) for scenery to the left (probes left, bottom-left, top-left): a negative spin $B21C is negated through $8434.","t":"code","b":[173,28,178],"m":"lda","o":"spin","oa":45596},{"a":33857,"t":"code","b":[48,241],"m":"bmi","o":"b_8434","oa":33844},{"a":33859,"t":"code","b":[96],"m":"rts"},{"a":33860,"l":"read_fire_press","c":"Fire as a single press, every frame from $7E40: $B23D = 1 only in the frame the fire bit of the Wiz's stick ($B23F bit 4, 0 = pressed) goes down after being up, 0 otherwise; $B23C keeps the previous fire bit. Holding fire does not repeat the Wiz's shots.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[32320]},{"a":33862,"t":"code","b":[141,61,178],"m":"sta","o":"fire_pressed","oa":45629},{"a":33865,"t":"code","b":[173,60,178],"m":"lda","o":"fire_latch","oa":45628},{"a":33868,"t":"code","b":[208,9],"m":"bne","o":"b_8457","oa":33879},{"a":33870,"t":"code","b":[173,63,178],"m":"lda","o":"wizball_input","oa":45631},{"a":33873,"t":"code","b":[41,16],"m":"and","o":"#$10"},{"a":33875,"t":"code","b":[141,60,178],"m":"sta","o":"fire_latch","oa":45628},{"a":33878,"t":"code","b":[96],"m":"rts"},{"a":33879,"l":"b_8457","t":"code","b":[173,63,178],"m":"lda","o":"wizball_input","oa":45631,"x":[33868]},{"a":33882,"t":"code","b":[41,16],"m":"and","o":"#$10"},{"a":33884,"t":"code","b":[141,60,178],"m":"sta","o":"fire_latch","oa":45628},{"a":33887,"t":"code","b":[208,5],"m":"bne","o":"r_8466","oa":33894},{"a":33889,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":33891,"t":"code","b":[141,61,178],"m":"sta","o":"fire_pressed","oa":45629},{"a":33894,"l":"r_8466","t":"code","b":[96],"m":"rts","x":[33887]},{"a":33895,"l":"fire_wiz_shot","c":"Fires the Wiz's shot when $B23D says fire was pressed (every frame from $7E43). First starts the beam animation ($B8DC = 1, $B8DB = 0) if it is idle, whether or not the beam is owned. The shot takes the first free of two slots of the shot table at $0480 (12 bytes a slot; slots at $0480 and $048C; in use while byte 4 is non-zero): column (X - $10)/8 and row (Y - $40)/8 of the Wizball in bytes 0-1, direction +1 or -1 in byte 2 from the sign of the last spin $B21D (with double, $B233, alternating each shot through $B23A), 0 in byte 3, character $B8D3[Y AND 7] ($79-$7B, by the ball's pixel row) in byte 4, colour 7 in byte 5, 0 in byte 10. With blazers ($B236) the character is 3 higher, the colour 12, and byte 10 holds the character. Plays sound 0 ($4553) and goes on to the spray at $84FF; with both slots busy it goes straight there.","t":"code","b":[173,61,178],"m":"lda","o":"fire_pressed","oa":45629,"x":[32323]},{"a":33898,"t":"code","b":[208,1],"m":"bne","o":"b_846D","oa":33901},{"a":33900,"t":"code","b":[96],"m":"rts"},{"a":33901,"l":"b_846D","t":"code","b":[173,220,184],"m":"lda","o":"beam_phase","oa":47324,"x":[33898]},{"a":33904,"t":"code","b":[208,8],"m":"bne","o":"b_847A","oa":33914},{"a":33906,"t":"code","b":[141,219,184],"m":"sta","o":"beam_timer","oa":47323},{"a":33909,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":33911,"t":"code","b":[141,220,184],"m":"sta","o":"beam_phase","oa":47324},{"a":33914,"l":"b_847A","t":"code","b":[173,15,178],"m":"lda","o":"wizball_y","oa":45583,"x":[33904]},{"a":33917,"t":"code","b":[56],"m":"sec"},{"a":33918,"t":"code","b":[233,64],"m":"sbc","o":"#$40"},{"a":33920,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":33921,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":33922,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":33923,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":33925,"t":"code","b":[173,13,178],"m":"lda","o":"wizball_x","oa":45581},{"a":33928,"t":"code","b":[56],"m":"sec"},{"a":33929,"t":"code","b":[233,16],"m":"sbc","o":"#$10"},{"a":33931,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":33932,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":33933,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":33934,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":33936,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":33938,"l":"b_8492","t":"code","b":[189,132,4],"m":"lda","o":"shot_char,x","oa":1156,"x":[33950]},{"a":33941,"t":"code","b":[240,12],"m":"beq","o":"b_84A3","oa":33955},{"a":33943,"t":"code","b":[138],"m":"txa"},{"a":33944,"t":"code","b":[24],"m":"clc"},{"a":33945,"t":"code","b":[105,12],"m":"adc","o":"#$0C"},{"a":33947,"t":"code","b":[170],"m":"tax"},{"a":33948,"t":"code","b":[224,24],"m":"cpx","o":"#$18"},{"a":33950,"t":"code","b":[208,242],"m":"bne","o":"b_8492","oa":33938},{"a":33952,"t":"code","b":[76,255,132],"m":"jmp","o":"fire_wiz_spray","oa":34047},{"a":33955,"l":"b_84A3","t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96,"x":[33941]},{"a":33957,"t":"code","b":[157,128,4],"m":"sta","o":"shot_column,x","oa":1152},{"a":33960,"t":"code","b":[165,97],"m":"lda","o":"zp_ptr_61","oa":97},{"a":33962,"t":"code","b":[157,129,4],"m":"sta","o":"shot_row,x","oa":1153},{"a":33965,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":33967,"t":"code","b":[172,29,178],"m":"ldy","o":"spin_last","oa":45597},{"a":33970,"t":"code","b":[48,2],"m":"bmi","o":"b_84B6","oa":33974},{"a":33972,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":33974,"l":"b_84B6","t":"code","b":[172,51,178],"m":"ldy","o":"weapon_double","oa":45619,"x":[33970]},{"a":33977,"t":"code","b":[240,8],"m":"beq","o":"b_84C3","oa":33987},{"a":33979,"t":"code","b":[173,58,178],"m":"lda","o":"double_side","oa":45626},{"a":33982,"t":"code","b":[73,1],"m":"eor","o":"#$01"},{"a":33984,"t":"code","b":[141,58,178],"m":"sta","o":"double_side","oa":45626},{"a":33987,"l":"b_84C3","t":"code","b":[201,0],"m":"cmp","o":"#$00","x":[33977]},{"a":33989,"t":"code","b":[208,2],"m":"bne","o":"b_84C9","oa":33993},{"a":33991,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":33993,"l":"b_84C9","t":"code","b":[157,130,4],"m":"sta","o":"shot_dx,x","oa":1154,"x":[33989]},{"a":33996,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":33998,"t":"code","b":[157,131,4],"m":"sta","o":"shot_dy,x","oa":1155},{"a":34001,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":34003,"t":"code","b":[157,138,4],"m":"sta","o":"shot_second_char,x","oa":1162},{"a":34006,"t":"code","b":[169,7],"m":"lda","o":"#$07"},{"a":34008,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":34010,"t":"code","b":[173,15,178],"m":"lda","o":"wizball_y","oa":45583},{"a":34013,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":34015,"t":"code","b":[168],"m":"tay"},{"a":34016,"t":"code","b":[185,211,184],"m":"lda","o":"tbl_shot_chars,y","oa":47315},{"a":34019,"t":"code","b":[172,54,178],"m":"ldy","o":"weapon_blazers","oa":45622},{"a":34022,"t":"code","b":[240,10],"m":"beq","o":"b_84F2","oa":34034},{"a":34024,"t":"code","b":[24],"m":"clc"},{"a":34025,"t":"code","b":[105,3],"m":"adc","o":"#$03"},{"a":34027,"t":"code","b":[160,12],"m":"ldy","o":"#$0C"},{"a":34029,"t":"code","b":[132,103],"m":"sty","o":"zp_temp_67","oa":103},{"a":34031,"t":"code","b":[157,138,4],"m":"sta","o":"shot_second_char,x","oa":1162},{"a":34034,"l":"b_84F2","t":"code","b":[157,132,4],"m":"sta","o":"shot_char,x","oa":1156,"x":[34022]},{"a":34037,"t":"code","b":[165,103],"m":"lda","o":"zp_temp_67","oa":103},{"a":34039,"t":"code","b":[157,133,4],"m":"sta","o":"shot_colour,x","oa":1157},{"a":34042,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":34044,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":34047,"l":"fire_wiz_spray","c":"Wiz spray: with the spray owned ($B237) and not given to the cat ($B238 = 0), falls into $850A to fire a fan of three from the Wizball's column and row in $60/$61. The LDA $84FF at $8558 reads this instruction's opcode byte $AD as if it were a flag.","t":"code","b":[173,55,178],"m":"lda","o":"weapon_spray","oa":45623,"x":[33952,34136]},{"a":34050,"t":"code","b":[208,1],"m":"bne","o":"b_8505","oa":34053},{"a":34052,"l":"r_8504","t":"code","b":[96],"m":"rts","x":[34056,34063]},{"a":34053,"l":"b_8505","t":"code","b":[173,56,178],"m":"lda","o":"weapon_spray_on_cat","oa":45624,"x":[34050]},{"a":34056,"t":"code","b":[208,250],"m":"bne","o":"r_8504","oa":34052},{"a":34058,"l":"launch_spray_fan","c":"Fires a spray fan from the column in $60 and row in $61, only when all three spray slots of the shot table are free ($0480 + $24, $30 and $3C; byte 4 = 0). $B23B alternates between 0 and 9 to pick one of two sets of three (dx, dy, character) from $B8C1: down-left, down and down-right (characters $77, $76, $78), or up-right, up and up-left. Each slot gets column, row, dx, dy, character, colour 11 and 0 in byte 10.","t":"code","b":[162,36],"m":"ldx","o":"#$24","x":[34168]},{"a":34060,"l":"b_850C","t":"code","b":[189,132,4],"m":"lda","o":"shot_char,x","oa":1156,"x":[34072]},{"a":34063,"t":"code","b":[208,243],"m":"bne","o":"r_8504","oa":34052},{"a":34065,"t":"code","b":[138],"m":"txa"},{"a":34066,"t":"code","b":[24],"m":"clc"},{"a":34067,"t":"code","b":[105,12],"m":"adc","o":"#$0C"},{"a":34069,"t":"code","b":[170],"m":"tax"},{"a":34070,"t":"code","b":[224,72],"m":"cpx","o":"#$48"},{"a":34072,"t":"code","b":[208,242],"m":"bne","o":"b_850C","oa":34060},{"a":34074,"t":"code","b":[173,59,178],"m":"lda","o":"spray_set","oa":45627},{"a":34077,"t":"code","b":[73,9],"m":"eor","o":"#$09"},{"a":34079,"t":"code","b":[141,59,178],"m":"sta","o":"spray_set","oa":45627},{"a":34082,"t":"code","b":[168],"m":"tay"},{"a":34083,"t":"code","b":[162,36],"m":"ldx","o":"#$24"},{"a":34085,"l":"b_8525","t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96,"x":[34133]},{"a":34087,"t":"code","b":[157,128,4],"m":"sta","o":"shot_column,x","oa":1152},{"a":34090,"t":"code","b":[165,97],"m":"lda","o":"zp_ptr_61","oa":97},{"a":34092,"t":"code","b":[157,129,4],"m":"sta","o":"shot_row,x","oa":1153},{"a":34095,"t":"code","b":[185,193,184],"m":"lda","o":"tbl_spray_shots,y","oa":47297},{"a":34098,"t":"code","b":[157,130,4],"m":"sta","o":"shot_dx,x","oa":1154},{"a":34101,"t":"code","b":[185,194,184],"m":"lda","o":"tbl_spray_shots_dy,y","oa":47298},{"a":34104,"t":"code","b":[157,131,4],"m":"sta","o":"shot_dy,x","oa":1155},{"a":34107,"t":"code","b":[185,195,184],"m":"lda","o":"tbl_spray_shots_char,y","oa":47299},{"a":34110,"t":"code","b":[157,132,4],"m":"sta","o":"shot_char,x","oa":1156},{"a":34113,"t":"code","b":[169,11],"m":"lda","o":"#$0B"},{"a":34115,"t":"code","b":[157,133,4],"m":"sta","o":"shot_colour,x","oa":1157},{"a":34118,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":34120,"t":"code","b":[157,138,4],"m":"sta","o":"shot_second_char,x","oa":1162},{"a":34123,"t":"code","b":[200],"m":"iny"},{"a":34124,"t":"code","b":[200],"m":"iny"},{"a":34125,"t":"code","b":[200],"m":"iny"},{"a":34126,"t":"code","b":[138],"m":"txa"},{"a":34127,"t":"code","b":[24],"m":"clc"},{"a":34128,"t":"code","b":[105,12],"m":"adc","o":"#$0C"},{"a":34130,"t":"code","b":[170],"m":"tax"},{"a":34131,"t":"code","b":[224,72],"m":"cpx","o":"#$48"},{"a":34133,"t":"code","b":[208,206],"m":"bne","o":"b_8525","oa":34085},{"a":34135,"t":"code","b":[96],"m":"rts"},{"a":34136,"l":"fire_cat_spray","c":"Cat spray, from $882C when the cat fires. Its test of the spray flag is LDA $84FF, the opcode byte $AD of the instruction there rather than $B237, so it always passes; then, with the spray given to the cat ($B238), it fires the fan of $850A from the cat's column ($B261 - $0C)/4 and row ($B262 - $40)/8.","s":"reads the opcode $AD at $84FF, not $B237: always non-zero","t":"code","b":[173,255,132],"m":"lda","o":"fire_wiz_spray","oa":34047,"x":[34860]},{"a":34139,"t":"code","b":[208,1],"m":"bne","o":"b_855E","oa":34142},{"a":34141,"l":"r_855D","t":"code","b":[96],"m":"rts","x":[34145]},{"a":34142,"l":"b_855E","t":"code","b":[173,56,178],"m":"lda","o":"weapon_spray_on_cat","oa":45624,"x":[34139]},{"a":34145,"t":"code","b":[240,250],"m":"beq","o":"r_855D","oa":34141},{"a":34147,"t":"code","b":[173,98,178],"m":"lda","o":"cat_y","oa":45666},{"a":34150,"t":"code","b":[56],"m":"sec"},{"a":34151,"t":"code","b":[233,64],"m":"sbc","o":"#$40"},{"a":34153,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":34154,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":34155,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":34156,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":34158,"t":"code","b":[173,97,178],"m":"lda","o":"cat_x","oa":45665},{"a":34161,"t":"code","b":[56],"m":"sec"},{"a":34162,"t":"code","b":[233,12],"m":"sbc","o":"#$0C"},{"a":34164,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":34165,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":34166,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":34168,"t":"code","b":[76,10,133],"m":"jmp","o":"launch_spray_fan","oa":34058},{"a":34171,"l":"record_wizball_trail","c":"Every frame from $7E46: stores the Wizball's Y ($B20F) and X/2 ($B20D shifted right; bit 8 in $B20E is not used) in the eight-entry ring $B244/$B24C at index $B243 (advanced first, AND 7). The cat follows the oldest entry, eight frames behind ($86F5).","t":"code","b":[238,67,178],"m":"inc","o":"trail_index","oa":45635,"x":[32326]},{"a":34174,"t":"code","b":[173,67,178],"m":"lda","o":"trail_index","oa":45635},{"a":34177,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":34179,"t":"code","b":[168],"m":"tay"},{"a":34180,"t":"code","b":[173,15,178],"m":"lda","o":"wizball_y","oa":45583},{"a":34183,"t":"code","b":[153,68,178],"m":"sta","o":"trail_y,y","oa":45636},{"a":34186,"t":"code","b":[173,13,178],"m":"lda","o":"wizball_x","oa":45581},{"a":34189,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":34190,"t":"code","b":[153,76,178],"m":"sta","o":"trail_x,y","oa":45644},{"a":34193,"t":"code","b":[96],"m":"rts"},{"a":34194,"l":"animate_beam","c":"The beam, every frame from $7E49 when it is owned ($B235). Idle ($B8DC = 0): the shapes above and below the ball ($B8DE, $B8DF) are the blank shape 5. Firing ($B8DC = 1-3, started by $8467): tests for objects above and below ($85F2), steps $B8DC every four frames ($B8DB) and ends after the third step, sets the shapes to $3E and $3F + 2 x $B8DC (shapes $40-$45, arcs, shown by sprite 0 in bands $8A52 and $8B22) and the colour $B8E0 from $B881 indexed by $B8DD AND 3 ($0D, $0E, 1, 2), black on odd frames.","t":"code","b":[173,53,178],"m":"lda","o":"weapon_beam","oa":45621,"x":[32329]},{"a":34197,"t":"code","b":[208,1],"m":"bne","o":"b_8598","oa":34200},{"a":34199,"t":"code","b":[96],"m":"rts"},{"a":34200,"l":"b_8598","t":"code","b":[173,220,184],"m":"lda","o":"beam_phase","oa":47324,"x":[34197]},{"a":34203,"t":"code","b":[208,9],"m":"bne","o":"b_85A6","oa":34214},{"a":34205,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":34207,"t":"code","b":[141,222,184],"m":"sta","o":"beam_image_upper","oa":47326},{"a":34210,"t":"code","b":[141,223,184],"m":"sta","o":"beam_image_lower","oa":47327},{"a":34213,"t":"code","b":[96],"m":"rts"},{"a":34214,"l":"b_85A6","t":"code","b":[32,242,133],"m":"jsr","o":"beam_hit_test","oa":34290,"x":[34203]},{"a":34217,"t":"code","b":[238,219,184],"m":"inc","o":"beam_timer","oa":47323},{"a":34220,"t":"code","b":[173,219,184],"m":"lda","o":"beam_timer","oa":47323},{"a":34223,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":34225,"t":"code","b":[208,20],"m":"bne","o":"b_85C7","oa":34247},{"a":34227,"t":"code","b":[141,219,184],"m":"sta","o":"beam_timer","oa":47323},{"a":34230,"t":"code","b":[238,220,184],"m":"inc","o":"beam_phase","oa":47324},{"a":34233,"t":"code","b":[238,221,184],"m":"inc","o":"beam_colour_step","oa":47325},{"a":34236,"t":"code","b":[173,220,184],"m":"lda","o":"beam_phase","oa":47324},{"a":34239,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":34241,"t":"code","b":[208,4],"m":"bne","o":"b_85C7","oa":34247},{"a":34243,"t":"code","b":[141,220,184],"m":"sta","o":"beam_phase","oa":47324},{"a":34246,"t":"code","b":[96],"m":"rts"},{"a":34247,"l":"b_85C7","t":"code","b":[173,220,184],"m":"lda","o":"beam_phase","oa":47324,"x":[34225,34241]},{"a":34250,"t":"code","b":[10],"m":"asl","o":"a"},{"a":34251,"t":"code","b":[105,62],"m":"adc","o":"#$3E"},{"a":34253,"t":"code","b":[141,222,184],"m":"sta","o":"beam_image_upper","oa":47326},{"a":34256,"t":"code","b":[173,220,184],"m":"lda","o":"beam_phase","oa":47324},{"a":34259,"t":"code","b":[10],"m":"asl","o":"a"},{"a":34260,"t":"code","b":[105,63],"m":"adc","o":"#$3F"},{"a":34262,"t":"code","b":[141,223,184],"m":"sta","o":"beam_image_lower","oa":47327},{"a":34265,"t":"code","b":[173,221,184],"m":"lda","o":"beam_colour_step","oa":47325},{"a":34268,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":34270,"t":"code","b":[168],"m":"tay"},{"a":34271,"t":"code","b":[185,129,184],"m":"lda","o":"tbl_beam_colours,y","oa":47233},{"a":34274,"t":"code","b":[141,224,184],"m":"sta","o":"beam_colour","oa":47328},{"a":34277,"t":"code","b":[173,219,184],"m":"lda","o":"beam_timer","oa":47323},{"a":34280,"t":"code","b":[41,1],"m":"and","o":"#$01"},{"a":34282,"t":"code","b":[240,5],"m":"beq","o":"r_85F1","oa":34289},{"a":34284,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":34286,"t":"code","b":[141,224,184],"m":"sta","o":"beam_colour","oa":47328},{"a":34289,"l":"r_85F1","t":"code","b":[96],"m":"rts","x":[34282]},{"a":34290,"l":"beam_hit_test","c":"Tests the beam against the objects: calls $8613 at the Wizball's X/2 ($B20D with bit 8 from $B20E) with Y = $B20F - 10 and again with Y = $B20F + 30, so it hits above and below the ball. $67 keeps X/2 between the two calls.","t":"code","b":[173,15,178],"m":"lda","o":"wizball_y","oa":45583,"x":[34214]},{"a":34293,"t":"code","b":[56],"m":"sec"},{"a":34294,"t":"code","b":[233,10],"m":"sbc","o":"#$0A"},{"a":34296,"t":"code","b":[168],"m":"tay"},{"a":34297,"t":"code","b":[173,14,178],"m":"lda","o":"wizball_x_high","oa":45582},{"a":34300,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":34301,"t":"code","b":[173,13,178],"m":"lda","o":"wizball_x","oa":45581},{"a":34304,"t":"code","b":[106],"m":"ror","o":"a"},{"a":34305,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":34307,"t":"code","b":[32,19,134],"m":"jsr","o":"test_point_objects","oa":34323},{"a":34310,"t":"code","b":[173,15,178],"m":"lda","o":"wizball_y","oa":45583},{"a":34313,"t":"code","b":[24],"m":"clc"},{"a":34314,"t":"code","b":[105,30],"m":"adc","o":"#$1E"},{"a":34316,"t":"code","b":[168],"m":"tay"},{"a":34317,"t":"code","b":[165,103],"m":"lda","o":"zp_temp_67","oa":103},{"a":34319,"t":"code","b":[32,19,134],"m":"jsr","o":"test_point_objects","oa":34323},{"a":34322,"t":"code","b":[96],"m":"rts"},{"a":34323,"l":"test_point_objects","c":"Calls $6FBE with X = $48 to test the point (A = X/2, Y) against the objects' boxes at $0200 (42 bytes a record). On a hit $6FBE marks the object ($0225 + record = 1), clears $04CC (byte 4 of slot $48 of the shot table) and returns straight to this routine's caller, which is why the test sits one JSR deeper.","t":"code","b":[162,72],"m":"ldx","o":"#$48","x":[34307,34319]},{"a":34325,"t":"code","b":[32,190,111],"m":"jsr","o":"test_point_hits_alien","oa":28606},{"a":34328,"t":"code","b":[96],"m":"rts"},{"a":34329,"l":"mutant_cat_clock","c":"Frame counter of the mutant cat (INC at $861C); a new random direction is drawn when its low four bits are 0, every 16 frames.","t":"byte","b":[0],"x":[34332,34335]},{"a":34330,"l":"mutant_cat","c":"Mutant cat flag: 1 after the cat catches a purple droplet (colour 4, $8928); cleared by $8040 and when the catelite is taken ($7375). While set, $8652 takes the cat's input from $861B instead of its stick.","t":"byte","b":[0],"x":[29557,32858,34386,35112]},{"a":34331,"l":"mutant_cat_input","c":"The mutant cat's input: a random byte from $7533, drawn again every 16 frames. With bit 4 forced on (fire up) it becomes the cat's stick bits $B23E, so the mutant cat wanders at random and never fires.","t":"byte","b":[0],"x":[34345,34357]},{"a":34332,"l":"drive_mutant_cat","c":"Mutant cat input, from $8655 while $861A is set: every 16 frames ($8619) draws a random byte into $861B and plays sound $0F if its bit 4 is set; sets the cat's stick bits $B23E to $861B OR $10 and continues the cat's update at $8657.","t":"code","b":[238,25,134],"m":"inc","o":"mutant_cat_clock","oa":34329,"x":[34389]},{"a":34335,"t":"code","b":[173,25,134],"m":"lda","o":"mutant_cat_clock","oa":34329},{"a":34338,"t":"code","b":[41,15],"m":"and","o":"#$0F"},{"a":34340,"t":"code","b":[208,15],"m":"bne","o":"b_8635","oa":34357},{"a":34342,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":34345,"t":"code","b":[141,27,134],"m":"sta","o":"mutant_cat_input","oa":34331},{"a":34348,"t":"code","b":[41,16],"m":"and","o":"#$10"},{"a":34350,"t":"code","b":[240,5],"m":"beq","o":"b_8635","oa":34357},{"a":34352,"t":"code","b":[160,15],"m":"ldy","o":"#$0F"},{"a":34354,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":34357,"l":"b_8635","t":"code","b":[173,27,134],"m":"lda","o":"mutant_cat_input","oa":34331,"x":[34340,34350]},{"a":34360,"t":"code","b":[9,16],"m":"ora","o":"#$10"},{"a":34362,"t":"code","b":[141,62,178],"m":"sta","o":"cat_input","oa":45630},{"a":34365,"t":"code","b":[76,87,134],"m":"jmp","o":"j_8657","oa":34391},{"a":34368,"l":"update_cat","c":"The cat (sprite 1), every frame from the frame loop ($6456, $64E5, $6594). Without the catelite ($B234 = 0) it parks the cat off screen (sprite 1 Y $E7C7 = 0, $B261 = $B262 = 0) and ends its shield ($89B6 = 0); otherwise it goes on at $8652.","t":"code","b":[173,52,178],"m":"lda","o":"weapon_catelite","oa":45620,"x":[25686,25829,26004]},{"a":34371,"t":"code","b":[208,13],"m":"bne","o":"update_cat_present","oa":34386},{"a":34373,"t":"code","b":[141,199,231],"m":"sta","o":"vic_shadow_spr1_y","oa":59335},{"a":34376,"t":"code","b":[141,97,178],"m":"sta","o":"cat_x","oa":45665},{"a":34379,"t":"code","b":[141,98,178],"m":"sta","o":"cat_y","oa":45666},{"a":34382,"t":"code","b":[141,182,137],"m":"sta","o":"cat_shield_time","oa":35254},{"a":34385,"t":"code","b":[96],"m":"rts"},{"a":34386,"l":"update_cat_present","c":"The cat's update when the catelite is owned (from $8643; also jumped to from $AC03). The mutant cat takes its input from $861C. At nine lost lives ($B26C = 9) the cat is gone: $B234 = 0, icon 3's sprite pointer back to 2 ($EFFA) and sound $0F. Otherwise it checks what the cat touches ($88B5) and its shield and hits ($895B), then moves it. With a direction on its stick $B23E (or always with $AC4E) it is steered for 10 frames at a time ($B26B): up -4 and down +3 pixels a frame into $B264, left -3 and right +2 into $B263 (X is kept halved, so 6 and 4 pixels), while the follow speeds $B265/$B266 decay to 0. With no direction it follows the Wizball toward its position eight frames ago from the ring $B244/$B24C: Y + 3 at up to 4 pixels a frame ($B266), X/2 - 8 + $B269 at up to 2 ($B265), with $B269 sliding between 0 and 21 so the cat trails on the side away from the spin $B21D. Then $B261 (X/2) and $B262 (Y) move and are limited (X/2 $0F-$A0, the $0F only when not appearing; Y $47-$C7 unless $AC4E), go to sprite 1 ($E7C6/$E7C7, bit 1 of $E7D4) with shapes $0D-$0F in turn every 4 frames ($B526), colour 5, flashing through $B5DF on its last life ($B26C = 8) and black on alternate pairs of frames while its shield runs ($89B6).","t":"code","b":[173,26,134],"m":"lda","o":"mutant_cat","oa":34330,"x":[34371,44035]},{"a":34389,"t":"code","b":[208,197],"m":"bne","o":"drive_mutant_cat","oa":34332},{"a":34391,"l":"j_8657","t":"code","b":[173,108,178],"m":"lda","o":"cat_hits","oa":45676,"x":[34365]},{"a":34394,"t":"code","b":[201,9],"m":"cmp","o":"#$09"},{"a":34396,"t":"code","b":[208,15],"m":"bne","o":"b_866D","oa":34413},{"a":34398,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":34400,"t":"code","b":[141,52,178],"m":"sta","o":"weapon_catelite","oa":45620},{"a":34403,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":34405,"t":"code","b":[141,250,239],"m":"sta","o":"icon3_ptr","oa":61434},{"a":34408,"t":"code","b":[160,15],"m":"ldy","o":"#$0F"},{"a":34410,"t":"code","b":[76,83,69],"m":"jmp","o":"start_sound_effect","oa":17747},{"a":34413,"l":"b_866D","t":"code","b":[32,181,136],"m":"jsr","o":"check_cat_objects","oa":34997,"x":[34396]},{"a":34416,"t":"code","b":[32,91,137],"m":"jsr","o":"update_cat_shield","oa":35163},{"a":34419,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":34421,"t":"code","b":[141,106,178],"m":"sta","o":"cat_following","oa":45674},{"a":34424,"t":"code","b":[173,62,178],"m":"lda","o":"cat_input","oa":45630},{"a":34427,"t":"code","b":[172,107,178],"m":"ldy","o":"cat_stick_timer","oa":45675},{"a":34430,"t":"code","b":[208,16],"m":"bne","o":"b_8690","oa":34448},{"a":34432,"t":"code","b":[174,78,172],"m":"ldx","o":"in_lab","oa":44110},{"a":34435,"t":"code","b":[208,6],"m":"bne","o":"b_868B","oa":34443},{"a":34437,"t":"code","b":[41,15],"m":"and","o":"#$0F"},{"a":34439,"t":"code","b":[201,15],"m":"cmp","o":"#$0F"},{"a":34441,"t":"code","b":[240,98],"m":"beq","o":"b_86ED","oa":34541},{"a":34443,"l":"b_868B","t":"code","b":[160,10],"m":"ldy","o":"#$0A","x":[34435]},{"a":34445,"t":"code","b":[140,107,178],"m":"sty","o":"cat_stick_timer","oa":45675},{"a":34448,"l":"b_8690","t":"code","b":[206,107,178],"m":"dec","o":"cat_stick_timer","oa":45675,"x":[34430]},{"a":34451,"t":"code","b":[206,106,178],"m":"dec","o":"cat_following","oa":45674},{"a":34454,"t":"code","b":[174,101,178],"m":"ldx","o":"cat_follow_dx","oa":45669},{"a":34457,"t":"code","b":[240,11],"m":"beq","o":"b_86A6","oa":34470},{"a":34459,"t":"code","b":[48,6],"m":"bmi","o":"b_86A3","oa":34467},{"a":34461,"t":"code","b":[206,101,178],"m":"dec","o":"cat_follow_dx","oa":45669},{"a":34464,"t":"code","b":[206,101,178],"m":"dec","o":"cat_follow_dx","oa":45669},{"a":34467,"l":"b_86A3","t":"code","b":[238,101,178],"m":"inc","o":"cat_follow_dx","oa":45669,"x":[34459]},{"a":34470,"l":"b_86A6","t":"code","b":[174,102,178],"m":"ldx","o":"cat_follow_dy","oa":45670,"x":[34457]},{"a":34473,"t":"code","b":[240,11],"m":"beq","o":"b_86B6","oa":34486},{"a":34475,"t":"code","b":[48,6],"m":"bmi","o":"b_86B3","oa":34483},{"a":34477,"t":"code","b":[206,102,178],"m":"dec","o":"cat_follow_dy","oa":45670},{"a":34480,"t":"code","b":[206,102,178],"m":"dec","o":"cat_follow_dy","oa":45670},{"a":34483,"l":"b_86B3","t":"code","b":[238,102,178],"m":"inc","o":"cat_follow_dy","oa":45670,"x":[34475]},{"a":34486,"l":"b_86B6","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[34473]},{"a":34488,"t":"code","b":[142,100,178],"m":"stx","o":"cat_stick_dy","oa":45668},{"a":34491,"t":"code","b":[142,99,178],"m":"stx","o":"cat_stick_dx","oa":45667},{"a":34494,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":34496,"t":"code","b":[41,1],"m":"and","o":"#$01"},{"a":34498,"t":"code","b":[208,5],"m":"bne","o":"b_86C9","oa":34505},{"a":34500,"t":"code","b":[169,252],"m":"lda","o":"#$FC"},{"a":34502,"t":"code","b":[141,100,178],"m":"sta","o":"cat_stick_dy","oa":45668},{"a":34505,"l":"b_86C9","t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102,"x":[34498]},{"a":34507,"t":"code","b":[41,2],"m":"and","o":"#$02"},{"a":34509,"t":"code","b":[208,5],"m":"bne","o":"b_86D4","oa":34516},{"a":34511,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":34513,"t":"code","b":[141,100,178],"m":"sta","o":"cat_stick_dy","oa":45668},{"a":34516,"l":"b_86D4","t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102,"x":[34509]},{"a":34518,"t":"code","b":[41,4],"m":"and","o":"#$04"},{"a":34520,"t":"code","b":[208,5],"m":"bne","o":"b_86DF","oa":34527},{"a":34522,"t":"code","b":[169,253],"m":"lda","o":"#$FD"},{"a":34524,"t":"code","b":[141,99,178],"m":"sta","o":"cat_stick_dx","oa":45667},{"a":34527,"l":"b_86DF","t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102,"x":[34520]},{"a":34529,"t":"code","b":[41,8],"m":"and","o":"#$08"},{"a":34531,"t":"code","b":[208,105],"m":"bne","o":"b_874E","oa":34638},{"a":34533,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":34535,"t":"code","b":[141,99,178],"m":"sta","o":"cat_stick_dx","oa":45667},{"a":34538,"t":"code","b":[76,78,135],"m":"jmp","o":"b_874E","oa":34638},{"a":34541,"l":"b_86ED","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[34441]},{"a":34543,"t":"code","b":[142,99,178],"m":"stx","o":"cat_stick_dx","oa":45667},{"a":34546,"t":"code","b":[142,100,178],"m":"stx","o":"cat_stick_dy","oa":45668},{"a":34549,"t":"code","b":[173,67,178],"m":"lda","o":"trail_index","oa":45635},{"a":34552,"t":"code","b":[24],"m":"clc"},{"a":34553,"t":"code","b":[105,1],"m":"adc","o":"#$01"},{"a":34555,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":34557,"t":"code","b":[168],"m":"tay"},{"a":34558,"t":"code","b":[185,68,178],"m":"lda","o":"trail_y,y","oa":45636},{"a":34561,"t":"code","b":[24],"m":"clc"},{"a":34562,"t":"code","b":[105,3],"m":"adc","o":"#$03"},{"a":34564,"t":"code","b":[56],"m":"sec"},{"a":34565,"t":"code","b":[237,98,178],"m":"sbc","o":"cat_y","oa":45666},{"a":34568,"t":"code","b":[201,4],"m":"cmp","o":"#$04"},{"a":34570,"t":"code","b":[48,2],"m":"bmi","o":"b_870E","oa":34574},{"a":34572,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":34574,"l":"b_870E","t":"code","b":[201,252],"m":"cmp","o":"#$FC","x":[34570]},{"a":34576,"t":"code","b":[16,2],"m":"bpl","o":"b_8714","oa":34580},{"a":34578,"t":"code","b":[169,252],"m":"lda","o":"#$FC"},{"a":34580,"l":"b_8714","t":"code","b":[141,102,178],"m":"sta","o":"cat_follow_dy","oa":45670,"x":[34576]},{"a":34583,"t":"code","b":[173,29,178],"m":"lda","o":"spin_last","oa":45597},{"a":34586,"t":"code","b":[48,11],"m":"bmi","o":"b_8727","oa":34599},{"a":34588,"t":"code","b":[173,105,178],"m":"lda","o":"cat_side_offset","oa":45673},{"a":34591,"t":"code","b":[240,16],"m":"beq","o":"b_8731","oa":34609},{"a":34593,"t":"code","b":[206,105,178],"m":"dec","o":"cat_side_offset","oa":45673},{"a":34596,"t":"code","b":[76,49,135],"m":"jmp","o":"b_8731","oa":34609},{"a":34599,"l":"b_8727","t":"code","b":[173,105,178],"m":"lda","o":"cat_side_offset","oa":45673,"x":[34586]},{"a":34602,"t":"code","b":[201,21],"m":"cmp","o":"#$15"},{"a":34604,"t":"code","b":[240,3],"m":"beq","o":"b_8731","oa":34609},{"a":34606,"t":"code","b":[238,105,178],"m":"inc","o":"cat_side_offset","oa":45673},{"a":34609,"l":"b_8731","t":"code","b":[185,76,178],"m":"lda","o":"trail_x,y","oa":45644,"x":[34591,34596,34604]},{"a":34612,"t":"code","b":[56],"m":"sec"},{"a":34613,"t":"code","b":[233,8],"m":"sbc","o":"#$08"},{"a":34615,"t":"code","b":[24],"m":"clc"},{"a":34616,"t":"code","b":[109,105,178],"m":"adc","o":"cat_side_offset","oa":45673},{"a":34619,"t":"code","b":[56],"m":"sec","x":[14841]},{"a":34620,"t":"code","b":[237,97,178],"m":"sbc","o":"cat_x","oa":45665},{"a":34623,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":34625,"t":"code","b":[48,2],"m":"bmi","o":"b_8745","oa":34629},{"a":34627,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":34629,"l":"b_8745","t":"code","b":[201,254],"m":"cmp","o":"#$FE","x":[34625]},{"a":34631,"t":"code","b":[16,2],"m":"bpl","o":"b_874B","oa":34635},{"a":34633,"t":"code","b":[169,254],"m":"lda","o":"#$FE"},{"a":34635,"l":"b_874B","t":"code","b":[141,101,178],"m":"sta","o":"cat_follow_dx","oa":45669,"x":[34631]},{"a":34638,"l":"b_874E","t":"code","b":[173,97,178],"m":"lda","o":"cat_x","oa":45665,"x":[34531,34538]},{"a":34641,"t":"code","b":[24],"m":"clc"},{"a":34642,"t":"code","b":[109,99,178],"m":"adc","o":"cat_stick_dx","oa":45667},{"a":34645,"t":"code","b":[109,101,178],"m":"adc","o":"cat_follow_dx","oa":45669},{"a":34648,"t":"code","b":[141,97,178],"m":"sta","o":"cat_x","oa":45665},{"a":34651,"t":"code","b":[173,98,178],"m":"lda","o":"cat_y","oa":45666},{"a":34654,"t":"code","b":[24],"m":"clc"},{"a":34655,"t":"code","b":[109,100,178],"m":"adc","o":"cat_stick_dy","oa":45668},{"a":34658,"t":"code","b":[109,102,178],"m":"adc","o":"cat_follow_dy","oa":45670},{"a":34661,"t":"code","b":[141,98,178],"m":"sta","o":"cat_y","oa":45666},{"a":34664,"t":"code","b":[173,97,178],"m":"lda","o":"cat_x","oa":45665},{"a":34667,"t":"code","b":[201,250],"m":"cmp","o":"#$FA"},{"a":34669,"t":"code","b":[144,5],"m":"bcc","o":"b_8774","oa":34676},{"a":34671,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":34673,"t":"code","b":[141,97,178],"m":"sta","o":"cat_x","oa":45665},{"a":34676,"l":"b_8774","t":"code","b":[173,22,178],"m":"lda","o":"warp_direction","oa":45590,"x":[34669]},{"a":34679,"t":"code","b":[208,12],"m":"bne","o":"b_8785","oa":34693},{"a":34681,"t":"code","b":[173,97,178],"m":"lda","o":"cat_x","oa":45665},{"a":34684,"t":"code","b":[201,15],"m":"cmp","o":"#$0F"},{"a":34686,"t":"code","b":[176,5],"m":"bcs","o":"b_8785","oa":34693},{"a":34688,"t":"code","b":[169,15],"m":"lda","o":"#$0F"},{"a":34690,"t":"code","b":[141,97,178],"m":"sta","o":"cat_x","oa":45665},{"a":34693,"l":"b_8785","t":"code","b":[173,97,178],"m":"lda","o":"cat_x","oa":45665,"x":[34679,34686]},{"a":34696,"t":"code","b":[201,160],"m":"cmp","o":"#$A0"},{"a":34698,"t":"code","b":[144,5],"m":"bcc","o":"b_8791","oa":34705},{"a":34700,"t":"code","b":[169,160],"m":"lda","o":"#$A0"},{"a":34702,"t":"code","b":[141,97,178],"m":"sta","o":"cat_x","oa":45665},{"a":34705,"l":"b_8791","t":"code","b":[173,78,172],"m":"lda","o":"in_lab","oa":44110,"x":[34698]},{"a":34708,"t":"code","b":[208,24],"m":"bne","o":"b_87AE","oa":34734},{"a":34710,"t":"code","b":[173,98,178],"m":"lda","o":"cat_y","oa":45666},{"a":34713,"t":"code","b":[201,71],"m":"cmp","o":"#$47"},{"a":34715,"t":"code","b":[176,5],"m":"bcs","o":"b_87A2","oa":34722},{"a":34717,"t":"code","b":[169,71],"m":"lda","o":"#$47"},{"a":34719,"t":"code","b":[141,98,178],"m":"sta","o":"cat_y","oa":45666},{"a":34722,"l":"b_87A2","t":"code","b":[173,98,178],"m":"lda","o":"cat_y","oa":45666,"x":[34715]},{"a":34725,"t":"code","b":[201,200],"m":"cmp","o":"#$C8"},{"a":34727,"t":"code","b":[144,5],"m":"bcc","o":"b_87AE","oa":34734},{"a":34729,"t":"code","b":[169,199],"m":"lda","o":"#$C7"},{"a":34731,"t":"code","b":[141,98,178],"m":"sta","o":"cat_y","oa":45666},{"a":34734,"l":"b_87AE","t":"code","b":[173,98,178],"m":"lda","o":"cat_y","oa":45666,"x":[34708,34727]},{"a":34737,"t":"code","b":[141,199,231],"m":"sta","o":"vic_shadow_spr1_y","oa":59335},{"a":34740,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":34742,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":34744,"t":"code","b":[173,97,178],"m":"lda","o":"cat_x","oa":45665},{"a":34747,"t":"code","b":[10],"m":"asl","o":"a"},{"a":34748,"t":"code","b":[38,97],"m":"rol","o":"zp_ptr_61","oa":97},{"a":34750,"t":"code","b":[6,97],"m":"asl","o":"zp_ptr_61","oa":97},{"a":34752,"t":"code","b":[141,198,231],"m":"sta","o":"vic_shadow_spr1_x","oa":59334},{"a":34755,"t":"code","b":[173,212,231],"m":"lda","o":"vic_shadow_x_msb","oa":59348},{"a":34758,"t":"code","b":[41,253],"m":"and","o":"#$FD"},{"a":34760,"t":"code","b":[5,97],"m":"ora","o":"zp_ptr_61","oa":97},{"a":34762,"t":"code","b":[141,212,231],"m":"sta","o":"vic_shadow_x_msb","oa":59348},{"a":34765,"t":"code","b":[238,103,178],"m":"inc","o":"cat_anim_timer","oa":45671},{"a":34768,"t":"code","b":[173,103,178],"m":"lda","o":"cat_anim_timer","oa":45671},{"a":34771,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":34773,"t":"code","b":[208,15],"m":"bne","o":"b_87E6","oa":34790},{"a":34775,"t":"code","b":[238,104,178],"m":"inc","o":"cat_anim_frame","oa":45672},{"a":34778,"t":"code","b":[173,104,178],"m":"lda","o":"cat_anim_frame","oa":45672},{"a":34781,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":34783,"t":"code","b":[208,5],"m":"bne","o":"b_87E6","oa":34790},{"a":34785,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":34787,"t":"code","b":[141,104,178],"m":"sta","o":"cat_anim_frame","oa":45672},{"a":34790,"l":"b_87E6","t":"code","b":[169,13],"m":"lda","o":"#$0D","x":[34773,34783]},{"a":34792,"t":"code","b":[24],"m":"clc"},{"a":34793,"t":"code","b":[109,104,178],"m":"adc","o":"cat_anim_frame","oa":45672},{"a":34796,"t":"code","b":[141,38,181],"m":"sta","o":"cat_image","oa":46374},{"a":34799,"t":"code","b":[162,5],"m":"ldx","o":"#$05"},{"a":34801,"t":"code","b":[173,108,178],"m":"lda","o":"cat_hits","oa":45676},{"a":34804,"t":"code","b":[201,8],"m":"cmp","o":"#$08"},{"a":34806,"t":"code","b":[208,15],"m":"bne","o":"b_8807","oa":34823},{"a":34808,"t":"code","b":[238,109,178],"m":"inc","o":"cat_flash_timer","oa":45677},{"a":34811,"t":"code","b":[173,109,178],"m":"lda","o":"cat_flash_timer","oa":45677},{"a":34814,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":34815,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":34816,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":34818,"t":"code","b":[168],"m":"tay"},{"a":34819,"t":"code","b":[185,223,181],"m":"lda","o":"tbl_pulse_blue,y","oa":46559},{"a":34822,"t":"code","b":[170],"m":"tax"},{"a":34823,"l":"b_8807","t":"code","b":[142,236,231],"m":"stx","o":"vic_shadow_spr1_colour","oa":59372,"x":[34806]},{"a":34826,"t":"code","b":[173,182,137],"m":"lda","o":"cat_shield_time","oa":35254},{"a":34829,"t":"code","b":[240,15],"m":"beq","o":"r_881E","oa":34846},{"a":34831,"t":"code","b":[238,184,137],"m":"inc","o":"cat_shield_blink","oa":35256},{"a":34834,"t":"code","b":[173,184,137],"m":"lda","o":"cat_shield_blink","oa":35256},{"a":34837,"t":"code","b":[41,2],"m":"and","o":"#$02"},{"a":34839,"t":"code","b":[208,5],"m":"bne","o":"r_881E","oa":34846},{"a":34841,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":34843,"t":"code","b":[141,236,231],"m":"sta","o":"vic_shadow_spr1_colour","oa":59372},{"a":34846,"l":"r_881E","t":"code","b":[96],"m":"rts","x":[34829,34839,34850]},{"a":34847,"l":"fire_cat_shot","c":"The cat's shot, every frame from $6433 and $6597 while the catelite is owned ($B234) and the cat's fire bit (bit 4 of $B23E) is down: first its spray ($8558); then, if slot 2 of the shot table ($0498-$04A3) is free, a shot from the cat's column ($B261 - 8)/4 and row ($B262 - $44)/8, moving the way the Wiz last spun, or while the cat is steered ($B26A = 0) the way it moves ($B263), with character $B8D3[($B262 + 4) AND 7] and colour 7 (blazers: character + 3, colour 12, byte 10 set). Unlike the Wiz, the cat fires again whenever its slot is free while fire is held. Sound 0, or 4 on its last life ($B26C = 8).","t":"code","b":[173,52,178],"m":"lda","o":"weapon_catelite","oa":45620,"x":[25651,26007]},{"a":34850,"t":"code","b":[240,250],"m":"beq","o":"r_881E","oa":34846},{"a":34852,"t":"code","b":[173,62,178],"m":"lda","o":"cat_input","oa":45630},{"a":34855,"t":"code","b":[41,16],"m":"and","o":"#$10"},{"a":34857,"t":"code","b":[240,1],"m":"beq","o":"b_882C","oa":34860},{"a":34859,"t":"code","b":[96],"m":"rts"},{"a":34860,"l":"b_882C","t":"code","b":[32,88,133],"m":"jsr","o":"fire_cat_spray","oa":34136,"x":[34857]},{"a":34863,"t":"code","b":[173,156,4],"m":"lda","o":"cat_shot_char","oa":1180},{"a":34866,"t":"code","b":[240,1],"m":"beq","o":"b_8835","oa":34869},{"a":34868,"t":"code","b":[96],"m":"rts"},{"a":34869,"l":"b_8835","t":"code","b":[173,98,178],"m":"lda","o":"cat_y","oa":45666,"x":[34866]},{"a":34872,"t":"code","b":[56],"m":"sec"},{"a":34873,"t":"code","b":[233,68],"m":"sbc","o":"#$44"},{"a":34875,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":34876,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":34877,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":34878,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":34880,"t":"code","b":[173,97,178],"m":"lda","o":"cat_x","oa":45665},{"a":34883,"t":"code","b":[56],"m":"sec"},{"a":34884,"t":"code","b":[233,8],"m":"sbc","o":"#$08"},{"a":34886,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":34887,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":34888,"t":"code","b":[141,152,4],"m":"sta","o":"cat_shot_column","oa":1176},{"a":34891,"t":"code","b":[165,97],"m":"lda","o":"zp_ptr_61","oa":97},{"a":34893,"t":"code","b":[141,153,4],"m":"sta","o":"cat_shot_row","oa":1177},{"a":34896,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":34898,"t":"code","b":[172,29,178],"m":"ldy","o":"spin_last","oa":45597},{"a":34901,"t":"code","b":[48,2],"m":"bmi","o":"b_8859","oa":34905},{"a":34903,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":34905,"l":"b_8859","t":"code","b":[201,0],"m":"cmp","o":"#$00","x":[34901]},{"a":34907,"t":"code","b":[208,2],"m":"bne","o":"b_885F","oa":34911},{"a":34909,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":34911,"l":"b_885F","t":"code","b":[141,154,4],"m":"sta","o":"cat_shot_dx","oa":1178,"x":[34907]},{"a":34914,"t":"code","b":[173,106,178],"m":"lda","o":"cat_following","oa":45674},{"a":34917,"t":"code","b":[208,12],"m":"bne","o":"b_8873","oa":34931},{"a":34919,"t":"code","b":[160,1],"m":"ldy","o":"#$01"},{"a":34921,"t":"code","b":[173,99,178],"m":"lda","o":"cat_stick_dx","oa":45667},{"a":34924,"t":"code","b":[16,2],"m":"bpl","o":"b_8870","oa":34928},{"a":34926,"t":"code","b":[160,255],"m":"ldy","o":"#$FF"},{"a":34928,"l":"b_8870","t":"code","b":[140,154,4],"m":"sty","o":"cat_shot_dx","oa":1178,"x":[34924]},{"a":34931,"l":"b_8873","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[34917]},{"a":34933,"t":"code","b":[141,155,4],"m":"sta","o":"cat_shot_dy","oa":1179},{"a":34936,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":34938,"t":"code","b":[141,162,4],"m":"sta","o":"cat_shot_second_char","oa":1186},{"a":34941,"t":"code","b":[169,7],"m":"lda","o":"#$07"},{"a":34943,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":34945,"t":"code","b":[173,98,178],"m":"lda","o":"cat_y","oa":45666},{"a":34948,"t":"code","b":[24],"m":"clc"},{"a":34949,"t":"code","b":[105,4],"m":"adc","o":"#$04"},{"a":34951,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":34953,"t":"code","b":[168],"m":"tay"},{"a":34954,"t":"code","b":[185,211,184],"m":"lda","o":"tbl_shot_chars,y","oa":47315},{"a":34957,"t":"code","b":[172,54,178],"m":"ldy","o":"weapon_blazers","oa":45622},{"a":34960,"t":"code","b":[240,10],"m":"beq","o":"b_889C","oa":34972},{"a":34962,"t":"code","b":[24],"m":"clc"},{"a":34963,"t":"code","b":[105,3],"m":"adc","o":"#$03"},{"a":34965,"t":"code","b":[160,12],"m":"ldy","o":"#$0C"},{"a":34967,"t":"code","b":[132,103],"m":"sty","o":"zp_temp_67","oa":103},{"a":34969,"t":"code","b":[141,162,4],"m":"sta","o":"cat_shot_second_char","oa":1186},{"a":34972,"l":"b_889C","t":"code","b":[141,156,4],"m":"sta","o":"cat_shot_char","oa":1180,"x":[34960]},{"a":34975,"t":"code","b":[165,103],"m":"lda","o":"zp_temp_67","oa":103},{"a":34977,"t":"code","b":[141,157,4],"m":"sta","o":"cat_shot_colour","oa":1181},{"a":34980,"t":"code","b":[173,108,178],"m":"lda","o":"cat_hits","oa":45676},{"a":34983,"t":"code","b":[201,8],"m":"cmp","o":"#$08"},{"a":34985,"t":"code","b":[240,5],"m":"beq","o":"b_88B0","oa":34992},{"a":34987,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":34989,"t":"code","b":[76,83,69],"m":"jmp","o":"start_sound_effect","oa":17747},{"a":34992,"l":"b_88B0","t":"code","b":[160,4],"m":"ldy","o":"#$04","x":[34985]},{"a":34994,"t":"code","b":[76,83,69],"m":"jmp","o":"start_sound_effect","oa":17747},{"a":34997,"l":"check_cat_objects","c":"What the cat touches, from $866D: tests the point (X/2 $B261, Y $B262 + 11) against the objects through $88FA, which ends this routine when nothing is there. On a hit, Y is the object's record offset: class ($0215 + Y) below 2 is harmful and counts a hit in $89BA; class 2 is a droplet, which the cat collects (zeroing bytes $02, $1F and $20 of the record) and whose colour ($0210 + Y) decides the effect: red, green or blue (2, 5, 6) adds one to the cauldron counter $B12B + $B194[level $B128] and scores through $710B with A = 5; other colours go to $8902. Other classes, such as the pearls (5) the Wiz collects, are ignored.","t":"code","b":[173,98,178],"m":"lda","o":"cat_y","oa":45666,"x":[34413]},{"a":35000,"t":"code","b":[24],"m":"clc"},{"a":35001,"t":"code","b":[105,11],"m":"adc","o":"#$0B"},{"a":35003,"t":"code","b":[168],"m":"tay"},{"a":35004,"t":"code","b":[173,97,178],"m":"lda","o":"cat_x","oa":45665},{"a":35007,"t":"code","b":[32,250,136],"m":"jsr","o":"test_cat_point","oa":35066},{"a":35010,"t":"code","b":[185,21,2],"m":"lda","o":"alien_state,y","oa":533},{"a":35013,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":35015,"t":"code","b":[48,45],"m":"bmi","o":"b_88F6","oa":35062},{"a":35017,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":35019,"t":"code","b":[208,40],"m":"bne","o":"r_88F5","oa":35061},{"a":35021,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":35023,"t":"code","b":[153,2,2],"m":"sta","o":"alien_line,y","oa":514},{"a":35026,"t":"code","b":[153,32,2],"m":"sta","o":"alien_box_bottom,y","oa":544},{"a":35029,"t":"code","b":[153,31,2],"m":"sta","o":"alien_box_top,y","oa":543},{"a":35032,"t":"code","b":[185,16,2],"m":"lda","o":"alien_colour,y","oa":528},{"a":35035,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":35037,"t":"code","b":[240,8],"m":"beq","o":"b_88E7","oa":35047},{"a":35039,"t":"code","b":[201,5],"m":"cmp","o":"#$05"},{"a":35041,"t":"code","b":[240,4],"m":"beq","o":"b_88E7","oa":35047},{"a":35043,"t":"code","b":[201,6],"m":"cmp","o":"#$06"},{"a":35045,"t":"code","b":[208,27],"m":"bne","o":"apply_droplet_effect","oa":35074},{"a":35047,"l":"b_88E7","t":"code","b":[172,40,177],"m":"ldy","o":"current_level","oa":45352,"x":[35037,35041]},{"a":35050,"t":"code","b":[190,148,177],"m":"ldx","o":"level_cauldron,y","oa":45460},{"a":35053,"t":"code","b":[254,43,177],"m":"inc","o":"cauldron_red,x","oa":45355},{"a":35056,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":35058,"t":"code","b":[32,11,113],"m":"jsr","o":"add_score","oa":28939},{"a":35061,"l":"r_88F5","t":"code","b":[96],"m":"rts","x":[35019]},{"a":35062,"l":"b_88F6","t":"code","b":[238,186,137],"m":"inc","o":"cat_hit","oa":35258,"x":[35015]},{"a":35065,"t":"code","b":[96],"m":"rts"},{"a":35066,"l":"test_cat_point","c":"Calls $6FBE with X = $48 for the cat's point (A = X/2, Y). On a hit $6FBE returns straight into $88C2 with Y = the object's record; with no hit this routine drops its caller's return address (PLA, PLA) so that $88B5 ends here.","t":"code","b":[162,72],"m":"ldx","o":"#$48","x":[35007]},{"a":35068,"t":"code","b":[32,190,111],"m":"jsr","o":"test_point_hits_alien","oa":28606},{"a":35071,"t":"code","b":[104],"m":"pla"},{"a":35072,"t":"code","b":[104],"m":"pla"},{"a":35073,"t":"code","b":[96],"m":"rts"},{"a":35074,"l":"apply_droplet_effect","c":"The effect of a droplet the cat catches whose colour ($0210 + Y, in A) is not red, green or blue: white (1) gives the current player an extra Wizball (INC $B277 + $BFD9, sound $11); purple (4) makes the mutant cat ($861A = 1, and $B26C = 8, one hit from its end); light blue ($0E) starts the filth raid ($A133 = 6, $B8F1 = 1, tune 5 through $45F1); black (0) starts freaky bits ($8959 = 1, one flash frame in $895A, colours redrawn by $7D1A); any other colour (the manual's indestructacat is grey) sets $B26C = $80, so the cat takes 128 hits before its nine lives start to count, silently while $B26C is negative ($89A8).","t":"code","b":[201,1],"m":"cmp","o":"#$01","x":[35045]},{"a":35076,"t":"code","b":[240,15],"m":"beq","o":"b_8915","oa":35093},{"a":35078,"t":"code","b":[201,4],"m":"cmp","o":"#$04"},{"a":35080,"t":"code","b":[240,28],"m":"beq","o":"b_8926","oa":35110},{"a":35082,"t":"code","b":[201,14],"m":"cmp","o":"#$0E"},{"a":35084,"t":"code","b":[240,35],"m":"beq","o":"b_8931","oa":35121},{"a":35086,"t":"code","b":[201,0],"m":"cmp","o":"#$00"},{"a":35088,"t":"code","b":[208,14],"m":"bne","o":"b_8920","oa":35104},{"a":35090,"t":"code","b":[76,65,137],"m":"jmp","o":"j_8941","oa":35137},{"a":35093,"l":"b_8915","t":"code","b":[174,217,191],"m":"ldx","o":"side_playing","oa":49113,"x":[35076]},{"a":35096,"t":"code","b":[254,119,178],"m":"inc","o":"large_font_ink_mask,x","oa":45687},{"a":35099,"t":"code","b":[160,17],"m":"ldy","o":"#$11"},{"a":35101,"t":"code","b":[76,83,69],"m":"jmp","o":"start_sound_effect","oa":17747},{"a":35104,"l":"b_8920","t":"code","b":[169,128],"m":"lda","o":"#$80","x":[35088]},{"a":35106,"t":"code","b":[141,108,178],"m":"sta","o":"cat_hits","oa":45676},{"a":35109,"t":"code","b":[96],"m":"rts"},{"a":35110,"l":"b_8926","t":"code","b":[169,1],"m":"lda","o":"#$01","x":[35080]},{"a":35112,"t":"code","b":[141,26,134],"m":"sta","o":"mutant_cat","oa":34330},{"a":35115,"t":"code","b":[169,8],"m":"lda","o":"#$08"},{"a":35117,"t":"code","b":[141,108,178],"m":"sta","o":"cat_hits","oa":45676},{"a":35120,"t":"code","b":[96],"m":"rts"},{"a":35121,"l":"b_8931","t":"code","b":[169,6],"m":"lda","o":"#$06","x":[35084]},{"a":35123,"t":"code","b":[141,51,161],"m":"sta","o":"police_queue","oa":41267},{"a":35126,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":35128,"t":"code","b":[141,241,184],"m":"sta","o":"music_voices","oa":47345},{"a":35131,"t":"code","b":[160,5],"m":"ldy","o":"#$05"},{"a":35133,"t":"code","b":[32,241,69],"m":"jsr","o":"start_tune","oa":17905},{"a":35136,"t":"code","b":[96],"m":"rts"},{"a":35137,"l":"j_8941","t":"code","b":[169,1],"m":"lda","o":"#$01","x":[35090]},{"a":35139,"t":"code","b":[141,89,137],"m":"sta","o":"freaky_bits","oa":35161},{"a":35142,"t":"code","b":[141,90,137],"m":"sta","o":"freaky_flash_frames","oa":35162},{"a":35145,"t":"code","b":[32,26,125],"m":"jsr","o":"set_landscape_colours","oa":32026},{"a":35148,"t":"code","b":[96],"m":"rts"},{"a":35149,"l":"get_scenery_colour","c":"Returns in A the colour for scenery characters in colour RAM: 8 (multicolour with black) while freaky bits is on ($8959), otherwise the level's colour $B27F. Called from $70BD, $70CD and $9B70.","t":"code","b":[173,89,137],"m":"lda","o":"freaky_bits","oa":35161,"x":[28861,28877,39792]},{"a":35152,"t":"code","b":[208,4],"m":"bne","o":"b_8956","oa":35158},{"a":35154,"t":"code","b":[173,127,178],"m":"lda","o":"landscape_colour_3","oa":45695},{"a":35157,"t":"code","b":[96],"m":"rts"},{"a":35158,"l":"b_8956","t":"code","b":[169,8],"m":"lda","o":"#$08","x":[35152]},{"a":35160,"t":"code","b":[96],"m":"rts"},{"a":35161,"l":"freaky_bits","c":"Freaky bits flag: 1 after the cat catches a black droplet ($8943). While set, scenery is coloured black ($894D, $7D1A) and band $89BB forces $D022/$D023 to black. Cleared by $8040, $647E and $9FA2 (read at $9F9B).","t":"byte","b":[0],"x":[25726,32031,32069,32867,35139,35149,35330,40859,40866]},{"a":35162,"l":"freaky_flash_frames","c":"Frames left in which band $89BB shows the real scenery colours ($B27D/$B27E) while freaky bits is on: 3 each time the Wizball bumps into scenery ($83BC), 1 when freaky bits starts ($8946); counted down at $8A18.","t":"byte","b":[0],"x":[33724,35142,35335,35352]},{"a":35163,"l":"update_cat_shield","c":"The cat's shield and hits, from $8670. While $89B6 (seconds of shield left) is non-zero it counts down once every 50 frames ($89B7), plays the warning sound $13 once when it drops below 8 ($89B9), and ends below 5. A hit this frame ($89BA, set by $88F6 and $9BB1) then costs 8 seconds of shield, or without a shield one of the cat's nine lives: $B26C + 1, with sound 4 unless $B26C is negative (indestructacat).","t":"code","b":[173,182,137],"m":"lda","o":"cat_shield_time","oa":35254,"x":[34416]},{"a":35166,"t":"code","b":[240,50],"m":"beq","o":"b_8992","oa":35218},{"a":35168,"t":"code","b":[238,183,137],"m":"inc","o":"cat_shield_frames","oa":35255},{"a":35171,"t":"code","b":[173,183,137],"m":"lda","o":"cat_shield_frames","oa":35255},{"a":35174,"t":"code","b":[201,50],"m":"cmp","o":"#$32"},{"a":35176,"t":"code","b":[208,8],"m":"bne","o":"b_8972","oa":35186},{"a":35178,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":35180,"t":"code","b":[141,183,137],"m":"sta","o":"cat_shield_frames","oa":35255},{"a":35183,"t":"code","b":[206,182,137],"m":"dec","o":"cat_shield_time","oa":35254},{"a":35186,"l":"b_8972","t":"code","b":[173,185,137],"m":"lda","o":"cat_shield_warned","oa":35257,"x":[35176]},{"a":35189,"t":"code","b":[208,15],"m":"bne","o":"b_8986","oa":35206},{"a":35191,"t":"code","b":[173,182,137],"m":"lda","o":"cat_shield_time","oa":35254},{"a":35194,"t":"code","b":[201,8],"m":"cmp","o":"#$08"},{"a":35196,"t":"code","b":[16,8],"m":"bpl","o":"b_8986","oa":35206},{"a":35198,"t":"code","b":[160,19],"m":"ldy","o":"#$13"},{"a":35200,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":35203,"t":"code","b":[238,185,137],"m":"inc","o":"cat_shield_warned","oa":35257},{"a":35206,"l":"b_8986","t":"code","b":[173,182,137],"m":"lda","o":"cat_shield_time","oa":35254,"x":[35189,35196]},{"a":35209,"t":"code","b":[201,5],"m":"cmp","o":"#$05"},{"a":35211,"t":"code","b":[16,5],"m":"bpl","o":"b_8992","oa":35218},{"a":35213,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":35215,"t":"code","b":[141,182,137],"m":"sta","o":"cat_shield_time","oa":35254},{"a":35218,"l":"b_8992","t":"code","b":[173,186,137],"m":"lda","o":"cat_hit","oa":35258,"x":[35166,35211]},{"a":35221,"t":"code","b":[208,1],"m":"bne","o":"b_8998","oa":35224},{"a":35223,"t":"code","b":[96],"m":"rts"},{"a":35224,"l":"b_8998","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[35221]},{"a":35226,"t":"code","b":[141,186,137],"m":"sta","o":"cat_hit","oa":35258},{"a":35229,"t":"code","b":[173,182,137],"m":"lda","o":"cat_shield_time","oa":35254},{"a":35232,"t":"code","b":[208,13],"m":"bne","o":"b_89AF","oa":35247},{"a":35234,"t":"code","b":[238,108,178],"m":"inc","o":"cat_hits","oa":45676},{"a":35237,"t":"code","b":[173,108,178],"m":"lda","o":"cat_hits","oa":45676},{"a":35240,"t":"code","b":[48,11],"m":"bmi","o":"r_89B5","oa":35253},{"a":35242,"t":"code","b":[160,4],"m":"ldy","o":"#$04"},{"a":35244,"t":"code","b":[76,83,69],"m":"jmp","o":"start_sound_effect","oa":17747},{"a":35247,"l":"b_89AF","t":"code","b":[56],"m":"sec","x":[35232]},{"a":35248,"t":"code","b":[233,8],"m":"sbc","o":"#$08"},{"a":35250,"t":"code","b":[141,182,137],"m":"sta","o":"cat_shield_time","oa":35254},{"a":35253,"l":"r_89B5","t":"code","b":[96],"m":"rts","x":[35240]},{"a":35254,"l":"cat_shield_time","c":"Seconds of shield left for the cat: 40 ($28) from the shields icon ($73B5), 8 fewer for each hit ($89B2); counted down by $895B and cleared below 5, by $8640 without a cat, and at $AB17. While non-zero the cat blinks ($880A).","t":"byte","b":[0],"x":[29621,34382,34826,35163,35183,35191,35206,35215,35229,35250,43799]},{"a":35255,"l":"cat_shield_frames","c":"Frame counter of the cat's shield: $895B takes a second off $89B6 each time it reaches 50; zeroed by the shields icon ($73BD).","t":"byte","b":[0],"x":[29629,35168,35171,35180]},{"a":35256,"l":"cat_shield_blink","c":"Blink counter of the cat's shield, incremented at $880F; the cat is drawn black while its bit 1 is clear. The shields icon starts it at $34 ($73CB).","t":"byte","b":[0],"x":[29643,34831,34834]},{"a":35257,"l":"cat_shield_warned","c":"Set once the cat's shield warning (sound $13) has played ($8983); cleared by the shields icon ($73C3).","t":"byte","b":[0],"x":[29635,35186,35203]},{"a":35258,"l":"cat_hit","c":"The cat was hit this frame: incremented at $88F6 (a harmful object) and $9BB1; $895B clears it and takes a shield chunk or a life.","t":"byte","b":[0],"x":[35062,35218,35226,39857]},{"a":35259,"l":"band_icon_bar","c":"Display-list band at raster line $14 (list $B3E2): the icon bar, seven multicolour sprites in the top border (opened by $8BBB). Positions and colours of sprites 0-7 from $B4C6-$B4DD (in play X $58 to $E4 and $100, 28 apart, Y $1A, colour $0E), multicolour 0 blue (6), or red (2) while $B074 is set, multicolour 1 white; $D018 = $B0, screen $EC00, so the icon shapes are the sprite pointers $EFF8-$EFFE (characters $C000 are not displayed here); X bit 8 for sprite 6 only, sprites 0-6 on, none widened. Then $7269 prepares next frame's icon colours (the lit icon $B258 cycling) and $67A1 colour-cycles the current player's score label. With freaky bits ($8959) it sets $D022/$D023, the landscape's two shared colours, to $B27D/$B27E while $895A counts down, else to black.","t":"code","b":[162,8],"m":"ldx","o":"#$08"},{"a":35261,"l":"b_89BD","t":"code","b":[189,197,180],"m":"lda","o":"icon_sprite_positions_base,x","oa":46277,"x":[35280]},{"a":35264,"t":"code","b":[157,255,207],"m":"sta","o":"vic_regs_minus_1,x","oa":53247},{"a":35267,"t":"code","b":[189,205,180],"m":"lda","o":"icon_sprite_positions_hi,x","oa":46285},{"a":35270,"t":"code","b":[157,7,208],"m":"sta","o":"vic_sprite3_y,x"},{"a":35273,"t":"code","b":[189,213,180],"m":"lda","o":"icon_colours_base,x","oa":46293},{"a":35276,"t":"code","b":[157,38,208],"m":"sta","o":"vic_sprite_mc1,x"},{"a":35279,"t":"code","b":[202],"m":"dex"},{"a":35280,"t":"code","b":[208,235],"m":"bne","o":"b_89BD","oa":35261},{"a":35282,"t":"code","b":[169,6],"m":"lda","o":"#$06"},{"a":35284,"t":"code","b":[172,116,176],"m":"ldy","o":"lab_icon_mode","oa":45172},{"a":35287,"t":"code","b":[240,2],"m":"beq","o":"b_89DB","oa":35291},{"a":35289,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":35291,"l":"b_89DB","t":"code","b":[141,37,208],"m":"sta","o":"vic_sprite_mc0","x":[35287]},{"a":35294,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":35296,"t":"code","b":[141,38,208],"m":"sta","o":"vic_sprite_mc1"},{"a":35299,"t":"code","b":[169,176],"m":"lda","o":"#$B0"},{"a":35301,"t":"code","b":[141,24,208],"m":"sta","o":"vic_memory"},{"a":35304,"t":"code","b":[169,64],"m":"lda","o":"#$40"},{"a":35306,"t":"code","b":[141,16,208],"m":"sta","o":"vic_sprite_x_msb"},{"a":35309,"t":"code","b":[169,127],"m":"lda","o":"#$7F"},{"a":35311,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":35314,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":35316,"t":"code","b":[141,29,208],"m":"sta","o":"vic_sprite_expand_x"},{"a":35319,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":35321,"t":"code","b":[141,28,208],"m":"sta","o":"vic_sprite_multicolour"},{"a":35324,"t":"code","b":[32,105,114],"m":"jsr","o":"flash_lit_icon","oa":29289},{"a":35327,"t":"code","b":[32,161,103],"m":"jsr","o":"cycle_hud_colours","oa":26529},{"a":35330,"t":"code","b":[173,89,137],"m":"lda","o":"freaky_bits","oa":35161},{"a":35333,"t":"code","b":[240,20],"m":"beq","o":"r_8A1B","oa":35355},{"a":35335,"t":"code","b":[173,90,137],"m":"lda","o":"freaky_flash_frames","oa":35162},{"a":35338,"t":"code","b":[240,16],"m":"beq","o":"b_8A1C","oa":35356},{"a":35340,"t":"code","b":[173,125,178],"m":"lda","o":"landscape_colour_1","oa":45693},{"a":35343,"t":"code","b":[141,34,208],"m":"sta","o":"vic_background1"},{"a":35346,"t":"code","b":[173,126,178],"m":"lda","o":"landscape_colour_2","oa":45694},{"a":35349,"t":"code","b":[141,35,208],"m":"sta","o":"vic_background2"},{"a":35352,"t":"code","b":[206,90,137],"m":"dec","o":"freaky_flash_frames","oa":35162},{"a":35355,"l":"r_8A1B","t":"code","b":[96],"m":"rts","x":[35333]},{"a":35356,"l":"b_8A1C","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[35338]},{"a":35358,"t":"code","b":[141,34,208],"m":"sta","o":"vic_background1"},{"a":35361,"t":"code","b":[141,35,208],"m":"sta","o":"vic_background2"},{"a":35364,"t":"code","b":[96],"m":"rts"},{"a":35365,"l":"band_landscape","c":"Display-list band at raster line $41 (list $B3E2): the landscape begins, below the two score rows. $D018 = $8E OR $B1FD: the landscape screen $E000, $E400 or $E800 (in play-start.vsf the same scenery one column apart, so a coarse scroll step is a change of screen) and the level character set at $F800. $D016 = 7 - $B1FC (the fine horizontal scroll, the world X $B1F2 AND 7), multicolour, 38 columns, OR $AB9B (8, 40 columns, when set at $AB09). $D011 back to 25 rows with Y scroll 3, undoing $8BBB. Background $D021 = $B25C AND $7F, which steps one colour a frame while non-zero (the smart bomb's flash from $7396, and $64CA's).","t":"code","b":[173,253,177],"m":"lda","o":"screen_shown","oa":45565},{"a":35368,"t":"code","b":[9,142],"m":"ora","o":"#$8E"},{"a":35370,"t":"code","b":[141,24,208],"m":"sta","o":"vic_memory"},{"a":35373,"t":"code","b":[173,252,177],"m":"lda","o":"scroll_fine_bits","oa":45564},{"a":35376,"t":"code","b":[73,7],"m":"eor","o":"#$07"},{"a":35378,"t":"code","b":[9,16],"m":"ora","o":"#$10"},{"a":35380,"t":"code","b":[13,155,171],"m":"ora","o":"lab_column_mode","oa":43931},{"a":35383,"t":"code","b":[141,22,208],"m":"sta","o":"vic_control2"},{"a":35386,"t":"code","b":[173,17,208],"m":"lda","o":"vic_control1"},{"a":35389,"t":"code","b":[41,16],"m":"and","o":"#$10"},{"a":35391,"t":"code","b":[9,11],"m":"ora","o":"#$0B"},{"a":35393,"t":"code","b":[141,17,208],"m":"sta","o":"vic_control1"},{"a":35396,"t":"code","b":[173,92,178],"m":"lda","o":"background_flash","oa":45660},{"a":35399,"t":"code","b":[41,127],"m":"and","o":"#$7F"},{"a":35401,"t":"code","b":[240,3],"m":"beq","o":"b_8A4E","oa":35406},{"a":35403,"t":"code","b":[238,92,178],"m":"inc","o":"background_flash","oa":45660},{"a":35406,"l":"b_8A4E","t":"code","b":[141,33,208],"m":"sta","o":"vic_background0","x":[35401]},{"a":35409,"t":"code","b":[96],"m":"rts"},{"a":35410,"l":"band_play_sprites","c":"Display-list band at raster line $30 (list $B3E2), above the score rows: $D018 = $8C (screen $E000, characters $F000: the score line in the text font). Loads the play sprites from the VIC shadow at $E7C4: enable $E7D9, positions, $D010, colours $E7EB-$E7F2, multicolours $E7E9/$E7EA, Y-expand $E7DB OR $B1B1, X-expand $B1B1, multicolour select $B1B2, priority $E7DF; the pointers of sprites 1-7 ($B526-$B52C) go to the landscape screen in use, whose page ($E3, $E7 or $EB from $B1FD) is patched into $8A90, $8B00, $8B1A and $8B3E. Sprite 0 serves three times down the screen: here it is the beam's upper part ($B8DE, colour $B8E0) 23 lines above the Wizball, and the raster lines of the next two bands are written into the list: $B3F6 = Y - 2 for $8B0F, $B3FA = Y + 20 for $8B22 (in a tube, (Y AND $F8) + 20). Ends with the NMI check at $8B04.","t":"code","b":[169,140],"m":"lda","o":"#$8C"},{"a":35412,"t":"code","b":[141,24,208],"m":"sta","o":"vic_memory"},{"a":35415,"t":"code","b":[173,217,231],"m":"lda","o":"vic_shadow_sprite_on","oa":59353},{"a":35418,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":35421,"t":"code","b":[173,253,177],"m":"lda","o":"screen_shown","oa":45565},{"a":35424,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":35425,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":35426,"t":"code","b":[9,227],"m":"ora","o":"#$E3"},{"a":35428,"t":"code","b":[141,0,139],"m":"sta","o":"sprite_ptrs_page","oa":35584},{"a":35431,"t":"code","b":[141,144,138],"m":"sta","o":"beam_top_ptr_page","oa":35472},{"a":35434,"t":"code","b":[141,26,139],"m":"sta","o":"wizball_ptr_page","oa":35610},{"a":35437,"t":"code","b":[141,62,139],"m":"sta","o":"beam_bottom_ptr_page","oa":35646},{"a":35440,"t":"code","b":[173,196,231],"m":"lda","o":"vic_shadow_spr0_x","oa":59332},{"a":35443,"t":"code","b":[141,0,208],"m":"sta","o":"vic_sprite0_x"},{"a":35446,"t":"code","b":[173,197,231],"m":"lda","o":"vic_shadow_spr0_y","oa":59333},{"a":35449,"t":"code","b":[56],"m":"sec"},{"a":35450,"t":"code","b":[233,23],"m":"sbc","o":"#$17"},{"a":35452,"t":"code","b":[141,1,208],"m":"sta","o":"vic_sprite0_y"},{"a":35455,"t":"code","b":[173,212,231],"m":"lda","o":"vic_shadow_x_msb","oa":59348},{"a":35458,"t":"code","b":[141,16,208],"m":"sta","o":"vic_sprite_x_msb"},{"a":35461,"t":"code","b":[173,224,184],"m":"lda","o":"beam_colour","oa":47328},{"a":35464,"t":"code","b":[141,39,208],"m":"sta","o":"vic_sprite0_colour"},{"a":35467,"t":"code","b":[173,222,184],"m":"lda","o":"beam_image_upper","oa":47326},{"a":35470,"t":"code","b":[141,248,227],"m":"sta","o":"sprite_ptrs_e000","oa":58360},{"a":35472,"t":"note","l":"beam_top_ptr_page","c":"High byte of STA $E3F8 at $8A8E, rewritten by $8A67 with $E3 OR ($B1FD >> 2): the beam's upper shape goes to sprite 0's pointer in the landscape screen in use. The STA at $8A91 writes $E3F8 as well, for the score rows, which come from screen $E000.","note":"inside the item at $8A8E","x":[35431]},{"a":35473,"t":"code","b":[141,248,227],"m":"sta","o":"sprite_ptrs_e000","oa":58360},{"a":35476,"t":"code","b":[173,233,231],"m":"lda","o":"vic_shadow_spr_mc0","oa":59369},{"a":35479,"t":"code","b":[141,37,208],"m":"sta","o":"vic_sprite_mc0"},{"a":35482,"t":"code","b":[173,234,231],"m":"lda","o":"vic_shadow_spr_mc1","oa":59370},{"a":35485,"t":"code","b":[141,38,208],"m":"sta","o":"vic_sprite_mc1"},{"a":35488,"t":"code","b":[173,219,231],"m":"lda","o":"vic_shadow_y_expand","oa":59355},{"a":35491,"t":"code","b":[13,177,177],"m":"ora","o":"landscape_sprite_expand","oa":45489},{"a":35494,"t":"code","b":[141,23,208],"m":"sta","o":"vic_sprite_expand_y"},{"a":35497,"t":"code","b":[173,177,177],"m":"lda","o":"landscape_sprite_expand","oa":45489},{"a":35500,"t":"code","b":[141,29,208],"m":"sta","o":"vic_sprite_expand_x"},{"a":35503,"t":"code","b":[173,178,177],"m":"lda","o":"landscape_sprite_multicolour","oa":45490},{"a":35506,"t":"code","b":[141,28,208],"m":"sta","o":"vic_sprite_multicolour"},{"a":35509,"t":"code","b":[173,223,231],"m":"lda","o":"vic_shadow_priority","oa":59359},{"a":35512,"t":"code","b":[141,27,208],"m":"sta","o":"vic_sprite_priority"},{"a":35515,"t":"code","b":[174,197,231],"m":"ldx","o":"vic_shadow_spr0_y","oa":59333},{"a":35518,"t":"code","b":[202],"m":"dex"},{"a":35519,"t":"code","b":[202],"m":"dex"},{"a":35520,"t":"code","b":[142,246,179],"m":"stx","o":"play_list_wizball_line","oa":46070},{"a":35523,"t":"code","b":[173,197,231],"m":"lda","o":"vic_shadow_spr0_y","oa":59333},{"a":35526,"t":"code","b":[24],"m":"clc"},{"a":35527,"t":"code","b":[105,20],"m":"adc","o":"#$14"},{"a":35529,"t":"code","b":[141,250,179],"m":"sta","o":"play_list_below_wizball_line","oa":46074},{"a":35532,"t":"code","b":[173,19,178],"m":"lda","o":"tube_timer","oa":45587},{"a":35535,"t":"code","b":[240,11],"m":"beq","o":"b_8ADC","oa":35548},{"a":35537,"t":"code","b":[173,197,231],"m":"lda","o":"vic_shadow_spr0_y","oa":59333},{"a":35540,"t":"code","b":[41,248],"m":"and","o":"#$F8"},{"a":35542,"t":"code","b":[24],"m":"clc"},{"a":35543,"t":"code","b":[105,20],"m":"adc","o":"#$14"},{"a":35545,"t":"code","b":[141,250,179],"m":"sta","o":"play_list_below_wizball_line","oa":46074},{"a":35548,"l":"b_8ADC","t":"code","b":[162,8],"m":"ldx","o":"#$08","x":[35535]},{"a":35550,"l":"b_8ADE","t":"code","b":[189,197,231],"m":"lda","o":"vic_shadow_spr0_y,x","oa":59333,"x":[35569]},{"a":35553,"t":"code","b":[157,1,208],"m":"sta","o":"vic_sprite0_y,x"},{"a":35556,"t":"code","b":[189,203,231],"m":"lda","o":"vic_shadow_spr3_y,x","oa":59339},{"a":35559,"t":"code","b":[157,7,208],"m":"sta","o":"vic_sprite3_y,x"},{"a":35562,"t":"code","b":[189,234,231],"m":"lda","o":"vic_shadow_spr_mc1,x","oa":59370},{"a":35565,"t":"code","b":[157,38,208],"m":"sta","o":"vic_sprite_mc1,x"},{"a":35568,"t":"code","b":[202],"m":"dex"},{"a":35569,"t":"code","b":[208,235],"m":"bne","o":"b_8ADE","oa":35550},{"a":35571,"t":"code","b":[173,224,184],"m":"lda","o":"beam_colour","oa":47328},{"a":35574,"t":"code","b":[141,39,208],"m":"sta","o":"vic_sprite0_colour"},{"a":35577,"t":"code","b":[160,7],"m":"ldy","o":"#$07"},{"a":35579,"l":"b_8AFB","t":"code","b":[185,37,181],"m":"lda","o":"wizball_image,y","oa":46373,"x":[35586]},{"a":35582,"t":"code","b":[153,248,227],"m":"sta","o":"sprite_ptrs_e000,y","oa":58360},{"a":35584,"t":"note","l":"sprite_ptrs_page","c":"High byte of STA $E3F8,Y at $8AFE, rewritten by $8A64: the pointers of sprites 1-7 ($B526-$B52C) go to the landscape screen in use.","note":"inside the item at $8AFE","x":[35428]},{"a":35585,"t":"code","b":[136],"m":"dey"},{"a":35586,"t":"code","b":[208,247],"m":"bne","o":"b_8AFB","oa":35579},{"a":35588,"l":"nmi_watchdog","c":"Anti-tamper check at the end of band $8A52, in undocumented opcodes, typed as bytes because the disassembler does not decode them: A7 86 = LAX $86 (A = X = $FF, stored in $86 by the initialisation at $EC4B); DF 86 FF = DCP $FF86,X, which wraps to $0085: decrements $85 and compares it with $FF; F0 03 = BEQ $8B0E; 68 = PLA; C2 C2 = NOP #$C2. $85 is cleared by the NMI ($7C6B) and made non-zero by band $8BBB at the bottom of each frame, so the check passes only if the once-a-frame NMI came in between. If not, the PLA leaves the IRQ's JSR return address ($7C9F) short and the RTS at $8B0E jumps to $7D in the page of the X register the IRQ saved: apparently a deliberate crash. The same check is at $9287. Live: with CIA 2's interrupts switched off in play the check failed on the next frame (the PLA at $8B0B ran once) and the CPU ran into screen memory and stopped on a JAM at $EA7D.","t":"byte","b":[167,134,223,134,255,240,3,104]},{"a":35596,"t":"byte","b":[194,194]},{"a":35598,"l":"nmi_watchdog_rts","c":"RTS ending band $8A52: reached by the BEQ of the NMI check at $8B04 when the NMI has run, and after the PLA when it has not.","t":"code","b":[96],"m":"rts"},{"a":35599,"l":"band_wizball","c":"Display-list band at the raster line in $B3F6, 2 lines above the Wizball (written by $8A52): sprite 0 becomes the Wizball: Y $E7C5, shape $B525 into sprite 0's pointer of the landscape screen (page patched at $8B1A), colour $E7EB.","t":"code","b":[173,197,231],"m":"lda","o":"vic_shadow_spr0_y","oa":59333},{"a":35602,"t":"code","b":[141,1,208],"m":"sta","o":"vic_sprite0_y"},{"a":35605,"t":"code","b":[173,37,181],"m":"lda","o":"wizball_image","oa":46373},{"a":35608,"t":"code","b":[141,248,227],"m":"sta","o":"sprite_ptrs_e000","oa":58360},{"a":35610,"t":"note","l":"wizball_ptr_page","c":"High byte of STA $E3F8 at $8B18, rewritten by $8A6A: the Wizball's shape $B525 goes to sprite 0's pointer in the landscape screen in use.","note":"inside the item at $8B18","x":[35434]},{"a":35611,"t":"code","b":[173,235,231],"m":"lda","o":"vic_shadow_spr0_colour","oa":59371},{"a":35614,"t":"code","b":[141,39,208],"m":"sta","o":"vic_sprite0_colour"},{"a":35617,"t":"code","b":[96],"m":"rts"},{"a":35618,"l":"band_beam_bottom","c":"Display-list band at the raster line in $B3FA, 20 lines below the Wizball's top (written by $8A52): normally moves sprite 0 23 lines down to show the beam's lower part (shape $B8DF, pointer page patched at $8B3E, colour $B8E0). While sinking into a tube ($B213) it instead puts sprite 0 behind the scenery ($D01B = 1) from here down, so the ball disappears into the tube mouth.","t":"code","b":[173,19,178],"m":"lda","o":"tube_timer","oa":45587},{"a":35621,"t":"code","b":[240,9],"m":"beq","o":"b_8B30","oa":35632},{"a":35623,"t":"code","b":[234],"m":"nop"},{"a":35624,"t":"code","b":[234],"m":"nop"},{"a":35625,"t":"code","b":[234],"m":"nop"},{"a":35626,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":35628,"t":"code","b":[141,27,208],"m":"sta","o":"vic_sprite_priority"},{"a":35631,"t":"code","b":[96],"m":"rts"},{"a":35632,"l":"b_8B30","t":"code","b":[173,1,208],"m":"lda","o":"vic_sprite0_y","x":[35621]},{"a":35635,"t":"code","b":[24],"m":"clc"},{"a":35636,"t":"code","b":[105,23],"m":"adc","o":"#$17"},{"a":35638,"t":"code","b":[141,1,208],"m":"sta","o":"vic_sprite0_y"},{"a":35641,"t":"code","b":[173,223,184],"m":"lda","o":"beam_image_lower","oa":47327},{"a":35644,"t":"code","b":[141,248,227],"m":"sta","o":"sprite_ptrs_e000","oa":58360},{"a":35646,"t":"note","l":"beam_bottom_ptr_page","c":"High byte of STA $E3F8 at $8B3C, rewritten by $8A6D: the beam's lower shape $B8DF goes to sprite 0's pointer in the landscape screen in use.","note":"inside the item at $8B3C","x":[35437]},{"a":35647,"t":"code","b":[173,224,184],"m":"lda","o":"beam_colour","oa":47328},{"a":35650,"t":"code","b":[141,39,208],"m":"sta","o":"vic_sprite0_colour"},{"a":35653,"t":"code","b":[96],"m":"rts"},{"a":35654,"l":"band_cauldron_panel","c":"Display-list band at raster line $EE (list $B3E2), below the landscape: background black, then after 15 NOPs $D018 = $DC (screen $F400, used only for its sprite pointers at $F7F8-$F7FD inside the character set; characters $F000) and $D016 = 8. Sprites 0-2 and 4-6 take positions from $B505-$B50A and $B50D-$B512, sprites 0-5 colours from $B515-$B51A and pointers from $B51D-$B522. On: sprite 0 (the level digit, shape $A0, at X $44), sprites 1, 2 and 4 (the red, green and blue cauldrons, shapes $B9-$BB) and sprite 5 (the target cauldron, $BC, at the far right in the target colour $B51A), all at Y $F8 or $FC in the bottom border (opened by $8BBB); 1, 2, 4 and 5 multicolour with grey outlines ($0F, $0B), X bit 8 for sprite 5. Every other frame steps sprite 0's colour through eight entries of $B5CB from $770C ($770A, $770B). Then jumps to $B589.","t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":35656,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":35659,"t":"code","b":[169,220],"m":"lda","o":"#$DC"},{"a":35661,"t":"code","b":[234],"m":"nop"},{"a":35662,"t":"code","b":[234],"m":"nop"},{"a":35663,"t":"code","b":[234],"m":"nop"},{"a":35664,"t":"code","b":[234],"m":"nop"},{"a":35665,"t":"code","b":[234],"m":"nop"},{"a":35666,"t":"code","b":[234],"m":"nop"},{"a":35667,"t":"code","b":[234],"m":"nop"},{"a":35668,"t":"code","b":[234],"m":"nop"},{"a":35669,"t":"code","b":[234],"m":"nop"},{"a":35670,"t":"code","b":[234],"m":"nop"},{"a":35671,"t":"code","b":[234],"m":"nop"},{"a":35672,"t":"code","b":[234],"m":"nop"},{"a":35673,"t":"code","b":[234],"m":"nop"},{"a":35674,"t":"code","b":[234],"m":"nop"},{"a":35675,"t":"code","b":[234],"m":"nop"},{"a":35676,"t":"code","b":[141,24,208],"m":"sta","o":"vic_memory"},{"a":35679,"t":"code","b":[169,8],"m":"lda","o":"#$08"},{"a":35681,"t":"code","b":[141,22,208],"m":"sta","o":"vic_control2"},{"a":35684,"t":"code","b":[162,6],"m":"ldx","o":"#$06"},{"a":35686,"l":"b_8B66","t":"code","b":[189,4,181],"m":"lda","o":"cauldron_band_positions_base,x","oa":46340,"x":[35711]},{"a":35689,"t":"code","b":[157,255,207],"m":"sta","o":"vic_regs_minus_1,x","oa":53247},{"a":35692,"t":"code","b":[189,12,181],"m":"lda","o":"cauldron_band_positions_hi,x","oa":46348},{"a":35695,"t":"code","b":[157,7,208],"m":"sta","o":"vic_sprite3_y,x"},{"a":35698,"t":"code","b":[189,20,181],"m":"lda","o":"cauldron_band_colours_base,x","oa":46356},{"a":35701,"t":"code","b":[157,38,208],"m":"sta","o":"vic_sprite_mc1,x"},{"a":35704,"t":"code","b":[189,28,181],"m":"lda","o":"cauldron_band_images_base,x","oa":46364},{"a":35707,"t":"code","b":[157,247,247],"m":"sta","o":"bottom_ptrs_minus_1,x","oa":63479},{"a":35710,"t":"code","b":[202],"m":"dex"},{"a":35711,"t":"code","b":[208,229],"m":"bne","o":"b_8B66","oa":35686},{"a":35713,"t":"code","b":[169,54],"m":"lda","o":"#$36"},{"a":35715,"t":"code","b":[141,28,208],"m":"sta","o":"vic_sprite_multicolour"},{"a":35718,"t":"code","b":[169,55],"m":"lda","o":"#$37"},{"a":35720,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":35723,"t":"code","b":[169,32],"m":"lda","o":"#$20"},{"a":35725,"t":"code","b":[141,16,208],"m":"sta","o":"vic_sprite_x_msb"},{"a":35728,"t":"code","b":[169,15],"m":"lda","o":"#$0F"},{"a":35730,"t":"code","b":[141,37,208],"m":"sta","o":"vic_sprite_mc0"},{"a":35733,"t":"code","b":[169,11],"m":"lda","o":"#$0B"},{"a":35735,"t":"code","b":[141,38,208],"m":"sta","o":"vic_sprite_mc1"},{"a":35738,"t":"code","b":[238,10,119],"m":"inc","o":"digit_flash_frame","oa":30474},{"a":35741,"t":"code","b":[173,10,119],"m":"lda","o":"digit_flash_frame","oa":30474},{"a":35744,"t":"code","b":[41,1],"m":"and","o":"#$01"},{"a":35746,"t":"code","b":[208,3],"m":"bne","o":"b_8BA7","oa":35751},{"a":35748,"t":"code","b":[238,11,119],"m":"inc","o":"digit_flash_step","oa":30475},{"a":35751,"l":"b_8BA7","t":"code","b":[173,11,119],"m":"lda","o":"digit_flash_step","oa":30475,"x":[35746]},{"a":35754,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":35756,"t":"code","b":[24],"m":"clc"},{"a":35757,"t":"code","b":[109,12,119],"m":"adc","o":"digit_flash_offset","oa":30476},{"a":35760,"t":"code","b":[168],"m":"tay"},{"a":35761,"t":"code","b":[185,203,181],"m":"lda","o":"tbl_pulse_red,y","oa":46539},{"a":35764,"t":"code","b":[141,21,181],"m":"sta","o":"level_number_colour","oa":46357},{"a":35767,"t":"code","b":[234],"m":"nop"},{"a":35768,"t":"code","b":[76,137,181],"m":"jmp","o":"nmi_heartbeat_decrement","oa":46473},{"a":35771,"l":"band_open_border","c":"Display-list band at raster line $F7 (list $B3E2): switches $D011 to 24 rows (keeping the display-enable bit, Y scroll 3) after line 247, where a 24-row screen's bottom border would begin, and before line 251, where the 25-row one would: the VIC never switches the border on, so sprites show below and above the screen (the cauldrons and the icon bar). $8A25 puts back 25 rows. Stores that $D011 value in $85 for the NMI check at $8B04, then jumps to $B589.","t":"code","b":[173,17,208],"m":"lda","o":"vic_control1"},{"a":35774,"t":"code","b":[41,16],"m":"and","o":"#$10"},{"a":35776,"t":"code","b":[9,3],"m":"ora","o":"#$03"},{"a":35778,"t":"code","b":[141,17,208],"m":"sta","o":"vic_control1"},{"a":35781,"t":"code","b":[133,133],"m":"sta","o":"nmi_watchdog_flag","oa":133},{"a":35783,"t":"code","b":[76,137,181],"m":"jmp","o":"nmi_heartbeat_decrement","oa":46473},{"a":35786,"l":"stray_rts","c":"A stray RTS after the JMP at $8BC7: nothing reaches it.","t":"byte","b":[96]},{"a":35787,"l":"band_below_landscape","c":"Display-list band at raster line $E8 (list $B3E2), where the landscape ends: resets the play sprites' settings (priority, X bit 8, both expansions off, all multicolour), moves sprite 0 to X 0 so that the beam's lower part cannot show in the panel, and after a short delay (DEX from 1) makes the background black ($D021 = 0).","t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":35789,"t":"code","b":[141,27,208],"m":"sta","o":"vic_sprite_priority"},{"a":35792,"t":"code","b":[141,0,208],"m":"sta","o":"vic_sprite0_x"},{"a":35795,"t":"code","b":[141,16,208],"m":"sta","o":"vic_sprite_x_msb"},{"a":35798,"t":"code","b":[141,23,208],"m":"sta","o":"vic_sprite_expand_y"},{"a":35801,"t":"code","b":[141,29,208],"m":"sta","o":"vic_sprite_expand_x"},{"a":35804,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":35806,"t":"code","b":[141,28,208],"m":"sta","o":"vic_sprite_multicolour"},{"a":35809,"t":"code","b":[162,1],"m":"ldx","o":"#$01"},{"a":35811,"l":"b_8BE3","t":"code","b":[202],"m":"dex","x":[35812]},{"a":35812,"t":"code","b":[208,253],"m":"bne","o":"b_8BE3","oa":35811},{"a":35814,"t":"code","b":[142,33,208],"m":"stx","o":"vic_background0"},{"a":35817,"t":"code","b":[96],"m":"rts"},{"a":35818,"l":"move_antigrav","c":"Vertical movement with anti-grav, jumped to from $7F6A instead of the bouncing when $B232 or $AC4E is set: every third frame ($B219) down on the Wiz's stick (bit 1 of $B23F clear) adds 1 to the vertical speed $B218, up to +4, and up (bit 0) subtracts 1, down to -4; with neither the speed decays toward 0. Every frame $B20F += $B218.","t":"code","b":[238,25,178],"m":"inc","o":"antigrav_divider","oa":45593,"x":[32618]},{"a":35821,"t":"code","b":[173,25,178],"m":"lda","o":"antigrav_divider","oa":45593},{"a":35824,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":35826,"t":"code","b":[208,69],"m":"bne","o":"b_8C39","oa":35897},{"a":35828,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":35830,"t":"code","b":[141,25,178],"m":"sta","o":"antigrav_divider","oa":45593},{"a":35833,"t":"code","b":[173,63,178],"m":"lda","o":"wizball_input","oa":45631},{"a":35836,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":35838,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":35840,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":35842,"t":"code","b":[240,35],"m":"beq","o":"b_8C27","oa":35879},{"a":35844,"t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102},{"a":35846,"t":"code","b":[41,2],"m":"and","o":"#$02"},{"a":35848,"t":"code","b":[208,10],"m":"bne","o":"b_8C14","oa":35860},{"a":35850,"t":"code","b":[173,24,178],"m":"lda","o":"antigrav_vspeed","oa":45592},{"a":35853,"t":"code","b":[201,4],"m":"cmp","o":"#$04"},{"a":35855,"t":"code","b":[240,3],"m":"beq","o":"b_8C14","oa":35860},{"a":35857,"t":"code","b":[238,24,178],"m":"inc","o":"antigrav_vspeed","oa":45592},{"a":35860,"l":"b_8C14","t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102,"x":[35848,35855]},{"a":35862,"t":"code","b":[41,1],"m":"and","o":"#$01"},{"a":35864,"t":"code","b":[208,31],"m":"bne","o":"b_8C39","oa":35897},{"a":35866,"t":"code","b":[173,24,178],"m":"lda","o":"antigrav_vspeed","oa":45592},{"a":35869,"t":"code","b":[201,252],"m":"cmp","o":"#$FC"},{"a":35871,"t":"code","b":[240,24],"m":"beq","o":"b_8C39","oa":35897},{"a":35873,"t":"code","b":[206,24,178],"m":"dec","o":"antigrav_vspeed","oa":45592},{"a":35876,"t":"code","b":[76,57,140],"m":"jmp","o":"b_8C39","oa":35897},{"a":35879,"l":"b_8C27","t":"code","b":[173,24,178],"m":"lda","o":"antigrav_vspeed","oa":45592,"x":[35842]},{"a":35882,"t":"code","b":[240,13],"m":"beq","o":"b_8C39","oa":35897},{"a":35884,"t":"code","b":[206,24,178],"m":"dec","o":"antigrav_vspeed","oa":45592},{"a":35887,"t":"code","b":[201,0],"m":"cmp","o":"#$00"},{"a":35889,"t":"code","b":[16,6],"m":"bpl","o":"b_8C39","oa":35897},{"a":35891,"t":"code","b":[238,24,178],"m":"inc","o":"antigrav_vspeed","oa":45592},{"a":35894,"t":"code","b":[238,24,178],"m":"inc","o":"antigrav_vspeed","oa":45592},{"a":35897,"l":"b_8C39","t":"code","b":[173,15,178],"m":"lda","o":"wizball_y","oa":45583,"x":[35826,35864,35871,35876,35882,35889]},{"a":35900,"t":"code","b":[24],"m":"clc"},{"a":35901,"t":"code","b":[109,24,178],"m":"adc","o":"antigrav_vspeed","oa":45592},{"a":35904,"t":"code","b":[141,15,178],"m":"sta","o":"wizball_y","oa":45583},{"a":35907,"t":"code","b":[96],"m":"rts"},{"a":35908,"l":"screen_off","c":"Blanks the screen: waits for raster lines 256-275 ($6EA8), then clears the display-enable bit and raster bit 8 in $D011 (AND #$6F). Used by the screen changes ($6392, $8F61, $8F80, $9017 and others).","t":"code","b":[32,168,110],"m":"jsr","o":"wait_raster_top","oa":28328,"x":[25490,25534,26988,27544,27547,27637,36705,36736,36887,37965,43753,44440,44752]},{"a":35911,"t":"code","b":[173,17,208],"m":"lda","o":"vic_control1"},{"a":35914,"t":"code","b":[41,111],"m":"and","o":"#$6F"},{"a":35916,"t":"code","b":[141,17,208],"m":"sta","o":"vic_control1"},{"a":35919,"t":"code","b":[96],"m":"rts"},{"a":35920,"l":"screen_on","c":"Shows the screen again: waits for raster lines 256-275 ($6EA8), then sets the display-enable bit of $D011 and clears raster bit 8.","t":"code","b":[32,168,110],"m":"jsr","o":"wait_raster_top","oa":28328,"x":[25595,26905,27702,33389,36838,36964,38070,43896,44676,44876]},{"a":35923,"t":"code","b":[173,17,208],"m":"lda","o":"vic_control1"},{"a":35926,"t":"code","b":[9,16],"m":"ora","o":"#$10"},{"a":35928,"t":"code","b":[41,127],"m":"and","o":"#$7F"},{"a":35930,"t":"code","b":[141,17,208],"m":"sta","o":"vic_control1"},{"a":35933,"t":"code","b":[96],"m":"rts"},{"a":35934,"l":"fill_four_pages","c":"Fills 1,024 bytes from the page in $61 with A ($60 is set to 0; $61 ends four pages on). $8F54 clears the text screen $EC00-$EFFF with spaces this way.","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[26799,36694,38008]},{"a":35936,"t":"code","b":[132,96],"m":"sty","o":"zp_ptr_60","oa":96},{"a":35938,"t":"code","b":[162,4],"m":"ldx","o":"#$04"},{"a":35940,"l":"b_8C64","t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96,"x":[35943,35948]},{"a":35942,"t":"code","b":[136],"m":"dey"},{"a":35943,"t":"code","b":[208,251],"m":"bne","o":"b_8C64","oa":35940},{"a":35945,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":35947,"t":"code","b":[202],"m":"dex"},{"a":35948,"t":"code","b":[208,246],"m":"bne","o":"b_8C64","oa":35940},{"a":35950,"t":"code","b":[96],"m":"rts"},{"a":35951,"l":"fill_colour_ram","c":"Fills colour RAM, $D800-$DBFF, with A.","t":"code","b":[160,216],"m":"ldy","o":"#$D8","x":[26804,36702,38011]},{"a":35953,"t":"code","b":[132,97],"m":"sty","o":"zp_ptr_61","oa":97},{"a":35955,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":35957,"t":"code","b":[132,96],"m":"sty","o":"zp_ptr_60","oa":96},{"a":35959,"t":"code","b":[162,4],"m":"ldx","o":"#$04"},{"a":35961,"l":"b_8C79","t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96,"x":[35964,35969]},{"a":35963,"t":"code","b":[136],"m":"dey"},{"a":35964,"t":"code","b":[208,251],"m":"bne","o":"b_8C79","oa":35961},{"a":35966,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":35968,"t":"code","b":[202],"m":"dex"},{"a":35969,"t":"code","b":[208,246],"m":"bne","o":"b_8C79","oa":35961},{"a":35971,"t":"code","b":[96],"m":"rts"},{"a":35972,"l":"font_text_normal","c":"Makes the text font (glyphs 0-63, $F000-$F1FF) normal: if $F100, the top row of the space glyph, is non-zero the font is inverted and $8C96 inverts it back. $B276 ends up equal to $F100: 0 when normal, $FF when inverted, which $8DE4 uses to draw text into sprites in the right polarity. Called when play starts ($63EF) and from $7D13.","t":"code","b":[173,0,241],"m":"lda","o":"font_small_glyphs_20_33","oa":61696,"x":[25583,32019]},{"a":35975,"t":"code","b":[141,118,178],"m":"sta","o":"font_ink_mask","oa":45686},{"a":35978,"t":"code","b":[208,10],"m":"bne","o":"b_8C96","oa":35990},{"a":35980,"t":"code","b":[96],"m":"rts"},{"a":35981,"l":"font_text_inverted","c":"Makes the text font ($F000-$F1FF) inverted: if $F100 is 0 it inverts all 512 bytes (EOR #$FF) and stores the new $F100 in $B276. The loaded image holds the font inverted; the title page ($8F8F) and $6BAA, $946C keep it so.","t":"code","b":[173,0,241],"m":"lda","o":"font_small_glyphs_20_33","oa":61696,"x":[27562,36751,37996]},{"a":35984,"t":"code","b":[141,118,178],"m":"sta","o":"font_ink_mask","oa":45686},{"a":35987,"t":"code","b":[240,1],"m":"beq","o":"b_8C96","oa":35990},{"a":35989,"t":"code","b":[96],"m":"rts"},{"a":35990,"l":"b_8C96","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[35978,35987]},{"a":35992,"l":"b_8C98","t":"code","b":[185,0,240],"m":"lda","o":"font_small_glyphs_00_1f,y","oa":61440,"x":[36001]},{"a":35995,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":35997,"t":"code","b":[153,0,240],"m":"sta","o":"font_small_glyphs_00_1f,y","oa":61440},{"a":36000,"t":"code","b":[136],"m":"dey"},{"a":36001,"t":"code","b":[208,245],"m":"bne","o":"b_8C98","oa":35992},{"a":36003,"l":"b_8CA3","t":"code","b":[185,0,241],"m":"lda","o":"font_small_glyphs_20_33,y","oa":61696,"x":[36012]},{"a":36006,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":36008,"t":"code","b":[153,0,241],"m":"sta","o":"font_small_glyphs_20_33,y","oa":61696},{"a":36011,"t":"code","b":[136],"m":"dey"},{"a":36012,"t":"code","b":[208,245],"m":"bne","o":"b_8CA3","oa":36003},{"a":36014,"t":"code","b":[173,0,241],"m":"lda","o":"font_small_glyphs_20_33","oa":61696},{"a":36017,"t":"code","b":[141,118,178],"m":"sta","o":"font_ink_mask","oa":45686},{"a":36020,"t":"code","b":[96],"m":"rts"},{"a":36021,"l":"font_large_normal","c":"Makes the large font and logo glyphs (glyphs $40-$FF, $F200-$F7FF) normal: if $F6F0, row 0 of glyph $DE, is non-zero it inverts the six pages through $8CC7. $B277 ends up equal to $F6F0, used by $8E32 in the same way as $B276.","t":"code","b":[173,240,246],"m":"lda","o":"font_large_flag_bottoms","oa":63216,"x":[32022,36754]},{"a":36024,"t":"code","b":[141,119,178],"m":"sta","o":"large_font_ink_mask","oa":45687},{"a":36027,"t":"code","b":[208,10],"m":"bne","o":"b_8CC7","oa":36039},{"a":36029,"t":"code","b":[96],"m":"rts"},{"a":36030,"l":"font_large_inverted","c":"Makes the large font and logo glyphs ($F200-$F7FF) inverted: if $F6F0 is 0 it inverts the six pages with EOR #$FF; $8CED then stores the new $F6F0 in $B277. Called from $68A6, $6BAD, $9023 and $946F.","t":"code","b":[173,240,246],"m":"lda","o":"font_large_flag_bottoms","oa":63216,"x":[26790,27565,36899,37999]},{"a":36033,"t":"code","b":[141,119,178],"m":"sta","o":"large_font_ink_mask","oa":45687},{"a":36036,"t":"code","b":[240,1],"m":"beq","o":"b_8CC7","oa":36039},{"a":36038,"t":"code","b":[96],"m":"rts"},{"a":36039,"l":"b_8CC7","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[36027,36036]},{"a":36041,"t":"code","b":[169,242],"m":"lda","o":"#$F2"},{"a":36043,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":36045,"t":"code","b":[132,96],"m":"sty","o":"zp_ptr_60","oa":96},{"a":36047,"t":"code","b":[162,6],"m":"ldx","o":"#$06"},{"a":36049,"l":"b_8CD1","t":"code","b":[177,96],"m":"lda","o":"(zp_ptr_60),y","oa":96,"x":[36056,36061]},{"a":36051,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":36053,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":36055,"t":"code","b":[136],"m":"dey"},{"a":36056,"t":"code","b":[208,247],"m":"bne","o":"b_8CD1","oa":36049},{"a":36058,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":36060,"t":"code","b":[202],"m":"dex"},{"a":36061,"t":"code","b":[208,242],"m":"bne","o":"b_8CD1","oa":36049},{"a":36063,"t":"code","b":[76,237,140],"m":"jmp","o":"store_large_font_polarity","oa":36077},{"a":36066,"l":"dead_invert_loop","c":"Unreachable code, skipped by the JMP at $8CDF: B1 60 49 FF 91 60 C8 C0 40 D0 F5, a loop that would invert 64 more bytes at ($60), which after the six pages is $F800-$F83F.","t":"byte","b":[177,96,73,255,145,96,200,192]},{"a":36074,"t":"byte","b":[64,208,245]},{"a":36077,"l":"store_large_font_polarity","c":"Tail of $8CB5 and $8CBE after inverting the large font: $B277 = $F6F0, the font's new polarity.","t":"code","b":[173,240,246],"m":"lda","o":"font_large_flag_bottoms","oa":63216,"x":[36063]},{"a":36080,"t":"code","b":[141,119,178],"m":"sta","o":"large_font_ink_mask","oa":45687},{"a":36083,"t":"code","b":[96],"m":"rts"},{"a":36084,"l":"print_page_large","c":"Prints a text page in the large font: sets $B25E = 1 and continues as $8CFA, with X/Y = the page's address and A = its colour. Each letter becomes 2 x 2 glyphs from $B591.","t":"code","b":[134,98],"m":"stx","o":"zp_ptr_62","oa":98,"x":[26844,27675,27686,27804,28004,28015,36826,38049]},{"a":36086,"t":"code","b":[162,1],"m":"ldx","o":"#$01"},{"a":36088,"t":"code","b":[208,4],"m":"bne","o":"b_8CFE","oa":36094},{"a":36090,"l":"print_page","c":"Prints a text page: X/Y = its address (low, high), A = its colour, $B25E = 0 for the text font. A page is records of column, row, PETSCII text and $FF, ended by an extra $FF; the loop at $8D1F takes each record and $8D42 prints it. The screen is $EC00, or while $B874 is set the landscape screen in use ($E0 OR $B1FD >> 2), in which case $6732 is added to each text-font character; both are written into the code at $8D6B and $8D8E.","t":"code","b":[134,98],"m":"stx","o":"zp_ptr_62","oa":98,"x":[26415,27743,36765,36913,38034]},{"a":36092,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":36094,"l":"b_8CFE","t":"code","b":[142,94,178],"m":"stx","o":"font_large","oa":45662,"x":[36088]},{"a":36097,"t":"code","b":[132,99],"m":"sty","o":"zp_ptr_63","oa":99},{"a":36099,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":36101,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":36103,"t":"code","b":[162,236],"m":"ldx","o":"#$EC"},{"a":36105,"t":"code","b":[173,116,184],"m":"lda","o":"bonus_stage","oa":47220},{"a":36108,"t":"code","b":[240,11],"m":"beq","o":"b_8D19","oa":36121},{"a":36110,"t":"code","b":[173,253,177],"m":"lda","o":"screen_shown","oa":45565},{"a":36113,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":36114,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":36115,"t":"code","b":[9,224],"m":"ora","o":"#$E0"},{"a":36117,"t":"code","b":[170],"m":"tax"},{"a":36118,"t":"code","b":[172,50,103],"m":"ldy","o":"play_text_char_offset","oa":26418},{"a":36121,"l":"b_8D19","t":"code","b":[142,107,141],"m":"stx","o":"print_screen_page","oa":36203,"x":[36108]},{"a":36124,"t":"code","b":[140,142,141],"m":"sty","o":"print_char_offset","oa":36238},{"a":36127,"l":"b_8D1F","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[36159]},{"a":36129,"t":"code","b":[177,98],"m":"lda","o":"(zp_ptr_62),y","oa":98},{"a":36131,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":36133,"t":"code","b":[208,1],"m":"bne","o":"b_8D28","oa":36136},{"a":36135,"t":"code","b":[96],"m":"rts"},{"a":36136,"l":"b_8D28","t":"code","b":[170],"m":"tax","x":[36133]},{"a":36137,"t":"code","b":[200],"m":"iny"},{"a":36138,"t":"code","b":[177,98],"m":"lda","o":"(zp_ptr_62),y","oa":98},{"a":36140,"t":"code","b":[168],"m":"tay"},{"a":36141,"t":"code","b":[165,98],"m":"lda","o":"zp_ptr_62","oa":98},{"a":36143,"t":"code","b":[24],"m":"clc"},{"a":36144,"t":"code","b":[105,2],"m":"adc","o":"#$02"},{"a":36146,"t":"code","b":[144,2],"m":"bcc","o":"b_8D36","oa":36150},{"a":36148,"t":"code","b":[230,99],"m":"inc","o":"zp_ptr_63","oa":99},{"a":36150,"l":"b_8D36","t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98,"x":[36146]},{"a":36152,"t":"code","b":[32,66,141],"m":"jsr","o":"print_record","oa":36162},{"a":36155,"t":"code","b":[161,98],"m":"lda","o":"(zp_ptr_62,x)","oa":98},{"a":36157,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":36159,"t":"code","b":[208,222],"m":"bne","o":"b_8D1F","oa":36127},{"a":36161,"t":"code","b":[96],"m":"rts"},{"a":36162,"l":"print_record","c":"Prints one text record: column in X, row in Y, text from $62/$63 up to its $FF ($62/$63 left pointing past it). Screen address 40 x row + column on the page in $8D6B, the same offset in colour RAM ($64/$65) filled with the colour in $66. Text font: character AND #$3F plus the value in $8D8E. Large font ($B25E set): $B591[character] + $40, + $41 beside it, + $60 and + $61 below, then two columns on, one for i and l (codes 9 and 12).","t":"code","b":[134,94],"m":"stx","o":"zp_temp_5e","oa":94,"x":[36152]},{"a":36164,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":36166,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":36168,"t":"code","b":[152],"m":"tya"},{"a":36169,"t":"code","b":[10],"m":"asl","o":"a"},{"a":36170,"t":"code","b":[10],"m":"asl","o":"a"},{"a":36171,"t":"code","b":[10],"m":"asl","o":"a"},{"a":36172,"t":"code","b":[133,95],"m":"sta","o":"zp_temp_5f","oa":95},{"a":36174,"t":"code","b":[10],"m":"asl","o":"a"},{"a":36175,"t":"code","b":[38,97],"m":"rol","o":"zp_ptr_61","oa":97},{"a":36177,"t":"code","b":[10],"m":"asl","o":"a"},{"a":36178,"t":"code","b":[38,97],"m":"rol","o":"zp_ptr_61","oa":97},{"a":36180,"t":"code","b":[24],"m":"clc"},{"a":36181,"t":"code","b":[101,95],"m":"adc","o":"zp_temp_5f","oa":95},{"a":36183,"t":"code","b":[144,2],"m":"bcc","o":"b_8D5B","oa":36187},{"a":36185,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":36187,"l":"b_8D5B","t":"code","b":[24],"m":"clc","x":[36183]},{"a":36188,"t":"code","b":[101,94],"m":"adc","o":"zp_temp_5e","oa":94},{"a":36190,"t":"code","b":[144,2],"m":"bcc","o":"b_8D62","oa":36194},{"a":36192,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":36194,"l":"b_8D62","t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96,"x":[36190]},{"a":36196,"t":"code","b":[133,100],"m":"sta","o":"zp_ptr_64","oa":100},{"a":36198,"t":"code","b":[165,97],"m":"lda","o":"zp_ptr_61","oa":97},{"a":36200,"t":"code","b":[72],"m":"pha"},{"a":36201,"t":"code","b":[24],"m":"clc"},{"a":36202,"t":"code","b":[105,236],"m":"adc","o":"#$EC"},{"a":36203,"t":"note","l":"print_screen_page","c":"Operand of ADC #$EC at $8D6A, the high byte of the screen page to print on, rewritten by $8D19: $EC, or $E0/$E4/$E8 by $B1FD while $B874 is set.","note":"inside the item at $8D6A","x":[36121]},{"a":36204,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":36206,"t":"code","b":[104],"m":"pla"},{"a":36207,"t":"code","b":[24],"m":"clc"},{"a":36208,"t":"code","b":[105,216],"m":"adc","o":"#$D8"},{"a":36210,"t":"code","b":[133,101],"m":"sta","o":"zp_ptr_65","oa":101},{"a":36212,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":36214,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":36216,"l":"j_8D78","t":"code","b":[161,98],"m":"lda","o":"(zp_ptr_62,x)","oa":98,"x":[36246,36321]},{"a":36218,"t":"code","b":[230,98],"m":"inc","o":"zp_ptr_62","oa":98},{"a":36220,"t":"code","b":[208,2],"m":"bne","o":"b_8D80","oa":36224},{"a":36222,"t":"code","b":[230,99],"m":"inc","o":"zp_ptr_63","oa":99},{"a":36224,"l":"b_8D80","t":"code","b":[201,255],"m":"cmp","o":"#$FF","x":[36220]},{"a":36226,"t":"code","b":[208,1],"m":"bne","o":"b_8D85","oa":36229},{"a":36228,"t":"code","b":[96],"m":"rts"},{"a":36229,"l":"b_8D85","t":"code","b":[41,63],"m":"and","o":"#$3F","x":[36226]},{"a":36231,"t":"code","b":[174,94,178],"m":"ldx","o":"font_large","oa":45662},{"a":36234,"t":"code","b":[208,13],"m":"bne","o":"b_8D99","oa":36249},{"a":36236,"t":"code","b":[24],"m":"clc"},{"a":36237,"t":"code","b":[105,0],"m":"adc","o":"#$00"},{"a":36238,"t":"note","l":"print_char_offset","c":"Operand of ADC #$00 at $8D8D, added to every text-font character, rewritten by $8D1C: 0, or the value of $6732 while $B874 is set ($A0 in the snapshots).","note":"inside the item at $8D8D","x":[36124]},{"a":36239,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":36241,"t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102},{"a":36243,"t":"code","b":[145,100],"m":"sta","o":"(zp_ptr_64),y","oa":100},{"a":36245,"t":"code","b":[200],"m":"iny"},{"a":36246,"t":"code","b":[76,120,141],"m":"jmp","o":"j_8D78","oa":36216},{"a":36249,"l":"b_8D99","t":"code","b":[170],"m":"tax","x":[36234]},{"a":36250,"t":"code","b":[189,145,181],"m":"lda","o":"font_large_map,x","oa":46481},{"a":36253,"t":"code","b":[24],"m":"clc"},{"a":36254,"t":"code","b":[105,64],"m":"adc","o":"#$40"},{"a":36256,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":36258,"t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102},{"a":36260,"t":"code","b":[145,100],"m":"sta","o":"(zp_ptr_64),y","oa":100},{"a":36262,"t":"code","b":[189,145,181],"m":"lda","o":"font_large_map,x","oa":46481},{"a":36265,"t":"code","b":[24],"m":"clc"},{"a":36266,"t":"code","b":[105,65],"m":"adc","o":"#$41"},{"a":36268,"t":"code","b":[200],"m":"iny"},{"a":36269,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":36271,"t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102},{"a":36273,"t":"code","b":[145,100],"m":"sta","o":"(zp_ptr_64),y","oa":100},{"a":36275,"t":"code","b":[152],"m":"tya"},{"a":36276,"t":"code","b":[24],"m":"clc"},{"a":36277,"t":"code","b":[105,39],"m":"adc","o":"#$27"},{"a":36279,"t":"code","b":[168],"m":"tay"},{"a":36280,"t":"code","b":[189,145,181],"m":"lda","o":"font_large_map,x","oa":46481},{"a":36283,"t":"code","b":[24],"m":"clc"},{"a":36284,"t":"code","b":[105,96],"m":"adc","o":"#$60"},{"a":36286,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":36288,"t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102},{"a":36290,"t":"code","b":[145,100],"m":"sta","o":"(zp_ptr_64),y","oa":100},{"a":36292,"t":"code","b":[189,145,181],"m":"lda","o":"font_large_map,x","oa":46481},{"a":36295,"t":"code","b":[24],"m":"clc"},{"a":36296,"t":"code","b":[105,97],"m":"adc","o":"#$61"},{"a":36298,"t":"code","b":[200],"m":"iny"},{"a":36299,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":36301,"t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102},{"a":36303,"t":"code","b":[145,100],"m":"sta","o":"(zp_ptr_64),y","oa":100},{"a":36305,"t":"code","b":[152],"m":"tya"},{"a":36306,"t":"code","b":[56],"m":"sec"},{"a":36307,"t":"code","b":[233,39],"m":"sbc","o":"#$27"},{"a":36309,"t":"code","b":[168],"m":"tay"},{"a":36310,"t":"code","b":[224,9],"m":"cpx","o":"#$09"},{"a":36312,"t":"code","b":[240,4],"m":"beq","o":"b_8DDE","oa":36318},{"a":36314,"t":"code","b":[224,12],"m":"cpx","o":"#$0C"},{"a":36316,"t":"code","b":[208,1],"m":"bne","o":"b_8DDF","oa":36319},{"a":36318,"l":"b_8DDE","t":"code","b":[136],"m":"dey","x":[36312]},{"a":36319,"l":"b_8DDF","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[36316]},{"a":36321,"t":"code","b":[76,120,141],"m":"jmp","o":"j_8D78","oa":36216},{"a":36324,"l":"print_sprite_text","c":"Draws a text string into sprite data in the text font: X/Y = the string (ended by $FF), A = the first sprite block, $8EDB = the byte offset in it. Each character's eight bytes from $F000 ($8E0E), exclusive-ORed with $B276 so the font's polarity does not matter, go down a byte column three bytes apart; two calls of $8EDC move one column right, three characters to a sprite, then on to the next block. The title page draws \"1. 050000\" this way ($8FCF).","t":"code","b":[32,172,142],"m":"jsr","o":"set_sprite_text_dest","oa":36524,"x":[27196,36815,44612,44628]},{"a":36327,"l":"j_8DE7","t":"code","b":[32,14,142],"m":"jsr","o":"next_text_glyph","oa":36366,"x":[36363]},{"a":36330,"t":"code","b":[173,118,178],"m":"lda","o":"font_ink_mask","oa":45686},{"a":36333,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":36335,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":36337,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":36339,"l":"b_8DF3","t":"code","b":[177,100],"m":"lda","o":"(zp_ptr_64),y","oa":100,"x":[36355]},{"a":36341,"t":"code","b":[69,103],"m":"eor","o":"zp_temp_67","oa":103},{"a":36343,"t":"code","b":[129,96],"m":"sta","o":"(zp_ptr_60,x)","oa":96},{"a":36345,"t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96},{"a":36347,"t":"code","b":[24],"m":"clc"},{"a":36348,"t":"code","b":[105,3],"m":"adc","o":"#$03"},{"a":36350,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":36352,"t":"code","b":[200],"m":"iny"},{"a":36353,"t":"code","b":[192,8],"m":"cpy","o":"#$08"},{"a":36355,"t":"code","b":[208,238],"m":"bne","o":"b_8DF3","oa":36339},{"a":36357,"t":"code","b":[32,220,142],"m":"jsr","o":"advance_sprite_text_dest","oa":36572},{"a":36360,"t":"code","b":[32,220,142],"m":"jsr","o":"advance_sprite_text_dest","oa":36572},{"a":36363,"t":"code","b":[76,231,141],"m":"jmp","o":"j_8DE7","oa":36327},{"a":36366,"l":"next_text_glyph","c":"Next character of the string at $5E/$5F (index $B274, then advanced): $64/$65 = $F000 + 8 x (character AND #$3F). At the $FF end it drops its return address, which ends the caller $8DE4.","t":"code","b":[172,116,178],"m":"ldy","o":"text_char_index","oa":45684,"x":[36327]},{"a":36369,"t":"code","b":[177,94],"m":"lda","o":"(zp_temp_5e),y","oa":94},{"a":36371,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":36373,"t":"code","b":[208,3],"m":"bne","o":"b_8E1A","oa":36378},{"a":36375,"t":"code","b":[104],"m":"pla"},{"a":36376,"t":"code","b":[104],"m":"pla"},{"a":36377,"t":"code","b":[96],"m":"rts"},{"a":36378,"l":"b_8E1A","t":"code","b":[41,63],"m":"and","o":"#$3F","x":[36373]},{"a":36380,"t":"code","b":[238,116,178],"m":"inc","o":"text_char_index","oa":45684},{"a":36383,"t":"code","b":[133,100],"m":"sta","o":"zp_ptr_64","oa":100},{"a":36385,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":36387,"t":"code","b":[6,100],"m":"asl","o":"zp_ptr_64","oa":100},{"a":36389,"t":"code","b":[42],"m":"rol","o":"a"},{"a":36390,"t":"code","b":[6,100],"m":"asl","o":"zp_ptr_64","oa":100},{"a":36392,"t":"code","b":[42],"m":"rol","o":"a"},{"a":36393,"t":"code","b":[6,100],"m":"asl","o":"zp_ptr_64","oa":100},{"a":36395,"t":"code","b":[42],"m":"rol","o":"a"},{"a":36396,"t":"code","b":[24],"m":"clc"},{"a":36397,"t":"code","b":[105,240],"m":"adc","o":"#$F0"},{"a":36399,"t":"code","b":[133,101],"m":"sta","o":"zp_ptr_65","oa":101},{"a":36401,"t":"code","b":[96],"m":"rts"},{"a":36402,"l":"print_sprite_text_large","c":"Draws a text string into sprite data in the large font: X/Y = the string, A = the first sprite block. Each character is four 8 x 8 quarters from $8E59 (top left, bottom left, top right, bottom right), exclusive-ORed with $B277 and placed by $8EDC (down 8 rows, then back up and one column right), so a sprite holds one and a half characters. The title page draws the WIZBALL logo this way from the string \"#$%&'((\" at $B693, whose characters map through $B591 to the logo's glyphs ($8FBB).","t":"code","b":[32,172,142],"m":"jsr","o":"set_sprite_text_dest","oa":36524,"x":[27158,36795]},{"a":36405,"l":"j_8E35","t":"code","b":[32,89,142],"m":"jsr","o":"next_large_glyph_quarter","oa":36441,"x":[36438]},{"a":36408,"t":"code","b":[173,119,178],"m":"lda","o":"large_font_ink_mask","oa":45687},{"a":36411,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":36413,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":36415,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":36417,"l":"b_8E41","t":"code","b":[177,100],"m":"lda","o":"(zp_ptr_64),y","oa":100,"x":[36433]},{"a":36419,"t":"code","b":[69,103],"m":"eor","o":"zp_temp_67","oa":103},{"a":36421,"t":"code","b":[129,96],"m":"sta","o":"(zp_ptr_60,x)","oa":96},{"a":36423,"t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96},{"a":36425,"t":"code","b":[24],"m":"clc"},{"a":36426,"t":"code","b":[105,3],"m":"adc","o":"#$03"},{"a":36428,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":36430,"t":"code","b":[200],"m":"iny"},{"a":36431,"t":"code","b":[192,8],"m":"cpy","o":"#$08"},{"a":36433,"t":"code","b":[208,238],"m":"bne","o":"b_8E41","oa":36417},{"a":36435,"t":"code","b":[32,220,142],"m":"jsr","o":"advance_sprite_text_dest","oa":36572},{"a":36438,"t":"code","b":[76,53,142],"m":"jmp","o":"j_8E35","oa":36405},{"a":36441,"l":"next_large_glyph_quarter","c":"Next quarter of a large-font character from the string at $5E/$5F: glyph $B591[character AND #$3F], +1 for the right half (bit 1 of $B273), + $20 for the lower half (bit 0); $64/$65 = $F200 + 8 x glyph. $B273 counts the quarters 0-3 and moves on to the next character ($B274) after the fourth. At the $FF end it drops its return address, which ends $8E32.","t":"code","b":[172,116,178],"m":"ldy","o":"text_char_index","oa":45684,"x":[36405]},{"a":36444,"t":"code","b":[177,94],"m":"lda","o":"(zp_temp_5e),y","oa":94},{"a":36446,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":36448,"t":"code","b":[208,3],"m":"bne","o":"b_8E65","oa":36453},{"a":36450,"t":"code","b":[104],"m":"pla"},{"a":36451,"t":"code","b":[104],"m":"pla"},{"a":36452,"t":"code","b":[96],"m":"rts"},{"a":36453,"l":"b_8E65","t":"code","b":[41,63],"m":"and","o":"#$3F","x":[36448]},{"a":36455,"t":"code","b":[170],"m":"tax"},{"a":36456,"t":"code","b":[188,145,181],"m":"ldy","o":"font_large_map,x","oa":46481},{"a":36459,"t":"code","b":[132,100],"m":"sty","o":"zp_ptr_64","oa":100},{"a":36461,"t":"code","b":[173,115,178],"m":"lda","o":"text_quarter","oa":45683},{"a":36464,"t":"code","b":[41,2],"m":"and","o":"#$02"},{"a":36466,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":36467,"t":"code","b":[24],"m":"clc"},{"a":36468,"t":"code","b":[101,100],"m":"adc","o":"zp_ptr_64","oa":100},{"a":36470,"t":"code","b":[133,100],"m":"sta","o":"zp_ptr_64","oa":100},{"a":36472,"t":"code","b":[173,115,178],"m":"lda","o":"text_quarter","oa":45683},{"a":36475,"t":"code","b":[41,1],"m":"and","o":"#$01"},{"a":36477,"t":"code","b":[240,7],"m":"beq","o":"b_8E86","oa":36486},{"a":36479,"t":"code","b":[165,100],"m":"lda","o":"zp_ptr_64","oa":100},{"a":36481,"t":"code","b":[24],"m":"clc"},{"a":36482,"t":"code","b":[105,32],"m":"adc","o":"#$20"},{"a":36484,"t":"code","b":[133,100],"m":"sta","o":"zp_ptr_64","oa":100},{"a":36486,"l":"b_8E86","t":"code","b":[238,115,178],"m":"inc","o":"text_quarter","oa":45683,"x":[36477]},{"a":36489,"t":"code","b":[173,115,178],"m":"lda","o":"text_quarter","oa":45683},{"a":36492,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":36494,"t":"code","b":[141,115,178],"m":"sta","o":"text_quarter","oa":45683},{"a":36497,"t":"code","b":[208,8],"m":"bne","o":"b_8E9B","oa":36507},{"a":36499,"t":"code","b":[238,116,178],"m":"inc","o":"text_char_index","oa":45684},{"a":36502,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":36504,"t":"code","b":[141,115,178],"m":"sta","o":"text_quarter","oa":45683},{"a":36507,"l":"b_8E9B","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[36497]},{"a":36509,"t":"code","b":[6,100],"m":"asl","o":"zp_ptr_64","oa":100},{"a":36511,"t":"code","b":[42],"m":"rol","o":"a"},{"a":36512,"t":"code","b":[6,100],"m":"asl","o":"zp_ptr_64","oa":100},{"a":36514,"t":"code","b":[42],"m":"rol","o":"a"},{"a":36515,"t":"code","b":[6,100],"m":"asl","o":"zp_ptr_64","oa":100},{"a":36517,"t":"code","b":[42],"m":"rol","o":"a"},{"a":36518,"t":"code","b":[24],"m":"clc"},{"a":36519,"t":"code","b":[105,242],"m":"adc","o":"#$F2"},{"a":36521,"t":"code","b":[133,101],"m":"sta","o":"zp_ptr_65","oa":101},{"a":36523,"t":"code","b":[96],"m":"rts"},{"a":36524,"l":"set_sprite_text_dest","c":"Sets up $8DE4 and $8E32: the string's address X/Y into $5E/$5F, the counters $B273-$B275 to 0, and the destination $60/$61 and its column start $62/$63 = $C000 + 64 x A + $8EDB.","t":"code","b":[134,94],"m":"stx","o":"zp_temp_5e","oa":94,"x":[36324,36402]},{"a":36526,"t":"code","b":[132,95],"m":"sty","o":"zp_temp_5f","oa":95},{"a":36528,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":36530,"t":"code","b":[140,115,178],"m":"sty","o":"text_quarter","oa":45683},{"a":36533,"t":"code","b":[140,116,178],"m":"sty","o":"text_char_index","oa":45684},{"a":36536,"t":"code","b":[140,117,178],"m":"sty","o":"text_sprite_step","oa":45685},{"a":36539,"t":"code","b":[132,96],"m":"sty","o":"zp_ptr_60","oa":96},{"a":36541,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":36542,"t":"code","b":[102,96],"m":"ror","o":"zp_ptr_60","oa":96},{"a":36544,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":36545,"t":"code","b":[102,96],"m":"ror","o":"zp_ptr_60","oa":96},{"a":36547,"t":"code","b":[24],"m":"clc"},{"a":36548,"t":"code","b":[105,192],"m":"adc","o":"#$C0"},{"a":36550,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":36552,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":36554,"t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96},{"a":36556,"t":"code","b":[24],"m":"clc"},{"a":36557,"t":"code","b":[109,219,142],"m":"adc","o":"print_start_offset","oa":36571},{"a":36560,"t":"code","b":[144,4],"m":"bcc","o":"b_8ED6","oa":36566},{"a":36562,"t":"code","b":[230,99],"m":"inc","o":"zp_ptr_63","oa":99},{"a":36564,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":36566,"l":"b_8ED6","t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96,"x":[36560]},{"a":36568,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":36570,"t":"code","b":[96],"m":"rts"},{"a":36571,"l":"print_start_offset","c":"Byte offset into the first sprite block where $8EAC starts drawing text (row x 3 + column): 0 normally; $6A1B sets $2A (row 14) and $AE49 sets $21 (row 11) for a second line, and both put 0 back afterwards.","t":"byte","b":[0],"x":[27144,27163,27201,36557,44617,44633]},{"a":36572,"l":"advance_sprite_text_dest","c":"Moves the sprite-text destination $62/$63 (copied to $60/$61) on by one 8 x 8 cell: even steps (counted in $B275) go 24 bytes down (8 rows), odd steps 23 bytes back up, one column right; after six steps, three columns, it adds $3D to reach the next 64-byte sprite block.","t":"code","b":[173,117,178],"m":"lda","o":"text_sprite_step","oa":45685,"x":[36357,36360,36435]},{"a":36575,"t":"code","b":[41,1],"m":"and","o":"#$01"},{"a":36577,"t":"code","b":[240,8],"m":"beq","o":"b_8EEB","oa":36587},{"a":36579,"t":"code","b":[165,98],"m":"lda","o":"zp_ptr_62","oa":98},{"a":36581,"t":"code","b":[56],"m":"sec"},{"a":36582,"t":"code","b":[233,23],"m":"sbc","o":"#$17"},{"a":36584,"t":"code","b":[76,240,142],"m":"jmp","o":"j_8EF0","oa":36592},{"a":36587,"l":"b_8EEB","t":"code","b":[165,98],"m":"lda","o":"zp_ptr_62","oa":98,"x":[36577]},{"a":36589,"t":"code","b":[24],"m":"clc"},{"a":36590,"t":"code","b":[105,24],"m":"adc","o":"#$18"},{"a":36592,"l":"j_8EF0","t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98,"x":[36584]},{"a":36594,"t":"code","b":[238,117,178],"m":"inc","o":"text_sprite_step","oa":45685},{"a":36597,"t":"code","b":[173,117,178],"m":"lda","o":"text_sprite_step","oa":45685},{"a":36600,"t":"code","b":[201,6],"m":"cmp","o":"#$06"},{"a":36602,"t":"code","b":[208,16],"m":"bne","o":"b_8F0C","oa":36620},{"a":36604,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":36606,"t":"code","b":[141,117,178],"m":"sta","o":"text_sprite_step","oa":45685},{"a":36609,"t":"code","b":[165,98],"m":"lda","o":"zp_ptr_62","oa":98},{"a":36611,"t":"code","b":[24],"m":"clc"},{"a":36612,"t":"code","b":[105,61],"m":"adc","o":"#$3D"},{"a":36614,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":36616,"t":"code","b":[144,2],"m":"bcc","o":"b_8F0C","oa":36620},{"a":36618,"t":"code","b":[230,99],"m":"inc","o":"zp_ptr_63","oa":99},{"a":36620,"l":"b_8F0C","t":"code","b":[165,98],"m":"lda","o":"zp_ptr_62","oa":98,"x":[36602,36616]},{"a":36622,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":36624,"t":"code","b":[165,99],"m":"lda","o":"zp_ptr_63","oa":99},{"a":36626,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":36628,"t":"code","b":[96],"m":"rts"},{"a":36629,"l":"fill_sprite_blocks","c":"Fills X sprite blocks from block Y (address $C000 + 64 x Y) with A (kept in $66). Used to clear sprite shapes before drawing into them, and at $8FE3 to make three solid ones.","t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102,"x":[27147,29238,30585,33430,36784,36804,36835,36922,44592]},{"a":36631,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":36633,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":36635,"t":"code","b":[152],"m":"tya"},{"a":36636,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":36637,"t":"code","b":[102,96],"m":"ror","o":"zp_ptr_60","oa":96},{"a":36639,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":36640,"t":"code","b":[102,96],"m":"ror","o":"zp_ptr_60","oa":96},{"a":36642,"t":"code","b":[24],"m":"clc"},{"a":36643,"t":"code","b":[105,192],"m":"adc","o":"#$C0"},{"a":36645,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":36647,"l":"b_8F27","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[36670]},{"a":36649,"t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102},{"a":36651,"l":"b_8F2B","t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96,"x":[36656]},{"a":36653,"t":"code","b":[200],"m":"iny"},{"a":36654,"t":"code","b":[192,64],"m":"cpy","o":"#$40"},{"a":36656,"t":"code","b":[208,249],"m":"bne","o":"b_8F2B","oa":36651},{"a":36658,"t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96},{"a":36660,"t":"code","b":[24],"m":"clc"},{"a":36661,"t":"code","b":[105,64],"m":"adc","o":"#$40"},{"a":36663,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":36665,"t":"code","b":[144,2],"m":"bcc","o":"b_8F3D","oa":36669},{"a":36667,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":36669,"l":"b_8F3D","t":"code","b":[202],"m":"dex","x":[36665]},{"a":36670,"t":"code","b":[208,231],"m":"bne","o":"b_8F27","oa":36647},{"a":36672,"t":"code","b":[96],"m":"rts"},{"a":36673,"l":"setup_text_screen","c":"Prepares the text screen with the display off: $D011 = $0B (blank, 25 rows), $D016 = 8, $D018 = $BC (screen $EC00, characters $F000), $EC00-$EFFF filled with spaces (sprite pointers included), sprites off ($D015 = 0), colour RAM black ($8C6F).","t":"code","b":[169,11],"m":"lda","o":"#$0B","x":[27559,27643,36748,36902]},{"a":36675,"t":"code","b":[141,17,208],"m":"sta","o":"vic_control1"},{"a":36678,"t":"code","b":[169,8],"m":"lda","o":"#$08"},{"a":36680,"t":"code","b":[141,22,208],"m":"sta","o":"vic_control2"},{"a":36683,"t":"code","b":[169,188],"m":"lda","o":"#$BC"},{"a":36685,"t":"code","b":[141,24,208],"m":"sta","o":"vic_memory"},{"a":36688,"t":"code","b":[169,236],"m":"lda","o":"#$EC"},{"a":36690,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":36692,"t":"code","b":[169,32],"m":"lda","o":"#$20"},{"a":36694,"t":"code","b":[32,94,140],"m":"jsr","o":"fill_four_pages","oa":35934},{"a":36697,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":36699,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":36702,"t":"code","b":[76,111,140],"m":"jmp","o":"fill_colour_ram","oa":35951},{"a":36705,"l":"start_attract","c":"Where the initialisation continues (JMP from $ECB1); also jumped to from $6EE1, which leaves a game when $B254 is 2, and from $6B8F: blanks the screen, disables interrupts (the display-list install at $8F89 enables them again), silences the SID ($47D0), starts tune $1A through $45F1, sets $B8F1 = $B8F2 = 2 and falls into the title page at $8F75.","t":"code","b":[32,68,140],"m":"jsr","o":"screen_off","oa":35908,"x":[27535,28385,60593]},{"a":36708,"t":"code","b":[120],"m":"sei"},{"a":36709,"t":"code","b":[32,208,71],"m":"jsr","o":"reset_music","oa":18384},{"a":36712,"t":"code","b":[160,26],"m":"ldy","o":"#$1A"},{"a":36714,"t":"code","b":[32,241,69],"m":"jsr","o":"start_tune","oa":17905},{"a":36717,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":36719,"t":"code","b":[141,241,184],"m":"sta","o":"music_voices","oa":47345},{"a":36722,"t":"code","b":[141,242,184],"m":"sta","o":"music_speed","oa":47346},{"a":36725,"l":"show_title_page","c":"The title page with the high scores (also jumped to from $6BF8, $909F and $94E7): black border and background, $B254 = 0, the display list $B416 (pointer $B450) installed, the text screen cleared ($8F41), the text font inverted and the large font normal. Prints the page at $BEB5 (pointer $BFFE: \"top  scores\", \"one  plr\", \"two  plrs\" and rows 2-7 of both tables) in colour 0, clears $EBB2-$EBF3 (state of the routines at $9829-$98E5), draws the WIZBALL logo ($B693) in the large font into sprite blocks $80-$84 and \"1. 050000\" ($BFE8) in the text font into blocks $85-$8B, prints \"sensi soft\" ($B69B, after ten spaces at the same place) in the large font in white, fills blocks $8C-$8E with $FF and turns the screen on with a timeout of 150 x 5 frames ($9215). Then once a frame ($6E71): to $944D when $B254 reaches 4, else $9829, the timeout ($921E; the player menu at $9017 when it runs out), and the sticks ($73D4, $91FA): fire starts a game ($6392), any other input from $91FA goes to the menu.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[27640,37023,38119]},{"a":36727,"t":"code","b":[141,84,178],"m":"sta","o":"key_new","oa":45652},{"a":36730,"t":"code","b":[141,32,208],"m":"sta","o":"vic_border"},{"a":36733,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":36736,"t":"code","b":[32,68,140],"m":"jsr","o":"screen_off","oa":35908},{"a":36739,"t":"code","b":[174,80,180],"m":"ldx","o":"ptr_display_list_title","oa":46160},{"a":36742,"t":"code","b":[172,81,180],"m":"ldy","o":"ptr_display_list_title_hi","oa":46161},{"a":36745,"t":"code","b":[32,180,124],"m":"jsr","o":"install_display_list","oa":31924},{"a":36748,"t":"code","b":[32,65,143],"m":"jsr","o":"setup_text_screen","oa":36673},{"a":36751,"t":"code","b":[32,141,140],"m":"jsr","o":"font_text_inverted","oa":35981},{"a":36754,"t":"code","b":[32,181,140],"m":"jsr","o":"font_large_normal","oa":36021},{"a":36757,"t":"code","b":[174,254,191],"m":"ldx","o":"ptr_text_hiscore_page","oa":49150},{"a":36760,"t":"code","b":[172,255,191],"m":"ldy","o":"ptr_text_hiscore_page_hi","oa":49151},{"a":36763,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":36765,"t":"code","b":[32,250,140],"m":"jsr","o":"print_page","oa":36090},{"a":36768,"t":"code","b":[162,66],"m":"ldx","o":"#$42"},{"a":36770,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":36772,"l":"b_8FA4","t":"code","b":[157,177,235],"m":"sta","o":"title_colours_minus_1,x","oa":60337,"x":[36776]},{"a":36775,"t":"code","b":[202],"m":"dex"},{"a":36776,"t":"code","b":[208,250],"m":"bne","o":"b_8FA4","oa":36772},{"a":36778,"t":"code","b":[160,128],"m":"ldy","o":"#$80"},{"a":36780,"t":"code","b":[162,5],"m":"ldx","o":"#$05"},{"a":36782,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":36784,"t":"code","b":[32,21,143],"m":"jsr","o":"fill_sprite_blocks","oa":36629},{"a":36787,"t":"code","b":[174,218,183],"m":"ldx","o":"ptr_text_logo","oa":47066},{"a":36790,"t":"code","b":[172,219,183],"m":"ldy","o":"ptr_text_logo_hi","oa":47067},{"a":36793,"t":"code","b":[169,128],"m":"lda","o":"#$80"},{"a":36795,"t":"code","b":[32,50,142],"m":"jsr","o":"print_sprite_text_large","oa":36402},{"a":36798,"t":"code","b":[160,133],"m":"ldy","o":"#$85"},{"a":36800,"t":"code","b":[162,7],"m":"ldx","o":"#$07"},{"a":36802,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":36804,"t":"code","b":[32,21,143],"m":"jsr","o":"fill_sprite_blocks","oa":36629},{"a":36807,"t":"code","b":[174,220,183],"m":"ldx","o":"ptr_text_best_score","oa":47068},{"a":36810,"t":"code","b":[172,221,183],"m":"ldy","o":"ptr_text_best_score_hi","oa":47069},{"a":36813,"t":"code","b":[169,133],"m":"lda","o":"#$85"},{"a":36815,"t":"code","b":[32,228,141],"m":"jsr","o":"print_sprite_text","oa":36324},{"a":36818,"t":"code","b":[174,222,183],"m":"ldx","o":"ptr_text_best_message","oa":47070},{"a":36821,"t":"code","b":[172,223,183],"m":"ldy","o":"ptr_text_best_message_hi","oa":47071},{"a":36824,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":36826,"t":"code","b":[32,244,140],"m":"jsr","o":"print_page_large","oa":36084},{"a":36829,"t":"code","b":[160,140],"m":"ldy","o":"#$8C"},{"a":36831,"t":"code","b":[162,3],"m":"ldx","o":"#$03"},{"a":36833,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":36835,"t":"code","b":[32,21,143],"m":"jsr","o":"fill_sprite_blocks","oa":36629},{"a":36838,"t":"code","b":[32,80,140],"m":"jsr","o":"screen_on","oa":35920},{"a":36841,"t":"code","b":[169,150],"m":"lda","o":"#$96"},{"a":36843,"t":"code","b":[32,21,146],"m":"jsr","o":"set_screen_timer","oa":37397},{"a":36846,"l":"b_8FEE","t":"code","b":[32,113,110],"m":"jsr","o":"wait_raster_bottom","oa":28273,"x":[36878]},{"a":36849,"t":"code","b":[173,84,178],"m":"lda","o":"key_new","oa":45652},{"a":36852,"t":"code","b":[201,4],"m":"cmp","o":"#$04"},{"a":36854,"t":"code","b":[208,3],"m":"bne","o":"b_8FFB","oa":36859},{"a":36856,"t":"code","b":[76,77,148],"m":"jmp","o":"show_wiztips","oa":37965},{"a":36859,"l":"b_8FFB","t":"code","b":[32,41,152],"m":"jsr","o":"title_colour_fade_in","oa":38953,"x":[36854]},{"a":36862,"t":"code","b":[32,30,146],"m":"jsr","o":"tick_screen_timer","oa":37406},{"a":36865,"t":"code","b":[208,3],"m":"bne","o":"b_9006","oa":36870},{"a":36867,"t":"code","b":[76,23,144],"m":"jmp","o":"show_player_menu","oa":36887},{"a":36870,"l":"b_9006","t":"code","b":[32,212,115],"m":"jsr","o":"scan_keyboard","oa":29652,"x":[36865]},{"a":36873,"t":"code","b":[32,250,145],"m":"jsr","o":"read_joystick_edge","oa":37370},{"a":36876,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":36878,"t":"code","b":[240,222],"m":"beq","o":"b_8FEE","oa":36846},{"a":36880,"t":"code","b":[41,16],"m":"and","o":"#$10"},{"a":36882,"t":"code","b":[208,3],"m":"bne","o":"show_player_menu","oa":36887},{"a":36884,"t":"code","b":[76,146,99],"m":"jmp","o":"start_new_game","oa":25490},{"a":36887,"l":"show_player_menu","c":"Player-select menu over a starfield, the second screen of the attract sequence. Entered from the title loop when its timer runs out ($9003) or a joystick moves without fire ($9012), and from Wiztips ($94D5). Blanks the screen ($8C44), installs display list $B452 (bands $93CC-$93F7, $9419), puts the large font in its inverted form ($8CBE), clears the screen ($8F41) and prints the menu page $B6B6 (pointer at $B7E0: 'one player', 'two player', 'two player team', 'three player', 'four  player', 'press space for wiztips'). Clears sprite shape 5 and sets $C161 = $C0, a two-pixel star; all eight sprites unexpanded, hires, in front, white, shape 5; unblanks ($8C50); screen timer 130 ticks (650 frames). Loop, once a frame: colour cycles $98BE, $994A, $996A; moves the four stars ($90BD); SPACE ($B254 = 4) goes to Wiztips ($944D); places the stars in the bottom border ($6EA8, $915F) and again once the raster is at $87-$8B ($9163); when the timer ($921E) runs out, sprites off and back to the title ($8F75); a joystick change ($91FA) moves the highlight ($91DB, option $B272 = 0-4) and restarts the timer at 90 ticks; fire starts the game (JMP $6392).","t":"code","b":[32,68,140],"m":"jsr","o":"screen_off","oa":35908,"x":[36867,36882,38101]},{"a":36890,"t":"code","b":[174,128,180],"m":"ldx","o":"ptr_display_list_menu","oa":46208},{"a":36893,"t":"code","b":[172,129,180],"m":"ldy","o":"ptr_display_list_menu_hi","oa":46209},{"a":36896,"t":"code","b":[32,180,124],"m":"jsr","o":"install_display_list","oa":31924},{"a":36899,"t":"code","b":[32,190,140],"m":"jsr","o":"font_large_inverted","oa":36030},{"a":36902,"t":"code","b":[32,65,143],"m":"jsr","o":"setup_text_screen","oa":36673},{"a":36905,"t":"code","b":[174,224,183],"m":"ldx","o":"ptr_text_player_menu","oa":47072},{"a":36908,"t":"code","b":[172,225,183],"m":"ldy","o":"ptr_text_player_menu_hi","oa":47073},{"a":36911,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":36913,"t":"code","b":[32,250,140],"m":"jsr","o":"print_page","oa":36090},{"a":36916,"t":"code","b":[160,5],"m":"ldy","o":"#$05"},{"a":36918,"t":"code","b":[162,1],"m":"ldx","o":"#$01"},{"a":36920,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":36922,"t":"code","b":[32,21,143],"m":"jsr","o":"fill_sprite_blocks","oa":36629},{"a":36925,"t":"code","b":[169,192],"m":"lda","o":"#$C0"},{"a":36927,"t":"code","b":[141,97,193],"m":"sta","o":"sprite_blank_5_dot","oa":49505},{"a":36930,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":36932,"t":"code","b":[141,23,208],"m":"sta","o":"vic_sprite_expand_y"},{"a":36935,"t":"code","b":[141,29,208],"m":"sta","o":"vic_sprite_expand_x"},{"a":36938,"t":"code","b":[141,28,208],"m":"sta","o":"vic_sprite_multicolour"},{"a":36941,"t":"code","b":[141,27,208],"m":"sta","o":"vic_sprite_priority"},{"a":36944,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":36946,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":36949,"t":"code","b":[162,8],"m":"ldx","o":"#$08"},{"a":36951,"l":"b_9057","t":"code","b":[169,1],"m":"lda","o":"#$01","x":[36962]},{"a":36953,"t":"code","b":[157,38,208],"m":"sta","o":"vic_sprite_mc1,x"},{"a":36956,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":36958,"t":"code","b":[157,247,239],"m":"sta","o":"icon_ptrs_minus_1,x","oa":61431},{"a":36961,"t":"code","b":[202],"m":"dex"},{"a":36962,"t":"code","b":[208,243],"m":"bne","o":"b_9057","oa":36951},{"a":36964,"t":"code","b":[32,80,140],"m":"jsr","o":"screen_on","oa":35920},{"a":36967,"t":"code","b":[169,130],"m":"lda","o":"#$82"},{"a":36969,"t":"code","b":[32,21,146],"m":"jsr","o":"set_screen_timer","oa":37397},{"a":36972,"l":"b_906C","t":"code","b":[32,190,152],"m":"jsr","o":"cycle_blue_ramp","oa":39102,"x":[37034,37048]},{"a":36975,"t":"code","b":[32,74,153],"m":"jsr","o":"cycle_cyan_colour","oa":39242},{"a":36978,"t":"code","b":[32,106,153],"m":"jsr","o":"set_orange_colour","oa":39274},{"a":36981,"t":"code","b":[32,189,144],"m":"jsr","o":"update_starfield","oa":37053},{"a":36984,"t":"code","b":[173,84,178],"m":"lda","o":"key_new","oa":45652},{"a":36987,"t":"code","b":[201,4],"m":"cmp","o":"#$04"},{"a":36989,"t":"code","b":[208,3],"m":"bne","o":"b_9082","oa":36994},{"a":36991,"t":"code","b":[76,77,148],"m":"jmp","o":"show_wiztips","oa":37965},{"a":36994,"l":"b_9082","t":"code","b":[32,168,110],"m":"jsr","o":"wait_raster_top","oa":28328,"x":[36989]},{"a":36997,"t":"code","b":[32,95,145],"m":"jsr","o":"place_stars_top","oa":37215},{"a":37000,"l":"b_9088","t":"code","b":[173,18,208],"m":"lda","o":"vic_raster","x":[37008]},{"a":37003,"t":"code","b":[56],"m":"sec"},{"a":37004,"t":"code","b":[233,135],"m":"sbc","o":"#$87"},{"a":37006,"t":"code","b":[201,5],"m":"cmp","o":"#$05"},{"a":37008,"t":"code","b":[176,246],"m":"bcs","o":"b_9088","oa":37000},{"a":37010,"t":"code","b":[32,99,145],"m":"jsr","o":"place_stars_bottom","oa":37219},{"a":37013,"t":"code","b":[32,30,146],"m":"jsr","o":"tick_screen_timer","oa":37406},{"a":37016,"t":"code","b":[208,8],"m":"bne","o":"b_90A2","oa":37026},{"a":37018,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":37020,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":37023,"t":"code","b":[76,117,143],"m":"jmp","o":"show_title_page","oa":36725},{"a":37026,"l":"b_90A2","t":"code","b":[32,212,115],"m":"jsr","o":"scan_keyboard","oa":29652,"x":[37016]},{"a":37029,"t":"code","b":[32,250,145],"m":"jsr","o":"read_joystick_edge","oa":37370},{"a":37032,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":37034,"t":"code","b":[240,192],"m":"beq","o":"b_906C","oa":36972},{"a":37036,"t":"code","b":[32,219,145],"m":"jsr","o":"move_menu_cursor","oa":37339},{"a":37039,"t":"code","b":[169,90],"m":"lda","o":"#$5A"},{"a":37041,"t":"code","b":[32,21,146],"m":"jsr","o":"set_screen_timer","oa":37397},{"a":37044,"t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102},{"a":37046,"t":"code","b":[41,16],"m":"and","o":"#$10"},{"a":37048,"t":"code","b":[208,178],"m":"bne","o":"b_906C","oa":36972},{"a":37050,"t":"code","b":[76,146,99],"m":"jmp","o":"start_new_game","oa":25490},{"a":37053,"l":"update_starfield","c":"Moves the four stars of the menu and 'get ready!' starfields (from $9075 and $691C). Each star is a 6-byte record at $EB9A + 6n, n = 0-3: X whole and fraction, Y whole and fraction, X speed, Y speed. A star whose X byte is 0 is respawned: X = random 0-127 + $24 (+ carry), Y = $91, both speeds random with bit 5 set ($7533); every star is then moved by $910A. The loads at $90E6-$90EC are dead (the TXA discards them). Finally compares the hardware vectors $FFFA-$FFFF with the copy at $B62D-$B632 (NMI $7C61, reset $0000, IRQ $7C73) and increments the background colour $D021 if any byte differs: apparently a tamper check that makes the screen flicker when something has replaced the game's interrupt vectors.","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[26908,36981]},{"a":37055,"l":"b_90BF","t":"code","b":[189,154,235],"m":"lda","o":"menu_stars,x","oa":60314,"x":[37110]},{"a":37058,"t":"code","b":[208,31],"m":"bne","o":"b_90E3","oa":37091},{"a":37060,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":37063,"t":"code","b":[41,127],"m":"and","o":"#$7F"},{"a":37065,"t":"code","b":[105,36],"m":"adc","o":"#$24"},{"a":37067,"t":"code","b":[157,154,235],"m":"sta","o":"menu_stars,x","oa":60314},{"a":37070,"t":"code","b":[169,145],"m":"lda","o":"#$91"},{"a":37072,"t":"code","b":[157,156,235],"m":"sta","o":"menu_star_y,x","oa":60316},{"a":37075,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":37078,"t":"code","b":[9,32],"m":"ora","o":"#$20"},{"a":37080,"t":"code","b":[157,158,235],"m":"sta","o":"menu_star_x_speed,x","oa":60318},{"a":37083,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":37086,"t":"code","b":[9,32],"m":"ora","o":"#$20"},{"a":37088,"t":"code","b":[157,159,235],"m":"sta","o":"menu_star_y_speed,x","oa":60319},{"a":37091,"l":"b_90E3","t":"code","b":[32,10,145],"m":"jsr","o":"move_menu_star","oa":37130,"x":[37058]},{"a":37094,"t":"code","b":[189,156,235],"m":"lda","o":"menu_star_y,x","oa":60316},{"a":37097,"t":"code","b":[169,176],"m":"lda","o":"#$B0"},{"a":37099,"t":"code","b":[56],"m":"sec"},{"a":37100,"t":"code","b":[253,154,235],"m":"sbc","o":"menu_stars,x","oa":60314},{"a":37103,"t":"code","b":[138],"m":"txa"},{"a":37104,"t":"code","b":[24],"m":"clc"},{"a":37105,"t":"code","b":[105,6],"m":"adc","o":"#$06"},{"a":37107,"t":"code","b":[170],"m":"tax"},{"a":37108,"t":"code","b":[224,24],"m":"cpx","o":"#$18"},{"a":37110,"t":"code","b":[208,199],"m":"bne","o":"b_90BF","oa":37055},{"a":37112,"l":"b_90F8","t":"code","b":[189,226,255],"m":"lda","o":"vectors_minus_18,x","oa":65506,"x":[37123]},{"a":37115,"t":"code","b":[221,21,182],"m":"cmp","o":"vector_check_base,x","oa":46613},{"a":37118,"t":"code","b":[208,6],"m":"bne","o":"b_9106","oa":37126},{"a":37120,"t":"code","b":[232],"m":"inx"},{"a":37121,"t":"code","b":[224,30],"m":"cpx","o":"#$1E"},{"a":37123,"t":"code","b":[208,243],"m":"bne","o":"b_90F8","oa":37112},{"a":37125,"t":"code","b":[96],"m":"rts"},{"a":37126,"l":"b_9106","t":"code","b":[238,33,208],"m":"inc","o":"vic_background0","x":[37118]},{"a":37129,"t":"code","b":[96],"m":"rts"},{"a":37130,"l":"move_menu_star","c":"Moves one star (X = record offset 0, 6, 12 or 18 in the table at $EB9A): adds twice the X speed (byte 4) to the 16-bit X (whole part byte 0, fraction byte 1) and twice the Y speed (byte 5) to the 16-bit Y (bytes 2-3). Speeds are unsigned, so every star drifts right and down; $915F/$9163 mirror it into the other three directions. The star is killed (X byte = 0, respawned next frame by $90BD) when X leaves $0C-$AB or Y leaves $7A-$F9 (signed compares used as ranges, see notes).","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[37091]},{"a":37132,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":37134,"t":"code","b":[189,158,235],"m":"lda","o":"menu_star_x_speed,x","oa":60318},{"a":37137,"t":"code","b":[10],"m":"asl","o":"a"},{"a":37138,"t":"code","b":[38,97],"m":"rol","o":"zp_ptr_61","oa":97},{"a":37140,"t":"code","b":[24],"m":"clc"},{"a":37141,"t":"code","b":[125,155,235],"m":"adc","o":"menu_star_x_frac,x","oa":60315},{"a":37144,"t":"code","b":[157,155,235],"m":"sta","o":"menu_star_x_frac,x","oa":60315},{"a":37147,"t":"code","b":[144,2],"m":"bcc","o":"b_911F","oa":37151},{"a":37149,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":37151,"l":"b_911F","t":"code","b":[189,154,235],"m":"lda","o":"menu_stars,x","oa":60314,"x":[37147]},{"a":37154,"t":"code","b":[24],"m":"clc"},{"a":37155,"t":"code","b":[101,97],"m":"adc","o":"zp_ptr_61","oa":97},{"a":37157,"t":"code","b":[157,154,235],"m":"sta","o":"menu_stars,x","oa":60314},{"a":37160,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":37162,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":37164,"t":"code","b":[189,159,235],"m":"lda","o":"menu_star_y_speed,x","oa":60319},{"a":37167,"t":"code","b":[10],"m":"asl","o":"a"},{"a":37168,"t":"code","b":[38,97],"m":"rol","o":"zp_ptr_61","oa":97},{"a":37170,"t":"code","b":[24],"m":"clc"},{"a":37171,"t":"code","b":[125,157,235],"m":"adc","o":"menu_star_y_frac,x","oa":60317},{"a":37174,"t":"code","b":[157,157,235],"m":"sta","o":"menu_star_y_frac,x","oa":60317},{"a":37177,"t":"code","b":[144,2],"m":"bcc","o":"b_913D","oa":37181},{"a":37179,"t":"code","b":[230,97],"m":"inc","o":"zp_ptr_61","oa":97},{"a":37181,"l":"b_913D","t":"code","b":[189,156,235],"m":"lda","o":"menu_star_y,x","oa":60316,"x":[37177]},{"a":37184,"t":"code","b":[24],"m":"clc"},{"a":37185,"t":"code","b":[101,97],"m":"adc","o":"zp_ptr_61","oa":97},{"a":37187,"t":"code","b":[157,156,235],"m":"sta","o":"menu_star_y,x","oa":60316},{"a":37190,"t":"code","b":[189,154,235],"m":"lda","o":"menu_stars,x","oa":60314},{"a":37193,"t":"code","b":[201,12],"m":"cmp","o":"#$0C"},{"a":37195,"t":"code","b":[16,4],"m":"bpl","o":"b_9151","oa":37201},{"a":37197,"t":"code","b":[201,172],"m":"cmp","o":"#$AC"},{"a":37199,"t":"code","b":[16,8],"m":"bpl","o":"b_9159","oa":37209},{"a":37201,"l":"b_9151","t":"code","b":[189,156,235],"m":"lda","o":"menu_star_y,x","oa":60316,"x":[37195]},{"a":37204,"t":"code","b":[201,250],"m":"cmp","o":"#$FA"},{"a":37206,"t":"code","b":[16,1],"m":"bpl","o":"b_9159","oa":37209},{"a":37208,"t":"code","b":[96],"m":"rts"},{"a":37209,"l":"b_9159","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[37199,37206]},{"a":37211,"t":"code","b":[157,154,235],"m":"sta","o":"menu_stars,x","oa":60314},{"a":37214,"t":"code","b":[96],"m":"rts"},{"a":37215,"l":"place_stars_top","c":"Entry to $9165 with $B271 = 1: every star's Y is mirrored as $FF - Y, giving the copy for the top half of the screen. Called in the bottom border before the frame is drawn ($9085, $692B).","t":"code","b":[169,1],"m":"lda","o":"#$01","x":[26923,36997]},{"a":37217,"t":"code","b":[208,2],"m":"bne","o":"b_9165","oa":37221},{"a":37219,"l":"place_stars_bottom","c":"Places all eight sprites as the four stars of $EB9A mirrored left and right: sprites 0-3 at X*2 and sprites 4-7 at ($B0 - X)*2 (bit 8 into $D010), Y as stored, or $FF - Y when $B271 is 1 (entry $915F). This entry clears $B271: the copy for the bottom half, placed once the raster has passed line $87 ($9092, $6958). With both calls the eight sprites show sixteen stars flying out from the middle of the screen. Uses $5E, $5F, $60, $61, $66.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[26968,37010]},{"a":37221,"l":"b_9165","t":"code","b":[141,113,178],"m":"sta","o":"rings_mirrored","oa":45681,"x":[37217]},{"a":37224,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":37226,"t":"code","b":[134,96],"m":"stx","o":"zp_ptr_60","oa":96},{"a":37228,"t":"code","b":[134,95],"m":"stx","o":"zp_temp_5f","oa":95},{"a":37230,"t":"code","b":[169,254],"m":"lda","o":"#$FE"},{"a":37232,"t":"code","b":[133,94],"m":"sta","o":"zp_temp_5e","oa":94},{"a":37234,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":37236,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":37238,"l":"b_9176","t":"code","b":[164,95],"m":"ldy","o":"zp_temp_5f","oa":95,"x":[37325,37335]},{"a":37240,"t":"code","b":[173,113,178],"m":"lda","o":"rings_mirrored","oa":45681},{"a":37243,"t":"code","b":[240,12],"m":"beq","o":"b_9189","oa":37257},{"a":37245,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":37247,"t":"code","b":[56],"m":"sec"},{"a":37248,"t":"code","b":[253,156,235],"m":"sbc","o":"menu_star_y,x","oa":60316},{"a":37251,"t":"code","b":[153,1,208],"m":"sta","o":"vic_sprite0_y,y"},{"a":37254,"t":"code","b":[76,143,145],"m":"jmp","o":"j_918F","oa":37263},{"a":37257,"l":"b_9189","t":"code","b":[189,156,235],"m":"lda","o":"menu_star_y,x","oa":60316,"x":[37243]},{"a":37260,"t":"code","b":[153,1,208],"m":"sta","o":"vic_sprite0_y,y"},{"a":37263,"l":"j_918F","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[37254]},{"a":37265,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":37267,"t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96},{"a":37269,"t":"code","b":[240,9],"m":"beq","o":"b_91A0","oa":37280},{"a":37271,"t":"code","b":[169,176],"m":"lda","o":"#$B0"},{"a":37273,"t":"code","b":[56],"m":"sec"},{"a":37274,"t":"code","b":[253,154,235],"m":"sbc","o":"menu_stars,x","oa":60314},{"a":37277,"t":"code","b":[76,163,145],"m":"jmp","o":"j_91A3","oa":37283},{"a":37280,"l":"b_91A0","t":"code","b":[189,154,235],"m":"lda","o":"menu_stars,x","oa":60314,"x":[37269]},{"a":37283,"l":"j_91A3","t":"code","b":[10],"m":"asl","o":"a","x":[37277]},{"a":37284,"t":"code","b":[38,97],"m":"rol","o":"zp_ptr_61","oa":97},{"a":37286,"t":"code","b":[153,0,208],"m":"sta","o":"vic_sprite0_x,y"},{"a":37289,"t":"code","b":[173,16,208],"m":"lda","o":"vic_sprite_x_msb"},{"a":37292,"t":"code","b":[37,94],"m":"and","o":"zp_temp_5e","oa":94},{"a":37294,"t":"code","b":[141,16,208],"m":"sta","o":"vic_sprite_x_msb"},{"a":37297,"t":"code","b":[165,97],"m":"lda","o":"zp_ptr_61","oa":97},{"a":37299,"t":"code","b":[240,8],"m":"beq","o":"b_91BD","oa":37309},{"a":37301,"t":"code","b":[173,16,208],"m":"lda","o":"vic_sprite_x_msb"},{"a":37304,"t":"code","b":[5,102],"m":"ora","o":"zp_temp_66","oa":102},{"a":37306,"t":"code","b":[141,16,208],"m":"sta","o":"vic_sprite_x_msb"},{"a":37309,"l":"b_91BD","t":"code","b":[230,95],"m":"inc","o":"zp_temp_5f","oa":95,"x":[37299]},{"a":37311,"t":"code","b":[230,95],"m":"inc","o":"zp_temp_5f","oa":95},{"a":37313,"t":"code","b":[56],"m":"sec"},{"a":37314,"t":"code","b":[38,94],"m":"rol","o":"zp_temp_5e","oa":94},{"a":37316,"t":"code","b":[6,102],"m":"asl","o":"zp_temp_66","oa":102},{"a":37318,"t":"code","b":[138],"m":"txa"},{"a":37319,"t":"code","b":[24],"m":"clc"},{"a":37320,"t":"code","b":[105,6],"m":"adc","o":"#$06"},{"a":37322,"t":"code","b":[170],"m":"tax"},{"a":37323,"t":"code","b":[224,24],"m":"cpx","o":"#$18"},{"a":37325,"t":"code","b":[208,167],"m":"bne","o":"b_9176","oa":37238},{"a":37327,"t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96},{"a":37329,"t":"code","b":[208,7],"m":"bne","o":"r_91DA","oa":37338},{"a":37331,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":37333,"t":"code","b":[230,96],"m":"inc","o":"zp_ptr_60","oa":96},{"a":37335,"t":"code","b":[76,118,145],"m":"jmp","o":"b_9176","oa":37238},{"a":37338,"l":"r_91DA","t":"code","b":[96],"m":"rts","x":[37329]},{"a":37339,"l":"move_menu_cursor","c":"Moves the menu highlight. A = joystick byte (active low, from $91FA), kept in $66. Up (bit 0 low) with $B272 > 0 decrements $B272; down (bit 1 low) with $B272 < 4 increments it. $B272 is the chosen game option, 0 one player to 4 four players, read by the bands $93CC-$93F7 and at $687E.","t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102,"x":[37036]},{"a":37341,"t":"code","b":[41,1],"m":"and","o":"#$01"},{"a":37343,"t":"code","b":[208,8],"m":"bne","o":"b_91E9","oa":37353},{"a":37345,"t":"code","b":[173,114,178],"m":"lda","o":"game_mode","oa":45682},{"a":37348,"t":"code","b":[240,3],"m":"beq","o":"b_91E9","oa":37353},{"a":37350,"t":"code","b":[206,114,178],"m":"dec","o":"game_mode","oa":45682},{"a":37353,"l":"b_91E9","t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102,"x":[37343,37348]},{"a":37355,"t":"code","b":[41,2],"m":"and","o":"#$02"},{"a":37357,"t":"code","b":[208,10],"m":"bne","o":"r_91F9","oa":37369},{"a":37359,"t":"code","b":[173,114,178],"m":"lda","o":"game_mode","oa":45682},{"a":37362,"t":"code","b":[201,4],"m":"cmp","o":"#$04"},{"a":37364,"t":"code","b":[240,3],"m":"beq","o":"r_91F9","oa":37369},{"a":37366,"t":"code","b":[238,114,178],"m":"inc","o":"game_mode","oa":45682},{"a":37369,"l":"r_91F9","t":"code","b":[96],"m":"rts","x":[37357,37364]},{"a":37370,"l":"read_joystick_edge","c":"Returns A = both joystick ports combined ($B256 AND $B257, read by $73D4 or $7429; active low, bits 0-4 up, down, left, right, fire) with bits 5-7 forced on, but only when that differs from the value it last returned ($B270); otherwise A = $FF, which is also what releasing everything returns. Leaves $B256 in $66 and $B257 in $67. Used by the title ($9009), menu ($90A5), Wiztips ($94C7) and 'get ready!' ($695E) loops and at $6A9F.","t":"code","b":[173,86,178],"m":"lda","o":"joystick_port2_raw","oa":45654,"x":[26974,27295,36873,37029,38087]},{"a":37373,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":37375,"t":"code","b":[173,87,178],"m":"lda","o":"joystick_port1_raw","oa":45655},{"a":37378,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":37380,"t":"code","b":[37,102],"m":"and","o":"zp_temp_66","oa":102},{"a":37382,"t":"code","b":[9,224],"m":"ora","o":"#$E0"},{"a":37384,"t":"code","b":[205,112,178],"m":"cmp","o":"joystick_last","oa":45680},{"a":37387,"t":"code","b":[208,4],"m":"bne","o":"b_9211","oa":37393},{"a":37389,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":37391,"t":"code","b":[208,3],"m":"bne","o":"r_9214","oa":37396},{"a":37393,"l":"b_9211","t":"code","b":[141,112,178],"m":"sta","o":"joystick_last","oa":45680,"x":[37387]},{"a":37396,"l":"r_9214","t":"code","b":[96],"m":"rts","x":[37391]},{"a":37397,"l":"set_screen_timer","c":"Starts the attract-screen timer: $B25F = A ticks, $B260 = 5 frames to the first tick (A = 0 gives 256 ticks). Callers: the title 150 ticks (750 frames), the menu 130, each menu move 90, Wiztips 0 (1,280 frames), $6A81 200.","t":"code","b":[141,95,178],"m":"sta","o":"screen_timeout","oa":45663,"x":[27265,36843,36969,37041,38075]},{"a":37400,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":37402,"t":"code","b":[141,96,178],"m":"sta","o":"screen_timeout_divider","oa":45664},{"a":37405,"t":"code","b":[96],"m":"rts"},{"a":37406,"l":"tick_screen_timer","c":"Counts the attract-screen timer down, one call a frame: every fifth call decrements $B25F. Returns with Z set (BEQ) on the call that takes $B25F to 0, Z clear otherwise.","t":"code","b":[206,96,178],"m":"dec","o":"screen_timeout_divider","oa":45664,"x":[27321,36862,37013,38114]},{"a":37409,"t":"code","b":[208,8],"m":"bne","o":"r_922B","oa":37419},{"a":37411,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":37413,"t":"code","b":[141,96,178],"m":"sta","o":"screen_timeout_divider","oa":45664},{"a":37416,"t":"code","b":[206,95,178],"m":"dec","o":"screen_timeout","oa":45663},{"a":37419,"l":"r_922B","t":"code","b":[96],"m":"rts","x":[37409]},{"a":37420,"l":"band_title_logo","c":"Title band at raster $23 (list $B416). Text colour $D021 = $EBD1 for 'top  scores'; sprites 0-4 on, hires, in front, X-expanded, not Y-expanded, at the positions in $B571-$B57A (X $48, $78, $A8, $D8, $108; Y $3D) with shapes $80-$84, the WIZBALL logo that $8E32 draws into sprite data. Then on each raster line from $3E to $4D sets all five sprite colours to the next of $EBD0 down to $EBC1, the 16 bar colours $9884 scrolls. Falls into the NMI watchdog at $9287.","t":"code","b":[173,209,235],"m":"lda","o":"title_band_bg","oa":60369},{"a":37423,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":37426,"t":"code","b":[169,31],"m":"lda","o":"#$1F"},{"a":37428,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":37431,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":37433,"t":"code","b":[141,28,208],"m":"sta","o":"vic_sprite_multicolour"},{"a":37436,"t":"code","b":[141,27,208],"m":"sta","o":"vic_sprite_priority"},{"a":37439,"t":"code","b":[169,255],"m":"lda","o":"#$FF","x":[16090]},{"a":37441,"t":"code","b":[141,29,208],"m":"sta","o":"vic_sprite_expand_x"},{"a":37444,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":37446,"t":"code","b":[141,23,208],"m":"sta","o":"vic_sprite_expand_y"},{"a":37449,"t":"code","b":[160,10],"m":"ldy","o":"#$0A"},{"a":37451,"l":"b_924B","t":"code","b":[185,112,181],"m":"lda","o":"title_logo_positions_base,y","oa":46448,"x":[37458]},{"a":37454,"t":"code","b":[153,255,207],"m":"sta","o":"vic_regs_minus_1,y","oa":53247},{"a":37457,"t":"code","b":[136],"m":"dey"},{"a":37458,"t":"code","b":[208,247],"m":"bne","o":"b_924B","oa":37451},{"a":37460,"t":"code","b":[169,16],"m":"lda","o":"#$10"},{"a":37462,"t":"code","b":[141,16,208],"m":"sta","o":"vic_sprite_x_msb"},{"a":37465,"t":"code","b":[169,128],"m":"lda","o":"#$80"},{"a":37467,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":37469,"l":"b_925D","t":"code","b":[153,248,239],"m":"sta","o":"icon1_ptr,y","oa":61432,"x":[37478]},{"a":37472,"t":"code","b":[170],"m":"tax"},{"a":37473,"t":"code","b":[232],"m":"inx"},{"a":37474,"t":"code","b":[138],"m":"txa"},{"a":37475,"t":"code","b":[200],"m":"iny"},{"a":37476,"t":"code","b":[192,5],"m":"cpy","o":"#$05"},{"a":37478,"t":"code","b":[208,245],"m":"bne","o":"b_925D","oa":37469},{"a":37480,"t":"code","b":[160,62],"m":"ldy","o":"#$3E"},{"a":37482,"t":"code","b":[162,16],"m":"ldx","o":"#$10"},{"a":37484,"l":"b_926C","t":"code","b":[204,18,208],"m":"cpy","o":"vic_raster","x":[37487,37509]},{"a":37487,"t":"code","b":[208,251],"m":"bne","o":"b_926C","oa":37484},{"a":37489,"t":"code","b":[189,192,235],"m":"lda","o":"logo_bar_step,x","oa":60352},{"a":37492,"t":"code","b":[141,39,208],"m":"sta","o":"vic_sprite0_colour"},{"a":37495,"t":"code","b":[141,40,208],"m":"sta","o":"vic_sprite1_colour"},{"a":37498,"t":"code","b":[141,41,208],"m":"sta","o":"vic_sprite2_colour"},{"a":37501,"t":"code","b":[141,42,208],"m":"sta","o":"vic_sprite3_colour"},{"a":37504,"t":"code","b":[141,43,208],"m":"sta","o":"vic_sprite4_colour"},{"a":37507,"t":"code","b":[200],"m":"iny"},{"a":37508,"t":"code","b":[202],"m":"dex"},{"a":37509,"t":"code","b":[208,229],"m":"bne","o":"b_926C","oa":37484},{"a":37511,"l":"nmi_watchdog_check","c":"NMI watchdog, the tail of $922C, in opcodes the disassembler does not decode (so typed as bytes): $A7 $86 = LAX $86 (A = X = $FF, stored once at $EC4B); $DF $86 $FF = DCP $FF86,X, which with X = $FF wraps to $0085: decrement $85 and compare it with A; $F0 $03 = BEQ $9291, the RTS. The NMI at $7C61 writes 0 to $85 once a frame and the bands $936A-$93C5 increment it later in the frame, so the check passes only if an NMI has arrived since the previous frame. Otherwise $68 = PLA, then $7C $C2 $60 = NOP $60C2,X (an illegal three-byte NOP whose last byte is the RTS) leads into $9292. The STX $DF / STX $FF an ordinary decode shows here are false.","t":"byte","b":[167,134,223,134,255,240,3,104]},{"a":37519,"t":"byte","b":[124,194]},{"a":37521,"l":"nmi_watchdog_pass","c":"The RTS ($60) that is also the last byte of the three-byte NOP at $928F: the BEQ at $928C lands here when the NMI watchdog check passes, and the logo band returns normally.","t":"code","b":[96],"m":"rts"},{"a":37522,"l":"nmi_watchdog_fail","c":"Failure path of the NMI watchdog, reached only after the PLA at $928E has taken a byte off the stack, and never traced by the disassembler (typed as bytes): JSR $7533 / STA $929F / JSR $7533 / STA $92A0 / INC $1000,X / RTS. It writes two random numbers into the INC's operand ($1000 is a placeholder), increments that random byte of memory, and returns through the unbalanced stack to an unpredictable address: apparently a deliberate crash when the once-a-frame NMI has been stopped, as a freezer cartridge or monitor would.","t":"byte","b":[32,51,117,141,159,146,32,51]},{"a":37530,"t":"byte","b":[117,141,160,146,254,0,16,96]},{"a":37538,"l":"band_title_top_score","c":"Title band at raster $6B: text colour 0; $D018 = $BC (screen $EC00, characters $F000); colour RAM of rows 8 and 9, columns 20-39, = $EBF2, the colour of 'sensi soft' in the large font; sprites 0-2 not Y-expanded, on, shapes $85-$87 ('1. 050000' drawn by $8DE4) at X $18, $48, $78, Y $76 (from $B57B-$B580). After 16 NOPs of timing it colours the three sprites at rasters $76, $78, $7A and $7C with $EBD5 down to $EBD2; at raster $8C it writes $D018 = $BD (the same layout, bit 0 unused) and text colour $D021 = $EBD6 for 'one  plr' and 'two  plrs'.","t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":37540,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":37543,"t":"code","b":[169,188],"m":"lda","o":"#$BC"},{"a":37545,"t":"code","b":[141,24,208],"m":"sta","o":"vic_memory"},{"a":37548,"t":"code","b":[173,242,235],"m":"lda","o":"colours_f2","oa":60402},{"a":37551,"t":"code","b":[160,20],"m":"ldy","o":"#$14"},{"a":37553,"l":"b_92B1","t":"code","b":[153,83,217],"m":"sta","o":"$D953,y","x":[37560]},{"a":37556,"t":"code","b":[153,123,217],"m":"sta","o":"$D97B,y"},{"a":37559,"t":"code","b":[136],"m":"dey"},{"a":37560,"t":"code","b":[208,247],"m":"bne","o":"b_92B1","oa":37553},{"a":37562,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":37564,"t":"code","b":[141,23,208],"m":"sta","o":"vic_sprite_expand_y"},{"a":37567,"t":"code","b":[169,7],"m":"lda","o":"#$07"},{"a":37569,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":37572,"t":"code","b":[169,96],"m":"lda","o":"#$60"},{"a":37574,"t":"code","b":[141,16,208],"m":"sta","o":"vic_sprite_x_msb"},{"a":37577,"t":"code","b":[169,133],"m":"lda","o":"#$85"},{"a":37579,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":37581,"l":"b_92CD","t":"code","b":[153,248,239],"m":"sta","o":"icon1_ptr,y","oa":61432,"x":[37590]},{"a":37584,"t":"code","b":[170],"m":"tax"},{"a":37585,"t":"code","b":[232],"m":"inx"},{"a":37586,"t":"code","b":[138],"m":"txa"},{"a":37587,"t":"code","b":[200],"m":"iny"},{"a":37588,"t":"code","b":[192,4],"m":"cpy","o":"#$04"},{"a":37590,"t":"code","b":[208,245],"m":"bne","o":"b_92CD","oa":37581},{"a":37592,"t":"code","b":[160,6],"m":"ldy","o":"#$06"},{"a":37594,"l":"b_92DA","t":"code","b":[185,122,181],"m":"lda","o":"title_best_score_positions_base,y","oa":46458,"x":[37601]},{"a":37597,"t":"code","b":[153,255,207],"m":"sta","o":"vic_regs_minus_1,y","oa":53247},{"a":37600,"t":"code","b":[136],"m":"dey"},{"a":37601,"t":"code","b":[208,247],"m":"bne","o":"b_92DA","oa":37594},{"a":37603,"t":"code","b":[234],"m":"nop"},{"a":37604,"t":"code","b":[234],"m":"nop"},{"a":37605,"t":"code","b":[234],"m":"nop"},{"a":37606,"t":"code","b":[234],"m":"nop"},{"a":37607,"t":"code","b":[234],"m":"nop"},{"a":37608,"t":"code","b":[234],"m":"nop"},{"a":37609,"t":"code","b":[234],"m":"nop"},{"a":37610,"t":"code","b":[234],"m":"nop"},{"a":37611,"t":"code","b":[234],"m":"nop"},{"a":37612,"t":"code","b":[234],"m":"nop"},{"a":37613,"t":"code","b":[234],"m":"nop"},{"a":37614,"t":"code","b":[234],"m":"nop"},{"a":37615,"t":"code","b":[234],"m":"nop"},{"a":37616,"t":"code","b":[234],"m":"nop"},{"a":37617,"t":"code","b":[234],"m":"nop"},{"a":37618,"t":"code","b":[234],"m":"nop"},{"a":37619,"t":"code","b":[160,118],"m":"ldy","o":"#$76"},{"a":37621,"t":"code","b":[162,4],"m":"ldx","o":"#$04"},{"a":37623,"l":"b_92F7","t":"code","b":[204,18,208],"m":"cpy","o":"vic_raster","x":[37626,37650]},{"a":37626,"t":"code","b":[208,251],"m":"bne","o":"b_92F7","oa":37623},{"a":37628,"t":"code","b":[234],"m":"nop"},{"a":37629,"t":"code","b":[234],"m":"nop"},{"a":37630,"t":"code","b":[234],"m":"nop"},{"a":37631,"t":"code","b":[234],"m":"nop"},{"a":37632,"t":"code","b":[234],"m":"nop"},{"a":37633,"t":"code","b":[234],"m":"nop"},{"a":37634,"t":"code","b":[234],"m":"nop"},{"a":37635,"t":"code","b":[189,209,235],"m":"lda","o":"title_band_bg,x","oa":60369},{"a":37638,"t":"code","b":[141,39,208],"m":"sta","o":"vic_sprite0_colour"},{"a":37641,"t":"code","b":[141,40,208],"m":"sta","o":"vic_sprite1_colour"},{"a":37644,"t":"code","b":[141,41,208],"m":"sta","o":"vic_sprite2_colour"},{"a":37647,"t":"code","b":[200],"m":"iny"},{"a":37648,"t":"code","b":[200],"m":"iny"},{"a":37649,"t":"code","b":[202],"m":"dex"},{"a":37650,"t":"code","b":[208,227],"m":"bne","o":"b_92F7","oa":37623},{"a":37652,"t":"code","b":[160,140],"m":"ldy","o":"#$8C"},{"a":37654,"l":"b_9316","t":"code","b":[204,18,208],"m":"cpy","o":"vic_raster","x":[37657]},{"a":37657,"t":"code","b":[208,251],"m":"bne","o":"b_9316","oa":37654},{"a":37659,"t":"code","b":[169,189],"m":"lda","o":"#$BD"},{"a":37661,"t":"code","b":[141,24,208],"m":"sta","o":"vic_memory"},{"a":37664,"t":"code","b":[173,214,235],"m":"lda","o":"colours_d6","oa":60374},{"a":37667,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":37670,"t":"code","b":[96],"m":"rts"},{"a":37671,"l":"band_title_table_bars","c":"Title band at raster $93: makes sprites 0-3 four solid bars behind the high-score table: Y $A2; X $E8, $30, $00, $B8 (bit 8 clear); behind the characters ($D01B = $FF); Y-expanded, and still X-expanded from $922C; shape $8C, which $8FE3 filled with $FF. The title's small font is inverted (letters are background pixels, $8C8D), so the bars show only through the letters and colour the ranks and scores of both tables.","t":"code","b":[169,162],"m":"lda","o":"#$A2"},{"a":37673,"t":"code","b":[141,1,208],"m":"sta","o":"vic_sprite0_y"},{"a":37676,"t":"code","b":[141,3,208],"m":"sta","o":"vic_sprite1_y"},{"a":37679,"t":"code","b":[141,5,208],"m":"sta","o":"vic_sprite2_y"},{"a":37682,"t":"code","b":[141,7,208],"m":"sta","o":"vic_sprite3_y"},{"a":37685,"t":"code","b":[169,232],"m":"lda","o":"#$E8"},{"a":37687,"t":"code","b":[141,0,208],"m":"sta","o":"vic_sprite0_x"},{"a":37690,"t":"code","b":[169,48],"m":"lda","o":"#$30"},{"a":37692,"t":"code","b":[141,2,208],"m":"sta","o":"vic_sprite1_x"},{"a":37695,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":37697,"t":"code","b":[141,4,208],"m":"sta","o":"vic_sprite2_x"},{"a":37700,"t":"code","b":[169,184],"m":"lda","o":"#$B8"},{"a":37702,"t":"code","b":[141,6,208],"m":"sta","o":"vic_sprite3_x"},{"a":37705,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":37707,"t":"code","b":[141,16,208],"m":"sta","o":"vic_sprite_x_msb"},{"a":37710,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":37712,"t":"code","b":[141,27,208],"m":"sta","o":"vic_sprite_priority"},{"a":37715,"t":"code","b":[141,23,208],"m":"sta","o":"vic_sprite_expand_y"},{"a":37718,"t":"code","b":[169,140],"m":"lda","o":"#$8C"},{"a":37720,"t":"code","b":[141,248,239],"m":"sta","o":"icon1_ptr","oa":61432},{"a":37723,"t":"code","b":[141,249,239],"m":"sta","o":"icon2_ptr","oa":61433},{"a":37726,"t":"code","b":[141,250,239],"m":"sta","o":"icon3_ptr","oa":61434},{"a":37729,"t":"code","b":[141,251,239],"m":"sta","o":"icon4_ptr","oa":61435},{"a":37732,"t":"code","b":[169,15],"m":"lda","o":"#$0F"},{"a":37734,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":37737,"t":"code","b":[96],"m":"rts"},{"a":37738,"l":"band_score_row_2","c":"Title band at raster $A0: text colour $D021 = $EBF1, the colour of every name in the table, then colours high-score row 2 from raster $A2 with X = 8 (falls into $9374).","t":"code","b":[173,241,235],"m":"lda","o":"colours_f1","oa":60401},{"a":37741,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":37744,"t":"code","b":[162,8],"m":"ldx","o":"#$08"},{"a":37746,"t":"code","b":[169,162],"m":"lda","o":"#$A2"},{"a":37748,"l":"colour_score_row","c":"Shared tail of the high-score bands. A = the row's first raster line, X = colour index. Moves the four bars (sprites 0-3, $9327) to Y = A, then at exactly lines A, A+2, A+4 and A+6 sets sprites 1 and 3 to $EBD6+X and sprites 0 and 2 to $EBE3+X, X counting down (sprite 2 covers the left table's rank, 1 its score, 3 the right table's rank, 0 its score). Ends with INC $FFB0,X at X = $D5, which wraps to INC $85, the counter the NMI watchdog at $9287 expects the NMI to have cleared.","t":"code","b":[141,1,208],"m":"sta","o":"vic_sprite0_y","x":[37805,37812,37819,37826,37833]},{"a":37751,"t":"code","b":[141,3,208],"m":"sta","o":"vic_sprite1_y"},{"a":37754,"t":"code","b":[141,5,208],"m":"sta","o":"vic_sprite2_y"},{"a":37757,"t":"code","b":[141,7,208],"m":"sta","o":"vic_sprite3_y"},{"a":37760,"t":"code","b":[168],"m":"tay"},{"a":37761,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":37763,"t":"code","b":[133,111],"m":"sta","o":"score_row_bars","oa":111},{"a":37765,"l":"b_9385","t":"code","b":[204,18,208],"m":"cpy","o":"vic_raster","x":[37768,37793]},{"a":37768,"t":"code","b":[208,251],"m":"bne","o":"b_9385","oa":37765},{"a":37770,"t":"code","b":[189,214,235],"m":"lda","o":"colours_d6,x","oa":60374},{"a":37773,"t":"code","b":[141,40,208],"m":"sta","o":"vic_sprite1_colour"},{"a":37776,"t":"code","b":[141,42,208],"m":"sta","o":"vic_sprite3_colour"},{"a":37779,"t":"code","b":[189,227,235],"m":"lda","o":"colours_e3,x","oa":60387},{"a":37782,"t":"code","b":[141,39,208],"m":"sta","o":"vic_sprite0_colour"},{"a":37785,"t":"code","b":[141,41,208],"m":"sta","o":"vic_sprite2_colour"},{"a":37788,"t":"code","b":[200],"m":"iny"},{"a":37789,"t":"code","b":[200],"m":"iny"},{"a":37790,"t":"code","b":[202],"m":"dex"},{"a":37791,"t":"code","b":[198,111],"m":"dec","o":"score_row_bars","oa":111},{"a":37793,"t":"code","b":[208,226],"m":"bne","o":"b_9385","oa":37765},{"a":37795,"t":"code","b":[162,213],"m":"ldx","o":"#$D5"},{"a":37797,"t":"code","b":[254,176,255],"m":"inc","o":"wrap_to_zp_85,x","oa":65456},{"a":37800,"t":"code","b":[96],"m":"rts"},{"a":37801,"l":"band_score_row_3","c":"Title band at raster $AF: high-score row 3, the bars and their colours from raster $B2 with X = 9 ($9374).","t":"code","b":[169,178],"m":"lda","o":"#$B2"},{"a":37803,"t":"code","b":[162,9],"m":"ldx","o":"#$09"},{"a":37805,"t":"code","b":[76,116,147],"m":"jmp","o":"colour_score_row","oa":37748},{"a":37808,"l":"band_score_row_4","c":"Title band at raster $C0: high-score row 4, the bars and their colours from raster $C2 with X = 10 ($9374).","t":"code","b":[169,194],"m":"lda","o":"#$C2"},{"a":37810,"t":"code","b":[162,10],"m":"ldx","o":"#$0A"},{"a":37812,"t":"code","b":[76,116,147],"m":"jmp","o":"colour_score_row","oa":37748},{"a":37815,"l":"band_score_row_5","c":"Title band at raster $D0: high-score row 5, the bars and their colours from raster $D2 with X = 11 ($9374).","t":"code","b":[169,210],"m":"lda","o":"#$D2"},{"a":37817,"t":"code","b":[162,11],"m":"ldx","o":"#$0B"},{"a":37819,"t":"code","b":[76,116,147],"m":"jmp","o":"colour_score_row","oa":37748},{"a":37822,"l":"band_score_row_6","c":"Title band at raster $E0: high-score row 6, the bars and their colours from raster $E2 with X = 12 ($9374).","t":"code","b":[169,226],"m":"lda","o":"#$E2"},{"a":37824,"t":"code","b":[162,12],"m":"ldx","o":"#$0C"},{"a":37826,"t":"code","b":[76,116,147],"m":"jmp","o":"colour_score_row","oa":37748},{"a":37829,"l":"band_score_row_7","c":"Title band at raster $F0: high-score row 7, the bars and their colours from raster $F2 with X = 13 ($9374). The list's last entry, so the next interrupt is its first line again.","t":"code","b":[169,242],"m":"lda","o":"#$F2"},{"a":37831,"t":"code","b":[162,13],"m":"ldx","o":"#$0D"},{"a":37833,"t":"code","b":[76,116,147],"m":"jmp","o":"colour_score_row","oa":37748},{"a":37836,"l":"band_menu_one_player","c":"Menu band at raster $48 (list $B452), 'one player' (row 3): when $B272 is 0, colours the row in stripes from raster $4B ($9401); otherwise sets the text colour $D021 = 6, the blue of every row that is not highlighted.","t":"code","b":[160,75],"m":"ldy","o":"#$4B"},{"a":37838,"t":"code","b":[173,114,178],"m":"lda","o":"game_mode","oa":45682},{"a":37841,"t":"code","b":[240,46],"m":"beq","o":"colour_row_blue_ramp","oa":37889},{"a":37843,"t":"code","b":[169,6],"m":"lda","o":"#$06"},{"a":37845,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":37848,"t":"code","b":[96],"m":"rts"},{"a":37849,"l":"band_menu_two_player","c":"Menu band at raster $60, 'two player' (row 6): when $B272 is 1, colours the row in stripes from raster $63 ($9401); otherwise returns and the row stays blue.","t":"code","b":[160,99],"m":"ldy","o":"#$63"},{"a":37851,"t":"code","b":[173,114,178],"m":"lda","o":"game_mode","oa":45682},{"a":37854,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":37856,"t":"code","b":[240,31],"m":"beq","o":"colour_row_blue_ramp","oa":37889},{"a":37858,"t":"code","b":[96],"m":"rts"},{"a":37859,"l":"band_menu_team","c":"Menu band at raster $78, 'two player team' (row 9): when $B272 is 2, colours the row in stripes from raster $7B ($9401); otherwise returns and the row stays blue.","t":"code","b":[160,123],"m":"ldy","o":"#$7B"},{"a":37861,"t":"code","b":[173,114,178],"m":"lda","o":"game_mode","oa":45682},{"a":37864,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":37866,"t":"code","b":[240,21],"m":"beq","o":"colour_row_blue_ramp","oa":37889},{"a":37868,"t":"code","b":[96],"m":"rts"},{"a":37869,"l":"band_menu_three_player","c":"Menu band at raster $90, 'three player' (row 12): when $B272 is 3, colours the row in stripes from raster $93 ($9401); otherwise returns and the row stays blue.","t":"code","b":[160,147],"m":"ldy","o":"#$93"},{"a":37871,"t":"code","b":[173,114,178],"m":"lda","o":"game_mode","oa":45682},{"a":37874,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":37876,"t":"code","b":[240,11],"m":"beq","o":"colour_row_blue_ramp","oa":37889},{"a":37878,"t":"code","b":[96],"m":"rts"},{"a":37879,"l":"band_menu_four_player","c":"Menu band at raster $A8, 'four  player' (row 15): when $B272 is 4, colours the row in stripes from raster $AB ($9401); otherwise returns and the row stays blue.","t":"code","b":[160,171],"m":"ldy","o":"#$AB"},{"a":37881,"t":"code","b":[173,114,178],"m":"lda","o":"game_mode","oa":45682},{"a":37884,"t":"code","b":[201,4],"m":"cmp","o":"#$04"},{"a":37886,"t":"code","b":[240,1],"m":"beq","o":"colour_row_blue_ramp","oa":37889},{"a":37888,"t":"code","b":[96],"m":"rts"},{"a":37889,"l":"colour_row_blue_ramp","c":"Colours one text row in four stripes of two lines. Y = raster line; for X = 4 down to 1 waits until the raster is past Y (signed compare), sets $D021 = $EBD6+X ($EBDA, $EBD9, $EBD8, $EBD7: the head of the ramp $98BE feeds from $B5DF), Y += 2; then $D021 = 6 (blue). For the highlighted menu option and the band at $6E00.","t":"code","b":[162,4],"m":"ldx","o":"#$04","x":[28162,28165,37841,37856,37866,37876,37886]},{"a":37891,"l":"b_9403","t":"code","b":[204,18,208],"m":"cpy","o":"vic_raster","x":[37894,37905]},{"a":37894,"t":"code","b":[16,251],"m":"bpl","o":"b_9403","oa":37891},{"a":37896,"t":"code","b":[189,214,235],"m":"lda","o":"colours_d6,x","oa":60374},{"a":37899,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":37902,"t":"code","b":[200],"m":"iny"},{"a":37903,"t":"code","b":[200],"m":"iny"},{"a":37904,"t":"code","b":[202],"m":"dex"},{"a":37905,"t":"code","b":[208,240],"m":"bne","o":"b_9403","oa":37891},{"a":37907,"t":"code","b":[169,6],"m":"lda","o":"#$06"},{"a":37909,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":37912,"t":"code","b":[96],"m":"rts"},{"a":37913,"l":"band_menu_wiztips_prompt","c":"Menu band at raster $E6: text colour $D021 = $EBD6 for 'press space for wiztips' (row 23).","t":"code","b":[173,214,235],"m":"lda","o":"colours_d6","oa":60374},{"a":37916,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":37919,"t":"code","b":[96],"m":"rts"},{"a":37920,"l":"read_joystick_edge_lab","c":"Joystick reader of the Wiz-lab's weapon choice ($B07B): reads the joysticks and nine control keys ($7429), then returns A = $B256 AND $B257 when that differs from its last value ($944B), else $FF. Unlike $91FA it keeps bits 5-7 as read.","t":"code","b":[32,41,116],"m":"jsr","o":"scan_keys_play","oa":29737,"x":[45179]},{"a":37923,"t":"code","b":[160,255],"m":"ldy","o":"#$FF"},{"a":37925,"t":"code","b":[173,86,178],"m":"lda","o":"joystick_port2_raw","oa":45654},{"a":37928,"t":"code","b":[45,87,178],"m":"and","o":"joystick_port1_raw","oa":45655},{"a":37931,"t":"code","b":[205,75,148],"m":"cmp","o":"lab_joystick_last","oa":37963},{"a":37934,"t":"code","b":[240,4],"m":"beq","o":"b_9434","oa":37940},{"a":37936,"t":"code","b":[141,75,148],"m":"sta","o":"lab_joystick_last","oa":37963},{"a":37939,"t":"code","b":[168],"m":"tay"},{"a":37940,"l":"b_9434","t":"code","b":[152],"m":"tya","x":[37934]},{"a":37941,"t":"code","b":[96],"m":"rts"},{"a":37942,"l":"cycle_all_text_colours","c":"Steps all seven colour cycles once: $98BE, $98E9, $9916, $994A, $996A, $997D, $999D. Every frame on the Wiztips pages ($94C1) and from $6CC8.","t":"code","b":[32,190,152],"m":"jsr","o":"cycle_blue_ramp","oa":39102,"x":[27848,38081]},{"a":37945,"t":"code","b":[32,233,152],"m":"jsr","o":"cycle_red_ramp","oa":39145},{"a":37948,"t":"code","b":[32,22,153],"m":"jsr","o":"cycle_green_ramp","oa":39190},{"a":37951,"t":"code","b":[32,74,153],"m":"jsr","o":"cycle_cyan_colour","oa":39242},{"a":37954,"t":"code","b":[32,106,153],"m":"jsr","o":"set_orange_colour","oa":39274},{"a":37957,"t":"code","b":[32,125,153],"m":"jsr","o":"cycle_blue_colour","oa":39293},{"a":37960,"t":"code","b":[76,157,153],"m":"jmp","o":"cycle_red_colour","oa":39325},{"a":37963,"l":"lab_joystick_last","c":"Last joystick value returned by the Wiz-lab reader $9420, kept for its change test.","t":"byte","b":[0],"x":[37931,37936]},{"a":37964,"l":"wiztips_page","c":"Wiztips page on show, 0-2: $944D increments it (3 wraps to 0) each time Wiztips opens or SPACE is pressed on it; indexes the display lists at $B86E and the text pointers at $4199. Starts at 2, so the first SPACE shows page one.","t":"byte","b":[2],"x":[37968,37971,37980,38017]},{"a":37965,"l":"show_wiztips","c":"Wiztips, entered on SPACE ($B254 = 4) from the title ($8FF8), the menu ($907F) and Wiztips itself ($94DF). Blanks the screen, advances $944C, installs that page's display list from $B86E ($9549, $957B, $95A1), puts both fonts in their inverted form ($8C8D, $8CBE), fills the screen at $EC00 and the colour RAM with 0, sprites off, prints the page body ($8CFA) and its large-font title ($8CF4) from the four-byte entry at $4199 + 4 x page, sets the sprites unexpanded, in front, multicolour and all on, unblanks and sets the timer to 256 ticks (1,280 frames). Loop, once a frame: waits for the border ($6EA8), steps the colour cycles ($9436), reads keys and joysticks ($73D4); fire starts the game (JMP $6392), another joystick change goes to the menu ($9017), SPACE shows the next page, and when the timer runs out it returns to the title ($8F75).","t":"code","b":[32,68,140],"m":"jsr","o":"screen_off","oa":35908,"x":[36856,36991,38111]},{"a":37968,"t":"code","b":[238,76,148],"m":"inc","o":"wiztips_page","oa":37964},{"a":37971,"t":"code","b":[173,76,148],"m":"lda","o":"wiztips_page","oa":37964},{"a":37974,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":37976,"t":"code","b":[208,5],"m":"bne","o":"b_945F","oa":37983},{"a":37978,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":37980,"t":"code","b":[141,76,148],"m":"sta","o":"wiztips_page","oa":37964},{"a":37983,"l":"b_945F","t":"code","b":[10],"m":"asl","o":"a","x":[37976]},{"a":37984,"t":"code","b":[168],"m":"tay"},{"a":37985,"t":"code","b":[185,110,184],"m":"lda","o":"tbl_wiztips_display_lists,y","oa":47214},{"a":37988,"t":"code","b":[170],"m":"tax"},{"a":37989,"t":"code","b":[185,111,184],"m":"lda","o":"tbl_wiztips_display_lists_hi,y","oa":47215},{"a":37992,"t":"code","b":[168],"m":"tay"},{"a":37993,"t":"code","b":[32,180,124],"m":"jsr","o":"install_display_list","oa":31924},{"a":37996,"t":"code","b":[32,141,140],"m":"jsr","o":"font_text_inverted","oa":35981},{"a":37999,"t":"code","b":[32,190,140],"m":"jsr","o":"font_large_inverted","oa":36030},{"a":38002,"t":"code","b":[169,236],"m":"lda","o":"#$EC"},{"a":38004,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":38006,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":38008,"t":"code","b":[32,94,140],"m":"jsr","o":"fill_four_pages","oa":35934},{"a":38011,"t":"code","b":[32,111,140],"m":"jsr","o":"fill_colour_ram","oa":35951},{"a":38014,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":38017,"t":"code","b":[173,76,148],"m":"lda","o":"wiztips_page","oa":37964},{"a":38020,"t":"code","b":[10],"m":"asl","o":"a"},{"a":38021,"t":"code","b":[10],"m":"asl","o":"a"},{"a":38022,"t":"code","b":[72],"m":"pha"},{"a":38023,"t":"code","b":[168],"m":"tay"},{"a":38024,"t":"code","b":[185,153,65],"m":"lda","o":"tbl_wiztips_pages,y","oa":16793},{"a":38027,"t":"code","b":[170],"m":"tax"},{"a":38028,"t":"code","b":[185,154,65],"m":"lda","o":"tbl_wiztips_pages_1,y","oa":16794},{"a":38031,"t":"code","b":[168],"m":"tay"},{"a":38032,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":38034,"t":"code","b":[32,250,140],"m":"jsr","o":"print_page","oa":36090},{"a":38037,"t":"code","b":[104],"m":"pla"},{"a":38038,"t":"code","b":[168],"m":"tay"},{"a":38039,"t":"code","b":[185,155,65],"m":"lda","o":"tbl_wiztips_pages_2,y","oa":16795},{"a":38042,"t":"code","b":[170],"m":"tax"},{"a":38043,"t":"code","b":[185,156,65],"m":"lda","o":"tbl_wiztips_pages_3,y","oa":16796},{"a":38046,"t":"code","b":[168],"m":"tay"},{"a":38047,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":38049,"t":"code","b":[32,244,140],"m":"jsr","o":"print_page_large","oa":36084},{"a":38052,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":38054,"t":"code","b":[142,27,208],"m":"stx","o":"vic_sprite_priority"},{"a":38057,"t":"code","b":[142,23,208],"m":"stx","o":"vic_sprite_expand_y"},{"a":38060,"t":"code","b":[142,29,208],"m":"stx","o":"vic_sprite_expand_x"},{"a":38063,"t":"code","b":[202],"m":"dex"},{"a":38064,"t":"code","b":[142,28,208],"m":"stx","o":"vic_sprite_multicolour"},{"a":38067,"t":"code","b":[142,21,208],"m":"stx","o":"vic_sprite_enable"},{"a":38070,"t":"code","b":[32,80,140],"m":"jsr","o":"screen_on","oa":35920},{"a":38073,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":38075,"t":"code","b":[32,21,146],"m":"jsr","o":"set_screen_timer","oa":37397},{"a":38078,"l":"b_94BE","t":"code","b":[32,168,110],"m":"jsr","o":"wait_raster_top","oa":28328,"x":[38117]},{"a":38081,"t":"code","b":[32,54,148],"m":"jsr","o":"cycle_all_text_colours","oa":37942},{"a":38084,"t":"code","b":[32,212,115],"m":"jsr","o":"scan_keyboard","oa":29652},{"a":38087,"t":"code","b":[32,250,145],"m":"jsr","o":"read_joystick_edge","oa":37370},{"a":38090,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":38092,"t":"code","b":[240,10],"m":"beq","o":"b_94D8","oa":38104},{"a":38094,"t":"code","b":[41,16],"m":"and","o":"#$10"},{"a":38096,"t":"code","b":[208,3],"m":"bne","o":"b_94D5","oa":38101},{"a":38098,"t":"code","b":[76,146,99],"m":"jmp","o":"start_new_game","oa":25490},{"a":38101,"l":"b_94D5","t":"code","b":[76,23,144],"m":"jmp","o":"show_player_menu","oa":36887,"x":[38096]},{"a":38104,"l":"b_94D8","t":"code","b":[173,84,178],"m":"lda","o":"key_new","oa":45652,"x":[38092]},{"a":38107,"t":"code","b":[201,4],"m":"cmp","o":"#$04"},{"a":38109,"t":"code","b":[208,3],"m":"bne","o":"b_94E2","oa":38114},{"a":38111,"t":"code","b":[76,77,148],"m":"jmp","o":"show_wiztips","oa":37965},{"a":38114,"l":"b_94E2","t":"code","b":[32,30,146],"m":"jsr","o":"tick_screen_timer","oa":37406,"x":[38109]},{"a":38117,"t":"code","b":[208,215],"m":"bne","o":"b_94BE","oa":38078},{"a":38119,"t":"code","b":[76,117,143],"m":"jmp","o":"show_title_page","oa":36725},{"a":38122,"l":"place_sprites","c":"Places A sprites, starting at sprite X, from 5-byte records at ($7D): X position (low 8 bits), Y position, X bit 8 (non-zero sets the sprite's bit in $D010 from $9539, zero clears it with $9541), colour ($D027+n) and shape ($EFF8+n, the sprite pointers of the screen at $EC00). The sprite number wraps from 7 to 0. Uses $78 (sprite number), $79 (twice it) and $7F (count). Called by the Wiztips bands.","t":"code","b":[133,127],"m":"sta","o":"place_sprites_row","oa":127,"x":[38557,38750,38820,38893]},{"a":38124,"t":"code","b":[138],"m":"txa"},{"a":38125,"t":"code","b":[10],"m":"asl","o":"a"},{"a":38126,"t":"code","b":[133,120],"m":"sta","o":"place_sprites_count","oa":120},{"a":38128,"t":"code","b":[133,121],"m":"sta","o":"place_sprites_reg","oa":121},{"a":38130,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":38132,"l":"b_94F4","t":"code","b":[166,121],"m":"ldx","o":"place_sprites_reg","oa":121,"x":[38198]},{"a":38134,"t":"code","b":[177,125],"m":"lda","o":"(wiztips_sprite_table_lo),y","oa":125},{"a":38136,"t":"code","b":[157,0,208],"m":"sta","o":"vic_sprite0_x,x"},{"a":38139,"t":"code","b":[200],"m":"iny"},{"a":38140,"t":"code","b":[177,125],"m":"lda","o":"(wiztips_sprite_table_lo),y","oa":125},{"a":38142,"t":"code","b":[157,1,208],"m":"sta","o":"vic_sprite0_y,x"},{"a":38145,"t":"code","b":[166,120],"m":"ldx","o":"place_sprites_count","oa":120},{"a":38147,"t":"code","b":[200],"m":"iny"},{"a":38148,"t":"code","b":[177,125],"m":"lda","o":"(wiztips_sprite_table_lo),y","oa":125},{"a":38150,"t":"code","b":[240,11],"m":"beq","o":"b_9513","oa":38163},{"a":38152,"t":"code","b":[173,16,208],"m":"lda","o":"vic_sprite_x_msb"},{"a":38155,"t":"code","b":[29,57,149],"m":"ora","o":"tbl_sprite_bit,x","oa":38201},{"a":38158,"t":"code","b":[141,16,208],"m":"sta","o":"vic_sprite_x_msb"},{"a":38161,"t":"code","b":[208,9],"m":"bne","o":"b_951C","oa":38172},{"a":38163,"l":"b_9513","t":"code","b":[173,16,208],"m":"lda","o":"vic_sprite_x_msb","x":[38150]},{"a":38166,"t":"code","b":[61,65,149],"m":"and","o":"tbl_sprite_clear_mask,x","oa":38209},{"a":38169,"t":"code","b":[141,16,208],"m":"sta","o":"vic_sprite_x_msb"},{"a":38172,"l":"b_951C","t":"code","b":[200],"m":"iny","x":[38161]},{"a":38173,"t":"code","b":[177,125],"m":"lda","o":"(wiztips_sprite_table_lo),y","oa":125},{"a":38175,"t":"code","b":[157,39,208],"m":"sta","o":"vic_sprite0_colour,x"},{"a":38178,"t":"code","b":[200],"m":"iny"},{"a":38179,"t":"code","b":[177,125],"m":"lda","o":"(wiztips_sprite_table_lo),y","oa":125},{"a":38181,"t":"code","b":[200],"m":"iny"},{"a":38182,"t":"code","b":[157,248,239],"m":"sta","o":"icon1_ptr,x","oa":61432},{"a":38185,"t":"code","b":[230,120],"m":"inc","o":"place_sprites_count","oa":120},{"a":38187,"t":"code","b":[165,120],"m":"lda","o":"place_sprites_count","oa":120},{"a":38189,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":38191,"t":"code","b":[133,120],"m":"sta","o":"place_sprites_count","oa":120},{"a":38193,"t":"code","b":[10],"m":"asl","o":"a"},{"a":38194,"t":"code","b":[133,121],"m":"sta","o":"place_sprites_reg","oa":121},{"a":38196,"t":"code","b":[198,127],"m":"dec","o":"place_sprites_row","oa":127},{"a":38198,"t":"code","b":[208,188],"m":"bne","o":"b_94F4","oa":38132},{"a":38200,"t":"code","b":[96],"m":"rts"},{"a":38201,"l":"tbl_sprite_bit","c":"The bit of sprite n, 1, 2, 4 ... $80: 8 bytes indexed by sprite number, ORed into $D010 at $950B to set the sprite's X bit 8.","t":"byte","b":[1,2,4,8,16,32,64,128],"x":[38155]},{"a":38209,"l":"tbl_sprite_clear_mask","c":"Mask that clears sprite n's bit, $FE, $FD ... $7F: 8 bytes indexed by sprite number, ANDed into $D010 at $9516.","t":"byte","b":[254,253,251,247,239,223,191,127],"x":[38166]},{"a":38217,"l":"wiztips_one_display_list","c":"Display list of Wiztips page one ('getting  started'), installed by $9469 from $B86E. Typed as words: the first raster line (1), then pairs of band routine and raster line of the next interrupt, so each routine runs at the line before it: $9681 at 1, music $B90C at $16, $9703 at $41, $970C at $50, music $B903 at $64, $972F at $97, music $B8FC at $AD, $971A at $B4, $9750 at $BE, $9721 at $CD, $9728 at $E6, music $B8F3 at $FF; a next line of 0 ends it.","t":"word","b":[1,0,129,150,22,0,12,185],"d":[1,38529,22,47372]},{"a":38225,"t":"word","b":[65,0,3,151,80,0,12,151],"d":[65,38659,80,38668]},{"a":38233,"t":"word","b":[100,0,3,185,151,0,47,151],"d":[100,47363,151,38703]},{"a":38241,"t":"word","b":[173,0,252,184,180,0,26,151],"d":[173,47356,180,38682]},{"a":38249,"t":"word","b":[190,0,80,151,205,0,33,151],"d":[190,38736,205,38689]},{"a":38257,"t":"word","b":[230,0,40,151,255,0,243,184],"d":[230,38696,255,47347]},{"a":38265,"t":"word","b":[0,0],"d":[0]},{"a":38267,"l":"wiztips_two_display_list","c":"Display list of Wiztips page two ('cat  control'), from $B870, words as for $9549: $9762 at 1, $B90C at $16, $97C2 at $41, $97CB at $50, $B903 at $64, $97D2 at $7F, $97D7 at $96, $B8FC at $AD, $B8F3 at $FF.","t":"word","b":[1,0,98,151,22,0,12,185],"d":[1,38754,22,47372]},{"a":38275,"t":"word","b":[65,0,194,151,80,0,203,151],"d":[65,38850,80,38859]},{"a":38283,"t":"word","b":[100,0,3,185,127,0,210,151],"d":[100,47363,127,38866]},{"a":38291,"t":"word","b":[150,0,215,151,173,0,252,184],"d":[150,38871,173,47356]},{"a":38299,"t":"word","b":[255,0,243,184,0,0],"d":[255,47347,0]},{"a":38305,"l":"wiztips_three_display_list","c":"Display list of Wiztips page three ('general  hints'), from $B872, words as for $9549: $97F0 at 1, $B90C at $16, $97FC at $41, $9805 at $5E, $B903 at $6E, $9812 at $76, $9805 at $8E, $9812 at $A6, $B8FC at $AD, $9805 at $C6, $9812 at $D6, $9805 at $EE, $B8F3 at $FF.","t":"word","b":[1,0,240,151,22,0,12,185],"d":[1,38896,22,47372]},{"a":38313,"t":"word","b":[65,0,252,151,94,0,5,152],"d":[65,38908,94,38917]},{"a":38321,"t":"word","b":[110,0,3,185,118,0,18,152],"d":[110,47363,118,38930]},{"a":38329,"t":"word","b":[142,0,5,152,166,0,18,152],"d":[142,38917,166,38930]},{"a":38337,"t":"word","b":[173,0,252,184,198,0,5,152],"d":[173,47356,198,38917]},{"a":38345,"t":"word","b":[214,0,18,152,238,0,5,152],"d":[214,38930,238,38917]},{"a":38353,"t":"word","b":[255,0,243,184,0,0],"d":[255,47347,0]},{"a":38359,"l":"tbl_wiztips_one_sprites","c":"Wiztips page one, sprites 0-7 placed by $9681: eight 5-byte records (X, Y, X bit 8, colour, shape; $94EA). Three aliens after 'shoot' on row 6 (X $78, $A8, $D8, Y $5B, colours 3, 6, 5, shapes animated by $9681); the pearl after 'pickup' on row 9 (X $90, Y $73, colour 5, shape $78); a flashing icon after 'to move' (X $100, colour from $B4D6, shape $0B); the thrust, anti-grav and beam icons on row 17 (Y $B3, X $18, $87, $F8, colour $0E, shapes $07, $03, $0B).","t":"byte","b":[120,91,0,3]},{"a":38363,"l":"wiztips_one_alien1_shape","c":"Shape byte of page one's first alien (the record at $95D7), rewritten every frame by $96D8 with $4C-$4F from $96F7; the next four bytes are the second alien's X, Y, X bit 8 and colour.","t":"byte","b":[76,168,91,0,6],"x":[38616]},{"a":38368,"l":"wiztips_one_alien2_shape","c":"Shape byte of page one's second alien, rewritten by $96E1 with $46-$49 from $96FB; the next four bytes are the third alien's X, Y, X bit 8 and colour.","t":"byte","b":[60,216,91,0,5],"x":[38625]},{"a":38373,"l":"wiztips_one_alien3_shape","c":"Shape byte of page one's third alien, rewritten by $96EA with $3C, $3D, $3E, $3D from $96FF; then the pearl's record (X $90, Y $73, colour 5, shape $78) and the icon record's X, Y and X bit 8.","t":"byte","b":[70,144,115,0,5,120,0,115],"x":[38634]},{"a":38381,"t":"byte","b":[1]},{"a":38382,"l":"wiztips_one_icon_colour","c":"Colour byte of the icon after 'to move' on Wiztips page one, copied from $B4D6 by $968C every frame, so it flashes as $7269 makes icon 1's colour flash; then its shape ($0B) and the records of the thrust, anti-grav and beam icons.","t":"byte","b":[14,11,24,179,0,14,7,135],"x":[38540]},{"a":38390,"t":"byte","b":[179,0,14,3,248,179,0,14]},{"a":38398,"t":"byte","b":[11]},{"a":38399,"l":"tbl_wiztips_one_icon_rows","c":"Wiztips page one, sprites 0-5 placed again by the band $9750 at raster $BE: six records for icon rows 20 (Y $CB: double $04, cat $02, blazers $06) and 23 (Y $E3: wizspray $08, catspray $0A, shield $00), at X $18, $87, $F8, colour $0E.","t":"byte","b":[24,203,0,14,4,135,203,0]},{"a":38407,"t":"byte","b":[14,2,248,203,0,14,6,24]},{"a":38415,"t":"byte","b":[227,0,14,8,135,227,0,14]},{"a":38423,"t":"byte","b":[10,248,227,0,14,0]},{"a":38429,"l":"tbl_wiztips_two_sprites","c":"Wiztips page two, sprites 0-7 placed by $9762: on row 10 a colour sphere after 'shoot' (X $50, Y $7B, colour 2, shapes $7B-$7D) and a droplet after 'pickup' (X $C8, colour 2); then the legend's droplets, two a row at X $18 and $C0: red chemical colour 2 and green chemical 5 (Y $9B), blue chemical 6 and mutant cat 4 (Y $B3), filth raid $0E and bonus Wizball 1 (Y $CB). Droplet shapes $50-$52, animated.","t":"byte","b":[80,123,0,2]},{"a":38433,"l":"wiztips_two_sphere_shape","c":"Shape byte of the colour sphere on Wiztips page two, rewritten every frame by $9783 with $7C, $7B, $7C, $7D from $97B8; the next four bytes are the 'pickup' droplet's X, Y, X bit 8 and colour.","t":"byte","b":[124,200,123,0,2],"x":[38787]},{"a":38438,"l":"wiztips_two_droplet_shape","c":"Shape byte of the droplet after 'pickup' on page two, rewritten by $977D from $97BC; the next four bytes are the red-chemical droplet's X, Y, X bit 8 and colour.","t":"byte","b":[82,24,155,0,2],"x":[38781]},{"a":38443,"l":"wiztips_two_legend_shapes","c":"Shape byte of the red-chemical droplet, the first of eight shape bytes 5 apart ($962B, $9630 ... $964E) that $977A rewrites with $50, $51, $52, $51, each droplet one phase on from the last; the bytes between are the green, blue, mutant-cat, filth-raid and bonus-Wizball records.","t":"byte","b":[124,192,155,0,5,124,24,179],"x":[38778]},{"a":38451,"t":"byte","b":[0,6,124,192,179,0,4,124]},{"a":38459,"t":"byte","b":[24,203,0,14,124,192,203,0]},{"a":38467,"t":"byte","b":[1,124]},{"a":38469,"l":"tbl_wiztips_two_last_row","c":"Wiztips page two, sprites 0-1 placed again by the band $97D7 at raster $96: the last legend row, indestructacat (X $18, colour $0B) and freaky bits (X $C0, colour 0), Y $E3; their shape bytes $9649 and $964E are animated by $9762.","t":"byte","b":[24,227,0,11,124,192,227,0]},{"a":38477,"t":"byte","b":[0,124]},{"a":38479,"l":"tbl_unused_sprites","c":"Eight 5-byte sprite records that no code reads: X $50, $58, then $18 five times and $20 (bit 8 set), Y $62 to $EA, colours 3, 2, 4, 5, 6, 7, 8, 3, all shape $80. Only the fifth word at $967F points here; apparently a leftover layout.","t":"byte","b":[80,98,0,3,128,88,98,0],"x":[38527]},{"a":38487,"t":"byte","b":[2,128,24,98,0,4,128,24]},{"a":38495,"t":"byte","b":[122,0,5,128,24,146,0,6]},{"a":38503,"t":"byte","b":[128,24,170,0,7,128,24,194]},{"a":38511,"t":"byte","b":[0,8,128,32,234,1,3,128]},{"a":38519,"l":"ptr_wiztips_one_sprites_lo","c":"Low byte of $95D7, page one's first sprite table, read by $9691; the first of five words ($95D7, $95FF, $961D, $9645, $964F), each byte loaded on its own.","t":"byte","b":[215],"x":[38545]},{"a":38520,"l":"ptr_wiztips_one_sprites_hi","c":"High byte of the pointer to $95D7, read by $9696.","t":"byte","b":[149],"x":[38550]},{"a":38521,"l":"ptr_wiztips_one_icons_lo","c":"Low byte of the pointer to $95FF, page one's icon rows, read by $9752.","t":"byte","b":[255],"x":[38738]},{"a":38522,"l":"ptr_wiztips_one_icons_hi","c":"High byte of the pointer to $95FF, read by $9757.","t":"byte","b":[149],"x":[38743]},{"a":38523,"l":"ptr_wiztips_two_sprites_lo","c":"Low byte of the pointer to $961D, page two's first sprite table, read by $9798.","t":"byte","b":[29],"x":[38808]},{"a":38524,"l":"ptr_wiztips_two_sprites_hi","c":"High byte of the pointer to $961D, read by $979D.","t":"byte","b":[150],"x":[38813]},{"a":38525,"l":"ptr_wiztips_two_last_row_lo","c":"Low byte of the pointer to $9645, page two's last droplet row, read by $97E1.","t":"byte","b":[69],"x":[38881]},{"a":38526,"l":"ptr_wiztips_two_last_row_hi","c":"High byte of the pointer to $9645, read by $97E6.","t":"byte","b":[150],"x":[38886]},{"a":38527,"l":"ptr_unused_sprites","c":"Fifth word of the sprite-table pointers, $964F; no code reads it.","t":"addr","b":[79,150],"oa":38479,"o":"tbl_unused_sprites"},{"a":38529,"l":"band_wiztips1_top","c":"Wiztips page one, band at raster 1. Sets $B258 = 1 and calls $7269, which resets the seven icon colours $B4D6-$B4DC and flashes the one of icon $B258, then copies icon 1's colour $B4D6 to $95EE; places sprites 0-7 from $95D7 ($94EA); sprite multicolours $D026 = $0D, $D025 = $0B; text colour $D021 = $EBD2 for 'wiztips one'. Then animates the three aliens: timers $96EE-$96F0 count to 6, 4 and 4 frames ($96F4), each period advances a frame 0-3 ($96F1-$96F3), and the shapes from $96F7, $96FB, $96FF go into $95DB, $95E0, $95E5.","t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":38531,"t":"code","b":[141,88,178],"m":"sta","o":"icon_cursor","oa":45656},{"a":38534,"t":"code","b":[32,105,114],"m":"jsr","o":"flash_lit_icon","oa":29289},{"a":38537,"t":"code","b":[173,214,180],"m":"lda","o":"icon_colours","oa":46294},{"a":38540,"t":"code","b":[141,238,149],"m":"sta","o":"wiztips_one_icon_colour","oa":38382},{"a":38543,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":38545,"t":"code","b":[173,119,150],"m":"lda","o":"ptr_wiztips_one_sprites_lo","oa":38519},{"a":38548,"t":"code","b":[133,125],"m":"sta","o":"wiztips_sprite_table_lo","oa":125},{"a":38550,"t":"code","b":[173,120,150],"m":"lda","o":"ptr_wiztips_one_sprites_hi","oa":38520},{"a":38553,"t":"code","b":[133,126],"m":"sta","o":"wiztips_sprite_table_hi","oa":126},{"a":38555,"t":"code","b":[169,8],"m":"lda","o":"#$08"},{"a":38557,"t":"code","b":[32,234,148],"m":"jsr","o":"place_sprites","oa":38122},{"a":38560,"t":"code","b":[169,13],"m":"lda","o":"#$0D"},{"a":38562,"t":"code","b":[141,38,208],"m":"sta","o":"vic_sprite_mc1"},{"a":38565,"t":"code","b":[169,11],"m":"lda","o":"#$0B"},{"a":38567,"t":"code","b":[141,37,208],"m":"sta","o":"vic_sprite_mc0"},{"a":38570,"t":"code","b":[173,210,235],"m":"lda","o":"colours_d2","oa":60370},{"a":38573,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":38576,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":38578,"l":"b_96B2","t":"code","b":[254,238,150],"m":"inc","o":"wiztips_one_anim_timers,x","oa":38638,"x":[38608]},{"a":38581,"t":"code","b":[189,238,150],"m":"lda","o":"wiztips_one_anim_timers,x","oa":38638},{"a":38584,"t":"code","b":[221,244,150],"m":"cmp","o":"wiztips_one_anim_periods,x","oa":38644},{"a":38587,"t":"code","b":[208,16],"m":"bne","o":"b_96CD","oa":38605},{"a":38589,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":38591,"t":"code","b":[157,238,150],"m":"sta","o":"wiztips_one_anim_timers,x","oa":38638},{"a":38594,"t":"code","b":[254,241,150],"m":"inc","o":"wiztips_one_anim_frame1,x","oa":38641},{"a":38597,"t":"code","b":[189,241,150],"m":"lda","o":"wiztips_one_anim_frame1,x","oa":38641},{"a":38600,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":38602,"t":"code","b":[157,241,150],"m":"sta","o":"wiztips_one_anim_frame1,x","oa":38641},{"a":38605,"l":"b_96CD","t":"code","b":[232],"m":"inx","x":[38587]},{"a":38606,"t":"code","b":[224,3],"m":"cpx","o":"#$03"},{"a":38608,"t":"code","b":[208,224],"m":"bne","o":"b_96B2","oa":38578},{"a":38610,"t":"code","b":[172,241,150],"m":"ldy","o":"wiztips_one_anim_frame1","oa":38641},{"a":38613,"t":"code","b":[185,247,150],"m":"lda","o":"wiztips_one_alien1_frames,y","oa":38647},{"a":38616,"t":"code","b":[141,219,149],"m":"sta","o":"wiztips_one_alien1_shape","oa":38363},{"a":38619,"t":"code","b":[172,242,150],"m":"ldy","o":"wiztips_one_anim_frame2","oa":38642},{"a":38622,"t":"code","b":[185,251,150],"m":"lda","o":"wiztips_one_alien2_frames,y","oa":38651},{"a":38625,"t":"code","b":[141,224,149],"m":"sta","o":"wiztips_one_alien2_shape","oa":38368},{"a":38628,"t":"code","b":[172,243,150],"m":"ldy","o":"wiztips_one_anim_frame3","oa":38643},{"a":38631,"t":"code","b":[185,255,150],"m":"lda","o":"wiztips_one_alien3_frames,y","oa":38655},{"a":38634,"t":"code","b":[141,229,149],"m":"sta","o":"wiztips_one_alien3_shape","oa":38373},{"a":38637,"t":"code","b":[96],"m":"rts"},{"a":38638,"l":"wiztips_one_anim_timers","c":"Three frame counters, one per alien on Wiztips page one ($96EE-$96F0), counted up by $9681 and reset at the period in $96F4.","t":"byte","b":[0,0,0],"x":[38578,38581,38591]},{"a":38641,"l":"wiztips_one_anim_frame1","c":"Animation frame, 0-3, of page one's first alien, and the base of the three frames $96F1-$96F3 that $96C2 advances by index; read at $96D2 to pick a shape from $96F7.","t":"byte","b":[0],"x":[38594,38597,38602,38610]},{"a":38642,"l":"wiztips_one_anim_frame2","c":"Animation frame of page one's second alien, read at $96DB to pick its shape from $96FB.","t":"byte","b":[0],"x":[38619]},{"a":38643,"l":"wiztips_one_anim_frame3","c":"Animation frame of page one's third alien, read at $96E4 to pick its shape from $96FF.","t":"byte","b":[0],"x":[38628]},{"a":38644,"l":"wiztips_one_anim_periods","c":"Frames per animation step of the three aliens on Wiztips page one: 6, 4, 4 (compared at $96B8).","t":"byte","b":[6,4,4],"x":[38584]},{"a":38647,"l":"wiztips_one_alien1_frames","c":"Shapes of page one's first alien, frames 0-3: $4C, $4D, $4E, $4F.","t":"byte","b":[76,77,78,79],"x":[38613]},{"a":38651,"l":"wiztips_one_alien2_frames","c":"Shapes of page one's second alien, frames 0-3: $46, $47, $48, $49.","t":"byte","b":[70,71,72,73],"x":[38622]},{"a":38655,"l":"wiztips_one_alien3_frames","c":"Shapes of page one's third alien, frames 0-3: $3C, $3D, $3E, $3D.","t":"byte","b":[60,61,62,61],"x":[38631]},{"a":38659,"l":"band_wiztips1_subtitle","c":"Wiztips page one band at raster $41: text colour $D021 = $EBD2 with bit 3 flipped (the lighter or darker shade of the title's colour) for 'getting  started'.","t":"code","b":[173,210,235],"m":"lda","o":"colours_d2","oa":60370},{"a":38662,"t":"code","b":[73,8],"m":"eor","o":"#$08"},{"a":38664,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":38667,"t":"code","b":[96],"m":"rts"},{"a":38668,"l":"band_wiztips1_body","c":"Wiztips page one band at raster $50: text colour $D021 = $EBF2 for the 'shoot' and 'pickup' rows.","t":"code","b":[173,242,235],"m":"lda","o":"colours_f2","oa":60402},{"a":38671,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":38674,"t":"code","b":[96],"m":"rts"},{"a":38675,"l":"unused_band_ebd7","c":"Seven bytes shaped like a band routine, LDA $EBD7 / STA $D021 / RTS, that no display list or code refers to: apparently a leftover, left undefined.","t":"byte","b":[173,215,235,141,33,208,96]},{"a":38682,"l":"band_wiztips1_icon_text1","c":"Wiztips page one band at raster $B4: text colour $D021 = $EBD8 for 'thrust  anti-grav  beam' (row 17).","t":"code","b":[173,216,235],"m":"lda","o":"colours_d8","oa":60376},{"a":38685,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":38688,"t":"code","b":[96],"m":"rts"},{"a":38689,"l":"band_wiztips1_icon_text2","c":"Wiztips page one band at raster $CD: text colour $D021 = $EBD9 for 'double  cat  blazers' (row 20).","t":"code","b":[173,217,235],"m":"lda","o":"colours_d9","oa":60377},{"a":38692,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":38695,"t":"code","b":[96],"m":"rts"},{"a":38696,"l":"band_wiztips1_icon_text3","c":"Wiztips page one band at raster $E6: text colour $D021 = $EBDA for 'wizspray  catspray  shield' (row 23).","t":"code","b":[173,218,235],"m":"lda","o":"colours_da","oa":60378},{"a":38699,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":38702,"t":"code","b":[96],"m":"rts"},{"a":38703,"l":"band_wiztips1_wiggle_row","c":"Wiztips page one band at raster $97: sprite multicolours $D026 = 1, $D025 = 6 for the icons below, then colours 'wiggle joystick to select..' (row 13) in stripes from raster $99 (falls into $973B).","t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":38705,"t":"code","b":[141,38,208],"m":"sta","o":"vic_sprite_mc1"},{"a":38708,"t":"code","b":[169,6],"m":"lda","o":"#$06"},{"a":38710,"t":"code","b":[141,37,208],"m":"sta","o":"vic_sprite_mc0"},{"a":38713,"t":"code","b":[160,153],"m":"ldy","o":"#$99"},{"a":38715,"l":"colour_row_red_ramp","c":"Colours one text row in four stripes of two lines. Y = raster line; for X = 0 to 3 waits until the raster is past Y, sets $D021 = $EBE4+X (the head of the ramp $98E9 feeds from $B5CB), Y += 2. Unlike $9401 it leaves the last colour set. Used by $972F, $97D2 and the bands at $6DE3.","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[28133,28136,38868]},{"a":38717,"l":"b_973D","t":"code","b":[204,18,208],"m":"cpy","o":"vic_raster","x":[38720,38733]},{"a":38720,"t":"code","b":[16,251],"m":"bpl","o":"b_973D","oa":38717},{"a":38722,"t":"code","b":[189,228,235],"m":"lda","o":"colours_e4,x","oa":60388},{"a":38725,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":38728,"t":"code","b":[200],"m":"iny"},{"a":38729,"t":"code","b":[200],"m":"iny"},{"a":38730,"t":"code","b":[232],"m":"inx"},{"a":38731,"t":"code","b":[224,4],"m":"cpx","o":"#$04"},{"a":38733,"t":"code","b":[208,238],"m":"bne","o":"b_973D","oa":38717},{"a":38735,"t":"code","b":[96],"m":"rts"},{"a":38736,"l":"band_wiztips1_icon_sprites","c":"Wiztips page one band at raster $BE: reuses sprites 0-5 for icon rows 20 and 23 from $95FF ($94EA).","t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":38738,"t":"code","b":[173,121,150],"m":"lda","o":"ptr_wiztips_one_icons_lo","oa":38521},{"a":38741,"t":"code","b":[133,125],"m":"sta","o":"wiztips_sprite_table_lo","oa":125},{"a":38743,"t":"code","b":[173,122,150],"m":"lda","o":"ptr_wiztips_one_icons_hi","oa":38522},{"a":38746,"t":"code","b":[133,126],"m":"sta","o":"wiztips_sprite_table_hi","oa":126},{"a":38748,"t":"code","b":[169,6],"m":"lda","o":"#$06"},{"a":38750,"t":"code","b":[32,234,148],"m":"jsr","o":"place_sprites","oa":38122},{"a":38753,"t":"code","b":[96],"m":"rts"},{"a":38754,"l":"band_wiztips2_top","c":"Wiztips page two, band at raster 1. Every fourth frame ($97C0) advances the phase $97C1; writes the sphere shape for the phase ($97B8) into $9621 and droplet shapes ($97BC, one phase further for each record) into $9626 and the eight legend records ($962B + 5n); places sprites 0-7 from $961D; multicolours $D025 = $0B, $D026 = $0D; text colour $D021 = $EBD2 for 'wiztips two'.","t":"code","b":[238,192,151],"m":"inc","o":"wiztips_two_frame_count","oa":38848},{"a":38757,"t":"code","b":[173,192,151],"m":"lda","o":"wiztips_two_frame_count","oa":38848},{"a":38760,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":38762,"t":"code","b":[208,3],"m":"bne","o":"b_976F","oa":38767},{"a":38764,"t":"code","b":[238,193,151],"m":"inc","o":"wiztips_two_phase","oa":38849},{"a":38767,"l":"b_976F","t":"code","b":[173,193,151],"m":"lda","o":"wiztips_two_phase","oa":38849,"x":[38762]},{"a":38770,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":38772,"t":"code","b":[168],"m":"tay"},{"a":38773,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":38775,"l":"b_9777","t":"code","b":[185,188,151],"m":"lda","o":"wiztips_two_droplet_frames,y","oa":38844,"x":[38804]},{"a":38778,"t":"code","b":[157,43,150],"m":"sta","o":"wiztips_two_legend_shapes,x","oa":38443},{"a":38781,"t":"code","b":[141,38,150],"m":"sta","o":"wiztips_two_droplet_shape","oa":38438},{"a":38784,"t":"code","b":[185,184,151],"m":"lda","o":"wiztips_two_sphere_frames,y","oa":38840},{"a":38787,"t":"code","b":[141,33,150],"m":"sta","o":"wiztips_two_sphere_shape","oa":38433},{"a":38790,"t":"code","b":[200],"m":"iny"},{"a":38791,"t":"code","b":[192,4],"m":"cpy","o":"#$04"},{"a":38793,"t":"code","b":[208,2],"m":"bne","o":"b_978D","oa":38797},{"a":38795,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":38797,"l":"b_978D","t":"code","b":[138],"m":"txa","x":[38793]},{"a":38798,"t":"code","b":[24],"m":"clc"},{"a":38799,"t":"code","b":[105,5],"m":"adc","o":"#$05"},{"a":38801,"t":"code","b":[170],"m":"tax"},{"a":38802,"t":"code","b":[224,40],"m":"cpx","o":"#$28"},{"a":38804,"t":"code","b":[208,225],"m":"bne","o":"b_9777","oa":38775},{"a":38806,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":38808,"t":"code","b":[173,123,150],"m":"lda","o":"ptr_wiztips_two_sprites_lo","oa":38523},{"a":38811,"t":"code","b":[133,125],"m":"sta","o":"wiztips_sprite_table_lo","oa":125},{"a":38813,"t":"code","b":[173,124,150],"m":"lda","o":"ptr_wiztips_two_sprites_hi","oa":38524},{"a":38816,"t":"code","b":[133,126],"m":"sta","o":"wiztips_sprite_table_hi","oa":126},{"a":38818,"t":"code","b":[169,8],"m":"lda","o":"#$08"},{"a":38820,"t":"code","b":[32,234,148],"m":"jsr","o":"place_sprites","oa":38122},{"a":38823,"t":"code","b":[169,11],"m":"lda","o":"#$0B"},{"a":38825,"t":"code","b":[141,37,208],"m":"sta","o":"vic_sprite_mc0"},{"a":38828,"t":"code","b":[169,13],"m":"lda","o":"#$0D"},{"a":38830,"t":"code","b":[141,38,208],"m":"sta","o":"vic_sprite_mc1"},{"a":38833,"t":"code","b":[173,210,235],"m":"lda","o":"colours_d2","oa":60370},{"a":38836,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":38839,"t":"code","b":[96],"m":"rts"},{"a":38840,"l":"wiztips_two_sphere_frames","c":"Shapes of the colour sphere on Wiztips page two, by phase: $7C, $7B, $7C, $7D.","t":"byte","b":[124,123,124,125],"x":[38784]},{"a":38844,"l":"wiztips_two_droplet_frames","c":"Shapes of the droplets on Wiztips page two, by phase: $50, $51, $52, $51.","t":"byte","b":[80,81,82,81],"x":[38775]},{"a":38848,"l":"wiztips_two_frame_count","c":"Frame counter of the Wiztips page two animation; $9762 steps the phase every fourth frame.","t":"byte","b":[0],"x":[38754,38757]},{"a":38849,"l":"wiztips_two_phase","c":"Animation phase, used modulo 4, of the sphere and droplets on Wiztips page two.","t":"byte","b":[0],"x":[38764,38767]},{"a":38850,"l":"band_wiztips2_subtitle","c":"Wiztips page two band at raster $41: text colour $EBD2 with bit 3 flipped for 'cat  control' (the same code as $9703 and $97FC).","t":"code","b":[173,210,235],"m":"lda","o":"colours_d2","oa":60370},{"a":38853,"t":"code","b":[73,8],"m":"eor","o":"#$08"},{"a":38855,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":38858,"t":"code","b":[96],"m":"rts"},{"a":38859,"l":"band_wiztips2_control_rows","c":"Wiztips page two band at raster $50: text colour $D021 = $EBF1 for 'one plr - hold down fire' and 'two plr team - other joystick port'.","t":"code","b":[173,241,235],"m":"lda","o":"colours_f1","oa":60401},{"a":38862,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":38865,"t":"code","b":[96],"m":"rts"},{"a":38866,"l":"band_wiztips2_shoot_row","c":"Wiztips page two band at raster $7F: colours 'shoot , pickup with cat for,' (row 10) in stripes from raster $81 ($973B).","t":"code","b":[160,129],"m":"ldy","o":"#$81"},{"a":38868,"t":"code","b":[76,59,151],"m":"jmp","o":"colour_row_red_ramp","oa":38715},{"a":38871,"l":"band_wiztips2_legend","c":"Wiztips page two band at raster $96: text colour $EBD1 with bit 3 flipped for the droplet legend (rows 14-23); reuses sprites 0-1 for the last droplet row from $9645.","t":"code","b":[173,209,235],"m":"lda","o":"title_band_bg","oa":60369},{"a":38874,"t":"code","b":[73,8],"m":"eor","o":"#$08"},{"a":38876,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":38879,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":38881,"t":"code","b":[173,125,150],"m":"lda","o":"ptr_wiztips_two_last_row_lo","oa":38525},{"a":38884,"t":"code","b":[133,125],"m":"sta","o":"wiztips_sprite_table_lo","oa":125},{"a":38886,"t":"code","b":[173,126,150],"m":"lda","o":"ptr_wiztips_two_last_row_hi","oa":38526},{"a":38889,"t":"code","b":[133,126],"m":"sta","o":"wiztips_sprite_table_hi","oa":126},{"a":38891,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":38893,"t":"code","b":[76,234,148],"m":"jmp","o":"place_sprites","oa":38122},{"a":38896,"l":"band_wiztips3_top","c":"Wiztips page three (no sprites), band at raster 1: text colour $D021 = $EBD2 for 'wiztips three', all sprites off.","t":"code","b":[173,210,235],"m":"lda","o":"colours_d2","oa":60370},{"a":38899,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":38902,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":38904,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":38907,"t":"code","b":[96],"m":"rts"},{"a":38908,"l":"band_wiztips3_subtitle","c":"Wiztips page three band at raster $41: text colour $EBD2 with bit 3 flipped for 'general  hints'.","t":"code","b":[173,210,235],"m":"lda","o":"colours_d2","oa":60370},{"a":38911,"t":"code","b":[73,8],"m":"eor","o":"#$08"},{"a":38913,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":38916,"t":"code","b":[96],"m":"rts"},{"a":38917,"l":"band_wiztips3_hint_a","c":"Wiztips page three band at rasters $5E, $8E, $C6 and $EE: text colour from $9821 by $EBB8 AND 3 (the counter $98BE steps), for the first, third and fifth hints.","t":"code","b":[173,184,235],"m":"lda","o":"colours_d7_step","oa":60344},{"a":38920,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":38922,"t":"code","b":[168],"m":"tay"},{"a":38923,"t":"code","b":[185,33,152],"m":"lda","o":"wiztips_three_colours_a,y","oa":38945},{"a":38926,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":38929,"t":"code","b":[96],"m":"rts"},{"a":38930,"l":"band_wiztips3_hint_b","c":"Wiztips page three band at rasters $76, $A6 and $D6: text colour from $9825 by ($EBB8 AND 3) EOR 3, for the second and fourth hints and 'continue game feature....', so they cycle out of step with the others.","t":"code","b":[173,184,235],"m":"lda","o":"colours_d7_step","oa":60344},{"a":38933,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":38935,"t":"code","b":[73,3],"m":"eor","o":"#$03"},{"a":38937,"t":"code","b":[168],"m":"tay"},{"a":38938,"t":"code","b":[185,37,152],"m":"lda","o":"wiztips_three_colours_b,y","oa":38949},{"a":38941,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":38944,"t":"code","b":[96],"m":"rts"},{"a":38945,"l":"wiztips_three_colours_a","c":"Four text colours for $9805: 2, 8, $0E, 8 (red, orange, light blue, orange).","t":"byte","b":[2,8,14,8],"x":[38923]},{"a":38949,"l":"wiztips_three_colours_b","c":"Four text colours for $9812, read backwards: $0E, 8, 2, 8.","t":"byte","b":[14,8,2,8],"x":[38938]},{"a":38953,"l":"title_colour_fade_in","c":"Title-screen colour sequencer, once a frame from the title loop ($8FFB). Counts $EBF3 up to $FF (it starts at 0: $8FA0 clears the colour state) and starts the cycles one by one, so the screen appears in stages: from frame 10 the logo bars ($9884), 35 'top scores' ($994A), 90 the top score's sprites ($9916), 105 'sensi soft' ($999D), 155 and 195 the table's ramps ($98BE, $98E9), 254 the headings and names ($996A, $997D; the second test at $987C repeats $FE). Until its cycle starts, a colour is 0, black on black.","t":"code","b":[173,243,235],"m":"lda","o":"title_clock","oa":60403,"x":[36859]},{"a":38956,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":38958,"t":"code","b":[240,3],"m":"beq","o":"b_9833","oa":38963},{"a":38960,"t":"code","b":[238,243,235],"m":"inc","o":"title_clock","oa":60403},{"a":38963,"l":"b_9833","t":"code","b":[173,243,235],"m":"lda","o":"title_clock","oa":60403,"x":[38958]},{"a":38966,"t":"code","b":[201,10],"m":"cmp","o":"#$0A"},{"a":38968,"t":"code","b":[144,73],"m":"bcc","o":"r_9883","oa":39043},{"a":38970,"t":"code","b":[32,132,152],"m":"jsr","o":"cycle_logo_colours","oa":39044},{"a":38973,"t":"code","b":[173,243,235],"m":"lda","o":"title_clock","oa":60403},{"a":38976,"t":"code","b":[201,35],"m":"cmp","o":"#$23"},{"a":38978,"t":"code","b":[144,63],"m":"bcc","o":"r_9883","oa":39043},{"a":38980,"t":"code","b":[32,74,153],"m":"jsr","o":"cycle_cyan_colour","oa":39242},{"a":38983,"t":"code","b":[173,243,235],"m":"lda","o":"title_clock","oa":60403},{"a":38986,"t":"code","b":[201,90],"m":"cmp","o":"#$5A"},{"a":38988,"t":"code","b":[144,53],"m":"bcc","o":"r_9883","oa":39043},{"a":38990,"t":"code","b":[32,22,153],"m":"jsr","o":"cycle_green_ramp","oa":39190},{"a":38993,"t":"code","b":[173,243,235],"m":"lda","o":"title_clock","oa":60403},{"a":38996,"t":"code","b":[201,105],"m":"cmp","o":"#$69"},{"a":38998,"t":"code","b":[144,43],"m":"bcc","o":"r_9883","oa":39043},{"a":39000,"t":"code","b":[32,157,153],"m":"jsr","o":"cycle_red_colour","oa":39325},{"a":39003,"t":"code","b":[173,243,235],"m":"lda","o":"title_clock","oa":60403},{"a":39006,"t":"code","b":[201,155],"m":"cmp","o":"#$9B"},{"a":39008,"t":"code","b":[144,33],"m":"bcc","o":"r_9883","oa":39043},{"a":39010,"t":"code","b":[32,190,152],"m":"jsr","o":"cycle_blue_ramp","oa":39102},{"a":39013,"t":"code","b":[173,243,235],"m":"lda","o":"title_clock","oa":60403},{"a":39016,"t":"code","b":[201,195],"m":"cmp","o":"#$C3"},{"a":39018,"t":"code","b":[144,23],"m":"bcc","o":"r_9883","oa":39043},{"a":39020,"t":"code","b":[32,233,152],"m":"jsr","o":"cycle_red_ramp","oa":39145},{"a":39023,"t":"code","b":[173,243,235],"m":"lda","o":"title_clock","oa":60403},{"a":39026,"t":"code","b":[201,254],"m":"cmp","o":"#$FE"},{"a":39028,"t":"code","b":[144,13],"m":"bcc","o":"r_9883","oa":39043},{"a":39030,"t":"code","b":[32,106,153],"m":"jsr","o":"set_orange_colour","oa":39274},{"a":39033,"t":"code","b":[173,243,235],"m":"lda","o":"title_clock","oa":60403},{"a":39036,"t":"code","b":[201,254],"m":"cmp","o":"#$FE"},{"a":39038,"t":"code","b":[144,3],"m":"bcc","o":"r_9883","oa":39043},{"a":39040,"t":"code","b":[32,125,153],"m":"jsr","o":"cycle_blue_colour","oa":39293},{"a":39043,"l":"r_9883","t":"code","b":[96],"m":"rts","x":[38968,38978,38988,38998,39008,39018,39028,39038]},{"a":39044,"l":"cycle_logo_colours","c":"Every second call ($EBB2) scrolls the 16 logo bar colours $EBC1-$EBD0: the lower eight move down a place and the upper eight up, away from the middle, and the middle pair $EBC9-$EBCA take the next colour of the 32-entry sequence at $B5FB (index $EBC0 / 2), so bands of colour flow out from the middle of the WIZBALL logo.","t":"code","b":[238,178,235],"m":"inc","o":"logo_bar_delay","oa":60338,"x":[38970]},{"a":39047,"t":"code","b":[173,178,235],"m":"lda","o":"logo_bar_delay","oa":60338},{"a":39050,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":39052,"t":"code","b":[240,1],"m":"beq","o":"b_988F","oa":39055},{"a":39054,"t":"code","b":[96],"m":"rts"},{"a":39055,"l":"b_988F","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[39052]},{"a":39057,"t":"code","b":[141,178,235],"m":"sta","o":"logo_bar_delay","oa":60338},{"a":39060,"t":"code","b":[162,14],"m":"ldx","o":"#$0E"},{"a":39062,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":39064,"l":"b_9898","t":"code","b":[185,194,235],"m":"lda","o":"logo_bar_2,y","oa":60354,"x":[39080]},{"a":39067,"t":"code","b":[153,193,235],"m":"sta","o":"logo_bar,y","oa":60353},{"a":39070,"t":"code","b":[189,193,235],"m":"lda","o":"logo_bar,x","oa":60353},{"a":39073,"t":"code","b":[157,194,235],"m":"sta","o":"logo_bar_2,x","oa":60354},{"a":39076,"t":"code","b":[200],"m":"iny"},{"a":39077,"t":"code","b":[202],"m":"dex"},{"a":39078,"t":"code","b":[192,8],"m":"cpy","o":"#$08"},{"a":39080,"t":"code","b":[208,238],"m":"bne","o":"b_9898","oa":39064},{"a":39082,"t":"code","b":[238,192,235],"m":"inc","o":"logo_bar_step","oa":60352},{"a":39085,"t":"code","b":[173,192,235],"m":"lda","o":"logo_bar_step","oa":60352},{"a":39088,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39089,"t":"code","b":[41,31],"m":"and","o":"#$1F"},{"a":39091,"t":"code","b":[168],"m":"tay"},{"a":39092,"t":"code","b":[185,251,181],"m":"lda","o":"tbl_title_cycle_long,y","oa":46587},{"a":39095,"t":"code","b":[141,201,235],"m":"sta","o":"logo_bar_mid","oa":60361},{"a":39098,"t":"code","b":[141,202,235],"m":"sta","o":"logo_bar_mid2","oa":60362},{"a":39101,"t":"code","b":[96],"m":"rts"},{"a":39102,"l":"cycle_blue_ramp","c":"Every third call ($EBB3): shifts the 13-colour ramp $EBD7-$EBE2 up one place into $EBD8-$EBE3, steps $EBB8 and puts $B5DF[$EBB8 AND 7] (0, 6, 4, $E, 1, $E, 4, 6: black to white by way of blue) in $EBD7. Read by $9401, the high-score bands and the Wiztips bands; $EBB8 also times Wiztips page three.","t":"code","b":[238,179,235],"m":"inc","o":"colours_d7_delay","oa":60339,"x":[26635,26911,27302,36972,37942,39010]},{"a":39105,"t":"code","b":[173,179,235],"m":"lda","o":"colours_d7_delay","oa":60339},{"a":39108,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":39110,"t":"code","b":[240,1],"m":"beq","o":"b_98C9","oa":39113},{"a":39112,"t":"code","b":[96],"m":"rts"},{"a":39113,"l":"b_98C9","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[39110]},{"a":39115,"t":"code","b":[141,179,235],"m":"sta","o":"colours_d7_delay","oa":60339},{"a":39118,"t":"code","b":[160,12],"m":"ldy","o":"#$0C"},{"a":39120,"l":"b_98D0","t":"code","b":[185,214,235],"m":"lda","o":"colours_d6,y","oa":60374,"x":[39127]},{"a":39123,"t":"code","b":[153,215,235],"m":"sta","o":"colours_d7,y","oa":60375},{"a":39126,"t":"code","b":[136],"m":"dey"},{"a":39127,"t":"code","b":[208,247],"m":"bne","o":"b_98D0","oa":39120},{"a":39129,"t":"code","b":[238,184,235],"m":"inc","o":"colours_d7_step","oa":60344},{"a":39132,"t":"code","b":[173,184,235],"m":"lda","o":"colours_d7_step","oa":60344},{"a":39135,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":39137,"t":"code","b":[168],"m":"tay"},{"a":39138,"t":"code","b":[185,223,181],"m":"lda","o":"tbl_pulse_blue,y","oa":46559},{"a":39141,"t":"code","b":[141,215,235],"m":"sta","o":"colours_d7","oa":60375},{"a":39144,"t":"code","b":[96],"m":"rts"},{"a":39145,"l":"cycle_red_ramp","c":"Every third call ($EBB4): shifts $EBE5-$EBF0 down one place into $EBE4-$EBEF, steps $EBB7 and puts $B5CB[$EBB7 AND 7] (0, 2, 4, $A, 1, $A, 4, 2: black to white by way of red) in $EBF0. Read by $973B and the high-score bands.","t":"code","b":[238,180,235],"m":"inc","o":"colours_e4_delay","oa":60340,"x":[37945,39020]},{"a":39148,"t":"code","b":[173,180,235],"m":"lda","o":"colours_e4_delay","oa":60340},{"a":39151,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":39153,"t":"code","b":[240,1],"m":"beq","o":"b_98F4","oa":39156},{"a":39155,"t":"code","b":[96],"m":"rts"},{"a":39156,"l":"b_98F4","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[39153]},{"a":39158,"t":"code","b":[141,180,235],"m":"sta","o":"colours_e4_delay","oa":60340},{"a":39161,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":39163,"l":"b_98FB","t":"code","b":[185,229,235],"m":"lda","o":"colours_e5,y","oa":60389,"x":[39172]},{"a":39166,"t":"code","b":[153,228,235],"m":"sta","o":"colours_e4,y","oa":60388},{"a":39169,"t":"code","b":[200],"m":"iny"},{"a":39170,"t":"code","b":[192,12],"m":"cpy","o":"#$0C"},{"a":39172,"t":"code","b":[208,245],"m":"bne","o":"b_98FB","oa":39163},{"a":39174,"t":"code","b":[238,183,235],"m":"inc","o":"colours_e4_step","oa":60343},{"a":39177,"t":"code","b":[173,183,235],"m":"lda","o":"colours_e4_step","oa":60343},{"a":39180,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":39182,"t":"code","b":[168],"m":"tay"},{"a":39183,"t":"code","b":[185,203,181],"m":"lda","o":"tbl_pulse_red,y","oa":46539},{"a":39186,"t":"code","b":[141,240,235],"m":"sta","o":"colours_f0","oa":60400},{"a":39189,"t":"code","b":[96],"m":"rts"},{"a":39190,"l":"cycle_green_ramp","c":"Every third call ($EBB5): shifts $EBD3-$EBD5 down into $EBD2-$EBD4, steps $EBBB (0-7) and puts $B5E7[$EBBB] (5, $D, 1, $D: greens and white) in $EBD5. $EBD2 is the Wiztips title colour; $EBD2-$EBD5 colour the top score's sprites.","t":"code","b":[238,181,235],"m":"inc","o":"colours_d2_delay","oa":60341,"x":[37948,38990]},{"a":39193,"t":"code","b":[173,181,235],"m":"lda","o":"colours_d2_delay","oa":60341},{"a":39196,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":39198,"t":"code","b":[240,1],"m":"beq","o":"b_9921","oa":39201},{"a":39200,"t":"code","b":[96],"m":"rts"},{"a":39201,"l":"b_9921","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[39198]},{"a":39203,"t":"code","b":[141,181,235],"m":"sta","o":"colours_d2_delay","oa":60341},{"a":39206,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":39208,"l":"b_9928","t":"code","b":[185,211,235],"m":"lda","o":"colours_d3,y","oa":60371,"x":[39217]},{"a":39211,"t":"code","b":[153,210,235],"m":"sta","o":"colours_d2,y","oa":60370},{"a":39214,"t":"code","b":[200],"m":"iny"},{"a":39215,"t":"code","b":[192,3],"m":"cpy","o":"#$03"},{"a":39217,"t":"code","b":[208,245],"m":"bne","o":"b_9928","oa":39208},{"a":39219,"t":"code","b":[238,187,235],"m":"inc","o":"colours_d2_step","oa":60347},{"a":39222,"t":"code","b":[173,187,235],"m":"lda","o":"colours_d2_step","oa":60347},{"a":39225,"t":"code","b":[201,8],"m":"cmp","o":"#$08"},{"a":39227,"t":"code","b":[208,5],"m":"bne","o":"b_9942","oa":39234},{"a":39229,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":39231,"t":"code","b":[141,187,235],"m":"sta","o":"colours_d2_step","oa":60347},{"a":39234,"l":"b_9942","t":"code","b":[168],"m":"tay","x":[39227]},{"a":39235,"t":"code","b":[185,231,181],"m":"lda","o":"tbl_title_cycle_green,y","oa":46567},{"a":39238,"t":"code","b":[141,213,235],"m":"sta","o":"colours_d5","oa":60373},{"a":39241,"t":"code","b":[96],"m":"rts"},{"a":39242,"l":"cycle_cyan_colour","c":"Every seventh call ($EBBA, back to 0): steps $EBB9 and sets $EBD1 = $B5EF[$EBB9 AND 3] (0, 6, 3, $E).","t":"code","b":[238,186,235],"m":"inc","o":"colours_d1_delay","oa":60346,"x":[36975,37951,38980]},{"a":39245,"t":"code","b":[173,186,235],"m":"lda","o":"colours_d1_delay","oa":60346},{"a":39248,"t":"code","b":[201,7],"m":"cmp","o":"#$07"},{"a":39250,"t":"code","b":[240,1],"m":"beq","o":"b_9955","oa":39253},{"a":39252,"t":"code","b":[96],"m":"rts"},{"a":39253,"l":"b_9955","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[39250]},{"a":39255,"t":"code","b":[141,186,235],"m":"sta","o":"colours_d1_delay","oa":60346},{"a":39258,"t":"code","b":[238,185,235],"m":"inc","o":"colours_d1_step","oa":60345},{"a":39261,"t":"code","b":[173,185,235],"m":"lda","o":"colours_d1_step","oa":60345},{"a":39264,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":39266,"t":"code","b":[168],"m":"tay"},{"a":39267,"t":"code","b":[185,239,181],"m":"lda","o":"tbl_title_cycle_blue,y","oa":46575},{"a":39270,"t":"code","b":[141,209,235],"m":"sta","o":"title_band_bg","oa":60369},{"a":39273,"t":"code","b":[96],"m":"rts"},{"a":39274,"l":"set_orange_colour","c":"In the frame $994A steps (while $EBBA is 0): sets $EBD6 = $B5F3[$EBB9 AND 3] (2, 9, 8, 9).","t":"code","b":[173,186,235],"m":"lda","o":"colours_d1_delay","oa":60346,"x":[36978,37954,39030]},{"a":39277,"t":"code","b":[240,1],"m":"beq","o":"b_9970","oa":39280},{"a":39279,"t":"code","b":[96],"m":"rts"},{"a":39280,"l":"b_9970","t":"code","b":[173,185,235],"m":"lda","o":"colours_d1_step","oa":60345,"x":[39277]},{"a":39283,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":39285,"t":"code","b":[168],"m":"tay"},{"a":39286,"t":"code","b":[185,243,181],"m":"lda","o":"tbl_title_cycle_brown,y","oa":46579},{"a":39289,"t":"code","b":[141,214,235],"m":"sta","o":"colours_d6","oa":60374},{"a":39292,"t":"code","b":[96],"m":"rts"},{"a":39293,"l":"cycle_blue_colour","c":"Every fourth call ($EBBC): steps $EBBD and sets $EBF1 = $B5DF[$EBBD AND 7].","t":"code","b":[238,188,235],"m":"inc","o":"colours_f1_delay","oa":60348,"x":[37957,39040]},{"a":39296,"t":"code","b":[173,188,235],"m":"lda","o":"colours_f1_delay","oa":60348},{"a":39299,"t":"code","b":[201,4],"m":"cmp","o":"#$04"},{"a":39301,"t":"code","b":[240,1],"m":"beq","o":"b_9988","oa":39304},{"a":39303,"t":"code","b":[96],"m":"rts"},{"a":39304,"l":"b_9988","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[39301]},{"a":39306,"t":"code","b":[141,188,235],"m":"sta","o":"colours_f1_delay","oa":60348},{"a":39309,"t":"code","b":[238,189,235],"m":"inc","o":"colours_f1_step","oa":60349},{"a":39312,"t":"code","b":[173,189,235],"m":"lda","o":"colours_f1_step","oa":60349},{"a":39315,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":39317,"t":"code","b":[168],"m":"tay"},{"a":39318,"t":"code","b":[185,223,181],"m":"lda","o":"tbl_pulse_blue,y","oa":46559},{"a":39321,"t":"code","b":[141,241,235],"m":"sta","o":"colours_f1","oa":60401},{"a":39324,"t":"code","b":[96],"m":"rts"},{"a":39325,"l":"cycle_red_colour","c":"Every fourth call ($EBBE): steps $EBBF and sets $EBF2 = $B5CB[$EBBF AND 7].","t":"code","b":[238,190,235],"m":"inc","o":"colours_f2_delay","oa":60350,"x":[37960,39000]},{"a":39328,"t":"code","b":[173,190,235],"m":"lda","o":"colours_f2_delay","oa":60350},{"a":39331,"t":"code","b":[201,4],"m":"cmp","o":"#$04"},{"a":39333,"t":"code","b":[240,1],"m":"beq","o":"b_99A8","oa":39336},{"a":39335,"t":"code","b":[96],"m":"rts"},{"a":39336,"l":"b_99A8","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[39333]},{"a":39338,"t":"code","b":[141,190,235],"m":"sta","o":"colours_f2_delay","oa":60350},{"a":39341,"t":"code","b":[238,191,235],"m":"inc","o":"colours_f2_step","oa":60351},{"a":39344,"t":"code","b":[173,191,235],"m":"lda","o":"colours_f2_step","oa":60351},{"a":39347,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":39349,"t":"code","b":[168],"m":"tay"},{"a":39350,"t":"code","b":[185,203,181],"m":"lda","o":"tbl_pulse_red,y","oa":46539},{"a":39353,"t":"code","b":[141,242,235],"m":"sta","o":"colours_f2","oa":60402},{"a":39356,"t":"code","b":[96],"m":"rts"},{"a":39357,"l":"update_alien_bullets","c":"Moves and draws the alien bullets, once a frame in play ($6444), in the bonus stage ($65B0) and at $7DE7, not while $B1CF is set. When $B1FF is positive every record's column moves one left, when negative one right: apparently to keep the bullets on the landscape when it scrolls by a whole character. Then flips $B280 and handles half the 16 records at $0300, 0-7 or 8-15 in turn, calling $9A14 for each in use. Record, 16 bytes: +0 column, +1 row, +2/+3 position in the cell (0-31), +4/+5 X and Y speed (signed), +6 the character under the bullet, +7/+8 its screen address (high, low), +9 its colour RAM page, +$A state (0 free, 2 just fired, 1 flying), +$B colour counter.","t":"code","b":[173,255,177],"m":"lda","o":"scroll_step","oa":45567,"x":[25668,26032,32231]},{"a":39360,"t":"code","b":[240,32],"m":"beq","o":"b_99E2","oa":39394},{"a":39362,"t":"code","b":[48,16],"m":"bmi","o":"b_99D4","oa":39380},{"a":39364,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":39366,"l":"b_99C6","t":"code","b":[222,0,3],"m":"dec","o":"bullet_column,x","oa":768,"x":[39376]},{"a":39369,"t":"code","b":[138],"m":"txa"},{"a":39370,"t":"code","b":[24],"m":"clc"},{"a":39371,"t":"code","b":[105,16],"m":"adc","o":"#$10"},{"a":39373,"t":"code","b":[170],"m":"tax"},{"a":39374,"t":"code","b":[224,0],"m":"cpx","o":"#$00"},{"a":39376,"t":"code","b":[208,244],"m":"bne","o":"b_99C6","oa":39366},{"a":39378,"t":"code","b":[240,14],"m":"beq","o":"b_99E2","oa":39394},{"a":39380,"l":"b_99D4","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[39362]},{"a":39382,"l":"b_99D6","t":"code","b":[254,0,3],"m":"inc","o":"bullet_column,x","oa":768,"x":[39392]},{"a":39385,"t":"code","b":[138],"m":"txa"},{"a":39386,"t":"code","b":[24],"m":"clc"},{"a":39387,"t":"code","b":[105,16],"m":"adc","o":"#$10"},{"a":39389,"t":"code","b":[170],"m":"tax"},{"a":39390,"t":"code","b":[224,0],"m":"cpx","o":"#$00"},{"a":39392,"t":"code","b":[208,244],"m":"bne","o":"b_99D6","oa":39382},{"a":39394,"l":"b_99E2","t":"code","b":[173,128,178],"m":"lda","o":"bullet_half","oa":45696,"x":[39360,39378]},{"a":39397,"t":"code","b":[73,1],"m":"eor","o":"#$01"},{"a":39399,"t":"code","b":[141,128,178],"m":"sta","o":"bullet_half","oa":45696},{"a":39402,"t":"code","b":[240,20],"m":"beq","o":"b_9A00","oa":39424},{"a":39404,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":39406,"l":"b_99EE","t":"code","b":[189,10,3],"m":"lda","o":"bullet_state,x","oa":778,"x":[39421]},{"a":39409,"t":"code","b":[240,3],"m":"beq","o":"b_99F6","oa":39414},{"a":39411,"t":"code","b":[32,20,154],"m":"jsr","o":"move_alien_bullet","oa":39444},{"a":39414,"l":"b_99F6","t":"code","b":[138],"m":"txa","x":[39409]},{"a":39415,"t":"code","b":[24],"m":"clc"},{"a":39416,"t":"code","b":[105,16],"m":"adc","o":"#$10"},{"a":39418,"t":"code","b":[170],"m":"tax"},{"a":39419,"t":"code","b":[224,128],"m":"cpx","o":"#$80"},{"a":39421,"t":"code","b":[208,239],"m":"bne","o":"b_99EE","oa":39406},{"a":39423,"t":"code","b":[96],"m":"rts"},{"a":39424,"l":"b_9A00","t":"code","b":[162,128],"m":"ldx","o":"#$80","x":[39402]},{"a":39426,"l":"b_9A02","t":"code","b":[189,10,3],"m":"lda","o":"bullet_state,x","oa":778,"x":[39441]},{"a":39429,"t":"code","b":[240,3],"m":"beq","o":"b_9A0A","oa":39434},{"a":39431,"t":"code","b":[32,20,154],"m":"jsr","o":"move_alien_bullet","oa":39444},{"a":39434,"l":"b_9A0A","t":"code","b":[138],"m":"txa","x":[39429]},{"a":39435,"t":"code","b":[24],"m":"clc"},{"a":39436,"t":"code","b":[105,16],"m":"adc","o":"#$10"},{"a":39438,"t":"code","b":[170],"m":"tax"},{"a":39439,"t":"code","b":[224,0],"m":"cpx","o":"#$00"},{"a":39441,"t":"code","b":[208,239],"m":"bne","o":"b_9A02","oa":39426},{"a":39443,"t":"code","b":[96],"m":"rts"},{"a":39444,"l":"move_alien_bullet","c":"Moves one bullet (X = record offset, A = its state; 2 becomes 1). Adds the X speed to the position in the cell (0-31), stepping a column on overflow or underflow, and the same for Y and the row; at row 20 or more, or column 39 or more, the record is freed. Otherwise reads and saves the character under it on the landscape screen (page from $B1FD and the row tables $0519/$0500, three rows down) with its address; over a character of $80 or more (scenery) the bullet is freed, or only not drawn while $B1D0 is non-zero; else draws character $5B-$6A from $B8E1, the one with a dot at the bullet's place in the cell (4 x 4 places), coloured from $B885 (1, 4, 1, 6, 1, 7, 1, 2: flashing).","t":"code","b":[201,2],"m":"cmp","o":"#$02","x":[39411,39431]},{"a":39446,"t":"code","b":[208,3],"m":"bne","o":"b_9A1B","oa":39451},{"a":39448,"t":"code","b":[222,10,3],"m":"dec","o":"bullet_state,x","oa":778},{"a":39451,"l":"b_9A1B","t":"code","b":[189,2,3],"m":"lda","o":"bullet_cell_x,x","oa":770,"x":[39446]},{"a":39454,"t":"code","b":[24],"m":"clc"},{"a":39455,"t":"code","b":[125,4,3],"m":"adc","o":"bullet_dx,x","oa":772},{"a":39458,"t":"code","b":[168],"m":"tay"},{"a":39459,"t":"code","b":[41,31],"m":"and","o":"#$1F"},{"a":39461,"t":"code","b":[157,2,3],"m":"sta","o":"bullet_cell_x,x","oa":770},{"a":39464,"t":"code","b":[192,0],"m":"cpy","o":"#$00"},{"a":39466,"t":"code","b":[48,10],"m":"bmi","o":"b_9A36","oa":39478},{"a":39468,"t":"code","b":[192,32],"m":"cpy","o":"#$20"},{"a":39470,"t":"code","b":[48,9],"m":"bmi","o":"b_9A39","oa":39481},{"a":39472,"t":"code","b":[254,0,3],"m":"inc","o":"bullet_column,x","oa":768},{"a":39475,"t":"code","b":[254,0,3],"m":"inc","o":"bullet_column,x","oa":768},{"a":39478,"l":"b_9A36","t":"code","b":[222,0,3],"m":"dec","o":"bullet_column,x","oa":768,"x":[39466]},{"a":39481,"l":"b_9A39","t":"code","b":[189,3,3],"m":"lda","o":"bullet_cell_y,x","oa":771,"x":[39470]},{"a":39484,"t":"code","b":[24],"m":"clc"},{"a":39485,"t":"code","b":[125,5,3],"m":"adc","o":"bullet_dy,x","oa":773},{"a":39488,"t":"code","b":[168],"m":"tay"},{"a":39489,"t":"code","b":[41,31],"m":"and","o":"#$1F"},{"a":39491,"t":"code","b":[157,3,3],"m":"sta","o":"bullet_cell_y,x","oa":771},{"a":39494,"t":"code","b":[192,0],"m":"cpy","o":"#$00"},{"a":39496,"t":"code","b":[48,10],"m":"bmi","o":"b_9A54","oa":39508},{"a":39498,"t":"code","b":[192,32],"m":"cpy","o":"#$20"},{"a":39500,"t":"code","b":[48,9],"m":"bmi","o":"b_9A57","oa":39511},{"a":39502,"t":"code","b":[254,1,3],"m":"inc","o":"bullet_row,x","oa":769},{"a":39505,"t":"code","b":[254,1,3],"m":"inc","o":"bullet_row,x","oa":769},{"a":39508,"l":"b_9A54","t":"code","b":[222,1,3],"m":"dec","o":"bullet_row,x","oa":769,"x":[39496]},{"a":39511,"l":"b_9A57","t":"code","b":[189,1,3],"m":"lda","o":"bullet_row,x","oa":769,"x":[39500]},{"a":39514,"t":"code","b":[201,20],"m":"cmp","o":"#$14"},{"a":39516,"t":"code","b":[176,7],"m":"bcs","o":"b_9A65","oa":39525},{"a":39518,"t":"code","b":[189,0,3],"m":"lda","o":"bullet_column,x","oa":768},{"a":39521,"t":"code","b":[201,39],"m":"cmp","o":"#$27"},{"a":39523,"t":"code","b":[144,6],"m":"bcc","o":"b_9A6B","oa":39531},{"a":39525,"l":"b_9A65","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[39516,39627]},{"a":39527,"t":"code","b":[157,10,3],"m":"sta","o":"bullet_state,x","oa":778},{"a":39530,"t":"code","b":[96],"m":"rts"},{"a":39531,"l":"b_9A6B","t":"code","b":[173,253,177],"m":"lda","o":"screen_shown","oa":45565,"x":[39523]},{"a":39534,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39535,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39536,"t":"code","b":[188,1,3],"m":"ldy","o":"bullet_row,x","oa":769},{"a":39539,"t":"code","b":[200],"m":"iny"},{"a":39540,"t":"code","b":[200],"m":"iny"},{"a":39541,"t":"code","b":[200],"m":"iny"},{"a":39542,"t":"code","b":[25,25,5],"m":"ora","o":"screen_row_hi,y","oa":1305},{"a":39545,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":39547,"t":"code","b":[157,7,3],"m":"sta","o":"bullet_screen_hi,x","oa":775},{"a":39550,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":39552,"t":"code","b":[9,216],"m":"ora","o":"#$D8"},{"a":39554,"t":"code","b":[157,9,3],"m":"sta","o":"bullet_colour_page,x","oa":777},{"a":39557,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":39559,"t":"code","b":[185,0,5],"m":"lda","o":"screen_row_lo,y","oa":1280},{"a":39562,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":39564,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":39566,"t":"code","b":[157,8,3],"m":"sta","o":"bullet_screen_lo,x","oa":776},{"a":39569,"t":"code","b":[188,0,3],"m":"ldy","o":"bullet_column,x","oa":768},{"a":39572,"t":"code","b":[177,96],"m":"lda","o":"(zp_ptr_60),y","oa":96},{"a":39574,"t":"code","b":[157,6,3],"m":"sta","o":"bullet_saved_char,x","oa":774},{"a":39577,"t":"code","b":[48,43],"m":"bmi","o":"b_9AC6","oa":39622},{"a":39579,"t":"code","b":[189,2,3],"m":"lda","o":"bullet_cell_x,x","oa":770},{"a":39582,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39583,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39584,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39585,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":39587,"t":"code","b":[189,3,3],"m":"lda","o":"bullet_cell_y,x","oa":771},{"a":39590,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39591,"t":"code","b":[41,12],"m":"and","o":"#$0C"},{"a":39593,"t":"code","b":[5,103],"m":"ora","o":"zp_temp_67","oa":103},{"a":39595,"t":"code","b":[168],"m":"tay"},{"a":39596,"t":"code","b":[185,225,184],"m":"lda","o":"tbl_bullet_chars,y","oa":47329},{"a":39599,"t":"code","b":[188,0,3],"m":"ldy","o":"bullet_column,x","oa":768},{"a":39602,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":39604,"t":"code","b":[254,11,3],"m":"inc","o":"bullet_colour_count,x","oa":779},{"a":39607,"t":"code","b":[189,11,3],"m":"lda","o":"bullet_colour_count,x","oa":779},{"a":39610,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":39612,"t":"code","b":[168],"m":"tay"},{"a":39613,"t":"code","b":[185,133,184],"m":"lda","o":"tbl_bullet_colours,y","oa":47237},{"a":39616,"t":"code","b":[188,0,3],"m":"ldy","o":"bullet_column,x","oa":768},{"a":39619,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":39621,"l":"r_9AC5","t":"code","b":[96],"m":"rts","x":[39625]},{"a":39622,"l":"b_9AC6","t":"code","b":[173,208,177],"m":"lda","o":"death_timer","oa":45520,"x":[39577]},{"a":39625,"t":"code","b":[208,250],"m":"bne","o":"r_9AC5","oa":39621},{"a":39627,"t":"code","b":[76,101,154],"m":"jmp","o":"b_9A65","oa":39525},{"a":39630,"l":"wiz_box_col_end","c":"End column (exclusive) of Wiz's box for bullet hits: first column + 2, set at $9AE9, tested at $9B80.","t":"byte","b":[0],"x":[39657,39808]},{"a":39631,"l":"wiz_box_col","c":"First column of Wiz's bullet box: (Wiz X / 2 - 11) / 4, set at $9AE3.","t":"byte","b":[0],"x":[39651,39803]},{"a":39632,"l":"wiz_box_row_end","c":"End row (exclusive) of Wiz's bullet box: first row + 2.","t":"byte","b":[0],"x":[39675,39818]},{"a":39633,"l":"wiz_box_row","c":"First row of Wiz's bullet box: (Wiz Y - $43) / 8, in bullet rows (screen row - 3).","t":"byte","b":[0],"x":[39669,39813]},{"a":39634,"l":"cat_box_col_end","c":"End column (exclusive) of the cat's bullet box: its column + 1.","t":"byte","b":[0],"x":[39692,39837]},{"a":39635,"l":"cat_box_col","c":"Column of the cat's bullet box: ($B261 - 12) / 4.","t":"byte","b":[0],"x":[39686,39832]},{"a":39636,"l":"cat_box_row_end","c":"End row (exclusive) of the cat's bullet box: its row + 1.","t":"byte","b":[0],"x":[39710,39847]},{"a":39637,"l":"cat_box_row","c":"Row of the cat's bullet box: ($B262 - $43) / 8.","t":"byte","b":[0],"x":[39704,39842]},{"a":39638,"l":"erase_bullets_check_hits","c":"Once a frame before the bullets move ($6427, $64B3, $6581, $7DB8). Works out two boxes in bullet cells: Wiz's from $B20D/$B20E (X, 9 bits) and $B20F (Y), two columns by two rows ($9ACE-$9AD1), and the cat's from $B261 and $B262, one cell ($9AD2-$9AD5); clears $B281, the 'no free record' flag; then calls $9B53 for each record of the half that $99BD drew in the previous frame ($B280).","t":"code","b":[173,14,178],"m":"lda","o":"wizball_x_high","oa":45582,"x":[25639,25779,25985,29609,32184]},{"a":39641,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39642,"t":"code","b":[173,13,178],"m":"lda","o":"wizball_x","oa":45581},{"a":39645,"t":"code","b":[106],"m":"ror","o":"a"},{"a":39646,"t":"code","b":[56],"m":"sec"},{"a":39647,"t":"code","b":[233,11],"m":"sbc","o":"#$0B"},{"a":39649,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39650,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39651,"t":"code","b":[141,207,154],"m":"sta","o":"wiz_box_col","oa":39631},{"a":39654,"t":"code","b":[24],"m":"clc"},{"a":39655,"t":"code","b":[105,2],"m":"adc","o":"#$02"},{"a":39657,"t":"code","b":[141,206,154],"m":"sta","o":"wiz_box_col_end","oa":39630},{"a":39660,"t":"code","b":[173,15,178],"m":"lda","o":"wizball_y","oa":45583},{"a":39663,"t":"code","b":[56],"m":"sec"},{"a":39664,"t":"code","b":[233,67],"m":"sbc","o":"#$43"},{"a":39666,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39667,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39668,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39669,"t":"code","b":[141,209,154],"m":"sta","o":"wiz_box_row","oa":39633},{"a":39672,"t":"code","b":[24],"m":"clc"},{"a":39673,"t":"code","b":[105,2],"m":"adc","o":"#$02"},{"a":39675,"t":"code","b":[141,208,154],"m":"sta","o":"wiz_box_row_end","oa":39632},{"a":39678,"t":"code","b":[173,97,178],"m":"lda","o":"cat_x","oa":45665},{"a":39681,"t":"code","b":[56],"m":"sec"},{"a":39682,"t":"code","b":[233,12],"m":"sbc","o":"#$0C"},{"a":39684,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39685,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39686,"t":"code","b":[141,211,154],"m":"sta","o":"cat_box_col","oa":39635},{"a":39689,"t":"code","b":[24],"m":"clc"},{"a":39690,"t":"code","b":[105,1],"m":"adc","o":"#$01"},{"a":39692,"t":"code","b":[141,210,154],"m":"sta","o":"cat_box_col_end","oa":39634},{"a":39695,"t":"code","b":[173,98,178],"m":"lda","o":"cat_y","oa":45666},{"a":39698,"t":"code","b":[56],"m":"sec"},{"a":39699,"t":"code","b":[233,67],"m":"sbc","o":"#$43"},{"a":39701,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39702,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39703,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39704,"t":"code","b":[141,213,154],"m":"sta","o":"cat_box_row","oa":39637},{"a":39707,"t":"code","b":[24],"m":"clc"},{"a":39708,"t":"code","b":[105,1],"m":"adc","o":"#$01"},{"a":39710,"t":"code","b":[141,212,154],"m":"sta","o":"cat_box_row_end","oa":39636},{"a":39713,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":39715,"t":"code","b":[141,129,178],"m":"sta","o":"bullet_fired","oa":45697},{"a":39718,"t":"code","b":[173,128,178],"m":"lda","o":"bullet_half","oa":45696},{"a":39721,"t":"code","b":[240,20],"m":"beq","o":"b_9B3F","oa":39743},{"a":39723,"t":"code","b":[162,112],"m":"ldx","o":"#$70"},{"a":39725,"l":"b_9B2D","t":"code","b":[189,10,3],"m":"lda","o":"bullet_state,x","oa":778,"x":[39740]},{"a":39728,"t":"code","b":[240,3],"m":"beq","o":"b_9B35","oa":39733},{"a":39730,"t":"code","b":[32,83,155],"m":"jsr","o":"erase_bullet_check_hit","oa":39763},{"a":39733,"l":"b_9B35","t":"code","b":[138],"m":"txa","x":[39728]},{"a":39734,"t":"code","b":[56],"m":"sec"},{"a":39735,"t":"code","b":[233,16],"m":"sbc","o":"#$10"},{"a":39737,"t":"code","b":[170],"m":"tax"},{"a":39738,"t":"code","b":[224,240],"m":"cpx","o":"#$F0"},{"a":39740,"t":"code","b":[208,239],"m":"bne","o":"b_9B2D","oa":39725},{"a":39742,"t":"code","b":[96],"m":"rts"},{"a":39743,"l":"b_9B3F","t":"code","b":[162,240],"m":"ldx","o":"#$F0","x":[39721]},{"a":39745,"l":"b_9B41","t":"code","b":[189,10,3],"m":"lda","o":"bullet_state,x","oa":778,"x":[39760]},{"a":39748,"t":"code","b":[240,3],"m":"beq","o":"b_9B49","oa":39753},{"a":39750,"t":"code","b":[32,83,155],"m":"jsr","o":"erase_bullet_check_hit","oa":39763},{"a":39753,"l":"b_9B49","t":"code","b":[138],"m":"txa","x":[39748]},{"a":39754,"t":"code","b":[56],"m":"sec"},{"a":39755,"t":"code","b":[233,16],"m":"sbc","o":"#$10"},{"a":39757,"t":"code","b":[170],"m":"tax"},{"a":39758,"t":"code","b":[224,112],"m":"cpx","o":"#$70"},{"a":39760,"t":"code","b":[208,239],"m":"bne","o":"b_9B41","oa":39745},{"a":39762,"l":"r_9B52","t":"code","b":[96],"m":"rts","x":[39765]},{"a":39763,"l":"erase_bullet_check_hit","c":"For a flying bullet (state 1; X = record offset): puts back the character it covered and colours the cell with $894D's colour ($B27F, or 8 while $8959 is set); if its cell is in Wiz's box the record is freed and $7F0A is incremented (Wiz hit, handled at $7EDF); in the cat's box it is freed and $89BA incremented (the cat hit, handled at $8992).","t":"code","b":[201,1],"m":"cmp","o":"#$01","x":[39730,39750]},{"a":39765,"t":"code","b":[208,251],"m":"bne","o":"r_9B52","oa":39762},{"a":39767,"t":"code","b":[189,7,3],"m":"lda","o":"bullet_screen_hi,x","oa":775},{"a":39770,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":39772,"t":"code","b":[189,9,3],"m":"lda","o":"bullet_colour_page,x","oa":777},{"a":39775,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":39777,"t":"code","b":[189,8,3],"m":"lda","o":"bullet_screen_lo,x","oa":776},{"a":39780,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":39782,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":39784,"t":"code","b":[189,6,3],"m":"lda","o":"bullet_saved_char,x","oa":774},{"a":39787,"t":"code","b":[188,0,3],"m":"ldy","o":"bullet_column,x","oa":768},{"a":39790,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":39792,"t":"code","b":[32,77,137],"m":"jsr","o":"get_scenery_colour","oa":35149},{"a":39795,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":39797,"t":"code","b":[189,0,3],"m":"lda","o":"bullet_column,x","oa":768},{"a":39800,"t":"code","b":[188,1,3],"m":"ldy","o":"bullet_row,x","oa":769},{"a":39803,"t":"code","b":[205,207,154],"m":"cmp","o":"wiz_box_col","oa":39631},{"a":39806,"t":"code","b":[144,24],"m":"bcc","o":"b_9B98","oa":39832},{"a":39808,"t":"code","b":[205,206,154],"m":"cmp","o":"wiz_box_col_end","oa":39630},{"a":39811,"t":"code","b":[176,19],"m":"bcs","o":"b_9B98","oa":39832},{"a":39813,"t":"code","b":[204,209,154],"m":"cpy","o":"wiz_box_row","oa":39633},{"a":39816,"t":"code","b":[144,14],"m":"bcc","o":"b_9B98","oa":39832},{"a":39818,"t":"code","b":[204,208,154],"m":"cpy","o":"wiz_box_row_end","oa":39632},{"a":39821,"t":"code","b":[176,9],"m":"bcs","o":"b_9B98","oa":39832},{"a":39823,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":39825,"t":"code","b":[157,10,3],"m":"sta","o":"bullet_state,x","oa":778},{"a":39828,"t":"code","b":[238,10,127],"m":"inc","o":"wizball_hit","oa":32522},{"a":39831,"t":"code","b":[96],"m":"rts"},{"a":39832,"l":"b_9B98","t":"code","b":[205,211,154],"m":"cmp","o":"cat_box_col","oa":39635,"x":[39806,39811,39816,39821]},{"a":39835,"t":"code","b":[144,23],"m":"bcc","o":"r_9BB4","oa":39860},{"a":39837,"t":"code","b":[205,210,154],"m":"cmp","o":"cat_box_col_end","oa":39634},{"a":39840,"t":"code","b":[176,18],"m":"bcs","o":"r_9BB4","oa":39860},{"a":39842,"t":"code","b":[204,213,154],"m":"cpy","o":"cat_box_row","oa":39637},{"a":39845,"t":"code","b":[144,13],"m":"bcc","o":"r_9BB4","oa":39860},{"a":39847,"t":"code","b":[204,212,154],"m":"cpy","o":"cat_box_row_end","oa":39636},{"a":39850,"t":"code","b":[176,8],"m":"bcs","o":"r_9BB4","oa":39860},{"a":39852,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":39854,"t":"code","b":[157,10,3],"m":"sta","o":"bullet_state,x","oa":778},{"a":39857,"t":"code","b":[238,186,137],"m":"inc","o":"cat_hit","oa":35258},{"a":39860,"l":"r_9BB4","t":"code","b":[96],"m":"rts","x":[39835,39840,39845,39850]},{"a":39861,"l":"fire_alien_bullet","c":"Fires a bullet from the alien in slot X of the table at $0200 (42 bytes a slot; +0 X / 2, +2 Y). A = direction 0-$3F ($9C62) or $FF, aimed at Wiz. Does nothing while $B1CF or $B281 is set, or unless the alien's Y is at least $40 and its X - 8 is 0 to $9F. Takes the first free record at $0300 (none: sets $B281) at the alien's cell; an aimed bullet gets X speed random 0-15 and Y speed 15 minus that, each signed toward Wiz ($B20D / 2, $B20F); marks it just fired (2), clears its colour counter and draws one random number. Called by the alien behaviours at $A566-$A5A3.","t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103,"x":[42342,42360,42368,42373,42378,42383,42388,42393,42398,42403]},{"a":39863,"t":"code","b":[173,207,177],"m":"lda","o":"life_over","oa":45519},{"a":39866,"t":"code","b":[240,1],"m":"beq","o":"b_9BBD","oa":39869},{"a":39868,"t":"code","b":[96],"m":"rts"},{"a":39869,"l":"b_9BBD","t":"code","b":[173,129,178],"m":"lda","o":"bullet_fired","oa":45697,"x":[39866]},{"a":39872,"t":"code","b":[240,1],"m":"beq","o":"b_9BC3","oa":39875},{"a":39874,"t":"code","b":[96],"m":"rts"},{"a":39875,"l":"b_9BC3","t":"code","b":[189,2,2],"m":"lda","o":"alien_line,x","oa":514,"x":[39872]},{"a":39878,"t":"code","b":[56],"m":"sec"},{"a":39879,"t":"code","b":[233,64],"m":"sbc","o":"#$40"},{"a":39881,"t":"code","b":[144,17],"m":"bcc","o":"r_9BDC","oa":39900},{"a":39883,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39884,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39885,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39886,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":39888,"t":"code","b":[189,0,2],"m":"lda","o":"alien_x,x","oa":512},{"a":39891,"t":"code","b":[56],"m":"sec"},{"a":39892,"t":"code","b":[233,8],"m":"sbc","o":"#$08"},{"a":39894,"t":"code","b":[144,4],"m":"bcc","o":"r_9BDC","oa":39900},{"a":39896,"t":"code","b":[201,160],"m":"cmp","o":"#$A0"},{"a":39898,"t":"code","b":[144,1],"m":"bcc","o":"b_9BDD","oa":39901},{"a":39900,"l":"r_9BDC","t":"code","b":[96],"m":"rts","x":[39881,39894]},{"a":39901,"l":"b_9BDD","t":"code","b":[74],"m":"lsr","o":"a","x":[39898]},{"a":39902,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39903,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":39905,"t":"code","b":[189,0,2],"m":"lda","o":"alien_x,x","oa":512},{"a":39908,"t":"code","b":[133,94],"m":"sta","o":"zp_temp_5e","oa":94},{"a":39910,"t":"code","b":[189,2,2],"m":"lda","o":"alien_line,x","oa":514},{"a":39913,"t":"code","b":[133,95],"m":"sta","o":"zp_temp_5f","oa":95},{"a":39915,"t":"code","b":[134,98],"m":"stx","o":"zp_ptr_62","oa":98},{"a":39917,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":39919,"l":"b_9BEF","t":"code","b":[189,10,3],"m":"lda","o":"bullet_state,x","oa":778,"x":[39931]},{"a":39922,"t":"code","b":[240,17],"m":"beq","o":"b_9C05","oa":39941},{"a":39924,"t":"code","b":[138],"m":"txa"},{"a":39925,"t":"code","b":[24],"m":"clc"},{"a":39926,"t":"code","b":[105,16],"m":"adc","o":"#$10"},{"a":39928,"t":"code","b":[170],"m":"tax"},{"a":39929,"t":"code","b":[224,0],"m":"cpx","o":"#$00"},{"a":39931,"t":"code","b":[208,242],"m":"bne","o":"b_9BEF","oa":39919},{"a":39933,"t":"code","b":[166,98],"m":"ldx","o":"zp_ptr_62","oa":98},{"a":39935,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":39937,"t":"code","b":[141,129,178],"m":"sta","o":"bullet_fired","oa":45697},{"a":39940,"t":"code","b":[96],"m":"rts"},{"a":39941,"l":"b_9C05","t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96,"x":[39922]},{"a":39943,"t":"code","b":[157,0,3],"m":"sta","o":"bullet_column,x","oa":768},{"a":39946,"t":"code","b":[165,97],"m":"lda","o":"zp_ptr_61","oa":97},{"a":39948,"t":"code","b":[157,1,3],"m":"sta","o":"bullet_row,x","oa":769},{"a":39951,"t":"code","b":[165,103],"m":"lda","o":"zp_temp_67","oa":103},{"a":39953,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":39955,"t":"code","b":[240,6],"m":"beq","o":"b_9C1B","oa":39963},{"a":39957,"t":"code","b":[32,98,156],"m":"jsr","o":"bullet_speed_from_direction","oa":40034},{"a":39960,"t":"code","b":[76,82,156],"m":"jmp","o":"j_9C52","oa":40018},{"a":39963,"l":"b_9C1B","t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003,"x":[39955]},{"a":39966,"t":"code","b":[41,15],"m":"and","o":"#$0F"},{"a":39968,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":39970,"t":"code","b":[169,15],"m":"lda","o":"#$0F"},{"a":39972,"t":"code","b":[56],"m":"sec"},{"a":39973,"t":"code","b":[229,96],"m":"sbc","o":"zp_ptr_60","oa":96},{"a":39975,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":39977,"t":"code","b":[173,13,178],"m":"lda","o":"wizball_x","oa":45581},{"a":39980,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":39981,"t":"code","b":[56],"m":"sec"},{"a":39982,"t":"code","b":[229,94],"m":"sbc","o":"zp_temp_5e","oa":94},{"a":39984,"t":"code","b":[176,7],"m":"bcs","o":"b_9C39","oa":39993},{"a":39986,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":39988,"t":"code","b":[56],"m":"sec"},{"a":39989,"t":"code","b":[229,96],"m":"sbc","o":"zp_ptr_60","oa":96},{"a":39991,"t":"code","b":[133,96],"m":"sta","o":"zp_ptr_60","oa":96},{"a":39993,"l":"b_9C39","t":"code","b":[173,15,178],"m":"lda","o":"wizball_y","oa":45583,"x":[39984]},{"a":39996,"t":"code","b":[56],"m":"sec"},{"a":39997,"t":"code","b":[229,95],"m":"sbc","o":"zp_temp_5f","oa":95},{"a":39999,"t":"code","b":[176,7],"m":"bcs","o":"b_9C48","oa":40008},{"a":40001,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":40003,"t":"code","b":[56],"m":"sec"},{"a":40004,"t":"code","b":[229,97],"m":"sbc","o":"zp_ptr_61","oa":97},{"a":40006,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":40008,"l":"b_9C48","t":"code","b":[165,96],"m":"lda","o":"zp_ptr_60","oa":96,"x":[39999]},{"a":40010,"t":"code","b":[157,4,3],"m":"sta","o":"bullet_dx,x","oa":772},{"a":40013,"t":"code","b":[165,97],"m":"lda","o":"zp_ptr_61","oa":97},{"a":40015,"t":"code","b":[157,5,3],"m":"sta","o":"bullet_dy,x","oa":773},{"a":40018,"l":"j_9C52","t":"code","b":[169,2],"m":"lda","o":"#$02","x":[39960]},{"a":40020,"t":"code","b":[157,10,3],"m":"sta","o":"bullet_state,x","oa":778},{"a":40023,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":40026,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":40028,"t":"code","b":[157,11,3],"m":"sta","o":"bullet_colour_count,x","oa":779},{"a":40031,"t":"code","b":[166,98],"m":"ldx","o":"zp_ptr_62","oa":98},{"a":40033,"t":"code","b":[96],"m":"rts"},{"a":40034,"l":"bullet_speed_from_direction","c":"Turns a direction A = 0-$3F (0 up, $10 right, $20 down, $30 left, clockwise) into the bullet's X and Y speeds (+4 and +5 of record X), signed, with |X| + |Y| = 16: 64 directions on a diamond.","t":"code","b":[201,16],"m":"cmp","o":"#$10","x":[39957]},{"a":40036,"t":"code","b":[48,28],"m":"bmi","o":"b_9C82","oa":40066},{"a":40038,"t":"code","b":[201,32],"m":"cmp","o":"#$20"},{"a":40040,"t":"code","b":[48,34],"m":"bmi","o":"b_9C8C","oa":40076},{"a":40042,"t":"code","b":[201,48],"m":"cmp","o":"#$30"},{"a":40044,"t":"code","b":[48,46],"m":"bmi","o":"b_9C9C","oa":40092},{"a":40046,"t":"code","b":[56],"m":"sec"},{"a":40047,"t":"code","b":[233,48],"m":"sbc","o":"#$30"},{"a":40049,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":40051,"t":"code","b":[56],"m":"sec"},{"a":40052,"t":"code","b":[233,16],"m":"sbc","o":"#$10"},{"a":40054,"t":"code","b":[157,4,3],"m":"sta","o":"bullet_dx,x","oa":772},{"a":40057,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":40059,"t":"code","b":[56],"m":"sec"},{"a":40060,"t":"code","b":[229,103],"m":"sbc","o":"zp_temp_67","oa":103},{"a":40062,"t":"code","b":[157,5,3],"m":"sta","o":"bullet_dy,x","oa":773},{"a":40065,"t":"code","b":[96],"m":"rts"},{"a":40066,"l":"b_9C82","t":"code","b":[157,4,3],"m":"sta","o":"bullet_dx,x","oa":772,"x":[40036]},{"a":40069,"t":"code","b":[56],"m":"sec"},{"a":40070,"t":"code","b":[233,16],"m":"sbc","o":"#$10"},{"a":40072,"t":"code","b":[157,5,3],"m":"sta","o":"bullet_dy,x","oa":773},{"a":40075,"t":"code","b":[96],"m":"rts"},{"a":40076,"l":"b_9C8C","t":"code","b":[56],"m":"sec","x":[40040]},{"a":40077,"t":"code","b":[233,16],"m":"sbc","o":"#$10"},{"a":40079,"t":"code","b":[157,5,3],"m":"sta","o":"bullet_dy,x","oa":773},{"a":40082,"t":"code","b":[169,16],"m":"lda","o":"#$10"},{"a":40084,"t":"code","b":[56],"m":"sec"},{"a":40085,"t":"code","b":[253,5,3],"m":"sbc","o":"bullet_dy,x","oa":773},{"a":40088,"t":"code","b":[157,4,3],"m":"sta","o":"bullet_dx,x","oa":772},{"a":40091,"t":"code","b":[96],"m":"rts"},{"a":40092,"l":"b_9C9C","t":"code","b":[56],"m":"sec","x":[40044]},{"a":40093,"t":"code","b":[233,32],"m":"sbc","o":"#$20"},{"a":40095,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":40097,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":40099,"t":"code","b":[56],"m":"sec"},{"a":40100,"t":"code","b":[229,103],"m":"sbc","o":"zp_temp_67","oa":103},{"a":40102,"t":"code","b":[157,4,3],"m":"sta","o":"bullet_dx,x","oa":772},{"a":40105,"t":"code","b":[169,16],"m":"lda","o":"#$10"},{"a":40107,"t":"code","b":[56],"m":"sec"},{"a":40108,"t":"code","b":[229,103],"m":"sbc","o":"zp_temp_67","oa":103},{"a":40110,"t":"code","b":[157,5,3],"m":"sta","o":"bullet_dy,x","oa":773},{"a":40113,"t":"code","b":[96],"m":"rts"},{"a":40114,"l":"init_bonus_waves","c":"Prepares the bonus stage's waves ($64C1): clears the alien table ($9CD5), resets the script's wait counter $BB05 and position $BB06, and copies the wave script $3902-$39FF (254 bytes) to $ED02-$EDFF, because running it counts its loop counters down in place.","t":"code","b":[32,213,156],"m":"jsr","o":"clear_alien_table","oa":40149,"x":[25793]},{"a":40117,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":40119,"t":"code","b":[141,5,187],"m":"sta","o":"bonus_wait_count","oa":47877},{"a":40122,"t":"code","b":[141,6,187],"m":"sta","o":"bonus_script_pos","oa":47878},{"a":40125,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":40127,"l":"b_9CBF","t":"code","b":[189,2,57],"m":"lda","o":"bonus_wave_script,x","oa":14594,"x":[40136]},{"a":40130,"t":"code","b":[157,2,237],"m":"sta","o":"wave_script_copy,x","oa":60674},{"a":40133,"t":"code","b":[232],"m":"inx"},{"a":40134,"t":"code","b":[224,254],"m":"cpx","o":"#$FE"},{"a":40136,"t":"code","b":[208,245],"m":"bne","o":"b_9CBF","oa":40127},{"a":40138,"t":"code","b":[96],"m":"rts"},{"a":40139,"l":"clear_alien_bullets","c":"Clears the 16 alien bullet records, $0300-$03FF.","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[25611,25893,29612,33392,43750]},{"a":40141,"t":"code","b":[138],"m":"txa"},{"a":40142,"l":"b_9CCE","t":"code","b":[157,0,3],"m":"sta","o":"bullet_column,x","oa":768,"x":[40146]},{"a":40145,"t":"code","b":[202],"m":"dex"},{"a":40146,"t":"code","b":[208,250],"m":"bne","o":"b_9CCE","oa":40142},{"a":40148,"t":"code","b":[96],"m":"rts"},{"a":40149,"l":"clear_alien_table","c":"Clears the alien table $0200-$02FF (six slots of 42 bytes), zeroes $B1AE and clears bits 2-7 of $E7D9.","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[25592,40114,43819,44518]},{"a":40151,"t":"code","b":[138],"m":"txa"},{"a":40152,"l":"b_9CD8","t":"code","b":[157,0,2],"m":"sta","o":"alien_x,x","oa":512,"x":[40156]},{"a":40155,"t":"code","b":[202],"m":"dex"},{"a":40156,"t":"code","b":[208,250],"m":"bne","o":"b_9CD8","oa":40152},{"a":40158,"t":"code","b":[142,174,177],"m":"stx","o":"alien_spawn_cursor","oa":45486},{"a":40161,"t":"code","b":[173,217,231],"m":"lda","o":"vic_shadow_sprite_on","oa":59353},{"a":40164,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":40166,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":40169,"l":"r_9CE9","t":"code","b":[96],"m":"rts","x":[40173]},{"a":40170,"l":"run_bonus_wave_script","c":"The bonus stage's wave interpreter, once a frame ($65C3) until $B1CF is set. Script at $ED02 (copied from $3902), position $BB06. A record whose second byte is $BB04 ($39) is a loop, (target + 2, $39, count): while count is non-zero it is decremented and the script jumps back, then the record is skipped. $FF and $FE set and clear $B1F8, which $6755 uses to speed up or slow down the stage (apparently its scrolling); $FD ends the stage ($B1CF = $36). Any other record is (type, delay): with type bit 7 set it waits for all six alien slots to be empty, otherwise for one free slot; then it counts delay frames ($BB05) and creates alien type (bits 0-6) from the template table $39DC ($9DA1), except type $63, a pause.","t":"code","b":[173,207,177],"m":"lda","o":"life_over","oa":45519,"x":[26051,40206,40218]},{"a":40173,"t":"code","b":[208,250],"m":"bne","o":"r_9CE9","oa":40169},{"a":40175,"t":"code","b":[172,6,187],"m":"ldy","o":"bonus_script_pos","oa":47878},{"a":40178,"t":"code","b":[185,3,237],"m":"lda","o":"wave_script_copy_b1,y","oa":60675},{"a":40181,"t":"code","b":[205,4,187],"m":"cmp","o":"bonus_loop_marker","oa":47876},{"a":40184,"t":"code","b":[208,35],"m":"bne","o":"b_9D1D","oa":40221},{"a":40186,"t":"code","b":[185,4,237],"m":"lda","o":"wave_script_copy_b2,y","oa":60676},{"a":40189,"t":"code","b":[240,18],"m":"beq","o":"b_9D11","oa":40209},{"a":40191,"t":"code","b":[56],"m":"sec"},{"a":40192,"t":"code","b":[233,1],"m":"sbc","o":"#$01"},{"a":40194,"t":"code","b":[153,4,237],"m":"sta","o":"wave_script_copy_b2,y","oa":60676},{"a":40197,"t":"code","b":[185,2,237],"m":"lda","o":"wave_script_copy,y","oa":60674},{"a":40200,"t":"code","b":[56],"m":"sec"},{"a":40201,"t":"code","b":[233,2],"m":"sbc","o":"#$02"},{"a":40203,"t":"code","b":[141,6,187],"m":"sta","o":"bonus_script_pos","oa":47878},{"a":40206,"t":"code","b":[76,234,156],"m":"jmp","o":"run_bonus_wave_script","oa":40170},{"a":40209,"l":"b_9D11","t":"code","b":[238,6,187],"m":"inc","o":"bonus_script_pos","oa":47878,"x":[40189]},{"a":40212,"t":"code","b":[238,6,187],"m":"inc","o":"bonus_script_pos","oa":47878},{"a":40215,"t":"code","b":[238,6,187],"m":"inc","o":"bonus_script_pos","oa":47878},{"a":40218,"t":"code","b":[76,234,156],"m":"jmp","o":"run_bonus_wave_script","oa":40170},{"a":40221,"l":"b_9D1D","t":"code","b":[172,6,187],"m":"ldy","o":"bonus_script_pos","oa":47878,"x":[40184]},{"a":40224,"t":"code","b":[185,2,237],"m":"lda","o":"wave_script_copy,y","oa":60674},{"a":40227,"t":"code","b":[201,253],"m":"cmp","o":"#$FD"},{"a":40229,"t":"code","b":[240,17],"m":"beq","o":"b_9D38","oa":40248},{"a":40231,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":40233,"t":"code","b":[240,6],"m":"beq","o":"b_9D31","oa":40241},{"a":40235,"t":"code","b":[201,254],"m":"cmp","o":"#$FE"},{"a":40237,"t":"code","b":[208,15],"m":"bne","o":"b_9D3E","oa":40254},{"a":40239,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":40241,"l":"b_9D31","t":"code","b":[141,248,177],"m":"sta","o":"bonus_flying","oa":45560,"x":[40233]},{"a":40244,"t":"code","b":[238,6,187],"m":"inc","o":"bonus_script_pos","oa":47878},{"a":40247,"t":"code","b":[96],"m":"rts"},{"a":40248,"l":"b_9D38","t":"code","b":[169,54],"m":"lda","o":"#$36","x":[40229]},{"a":40250,"t":"code","b":[141,207,177],"m":"sta","o":"life_over","oa":45519},{"a":40253,"t":"code","b":[96],"m":"rts"},{"a":40254,"l":"b_9D3E","t":"code","b":[41,128],"m":"and","o":"#$80","x":[40237]},{"a":40256,"t":"code","b":[208,17],"m":"bne","o":"b_9D53","oa":40275},{"a":40258,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":40260,"l":"b_9D44","t":"code","b":[189,2,2],"m":"lda","o":"alien_line,x","oa":514,"x":[40272]},{"a":40263,"t":"code","b":[240,26],"m":"beq","o":"b_9D63","oa":40291},{"a":40265,"t":"code","b":[138],"m":"txa"},{"a":40266,"t":"code","b":[24],"m":"clc"},{"a":40267,"t":"code","b":[105,42],"m":"adc","o":"#$2A"},{"a":40269,"t":"code","b":[170],"m":"tax"},{"a":40270,"t":"code","b":[224,252],"m":"cpx","o":"#$FC"},{"a":40272,"t":"code","b":[208,242],"m":"bne","o":"b_9D44","oa":40260},{"a":40274,"l":"r_9D52","t":"code","b":[96],"m":"rts","x":[40280]},{"a":40275,"l":"b_9D53","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[40256]},{"a":40277,"l":"b_9D55","t":"code","b":[189,2,2],"m":"lda","o":"alien_line,x","oa":514,"x":[40289]},{"a":40280,"t":"code","b":[208,248],"m":"bne","o":"r_9D52","oa":40274},{"a":40282,"t":"code","b":[138],"m":"txa"},{"a":40283,"t":"code","b":[24],"m":"clc"},{"a":40284,"t":"code","b":[105,42],"m":"adc","o":"#$2A"},{"a":40286,"t":"code","b":[170],"m":"tax"},{"a":40287,"t":"code","b":[224,252],"m":"cpx","o":"#$FC"},{"a":40289,"t":"code","b":[208,242],"m":"bne","o":"b_9D55","oa":40277},{"a":40291,"l":"b_9D63","t":"code","b":[185,3,237],"m":"lda","o":"wave_script_copy_b1,y","oa":60675,"x":[40263]},{"a":40294,"t":"code","b":[205,5,187],"m":"cmp","o":"bonus_wait_count","oa":47877},{"a":40297,"t":"code","b":[240,4],"m":"beq","o":"b_9D6F","oa":40303},{"a":40299,"t":"code","b":[238,5,187],"m":"inc","o":"bonus_wait_count","oa":47877},{"a":40302,"t":"code","b":[96],"m":"rts"},{"a":40303,"l":"b_9D6F","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[40297]},{"a":40305,"t":"code","b":[141,5,187],"m":"sta","o":"bonus_wait_count","oa":47877},{"a":40308,"t":"code","b":[238,6,187],"m":"inc","o":"bonus_script_pos","oa":47878},{"a":40311,"t":"code","b":[238,6,187],"m":"inc","o":"bonus_script_pos","oa":47878},{"a":40314,"t":"code","b":[185,2,237],"m":"lda","o":"wave_script_copy,y","oa":60674},{"a":40317,"t":"code","b":[41,127],"m":"and","o":"#$7F"},{"a":40319,"t":"code","b":[201,99],"m":"cmp","o":"#$63"},{"a":40321,"t":"code","b":[208,1],"m":"bne","o":"b_9D84","oa":40324},{"a":40323,"t":"code","b":[96],"m":"rts"},{"a":40324,"l":"b_9D84","t":"code","b":[10],"m":"asl","o":"a","x":[40321]},{"a":40325,"t":"code","b":[168],"m":"tay"},{"a":40326,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":40328,"l":"b_9D88","t":"code","b":[189,2,2],"m":"lda","o":"alien_line,x","oa":514,"x":[40340]},{"a":40331,"t":"code","b":[240,10],"m":"beq","o":"b_9D97","oa":40343},{"a":40333,"t":"code","b":[138],"m":"txa"},{"a":40334,"t":"code","b":[24],"m":"clc"},{"a":40335,"t":"code","b":[105,42],"m":"adc","o":"#$2A"},{"a":40337,"t":"code","b":[170],"m":"tax"},{"a":40338,"t":"code","b":[224,252],"m":"cpx","o":"#$FC"},{"a":40340,"t":"code","b":[208,242],"m":"bne","o":"b_9D88","oa":40328},{"a":40342,"t":"code","b":[96],"m":"rts"},{"a":40343,"l":"b_9D97","t":"code","b":[185,220,57],"m":"lda","o":"tbl_bonus_alien_templates,y","oa":14812,"x":[40331]},{"a":40346,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":40348,"t":"code","b":[185,221,57],"m":"lda","o":"tbl_bonus_alien_templates_hi,y","oa":14813},{"a":40351,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":40353,"l":"create_alien","c":"Creates an alien in slot X of the table at $0200 from the template at ($62): copies the template's first 23 bytes, zeroes the other 19 of the 42-byte slot, then applies its random fields: byte 23 is their count, each a triple (mask, base, offset) setting slot byte offset to (random AND mask) + base. Called by the wave script ($9D97) and from $AA68.","t":"code","b":[134,96],"m":"stx","o":"zp_ptr_60","oa":96,"x":[43624]},{"a":40355,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":40357,"l":"b_9DA5","t":"code","b":[177,98],"m":"lda","o":"(zp_ptr_62),y","oa":98,"x":[40366]},{"a":40359,"t":"code","b":[157,0,2],"m":"sta","o":"alien_x,x","oa":512},{"a":40362,"t":"code","b":[232],"m":"inx"},{"a":40363,"t":"code","b":[200],"m":"iny"},{"a":40364,"t":"code","b":[192,23],"m":"cpy","o":"#$17"},{"a":40366,"t":"code","b":[208,245],"m":"bne","o":"b_9DA5","oa":40357},{"a":40368,"t":"code","b":[160,19],"m":"ldy","o":"#$13"},{"a":40370,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":40372,"l":"b_9DB4","t":"code","b":[157,0,2],"m":"sta","o":"alien_x,x","oa":512,"x":[40377]},{"a":40375,"t":"code","b":[232],"m":"inx"},{"a":40376,"t":"code","b":[136],"m":"dey"},{"a":40377,"t":"code","b":[208,249],"m":"bne","o":"b_9DB4","oa":40372},{"a":40379,"t":"code","b":[160,23],"m":"ldy","o":"#$17"},{"a":40381,"t":"code","b":[177,98],"m":"lda","o":"(zp_ptr_62),y","oa":98},{"a":40383,"t":"code","b":[240,39],"m":"beq","o":"r_9DE8","oa":40424},{"a":40385,"t":"code","b":[133,101],"m":"sta","o":"zp_ptr_65","oa":101},{"a":40387,"t":"code","b":[200],"m":"iny"},{"a":40388,"t":"code","b":[132,100],"m":"sty","o":"zp_ptr_64","oa":100},{"a":40390,"t":"code","b":[173,176,177],"m":"lda","o":"alien_page_constant","oa":45488},{"a":40393,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":40395,"l":"b_9DCB","t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003,"x":[40422]},{"a":40398,"t":"code","b":[164,100],"m":"ldy","o":"zp_ptr_64","oa":100},{"a":40400,"t":"code","b":[49,98],"m":"and","o":"(zp_ptr_62),y","oa":98},{"a":40402,"t":"code","b":[200],"m":"iny"},{"a":40403,"t":"code","b":[24],"m":"clc"},{"a":40404,"t":"code","b":[113,98],"m":"adc","o":"(zp_ptr_62),y","oa":98},{"a":40406,"t":"code","b":[72],"m":"pha"},{"a":40407,"t":"code","b":[200],"m":"iny"},{"a":40408,"t":"code","b":[177,98],"m":"lda","o":"(zp_ptr_62),y","oa":98},{"a":40410,"t":"code","b":[168],"m":"tay"},{"a":40411,"t":"code","b":[104],"m":"pla"},{"a":40412,"t":"code","b":[145,96],"m":"sta","o":"(zp_ptr_60),y","oa":96},{"a":40414,"t":"code","b":[230,100],"m":"inc","o":"zp_ptr_64","oa":100},{"a":40416,"t":"code","b":[230,100],"m":"inc","o":"zp_ptr_64","oa":100},{"a":40418,"t":"code","b":[230,100],"m":"inc","o":"zp_ptr_64","oa":100},{"a":40420,"t":"code","b":[198,101],"m":"dec","o":"zp_ptr_65","oa":101},{"a":40422,"t":"code","b":[208,227],"m":"bne","o":"b_9DCB","oa":40395},{"a":40424,"l":"r_9DE8","t":"code","b":[96],"m":"rts","x":[40383]},{"a":40425,"l":"init_cauldrons","c":"At the start of play ($63F5): copies the empty cauldron picture $CE00-$CE3F (sprite shape $38) into the four cauldron sprites $EE40-$EF3F (shapes $B9-$BC: red, green, blue and the mix), zeroes their row counters $9EC6-$9EC9 and calls $776D.","t":"code","b":[160,64],"m":"ldy","o":"#$40","x":[25589]},{"a":40427,"l":"b_9DEB","t":"code","b":[185,255,205],"m":"lda","o":"cauldron_empty_minus_1,y","oa":52735,"x":[40443]},{"a":40430,"t":"code","b":[153,63,238],"m":"sta","o":"cauldron_red_minus_1,y","oa":60991},{"a":40433,"t":"code","b":[153,127,238],"m":"sta","o":"cauldron_green_minus_1,y","oa":61055},{"a":40436,"t":"code","b":[153,191,238],"m":"sta","o":"cauldron_blue_minus_1,y","oa":61119},{"a":40439,"t":"code","b":[153,255,238],"m":"sta","o":"cauldron_target_minus_1,y","oa":61183},{"a":40442,"t":"code","b":[136],"m":"dey"},{"a":40443,"t":"code","b":[208,238],"m":"bne","o":"b_9DEB","oa":40427},{"a":40445,"t":"code","b":[140,198,158],"m":"sty","o":"cauldron_rows_red","oa":40646},{"a":40448,"t":"code","b":[140,199,158],"m":"sty","o":"cauldron_rows_green","oa":40647},{"a":40451,"t":"code","b":[140,200,158],"m":"sty","o":"cauldron_rows_blue","oa":40648},{"a":40454,"t":"code","b":[140,201,158],"m":"sty","o":"cauldron_rows_mix","oa":40649},{"a":40457,"t":"code","b":[32,109,119],"m":"jsr","o":"setup_level_graphics","oa":30573},{"a":40460,"t":"code","b":[96],"m":"rts"},{"a":40461,"l":"update_cauldrons","c":"Once a frame in play ($6450), and from $AB91 and $AEE5. Caps the red, green and blue cauldron levels $B12B-$B12D at 20 (a signed test); while $B1CF and $B213 are 0 copies a byte of the mix cauldron's top row ($EF01) into $B874, so a full mix cauldron sends the frame loop to the colour-completed sequence ($6414, $646F); sets the mix level $B12E to the sum, over red, green and blue, of the smaller of the cauldron's level and the target recipe ($B2C0 + 3 x $B51A), unless $AC4E is set; compares the new-key code $B254 with 8, 9 and 7 through branches that all land on the next instruction (no effect); then redraws one row of each cauldron ($9E81). Live: with the red cauldron poked to 20 on level 1 (target red), $B874 became $AA 22 frames later and the loop left for $646F.","t":"code","b":[162,3],"m":"ldx","o":"#$03","x":[25680,43921,44773]},{"a":40463,"l":"b_9E0F","t":"code","b":[189,42,177],"m":"lda","o":"rounds_finished,x","oa":45354,"x":[40476]},{"a":40466,"t":"code","b":[201,21],"m":"cmp","o":"#$15"},{"a":40468,"t":"code","b":[48,5],"m":"bmi","o":"b_9E1B","oa":40475},{"a":40470,"t":"code","b":[169,20],"m":"lda","o":"#$14"},{"a":40472,"t":"code","b":[157,42,177],"m":"sta","o":"rounds_finished,x","oa":45354},{"a":40475,"l":"b_9E1B","t":"code","b":[202],"m":"dex","x":[40468]},{"a":40476,"t":"code","b":[208,241],"m":"bne","o":"b_9E0F","oa":40463},{"a":40478,"t":"code","b":[173,207,177],"m":"lda","o":"life_over","oa":45519},{"a":40481,"t":"code","b":[13,19,178],"m":"ora","o":"tube_timer","oa":45587},{"a":40484,"t":"code","b":[208,6],"m":"bne","o":"b_9E2C","oa":40492},{"a":40486,"t":"code","b":[173,1,239],"m":"lda","o":"cauldron_target_top","oa":61185},{"a":40489,"t":"code","b":[141,116,184],"m":"sta","o":"bonus_stage","oa":47220},{"a":40492,"l":"b_9E2C","t":"code","b":[173,26,181],"m":"lda","o":"target_colour","oa":46362,"x":[40484]},{"a":40495,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":40497,"t":"code","b":[10],"m":"asl","o":"a"},{"a":40498,"t":"code","b":[101,102],"m":"adc","o":"zp_temp_66","oa":102},{"a":40500,"t":"code","b":[170],"m":"tax"},{"a":40501,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":40503,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":40505,"t":"code","b":[168],"m":"tay"},{"a":40506,"l":"b_9E3A","t":"code","b":[189,192,178],"m":"lda","o":"tbl_colour_recipes,x","oa":45760,"x":[40526]},{"a":40509,"t":"code","b":[217,43,177],"m":"cmp","o":"cauldron_red,y","oa":45355},{"a":40512,"t":"code","b":[144,3],"m":"bcc","o":"b_9E45","oa":40517},{"a":40514,"t":"code","b":[185,43,177],"m":"lda","o":"cauldron_red,y","oa":45355},{"a":40517,"l":"b_9E45","t":"code","b":[24],"m":"clc","x":[40512]},{"a":40518,"t":"code","b":[101,102],"m":"adc","o":"zp_temp_66","oa":102},{"a":40520,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":40522,"t":"code","b":[232],"m":"inx"},{"a":40523,"t":"code","b":[200],"m":"iny"},{"a":40524,"t":"code","b":[192,3],"m":"cpy","o":"#$03"},{"a":40526,"t":"code","b":[208,234],"m":"bne","o":"b_9E3A","oa":40506},{"a":40528,"t":"code","b":[172,78,172],"m":"ldy","o":"in_lab","oa":44110},{"a":40531,"t":"code","b":[208,5],"m":"bne","o":"b_9E5A","oa":40538},{"a":40533,"t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102},{"a":40535,"t":"code","b":[141,46,177],"m":"sta","o":"cauldron_mix","oa":45358},{"a":40538,"l":"b_9E5A","t":"code","b":[173,84,178],"m":"lda","o":"key_new","oa":45652,"x":[40531]},{"a":40541,"t":"code","b":[201,8],"m":"cmp","o":"#$08"},{"a":40543,"t":"code","b":[208,0],"m":"bne","o":"b_9E61","oa":40545},{"a":40545,"l":"b_9E61","t":"code","b":[201,9],"m":"cmp","o":"#$09","x":[40543]},{"a":40547,"t":"code","b":[208,0],"m":"bne","o":"b_9E65","oa":40549},{"a":40549,"l":"b_9E65","t":"code","b":[201,7],"m":"cmp","o":"#$07","x":[40547]},{"a":40551,"t":"code","b":[208,0],"m":"bne","o":"b_9E69","oa":40553},{"a":40553,"l":"b_9E69","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[40551]},{"a":40555,"t":"code","b":[138],"m":"txa"},{"a":40556,"t":"code","b":[32,129,158],"m":"jsr","o":"draw_cauldron_row","oa":40577},{"a":40559,"t":"code","b":[162,1],"m":"ldx","o":"#$01"},{"a":40561,"t":"code","b":[169,64],"m":"lda","o":"#$40"},{"a":40563,"t":"code","b":[32,129,158],"m":"jsr","o":"draw_cauldron_row","oa":40577},{"a":40566,"t":"code","b":[162,2],"m":"ldx","o":"#$02"},{"a":40568,"t":"code","b":[169,128],"m":"lda","o":"#$80"},{"a":40570,"t":"code","b":[32,129,158],"m":"jsr","o":"draw_cauldron_row","oa":40577},{"a":40573,"t":"code","b":[162,3],"m":"ldx","o":"#$03"},{"a":40575,"t":"code","b":[169,192],"m":"lda","o":"#$C0"},{"a":40577,"l":"draw_cauldron_row","c":"Redraws one of the 21 rows of cauldron X (0-3; A = its sprite's offset from $EE40). Steps its counter $9EC6+X (0-20), takes row 20 - counter, and copies that row's three bytes from the full picture $CE40 if the cauldron's level ($B12B+X) is at least the counter, else from the empty one $CE00. So a level L shows the bottom L + 1 rows full, and each cauldron is redrawn in 21 frames.","t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103,"x":[40556,40563,40570]},{"a":40579,"t":"code","b":[254,198,158],"m":"inc","o":"cauldron_rows_red,x","oa":40646},{"a":40582,"t":"code","b":[189,198,158],"m":"lda","o":"cauldron_rows_red,x","oa":40646},{"a":40585,"t":"code","b":[201,21],"m":"cmp","o":"#$15"},{"a":40587,"t":"code","b":[208,5],"m":"bne","o":"b_9E92","oa":40594},{"a":40589,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":40591,"t":"code","b":[157,198,158],"m":"sta","o":"cauldron_rows_red,x","oa":40646},{"a":40594,"l":"b_9E92","t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102,"x":[40587]},{"a":40596,"t":"code","b":[169,20],"m":"lda","o":"#$14"},{"a":40598,"t":"code","b":[56],"m":"sec"},{"a":40599,"t":"code","b":[229,102],"m":"sbc","o":"zp_temp_66","oa":102},{"a":40601,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":40603,"t":"code","b":[10],"m":"asl","o":"a"},{"a":40604,"t":"code","b":[101,102],"m":"adc","o":"zp_temp_66","oa":102},{"a":40606,"t":"code","b":[168],"m":"tay"},{"a":40607,"t":"code","b":[24],"m":"clc"},{"a":40608,"t":"code","b":[101,103],"m":"adc","o":"zp_temp_67","oa":103},{"a":40610,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":40612,"t":"code","b":[189,43,177],"m":"lda","o":"cauldron_red,x","oa":45355},{"a":40615,"t":"code","b":[221,198,158],"m":"cmp","o":"cauldron_rows_red,x","oa":40646},{"a":40618,"t":"code","b":[144,5],"m":"bcc","o":"b_9EB1","oa":40625},{"a":40620,"t":"code","b":[152],"m":"tya"},{"a":40621,"t":"code","b":[24],"m":"clc"},{"a":40622,"t":"code","b":[105,64],"m":"adc","o":"#$40"},{"a":40624,"t":"code","b":[168],"m":"tay"},{"a":40625,"l":"b_9EB1","t":"code","b":[166,103],"m":"ldx","o":"zp_temp_67","oa":103,"x":[40618]},{"a":40627,"t":"code","b":[185,0,206],"m":"lda","o":"sprite_cauldron_empty,y","oa":52736},{"a":40630,"t":"code","b":[157,64,238],"m":"sta","o":"sprite_cauldron_red,x","oa":60992},{"a":40633,"t":"code","b":[185,1,206],"m":"lda","o":"sprite_cauldron_empty_b1,y","oa":52737},{"a":40636,"t":"code","b":[157,65,238],"m":"sta","o":"sprite_cauldron_red_b1,x","oa":60993},{"a":40639,"t":"code","b":[185,2,206],"m":"lda","o":"sprite_cauldron_empty_b2,y","oa":52738},{"a":40642,"t":"code","b":[157,66,238],"m":"sta","o":"sprite_cauldron_red_b2,x","oa":60994},{"a":40645,"t":"code","b":[96],"m":"rts"},{"a":40646,"l":"cauldron_rows_red","c":"Row counter (0-20) of the red cauldron sprite, and the base of the four counters $9EC6-$9EC9 indexed by cauldron in $9E81; zeroed by $9DE9 and $6AC0.","t":"byte","b":[0],"x":[27328,40445,40579,40582,40591,40615]},{"a":40647,"l":"cauldron_rows_green","c":"Row counter of the green cauldron sprite ($9E81); zeroed at $9E00.","t":"byte","b":[0],"x":[40448]},{"a":40648,"l":"cauldron_rows_blue","c":"Row counter of the blue cauldron sprite ($9E81); zeroed at $9E03.","t":"byte","b":[0],"x":[40451]},{"a":40649,"l":"cauldron_rows_mix","c":"Row counter of the mix cauldron sprite ($9E81); zeroed at $9E06 and $7776.","t":"byte","b":[0],"x":[30582,40454]},{"a":40650,"l":"unused_9eca","c":"Five bytes nothing reads: '00' in PETSCII, $FF, and the word $9ECA, which points at itself; apparently the remains of a text record and its pointer.","t":"byte","b":[48,48,255,202,158]},{"a":40655,"l":"count_landscape_aliens","c":"Counts the aliens still to shoot on the current landscape ($B128): its list number from $B19D (0: none), the list from $B1A6; entries are two bytes from offset 2 (position, type), a type with bit 7 set is destroyed, $FF ends. Stores the count in $B1AF and falls into $9EFD. Called from $826A, $A254 and $9F5B.","t":"code","b":[134,103],"m":"stx","o":"zp_temp_67","oa":103,"x":[33386,40795,41556]},{"a":40657,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":40659,"t":"code","b":[172,40,177],"m":"ldy","o":"current_level","oa":45352},{"a":40662,"t":"code","b":[185,157,177],"m":"lda","o":"level_alien_list,y","oa":45469},{"a":40665,"t":"code","b":[240,29],"m":"beq","o":"b_9EF8","oa":40696},{"a":40667,"t":"code","b":[10],"m":"asl","o":"a"},{"a":40668,"t":"code","b":[168],"m":"tay"},{"a":40669,"t":"code","b":[185,166,177],"m":"lda","o":"alien_list_addresses,y","oa":45478},{"a":40672,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":40674,"t":"code","b":[185,167,177],"m":"lda","o":"alien_list_addresses_hi,y","oa":45479},{"a":40677,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":40679,"t":"code","b":[160,3],"m":"ldy","o":"#$03"},{"a":40681,"l":"b_9EE9","t":"code","b":[177,98],"m":"lda","o":"(zp_ptr_62),y","oa":98,"x":[40691,40694]},{"a":40683,"t":"code","b":[200],"m":"iny"},{"a":40684,"t":"code","b":[200],"m":"iny"},{"a":40685,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":40687,"t":"code","b":[240,7],"m":"beq","o":"b_9EF8","oa":40696},{"a":40689,"t":"code","b":[41,128],"m":"and","o":"#$80"},{"a":40691,"t":"code","b":[208,244],"m":"bne","o":"b_9EE9","oa":40681},{"a":40693,"t":"code","b":[232],"m":"inx"},{"a":40694,"t":"code","b":[208,241],"m":"bne","o":"b_9EE9","oa":40681},{"a":40696,"l":"b_9EF8","t":"code","b":[142,175,177],"m":"stx","o":"aliens_left","oa":45487,"x":[40665,40687]},{"a":40699,"t":"code","b":[166,103],"m":"ldx","o":"zp_temp_67","oa":103},{"a":40701,"l":"show_alien_count","c":"Unless the colour is complete ($B874), prints $B1AF as two digits on row 1 of the play screen at $E000 (column from $71DD by player, $BFD9): the two-digit count on the top line. At 0, if $E7D9 AND $FC is 0 and the landscape is one of the three highest open ($B1CE - $B128 < 3), makes it a new list ($9F9B), calls the sound driver $4553 with Y = $14, calls $710B with 100 (apparently a score award), zeroes $B1AE and counts again.","t":"code","b":[173,116,184],"m":"lda","o":"bonus_stage","oa":47220,"x":[42917]},{"a":40704,"t":"code","b":[240,1],"m":"beq","o":"b_9F03","oa":40707},{"a":40706,"t":"code","b":[96],"m":"rts"},{"a":40707,"l":"b_9F03","t":"code","b":[172,217,191],"m":"ldy","o":"side_playing","oa":49113,"x":[40704]},{"a":40710,"t":"code","b":[185,221,113],"m":"lda","o":"tbl_player_counter_column,y","oa":29149},{"a":40713,"t":"code","b":[168],"m":"tay"},{"a":40714,"t":"code","b":[169,48],"m":"lda","o":"#$30"},{"a":40716,"t":"code","b":[153,40,224],"m":"sta","o":"score_row1,y","oa":57384},{"a":40719,"t":"code","b":[173,175,177],"m":"lda","o":"aliens_left","oa":45487},{"a":40722,"l":"j_9F12","t":"code","b":[56],"m":"sec","x":[40738]},{"a":40723,"t":"code","b":[233,10],"m":"sbc","o":"#$0A"},{"a":40725,"t":"code","b":[144,14],"m":"bcc","o":"b_9F25","oa":40741},{"a":40727,"t":"code","b":[72],"m":"pha"},{"a":40728,"t":"code","b":[185,40,224],"m":"lda","o":"score_row1,y","oa":57384},{"a":40731,"t":"code","b":[24],"m":"clc"},{"a":40732,"t":"code","b":[105,1],"m":"adc","o":"#$01"},{"a":40734,"t":"code","b":[153,40,224],"m":"sta","o":"score_row1,y","oa":57384},{"a":40737,"t":"code","b":[104],"m":"pla"},{"a":40738,"t":"code","b":[76,18,159],"m":"jmp","o":"j_9F12","oa":40722},{"a":40741,"l":"b_9F25","t":"code","b":[24],"m":"clc","x":[40725]},{"a":40742,"t":"code","b":[105,58],"m":"adc","o":"#$3A"},{"a":40744,"t":"code","b":[153,41,224],"m":"sta","o":"score_row1_col1,y","oa":57385},{"a":40747,"t":"code","b":[173,175,177],"m":"lda","o":"aliens_left","oa":45487},{"a":40750,"t":"code","b":[208,46],"m":"bne","o":"r_9F5E","oa":40798},{"a":40752,"t":"code","b":[173,217,231],"m":"lda","o":"vic_shadow_sprite_on","oa":59353},{"a":40755,"t":"code","b":[41,252],"m":"and","o":"#$FC"},{"a":40757,"t":"code","b":[208,39],"m":"bne","o":"r_9F5E","oa":40798},{"a":40759,"t":"code","b":[173,206,177],"m":"lda","o":"max_level","oa":45518},{"a":40762,"t":"code","b":[56],"m":"sec"},{"a":40763,"t":"code","b":[237,40,177],"m":"sbc","o":"current_level","oa":45352},{"a":40766,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":40768,"t":"code","b":[16,28],"m":"bpl","o":"r_9F5E","oa":40798},{"a":40770,"t":"code","b":[134,103],"m":"stx","o":"zp_temp_67","oa":103},{"a":40772,"t":"code","b":[174,40,177],"m":"ldx","o":"current_level","oa":45352},{"a":40775,"t":"code","b":[32,155,159],"m":"jsr","o":"make_alien_list","oa":40859},{"a":40778,"t":"code","b":[160,20],"m":"ldy","o":"#$14"},{"a":40780,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":40783,"t":"code","b":[169,100],"m":"lda","o":"#$64"},{"a":40785,"t":"code","b":[32,11,113],"m":"jsr","o":"add_score","oa":28939},{"a":40788,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":40790,"t":"code","b":[141,174,177],"m":"sta","o":"alien_spawn_cursor","oa":45486},{"a":40793,"t":"code","b":[166,103],"m":"ldx","o":"zp_temp_67","oa":103},{"a":40795,"t":"code","b":[76,207,158],"m":"jmp","o":"count_landscape_aliens","oa":40655},{"a":40798,"l":"r_9F5E","t":"code","b":[96],"m":"rts","x":[40750,40757,40768]},{"a":40799,"l":"init_landscape_aliens","c":"At the start of play ($63EC) and from $AF0F: clears the list numbers $B19D-$B1A5 (landscapes 0-8), zeroes $B1AE, and makes lists for the three landscapes $B1CE, $B1CE - 1 and $B1CE - 2 ($9F9B). While $B129 is 0 (set so by $6832 when a game starts) the current landscape's list is replaced by the fixed one at $A0EC.","t":"code","b":[160,9],"m":"ldy","o":"#$09","x":[25580,44815]},{"a":40801,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":40803,"t":"code","b":[141,174,177],"m":"sta","o":"alien_spawn_cursor","oa":45486},{"a":40806,"l":"b_9F66","t":"code","b":[153,156,177],"m":"sta","o":"alien_list_slots_base,y","oa":45468,"x":[40810]},{"a":40809,"t":"code","b":[136],"m":"dey"},{"a":40810,"t":"code","b":[208,250],"m":"bne","o":"b_9F66","oa":40806},{"a":40812,"t":"code","b":[174,206,177],"m":"ldx","o":"max_level","oa":45518},{"a":40815,"t":"code","b":[32,155,159],"m":"jsr","o":"make_alien_list","oa":40859},{"a":40818,"t":"code","b":[202],"m":"dex"},{"a":40819,"t":"code","b":[32,155,159],"m":"jsr","o":"make_alien_list","oa":40859},{"a":40822,"t":"code","b":[202],"m":"dex"},{"a":40823,"t":"code","b":[32,155,159],"m":"jsr","o":"make_alien_list","oa":40859},{"a":40826,"t":"code","b":[173,41,177],"m":"lda","o":"levels_finished","oa":45353},{"a":40829,"t":"code","b":[208,6],"m":"bne","o":"r_9F85","oa":40837},{"a":40831,"t":"code","b":[174,40,177],"m":"ldx","o":"current_level","oa":45352},{"a":40834,"t":"code","b":[76,236,160],"m":"jmp","o":"make_opening_wave","oa":41196},{"a":40837,"l":"r_9F85","t":"code","b":[96],"m":"rts","x":[40829]},{"a":40838,"l":"tbl_group_sizes","c":"Aliens in a group of a landscape list: 4, 6, 12, 6, picked at random at $9FDE.","t":"byte","b":[4,6,12,6],"x":[40926]},{"a":40842,"l":"tbl_landscape_list","c":"List number of each landscape 0-8: 1, 2, 3, 1, 2, 3, 1, 2, 3 (read at $9FAC and $A0EC), so the three open landscapes always use different lists.","t":"byte","b":[1,2,3,1,2,3,1,2],"x":[40876,41196]},{"a":40850,"t":"byte","b":[3]},{"a":40851,"l":"tbl_group_spacing","c":"Spacing of the aliens in a group: 1, 2, 3, 1, picked at random at $9FE9.","t":"byte","b":[1,2,3,1],"x":[40937]},{"a":40855,"l":"tbl_special_types","c":"First of the four alien types a group gets with 4 chances in 16, type 0 (read by index at $A009, compared at $A013); the table is 0, 2, 8, 11.","t":"byte","b":[0],"x":[40969,40979]},{"a":40856,"l":"special_type_2","c":"Second special alien type, 2 (compared at $A018).","t":"byte","b":[2],"x":[40984]},{"a":40857,"l":"special_type_8","c":"Third special alien type, 8 (compared at $A01D).","t":"byte","b":[8],"x":[40989]},{"a":40858,"l":"special_type_11","c":"Fourth special alien type, 11 (compared at $A022).","t":"byte","b":[11],"x":[40994]},{"a":40859,"l":"make_alien_list","c":"Makes the alien list of landscape X (0-8), continuing past $A000. If $8959 is set, first clears it and calls $7D1A. The landscape uses list $9F8A[X] (recorded in $B19D+X), at the address in $B1A6. Writes 0, 0, then groups from position 20: each starts 5-20 further on, with 4, 6, 12 or 6 aliens ($9F86) spaced 1, 2, 3 or 1 ($9F93), of a random type 1-16 or, with 4 chances in 16, one of 0, 2, 8, 11 ($9F97); $A070 adjusts the type's record in the $3ECF table for the landscape, and $A027 the special types' byte $0E by level. Entries are (position, type) until position $C8 or 58 entries, then $FF $FF.","t":"code","b":[173,89,137],"m":"lda","o":"freaky_bits","oa":35161,"x":[40775,40815,40819,40823,45412]},{"a":40862,"t":"code","b":[240,12],"m":"beq","o":"b_9FAC","oa":40876},{"a":40864,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":40866,"t":"code","b":[141,89,137],"m":"sta","o":"freaky_bits","oa":35161},{"a":40869,"t":"code","b":[138],"m":"txa"},{"a":40870,"t":"code","b":[72],"m":"pha"},{"a":40871,"t":"code","b":[32,26,125],"m":"jsr","o":"set_landscape_colours","oa":32026},{"a":40874,"t":"code","b":[104],"m":"pla"},{"a":40875,"t":"code","b":[170],"m":"tax"},{"a":40876,"l":"b_9FAC","t":"code","b":[189,138,159],"m":"lda","o":"tbl_landscape_list,x","oa":40842,"x":[40862]},{"a":40879,"t":"code","b":[157,157,177],"m":"sta","o":"level_alien_list,x","oa":45469},{"a":40882,"t":"code","b":[10],"m":"asl","o":"a"},{"a":40883,"t":"code","b":[168],"m":"tay"},{"a":40884,"t":"code","b":[185,166,177],"m":"lda","o":"alien_list_addresses,y","oa":45478},{"a":40887,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":40889,"t":"code","b":[185,167,177],"m":"lda","o":"alien_list_addresses_hi,y","oa":45479},{"a":40892,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":40894,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":40896,"t":"code","b":[152],"m":"tya"},{"a":40897,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":40899,"t":"code","b":[200],"m":"iny"},{"a":40900,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":40902,"t":"code","b":[200],"m":"iny"},{"a":40903,"t":"code","b":[169,20],"m":"lda","o":"#$14"},{"a":40905,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":40907,"l":"j_9FCB","t":"code","b":[132,96],"m":"sty","o":"zp_ptr_60","oa":96,"x":[41061]},{"a":40909,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":40912,"t":"code","b":[41,15],"m":"and","o":"#$0F"},{"a":40914,"t":"code","b":[105,5],"m":"adc","o":"#$05"},{"a":40916,"t":"code","b":[101,97],"m":"adc","o":"zp_ptr_61","oa":97},{"a":40918,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":40920,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":40923,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":40925,"t":"code","b":[168],"m":"tay"},{"a":40926,"t":"code","b":[185,134,159],"m":"lda","o":"tbl_group_sizes,y","oa":40838},{"a":40929,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":40931,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":40934,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":40936,"t":"code","b":[168],"m":"tay"},{"a":40937,"t":"code","b":[185,147,159],"m":"lda","o":"tbl_group_spacing,y","oa":40851},{"a":40940,"t":"code","b":[133,94],"m":"sta","o":"zp_temp_5e","oa":94},{"a":40942,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":40945,"t":"code","b":[41,15],"m":"and","o":"#$0F"},{"a":40947,"t":"code","b":[201,12],"m":"cmp","o":"#$0C"},{"a":40949,"t":"code","b":[16,12],"m":"bpl","o":"b_A003","oa":40963},{"a":40951,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":40954,"t":"code","b":[41,15],"m":"and","o":"#$0F"},{"a":40956,"t":"code","b":[133,95],"m":"sta","o":"zp_temp_5f","oa":95},{"a":40958,"t":"code","b":[230,95],"m":"inc","o":"zp_temp_5f","oa":95},{"a":40960,"l":"write_wave_groups","c":"Second half of the wave-list builder $9F9B, which falls into $A000 (and branches to $A003 from $9FF5). $A003: for one group in four (a random 12-15 of 16) the group's alien type $5F is a sphere type from $9F97 (0, 2, 8 or 11) instead of a random 1-16. $A00E: $A070 re-randomises that type's record; if the type is 0, 2, 8 or 11 its firing mode (record byte $0E) is then set by the landscape X: 0, no shots, below landscape 4; 1, aimed, from 4; 3, the eight-way burst with the interval (byte $0F) doubled, from 6. $A046: writes up to $67 two-byte entries (landscape column $61, type $5F) from list offset $60, the column advancing by $5E, and jumps to $9FCB for the next group. $A068 ends the list with $FF $FF once the column reaches $C8 or the offset reaches $76.","t":"code","b":[76,14,160],"m":"jmp","o":"j_A00E","oa":40974},{"a":40963,"l":"b_A003","t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003,"x":[40949]},{"a":40966,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":40968,"t":"code","b":[168],"m":"tay"},{"a":40969,"t":"code","b":[185,151,159],"m":"lda","o":"tbl_special_types,y","oa":40855},{"a":40972,"t":"code","b":[133,95],"m":"sta","o":"zp_temp_5f","oa":95},{"a":40974,"l":"j_A00E","t":"code","b":[32,112,160],"m":"jsr","o":"randomise_alien_type","oa":41072,"x":[40960]},{"a":40977,"t":"code","b":[165,95],"m":"lda","o":"zp_temp_5f","oa":95},{"a":40979,"t":"code","b":[205,151,159],"m":"cmp","o":"tbl_special_types","oa":40855},{"a":40982,"t":"code","b":[240,15],"m":"beq","o":"b_A027","oa":40999},{"a":40984,"t":"code","b":[205,152,159],"m":"cmp","o":"special_type_2","oa":40856},{"a":40987,"t":"code","b":[240,10],"m":"beq","o":"b_A027","oa":40999},{"a":40989,"t":"code","b":[205,153,159],"m":"cmp","o":"special_type_8","oa":40857},{"a":40992,"t":"code","b":[240,5],"m":"beq","o":"b_A027","oa":40999},{"a":40994,"t":"code","b":[205,154,159],"m":"cmp","o":"special_type_11","oa":40858},{"a":40997,"t":"code","b":[208,31],"m":"bne","o":"b_A046","oa":41030},{"a":40999,"l":"b_A027","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[40982,40987,40992]},{"a":41001,"t":"code","b":[160,14],"m":"ldy","o":"#$0E"},{"a":41003,"t":"code","b":[145,123],"m":"sta","o":"(alien_template_lo),y","oa":123},{"a":41005,"t":"code","b":[224,4],"m":"cpx","o":"#$04"},{"a":41007,"t":"code","b":[144,21],"m":"bcc","o":"b_A046","oa":41030},{"a":41009,"t":"code","b":[160,14],"m":"ldy","o":"#$0E"},{"a":41011,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":41013,"t":"code","b":[145,123],"m":"sta","o":"(alien_template_lo),y","oa":123},{"a":41015,"t":"code","b":[224,6],"m":"cpx","o":"#$06"},{"a":41017,"t":"code","b":[144,11],"m":"bcc","o":"b_A046","oa":41030},{"a":41019,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":41021,"t":"code","b":[145,123],"m":"sta","o":"(alien_template_lo),y","oa":123},{"a":41023,"t":"code","b":[160,15],"m":"ldy","o":"#$0F"},{"a":41025,"t":"code","b":[177,123],"m":"lda","o":"(alien_template_lo),y","oa":123},{"a":41027,"t":"code","b":[10],"m":"asl","o":"a"},{"a":41028,"t":"code","b":[145,123],"m":"sta","o":"(alien_template_lo),y","oa":123},{"a":41030,"l":"b_A046","t":"code","b":[164,96],"m":"ldy","o":"zp_ptr_60","oa":96,"x":[40997,41007,41017]},{"a":41032,"l":"b_A048","t":"code","b":[165,97],"m":"lda","o":"zp_ptr_61","oa":97,"x":[41059]},{"a":41034,"t":"code","b":[201,200],"m":"cmp","o":"#$C8"},{"a":41036,"t":"code","b":[176,26],"m":"bcs","o":"b_A068","oa":41064},{"a":41038,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":41040,"t":"code","b":[200],"m":"iny"},{"a":41041,"t":"code","b":[165,95],"m":"lda","o":"zp_temp_5f","oa":95},{"a":41043,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":41045,"t":"code","b":[200],"m":"iny"},{"a":41046,"t":"code","b":[192,118],"m":"cpy","o":"#$76"},{"a":41048,"t":"code","b":[240,14],"m":"beq","o":"b_A068","oa":41064},{"a":41050,"t":"code","b":[165,97],"m":"lda","o":"zp_ptr_61","oa":97},{"a":41052,"t":"code","b":[24],"m":"clc"},{"a":41053,"t":"code","b":[101,94],"m":"adc","o":"zp_temp_5e","oa":94},{"a":41055,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":41057,"t":"code","b":[198,103],"m":"dec","o":"zp_temp_67","oa":103},{"a":41059,"t":"code","b":[208,227],"m":"bne","o":"b_A048","oa":41032},{"a":41061,"t":"code","b":[76,203,159],"m":"jmp","o":"j_9FCB","oa":40907},{"a":41064,"l":"b_A068","t":"code","b":[169,255],"m":"lda","o":"#$FF","x":[41036,41048]},{"a":41066,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":41068,"t":"code","b":[200],"m":"iny"},{"a":41069,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":41071,"t":"code","b":[96],"m":"rts"},{"a":41072,"l":"randomise_alien_type","c":"Called by the wave builder ($A00E) for each group, type in $5F and landscape in X. It edits the type's shared 23-byte record at $3ECF[type] (pointer in $7B/$7C), so every alien of that type on every landscape uses whatever the latest group set. Fire interval (record byte $0F): $A12A[X] frames, or 10 once all eight levels have been completed ($B12A non-zero), doubled when the firing mode (byte $0E) is 3, the eight-way burst. For the falling and rising movers (byte $08 = 0 or 1): half the time it swaps falling for rising and mirrors the start line (byte $02) about line $82 ($104 minus it); 3 times in 16 it picks a new vertical acceleration (byte $09) of 16-79.","t":"code","b":[165,95],"m":"lda","o":"zp_temp_5f","oa":95,"x":[40974]},{"a":41074,"t":"code","b":[10],"m":"asl","o":"a"},{"a":41075,"t":"code","b":[168],"m":"tay"},{"a":41076,"t":"code","b":[185,207,62],"m":"lda","o":"tbl_land_alien_templates,y","oa":16079},{"a":41079,"t":"code","b":[133,123],"m":"sta","o":"alien_template_lo","oa":123},{"a":41081,"t":"code","b":[185,208,62],"m":"lda","o":"tbl_land_alien_templates_hi,y","oa":16080},{"a":41084,"t":"code","b":[133,124],"m":"sta","o":"alien_template_hi","oa":124},{"a":41086,"t":"code","b":[160,14],"m":"ldy","o":"#$0E"},{"a":41088,"t":"code","b":[177,123],"m":"lda","o":"(alien_template_lo),y","oa":123},{"a":41090,"t":"code","b":[133,122],"m":"sta","o":"saved_level","oa":122},{"a":41092,"t":"code","b":[189,42,161],"m":"lda","o":"tbl_fire_interval,x","oa":41258},{"a":41095,"t":"code","b":[172,42,177],"m":"ldy","o":"rounds_finished","oa":45354},{"a":41098,"t":"code","b":[240,2],"m":"beq","o":"b_A08E","oa":41102},{"a":41100,"t":"code","b":[169,10],"m":"lda","o":"#$0A"},{"a":41102,"l":"b_A08E","t":"code","b":[164,122],"m":"ldy","o":"saved_level","oa":122,"x":[41098]},{"a":41104,"t":"code","b":[192,3],"m":"cpy","o":"#$03"},{"a":41106,"t":"code","b":[208,1],"m":"bne","o":"b_A095","oa":41109},{"a":41108,"t":"code","b":[10],"m":"asl","o":"a"},{"a":41109,"l":"b_A095","t":"code","b":[160,15],"m":"ldy","o":"#$0F","x":[41106]},{"a":41111,"t":"code","b":[145,123],"m":"sta","o":"(alien_template_lo),y","oa":123},{"a":41113,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":41116,"t":"code","b":[41,15],"m":"and","o":"#$0F"},{"a":41118,"t":"code","b":[201,8],"m":"cmp","o":"#$08"},{"a":41120,"t":"code","b":[16,44],"m":"bpl","o":"b_A0CE","oa":41166},{"a":41122,"t":"code","b":[160,8],"m":"ldy","o":"#$08"},{"a":41124,"t":"code","b":[177,123],"m":"lda","o":"(alien_template_lo),y","oa":123},{"a":41126,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":41128,"t":"code","b":[16,36],"m":"bpl","o":"b_A0CE","oa":41166},{"a":41130,"t":"code","b":[73,1],"m":"eor","o":"#$01"},{"a":41132,"t":"code","b":[145,123],"m":"sta","o":"(alien_template_lo),y","oa":123},{"a":41134,"t":"code","b":[160,2],"m":"ldy","o":"#$02"},{"a":41136,"t":"code","b":[177,123],"m":"lda","o":"(alien_template_lo),y","oa":123},{"a":41138,"t":"code","b":[201,130],"m":"cmp","o":"#$82"},{"a":41140,"t":"code","b":[48,12],"m":"bmi","o":"b_A0C2","oa":41154},{"a":41142,"t":"code","b":[56],"m":"sec"},{"a":41143,"t":"code","b":[233,130],"m":"sbc","o":"#$82"},{"a":41145,"t":"code","b":[133,122],"m":"sta","o":"saved_level","oa":122},{"a":41147,"t":"code","b":[169,130],"m":"lda","o":"#$82"},{"a":41149,"t":"code","b":[56],"m":"sec"},{"a":41150,"t":"code","b":[229,122],"m":"sbc","o":"saved_level","oa":122},{"a":41152,"t":"code","b":[208,10],"m":"bne","o":"b_A0CC","oa":41164},{"a":41154,"l":"b_A0C2","t":"code","b":[133,122],"m":"sta","o":"saved_level","oa":122,"x":[41140]},{"a":41156,"t":"code","b":[169,130],"m":"lda","o":"#$82"},{"a":41158,"t":"code","b":[56],"m":"sec"},{"a":41159,"t":"code","b":[229,122],"m":"sbc","o":"saved_level","oa":122},{"a":41161,"t":"code","b":[24],"m":"clc"},{"a":41162,"t":"code","b":[105,130],"m":"adc","o":"#$82"},{"a":41164,"l":"b_A0CC","t":"code","b":[145,123],"m":"sta","o":"(alien_template_lo),y","oa":123,"x":[41152]},{"a":41166,"l":"b_A0CE","t":"code","b":[160,8],"m":"ldy","o":"#$08","x":[41120,41128]},{"a":41168,"t":"code","b":[177,123],"m":"lda","o":"(alien_template_lo),y","oa":123},{"a":41170,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":41172,"t":"code","b":[16,21],"m":"bpl","o":"r_A0EB","oa":41195},{"a":41174,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":41177,"t":"code","b":[41,15],"m":"and","o":"#$0F"},{"a":41179,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":41181,"t":"code","b":[16,12],"m":"bpl","o":"r_A0EB","oa":41195},{"a":41183,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":41186,"t":"code","b":[41,63],"m":"and","o":"#$3F"},{"a":41188,"t":"code","b":[24],"m":"clc"},{"a":41189,"t":"code","b":[105,16],"m":"adc","o":"#$10"},{"a":41191,"t":"code","b":[160,9],"m":"ldy","o":"#$09"},{"a":41193,"t":"code","b":[145,123],"m":"sta","o":"(alien_template_lo),y","oa":123},{"a":41195,"l":"r_A0EB","t":"code","b":[96],"m":"rts","x":[41172,41181]},{"a":41196,"l":"make_opening_wave","c":"Reached by JMP from $9F82 (the end of $9F5F) while no level has been completed ($B129 = 0): gives the current landscape X ($B128) list number $9F8A[X] (kept in $B19D[X]) and fills that list ($B1A6) with the gentle opening wave: the 0,0 header, then eight type-1 aliens (molecules, which always leave a pearl) at landscape columns $32 to $86, 12 apart, then $FF $FF. So the HUD's alien count shows 08 when a game starts (reference/play-level1.png).","t":"code","b":[189,138,159],"m":"lda","o":"tbl_landscape_list,x","oa":40842,"x":[40834]},{"a":41199,"t":"code","b":[157,157,177],"m":"sta","o":"level_alien_list,x","oa":45469},{"a":41202,"t":"code","b":[10],"m":"asl","o":"a"},{"a":41203,"t":"code","b":[168],"m":"tay"},{"a":41204,"t":"code","b":[185,166,177],"m":"lda","o":"alien_list_addresses,y","oa":45478},{"a":41207,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":41209,"t":"code","b":[185,167,177],"m":"lda","o":"alien_list_addresses_hi,y","oa":45479},{"a":41212,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":41214,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":41216,"t":"code","b":[152],"m":"tya"},{"a":41217,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":41219,"t":"code","b":[200],"m":"iny"},{"a":41220,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":41222,"t":"code","b":[200],"m":"iny"},{"a":41223,"t":"code","b":[169,50],"m":"lda","o":"#$32"},{"a":41225,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":41227,"l":"b_A10B","t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98,"x":[41244]},{"a":41229,"t":"code","b":[200],"m":"iny"},{"a":41230,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":41232,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":41234,"t":"code","b":[200],"m":"iny"},{"a":41235,"t":"code","b":[165,97],"m":"lda","o":"zp_ptr_61","oa":97},{"a":41237,"t":"code","b":[24],"m":"clc"},{"a":41238,"t":"code","b":[105,12],"m":"adc","o":"#$0C"},{"a":41240,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":41242,"t":"code","b":[201,140],"m":"cmp","o":"#$8C"},{"a":41244,"t":"code","b":[144,237],"m":"bcc","o":"b_A10B","oa":41227},{"a":41246,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":41248,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":41250,"t":"code","b":[200],"m":"iny"},{"a":41251,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":41253,"t":"code","b":[96],"m":"rts"},{"a":41254,"l":"tbl_unused_a126","c":"Four bytes, 01 02 03 01, that no instruction reads: the same values as the group-spacing table $9F93. Apparently a leftover. Searched: no instruction in the traced code names $A126-$A129, and no indexed table below it reaches that far.","t":"byte","b":[1,2,3,1]},{"a":41258,"l":"tbl_fire_interval","c":"Frames between an alien's shots, by landscape 0-8 (9 bytes): 70, 65, 50, 40, 37, 35, 33, 30, 25. $A084 copies the entry for the landscape a wave list is being built for into the alien type's record (byte $0F); the firing routine $A541 counts to it.","t":"byte","b":[70,65,50,40,37,35,33,30],"x":[41092]},{"a":41266,"t":"byte","b":[25]},{"a":41267,"l":"police_queue","c":"Police ships still to come in a filth raid. The cat's light-blue droplet sets 6 ($8933) and play start clears it ($805D). While it is non-zero, $A135 starts one ship every 16 frames and counts each one off.","t":"byte","b":[0],"x":[32861,35123,41286,41290]},{"a":41268,"l":"police_queue_clock","c":"Frame counter for a filth raid: $A135 increments it every frame and tries to start a police ship whenever its low four bits are 0, once every 16 frames.","t":"byte","b":[0],"x":[41269,41272]},{"a":41269,"l":"run_police_queue","c":"Part of $A14A, placed before its entry and taken while police ships are queued ($A133 non-zero): every 16th frame ($A134) it starts one through $A181 and, if a slot was free (X is not $FC), counts it off $A133. The no-kill timer does not run while a raid is queued.","t":"code","b":[238,52,161],"m":"inc","o":"police_queue_clock","oa":41268,"x":[41293]},{"a":41272,"t":"code","b":[173,52,161],"m":"lda","o":"police_queue_clock","oa":41268},{"a":41275,"t":"code","b":[41,15],"m":"and","o":"#$0F"},{"a":41277,"t":"code","b":[208,10],"m":"bne","o":"r_A149","oa":41289},{"a":41279,"t":"code","b":[32,129,161],"m":"jsr","o":"start_police_ship","oa":41345},{"a":41282,"t":"code","b":[224,252],"m":"cpx","o":"#$FC"},{"a":41284,"t":"code","b":[240,3],"m":"beq","o":"r_A149","oa":41289},{"a":41286,"t":"code","b":[206,51,161],"m":"dec","o":"police_queue","oa":41267},{"a":41289,"l":"r_A149","t":"code","b":[96],"m":"rts","x":[41277,41284]},{"a":41290,"l":"update_no_kill_timer","c":"Once a frame from the frame loop ($645F). With police ships queued it runs $A135 instead. Otherwise $A1B7 counts frames and $A1B8 seconds (50 frames, PAL) since the player last killed an alien. When the seconds reach the level's limit $A1B9[$B128], a police ship is started by $A181, which also restarts the count. On the first frame of the second before, tune 5 starts through $45F1 with $B8F1 = 1: a warning, the same tune as a filth raid ($893D).","t":"code","b":[173,51,161],"m":"lda","o":"police_queue","oa":41267,"x":[25695]},{"a":41293,"t":"code","b":[208,230],"m":"bne","o":"run_police_queue","oa":41269},{"a":41295,"t":"code","b":[238,183,161],"m":"inc","o":"no_kill_frames","oa":41399},{"a":41298,"t":"code","b":[173,183,161],"m":"lda","o":"no_kill_frames","oa":41399},{"a":41301,"t":"code","b":[201,50],"m":"cmp","o":"#$32"},{"a":41303,"t":"code","b":[208,8],"m":"bne","o":"b_A161","oa":41313},{"a":41305,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":41307,"t":"code","b":[141,183,161],"m":"sta","o":"no_kill_frames","oa":41399},{"a":41310,"t":"code","b":[238,184,161],"m":"inc","o":"no_kill_seconds","oa":41400},{"a":41313,"l":"b_A161","t":"code","b":[173,184,161],"m":"lda","o":"no_kill_seconds","oa":41400,"x":[41303]},{"a":41316,"t":"code","b":[174,40,177],"m":"ldx","o":"current_level","oa":45352},{"a":41319,"t":"code","b":[56],"m":"sec"},{"a":41320,"t":"code","b":[253,185,161],"m":"sbc","o":"tbl_no_kill_limit,x","oa":41401},{"a":41323,"t":"code","b":[176,20],"m":"bcs","o":"start_police_ship","oa":41345},{"a":41325,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":41327,"t":"code","b":[208,15],"m":"bne","o":"r_A180","oa":41344},{"a":41329,"t":"code","b":[173,183,161],"m":"lda","o":"no_kill_frames","oa":41399},{"a":41332,"t":"code","b":[208,10],"m":"bne","o":"r_A180","oa":41344},{"a":41334,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":41336,"t":"code","b":[141,241,184],"m":"sta","o":"music_voices","oa":47345},{"a":41339,"t":"code","b":[160,5],"m":"ldy","o":"#$05"},{"a":41341,"t":"code","b":[32,241,69],"m":"jsr","o":"start_tune","oa":17905},{"a":41344,"l":"r_A180","t":"code","b":[96],"m":"rts","x":[41327,41332]},{"a":41345,"l":"start_police_ship","c":"Restarts the no-kill timer, then starts a police ship in the first free slot: alien type 17 (record $40B5, frames $46-$49, a round craft with a flashing beacon; colour byte $86, blue with the siren bit). Its fire interval (record byte $0F) is set to $A1C1[$B128] (written at $A1B2) and it has no wave-list entry ($5E/$5F = 0); $A1B4 continues at $AA66. With all six slots busy it returns X = $FC and starts nothing. Called by $A135 (filth raid) and $A16B (no-kill time is up).","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[41279,41323]},{"a":41347,"t":"code","b":[142,183,161],"m":"stx","o":"no_kill_frames","oa":41399},{"a":41350,"t":"code","b":[142,184,161],"m":"stx","o":"no_kill_seconds","oa":41400},{"a":41353,"l":"b_A189","t":"code","b":[189,2,2],"m":"lda","o":"alien_line,x","oa":514,"x":[41365]},{"a":41356,"t":"code","b":[240,10],"m":"beq","o":"b_A198","oa":41368},{"a":41358,"t":"code","b":[138],"m":"txa"},{"a":41359,"t":"code","b":[24],"m":"clc"},{"a":41360,"t":"code","b":[105,42],"m":"adc","o":"#$2A"},{"a":41362,"t":"code","b":[170],"m":"tax"},{"a":41363,"t":"code","b":[224,252],"m":"cpx","o":"#$FC"},{"a":41365,"t":"code","b":[208,242],"m":"bne","o":"b_A189","oa":41353},{"a":41367,"t":"code","b":[96],"m":"rts"},{"a":41368,"l":"b_A198","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[41356]},{"a":41370,"t":"code","b":[133,95],"m":"sta","o":"zp_temp_5f","oa":95},{"a":41372,"t":"code","b":[133,94],"m":"sta","o":"zp_temp_5e","oa":94},{"a":41374,"t":"code","b":[160,34],"m":"ldy","o":"#$22"},{"a":41376,"t":"code","b":[185,207,62],"m":"lda","o":"tbl_land_alien_templates,y","oa":16079},{"a":41379,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":41381,"t":"code","b":[185,208,62],"m":"lda","o":"tbl_land_alien_templates_hi,y","oa":16080},{"a":41384,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":41386,"t":"code","b":[172,40,177],"m":"ldy","o":"current_level","oa":45352},{"a":41389,"t":"code","b":[185,193,161],"m":"lda","o":"tbl_police_fire_interval,y","oa":41409},{"a":41392,"t":"code","b":[160,15],"m":"ldy","o":"#$0F"},{"a":41394,"t":"code","b":[145,98],"m":"sta","o":"(zp_ptr_62),y","oa":98},{"a":41396,"t":"code","b":[76,102,170],"m":"jmp","o":"start_alien","oa":43622},{"a":41399,"l":"no_kill_frames","c":"Frames (0-49) into the current second of the no-kill timer, counted by $A14A. Zeroed with $A1B8 on a kill ($A79C), on going through a tube ($81E0), at play start ($8054) and when a police ship starts ($A183).","t":"byte","b":[0],"x":[32852,33248,41295,41298,41307,41329,41347,42908]},{"a":41400,"l":"no_kill_seconds","c":"Seconds since the player last killed an alien (police ships do not count), counted by $A14A and compared with $A1B9[$B128] to decide when to send a police ship.","t":"byte","b":[0],"x":[32855,33251,41310,41313,41350,42896,42911]},{"a":41401,"l":"tbl_no_kill_limit","c":"Seconds without a kill before a police ship comes, by level 0-7: 45, 40, 25, 20, 20, 20, 15, 10. Read by $A168, and copied by $A78A into the SBC operand at $A795. Live on level 1 with no kill: the warning tune at 2,200 frames, the police ship at 2,250 (45 seconds).","t":"byte","b":[45,40,25,20,20,20,15,10],"x":[41320,42890]},{"a":41409,"l":"tbl_police_fire_interval","c":"Frames between a police ship's shots, by level 0-7: 40, 35, 30, 25, 20, 15, 10, 5. $A1AD reads the level's entry and $A1B2 writes it into type 17's record just before each ship starts.","t":"byte","b":[40,35,30,25,20,15,10,5],"x":[41389]},{"a":41417,"l":"clear_aliens","c":"Empties all six alien slots (line byte $02 = 0, the empty mark, and the hit box's Y limits $1F/$20 zeroed) and gives each one's wave-list entry back (bit 7 of its type byte cleared through $28/$29) so it can come again. Resets the list index $B1AE and turns sprites 2-7 off in the $D015 copy $E7D9. Called when a landscape is entered ($8264) and when a colour is complete ($64B9).","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[25785,33380]},{"a":41419,"t":"code","b":[142,174,177],"m":"stx","o":"alien_spawn_cursor","oa":45486},{"a":41422,"l":"b_A1CE","t":"code","b":[189,2,2],"m":"lda","o":"alien_line,x","oa":514,"x":[41465]},{"a":41425,"t":"code","b":[240,31],"m":"beq","o":"b_A1F2","oa":41458},{"a":41427,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":41429,"t":"code","b":[157,2,2],"m":"sta","o":"alien_line,x","oa":514},{"a":41432,"t":"code","b":[157,32,2],"m":"sta","o":"alien_box_bottom,x","oa":544},{"a":41435,"t":"code","b":[157,31,2],"m":"sta","o":"alien_box_top,x","oa":543},{"a":41438,"t":"code","b":[189,41,2],"m":"lda","o":"alien_list_hi,x","oa":553},{"a":41441,"t":"code","b":[240,15],"m":"beq","o":"b_A1F2","oa":41458},{"a":41443,"t":"code","b":[133,95],"m":"sta","o":"zp_temp_5f","oa":95},{"a":41445,"t":"code","b":[189,40,2],"m":"lda","o":"alien_list_lo,x","oa":552},{"a":41448,"t":"code","b":[133,94],"m":"sta","o":"zp_temp_5e","oa":94},{"a":41450,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":41452,"t":"code","b":[177,94],"m":"lda","o":"(zp_temp_5e),y","oa":94},{"a":41454,"t":"code","b":[41,127],"m":"and","o":"#$7F"},{"a":41456,"t":"code","b":[145,94],"m":"sta","o":"(zp_temp_5e),y","oa":94},{"a":41458,"l":"b_A1F2","t":"code","b":[138],"m":"txa","x":[41425,41441]},{"a":41459,"t":"code","b":[24],"m":"clc"},{"a":41460,"t":"code","b":[105,42],"m":"adc","o":"#$2A"},{"a":41462,"t":"code","b":[170],"m":"tax"},{"a":41463,"t":"code","b":[224,252],"m":"cpx","o":"#$FC"},{"a":41465,"t":"code","b":[208,211],"m":"bne","o":"b_A1CE","oa":41422},{"a":41467,"t":"code","b":[173,217,231],"m":"lda","o":"vic_shadow_sprite_on","oa":59353},{"a":41470,"t":"code","b":[41,252],"m":"and","o":"#$FC"},{"a":41472,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":41475,"t":"code","b":[96],"m":"rts"},{"a":41476,"l":"update_aliens","c":"Once a frame, from play ($645C) and the bonus stage ($65C6): runs $A258 for each slot in use (line byte $02 non-zero); slot k is sprite k + 2, with the sprite's bit in $74, its inverse in $72, its number in $73 and twice its number in $75. An empty slot's sprite is switched off. Moves the scenery-test turn $B1B3 on one slot, runs the siren $A974, and when no alien sprite is on (bits 2-7 of $E7D9 clear) jumps to $9ECF, which recounts the landscape's aliens and starts a new wave when none are left.","t":"code","b":[169,251],"m":"lda","o":"#$FB","x":[25692,26054]},{"a":41478,"t":"code","b":[133,114],"m":"sta","o":"alien_sprite_mask","oa":114},{"a":41480,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":41482,"t":"code","b":[133,116],"m":"sta","o":"alien_sprite_bits","oa":116},{"a":41484,"t":"code","b":[133,117],"m":"sta","o":"alien_sprite_reg","oa":117},{"a":41486,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":41488,"t":"code","b":[133,115],"m":"sta","o":"alien_sprite_number","oa":115},{"a":41490,"t":"code","b":[173,179,177],"m":"lda","o":"alien_turn_slot","oa":45491},{"a":41493,"t":"code","b":[24],"m":"clc"},{"a":41494,"t":"code","b":[105,42],"m":"adc","o":"#$2A"},{"a":41496,"t":"code","b":[201,252],"m":"cmp","o":"#$FC"},{"a":41498,"t":"code","b":[208,2],"m":"bne","o":"b_A21E","oa":41502},{"a":41500,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":41502,"l":"b_A21E","t":"code","b":[141,179,177],"m":"sta","o":"alien_turn_slot","oa":45491,"x":[41498]},{"a":41505,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":41507,"l":"b_A223","t":"code","b":[189,2,2],"m":"lda","o":"alien_line,x","oa":514,"x":[41544]},{"a":41510,"t":"code","b":[240,6],"m":"beq","o":"b_A22E","oa":41518},{"a":41512,"t":"code","b":[32,88,162],"m":"jsr","o":"update_alien","oa":41560},{"a":41515,"t":"code","b":[76,54,162],"m":"jmp","o":"j_A236","oa":41526},{"a":41518,"l":"b_A22E","t":"code","b":[173,217,231],"m":"lda","o":"vic_shadow_sprite_on","oa":59353,"x":[41510]},{"a":41521,"t":"code","b":[37,114],"m":"and","o":"alien_sprite_mask","oa":114},{"a":41523,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":41526,"l":"j_A236","t":"code","b":[138],"m":"txa","x":[41515]},{"a":41527,"t":"code","b":[24],"m":"clc"},{"a":41528,"t":"code","b":[105,42],"m":"adc","o":"#$2A"},{"a":41530,"t":"code","b":[170],"m":"tax"},{"a":41531,"t":"code","b":[6,116],"m":"asl","o":"alien_sprite_bits","oa":116},{"a":41533,"t":"code","b":[56],"m":"sec"},{"a":41534,"t":"code","b":[38,114],"m":"rol","o":"alien_sprite_mask","oa":114},{"a":41536,"t":"code","b":[230,115],"m":"inc","o":"alien_sprite_number","oa":115},{"a":41538,"t":"code","b":[230,117],"m":"inc","o":"alien_sprite_reg","oa":117},{"a":41540,"t":"code","b":[230,117],"m":"inc","o":"alien_sprite_reg","oa":117},{"a":41542,"t":"code","b":[224,252],"m":"cpx","o":"#$FC"},{"a":41544,"t":"code","b":[208,217],"m":"bne","o":"b_A223","oa":41507},{"a":41546,"t":"code","b":[32,116,169],"m":"jsr","o":"sound_police_siren","oa":43380},{"a":41549,"t":"code","b":[173,217,231],"m":"lda","o":"vic_shadow_sprite_on","oa":59353},{"a":41552,"t":"code","b":[41,252],"m":"and","o":"#$FC"},{"a":41554,"t":"code","b":[208,3],"m":"bne","o":"r_A257","oa":41559},{"a":41556,"t":"code","b":[76,207,158],"m":"jmp","o":"count_landscape_aliens","oa":40655},{"a":41559,"l":"r_A257","t":"code","b":[96],"m":"rts","x":[41554]},{"a":41560,"l":"update_alien","c":"One slot's frame, X = the slot's offset in $0200: hit and death handling $A7F2 (which does not come back here for a hit object), movement $A386, landscape scroll $A346, animation $A5B1, screen limits and scenery $A659, firing $A541, off-screen removal $A274, sprite registers $A29C, hit box $A744.","t":"code","b":[32,242,167],"m":"jsr","o":"run_hit_alien","oa":42994,"x":[41512]},{"a":41563,"t":"code","b":[32,134,163],"m":"jsr","o":"move_alien","oa":41862},{"a":41566,"t":"code","b":[32,70,163],"m":"jsr","o":"scroll_alien","oa":41798},{"a":41569,"t":"code","b":[32,177,165],"m":"jsr","o":"animate_alien","oa":42417},{"a":41572,"t":"code","b":[32,89,166],"m":"jsr","o":"bounce_alien","oa":42585},{"a":41575,"t":"code","b":[32,65,165],"m":"jsr","o":"fire_alien_shots","oa":42305},{"a":41578,"t":"code","b":[32,116,162],"m":"jsr","o":"remove_offscreen_alien","oa":41588},{"a":41581,"t":"code","b":[32,156,162],"m":"jsr","o":"show_alien_sprite","oa":41628},{"a":41584,"t":"code","b":[32,68,167],"m":"jsr","o":"set_alien_hitbox","oa":42820},{"a":41587,"t":"code","b":[96],"m":"rts"},{"a":41588,"l":"remove_offscreen_alien","c":"Frees an alien that has left the screen: X position (2-pixel units, byte $00) in $B6-$F9, 364-499 pixels, which lies off both edges since the 9-bit sprite position wraps. Unless it has been hit, its wave-list entry is given back (bit 7 cleared) so it appears again when the landscape scrolls back. Ends through $A9AF, which returns past the caller.","t":"code","b":[189,0,2],"m":"lda","o":"alien_x,x","oa":512,"x":[41578,43208]},{"a":41591,"t":"code","b":[201,182],"m":"cmp","o":"#$B6"},{"a":41593,"t":"code","b":[48,32],"m":"bmi","o":"r_A29B","oa":41627},{"a":41595,"t":"code","b":[201,250],"m":"cmp","o":"#$FA"},{"a":41597,"t":"code","b":[16,28],"m":"bpl","o":"r_A29B","oa":41627},{"a":41599,"t":"code","b":[189,37,2],"m":"lda","o":"alien_hit,x","oa":549},{"a":41602,"t":"code","b":[208,20],"m":"bne","o":"b_A298","oa":41624},{"a":41604,"t":"code","b":[189,41,2],"m":"lda","o":"alien_list_hi,x","oa":553},{"a":41607,"t":"code","b":[240,15],"m":"beq","o":"b_A298","oa":41624},{"a":41609,"t":"code","b":[133,95],"m":"sta","o":"zp_temp_5f","oa":95},{"a":41611,"t":"code","b":[189,40,2],"m":"lda","o":"alien_list_lo,x","oa":552},{"a":41614,"t":"code","b":[133,94],"m":"sta","o":"zp_temp_5e","oa":94},{"a":41616,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":41618,"t":"code","b":[177,94],"m":"lda","o":"(zp_temp_5e),y","oa":94},{"a":41620,"t":"code","b":[41,127],"m":"and","o":"#$7F"},{"a":41622,"t":"code","b":[145,94],"m":"sta","o":"(zp_temp_5e),y","oa":94},{"a":41624,"l":"b_A298","t":"code","b":[76,175,169],"m":"jmp","o":"free_alien_slot","oa":43439,"x":[41602,41607]},{"a":41627,"l":"r_A29B","t":"code","b":[96],"m":"rts","x":[41593,41597]},{"a":41628,"l":"show_alien_sprite","c":"Copies a slot into its sprite's register copies: the X position in pixels (byte $00 times two plus the top bit of the fraction $01) into $E7C4 + $75 with the ninth bit in $E7D4 ($D010), line into $E7C5 + $75, colour into $E7EB + $73 ($D027 on), frame byte $24 into the pointer copy $B525 + $73, and the sprite's bit into $E7D9 ($D015). Colour: byte $10's low bits, or when they are $10 a cycle through $B87D (light green, light blue, white, yellow) every 5 frames, counted in bytes $09 and $13. Multicolour ($B1B2, the $D01C copy) unless byte $10 has bit 6 and the object is not hit. While byte $14 is 1, a 16-frame fade-in, hi-res: colours $B875 black, dark grey, grey, light grey.","t":"code","b":[173,212,231],"m":"lda","o":"vic_shadow_x_msb","oa":59348,"x":[41581,43214]},{"a":41631,"t":"code","b":[37,114],"m":"and","o":"alien_sprite_mask","oa":114},{"a":41633,"t":"code","b":[141,212,231],"m":"sta","o":"vic_shadow_x_msb","oa":59348},{"a":41636,"t":"code","b":[189,1,2],"m":"lda","o":"alien_x_frac,x","oa":513},{"a":41639,"t":"code","b":[133,97],"m":"sta","o":"zp_ptr_61","oa":97},{"a":41641,"t":"code","b":[189,0,2],"m":"lda","o":"alien_x,x","oa":512},{"a":41644,"t":"code","b":[6,97],"m":"asl","o":"zp_ptr_61","oa":97},{"a":41646,"t":"code","b":[42],"m":"rol","o":"a"},{"a":41647,"t":"code","b":[144,10],"m":"bcc","o":"b_A2BB","oa":41659},{"a":41649,"t":"code","b":[72],"m":"pha"},{"a":41650,"t":"code","b":[173,212,231],"m":"lda","o":"vic_shadow_x_msb","oa":59348},{"a":41653,"t":"code","b":[5,116],"m":"ora","o":"alien_sprite_bits","oa":116},{"a":41655,"t":"code","b":[141,212,231],"m":"sta","o":"vic_shadow_x_msb","oa":59348},{"a":41658,"t":"code","b":[104],"m":"pla"},{"a":41659,"l":"b_A2BB","t":"code","b":[164,117],"m":"ldy","o":"alien_sprite_reg","oa":117,"x":[41647]},{"a":41661,"t":"code","b":[153,196,231],"m":"sta","o":"vic_shadow_spr0_x,y","oa":59332},{"a":41664,"t":"code","b":[189,2,2],"m":"lda","o":"alien_line,x","oa":514},{"a":41667,"t":"code","b":[153,197,231],"m":"sta","o":"vic_shadow_spr0_y,y","oa":59333},{"a":41670,"t":"code","b":[189,16,2],"m":"lda","o":"alien_colour,x","oa":528},{"a":41673,"t":"code","b":[41,31],"m":"and","o":"#$1F"},{"a":41675,"t":"code","b":[201,16],"m":"cmp","o":"#$10"},{"a":41677,"t":"code","b":[208,27],"m":"bne","o":"b_A2EA","oa":41706},{"a":41679,"t":"code","b":[254,9,2],"m":"inc","o":"alien_accel,x","oa":521},{"a":41682,"t":"code","b":[189,9,2],"m":"lda","o":"alien_accel,x","oa":521},{"a":41685,"t":"code","b":[201,5],"m":"cmp","o":"#$05"},{"a":41687,"t":"code","b":[208,8],"m":"bne","o":"b_A2E1","oa":41697},{"a":41689,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":41691,"t":"code","b":[157,9,2],"m":"sta","o":"alien_accel,x","oa":521},{"a":41694,"t":"code","b":[254,19,2],"m":"inc","o":"alien_anim_lo,x","oa":531},{"a":41697,"l":"b_A2E1","t":"code","b":[189,19,2],"m":"lda","o":"alien_anim_lo,x","oa":531,"x":[41687]},{"a":41700,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":41702,"t":"code","b":[168],"m":"tay"},{"a":41703,"t":"code","b":[185,125,184],"m":"lda","o":"tbl_flash_colours,y","oa":47229},{"a":41706,"l":"b_A2EA","t":"code","b":[164,115],"m":"ldy","o":"alien_sprite_number","oa":115,"x":[41677]},{"a":41708,"t":"code","b":[153,235,231],"m":"sta","o":"vic_shadow_spr0_colour,y","oa":59371},{"a":41711,"t":"code","b":[189,36,2],"m":"lda","o":"alien_frame,x","oa":548},{"a":41714,"t":"code","b":[153,37,181],"m":"sta","o":"wizball_image,y","oa":46373},{"a":41717,"t":"code","b":[173,217,231],"m":"lda","o":"vic_shadow_sprite_on","oa":59353},{"a":41720,"t":"code","b":[5,116],"m":"ora","o":"alien_sprite_bits","oa":116},{"a":41722,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":41725,"t":"code","b":[173,178,177],"m":"lda","o":"landscape_sprite_multicolour","oa":45490},{"a":41728,"t":"code","b":[5,116],"m":"ora","o":"alien_sprite_bits","oa":116},{"a":41730,"t":"code","b":[141,178,177],"m":"sta","o":"landscape_sprite_multicolour","oa":45490},{"a":41733,"t":"code","b":[189,16,2],"m":"lda","o":"alien_colour,x","oa":528},{"a":41736,"t":"code","b":[41,64],"m":"and","o":"#$40"},{"a":41738,"t":"code","b":[240,13],"m":"beq","o":"b_A319","oa":41753},{"a":41740,"t":"code","b":[189,37,2],"m":"lda","o":"alien_hit,x","oa":549},{"a":41743,"t":"code","b":[208,8],"m":"bne","o":"b_A319","oa":41753},{"a":41745,"t":"code","b":[173,178,177],"m":"lda","o":"landscape_sprite_multicolour","oa":45490},{"a":41748,"t":"code","b":[37,114],"m":"and","o":"alien_sprite_mask","oa":114},{"a":41750,"t":"code","b":[141,178,177],"m":"sta","o":"landscape_sprite_multicolour","oa":45490},{"a":41753,"l":"b_A319","t":"code","b":[189,20,2],"m":"lda","o":"alien_anim_hi,x","oa":532,"x":[41738,41743]},{"a":41756,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":41758,"t":"code","b":[208,31],"m":"bne","o":"r_A33F","oa":41791},{"a":41760,"t":"code","b":[254,19,2],"m":"inc","o":"alien_anim_lo,x","oa":531},{"a":41763,"t":"code","b":[189,19,2],"m":"lda","o":"alien_anim_lo,x","oa":531},{"a":41766,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":41767,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":41768,"t":"code","b":[201,4],"m":"cmp","o":"#$04"},{"a":41770,"t":"code","b":[240,20],"m":"beq","o":"b_A340","oa":41792},{"a":41772,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":41774,"t":"code","b":[168],"m":"tay"},{"a":41775,"t":"code","b":[185,117,184],"m":"lda","o":"tbl_alien_fade,y","oa":47221},{"a":41778,"t":"code","b":[164,115],"m":"ldy","o":"alien_sprite_number","oa":115},{"a":41780,"t":"code","b":[153,235,231],"m":"sta","o":"vic_shadow_spr0_colour,y","oa":59371},{"a":41783,"t":"code","b":[173,178,177],"m":"lda","o":"landscape_sprite_multicolour","oa":45490},{"a":41786,"t":"code","b":[37,114],"m":"and","o":"alien_sprite_mask","oa":114},{"a":41788,"t":"code","b":[141,178,177],"m":"sta","o":"landscape_sprite_multicolour","oa":45490},{"a":41791,"l":"r_A33F","t":"code","b":[96],"m":"rts","x":[41758]},{"a":41792,"l":"b_A340","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[41770]},{"a":41794,"t":"code","b":[157,20,2],"m":"sta","o":"alien_anim_hi,x","oa":532},{"a":41797,"t":"code","b":[96],"m":"rts"},{"a":41798,"l":"scroll_alien","c":"Keeps an alien fixed to the landscape: moves its X by this frame's landscape scroll $B1FB (-2 to 2 pixels), subtracting $B285/$B282[$B1FB] when that is positive and adding $B28A/$B288[$B1FB + 2] when negative (2-pixel units, high byte then fraction). Skipped while the landscape is at an end and not scrolling ($B25D).","t":"code","b":[173,93,178],"m":"lda","o":"scroll_held","oa":45661,"x":[41566,43211]},{"a":41801,"t":"code","b":[208,30],"m":"bne","o":"r_A369","oa":41833},{"a":41803,"t":"code","b":[172,251,177],"m":"ldy","o":"scroll_delta","oa":45563},{"a":41806,"t":"code","b":[48,26],"m":"bmi","o":"b_A36A","oa":41834},{"a":41808,"t":"code","b":[189,1,2],"m":"lda","o":"alien_x_frac,x","oa":513},{"a":41811,"t":"code","b":[56],"m":"sec"},{"a":41812,"t":"code","b":[249,130,178],"m":"sbc","o":"tbl_alien_drift_fraction,y","oa":45698},{"a":41815,"t":"code","b":[157,1,2],"m":"sta","o":"alien_x_frac,x","oa":513},{"a":41818,"t":"code","b":[176,3],"m":"bcs","o":"b_A35F","oa":41823},{"a":41820,"t":"code","b":[222,0,2],"m":"dec","o":"alien_x,x","oa":512},{"a":41823,"l":"b_A35F","t":"code","b":[189,0,2],"m":"lda","o":"alien_x,x","oa":512,"x":[41818]},{"a":41826,"t":"code","b":[56],"m":"sec"},{"a":41827,"t":"code","b":[249,133,178],"m":"sbc","o":"tbl_alien_drift_whole,y","oa":45701},{"a":41830,"t":"code","b":[157,0,2],"m":"sta","o":"alien_x,x","oa":512},{"a":41833,"l":"r_A369","t":"code","b":[96],"m":"rts","x":[41801]},{"a":41834,"l":"b_A36A","t":"code","b":[200],"m":"iny","x":[41806]},{"a":41835,"t":"code","b":[200],"m":"iny"},{"a":41836,"t":"code","b":[189,1,2],"m":"lda","o":"alien_x_frac,x","oa":513},{"a":41839,"t":"code","b":[24],"m":"clc"},{"a":41840,"t":"code","b":[121,136,178],"m":"adc","o":"tbl_alien_back_fraction,y","oa":45704},{"a":41843,"t":"code","b":[157,1,2],"m":"sta","o":"alien_x_frac,x","oa":513},{"a":41846,"t":"code","b":[144,3],"m":"bcc","o":"b_A37B","oa":41851},{"a":41848,"t":"code","b":[254,0,2],"m":"inc","o":"alien_x,x","oa":512},{"a":41851,"l":"b_A37B","t":"code","b":[189,0,2],"m":"lda","o":"alien_x,x","oa":512,"x":[41846]},{"a":41854,"t":"code","b":[24],"m":"clc"},{"a":41855,"t":"code","b":[121,138,178],"m":"adc","o":"tbl_alien_back_whole,y","oa":45706},{"a":41858,"t":"code","b":[157,0,2],"m":"sta","o":"alien_x,x","oa":512},{"a":41861,"t":"code","b":[96],"m":"rts"},{"a":41862,"l":"move_alien","c":"Moves an alien by its movement mode, byte $08. 0: falling, the Y speed $06/$07 grows by the acceleration $09 every frame; 1: rising, it shrinks by it; both then add the Y and X speeds ($06/$07, $04/$05) to the position. 2 and up: a pattern at ($0A/$0B), one byte per step, each step lasting $0C frames (counter $1C, index $1B; $FF loops to the start). Mode 2 adds or subtracts the speeds as the step's bits say (bit 0 adds the X speed, bit 1 subtracts it, bit 2 adds the Y speed, bit 3 subtracts it); mode 3 uses $04-$07 as accelerations on the velocity in $17-$1A, which then moves the alien, so it swoops in curves.","t":"code","b":[189,8,2],"m":"lda","o":"alien_move_mode,x","oa":520,"x":[41563]},{"a":41865,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":41867,"t":"code","b":[176,88],"m":"bcs","o":"b_A3E5","oa":41957},{"a":41869,"t":"code","b":[201,0],"m":"cmp","o":"#$00"},{"a":41871,"t":"code","b":[208,18],"m":"bne","o":"b_A3A3","oa":41891},{"a":41873,"t":"code","b":[189,7,2],"m":"lda","o":"alien_dy_frac,x","oa":519},{"a":41876,"t":"code","b":[24],"m":"clc"},{"a":41877,"t":"code","b":[125,9,2],"m":"adc","o":"alien_accel,x","oa":521},{"a":41880,"t":"code","b":[157,7,2],"m":"sta","o":"alien_dy_frac,x","oa":519},{"a":41883,"t":"code","b":[144,21],"m":"bcc","o":"b_A3B2","oa":41906},{"a":41885,"t":"code","b":[254,6,2],"m":"inc","o":"alien_dy,x","oa":518},{"a":41888,"t":"code","b":[76,178,163],"m":"jmp","o":"b_A3B2","oa":41906},{"a":41891,"l":"b_A3A3","t":"code","b":[189,7,2],"m":"lda","o":"alien_dy_frac,x","oa":519,"x":[41871]},{"a":41894,"t":"code","b":[56],"m":"sec"},{"a":41895,"t":"code","b":[253,9,2],"m":"sbc","o":"alien_accel,x","oa":521},{"a":41898,"t":"code","b":[157,7,2],"m":"sta","o":"alien_dy_frac,x","oa":519},{"a":41901,"t":"code","b":[176,3],"m":"bcs","o":"b_A3B2","oa":41906},{"a":41903,"t":"code","b":[222,6,2],"m":"dec","o":"alien_dy,x","oa":518},{"a":41906,"l":"b_A3B2","t":"code","b":[189,3,2],"m":"lda","o":"alien_line_frac,x","oa":515,"x":[41883,41888,41901]},{"a":41909,"t":"code","b":[24],"m":"clc"},{"a":41910,"t":"code","b":[125,7,2],"m":"adc","o":"alien_dy_frac,x","oa":519},{"a":41913,"t":"code","b":[157,3,2],"m":"sta","o":"alien_line_frac,x","oa":515},{"a":41916,"t":"code","b":[144,3],"m":"bcc","o":"b_A3C1","oa":41921},{"a":41918,"t":"code","b":[254,2,2],"m":"inc","o":"alien_line,x","oa":514},{"a":41921,"l":"b_A3C1","t":"code","b":[189,2,2],"m":"lda","o":"alien_line,x","oa":514,"x":[41916]},{"a":41924,"t":"code","b":[24],"m":"clc"},{"a":41925,"t":"code","b":[125,6,2],"m":"adc","o":"alien_dy,x","oa":518},{"a":41928,"t":"code","b":[157,2,2],"m":"sta","o":"alien_line,x","oa":514},{"a":41931,"t":"code","b":[189,1,2],"m":"lda","o":"alien_x_frac,x","oa":513},{"a":41934,"t":"code","b":[24],"m":"clc"},{"a":41935,"t":"code","b":[125,5,2],"m":"adc","o":"alien_dx_frac,x","oa":517},{"a":41938,"t":"code","b":[157,1,2],"m":"sta","o":"alien_x_frac,x","oa":513},{"a":41941,"t":"code","b":[144,3],"m":"bcc","o":"b_A3DA","oa":41946},{"a":41943,"t":"code","b":[254,0,2],"m":"inc","o":"alien_x,x","oa":512},{"a":41946,"l":"b_A3DA","t":"code","b":[189,0,2],"m":"lda","o":"alien_x,x","oa":512,"x":[41941]},{"a":41949,"t":"code","b":[24],"m":"clc"},{"a":41950,"t":"code","b":[125,4,2],"m":"adc","o":"alien_dx,x","oa":516},{"a":41953,"t":"code","b":[157,0,2],"m":"sta","o":"alien_x,x","oa":512},{"a":41956,"t":"code","b":[96],"m":"rts"},{"a":41957,"l":"b_A3E5","t":"code","b":[133,101],"m":"sta","o":"zp_ptr_65","oa":101,"x":[41867]},{"a":41959,"t":"code","b":[254,28,2],"m":"inc","o":"alien_pattern_timer,x","oa":540},{"a":41962,"t":"code","b":[189,28,2],"m":"lda","o":"alien_pattern_timer,x","oa":540},{"a":41965,"t":"code","b":[221,12,2],"m":"cmp","o":"alien_pattern_rate,x","oa":524},{"a":41968,"t":"code","b":[208,8],"m":"bne","o":"b_A3FA","oa":41978},{"a":41970,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":41972,"t":"code","b":[157,28,2],"m":"sta","o":"alien_pattern_timer,x","oa":540},{"a":41975,"t":"code","b":[254,27,2],"m":"inc","o":"alien_pattern_index,x","oa":539},{"a":41978,"l":"b_A3FA","t":"code","b":[189,10,2],"m":"lda","o":"alien_pattern_lo,x","oa":522,"x":[41968]},{"a":41981,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":41983,"t":"code","b":[189,11,2],"m":"lda","o":"alien_pattern_hi,x","oa":523},{"a":41986,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":41988,"t":"code","b":[188,27,2],"m":"ldy","o":"alien_pattern_index,x","oa":539},{"a":41991,"t":"code","b":[177,98],"m":"lda","o":"(zp_ptr_62),y","oa":98},{"a":41993,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":41995,"t":"code","b":[208,8],"m":"bne","o":"b_A415","oa":42005},{"a":41997,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":41999,"t":"code","b":[157,27,2],"m":"sta","o":"alien_pattern_index,x","oa":539},{"a":42002,"t":"code","b":[168],"m":"tay"},{"a":42003,"t":"code","b":[177,98],"m":"lda","o":"(zp_ptr_62),y","oa":98},{"a":42005,"l":"b_A415","t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102,"x":[41995]},{"a":42007,"t":"code","b":[165,101],"m":"lda","o":"zp_ptr_65","oa":101},{"a":42009,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":42011,"t":"code","b":[240,117],"m":"beq","o":"b_A492","oa":42130},{"a":42013,"t":"code","b":[70,102],"m":"lsr","o":"zp_temp_66","oa":102},{"a":42015,"t":"code","b":[144,25],"m":"bcc","o":"b_A43A","oa":42042},{"a":42017,"t":"code","b":[189,1,2],"m":"lda","o":"alien_x_frac,x","oa":513},{"a":42020,"t":"code","b":[24],"m":"clc"},{"a":42021,"t":"code","b":[125,5,2],"m":"adc","o":"alien_dx_frac,x","oa":517},{"a":42024,"t":"code","b":[157,1,2],"m":"sta","o":"alien_x_frac,x","oa":513},{"a":42027,"t":"code","b":[144,3],"m":"bcc","o":"b_A430","oa":42032},{"a":42029,"t":"code","b":[254,0,2],"m":"inc","o":"alien_x,x","oa":512},{"a":42032,"l":"b_A430","t":"code","b":[189,0,2],"m":"lda","o":"alien_x,x","oa":512,"x":[42027]},{"a":42035,"t":"code","b":[24],"m":"clc"},{"a":42036,"t":"code","b":[125,4,2],"m":"adc","o":"alien_dx,x","oa":516},{"a":42039,"t":"code","b":[157,0,2],"m":"sta","o":"alien_x,x","oa":512},{"a":42042,"l":"b_A43A","t":"code","b":[70,102],"m":"lsr","o":"zp_temp_66","oa":102,"x":[42015]},{"a":42044,"t":"code","b":[144,25],"m":"bcc","o":"b_A457","oa":42071},{"a":42046,"t":"code","b":[189,1,2],"m":"lda","o":"alien_x_frac,x","oa":513},{"a":42049,"t":"code","b":[56],"m":"sec"},{"a":42050,"t":"code","b":[253,5,2],"m":"sbc","o":"alien_dx_frac,x","oa":517},{"a":42053,"t":"code","b":[157,1,2],"m":"sta","o":"alien_x_frac,x","oa":513},{"a":42056,"t":"code","b":[176,3],"m":"bcs","o":"b_A44D","oa":42061},{"a":42058,"t":"code","b":[222,0,2],"m":"dec","o":"alien_x,x","oa":512},{"a":42061,"l":"b_A44D","t":"code","b":[189,0,2],"m":"lda","o":"alien_x,x","oa":512,"x":[42056]},{"a":42064,"t":"code","b":[56],"m":"sec"},{"a":42065,"t":"code","b":[253,4,2],"m":"sbc","o":"alien_dx,x","oa":516},{"a":42068,"t":"code","b":[157,0,2],"m":"sta","o":"alien_x,x","oa":512},{"a":42071,"l":"b_A457","t":"code","b":[70,102],"m":"lsr","o":"zp_temp_66","oa":102,"x":[42044]},{"a":42073,"t":"code","b":[144,25],"m":"bcc","o":"b_A474","oa":42100},{"a":42075,"t":"code","b":[189,3,2],"m":"lda","o":"alien_line_frac,x","oa":515},{"a":42078,"t":"code","b":[24],"m":"clc"},{"a":42079,"t":"code","b":[125,7,2],"m":"adc","o":"alien_dy_frac,x","oa":519},{"a":42082,"t":"code","b":[157,3,2],"m":"sta","o":"alien_line_frac,x","oa":515},{"a":42085,"t":"code","b":[144,3],"m":"bcc","o":"b_A46A","oa":42090},{"a":42087,"t":"code","b":[254,2,2],"m":"inc","o":"alien_line,x","oa":514},{"a":42090,"l":"b_A46A","t":"code","b":[189,2,2],"m":"lda","o":"alien_line,x","oa":514,"x":[42085]},{"a":42093,"t":"code","b":[24],"m":"clc"},{"a":42094,"t":"code","b":[125,6,2],"m":"adc","o":"alien_dy,x","oa":518},{"a":42097,"t":"code","b":[157,2,2],"m":"sta","o":"alien_line,x","oa":514},{"a":42100,"l":"b_A474","t":"code","b":[70,102],"m":"lsr","o":"zp_temp_66","oa":102,"x":[42073]},{"a":42102,"t":"code","b":[144,25],"m":"bcc","o":"r_A491","oa":42129},{"a":42104,"t":"code","b":[189,3,2],"m":"lda","o":"alien_line_frac,x","oa":515},{"a":42107,"t":"code","b":[56],"m":"sec"},{"a":42108,"t":"code","b":[253,7,2],"m":"sbc","o":"alien_dy_frac,x","oa":519},{"a":42111,"t":"code","b":[157,3,2],"m":"sta","o":"alien_line_frac,x","oa":515},{"a":42114,"t":"code","b":[176,3],"m":"bcs","o":"b_A487","oa":42119},{"a":42116,"t":"code","b":[222,2,2],"m":"dec","o":"alien_line,x","oa":514},{"a":42119,"l":"b_A487","t":"code","b":[189,2,2],"m":"lda","o":"alien_line,x","oa":514,"x":[42114]},{"a":42122,"t":"code","b":[56],"m":"sec"},{"a":42123,"t":"code","b":[253,6,2],"m":"sbc","o":"alien_dy,x","oa":518},{"a":42126,"t":"code","b":[157,2,2],"m":"sta","o":"alien_line,x","oa":514},{"a":42129,"l":"r_A491","t":"code","b":[96],"m":"rts","x":[42102]},{"a":42130,"l":"b_A492","t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102,"x":[42011]},{"a":42132,"t":"code","b":[41,1],"m":"and","o":"#$01"},{"a":42134,"t":"code","b":[240,25],"m":"beq","o":"b_A4B1","oa":42161},{"a":42136,"t":"code","b":[189,24,2],"m":"lda","o":"alien_vx_frac,x","oa":536},{"a":42139,"t":"code","b":[24],"m":"clc"},{"a":42140,"t":"code","b":[125,5,2],"m":"adc","o":"alien_dx_frac,x","oa":517},{"a":42143,"t":"code","b":[157,24,2],"m":"sta","o":"alien_vx_frac,x","oa":536},{"a":42146,"t":"code","b":[144,3],"m":"bcc","o":"b_A4A7","oa":42151},{"a":42148,"t":"code","b":[254,23,2],"m":"inc","o":"alien_vx,x","oa":535},{"a":42151,"l":"b_A4A7","t":"code","b":[189,23,2],"m":"lda","o":"alien_vx,x","oa":535,"x":[42146]},{"a":42154,"t":"code","b":[24],"m":"clc"},{"a":42155,"t":"code","b":[125,4,2],"m":"adc","o":"alien_dx,x","oa":516},{"a":42158,"t":"code","b":[157,23,2],"m":"sta","o":"alien_vx,x","oa":535},{"a":42161,"l":"b_A4B1","t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102,"x":[42134]},{"a":42163,"t":"code","b":[41,2],"m":"and","o":"#$02"},{"a":42165,"t":"code","b":[240,25],"m":"beq","o":"b_A4D0","oa":42192},{"a":42167,"t":"code","b":[189,24,2],"m":"lda","o":"alien_vx_frac,x","oa":536},{"a":42170,"t":"code","b":[56],"m":"sec"},{"a":42171,"t":"code","b":[253,5,2],"m":"sbc","o":"alien_dx_frac,x","oa":517},{"a":42174,"t":"code","b":[157,24,2],"m":"sta","o":"alien_vx_frac,x","oa":536},{"a":42177,"t":"code","b":[176,3],"m":"bcs","o":"b_A4C6","oa":42182},{"a":42179,"t":"code","b":[222,23,2],"m":"dec","o":"alien_vx,x","oa":535},{"a":42182,"l":"b_A4C6","t":"code","b":[189,23,2],"m":"lda","o":"alien_vx,x","oa":535,"x":[42177]},{"a":42185,"t":"code","b":[56],"m":"sec"},{"a":42186,"t":"code","b":[253,4,2],"m":"sbc","o":"alien_dx,x","oa":516},{"a":42189,"t":"code","b":[157,23,2],"m":"sta","o":"alien_vx,x","oa":535},{"a":42192,"l":"b_A4D0","t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102,"x":[42165]},{"a":42194,"t":"code","b":[41,4],"m":"and","o":"#$04"},{"a":42196,"t":"code","b":[240,25],"m":"beq","o":"b_A4EF","oa":42223},{"a":42198,"t":"code","b":[189,26,2],"m":"lda","o":"alien_vy_frac,x","oa":538},{"a":42201,"t":"code","b":[24],"m":"clc"},{"a":42202,"t":"code","b":[125,7,2],"m":"adc","o":"alien_dy_frac,x","oa":519},{"a":42205,"t":"code","b":[157,26,2],"m":"sta","o":"alien_vy_frac,x","oa":538},{"a":42208,"t":"code","b":[144,3],"m":"bcc","o":"b_A4E5","oa":42213},{"a":42210,"t":"code","b":[254,25,2],"m":"inc","o":"alien_vy,x","oa":537},{"a":42213,"l":"b_A4E5","t":"code","b":[189,25,2],"m":"lda","o":"alien_vy,x","oa":537,"x":[42208]},{"a":42216,"t":"code","b":[24],"m":"clc"},{"a":42217,"t":"code","b":[125,6,2],"m":"adc","o":"alien_dy,x","oa":518},{"a":42220,"t":"code","b":[157,25,2],"m":"sta","o":"alien_vy,x","oa":537},{"a":42223,"l":"b_A4EF","t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102,"x":[42196]},{"a":42225,"t":"code","b":[41,8],"m":"and","o":"#$08"},{"a":42227,"t":"code","b":[240,25],"m":"beq","o":"b_A50E","oa":42254},{"a":42229,"t":"code","b":[189,26,2],"m":"lda","o":"alien_vy_frac,x","oa":538},{"a":42232,"t":"code","b":[56],"m":"sec"},{"a":42233,"t":"code","b":[253,7,2],"m":"sbc","o":"alien_dy_frac,x","oa":519},{"a":42236,"t":"code","b":[157,26,2],"m":"sta","o":"alien_vy_frac,x","oa":538},{"a":42239,"t":"code","b":[176,3],"m":"bcs","o":"b_A504","oa":42244},{"a":42241,"t":"code","b":[222,25,2],"m":"dec","o":"alien_vy,x","oa":537},{"a":42244,"l":"b_A504","t":"code","b":[189,25,2],"m":"lda","o":"alien_vy,x","oa":537,"x":[42239]},{"a":42247,"t":"code","b":[56],"m":"sec"},{"a":42248,"t":"code","b":[253,6,2],"m":"sbc","o":"alien_dy,x","oa":518},{"a":42251,"t":"code","b":[157,25,2],"m":"sta","o":"alien_vy,x","oa":537},{"a":42254,"l":"b_A50E","t":"code","b":[189,1,2],"m":"lda","o":"alien_x_frac,x","oa":513,"x":[42227]},{"a":42257,"t":"code","b":[24],"m":"clc"},{"a":42258,"t":"code","b":[125,24,2],"m":"adc","o":"alien_vx_frac,x","oa":536},{"a":42261,"t":"code","b":[157,1,2],"m":"sta","o":"alien_x_frac,x","oa":513},{"a":42264,"t":"code","b":[144,3],"m":"bcc","o":"b_A51D","oa":42269},{"a":42266,"t":"code","b":[254,0,2],"m":"inc","o":"alien_x,x","oa":512},{"a":42269,"l":"b_A51D","t":"code","b":[189,0,2],"m":"lda","o":"alien_x,x","oa":512,"x":[42264]},{"a":42272,"t":"code","b":[24],"m":"clc"},{"a":42273,"t":"code","b":[125,23,2],"m":"adc","o":"alien_vx,x","oa":535},{"a":42276,"t":"code","b":[157,0,2],"m":"sta","o":"alien_x,x","oa":512},{"a":42279,"t":"code","b":[189,3,2],"m":"lda","o":"alien_line_frac,x","oa":515},{"a":42282,"t":"code","b":[24],"m":"clc"},{"a":42283,"t":"code","b":[125,26,2],"m":"adc","o":"alien_vy_frac,x","oa":538},{"a":42286,"t":"code","b":[157,3,2],"m":"sta","o":"alien_line_frac,x","oa":515},{"a":42289,"t":"code","b":[144,3],"m":"bcc","o":"b_A536","oa":42294},{"a":42291,"t":"code","b":[254,2,2],"m":"inc","o":"alien_line,x","oa":514},{"a":42294,"l":"b_A536","t":"code","b":[189,2,2],"m":"lda","o":"alien_line,x","oa":514,"x":[42289]},{"a":42297,"t":"code","b":[24],"m":"clc"},{"a":42298,"t":"code","b":[125,25,2],"m":"adc","o":"alien_vy,x","oa":537},{"a":42301,"t":"code","b":[157,2,2],"m":"sta","o":"alien_line,x","oa":514},{"a":42304,"t":"code","b":[96],"m":"rts"},{"a":42305,"l":"fire_alien_shots","c":"Alien firing: counts byte $21 up to the interval in byte $0F (an exact match, so 0 would mean every 256 frames), then fires by mode byte $0E. 0: never. 2: one shot in a direction that turns by 4 of 64 each time (byte $22). 3: eight shots, one every eighth of a turn. Any other (1): one shot aimed at the Wizball (direction $FF). Shots are started by $9BB5 (the alien bullets at $0300), then $A5A6 plays the shot sound.","t":"code","b":[254,33,2],"m":"inc","o":"alien_fire_timer,x","oa":545,"x":[41575]},{"a":42308,"t":"code","b":[189,33,2],"m":"lda","o":"alien_fire_timer,x","oa":545},{"a":42311,"t":"code","b":[221,15,2],"m":"cmp","o":"alien_fire_rate,x","oa":527},{"a":42314,"t":"code","b":[240,1],"m":"beq","o":"b_A54D","oa":42317},{"a":42316,"t":"code","b":[96],"m":"rts"},{"a":42317,"l":"b_A54D","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[42314]},{"a":42319,"t":"code","b":[157,33,2],"m":"sta","o":"alien_fire_timer,x","oa":545},{"a":42322,"t":"code","b":[189,14,2],"m":"lda","o":"alien_fire_mode,x","oa":526},{"a":42325,"t":"code","b":[240,21],"m":"beq","o":"r_A56C","oa":42348},{"a":42327,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":42329,"t":"code","b":[240,18],"m":"beq","o":"b_A56D","oa":42349},{"a":42331,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":42333,"t":"code","b":[240,31],"m":"beq","o":"b_A57E","oa":42366},{"a":42335,"t":"code","b":[189,33,2],"m":"lda","o":"alien_fire_timer,x","oa":545},{"a":42338,"t":"code","b":[208,8],"m":"bne","o":"r_A56C","oa":42348},{"a":42340,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":42342,"t":"code","b":[32,181,155],"m":"jsr","o":"fire_alien_bullet","oa":39861},{"a":42345,"t":"code","b":[32,166,165],"m":"jsr","o":"play_alien_shot_sound","oa":42406},{"a":42348,"l":"r_A56C","t":"code","b":[96],"m":"rts","x":[42325,42338]},{"a":42349,"l":"b_A56D","t":"code","b":[189,34,2],"m":"lda","o":"alien_fire_dir,x","oa":546,"x":[42329]},{"a":42352,"t":"code","b":[24],"m":"clc"},{"a":42353,"t":"code","b":[105,4],"m":"adc","o":"#$04"},{"a":42355,"t":"code","b":[157,34,2],"m":"sta","o":"alien_fire_dir,x","oa":546},{"a":42358,"t":"code","b":[41,63],"m":"and","o":"#$3F"},{"a":42360,"t":"code","b":[32,181,155],"m":"jsr","o":"fire_alien_bullet","oa":39861},{"a":42363,"t":"code","b":[76,166,165],"m":"jmp","o":"play_alien_shot_sound","oa":42406},{"a":42366,"l":"b_A57E","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[42333]},{"a":42368,"t":"code","b":[32,181,155],"m":"jsr","o":"fire_alien_bullet","oa":39861},{"a":42371,"t":"code","b":[169,16],"m":"lda","o":"#$10"},{"a":42373,"t":"code","b":[32,181,155],"m":"jsr","o":"fire_alien_bullet","oa":39861},{"a":42376,"t":"code","b":[169,32],"m":"lda","o":"#$20"},{"a":42378,"t":"code","b":[32,181,155],"m":"jsr","o":"fire_alien_bullet","oa":39861},{"a":42381,"t":"code","b":[169,48],"m":"lda","o":"#$30"},{"a":42383,"t":"code","b":[32,181,155],"m":"jsr","o":"fire_alien_bullet","oa":39861},{"a":42386,"t":"code","b":[169,8],"m":"lda","o":"#$08"},{"a":42388,"t":"code","b":[32,181,155],"m":"jsr","o":"fire_alien_bullet","oa":39861},{"a":42391,"t":"code","b":[169,24],"m":"lda","o":"#$18"},{"a":42393,"t":"code","b":[32,181,155],"m":"jsr","o":"fire_alien_bullet","oa":39861},{"a":42396,"t":"code","b":[169,40],"m":"lda","o":"#$28"},{"a":42398,"t":"code","b":[32,181,155],"m":"jsr","o":"fire_alien_bullet","oa":39861},{"a":42401,"t":"code","b":[169,56],"m":"lda","o":"#$38"},{"a":42403,"t":"code","b":[32,181,155],"m":"jsr","o":"fire_alien_bullet","oa":39861},{"a":42406,"l":"play_alien_shot_sound","c":"Sound effect 6 through $4553 for an alien's shot, unless a bonus-stage message is up ($6733 non-zero).","t":"code","b":[172,51,103],"m":"ldy","o":"bonus_message_state","oa":26419,"x":[42345,42363]},{"a":42409,"t":"code","b":[240,1],"m":"beq","o":"b_A5AC","oa":42412},{"a":42411,"t":"code","b":[96],"m":"rts"},{"a":42412,"l":"b_A5AC","t":"code","b":[160,6],"m":"ldy","o":"#$06","x":[42409]},{"a":42414,"t":"code","b":[76,83,69],"m":"jmp","o":"start_sound_effect","oa":17747},{"a":42417,"l":"animate_alien","c":"Sets the alien's frame (byte $24), and notes police ships: any slot whose byte $10 has bit 7 sets $A9A7 for the siren. Animation mode, byte $11. 0: the frame is byte $12. 1: the bounce wobble: every 3 frames (5 with bit 7) the index $12 steps one towards 10, and the frame is ($13/$14)[$12]; the bounce routines set the index to 0 or 20, and the spheres' 21-frame table $40D0 squashes and settles back to round at 10. 2 and up: a frame list at ($13/$14), advanced every $12 frames (counter $23); $FF followed by n steps the pointer back n bytes.","t":"code","b":[189,16,2],"m":"lda","o":"alien_colour,x","oa":528,"x":[41569]},{"a":42420,"t":"code","b":[41,128],"m":"and","o":"#$80"},{"a":42422,"t":"code","b":[240,5],"m":"beq","o":"b_A5BD","oa":42429},{"a":42424,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":42426,"t":"code","b":[141,167,169],"m":"sta","o":"police_present","oa":43431},{"a":42429,"l":"b_A5BD","t":"code","b":[189,17,2],"m":"lda","o":"alien_anim_mode,x","oa":529,"x":[42422]},{"a":42432,"t":"code","b":[208,7],"m":"bne","o":"b_A5C9","oa":42441},{"a":42434,"t":"code","b":[189,18,2],"m":"lda","o":"alien_anim_arg,x","oa":530},{"a":42437,"t":"code","b":[157,36,2],"m":"sta","o":"alien_frame,x","oa":548},{"a":42440,"l":"r_A5C8","t":"code","b":[96],"m":"rts","x":[42488]},{"a":42441,"l":"b_A5C9","t":"code","b":[201,1],"m":"cmp","o":"#$01","x":[42432]},{"a":42443,"t":"code","b":[240,63],"m":"beq","o":"b_A60C","oa":42508},{"a":42445,"t":"code","b":[254,35,2],"m":"inc","o":"alien_anim_timer,x","oa":547},{"a":42448,"t":"code","b":[189,35,2],"m":"lda","o":"alien_anim_timer,x","oa":547},{"a":42451,"t":"code","b":[221,18,2],"m":"cmp","o":"alien_anim_arg,x","oa":530},{"a":42454,"t":"code","b":[208,13],"m":"bne","o":"b_A5E5","oa":42469},{"a":42456,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":42458,"t":"code","b":[157,35,2],"m":"sta","o":"alien_anim_timer,x","oa":547},{"a":42461,"t":"code","b":[254,19,2],"m":"inc","o":"alien_anim_lo,x","oa":531},{"a":42464,"t":"code","b":[208,3],"m":"bne","o":"b_A5E5","oa":42469},{"a":42466,"t":"code","b":[254,20,2],"m":"inc","o":"alien_anim_hi,x","oa":532},{"a":42469,"l":"b_A5E5","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[42454,42464,42500,42505]},{"a":42471,"t":"code","b":[189,19,2],"m":"lda","o":"alien_anim_lo,x","oa":531},{"a":42474,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":42476,"t":"code","b":[189,20,2],"m":"lda","o":"alien_anim_hi,x","oa":532},{"a":42479,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":42481,"t":"code","b":[177,98],"m":"lda","o":"(zp_ptr_62),y","oa":98},{"a":42483,"t":"code","b":[157,36,2],"m":"sta","o":"alien_frame,x","oa":548},{"a":42486,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":42488,"t":"code","b":[208,206],"m":"bne","o":"r_A5C8","oa":42440},{"a":42490,"t":"code","b":[200],"m":"iny"},{"a":42491,"t":"code","b":[189,19,2],"m":"lda","o":"alien_anim_lo,x","oa":531},{"a":42494,"t":"code","b":[56],"m":"sec"},{"a":42495,"t":"code","b":[241,98],"m":"sbc","o":"(zp_ptr_62),y","oa":98},{"a":42497,"t":"code","b":[157,19,2],"m":"sta","o":"alien_anim_lo,x","oa":531},{"a":42500,"t":"code","b":[176,223],"m":"bcs","o":"b_A5E5","oa":42469},{"a":42502,"t":"code","b":[222,20,2],"m":"dec","o":"alien_anim_hi,x","oa":532},{"a":42505,"t":"code","b":[76,229,165],"m":"jmp","o":"b_A5E5","oa":42469},{"a":42508,"l":"b_A60C","t":"code","b":[169,3],"m":"lda","o":"#$03","x":[42443]},{"a":42510,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":42512,"t":"code","b":[189,16,2],"m":"lda","o":"alien_colour,x","oa":528},{"a":42515,"t":"code","b":[41,128],"m":"and","o":"#$80"},{"a":42517,"t":"code","b":[240,4],"m":"beq","o":"b_A61B","oa":42523},{"a":42519,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":42521,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":42523,"l":"b_A61B","t":"code","b":[254,35,2],"m":"inc","o":"alien_anim_timer,x","oa":547,"x":[42517]},{"a":42526,"t":"code","b":[189,35,2],"m":"lda","o":"alien_anim_timer,x","oa":547},{"a":42529,"t":"code","b":[197,103],"m":"cmp","o":"zp_temp_67","oa":103},{"a":42531,"t":"code","b":[208,5],"m":"bne","o":"b_A62A","oa":42538},{"a":42533,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":42535,"t":"code","b":[157,35,2],"m":"sta","o":"alien_anim_timer,x","oa":547},{"a":42538,"l":"b_A62A","t":"code","b":[189,18,2],"m":"lda","o":"alien_anim_arg,x","oa":530,"x":[42531]},{"a":42541,"t":"code","b":[201,10],"m":"cmp","o":"#$0A"},{"a":42543,"t":"code","b":[240,21],"m":"beq","o":"b_A646","oa":42566},{"a":42545,"t":"code","b":[189,35,2],"m":"lda","o":"alien_anim_timer,x","oa":547},{"a":42548,"t":"code","b":[208,16],"m":"bne","o":"b_A646","oa":42566},{"a":42550,"t":"code","b":[189,18,2],"m":"lda","o":"alien_anim_arg,x","oa":530},{"a":42553,"t":"code","b":[254,18,2],"m":"inc","o":"alien_anim_arg,x","oa":530},{"a":42556,"t":"code","b":[201,10],"m":"cmp","o":"#$0A"},{"a":42558,"t":"code","b":[48,6],"m":"bmi","o":"b_A646","oa":42566},{"a":42560,"t":"code","b":[222,18,2],"m":"dec","o":"alien_anim_arg,x","oa":530},{"a":42563,"t":"code","b":[222,18,2],"m":"dec","o":"alien_anim_arg,x","oa":530},{"a":42566,"l":"b_A646","t":"code","b":[189,19,2],"m":"lda","o":"alien_anim_lo,x","oa":531,"x":[42543,42548,42558]},{"a":42569,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":42571,"t":"code","b":[189,20,2],"m":"lda","o":"alien_anim_hi,x","oa":532},{"a":42574,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":42576,"t":"code","b":[188,18,2],"m":"ldy","o":"alien_anim_arg,x","oa":530},{"a":42579,"t":"code","b":[177,98],"m":"lda","o":"(zp_ptr_62),y","oa":98},{"a":42581,"t":"code","b":[157,36,2],"m":"sta","o":"alien_frame,x","oa":548},{"a":42584,"t":"code","b":[96],"m":"rts"},{"a":42585,"l":"bounce_alien","c":"Keeps an alien's line within $46-$C7: at $C8 or more it is put back to $C7, below $46 it is put at $47, and when byte $0D is below 2 it also bounces off the bottom ($A70D) or the top ($A707). Then the scenery test, for one slot a frame (the turn in $B1B3), only when byte $0D is non-zero and not in the bonus stage ($B874): $7C1D gives the screen address under the alien, and the eight characters at the offsets in $B3B6 (below, left, right, above, then the four corners) are tried in turn. The first one that is scenery (code $A0 or more) calls the pair of bounce routines for that probe from $B28C, through the JSR at $A6CB and the JMP at $A6DC.","t":"code","b":[189,2,2],"m":"lda","o":"alien_line,x","oa":514,"x":[41572]},{"a":42588,"t":"code","b":[201,200],"m":"cmp","o":"#$C8"},{"a":42590,"t":"code","b":[144,15],"m":"bcc","o":"b_A66F","oa":42607},{"a":42592,"t":"code","b":[169,199],"m":"lda","o":"#$C7"},{"a":42594,"t":"code","b":[157,2,2],"m":"sta","o":"alien_line,x","oa":514},{"a":42597,"t":"code","b":[189,13,2],"m":"lda","o":"alien_scenery_mode,x","oa":525},{"a":42600,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":42602,"t":"code","b":[16,3],"m":"bpl","o":"b_A66F","oa":42607},{"a":42604,"t":"code","b":[76,13,167],"m":"jmp","o":"bounce_off_bottom","oa":42765},{"a":42607,"l":"b_A66F","t":"code","b":[201,70],"m":"cmp","o":"#$46","x":[42590,42602]},{"a":42609,"t":"code","b":[176,16],"m":"bcs","o":"b_A683","oa":42627},{"a":42611,"t":"code","b":[169,71],"m":"lda","o":"#$47"},{"a":42613,"t":"code","b":[157,2,2],"m":"sta","o":"alien_line,x","oa":514},{"a":42616,"t":"code","b":[189,13,2],"m":"lda","o":"alien_scenery_mode,x","oa":525},{"a":42619,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":42621,"t":"code","b":[16,4],"m":"bpl","o":"b_A683","oa":42627},{"a":42623,"t":"code","b":[76,7,167],"m":"jmp","o":"bounce_off_top","oa":42759},{"a":42626,"l":"r_A682","t":"code","b":[96],"m":"rts","x":[42630,42635,42640]},{"a":42627,"l":"b_A683","t":"code","b":[173,116,184],"m":"lda","o":"bonus_stage","oa":47220,"x":[42609,42621]},{"a":42630,"t":"code","b":[208,250],"m":"bne","o":"r_A682","oa":42626},{"a":42632,"t":"code","b":[189,13,2],"m":"lda","o":"alien_scenery_mode,x","oa":525},{"a":42635,"t":"code","b":[240,245],"m":"beq","o":"r_A682","oa":42626},{"a":42637,"t":"code","b":[236,179,177],"m":"cpx","o":"alien_turn_slot","oa":45491},{"a":42640,"t":"code","b":[208,240],"m":"bne","o":"r_A682","oa":42626},{"a":42642,"t":"code","b":[134,98],"m":"stx","o":"zp_ptr_62","oa":98},{"a":42644,"t":"code","b":[188,2,2],"m":"ldy","o":"alien_line,x","oa":514},{"a":42647,"t":"code","b":[189,0,2],"m":"lda","o":"alien_x,x","oa":512},{"a":42650,"t":"code","b":[170],"m":"tax"},{"a":42651,"t":"code","b":[32,29,124],"m":"jsr","o":"screen_address_at","oa":31773},{"a":42654,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":42656,"l":"b_A6A0","t":"code","b":[188,182,179],"m":"ldy","o":"tbl_probe_cells,x","oa":46006,"x":[42668]},{"a":42659,"t":"code","b":[177,96],"m":"lda","o":"(zp_ptr_60),y","oa":96},{"a":42661,"t":"code","b":[201,160],"m":"cmp","o":"#$A0"},{"a":42663,"t":"code","b":[176,8],"m":"bcs","o":"b_A6B1","oa":42673},{"a":42665,"t":"code","b":[232],"m":"inx"},{"a":42666,"t":"code","b":[224,8],"m":"cpx","o":"#$08"},{"a":42668,"t":"code","b":[208,242],"m":"bne","o":"b_A6A0","oa":42656},{"a":42670,"t":"code","b":[166,98],"m":"ldx","o":"zp_ptr_62","oa":98},{"a":42672,"t":"code","b":[96],"m":"rts"},{"a":42673,"l":"b_A6B1","t":"code","b":[173,13,2],"m":"lda","o":"alien_scenery_mode","oa":525,"x":[42663]},{"a":42676,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":42678,"t":"code","b":[176,119],"m":"bcs","o":"stop_alien","oa":42799},{"a":42680,"t":"code","b":[138],"m":"txa"},{"a":42681,"t":"code","b":[166,98],"m":"ldx","o":"zp_ptr_62","oa":98},{"a":42683,"t":"code","b":[10],"m":"asl","o":"a"},{"a":42684,"t":"code","b":[10],"m":"asl","o":"a"},{"a":42685,"t":"code","b":[72],"m":"pha"},{"a":42686,"t":"code","b":[168],"m":"tay"},{"a":42687,"t":"code","b":[185,140,178],"m":"lda","o":"tbl_alien_bump_handlers,y","oa":45708},{"a":42690,"t":"code","b":[141,204,166],"m":"sta","o":"bounce_call_lo","oa":42700},{"a":42693,"t":"code","b":[185,141,178],"m":"lda","o":"tbl_alien_bump_handlers_1hi,y","oa":45709},{"a":42696,"t":"code","b":[141,205,166],"m":"sta","o":"bounce_call_hi","oa":42701},{"a":42699,"t":"code","b":[32,0,0],"m":"jsr","o":"cpu_port_ddr","oa":0},{"a":42700,"t":"note","l":"bounce_call_lo","c":"Low byte of the JSR operand at $A6CB (zero in the image), written by $A6C2 from $B28C + 4 x probe: the first bounce routine for the scenery probe that touched, $A70D, $A6DF, $A6E5 or $A707.","note":"inside the item at $A6CB","x":[42690]},{"a":42701,"t":"note","l":"bounce_call_hi","c":"High byte of the JSR operand at $A6CB, written by $A6C8 from $B28D + 4 x probe. After that call returns, $A6CE-$A6D9 fetch the second routine of the pair from $B28E/$B28F into the JMP at $A6DC.","note":"inside the item at $A6CB","x":[42696]},{"a":42702,"t":"code","b":[104],"m":"pla"},{"a":42703,"t":"code","b":[168],"m":"tay"},{"a":42704,"t":"code","b":[185,142,178],"m":"lda","o":"tbl_alien_bump_handlers_2lo,y","oa":45710},{"a":42707,"t":"code","b":[141,221,166],"m":"sta","o":"bounce_jump_lo","oa":42717},{"a":42710,"t":"code","b":[185,143,178],"m":"lda","o":"tbl_alien_bump_handlers_2hi,y","oa":45711},{"a":42713,"t":"code","b":[141,222,166],"m":"sta","o":"bounce_jump_hi","oa":42718},{"a":42716,"t":"code","b":[76,0,0],"m":"jmp","o":"cpu_port_ddr","oa":0},{"a":42717,"t":"note","l":"bounce_jump_lo","c":"Low byte of the JMP operand at $A6DC (zero in the image), written by $A6D3 from $B28E + 4 x probe: the second bounce routine, $A6DF or $A6E5 for a corner probe and $8404 (an RTS) for the four side probes.","note":"inside the item at $A6DC","x":[42707]},{"a":42718,"t":"note","l":"bounce_jump_hi","c":"High byte of the JMP operand at $A6DC, written by $A6D9 from $B28F + 4 x probe.","note":"inside the item at $A6DC","x":[42713]},{"a":42719,"l":"bounce_off_left","c":"Scenery on the alien's left (probe 1 and the two left corners, through the $B28C table): if its X speed (bytes $04/$05) is negative it is reversed at $A6EA (both bytes EOR $FF, a ones' complement), and for the bounce-wobble animation (byte $11 = 1) the wobble restarts at index 0. Reached only through the rewritten JSR/JMP at $A6CB/$A6DC.","t":"code","b":[189,4,2],"m":"lda","o":"alien_dx,x","oa":516},{"a":42722,"t":"code","b":[48,6],"m":"bmi","o":"b_A6EA","oa":42730},{"a":42724,"l":"r_A6E4","t":"code","b":[96],"m":"rts","x":[42728,42768]},{"a":42725,"l":"bounce_off_right","c":"Scenery on the alien's right (probe 2 and the two right corners): if its X speed is zero or positive it is reversed as in $A6DF, restarting the wobble at 0. Reached only through the rewritten JSR/JMP at $A6CB/$A6DC.","t":"code","b":[189,4,2],"m":"lda","o":"alien_dx,x","oa":516},{"a":42728,"t":"code","b":[48,250],"m":"bmi","o":"r_A6E4","oa":42724},{"a":42730,"l":"b_A6EA","t":"code","b":[189,4,2],"m":"lda","o":"alien_dx,x","oa":516,"x":[42722]},{"a":42733,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":42735,"t":"code","b":[157,4,2],"m":"sta","o":"alien_dx,x","oa":516},{"a":42738,"t":"code","b":[189,5,2],"m":"lda","o":"alien_dx_frac,x","oa":517},{"a":42741,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":42743,"t":"code","b":[157,5,2],"m":"sta","o":"alien_dx_frac,x","oa":517},{"a":42746,"t":"code","b":[189,17,2],"m":"lda","o":"alien_anim_mode,x","oa":529},{"a":42749,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":42751,"t":"code","b":[208,5],"m":"bne","o":"r_A706","oa":42758},{"a":42753,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":42755,"t":"code","b":[157,18,2],"m":"sta","o":"alien_anim_arg,x","oa":530},{"a":42758,"l":"r_A706","t":"code","b":[96],"m":"rts","x":[42751]},{"a":42759,"l":"bounce_off_top","c":"The top line ($A67F) or scenery above (probe 3 and the top corners): if the alien is moving up (Y speed negative) the Y speed is reversed at $A712; otherwise nothing.","t":"code","b":[189,6,2],"m":"lda","o":"alien_dy,x","oa":518,"x":[42623]},{"a":42762,"t":"code","b":[48,6],"m":"bmi","o":"b_A712","oa":42770},{"a":42764,"t":"code","b":[96],"m":"rts"},{"a":42765,"l":"bounce_off_bottom","c":"The bottom line ($A66C) or scenery below (probe 0 and the bottom corners): unless the alien is already moving up, $A712 reverses the Y speed (both bytes EOR $FF), and for the bounce-wobble animation restarts the wobble at index 20.","t":"code","b":[189,6,2],"m":"lda","o":"alien_dy,x","oa":518,"x":[42604]},{"a":42768,"t":"code","b":[48,210],"m":"bmi","o":"r_A6E4","oa":42724},{"a":42770,"l":"b_A712","t":"code","b":[189,6,2],"m":"lda","o":"alien_dy,x","oa":518,"x":[42762]},{"a":42773,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":42775,"t":"code","b":[157,6,2],"m":"sta","o":"alien_dy,x","oa":518},{"a":42778,"t":"code","b":[189,7,2],"m":"lda","o":"alien_dy_frac,x","oa":519},{"a":42781,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":42783,"t":"code","b":[157,7,2],"m":"sta","o":"alien_dy_frac,x","oa":519},{"a":42786,"t":"code","b":[189,17,2],"m":"lda","o":"alien_anim_mode,x","oa":529},{"a":42789,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":42791,"t":"code","b":[208,5],"m":"bne","o":"r_A72E","oa":42798},{"a":42793,"t":"code","b":[169,20],"m":"lda","o":"#$14"},{"a":42795,"t":"code","b":[157,18,2],"m":"sta","o":"alien_anim_arg,x","oa":530},{"a":42798,"l":"r_A72E","t":"code","b":[96],"m":"rts","x":[42791]},{"a":42799,"l":"stop_alien","c":"Zeroes movement mode, acceleration and both speeds (bytes $04-$09). Reached from $A6B6 when absolute $020D, slot 0's byte $0D rather than this slot's, is 2 or more; X then holds the probe number (0-7), not the slot, so the writes land in slot 0's bytes $04-$10 and $A258 carries on with the wrong X. No record in $3ECF or $39DC has byte $0D above 1, so the path appears never to be taken.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[42678]},{"a":42801,"t":"code","b":[157,9,2],"m":"sta","o":"alien_accel,x","oa":521},{"a":42804,"t":"code","b":[157,6,2],"m":"sta","o":"alien_dy,x","oa":518},{"a":42807,"t":"code","b":[157,7,2],"m":"sta","o":"alien_dy_frac,x","oa":519},{"a":42810,"t":"code","b":[157,4,2],"m":"sta","o":"alien_dx,x","oa":516},{"a":42813,"t":"code","b":[157,5,2],"m":"sta","o":"alien_dx_frac,x","oa":517},{"a":42816,"t":"code","b":[157,8,2],"m":"sta","o":"alien_move_mode,x","oa":520},{"a":42819,"t":"code","b":[96],"m":"rts"},{"a":42820,"l":"set_alien_hitbox","c":"Sets the slot's hit box from its position: X from x - 3 to x + 7 (2-pixel units, 20 pixels) in bytes $1D/$1E, Y from line - 3 to line + $13 (22 lines) in $1F/$20. Bullets, the Wizball and the cat test points against these boxes in $6FBE.","t":"code","b":[189,0,2],"m":"lda","o":"alien_x,x","oa":512,"x":[41584,43203,43374]},{"a":42823,"t":"code","b":[56],"m":"sec"},{"a":42824,"t":"code","b":[233,3],"m":"sbc","o":"#$03"},{"a":42826,"t":"code","b":[157,29,2],"m":"sta","o":"alien_box_left,x","oa":541},{"a":42829,"t":"code","b":[24],"m":"clc"},{"a":42830,"t":"code","b":[105,10],"m":"adc","o":"#$0A"},{"a":42832,"t":"code","b":[157,30,2],"m":"sta","o":"alien_box_right,x","oa":542},{"a":42835,"t":"code","b":[189,2,2],"m":"lda","o":"alien_line,x","oa":514},{"a":42838,"t":"code","b":[56],"m":"sec"},{"a":42839,"t":"code","b":[233,3],"m":"sbc","o":"#$03"},{"a":42841,"t":"code","b":[157,31,2],"m":"sta","o":"alien_box_top,x","oa":543},{"a":42844,"t":"code","b":[24],"m":"clc"},{"a":42845,"t":"code","b":[105,22],"m":"adc","o":"#$16"},{"a":42847,"t":"code","b":[157,32,2],"m":"sta","o":"alien_box_bottom,x","oa":544},{"a":42850,"t":"code","b":[96],"m":"rts"},{"a":42851,"l":"droplet_counter","c":"The special-droplet counter: each colour sphere shot adds $A765[level] ($A7B5), and a threshold match adds 8 more ($A7D9). It wraps at 256.","t":"byte","b":[0],"x":[42933,42936,42965,42971]},{"a":42852,"l":"droplet_band","c":"$A763 with its low three bits cleared ($A7BB), compared with the five thresholds at $A76D-$A771.","t":"byte","b":[0],"x":[42941,42949]},{"a":42853,"l":"tbl_droplet_counter_step","c":"How far each colour sphere shot moves the special-droplet counter, by level: 1, 1, 2, 2, 4, 4, 8 for levels 0-6 at $A765-$A76B; level 7's step, 8, is the next byte, $A76C. Special droplets come more often on later levels.","t":"byte","b":[1,1,2,2,4,4,8],"x":[42929]},{"a":42860,"l":"tbl_special_droplet_threshold","c":"$A76C is level 7's counter step (8); as threshold 0 it is never compared. $A76D-$A770 are thresholds 1-4 and $A771 threshold 5: random multiples of 8 written by $8086 at play start. When a sphere is shot and the counter's band $A764 equals threshold n (tried from 5 down to 1), its droplet takes colour $A771 + n.","t":"byte","b":[8,0,0,0,0],"x":[32902,42946]},{"a":42865,"l":"tbl_special_droplet_colour","c":"$A771 is threshold 5 (random, from $8086); as colour entry 0 it is never used. $A772-$A776 are the colours of special droplets 1-5, each with its effect when the cat collects it ($8902): 1 white, bonus Wizball (a life); $0B dark grey, indestructacat; 0 black, freaky bits; 4 purple, mutant cat; $0E light blue, filth raid.","t":"byte","b":[0,1,11,0,4,14],"x":[42959]},{"a":42871,"l":"count_alien_kill","c":"Hit handler, entered from $A7F2 with A = the state (byte $15). States 0 (alien), 1 (colour sphere), 6 (the bonus stage's Wizball lookalike) and 7 die now: unless it is a police ship (byte $10 = $86), $A787-$A7A5 restart the no-kill timer and count it off the landscape's remaining aliens $B1AF, which $9EFD redraws (at 0 a new wave and 1,000 points). States 2-5 are already dying and go straight on. Then $A7A9 and the dispatch at $A830.","t":"code","b":[201,2],"m":"cmp","o":"#$02","x":[43007]},{"a":42873,"t":"code","b":[48,4],"m":"bmi","o":"b_A77F","oa":42879},{"a":42875,"t":"code","b":[201,6],"m":"cmp","o":"#$06"},{"a":42877,"t":"code","b":[48,42],"m":"bmi","o":"choose_droplet_colour","oa":42921},{"a":42879,"l":"b_A77F","t":"code","b":[72],"m":"pha","x":[42873]},{"a":42880,"t":"code","b":[189,16,2],"m":"lda","o":"alien_colour,x","oa":528},{"a":42883,"t":"code","b":[201,134],"m":"cmp","o":"#$86"},{"a":42885,"t":"code","b":[240,33],"m":"beq","o":"b_A7A8","oa":42920},{"a":42887,"t":"code","b":[172,40,177],"m":"ldy","o":"current_level","oa":45352},{"a":42890,"t":"code","b":[185,185,161],"m":"lda","o":"tbl_no_kill_limit,y","oa":41401},{"a":42893,"t":"code","b":[141,149,167],"m":"sta","o":"no_kill_limit_operand","oa":42901},{"a":42896,"t":"code","b":[173,184,161],"m":"lda","o":"no_kill_seconds","oa":41400},{"a":42899,"t":"code","b":[56],"m":"sec"},{"a":42900,"t":"code","b":[233,0],"m":"sbc","o":"#$00"},{"a":42901,"t":"note","l":"no_kill_limit_operand","c":"Operand of the SBC #$00 at $A794, rewritten by $A78D with this level's limit $A1B9[$B128]. Unless the no-kill timer $A1B8 stands exactly one second short of the limit (its warning tune already started), $A79A-$A79F restart it; then $A7A2 counts the alien off $B1AF and $A7A5 redraws the count through $9EFD.","note":"inside the item at $A794","x":[42893]},{"a":42902,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":42904,"t":"code","b":[240,8],"m":"beq","o":"b_A7A2","oa":42914},{"a":42906,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":42908,"t":"code","b":[141,183,161],"m":"sta","o":"no_kill_frames","oa":41399},{"a":42911,"t":"code","b":[141,184,161],"m":"sta","o":"no_kill_seconds","oa":41400},{"a":42914,"l":"b_A7A2","t":"code","b":[206,175,177],"m":"dec","o":"aliens_left","oa":45487,"x":[42904]},{"a":42917,"t":"code","b":[32,253,158],"m":"jsr","o":"show_alien_count","oa":40701},{"a":42920,"l":"b_A7A8","t":"code","b":[104],"m":"pla","x":[42885]},{"a":42921,"l":"choose_droplet_colour","c":"For a colour sphere (state 1): advances the special-droplet counter $A763 by $A765[level]; if its band $A764 matches threshold n at $A76D-$A771 (n from 5 down to 1), the droplet's colour (byte $10) becomes $A771 + n and the counter moves 8 on, past that threshold. Every state then goes on to $A830.","t":"code","b":[72],"m":"pha","x":[42877]},{"a":42922,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":42924,"t":"code","b":[208,48],"m":"bne","o":"b_A7DE","oa":42974},{"a":42926,"t":"code","b":[172,40,177],"m":"ldy","o":"current_level","oa":45352},{"a":42929,"t":"code","b":[185,101,167],"m":"lda","o":"tbl_droplet_counter_step,y","oa":42853},{"a":42932,"t":"code","b":[24],"m":"clc"},{"a":42933,"t":"code","b":[109,99,167],"m":"adc","o":"droplet_counter","oa":42851},{"a":42936,"t":"code","b":[141,99,167],"m":"sta","o":"droplet_counter","oa":42851},{"a":42939,"t":"code","b":[41,248],"m":"and","o":"#$F8"},{"a":42941,"t":"code","b":[141,100,167],"m":"sta","o":"droplet_band","oa":42852},{"a":42944,"t":"code","b":[160,5],"m":"ldy","o":"#$05"},{"a":42946,"l":"b_A7C2","t":"code","b":[185,108,167],"m":"lda","o":"tbl_special_droplet_threshold,y","oa":42860,"x":[42955]},{"a":42949,"t":"code","b":[205,100,167],"m":"cmp","o":"droplet_band","oa":42852},{"a":42952,"t":"code","b":[240,5],"m":"beq","o":"b_A7CF","oa":42959},{"a":42954,"t":"code","b":[136],"m":"dey"},{"a":42955,"t":"code","b":[208,245],"m":"bne","o":"b_A7C2","oa":42946},{"a":42957,"t":"code","b":[240,15],"m":"beq","o":"b_A7DE","oa":42974},{"a":42959,"l":"b_A7CF","t":"code","b":[185,113,167],"m":"lda","o":"tbl_special_droplet_colour,y","oa":42865,"x":[42952]},{"a":42962,"t":"code","b":[157,16,2],"m":"sta","o":"alien_colour,x","oa":528},{"a":42965,"t":"code","b":[173,99,167],"m":"lda","o":"droplet_counter","oa":42851},{"a":42968,"t":"code","b":[24],"m":"clc"},{"a":42969,"t":"code","b":[105,8],"m":"adc","o":"#$08"},{"a":42971,"t":"code","b":[141,99,167],"m":"sta","o":"droplet_counter","oa":42851},{"a":42974,"l":"b_A7DE","t":"code","b":[104],"m":"pla","x":[42924,42957]},{"a":42975,"t":"code","b":[76,48,168],"m":"jmp","o":"dispatch_hit_state","oa":43056},{"a":42978,"l":"hit_lookalike","c":"State 6, the bonus stage's Wizball lookalike (record 19 at $3BED, green) shot: sound effect $11 and an extra life for the current player ($B277 + $BFD9), then it explodes through $A891.","t":"code","b":[160,17],"m":"ldy","o":"#$11","x":[43058]},{"a":42980,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":42983,"t":"code","b":[138],"m":"txa"},{"a":42984,"t":"code","b":[174,217,191],"m":"ldx","o":"side_playing","oa":49113},{"a":42987,"t":"code","b":[254,119,178],"m":"inc","o":"large_font_ink_mask,x","oa":45687},{"a":42990,"t":"code","b":[170],"m":"tax"},{"a":42991,"t":"code","b":[76,145,168],"m":"jmp","o":"explode_alien","oa":43153},{"a":42994,"l":"run_hit_alien","c":"First step of $A258: nothing unless the hit flag (byte $25, set by $6FBE, or by the smart bomb $7394 for every slot) is on. An object in state $FF (bonus record 7 at $3AC7: grey, frame $71) shrugs it off: the flag is cleared, the landscape band's background flashes ($B25C = $0A, stepped by $8A44), its X speed is made positive and sound effect $0D plays. Any other state goes to $A777; its handler then runs every frame and drops $A258's return address, so a hit object no longer moves, animates or fires.","t":"code","b":[189,37,2],"m":"lda","o":"alien_hit,x","oa":549,"x":[41560]},{"a":42997,"t":"code","b":[208,1],"m":"bne","o":"b_A7F8","oa":43000},{"a":42999,"t":"code","b":[96],"m":"rts"},{"a":43000,"l":"b_A7F8","t":"code","b":[189,21,2],"m":"lda","o":"alien_state,x","oa":533,"x":[42997]},{"a":43003,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":43005,"t":"code","b":[240,3],"m":"beq","o":"b_A802","oa":43010},{"a":43007,"t":"code","b":[76,119,167],"m":"jmp","o":"count_alien_kill","oa":42871},{"a":43010,"l":"b_A802","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[43005]},{"a":43012,"t":"code","b":[157,37,2],"m":"sta","o":"alien_hit,x","oa":549},{"a":43015,"t":"code","b":[169,10],"m":"lda","o":"#$0A"},{"a":43017,"t":"code","b":[141,92,178],"m":"sta","o":"background_flash","oa":45660},{"a":43020,"t":"code","b":[189,4,2],"m":"lda","o":"alien_dx,x","oa":516},{"a":43023,"t":"code","b":[16,13],"m":"bpl","o":"b_A81E","oa":43038},{"a":43025,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":43027,"t":"code","b":[157,4,2],"m":"sta","o":"alien_dx,x","oa":516},{"a":43030,"t":"code","b":[189,5,2],"m":"lda","o":"alien_dx_frac,x","oa":517},{"a":43033,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":43035,"t":"code","b":[157,5,2],"m":"sta","o":"alien_dx_frac,x","oa":517},{"a":43038,"l":"b_A81E","t":"code","b":[160,13],"m":"ldy","o":"#$0D","x":[43023]},{"a":43040,"t":"code","b":[76,83,69],"m":"jmp","o":"start_sound_effect","oa":17747},{"a":43043,"l":"hit_state_7","c":"State 7 shot: lights the seventh icon ($B258 = 7, shields), sound effect $14, then dies like an alien ($A85B). No record in $3ECF or $39DC starts in state 7 and no instruction stores 7 in byte $15, so this appears unused.","t":"code","b":[169,7],"m":"lda","o":"#$07","x":[43062]},{"a":43045,"t":"code","b":[141,88,178],"m":"sta","o":"icon_cursor","oa":45656},{"a":43048,"t":"code","b":[160,20],"m":"ldy","o":"#$14"},{"a":43050,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":43053,"t":"code","b":[76,91,168],"m":"jmp","o":"kill_alien","oa":43099},{"a":43056,"l":"dispatch_hit_state","c":"Dispatch on the state in A: 6 to $A7E2, 7 to $A823, 4 to $A8AC (exploding), 1 to $A8D2 (sphere to droplet), 2 to $A8EC (droplet falling), 3 to $A925 (droplet splashing), 5 to $A95B (pearl); anything else, state 0, to $A85B (alien killed).","t":"code","b":[201,6],"m":"cmp","o":"#$06","x":[42975]},{"a":43058,"t":"code","b":[240,174],"m":"beq","o":"hit_lookalike","oa":42978},{"a":43060,"t":"code","b":[201,7],"m":"cmp","o":"#$07"},{"a":43062,"t":"code","b":[240,235],"m":"beq","o":"hit_state_7","oa":43043},{"a":43064,"t":"code","b":[201,4],"m":"cmp","o":"#$04"},{"a":43066,"t":"code","b":[240,112],"m":"beq","o":"run_explosion","oa":43180},{"a":43068,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":43070,"t":"code","b":[208,3],"m":"bne","o":"b_A843","oa":43075},{"a":43072,"t":"code","b":[76,210,168],"m":"jmp","o":"release_droplet","oa":43218},{"a":43075,"l":"b_A843","t":"code","b":[201,2],"m":"cmp","o":"#$02","x":[43070]},{"a":43077,"t":"code","b":[208,3],"m":"bne","o":"b_A84A","oa":43082},{"a":43079,"t":"code","b":[76,236,168],"m":"jmp","o":"drop_droplet","oa":43244},{"a":43082,"l":"b_A84A","t":"code","b":[201,3],"m":"cmp","o":"#$03","x":[43077]},{"a":43084,"t":"code","b":[208,3],"m":"bne","o":"b_A851","oa":43089},{"a":43086,"t":"code","b":[76,37,169],"m":"jmp","o":"splash_droplet","oa":43301},{"a":43089,"l":"b_A851","t":"code","b":[201,5],"m":"cmp","o":"#$05","x":[43084]},{"a":43091,"t":"code","b":[208,6],"m":"bne","o":"kill_alien","oa":43099},{"a":43093,"t":"code","b":[76,91,169],"m":"jmp","o":"keep_pearl","oa":43355},{"a":43096,"l":"bonus_kills","c":"Aliens killed: $A85B counts every kill, stopping at 255, and the bonus-stage setup ($64A8) clears it, so it holds the bonus stage's kills; the score screen $6693 counts its display up to this, 40 points each.","t":"byte","b":[0],"x":[25768,26259,43099,43104]},{"a":43097,"l":"bonus_kills_tallied","c":"Kills tallied so far on the bonus stage's score screen: $66E9 zeroes it and $6693 counts it up to $A858, one every second frame, each time adding 40 points and one to the displayed count at $B841-$B843.","t":"byte","b":[0],"x":[26262,26287,26347]},{"a":43098,"l":"bonus_tally_clock","c":"Frame toggle for the bonus tally: $6693 increments it and tallies a kill only when it is even, every second frame.","t":"byte","b":[0],"x":[26272,26275]},{"a":43099,"l":"kill_alien","c":"An alien (state 0, or 7) dies: the kill count $A858 goes up (stopping at 255); a police ship (byte $10 bit 7) plays sound effect $0E and silences the siren ($A9A7 = 0). The ninth kill since the last pearl ($A9A9 reaching $A9AA), or any alien with bit 5 in byte $10 (type 1, the molecule), leaves a pearl ($A93C); otherwise sound effect 5 and the explosion ($A891).","t":"code","b":[238,88,168],"m":"inc","o":"bonus_kills","oa":43096,"x":[43053,43091]},{"a":43102,"t":"code","b":[208,3],"m":"bne","o":"b_A863","oa":43107},{"a":43104,"t":"code","b":[206,88,168],"m":"dec","o":"bonus_kills","oa":43096},{"a":43107,"l":"b_A863","t":"code","b":[189,16,2],"m":"lda","o":"alien_colour,x","oa":528,"x":[43102]},{"a":43110,"t":"code","b":[41,128],"m":"and","o":"#$80"},{"a":43112,"t":"code","b":[240,10],"m":"beq","o":"b_A874","oa":43124},{"a":43114,"t":"code","b":[160,14],"m":"ldy","o":"#$0E"},{"a":43116,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":43119,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":43121,"t":"code","b":[141,167,169],"m":"sta","o":"police_present","oa":43431},{"a":43124,"l":"b_A874","t":"code","b":[238,169,169],"m":"inc","o":"kills_since_pearl","oa":43433,"x":[43112]},{"a":43127,"t":"code","b":[173,169,169],"m":"lda","o":"kills_since_pearl","oa":43433},{"a":43130,"t":"code","b":[205,170,169],"m":"cmp","o":"kills_per_pearl","oa":43434},{"a":43133,"t":"code","b":[208,3],"m":"bne","o":"b_A882","oa":43138},{"a":43135,"t":"code","b":[76,60,169],"m":"jmp","o":"leave_pearl","oa":43324},{"a":43138,"l":"b_A882","t":"code","b":[189,16,2],"m":"lda","o":"alien_colour,x","oa":528,"x":[43133]},{"a":43141,"t":"code","b":[41,32],"m":"and","o":"#$20"},{"a":43143,"t":"code","b":[240,3],"m":"beq","o":"b_A88C","oa":43148},{"a":43145,"t":"code","b":[76,60,169],"m":"jmp","o":"leave_pearl","oa":43324},{"a":43148,"l":"b_A88C","t":"code","b":[160,5],"m":"ldy","o":"#$05","x":[43143]},{"a":43150,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":43153,"l":"explode_alien","c":"Starts an explosion: adds the object's points (byte $16 x 10) through $710B, state 4, timer byte $12 = 0, the hit box's Y limits zeroed so nothing collides with it, frame $5F; falls into $A8AC.","t":"code","b":[189,22,2],"m":"lda","o":"alien_points,x","oa":534,"x":[42991]},{"a":43156,"t":"code","b":[32,11,113],"m":"jsr","o":"add_score","oa":28939},{"a":43159,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":43161,"t":"code","b":[157,21,2],"m":"sta","o":"alien_state,x","oa":533},{"a":43164,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":43166,"t":"code","b":[157,18,2],"m":"sta","o":"alien_anim_arg,x","oa":530},{"a":43169,"t":"code","b":[157,32,2],"m":"sta","o":"alien_box_bottom,x","oa":544},{"a":43172,"t":"code","b":[157,31,2],"m":"sta","o":"alien_box_top,x","oa":543},{"a":43175,"t":"code","b":[169,95],"m":"lda","o":"#$5F"},{"a":43177,"t":"code","b":[157,36,2],"m":"sta","o":"alien_frame,x","oa":548},{"a":43180,"l":"run_explosion","c":"State 4, exploding: every fourth frame the frame steps down, $5F, $5E, $5D, $5C (a spreading ring), and when it reaches $5B the slot is freed ($A9AF).","t":"code","b":[254,18,2],"m":"inc","o":"alien_anim_arg,x","oa":530,"x":[43066]},{"a":43183,"t":"code","b":[189,18,2],"m":"lda","o":"alien_anim_arg,x","oa":530},{"a":43186,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":43188,"t":"code","b":[208,16],"m":"bne","o":"b_A8C6","oa":43206},{"a":43190,"t":"code","b":[222,36,2],"m":"dec","o":"alien_frame,x","oa":548},{"a":43193,"t":"code","b":[189,36,2],"m":"lda","o":"alien_frame,x","oa":548},{"a":43196,"t":"code","b":[201,91],"m":"cmp","o":"#$5B"},{"a":43198,"t":"code","b":[208,6],"m":"bne","o":"b_A8C6","oa":43206},{"a":43200,"t":"code","b":[76,175,169],"m":"jmp","o":"free_alien_slot","oa":43439},{"a":43203,"l":"finish_hit_frame","c":"Common end of the hit-state handlers: $A8C3 first refreshes the hit box ($A744), then $A8C6 drops the return address into $A258 and runs only the off-screen check $A274, the scroll $A346 and the sprite update $A29C, returning to $A204's loop.","t":"code","b":[32,68,167],"m":"jsr","o":"set_alien_hitbox","oa":42820,"x":[43286]},{"a":43206,"l":"b_A8C6","t":"code","b":[104],"m":"pla","x":[43188,43198,43309,43319,43377]},{"a":43207,"t":"code","b":[104],"m":"pla"},{"a":43208,"t":"code","b":[32,116,162],"m":"jsr","o":"remove_offscreen_alien","oa":41588},{"a":43211,"t":"code","b":[32,70,163],"m":"jsr","o":"scroll_alien","oa":41798},{"a":43214,"t":"code","b":[32,156,162],"m":"jsr","o":"show_alien_sprite","oa":41628},{"a":43217,"t":"code","b":[96],"m":"rts"},{"a":43218,"l":"release_droplet","c":"State 1 shot, a colour sphere: it becomes a droplet (state 2), sound effect 1, its points (byte $16 x 10) added, bytes $12 and $11 zeroed; falls into $A8EC.","t":"code","b":[169,2],"m":"lda","o":"#$02","x":[43072]},{"a":43220,"t":"code","b":[157,21,2],"m":"sta","o":"alien_state,x","oa":533},{"a":43223,"t":"code","b":[160,1],"m":"ldy","o":"#$01"},{"a":43225,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":43228,"t":"code","b":[189,22,2],"m":"lda","o":"alien_points,x","oa":534},{"a":43231,"t":"code","b":[32,11,113],"m":"jsr","o":"add_score","oa":28939},{"a":43234,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":43236,"t":"code","b":[157,18,2],"m":"sta","o":"alien_anim_arg,x","oa":530},{"a":43239,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":43241,"t":"code","b":[157,17,2],"m":"sta","o":"alien_anim_mode,x","oa":529},{"a":43244,"l":"drop_droplet","c":"State 2, a falling droplet: wobbles through the frames at $A9AB (a step every 4 frames), falls one line a frame and keeps a live hit box, so the cat can collect it ($88B5); the Wizball passes through. At line $CB it lands: state 3, frame $53.","t":"code","b":[254,18,2],"m":"inc","o":"alien_anim_arg,x","oa":530,"x":[43079]},{"a":43247,"t":"code","b":[189,18,2],"m":"lda","o":"alien_anim_arg,x","oa":530},{"a":43250,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":43252,"t":"code","b":[208,15],"m":"bne","o":"b_A905","oa":43269},{"a":43254,"t":"code","b":[254,17,2],"m":"inc","o":"alien_anim_mode,x","oa":529},{"a":43257,"t":"code","b":[189,17,2],"m":"lda","o":"alien_anim_mode,x","oa":529},{"a":43260,"t":"code","b":[201,4],"m":"cmp","o":"#$04"},{"a":43262,"t":"code","b":[208,5],"m":"bne","o":"b_A905","oa":43269},{"a":43264,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":43266,"t":"code","b":[157,17,2],"m":"sta","o":"alien_anim_mode,x","oa":529},{"a":43269,"l":"b_A905","t":"code","b":[188,17,2],"m":"ldy","o":"alien_anim_mode,x","oa":529,"x":[43252,43262]},{"a":43272,"t":"code","b":[185,171,169],"m":"lda","o":"tbl_droplet_frames,y","oa":43435},{"a":43275,"t":"code","b":[157,36,2],"m":"sta","o":"alien_frame,x","oa":548},{"a":43278,"t":"code","b":[254,2,2],"m":"inc","o":"alien_line,x","oa":514},{"a":43281,"t":"code","b":[189,2,2],"m":"lda","o":"alien_line,x","oa":514},{"a":43284,"t":"code","b":[201,203],"m":"cmp","o":"#$CB"},{"a":43286,"t":"code","b":[144,171],"m":"bcc","o":"finish_hit_frame","oa":43203},{"a":43288,"t":"code","b":[254,21,2],"m":"inc","o":"alien_state,x","oa":533},{"a":43291,"t":"code","b":[169,83],"m":"lda","o":"#$53"},{"a":43293,"t":"code","b":[157,36,2],"m":"sta","o":"alien_frame,x","oa":548},{"a":43296,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":43298,"t":"code","b":[157,18,2],"m":"sta","o":"alien_anim_arg,x","oa":530},{"a":43301,"l":"splash_droplet","c":"State 3, a droplet splashing on the ground: every fourth frame the next frame, $53 to $5B, and the slot is freed when it reaches $5C. Its last hit box stays, but the cat collects only state 2.","t":"code","b":[254,18,2],"m":"inc","o":"alien_anim_arg,x","oa":530,"x":[43086]},{"a":43304,"t":"code","b":[189,18,2],"m":"lda","o":"alien_anim_arg,x","oa":530},{"a":43307,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":43309,"t":"code","b":[208,151],"m":"bne","o":"b_A8C6","oa":43206},{"a":43311,"t":"code","b":[254,36,2],"m":"inc","o":"alien_frame,x","oa":548},{"a":43314,"t":"code","b":[189,36,2],"m":"lda","o":"alien_frame,x","oa":548},{"a":43317,"t":"code","b":[201,92],"m":"cmp","o":"#$5C"},{"a":43319,"t":"code","b":[208,141],"m":"bne","o":"b_A8C6","oa":43206},{"a":43321,"t":"code","b":[76,175,169],"m":"jmp","o":"free_alien_slot","oa":43439},{"a":43324,"l":"leave_pearl","c":"The alien leaves a pearl: sound effect 2, its points (byte $16 x 10) added, the kill count $A9A9 restarted, state 5, frame $78, colour 5 (green, multicolour). The Wizball collects it for 100 points and the next icon ($7E63, $72AA).","t":"code","b":[160,2],"m":"ldy","o":"#$02","x":[43135,43145]},{"a":43326,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":43329,"t":"code","b":[189,22,2],"m":"lda","o":"alien_points,x","oa":534},{"a":43332,"t":"code","b":[32,11,113],"m":"jsr","o":"add_score","oa":28939},{"a":43335,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":43337,"t":"code","b":[141,169,169],"m":"sta","o":"kills_since_pearl","oa":43433},{"a":43340,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":43342,"t":"code","b":[157,21,2],"m":"sta","o":"alien_state,x","oa":533},{"a":43345,"t":"code","b":[169,120],"m":"lda","o":"#$78"},{"a":43347,"t":"code","b":[157,36,2],"m":"sta","o":"alien_frame,x","oa":548},{"a":43350,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":43352,"t":"code","b":[157,16,2],"m":"sta","o":"alien_colour,x","oa":528},{"a":43355,"l":"keep_pearl","c":"State 5, a pearl: it stays where the alien died (only the landscape scroll moves it), drifting left a quarter unit a frame in the bonus stage ($B874 non-zero); its hit box follows it.","t":"code","b":[173,116,184],"m":"lda","o":"bonus_stage","oa":47220,"x":[43093]},{"a":43358,"t":"code","b":[240,14],"m":"beq","o":"b_A96E","oa":43374},{"a":43360,"t":"code","b":[189,1,2],"m":"lda","o":"alien_x_frac,x","oa":513},{"a":43363,"t":"code","b":[56],"m":"sec"},{"a":43364,"t":"code","b":[233,64],"m":"sbc","o":"#$40"},{"a":43366,"t":"code","b":[157,1,2],"m":"sta","o":"alien_x_frac,x","oa":513},{"a":43369,"t":"code","b":[176,3],"m":"bcs","o":"b_A96E","oa":43374},{"a":43371,"t":"code","b":[222,0,2],"m":"dec","o":"alien_x,x","oa":512},{"a":43374,"l":"b_A96E","t":"code","b":[32,68,167],"m":"jsr","o":"set_alien_hitbox","oa":42820,"x":[43358,43369]},{"a":43377,"t":"code","b":[76,198,168],"m":"jmp","o":"b_A8C6","oa":43206},{"a":43380,"l":"sound_police_siren","c":"The police siren, every frame from $A204: while $A9A7 is set (a police ship on screen), every 60 frames ($A9A5) it swaps the tone $A9A6 between sound effects $0B and $0C and plays it; when $A9A7 changes, the next frame plays at once.","t":"code","b":[173,167,169],"m":"lda","o":"police_present","oa":43431,"x":[41546]},{"a":43383,"t":"code","b":[205,168,169],"m":"cmp","o":"police_present_before","oa":43432},{"a":43386,"t":"code","b":[240,8],"m":"beq","o":"b_A984","oa":43396},{"a":43388,"t":"code","b":[141,168,169],"m":"sta","o":"police_present_before","oa":43432},{"a":43391,"t":"code","b":[169,59],"m":"lda","o":"#$3B"},{"a":43393,"t":"code","b":[141,165,169],"m":"sta","o":"siren_clock","oa":43429},{"a":43396,"l":"b_A984","t":"code","b":[173,167,169],"m":"lda","o":"police_present","oa":43431,"x":[43386]},{"a":43399,"t":"code","b":[240,27],"m":"beq","o":"r_A9A4","oa":43428},{"a":43401,"t":"code","b":[238,165,169],"m":"inc","o":"siren_clock","oa":43429},{"a":43404,"t":"code","b":[173,165,169],"m":"lda","o":"siren_clock","oa":43429},{"a":43407,"t":"code","b":[201,60],"m":"cmp","o":"#$3C"},{"a":43409,"t":"code","b":[208,17],"m":"bne","o":"r_A9A4","oa":43428},{"a":43411,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":43413,"t":"code","b":[141,165,169],"m":"sta","o":"siren_clock","oa":43429},{"a":43416,"t":"code","b":[173,166,169],"m":"lda","o":"siren_tone","oa":43430},{"a":43419,"t":"code","b":[73,7],"m":"eor","o":"#$07"},{"a":43421,"t":"code","b":[141,166,169],"m":"sta","o":"siren_tone","oa":43430},{"a":43424,"t":"code","b":[168],"m":"tay"},{"a":43425,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":43428,"l":"r_A9A4","t":"code","b":[96],"m":"rts","x":[43399,43409]},{"a":43429,"l":"siren_clock","c":"Frames since the siren last sounded (0-59); $A974 sets it to 59 when the siren switches on or off, so the next frame sounds.","t":"byte","b":[0],"x":[43393,43401,43404,43413]},{"a":43430,"l":"siren_tone","c":"The siren's current sound effect, $0B or $0C: $A974 flips it (EOR 7) every 60 frames.","t":"byte","b":[11],"x":[43416,43421]},{"a":43431,"l":"police_present","c":"1 while a police ship is on screen: $A5B1 sets it every frame for each slot with bit 7 in byte $10. Cleared when a police ship dies ($A871), whenever any slot is freed ($A9C0), at the bonus-stage setup ($64AB), play start ($8060) and a new landscape ($8275).","t":"byte","b":[0],"x":[25771,32864,33397,42426,43121,43380,43396,43456]},{"a":43432,"l":"police_present_before","c":"$A9A7 as it was on the siren's last frame, so $A974 notices the siren switching on or off.","t":"byte","b":[0],"x":[43383,43388]},{"a":43433,"l":"kills_since_pearl","c":"Aliens killed since the last pearl ($A874); a pearl is left when it reaches $A9AA, and $A949 zeroes it whenever a pearl is left. Colour spheres do not count.","t":"byte","b":[0],"x":[43124,43127,43337]},{"a":43434,"l":"kills_per_pearl","c":"9: the ninth alien killed since the last pearl leaves one (compared at $A87A; nothing writes it). Live: a poked hit with $A9A9 = 8 left a pearl and reset the count; with 0 the alien exploded and the count became 1.","t":"byte","b":[9],"x":[43130]},{"a":43435,"l":"tbl_droplet_frames","c":"Frames of a falling droplet, stepped every 4 frames by $A905: $50, $51, $52, $51, a drop that wobbles as it falls.","t":"byte","b":[80,81,82,81],"x":[43272]},{"a":43439,"l":"free_alien_slot","c":"Frees a slot: line byte $02 = 0 (the empty mark), hit box zeroed, the siren flag $A9A7 cleared; then PLA PLA drops the return address into the caller, so it returns straight to $A204's loop.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[41624,43200,43321]},{"a":43441,"t":"code","b":[157,2,2],"m":"sta","o":"alien_line,x","oa":514},{"a":43444,"t":"code","b":[157,29,2],"m":"sta","o":"alien_box_left,x","oa":541},{"a":43447,"t":"code","b":[157,30,2],"m":"sta","o":"alien_box_right,x","oa":542},{"a":43450,"t":"code","b":[157,31,2],"m":"sta","o":"alien_box_top,x","oa":543},{"a":43453,"t":"code","b":[157,32,2],"m":"sta","o":"alien_box_bottom,x","oa":544},{"a":43456,"t":"code","b":[141,167,169],"m":"sta","o":"police_present","oa":43431},{"a":43459,"t":"code","b":[104],"m":"pla"},{"a":43460,"t":"code","b":[104],"m":"pla"},{"a":43461,"t":"code","b":[96],"m":"rts"},{"a":43462,"l":"find_alien_landscapes","c":"Finds the first level (0-4) whose colour count $B11F + level is not 3, all three colours done, and sets $B1CE to it plus 2. The three landscapes $B1CE - 2 to $B1CE get alien waves, and the tube code ($81D3) lets the Wizball go no higher than $B1CE. With levels 0-4 all done it stops at 5, so $B1CE is at most 7. Called at play start ($63E9) and after each lab ($ADEF).","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[25577,44527]},{"a":43464,"l":"b_A9C8","t":"code","b":[185,31,177],"m":"lda","o":"level_colours_done,y","oa":45343,"x":[43474]},{"a":43467,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":43469,"t":"code","b":[208,5],"m":"bne","o":"b_A9D4","oa":43476},{"a":43471,"t":"code","b":[200],"m":"iny"},{"a":43472,"t":"code","b":[192,5],"m":"cpy","o":"#$05"},{"a":43474,"t":"code","b":[208,244],"m":"bne","o":"b_A9C8","oa":43464},{"a":43476,"l":"b_A9D4","t":"code","b":[200],"m":"iny","x":[43469]},{"a":43477,"t":"code","b":[200],"m":"iny"},{"a":43478,"t":"code","b":[140,206,177],"m":"sty","o":"max_level","oa":45518},{"a":43481,"l":"r_A9D9","t":"code","b":[96],"m":"rts","x":[43488]},{"a":43482,"l":"spawn_wave_aliens","c":"Once a frame from the frame loop ($6459): starts the current landscape's aliens as their columns come into view. The list is $B1A6[$B19D[$B128]] (none if that is 0). While the landscape scrolls ($B1FB non-zero) it takes the column being uncovered, the left one $B1F1 when $B1FB is negative, else the right one $B1F1 + 40, and steps the list index $B1AE back or forward to it. An entry at exactly that column whose type byte has bit 7 clear is taken: bit 7 set (it is out, and stays set once killed), the first free slot, the type's record from $3ECF, and $AA66 starts it. With all six slots busy the entry waits for its column to come round again.","t":"code","b":[172,40,177],"m":"ldy","o":"current_level","oa":45352,"x":[25689]},{"a":43485,"t":"code","b":[185,157,177],"m":"lda","o":"level_alien_list,y","oa":45469},{"a":43488,"t":"code","b":[240,247],"m":"beq","o":"r_A9D9","oa":43481},{"a":43490,"t":"code","b":[10],"m":"asl","o":"a"},{"a":43491,"t":"code","b":[168],"m":"tay"},{"a":43492,"t":"code","b":[185,166,177],"m":"lda","o":"alien_list_addresses,y","oa":45478},{"a":43495,"t":"code","b":[133,94],"m":"sta","o":"zp_temp_5e","oa":94},{"a":43497,"t":"code","b":[185,167,177],"m":"lda","o":"alien_list_addresses_hi,y","oa":45479},{"a":43500,"t":"code","b":[133,95],"m":"sta","o":"zp_temp_5f","oa":95},{"a":43502,"t":"code","b":[173,241,177],"m":"lda","o":"view_column","oa":45553},{"a":43505,"t":"code","b":[172,251,177],"m":"ldy","o":"scroll_delta","oa":45563},{"a":43508,"t":"code","b":[48,6],"m":"bmi","o":"b_A9FC","oa":43516},{"a":43510,"t":"code","b":[208,1],"m":"bne","o":"b_A9F9","oa":43513},{"a":43512,"t":"code","b":[96],"m":"rts"},{"a":43513,"l":"b_A9F9","t":"code","b":[24],"m":"clc","x":[43510]},{"a":43514,"t":"code","b":[105,40],"m":"adc","o":"#$28"},{"a":43516,"l":"b_A9FC","t":"code","b":[172,174,177],"m":"ldy","o":"alien_spawn_cursor","oa":45486,"x":[43508]},{"a":43519,"l":"b_A9FF","t":"code","b":[209,94],"m":"cmp","o":"(zp_temp_5e),y","oa":94,"x":[43527]},{"a":43521,"t":"code","b":[240,33],"m":"beq","o":"b_AA24","oa":43556},{"a":43523,"t":"code","b":[176,4],"m":"bcs","o":"b_AA09","oa":43529},{"a":43525,"t":"code","b":[136],"m":"dey"},{"a":43526,"t":"code","b":[136],"m":"dey"},{"a":43527,"t":"code","b":[144,246],"m":"bcc","o":"b_A9FF","oa":43519},{"a":43529,"l":"b_AA09","t":"code","b":[72],"m":"pha","x":[43523]},{"a":43530,"t":"code","b":[165,94],"m":"lda","o":"zp_temp_5e","oa":94},{"a":43532,"t":"code","b":[24],"m":"clc"},{"a":43533,"t":"code","b":[105,2],"m":"adc","o":"#$02"},{"a":43535,"t":"code","b":[133,94],"m":"sta","o":"zp_temp_5e","oa":94},{"a":43537,"t":"code","b":[104],"m":"pla"},{"a":43538,"t":"code","b":[144,2],"m":"bcc","o":"b_AA16","oa":43542},{"a":43540,"t":"code","b":[230,95],"m":"inc","o":"zp_temp_5f","oa":95},{"a":43542,"l":"b_AA16","t":"code","b":[209,94],"m":"cmp","o":"(zp_temp_5e),y","oa":94,"x":[43538,43550]},{"a":43544,"t":"code","b":[240,10],"m":"beq","o":"b_AA24","oa":43556},{"a":43546,"t":"code","b":[144,4],"m":"bcc","o":"b_AA20","oa":43552},{"a":43548,"t":"code","b":[200],"m":"iny"},{"a":43549,"t":"code","b":[200],"m":"iny"},{"a":43550,"t":"code","b":[176,246],"m":"bcs","o":"b_AA16","oa":43542},{"a":43552,"l":"b_AA20","t":"code","b":[140,174,177],"m":"sty","o":"alien_spawn_cursor","oa":45486,"x":[43546]},{"a":43555,"l":"r_AA23","t":"code","b":[96],"m":"rts","x":[43561,43568]},{"a":43556,"l":"b_AA24","t":"code","b":[140,174,177],"m":"sty","o":"alien_spawn_cursor","oa":45486,"x":[43521,43544]},{"a":43559,"t":"code","b":[201,0],"m":"cmp","o":"#$00"},{"a":43561,"t":"code","b":[240,248],"m":"beq","o":"r_AA23","oa":43555},{"a":43563,"t":"code","b":[200],"m":"iny"},{"a":43564,"t":"code","b":[177,94],"m":"lda","o":"(zp_temp_5e),y","oa":94},{"a":43566,"t":"code","b":[41,128],"m":"and","o":"#$80"},{"a":43568,"t":"code","b":[208,241],"m":"bne","o":"r_AA23","oa":43555},{"a":43570,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":43572,"l":"b_AA34","t":"code","b":[189,2,2],"m":"lda","o":"alien_line,x","oa":514,"x":[43584]},{"a":43575,"t":"code","b":[240,10],"m":"beq","o":"b_AA43","oa":43587},{"a":43577,"t":"code","b":[138],"m":"txa"},{"a":43578,"t":"code","b":[24],"m":"clc"},{"a":43579,"t":"code","b":[105,42],"m":"adc","o":"#$2A"},{"a":43581,"t":"code","b":[170],"m":"tax"},{"a":43582,"t":"code","b":[224,252],"m":"cpx","o":"#$FC"},{"a":43584,"t":"code","b":[208,242],"m":"bne","o":"b_AA34","oa":43572},{"a":43586,"t":"code","b":[96],"m":"rts"},{"a":43587,"l":"b_AA43","t":"code","b":[177,94],"m":"lda","o":"(zp_temp_5e),y","oa":94,"x":[43575]},{"a":43589,"t":"code","b":[9,128],"m":"ora","o":"#$80"},{"a":43591,"t":"code","b":[145,94],"m":"sta","o":"(zp_temp_5e),y","oa":94},{"a":43593,"t":"code","b":[72],"m":"pha"},{"a":43594,"t":"code","b":[132,103],"m":"sty","o":"zp_temp_67","oa":103},{"a":43596,"t":"code","b":[165,94],"m":"lda","o":"zp_temp_5e","oa":94},{"a":43598,"t":"code","b":[24],"m":"clc"},{"a":43599,"t":"code","b":[101,103],"m":"adc","o":"zp_temp_67","oa":103},{"a":43601,"t":"code","b":[133,94],"m":"sta","o":"zp_temp_5e","oa":94},{"a":43603,"t":"code","b":[144,2],"m":"bcc","o":"b_AA57","oa":43607},{"a":43605,"t":"code","b":[230,95],"m":"inc","o":"zp_temp_5f","oa":95},{"a":43607,"l":"b_AA57","t":"code","b":[104],"m":"pla","x":[43603]},{"a":43608,"t":"code","b":[41,127],"m":"and","o":"#$7F"},{"a":43610,"t":"code","b":[10],"m":"asl","o":"a"},{"a":43611,"t":"code","b":[168],"m":"tay"},{"a":43612,"t":"code","b":[185,207,62],"m":"lda","o":"tbl_land_alien_templates,y","oa":16079},{"a":43615,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":43617,"t":"code","b":[185,208,62],"m":"lda","o":"tbl_land_alien_templates_hi,y","oa":16080},{"a":43620,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":43622,"l":"start_alien","c":"Starts an alien in slot X from the record at ($62): $9DA1 copies its 23 bytes, zeroes the rest of the slot and fills its random fields. The wave-list entry's address ($5E/$5F; 0 for a police ship) goes into bytes $28/$29. A colour sphere (state byte $15 non-zero) takes the landscape's sphere colour $B18B[$B128], red, green or blue. It enters at the edge being uncovered: x = 2 when $B1FB is negative, otherwise x = $AA with its X speed reversed. Also the end of $A181.","t":"code","b":[138],"m":"txa","x":[41396]},{"a":43623,"t":"code","b":[72],"m":"pha"},{"a":43624,"t":"code","b":[32,161,157],"m":"jsr","o":"create_alien","oa":40353},{"a":43627,"t":"code","b":[104],"m":"pla"},{"a":43628,"t":"code","b":[170],"m":"tax"},{"a":43629,"t":"code","b":[165,94],"m":"lda","o":"zp_temp_5e","oa":94},{"a":43631,"t":"code","b":[157,40,2],"m":"sta","o":"alien_list_lo,x","oa":552},{"a":43634,"t":"code","b":[165,95],"m":"lda","o":"zp_temp_5f","oa":95},{"a":43636,"t":"code","b":[157,41,2],"m":"sta","o":"alien_list_hi,x","oa":553},{"a":43639,"t":"code","b":[189,21,2],"m":"lda","o":"alien_state,x","oa":533},{"a":43642,"t":"code","b":[240,9],"m":"beq","o":"b_AA85","oa":43653},{"a":43644,"t":"code","b":[172,40,177],"m":"ldy","o":"current_level","oa":45352},{"a":43647,"t":"code","b":[185,139,177],"m":"lda","o":"level_droplet_colour,y","oa":45451},{"a":43650,"t":"code","b":[157,16,2],"m":"sta","o":"alien_colour,x","oa":528},{"a":43653,"l":"b_AA85","t":"code","b":[173,251,177],"m":"lda","o":"scroll_delta","oa":45563,"x":[43642]},{"a":43656,"t":"code","b":[16,6],"m":"bpl","o":"b_AA90","oa":43664},{"a":43658,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":43660,"t":"code","b":[157,0,2],"m":"sta","o":"alien_x,x","oa":512},{"a":43663,"t":"code","b":[96],"m":"rts"},{"a":43664,"l":"b_AA90","t":"code","b":[169,170],"m":"lda","o":"#$AA","x":[43656]},{"a":43666,"t":"code","b":[157,0,2],"m":"sta","o":"alien_x,x","oa":512},{"a":43669,"t":"code","b":[189,4,2],"m":"lda","o":"alien_dx,x","oa":516},{"a":43672,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":43674,"t":"code","b":[157,4,2],"m":"sta","o":"alien_dx,x","oa":516},{"a":43677,"t":"code","b":[189,5,2],"m":"lda","o":"alien_dx_frac,x","oa":517},{"a":43680,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":43682,"t":"code","b":[157,5,2],"m":"sta","o":"alien_dx_frac,x","oa":517},{"a":43685,"t":"code","b":[96],"m":"rts"},{"a":43686,"l":"play_lab_sounds","c":"Background sound for the lab and the level-complete scroll: keeps sound effect $18 going, as $7DF4 does in play (started again when the sound driver's byte $0422 reads 0, else every 256 frames counted in $7DF3), and starts sound effect $19 on a random one frame in 16.","t":"code","b":[173,34,4],"m":"lda","o":"sfx_slot2_time1","oa":1058,"x":[43905,44712]},{"a":43689,"t":"code","b":[240,8],"m":"beq","o":"b_AAB3","oa":43699},{"a":43691,"t":"code","b":[238,243,125],"m":"inc","o":"hum_count","oa":32243},{"a":43694,"t":"code","b":[173,243,125],"m":"lda","o":"hum_count","oa":32243},{"a":43697,"t":"code","b":[208,5],"m":"bne","o":"b_AAB8","oa":43704},{"a":43699,"l":"b_AAB3","t":"code","b":[160,24],"m":"ldy","o":"#$18","x":[43689]},{"a":43701,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":43704,"l":"b_AAB8","t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003,"x":[43697]},{"a":43707,"t":"code","b":[41,15],"m":"and","o":"#$0F"},{"a":43709,"t":"code","b":[201,8],"m":"cmp","o":"#$08"},{"a":43711,"t":"code","b":[208,5],"m":"bne","o":"r_AAC6","oa":43718},{"a":43713,"t":"code","b":[160,25],"m":"ldy","o":"#$19"},{"a":43715,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":43718,"l":"r_AAC6","t":"code","b":[96],"m":"rts","x":[43711]},{"a":43719,"l":"clear_for_lab","c":"Prepares a scene without play, for the lab ($AB20) and the finale ($AF20): all sprites off, sprite 0's X, sprite 1's line and the X high bits zeroed, $B8DC and the end-of-play flags $B1CF/$B1D0 cleared, $B8DE/$B8DF = 5, alien bullets cleared ($9CCB), screen blanked ($8C44), the level saved in $7A and $B128 set to 9 (the lab's landscape), Wizball speed $B1F4, scroll column $B1F1 and $B874 zeroed.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[43808,44832]},{"a":43721,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":43724,"t":"code","b":[141,196,231],"m":"sta","o":"vic_shadow_spr0_x","oa":59332},{"a":43727,"t":"code","b":[141,199,231],"m":"sta","o":"vic_shadow_spr1_y","oa":59335},{"a":43730,"t":"code","b":[141,212,231],"m":"sta","o":"vic_shadow_x_msb","oa":59348},{"a":43733,"t":"code","b":[141,220,184],"m":"sta","o":"beam_phase","oa":47324},{"a":43736,"t":"code","b":[141,207,177],"m":"sta","o":"life_over","oa":45519},{"a":43739,"t":"code","b":[141,208,177],"m":"sta","o":"death_timer","oa":45520},{"a":43742,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":43744,"t":"code","b":[141,222,184],"m":"sta","o":"beam_image_upper","oa":47326},{"a":43747,"t":"code","b":[141,223,184],"m":"sta","o":"beam_image_lower","oa":47327},{"a":43750,"t":"code","b":[32,203,156],"m":"jsr","o":"clear_alien_bullets","oa":40139},{"a":43753,"t":"code","b":[32,68,140],"m":"jsr","o":"screen_off","oa":35908},{"a":43756,"t":"code","b":[173,40,177],"m":"lda","o":"current_level","oa":45352},{"a":43759,"t":"code","b":[133,122],"m":"sta","o":"saved_level","oa":122},{"a":43761,"t":"code","b":[169,9],"m":"lda","o":"#$09"},{"a":43763,"t":"code","b":[141,40,177],"m":"sta","o":"current_level","oa":45352},{"a":43766,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":43768,"t":"code","b":[141,244,177],"m":"sta","o":"wizball_speed","oa":45556},{"a":43771,"t":"code","b":[141,241,177],"m":"sta","o":"view_column","oa":45553},{"a":43774,"t":"code","b":[141,116,184],"m":"sta","o":"bonus_stage","oa":47220},{"a":43777,"t":"code","b":[96],"m":"rts"},{"a":43778,"l":"set_lab_display","c":"Display settings for the lab and the finale: fine scroll $B1FC = 7, 40 columns ($AB9B = 8), the lab animation states $AC4D and $B185 zeroed, the shields of the Wizball ($7F06) and the cat ($89B6) switched off, all sprites multicolour ($B1B2 = $FF).","t":"code","b":[169,7],"m":"lda","o":"#$07","x":[43848,44873]},{"a":43780,"t":"code","b":[141,252,177],"m":"sta","o":"scroll_fine_bits","oa":45564},{"a":43783,"t":"code","b":[169,8],"m":"lda","o":"#$08"},{"a":43785,"t":"code","b":[141,155,171],"m":"sta","o":"lab_column_mode","oa":43931},{"a":43788,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":43790,"t":"code","b":[141,77,172],"m":"sta","o":"lab_cat_state","oa":44109},{"a":43793,"t":"code","b":[141,133,177],"m":"sta","o":"lab_phase","oa":45445},{"a":43796,"t":"code","b":[141,6,127],"m":"sta","o":"shield_time","oa":32518},{"a":43799,"t":"code","b":[141,182,137],"m":"sta","o":"cat_shield_time","oa":35254},{"a":43802,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":43804,"t":"code","b":[141,178,177],"m":"sta","o":"landscape_sprite_multicolour","oa":45490},{"a":43807,"t":"code","b":[96],"m":"rts"},{"a":43808,"l":"run_wiz_lab","c":"The Wiz-lab, entered by JMP from $6612 when the bonus stage is over. $AAC7 clears the scene, $75EA builds the lab's landscape (level 9), the slots are emptied ($9CD5), the level restored, $B874 = 6, the lab colours $B27D-$B27F = 6, $0E, $0B applied by $7D1A, $AB02's display settings, sprite multicolours 5 and 1, $AC4E = 1, the weapon choice set up ($AFD5), the SID reset ($47D0), tune $3D if $BB0C is set. Then a loop with no exit of its own, once a frame: $B076 (choose a permanent weapon), $AAA6 (sounds), $747E, $AB9D (the cat), $AC4F (Wiz and the cauldrons) and ten calls of $9E0D (cauldron sprites); $AC4F leaves it through $ADEF.","t":"code","b":[32,199,170],"m":"jsr","o":"clear_for_lab","oa":43719,"x":[26130]},{"a":43811,"t":"code","b":[162,5],"m":"ldx","o":"#$05"},{"a":43813,"t":"code","b":[142,223,117],"m":"stx","o":"draw_jump_blocks","oa":30175},{"a":43816,"t":"code","b":[32,234,117],"m":"jsr","o":"draw_landscape","oa":30186},{"a":43819,"t":"code","b":[32,213,156],"m":"jsr","o":"clear_alien_table","oa":40149},{"a":43822,"t":"code","b":[165,122],"m":"lda","o":"saved_level","oa":122},{"a":43824,"t":"code","b":[141,40,177],"m":"sta","o":"current_level","oa":45352},{"a":43827,"t":"code","b":[169,6],"m":"lda","o":"#$06"},{"a":43829,"t":"code","b":[141,116,184],"m":"sta","o":"bonus_stage","oa":47220},{"a":43832,"t":"code","b":[141,125,178],"m":"sta","o":"landscape_colour_1","oa":45693},{"a":43835,"t":"code","b":[169,14],"m":"lda","o":"#$0E"},{"a":43837,"t":"code","b":[141,126,178],"m":"sta","o":"landscape_colour_2","oa":45694},{"a":43840,"t":"code","b":[169,11],"m":"lda","o":"#$0B"},{"a":43842,"t":"code","b":[141,127,178],"m":"sta","o":"landscape_colour_3","oa":45695},{"a":43845,"t":"code","b":[32,26,125],"m":"jsr","o":"set_landscape_colours","oa":32026},{"a":43848,"t":"code","b":[32,2,171],"m":"jsr","o":"set_lab_display","oa":43778},{"a":43851,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":43853,"t":"code","b":[141,233,231],"m":"sta","o":"vic_shadow_spr_mc0","oa":59369},{"a":43856,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":43858,"t":"code","b":[141,234,231],"m":"sta","o":"vic_shadow_spr_mc1","oa":59370},{"a":43861,"t":"code","b":[141,78,172],"m":"sta","o":"in_lab","oa":44110},{"a":43864,"t":"code","b":[32,213,175],"m":"jsr","o":"setup_lab_weapons","oa":45013},{"a":43867,"t":"code","b":[32,208,71],"m":"jsr","o":"reset_music","oa":18384},{"a":43870,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":43872,"t":"code","b":[141,241,184],"m":"sta","o":"music_voices","oa":47345},{"a":43875,"t":"code","b":[141,242,184],"m":"sta","o":"music_speed","oa":47346},{"a":43878,"t":"code","b":[173,12,187],"m":"lda","o":"bonus_music_toggle","oa":47884},{"a":43881,"t":"code","b":[240,13],"m":"beq","o":"b_AB78","oa":43896},{"a":43883,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":43885,"t":"code","b":[141,241,184],"m":"sta","o":"music_voices","oa":47345},{"a":43888,"t":"code","b":[141,242,184],"m":"sta","o":"music_speed","oa":47346},{"a":43891,"t":"code","b":[160,61],"m":"ldy","o":"#$3D"},{"a":43893,"t":"code","b":[32,241,69],"m":"jsr","o":"start_tune","oa":17905},{"a":43896,"l":"b_AB78","t":"code","b":[32,80,140],"m":"jsr","o":"screen_on","oa":35920,"x":[43881]},{"a":43899,"l":"j_AB7B","t":"code","b":[32,113,110],"m":"jsr","o":"wait_raster_bottom","oa":28273,"x":[43928]},{"a":43902,"t":"code","b":[32,118,176],"m":"jsr","o":"lab_choose_weapon","oa":45174},{"a":43905,"t":"code","b":[32,166,170],"m":"jsr","o":"play_lab_sounds","oa":43686},{"a":43908,"t":"code","b":[32,126,116],"m":"jsr","o":"move_stars","oa":29822},{"a":43911,"t":"code","b":[32,157,171],"m":"jsr","o":"run_lab_cat","oa":43933},{"a":43914,"t":"code","b":[32,79,172],"m":"jsr","o":"run_lab_wiz","oa":44111},{"a":43917,"t":"code","b":[169,10],"m":"lda","o":"#$0A"},{"a":43919,"t":"code","b":[133,98],"m":"sta","o":"zp_ptr_62","oa":98},{"a":43921,"l":"b_AB91","t":"code","b":[32,13,158],"m":"jsr","o":"update_cauldrons","oa":40461,"x":[43926]},{"a":43924,"t":"code","b":[198,98],"m":"dec","o":"zp_ptr_62","oa":98},{"a":43926,"t":"code","b":[208,249],"m":"bne","o":"b_AB91","oa":43921},{"a":43928,"t":"code","b":[76,123,171],"m":"jmp","o":"j_AB7B","oa":43899},{"a":43931,"l":"lab_column_mode","c":"8 while the lab or the finale shows ($AB02), otherwise 0 ($8066, $ADA0, $AF77): ORed into $D016 by the landscape band at $8A34, so bit 3 selects 40 columns instead of the 38 used for scrolling.","t":"byte","b":[0],"x":[32870,35380,43785,44448,44919]},{"a":43932,"l":"landscape_load_mode","c":"The value of A on entry to $75EA, which stores it here: 1 through $75E0 (normal play), 0 from the lab ($AB28), the level-complete sequence ($AE24) and the finale ($AF2F). $76CC tests it: non-zero calls $776D, zero calls $77C6 and $7D1A.","t":"byte","b":[0],"x":[30186,30412]},{"a":43933,"l":"run_lab_cat","c":"The cat's part of the lab, once a frame from $AB20, only if the Wizball came in with the catelite ($B22B, the lab's copy of $B234 saved by $AFD5). First frame: sprite 1 on, the cat at $B261/$B262 = $76/$3C, its hit count $B26C set back to 0, refilling its nine lives ($8992 counts hits, $8657 ends the cat at 9), unless bit 7 is set (the indestructacat's $80). Then it walks by the joystick codes at $AC43, one every 7 frames, through the cat's control code at $8652; when they run out a cat appears on sprite 2 at $5B/$C2, alternating frames $6F and $7E (drinking its milk, as the manual has it) while its colour counts down from 60 to 0.","t":"code","b":[173,43,178],"m":"lda","o":"lab_saved_catelite","oa":45611,"x":[43911]},{"a":43936,"t":"code","b":[208,1],"m":"bne","o":"b_ABA3","oa":43939},{"a":43938,"t":"code","b":[96],"m":"rts"},{"a":43939,"l":"b_ABA3","t":"code","b":[173,77,172],"m":"lda","o":"lab_cat_state","oa":44109,"x":[43936]},{"a":43942,"t":"code","b":[208,53],"m":"bne","o":"b_ABDD","oa":43997},{"a":43944,"t":"code","b":[173,217,231],"m":"lda","o":"vic_shadow_sprite_on","oa":59353},{"a":43947,"t":"code","b":[9,2],"m":"ora","o":"#$02"},{"a":43949,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":43952,"t":"code","b":[169,118],"m":"lda","o":"#$76"},{"a":43954,"t":"code","b":[141,97,178],"m":"sta","o":"cat_x","oa":45665},{"a":43957,"t":"code","b":[169,60],"m":"lda","o":"#$3C"},{"a":43959,"t":"code","b":[141,98,178],"m":"sta","o":"cat_y","oa":45666},{"a":43962,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":43964,"t":"code","b":[141,65,172],"m":"sta","o":"lab_cat_clock","oa":44097},{"a":43967,"t":"code","b":[141,66,172],"m":"sta","o":"lab_cat_step","oa":44098},{"a":43970,"t":"code","b":[141,99,178],"m":"sta","o":"cat_stick_dx","oa":45667},{"a":43973,"t":"code","b":[141,101,178],"m":"sta","o":"cat_follow_dx","oa":45669},{"a":43976,"t":"code","b":[141,100,178],"m":"sta","o":"cat_stick_dy","oa":45668},{"a":43979,"t":"code","b":[141,102,178],"m":"sta","o":"cat_follow_dy","oa":45670},{"a":43982,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":43984,"t":"code","b":[141,77,172],"m":"sta","o":"lab_cat_state","oa":44109},{"a":43987,"t":"code","b":[173,108,178],"m":"lda","o":"cat_hits","oa":45676},{"a":43990,"t":"code","b":[48,5],"m":"bmi","o":"b_ABDD","oa":43997},{"a":43992,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":43994,"t":"code","b":[141,108,178],"m":"sta","o":"cat_hits","oa":45676},{"a":43997,"l":"b_ABDD","t":"code","b":[173,77,172],"m":"lda","o":"lab_cat_state","oa":44109,"x":[43942,43990]},{"a":44000,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":44002,"t":"code","b":[240,62],"m":"beq","o":"b_AC22","oa":44066},{"a":44004,"t":"code","b":[238,65,172],"m":"inc","o":"lab_cat_clock","oa":44097},{"a":44007,"t":"code","b":[173,65,172],"m":"lda","o":"lab_cat_clock","oa":44097},{"a":44010,"t":"code","b":[201,7],"m":"cmp","o":"#$07"},{"a":44012,"t":"code","b":[208,8],"m":"bne","o":"b_ABF6","oa":44022},{"a":44014,"t":"code","b":[238,66,172],"m":"inc","o":"lab_cat_step","oa":44098},{"a":44017,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":44019,"t":"code","b":[141,65,172],"m":"sta","o":"lab_cat_clock","oa":44097},{"a":44022,"l":"b_ABF6","t":"code","b":[172,66,172],"m":"ldy","o":"lab_cat_step","oa":44098,"x":[44012]},{"a":44025,"t":"code","b":[185,67,172],"m":"lda","o":"tbl_lab_cat_moves,y","oa":44099},{"a":44028,"t":"code","b":[240,8],"m":"beq","o":"b_AC06","oa":44038},{"a":44030,"t":"code","b":[9,16],"m":"ora","o":"#$10"},{"a":44032,"t":"code","b":[141,62,178],"m":"sta","o":"cat_input","oa":45630},{"a":44035,"t":"code","b":[76,82,134],"m":"jmp","o":"update_cat_present","oa":34386},{"a":44038,"l":"b_AC06","t":"code","b":[169,2],"m":"lda","o":"#$02","x":[44028]},{"a":44040,"t":"code","b":[141,77,172],"m":"sta","o":"lab_cat_state","oa":44109},{"a":44043,"t":"code","b":[173,217,231],"m":"lda","o":"vic_shadow_sprite_on","oa":59353},{"a":44046,"t":"code","b":[9,4],"m":"ora","o":"#$04"},{"a":44048,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":44051,"t":"code","b":[169,91],"m":"lda","o":"#$5B"},{"a":44053,"t":"code","b":[141,200,231],"m":"sta","o":"vic_shadow_spr2_x","oa":59336},{"a":44056,"t":"code","b":[169,194],"m":"lda","o":"#$C2"},{"a":44058,"t":"code","b":[141,201,231],"m":"sta","o":"vic_shadow_spr2_y","oa":59337},{"a":44061,"t":"code","b":[169,60],"m":"lda","o":"#$3C"},{"a":44063,"t":"code","b":[141,66,172],"m":"sta","o":"lab_cat_step","oa":44098},{"a":44066,"l":"b_AC22","t":"code","b":[238,65,172],"m":"inc","o":"lab_cat_clock","oa":44097,"x":[44002]},{"a":44069,"t":"code","b":[173,65,172],"m":"lda","o":"lab_cat_clock","oa":44097},{"a":44072,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":44073,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":44074,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":44075,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":44076,"t":"code","b":[41,1],"m":"and","o":"#$01"},{"a":44078,"t":"code","b":[168],"m":"tay"},{"a":44079,"t":"code","b":[185,75,172],"m":"lda","o":"tbl_lab_cat_frames,y","oa":44107},{"a":44082,"t":"code","b":[141,39,181],"m":"sta","o":"sprite2_image","oa":46375},{"a":44085,"t":"code","b":[173,66,172],"m":"lda","o":"lab_cat_step","oa":44098},{"a":44088,"t":"code","b":[240,3],"m":"beq","o":"b_AC3D","oa":44093},{"a":44090,"t":"code","b":[206,66,172],"m":"dec","o":"lab_cat_step","oa":44098},{"a":44093,"l":"b_AC3D","t":"code","b":[141,237,231],"m":"sta","o":"vic_shadow_spr2_colour","oa":59373,"x":[44088]},{"a":44096,"t":"code","b":[96],"m":"rts"},{"a":44097,"l":"lab_cat_clock","c":"Frame counter for the lab cat ($AB9D): counted to 7 per walking step, and in the drinking phase bit 4 picks the frame.","t":"byte","b":[0],"x":[16796,43964,44004,44007,44019,44066,44069]},{"a":44098,"l":"lab_cat_step","c":"The lab cat's step through $AC43 while walking; in the drinking phase the sprite's colour, counted down from 60 ($AC1D) to 0.","t":"byte","b":[0],"x":[43967,44014,44022,44063,44085,44090]},{"a":44099,"l":"tbl_lab_cat_moves","c":"Joystick codes, active low (bit 1 down, bit 3 right; $ABFE adds the fire bit, released), that walk the cat in the lab, one per 7 frames: $0D down, $0D down, $05 down and right, then $0D four times; 0 ends the walk.","t":"byte","b":[13,13,5,13,13,13,13,0],"x":[44025]},{"a":44107,"l":"tbl_lab_cat_frames","c":"The drinking cat's two sprite frames, $6F and $7E, swapped every 16 frames by $AC2F.","t":"byte","b":[111,126],"x":[44079]},{"a":44109,"l":"lab_cat_state","c":"The lab cat's phase for $AB9D: 0 not started, 1 walking, 2 drinking.","t":"byte","b":[0],"x":[43790,43939,43984,43997,44040]},{"a":44110,"l":"in_lab","c":"1 while the Wiz-lab runs ($AB55), 0 otherwise ($ADA6). Tested by the score display ($71A4), by $9E50 (the target cauldron's total is not recomputed in the lab) and at $67D2, $6805, $7E4F, $7F65, $813E, $8371, $8680, $8791.","t":"byte","b":[0],"x":[26578,26629,29092,32335,32613,33086,33649,33800,33821,34432,34705,40528,43861,44454]},{"a":44111,"l":"run_lab_wiz","c":"Wiz's part of the lab, once a frame from $AB20; phase in $B185. 0: Wizball at line $B20F = $3D, $B1F2/$B1F3 = $4B/0, counters cleared, $B187 = 5, sprite 0 on. 1: the Wizball is steered by the joystick codes at $B17C, one per 7 frames through $7DF4, to where it parks. 2: Wiz (sprites 3 and 4, orange, frames $68 and $69/$6A) gets out at the Wizball's X, his top half rising to line $AE, and walks left a pixel every other frame to X $9A; there the Wizball's speed $B1F4 is zeroed and the colour's recipe ($B2C0 + 3 x $B51A) copied to $B188-$B18A. 3: Wiz stirs (frames $6B-$6E) while every 20 frames one unit leaves the first cauldron still owed ($B188-$B18A, $B12B-$B12D and the total $B12E), with 10 points every second frame: 100 a unit, 2,000 for a full colour of 20. Once they are empty, 5 x 20 frames later the lab ends at $AD98.","t":"code","b":[173,133,177],"m":"lda","o":"lab_phase","oa":45445,"x":[43914]},{"a":44114,"t":"code","b":[208,56],"m":"bne","o":"b_AC8C","oa":44172},{"a":44116,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":44118,"t":"code","b":[141,243,177],"m":"sta","o":"scroll_fraction","oa":45555},{"a":44121,"t":"code","b":[169,75],"m":"lda","o":"#$4B"},{"a":44123,"t":"code","b":[141,242,177],"m":"sta","o":"scroll_fine","oa":45554},{"a":44126,"t":"code","b":[169,61],"m":"lda","o":"#$3D"},{"a":44128,"t":"code","b":[141,15,178],"m":"sta","o":"wizball_y","oa":45583},{"a":44131,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":44133,"t":"code","b":[141,122,177],"m":"sta","o":"lab_frame_count","oa":45434},{"a":44136,"t":"code","b":[141,123,177],"m":"sta","o":"lab_script_index","oa":45435},{"a":44139,"t":"code","b":[141,17,178],"m":"sta","o":"wizball_vspeed","oa":45585},{"a":44142,"t":"code","b":[141,14,178],"m":"sta","o":"wizball_x_high","oa":45582},{"a":44145,"t":"code","b":[141,28,178],"m":"sta","o":"spin","oa":45596},{"a":44148,"t":"code","b":[141,134,177],"m":"sta","o":"lab_pour_timer","oa":45446},{"a":44151,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":44153,"t":"code","b":[141,135,177],"m":"sta","o":"lab_exit_delay","oa":45447},{"a":44156,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":44158,"t":"code","b":[141,133,177],"m":"sta","o":"lab_phase","oa":45445},{"a":44161,"t":"code","b":[32,244,125],"m":"jsr","o":"update_wizball","oa":32244},{"a":44164,"t":"code","b":[173,217,231],"m":"lda","o":"vic_shadow_sprite_on","oa":59353},{"a":44167,"t":"code","b":[9,1],"m":"ora","o":"#$01"},{"a":44169,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":44172,"l":"b_AC8C","t":"code","b":[173,133,177],"m":"lda","o":"lab_phase","oa":45445,"x":[44114]},{"a":44175,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":44177,"t":"code","b":[240,84],"m":"beq","o":"b_ACE7","oa":44263},{"a":44179,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":44181,"t":"code","b":[208,3],"m":"bne","o":"b_AC9A","oa":44186},{"a":44183,"t":"code","b":[76,59,173],"m":"jmp","o":"j_AD3B","oa":44347},{"a":44186,"l":"b_AC9A","t":"code","b":[238,122,177],"m":"inc","o":"lab_frame_count","oa":45434,"x":[44181]},{"a":44189,"t":"code","b":[173,122,177],"m":"lda","o":"lab_frame_count","oa":45434},{"a":44192,"t":"code","b":[201,7],"m":"cmp","o":"#$07"},{"a":44194,"t":"code","b":[208,8],"m":"bne","o":"b_ACAC","oa":44204},{"a":44196,"t":"code","b":[238,123,177],"m":"inc","o":"lab_script_index","oa":45435},{"a":44199,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":44201,"t":"code","b":[141,122,177],"m":"sta","o":"lab_frame_count","oa":45434},{"a":44204,"l":"b_ACAC","t":"code","b":[172,123,177],"m":"ldy","o":"lab_script_index","oa":45435,"x":[44194]},{"a":44207,"t":"code","b":[185,124,177],"m":"lda","o":"lab_parking_script,y","oa":45436},{"a":44210,"t":"code","b":[240,8],"m":"beq","o":"b_ACBC","oa":44220},{"a":44212,"t":"code","b":[9,16],"m":"ora","o":"#$10"},{"a":44214,"t":"code","b":[141,63,178],"m":"sta","o":"wizball_input","oa":45631},{"a":44217,"t":"code","b":[76,244,125],"m":"jmp","o":"update_wizball","oa":32244},{"a":44220,"l":"b_ACBC","t":"code","b":[169,2],"m":"lda","o":"#$02","x":[44210]},{"a":44222,"t":"code","b":[141,133,177],"m":"sta","o":"lab_phase","oa":45445},{"a":44225,"t":"code","b":[173,217,231],"m":"lda","o":"vic_shadow_sprite_on","oa":59353},{"a":44228,"t":"code","b":[9,24],"m":"ora","o":"#$18"},{"a":44230,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":44233,"t":"code","b":[173,196,231],"m":"lda","o":"vic_shadow_spr0_x","oa":59332},{"a":44236,"t":"code","b":[141,202,231],"m":"sta","o":"vic_shadow_spr3_x","oa":59338},{"a":44239,"t":"code","b":[141,204,231],"m":"sta","o":"vic_shadow_spr4_x","oa":59340},{"a":44242,"t":"code","b":[169,195],"m":"lda","o":"#$C3"},{"a":44244,"t":"code","b":[141,203,231],"m":"sta","o":"vic_shadow_spr3_y","oa":59339},{"a":44247,"t":"code","b":[141,205,231],"m":"sta","o":"vic_shadow_spr4_y","oa":59341},{"a":44250,"t":"code","b":[169,104],"m":"lda","o":"#$68"},{"a":44252,"t":"code","b":[141,40,181],"m":"sta","o":"sprite3_image","oa":46376},{"a":44255,"t":"code","b":[169,8],"m":"lda","o":"#$08"},{"a":44257,"t":"code","b":[141,238,231],"m":"sta","o":"vic_shadow_spr3_colour","oa":59374},{"a":44260,"t":"code","b":[141,239,231],"m":"sta","o":"vic_shadow_spr4_colour","oa":59375},{"a":44263,"l":"b_ACE7","t":"code","b":[238,122,177],"m":"inc","o":"lab_frame_count","oa":45434,"x":[44177]},{"a":44266,"t":"code","b":[173,122,177],"m":"lda","o":"lab_frame_count","oa":45434},{"a":44269,"t":"code","b":[41,1],"m":"and","o":"#$01"},{"a":44271,"t":"code","b":[240,6],"m":"beq","o":"b_ACF7","oa":44279},{"a":44273,"t":"code","b":[206,204,231],"m":"dec","o":"vic_shadow_spr4_x","oa":59340},{"a":44276,"t":"code","b":[206,202,231],"m":"dec","o":"vic_shadow_spr3_x","oa":59338},{"a":44279,"l":"b_ACF7","t":"code","b":[173,203,231],"m":"lda","o":"vic_shadow_spr3_y","oa":59339,"x":[44271]},{"a":44282,"t":"code","b":[201,174],"m":"cmp","o":"#$AE"},{"a":44284,"t":"code","b":[240,3],"m":"beq","o":"b_AD01","oa":44289},{"a":44286,"t":"code","b":[206,203,231],"m":"dec","o":"vic_shadow_spr3_y","oa":59339},{"a":44289,"l":"b_AD01","t":"code","b":[238,123,177],"m":"inc","o":"lab_script_index","oa":45435,"x":[44284]},{"a":44292,"t":"code","b":[173,123,177],"m":"lda","o":"lab_script_index","oa":45435},{"a":44295,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":44296,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":44297,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":44298,"t":"code","b":[41,1],"m":"and","o":"#$01"},{"a":44300,"t":"code","b":[24],"m":"clc"},{"a":44301,"t":"code","b":[105,105],"m":"adc","o":"#$69"},{"a":44303,"t":"code","b":[141,41,181],"m":"sta","o":"sprite4_image","oa":46377},{"a":44306,"t":"code","b":[173,202,231],"m":"lda","o":"vic_shadow_spr3_x","oa":59338},{"a":44309,"t":"code","b":[201,154],"m":"cmp","o":"#$9A"},{"a":44311,"t":"code","b":[240,1],"m":"beq","o":"b_AD1A","oa":44314},{"a":44313,"t":"code","b":[96],"m":"rts"},{"a":44314,"l":"b_AD1A","t":"code","b":[169,3],"m":"lda","o":"#$03","x":[44311]},{"a":44316,"t":"code","b":[141,133,177],"m":"sta","o":"lab_phase","oa":45445},{"a":44319,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":44321,"t":"code","b":[141,244,177],"m":"sta","o":"wizball_speed","oa":45556},{"a":44324,"t":"code","b":[173,26,181],"m":"lda","o":"target_colour","oa":46362},{"a":44327,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":44329,"t":"code","b":[10],"m":"asl","o":"a"},{"a":44330,"t":"code","b":[101,102],"m":"adc","o":"zp_temp_66","oa":102},{"a":44332,"t":"code","b":[170],"m":"tax"},{"a":44333,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":44335,"l":"b_AD2F","t":"code","b":[189,192,178],"m":"lda","o":"tbl_colour_recipes,x","oa":45760,"x":[44345]},{"a":44338,"t":"code","b":[153,136,177],"m":"sta","o":"lab_pour_amounts,y","oa":45448},{"a":44341,"t":"code","b":[232],"m":"inx"},{"a":44342,"t":"code","b":[200],"m":"iny"},{"a":44343,"t":"code","b":[192,3],"m":"cpy","o":"#$03"},{"a":44345,"t":"code","b":[208,244],"m":"bne","o":"b_AD2F","oa":44335},{"a":44347,"l":"j_AD3B","t":"code","b":[173,46,177],"m":"lda","o":"cauldron_mix","oa":45358,"x":[44183]},{"a":44350,"t":"code","b":[240,10],"m":"beq","o":"b_AD4A","oa":44362},{"a":44352,"t":"code","b":[238,123,177],"m":"inc","o":"lab_script_index","oa":45435},{"a":44355,"t":"code","b":[173,123,177],"m":"lda","o":"lab_script_index","oa":45435},{"a":44358,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":44359,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":44360,"t":"code","b":[41,2],"m":"and","o":"#$02"},{"a":44362,"l":"b_AD4A","t":"code","b":[24],"m":"clc","x":[44350]},{"a":44363,"t":"code","b":[105,107],"m":"adc","o":"#$6B"},{"a":44365,"t":"code","b":[141,40,181],"m":"sta","o":"sprite3_image","oa":46376},{"a":44368,"t":"code","b":[24],"m":"clc"},{"a":44369,"t":"code","b":[105,1],"m":"adc","o":"#$01"},{"a":44371,"t":"code","b":[141,41,181],"m":"sta","o":"sprite4_image","oa":46377},{"a":44374,"t":"code","b":[238,134,177],"m":"inc","o":"lab_pour_timer","oa":45446},{"a":44377,"t":"code","b":[173,134,177],"m":"lda","o":"lab_pour_timer","oa":45446},{"a":44380,"t":"code","b":[41,1],"m":"and","o":"#$01"},{"a":44382,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":44384,"t":"code","b":[173,134,177],"m":"lda","o":"lab_pour_timer","oa":45446},{"a":44387,"t":"code","b":[201,20],"m":"cmp","o":"#$14"},{"a":44389,"t":"code","b":[208,38],"m":"bne","o":"b_AD8D","oa":44429},{"a":44391,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":44393,"t":"code","b":[141,134,177],"m":"sta","o":"lab_pour_timer","oa":45446},{"a":44396,"t":"code","b":[173,46,177],"m":"lda","o":"cauldron_mix","oa":45358},{"a":44399,"t":"code","b":[208,5],"m":"bne","o":"b_AD76","oa":44406},{"a":44401,"t":"code","b":[206,135,177],"m":"dec","o":"lab_exit_delay","oa":45447},{"a":44404,"t":"code","b":[240,34],"m":"beq","o":"end_lab","oa":44440},{"a":44406,"l":"b_AD76","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[44399]},{"a":44408,"l":"b_AD78","t":"code","b":[189,136,177],"m":"lda","o":"lab_pour_amounts,x","oa":45448,"x":[44416]},{"a":44411,"t":"code","b":[208,7],"m":"bne","o":"b_AD84","oa":44420},{"a":44413,"t":"code","b":[232],"m":"inx"},{"a":44414,"t":"code","b":[224,3],"m":"cpx","o":"#$03"},{"a":44416,"t":"code","b":[208,246],"m":"bne","o":"b_AD78","oa":44408},{"a":44418,"t":"code","b":[240,9],"m":"beq","o":"b_AD8D","oa":44429},{"a":44420,"l":"b_AD84","t":"code","b":[222,136,177],"m":"dec","o":"lab_pour_amounts,x","oa":45448,"x":[44411]},{"a":44423,"t":"code","b":[222,43,177],"m":"dec","o":"cauldron_red,x","oa":45355},{"a":44426,"t":"code","b":[206,46,177],"m":"dec","o":"cauldron_mix","oa":45358},{"a":44429,"l":"b_AD8D","t":"code","b":[173,46,177],"m":"lda","o":"cauldron_mix","oa":45358,"x":[44389,44418]},{"a":44432,"t":"code","b":[240,5],"m":"beq","o":"r_AD97","oa":44439},{"a":44434,"t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102},{"a":44436,"t":"code","b":[76,11,113],"m":"jmp","o":"add_score","oa":28939},{"a":44439,"l":"r_AD97","t":"code","b":[96],"m":"rts","x":[44432]},{"a":44440,"l":"end_lab","c":"End of the lab: screen blanked, sprites off, 38 columns again, $B874 and $AC4E cleared, the weapons and icons restored ($B04F), sprite multicolours $0B/$0D. If no permanent weapon was chosen ($B10C = 0) it pays 1,000 points for each level from $B128 to 8, (9 - $B128) x 1,000. Then the play state is reset (end flags, $B21A, $B21C, $B211, $B212, the Wizball's joystick copy $B23F idle), the slots emptied ($9CD5), and the level's colour count $B11F + $B128 goes up by one.","t":"code","b":[32,68,140],"m":"jsr","o":"screen_off","oa":35908,"x":[44404]},{"a":44443,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":44445,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":44448,"t":"code","b":[141,155,171],"m":"sta","o":"lab_column_mode","oa":43931},{"a":44451,"t":"code","b":[141,116,184],"m":"sta","o":"bonus_stage","oa":47220},{"a":44454,"t":"code","b":[141,78,172],"m":"sta","o":"in_lab","oa":44110},{"a":44457,"t":"code","b":[32,79,176],"m":"jsr","o":"lab_restore_weapons","oa":45135},{"a":44460,"t":"code","b":[169,11],"m":"lda","o":"#$0B"},{"a":44462,"t":"code","b":[141,233,231],"m":"sta","o":"vic_shadow_spr_mc0","oa":59369},{"a":44465,"t":"code","b":[169,13],"m":"lda","o":"#$0D"},{"a":44467,"t":"code","b":[141,234,231],"m":"sta","o":"vic_shadow_spr_mc1","oa":59370},{"a":44470,"t":"code","b":[173,12,177],"m":"lda","o":"lab_weapon_chosen","oa":45324},{"a":44473,"t":"code","b":[208,18],"m":"bne","o":"b_ADCD","oa":44493},{"a":44475,"t":"code","b":[173,40,177],"m":"lda","o":"current_level","oa":45352},{"a":44478,"t":"code","b":[133,99],"m":"sta","o":"zp_ptr_63","oa":99},{"a":44480,"l":"b_ADC0","t":"code","b":[169,100],"m":"lda","o":"#$64","x":[44491]},{"a":44482,"t":"code","b":[32,11,113],"m":"jsr","o":"add_score","oa":28939},{"a":44485,"t":"code","b":[230,99],"m":"inc","o":"zp_ptr_63","oa":99},{"a":44487,"t":"code","b":[165,99],"m":"lda","o":"zp_ptr_63","oa":99},{"a":44489,"t":"code","b":[201,9],"m":"cmp","o":"#$09"},{"a":44491,"t":"code","b":[208,243],"m":"bne","o":"b_ADC0","oa":44480},{"a":44493,"l":"b_ADCD","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[44473]},{"a":44495,"t":"code","b":[141,207,177],"m":"sta","o":"life_over","oa":45519},{"a":44498,"t":"code","b":[141,208,177],"m":"sta","o":"death_timer","oa":45520},{"a":44501,"t":"code","b":[141,26,178],"m":"sta","o":"spin_frame","oa":45594},{"a":44504,"t":"code","b":[141,28,178],"m":"sta","o":"spin","oa":45596},{"a":44507,"t":"code","b":[141,17,178],"m":"sta","o":"wizball_vspeed","oa":45585},{"a":44510,"t":"code","b":[141,18,178],"m":"sta","o":"wizball_vspeed_fraction","oa":45586},{"a":44513,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":44515,"t":"code","b":[141,63,178],"m":"sta","o":"wizball_input","oa":45631},{"a":44518,"t":"code","b":[32,213,156],"m":"jsr","o":"clear_alien_table","oa":40149},{"a":44521,"t":"code","b":[174,40,177],"m":"ldx","o":"current_level","oa":45352},{"a":44524,"t":"code","b":[254,31,177],"m":"inc","o":"level_colours_done,x","oa":45343},{"a":44527,"l":"finish_colour","c":"After the lab, and after the finale ($AF15): recomputes the landscapes with aliens ($A9C6), resets the SID ($47D0), $B8F1 = 1. If the level still lacks a colour, play resumes: $8239 restarts the landscape, PLA PLA drops the lab loop's return address and JMP $640E re-enters the frame loop. With three colours the level is complete ($AE11).","t":"code","b":[32,198,169],"m":"jsr","o":"find_alien_landscapes","oa":43462,"x":[44821]},{"a":44530,"t":"code","b":[32,208,71],"m":"jsr","o":"reset_music","oa":18384},{"a":44533,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":44535,"t":"code","b":[141,241,184],"m":"sta","o":"music_voices","oa":47345},{"a":44538,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":44540,"t":"code","b":[141,242,184],"m":"sta","o":"music_speed","oa":47346},{"a":44543,"t":"code","b":[174,40,177],"m":"ldx","o":"current_level","oa":45352},{"a":44546,"t":"code","b":[189,31,177],"m":"lda","o":"level_colours_done,x","oa":45343},{"a":44549,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":44551,"t":"code","b":[240,8],"m":"beq","o":"complete_level","oa":44561},{"a":44553,"t":"code","b":[32,57,130],"m":"jsr","o":"arrive_from_tube","oa":33337},{"a":44556,"t":"code","b":[104],"m":"pla"},{"a":44557,"t":"code","b":[104],"m":"pla"},{"a":44558,"t":"code","b":[76,14,100],"m":"jmp","o":"frame_loop","oa":25614},{"a":44561,"l":"complete_level","c":"Level complete. The landscape is rebuilt ($75EA with $75DF = $38) and the bottom band's second sprite pointer $B51E (copied by $8B78, normally $B9, the red cauldron) is set to $38 until $AEEE; \"  wot a wizace!  \" and \"level N completed\" (N = $B128 + 1, put in $B85E) are drawn into six sprites by $8DE4, placed from $B4E4-$B503, sound effect 7, and the sprites' colours cycle ($B12F). The landscape then scrolls by itself at speed 6, 2 pixels a frame, from column 0 until $B1F1 = $BC, paying 10 points a frame (about 750 frames, near the manual's 7,500 for a level). The Wizball moves to landscape $B1CE, lists are rebuilt ($B158), $B129 counts the level. If all eight levels have three colours ($AEF3) the counts are cleared, $B12A counts a completed round, level 0, new lists ($9F5F), the finale ($AF20) and $ADEF; otherwise ($AF18) play resumes at $640E.","t":"code","b":[169,56],"m":"lda","o":"#$38","x":[44551]},{"a":44563,"t":"code","b":[141,30,181],"m":"sta","o":"red_cauldron_image","oa":46366},{"a":44566,"t":"code","b":[141,223,117],"m":"sta","o":"draw_jump_blocks","oa":30175},{"a":44569,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":44571,"t":"code","b":[141,241,184],"m":"sta","o":"music_voices","oa":47345},{"a":44574,"t":"code","b":[141,244,177],"m":"sta","o":"wizball_speed","oa":45556},{"a":44577,"t":"code","b":[141,241,177],"m":"sta","o":"view_column","oa":45553},{"a":44580,"t":"code","b":[32,234,117],"m":"jsr","o":"draw_landscape","oa":30186},{"a":44583,"t":"code","b":[32,109,119],"m":"jsr","o":"setup_level_graphics","oa":30573},{"a":44586,"t":"code","b":[160,180],"m":"ldy","o":"#$B4"},{"a":44588,"t":"code","b":[162,6],"m":"ldx","o":"#$06"},{"a":44590,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":44592,"t":"code","b":[32,21,143],"m":"jsr","o":"fill_sprite_blocks","oa":36629},{"a":44595,"t":"code","b":[173,40,177],"m":"lda","o":"current_level","oa":45352},{"a":44598,"t":"code","b":[24],"m":"clc"},{"a":44599,"t":"code","b":[105,49],"m":"adc","o":"#$31"},{"a":44601,"t":"code","b":[141,94,184],"m":"sta","o":"level_completed_digit","oa":47198},{"a":44604,"t":"code","b":[174,108,184],"m":"ldx","o":"ptr_text_wot_a_wizace","oa":47212},{"a":44607,"t":"code","b":[172,109,184],"m":"ldy","o":"ptr_text_wot_a_wizace_hi","oa":47213},{"a":44610,"t":"code","b":[169,180],"m":"lda","o":"#$B4"},{"a":44612,"t":"code","b":[32,228,141],"m":"jsr","o":"print_sprite_text","oa":36324},{"a":44615,"t":"code","b":[169,33],"m":"lda","o":"#$21"},{"a":44617,"t":"code","b":[141,219,142],"m":"sta","o":"print_start_offset","oa":36571},{"a":44620,"t":"code","b":[174,106,184],"m":"ldx","o":"ptr_text_level_completed","oa":47210},{"a":44623,"t":"code","b":[172,107,184],"m":"ldy","o":"ptr_text_level_completed_hi","oa":47211},{"a":44626,"t":"code","b":[169,180],"m":"lda","o":"#$B4"},{"a":44628,"t":"code","b":[32,228,141],"m":"jsr","o":"print_sprite_text","oa":36324},{"a":44631,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":44633,"t":"code","b":[141,219,142],"m":"sta","o":"print_start_offset","oa":36571},{"a":44636,"t":"code","b":[141,212,231],"m":"sta","o":"vic_shadow_x_msb","oa":59348},{"a":44639,"t":"code","b":[162,8],"m":"ldx","o":"#$08"},{"a":44641,"l":"b_AE61","t":"code","b":[189,228,180],"m":"lda","o":"message_sprite_x_base,x","oa":46308,"x":[44666]},{"a":44644,"t":"code","b":[157,195,231],"m":"sta","o":"vic_shadow_minus_1,x","oa":59331},{"a":44647,"t":"code","b":[189,236,180],"m":"lda","o":"message_sprite_y_base,x","oa":46316},{"a":44650,"t":"code","b":[157,203,231],"m":"sta","o":"vic_shadow_spr3_y,x","oa":59339},{"a":44653,"t":"code","b":[189,244,180],"m":"lda","o":"message_sprite_colours_base,x","oa":46324},{"a":44656,"t":"code","b":[157,234,231],"m":"sta","o":"vic_shadow_spr_mc1,x","oa":59370},{"a":44659,"t":"code","b":[189,252,180],"m":"lda","o":"message_sprite_images_base,x","oa":46332},{"a":44662,"t":"code","b":[157,36,181],"m":"sta","o":"landscape_sprite_images_base,x","oa":46372},{"a":44665,"t":"code","b":[202],"m":"dex"},{"a":44666,"t":"code","b":[208,229],"m":"bne","o":"b_AE61","oa":44641},{"a":44668,"t":"code","b":[169,252],"m":"lda","o":"#$FC"},{"a":44670,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":44673,"t":"code","b":[142,178,177],"m":"stx","o":"landscape_sprite_multicolour","oa":45490},{"a":44676,"t":"code","b":[32,80,140],"m":"jsr","o":"screen_on","oa":35920},{"a":44679,"t":"code","b":[160,7],"m":"ldy","o":"#$07"},{"a":44681,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":44684,"t":"code","b":[162,50],"m":"ldx","o":"#$32"},{"a":44686,"l":"b_AE8E","t":"code","b":[32,146,110],"m":"jsr","o":"wait_line_266_and_move_stars","oa":28306,"x":[44693]},{"a":44689,"t":"code","b":[32,47,177],"m":"jsr","o":"cycle_message_colours","oa":45359},{"a":44692,"t":"code","b":[202],"m":"dex"},{"a":44693,"t":"code","b":[208,247],"m":"bne","o":"b_AE8E","oa":44686},{"a":44695,"t":"code","b":[169,6],"m":"lda","o":"#$06"},{"a":44697,"t":"code","b":[141,244,177],"m":"sta","o":"wizball_speed","oa":45556},{"a":44700,"l":"b_AE9C","t":"code","b":[32,113,110],"m":"jsr","o":"wait_raster_bottom","oa":28273,"x":[44728]},{"a":44703,"t":"code","b":[32,47,177],"m":"jsr","o":"cycle_message_colours","oa":45359},{"a":44706,"t":"code","b":[32,152,122],"m":"jsr","o":"scroll_landscape","oa":31384},{"a":44709,"t":"code","b":[32,247,119],"m":"jsr","o":"build_scroll_buffer","oa":30711},{"a":44712,"t":"code","b":[32,166,170],"m":"jsr","o":"play_lab_sounds","oa":43686},{"a":44715,"t":"code","b":[32,126,116],"m":"jsr","o":"move_stars","oa":29822},{"a":44718,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":44720,"t":"code","b":[32,11,113],"m":"jsr","o":"add_score","oa":28939},{"a":44723,"t":"code","b":[173,241,177],"m":"lda","o":"view_column","oa":45553},{"a":44726,"t":"code","b":[201,188],"m":"cmp","o":"#$BC"},{"a":44728,"t":"code","b":[208,226],"m":"bne","o":"b_AE9C","oa":44700},{"a":44730,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":44732,"t":"code","b":[141,244,177],"m":"sta","o":"wizball_speed","oa":45556},{"a":44735,"t":"code","b":[162,50],"m":"ldx","o":"#$32"},{"a":44737,"l":"b_AEC1","t":"code","b":[32,146,110],"m":"jsr","o":"wait_line_266_and_move_stars","oa":28306,"x":[44744]},{"a":44740,"t":"code","b":[32,47,177],"m":"jsr","o":"cycle_message_colours","oa":45359},{"a":44743,"t":"code","b":[202],"m":"dex"},{"a":44744,"t":"code","b":[208,247],"m":"bne","o":"b_AEC1","oa":44737},{"a":44746,"t":"code","b":[173,206,177],"m":"lda","o":"max_level","oa":45518},{"a":44749,"t":"code","b":[141,40,177],"m":"sta","o":"current_level","oa":45352},{"a":44752,"t":"code","b":[32,68,140],"m":"jsr","o":"screen_off","oa":35908},{"a":44755,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":44757,"t":"code","b":[141,217,231],"m":"sta","o":"vic_shadow_sprite_on","oa":59353},{"a":44760,"t":"code","b":[141,219,231],"m":"sta","o":"vic_shadow_y_expand","oa":59355},{"a":44763,"t":"code","b":[32,88,177],"m":"jsr","o":"assign_level_aliens","oa":45400},{"a":44766,"t":"code","b":[238,41,177],"m":"inc","o":"levels_finished","oa":45353},{"a":44769,"t":"code","b":[169,21],"m":"lda","o":"#$15"},{"a":44771,"t":"code","b":[133,101],"m":"sta","o":"zp_ptr_65","oa":101},{"a":44773,"l":"b_AEE5","t":"code","b":[32,13,158],"m":"jsr","o":"update_cauldrons","oa":40461,"x":[44778]},{"a":44776,"t":"code","b":[198,101],"m":"dec","o":"zp_ptr_65","oa":101},{"a":44778,"t":"code","b":[208,249],"m":"bne","o":"b_AEE5","oa":44773},{"a":44780,"t":"code","b":[169,185],"m":"lda","o":"#$B9"},{"a":44782,"t":"code","b":[141,30,181],"m":"sta","o":"red_cauldron_image","oa":46366},{"a":44785,"t":"code","b":[160,8],"m":"ldy","o":"#$08"},{"a":44787,"l":"b_AEF3","t":"code","b":[185,30,177],"m":"lda","o":"level_progress_base,y","oa":45342,"x":[44795]},{"a":44790,"t":"code","b":[201,3],"m":"cmp","o":"#$03"},{"a":44792,"t":"code","b":[208,30],"m":"bne","o":"b_AF18","oa":44824},{"a":44794,"t":"code","b":[136],"m":"dey"},{"a":44795,"t":"code","b":[208,246],"m":"bne","o":"b_AEF3","oa":44787},{"a":44797,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":44799,"t":"code","b":[160,8],"m":"ldy","o":"#$08"},{"a":44801,"l":"b_AF01","t":"code","b":[153,30,177],"m":"sta","o":"level_progress_base,y","oa":45342,"x":[44805]},{"a":44804,"t":"code","b":[136],"m":"dey"},{"a":44805,"t":"code","b":[208,250],"m":"bne","o":"b_AF01","oa":44801},{"a":44807,"t":"code","b":[238,42,177],"m":"inc","o":"rounds_finished","oa":45354},{"a":44810,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":44812,"t":"code","b":[141,40,177],"m":"sta","o":"current_level","oa":45352},{"a":44815,"t":"code","b":[32,95,159],"m":"jsr","o":"init_landscape_aliens","oa":40799},{"a":44818,"t":"code","b":[32,32,175],"m":"jsr","o":"play_finale","oa":44832},{"a":44821,"t":"code","b":[76,239,173],"m":"jmp","o":"finish_colour","oa":44527},{"a":44824,"l":"b_AF18","t":"code","b":[32,57,130],"m":"jsr","o":"arrive_from_tube","oa":33337,"x":[44792]},{"a":44827,"t":"code","b":[104],"m":"pla"},{"a":44828,"t":"code","b":[104],"m":"pla"},{"a":44829,"t":"code","b":[76,14,100],"m":"jmp","o":"frame_loop","oa":25614},{"a":44832,"l":"play_finale","c":"After all eight levels, from $AF12: $AAC7 clears the scene, $75EA builds the screen for landscape $0A (its graphics word in $B31C, $0E42, is also landscape 1's), colours $B27D-$B27F = 6, $0E, 9 applied by $7D1A, the lab's display settings ($AB02), screen on. Then 255 rounds of two frames, a random multicolour 1 ($D022) each frame and a random sound effect 0-15 each round, about ten seconds, and 38 columns again. The game then carries on from the first level (0) with every colour to do again and aliens firing every 10 frames ($B12A).","t":"code","b":[32,199,170],"m":"jsr","o":"clear_for_lab","oa":43719,"x":[44818]},{"a":44835,"t":"code","b":[169,10],"m":"lda","o":"#$0A"},{"a":44837,"t":"code","b":[141,40,177],"m":"sta","o":"current_level","oa":45352},{"a":44840,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":44842,"t":"code","b":[141,223,117],"m":"sta","o":"draw_jump_blocks","oa":30175},{"a":44845,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":44847,"t":"code","b":[32,234,117],"m":"jsr","o":"draw_landscape","oa":30186},{"a":44850,"t":"code","b":[165,122],"m":"lda","o":"saved_level","oa":122},{"a":44852,"t":"code","b":[141,40,177],"m":"sta","o":"current_level","oa":45352},{"a":44855,"t":"code","b":[169,6],"m":"lda","o":"#$06"},{"a":44857,"t":"code","b":[141,125,178],"m":"sta","o":"landscape_colour_1","oa":45693},{"a":44860,"t":"code","b":[169,14],"m":"lda","o":"#$0E"},{"a":44862,"t":"code","b":[141,126,178],"m":"sta","o":"landscape_colour_2","oa":45694},{"a":44865,"t":"code","b":[169,9],"m":"lda","o":"#$09"},{"a":44867,"t":"code","b":[141,127,178],"m":"sta","o":"landscape_colour_3","oa":45695},{"a":44870,"t":"code","b":[32,26,125],"m":"jsr","o":"set_landscape_colours","oa":32026},{"a":44873,"t":"code","b":[32,2,171],"m":"jsr","o":"set_lab_display","oa":43778},{"a":44876,"t":"code","b":[32,80,140],"m":"jsr","o":"screen_on","oa":35920},{"a":44879,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":44881,"t":"code","b":[141,123,175],"m":"sta","o":"finale_rounds","oa":44923},{"a":44884,"l":"b_AF54","t":"code","b":[169,2],"m":"lda","o":"#$02","x":[44915]},{"a":44886,"t":"code","b":[141,124,175],"m":"sta","o":"finale_frames","oa":44924},{"a":44889,"l":"b_AF59","t":"code","b":[32,146,110],"m":"jsr","o":"wait_line_266_and_move_stars","oa":28306,"x":[44901]},{"a":44892,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":44895,"t":"code","b":[141,34,208],"m":"sta","o":"vic_background1"},{"a":44898,"t":"code","b":[206,124,175],"m":"dec","o":"finale_frames","oa":44924},{"a":44901,"t":"code","b":[208,242],"m":"bne","o":"b_AF59","oa":44889},{"a":44903,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":44906,"t":"code","b":[41,15],"m":"and","o":"#$0F"},{"a":44908,"t":"code","b":[168],"m":"tay"},{"a":44909,"t":"code","b":[32,83,69],"m":"jsr","o":"start_sound_effect","oa":17747},{"a":44912,"t":"code","b":[206,123,175],"m":"dec","o":"finale_rounds","oa":44923},{"a":44915,"t":"code","b":[208,223],"m":"bne","o":"b_AF54","oa":44884},{"a":44917,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":44919,"t":"code","b":[141,155,171],"m":"sta","o":"lab_column_mode","oa":43931},{"a":44922,"t":"code","b":[96],"m":"rts"},{"a":44923,"l":"finale_rounds","c":"Rounds left in the finale's flashing: $AF51 sets 255 and $AF70 counts down.","t":"byte","b":[0],"x":[44881,44912]},{"a":44924,"l":"finale_frames","c":"Frames left in the current round of the finale (2), each with a new random $D022.","t":"byte","b":[0],"x":[44886,44898]},{"a":44925,"l":"continue_level_max","c":"The highest level the next game may start on: at game over $6B60-$6B89 store the players' higher $B1CE minus 2, the first level not yet finished. $AF85 accepts start keys up to it (the continue game feature).","t":"byte","b":[0],"x":[27491,27515,27520,27523,27529,44955]},{"a":44926,"l":"start_level","c":"The level the next game starts on, 0-5: $AF85 sets it from the key pressed on a title screen, and $6830 starts the game there, marking the levels below it done (three colours, with permanent weapons from $B10D). Game over ($6B68) and $6ED9 set it back to 0.","t":"byte","b":[0],"x":[26703,27496,28377,44962]},{"a":44927,"l":"tbl_start_level_keys","c":"Codes of the keys 0-5 in the game's keyboard numbering ($73D4: 1 + 8 x (7 - row) + (7 - column), the row being the $DC00 bit driven low and the column the $DC01 bit read): $1D is 0, $08 is 1, $05 is 2, $38 is 3, $35 is 4, $30 is 5. Key n on a title screen starts the next game on level n, counted from 0, if n is not above $AF7D.","t":"byte","b":[29,8,5,56,53,48],"x":[44943]},{"a":44933,"l":"check_title_keys","c":"Raster band routine, the first entry of the title display lists $B416 and $B452, so once a frame on the title and menu screens. Border black, then it looks at the key just pressed ($B254). Keys 0-5 ($AF7F) set the starting level $AF7E if it is not above $AF7D, and the border takes the level's colour for that frame. Each key also feeds the cheat: seven keys in a row matching $AFCE, B O R E W I Z, set $BB07 = 7, which makes the Wizball ignore hits outside the bonus stage ($7EF4), and flash the border brown; a wrong key starts the word again. The LDY #$84 at $AF88 is not used.","t":"code","b":[173,84,178],"m":"lda","o":"key_new","oa":45652},{"a":44936,"t":"code","b":[160,132],"m":"ldy","o":"#$84"},{"a":44938,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":44940,"t":"code","b":[142,32,208],"m":"stx","o":"vic_border"},{"a":44943,"l":"b_AF8F","t":"code","b":[221,127,175],"m":"cmp","o":"tbl_start_level_keys,x","oa":44927,"x":[44951]},{"a":44946,"t":"code","b":[240,7],"m":"beq","o":"b_AF9B","oa":44955},{"a":44948,"t":"code","b":[232],"m":"inx"},{"a":44949,"t":"code","b":[224,6],"m":"cpx","o":"#$06"},{"a":44951,"t":"code","b":[208,246],"m":"bne","o":"b_AF8F","oa":44943},{"a":44953,"t":"code","b":[240,13],"m":"beq","o":"b_AFA8","oa":44968},{"a":44955,"l":"b_AF9B","t":"code","b":[236,125,175],"m":"cpx","o":"continue_level_max","oa":44925,"x":[44946]},{"a":44958,"t":"code","b":[240,2],"m":"beq","o":"b_AFA2","oa":44962},{"a":44960,"t":"code","b":[16,6],"m":"bpl","o":"b_AFA8","oa":44968},{"a":44962,"l":"b_AFA2","t":"code","b":[142,126,175],"m":"stx","o":"start_level","oa":44926,"x":[44958]},{"a":44965,"t":"code","b":[142,32,208],"m":"stx","o":"vic_border"},{"a":44968,"l":"b_AFA8","t":"code","b":[173,84,178],"m":"lda","o":"key_new","oa":45652,"x":[44953,44960]},{"a":44971,"t":"code","b":[240,31],"m":"beq","o":"r_AFCC","oa":45004},{"a":44973,"t":"code","b":[174,205,175],"m":"ldx","o":"cheat_progress","oa":45005},{"a":44976,"t":"code","b":[221,206,175],"m":"cmp","o":"tbl_cheat_keys,x","oa":45006},{"a":44979,"t":"code","b":[208,18],"m":"bne","o":"b_AFC7","oa":44999},{"a":44981,"t":"code","b":[238,205,175],"m":"inc","o":"cheat_progress","oa":45005},{"a":44984,"t":"code","b":[173,205,175],"m":"lda","o":"cheat_progress","oa":45005},{"a":44987,"t":"code","b":[201,7],"m":"cmp","o":"#$07"},{"a":44989,"t":"code","b":[208,13],"m":"bne","o":"r_AFCC","oa":45004},{"a":44991,"t":"code","b":[141,7,187],"m":"sta","o":"borewiz","oa":47879},{"a":44994,"t":"code","b":[169,9],"m":"lda","o":"#$09"},{"a":44996,"t":"code","b":[141,32,208],"m":"sta","o":"vic_border"},{"a":44999,"l":"b_AFC7","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[44979]},{"a":45001,"t":"code","b":[141,205,175],"m":"sta","o":"cheat_progress","oa":45005},{"a":45004,"l":"r_AFCC","t":"code","b":[96],"m":"rts","x":[44971,44989]},{"a":45005,"l":"cheat_progress","c":"Letters of BOREWIZ typed in a row so far (0-6); $AF85 counts it on each matching key and resets it on a wrong one or after the seventh.","t":"byte","b":[0],"x":[44973,44981,44984,45001]},{"a":45006,"l":"tbl_cheat_keys","c":"The cheat word in the game's key codes ($73D4 numbering): $24 B, $1A O, $2F R, $32 E, $37 W, $1F I, $34 Z. Typed on a title screen it sets $BB07 (see $AF85); game over clears it ($6B6B).","t":"byte","b":[36,26,47,50,55,31,52],"x":[44976]},{"a":45013,"l":"setup_lab_weapons","c":"Lab set-up, from $AB58, running on to the RTS at $B02E. Saves the nine weapon flags $B231-$B239 (thrust $B231, anti-grav $B232, catelite $B234) in $B228-$B230 and clears them, clears the weapon-chosen flag $B10C, sets $B074 = 6 (the icon code's lab mode), saves the six icon sprite pointers $EFF8-$EFFD in $B21E-$B223 and shows the lab's choices from $B4DE-$B4E3 instead, and saves the lit icon $B258 in $B227. From $B002 it runs the icon routine $72DF for each permanent weapon already taken ($B116-$B11E), lights choice 1 and prints \"select permenant\" and \"weapon\". $B04F puts it all back when the lab ends.","t":"code","b":[160,9],"m":"ldy","o":"#$09","x":[43864]},{"a":45015,"l":"b_AFD7","t":"code","b":[185,48,178],"m":"lda","o":"weapon_flags_base,y","oa":45616,"x":[45027]},{"a":45018,"t":"code","b":[153,39,178],"m":"sta","o":"lab_saved_cursor,y","oa":45607},{"a":45021,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":45023,"t":"code","b":[153,48,178],"m":"sta","o":"weapon_flags_base,y","oa":45616},{"a":45026,"t":"code","b":[136],"m":"dey"},{"a":45027,"t":"code","b":[208,242],"m":"bne","o":"b_AFD7","oa":45015},{"a":45029,"t":"code","b":[141,12,177],"m":"sta","o":"lab_weapon_chosen","oa":45324},{"a":45032,"t":"code","b":[160,6],"m":"ldy","o":"#$06"},{"a":45034,"t":"code","b":[140,116,176],"m":"sty","o":"lab_icon_mode","oa":45172},{"a":45037,"l":"b_AFED","t":"code","b":[185,247,239],"m":"lda","o":"icon_ptrs_minus_1,y","oa":61431,"x":[45050]},{"a":45040,"t":"code","b":[153,29,178],"m":"sta","o":"spin_last,y","oa":45597},{"a":45043,"t":"code","b":[185,221,180],"m":"lda","o":"icon_pointers_base,y","oa":46301},{"a":45046,"t":"code","b":[153,247,239],"m":"sta","o":"icon_ptrs_minus_1,y","oa":61431},{"a":45049,"t":"code","b":[136],"m":"dey"},{"a":45050,"t":"code","b":[208,241],"m":"bne","o":"b_AFED","oa":45037},{"a":45052,"t":"code","b":[173,88,178],"m":"lda","o":"icon_cursor","oa":45656},{"a":45055,"t":"code","b":[141,39,178],"m":"sta","o":"lab_saved_cursor","oa":45607},{"a":45058,"t":"code","b":[160,9],"m":"ldy","o":"#$09"},{"a":45060,"l":"b_B004","t":"code","b":[185,21,177],"m":"lda","o":"player_block_base,y","oa":45333,"x":[45074]},{"a":45063,"t":"code","b":[141,88,178],"m":"sta","o":"icon_cursor","oa":45656},{"a":45066,"t":"code","b":[152],"m":"tya"},{"a":45067,"t":"code","b":[72],"m":"pha"},{"a":45068,"t":"code","b":[32,223,114],"m":"jsr","o":"take_lit_icon","oa":29407},{"a":45071,"t":"code","b":[104],"m":"pla"},{"a":45072,"t":"code","b":[168],"m":"tay"},{"a":45073,"t":"code","b":[136],"m":"dey"},{"a":45074,"t":"code","b":[208,240],"m":"bne","o":"b_B004","oa":45060},{"a":45076,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":45078,"t":"code","b":[141,88,178],"m":"sta","o":"icon_cursor","oa":45656},{"a":45081,"t":"code","b":[160,16],"m":"ldy","o":"#$10"},{"a":45083,"l":"b_B01B","t":"code","b":[185,46,176],"m":"lda","o":"lab_heading_line1_base,y","oa":45102,"x":[45100]},{"a":45086,"t":"code","b":[41,63],"m":"and","o":"#$3F"},{"a":45088,"t":"code","b":[153,11,224],"m":"sta","o":"score_row0_col11,y","oa":57355},{"a":45091,"t":"code","b":[185,62,176],"m":"lda","o":"lab_heading_line2_base,y","oa":45118},{"a":45094,"t":"code","b":[41,63],"m":"and","o":"#$3F"},{"a":45096,"t":"code","b":[153,51,224],"m":"sta","o":"score_row1_col11,y","oa":57395},{"a":45099,"t":"code","b":[136],"m":"dey"},{"a":45100,"t":"code","b":[208,237],"m":"bne","o":"b_B01B","oa":45083},{"a":45102,"l":"lab_heading_line1_base","c":"RTS that ends the Wiz-lab set-up routine at $AFD5. Its address is also the base of LDA $B02E,Y at $B01B: with Y = 16 down to 1 that reads line 1 of the lab heading, $B02F-$B03E.","t":"code","b":[96],"m":"rts","x":[45083]},{"a":45103,"l":"text_select_permanent","c":"Wiz-lab heading, line 1: 16 PETSCII characters \"SELECT PERMENANT\" (sic), with no column/row header and no terminator. $AFD5 copies them (AND #$3F makes screen codes) to row 0 of the landscape screen, $E00C-$E01B, when the lab opens.","t":"byte","b":[83,69,76,69,67,84,32,80]},{"a":45111,"t":"byte","b":[69,82,77,69,78,65,78]},{"a":45118,"l":"lab_heading_line2_base","c":"Last letter (T) of \"SELECT PERMENANT\" and the base of LDA $B03E,Y at $B023: with Y = 16 down to 1 that reads line 2, $B03F-$B04E, \"     WEAPON     \" (16 characters), copied to row 1 at $E034-$E043.","t":"byte","b":[84,32,32,32,32,32,87,69],"x":[45091]},{"a":45126,"t":"byte","b":[65,80,79,78,32,32,32,32]},{"a":45134,"t":"byte","b":[32]},{"a":45135,"l":"lab_restore_weapons","c":"Leaves the Wiz-lab (called from $ADA9): undoes $AFD5. Copies the nine weapon flags saved at $B228-$B230 back to $B231-$B239, puts back the six icon sprite pointers saved at $B21E-$B223 into $EFF8-$EFFD, restores the icon cursor $B258 from $B227, clears the lab flag $B074 and redraws the score rows at the top of the landscape screen through $70EC.","t":"code","b":[160,9],"m":"ldy","o":"#$09","x":[44457]},{"a":45137,"l":"b_B051","t":"code","b":[185,39,178],"m":"lda","o":"lab_saved_cursor,y","oa":45607,"x":[45144]},{"a":45140,"t":"code","b":[153,48,178],"m":"sta","o":"weapon_flags_base,y","oa":45616},{"a":45143,"t":"code","b":[136],"m":"dey"},{"a":45144,"t":"code","b":[208,247],"m":"bne","o":"b_B051","oa":45137},{"a":45146,"t":"code","b":[160,6],"m":"ldy","o":"#$06"},{"a":45148,"l":"b_B05C","t":"code","b":[185,29,178],"m":"lda","o":"spin_last,y","oa":45597,"x":[45155]},{"a":45151,"t":"code","b":[153,247,239],"m":"sta","o":"icon_ptrs_minus_1,y","oa":61431},{"a":45154,"t":"code","b":[136],"m":"dey"},{"a":45155,"t":"code","b":[208,247],"m":"bne","o":"b_B05C","oa":45148},{"a":45157,"t":"code","b":[173,39,178],"m":"lda","o":"lab_saved_cursor","oa":45607},{"a":45160,"t":"code","b":[141,88,178],"m":"sta","o":"icon_cursor","oa":45656},{"a":45163,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":45165,"t":"code","b":[141,116,176],"m":"sta","o":"lab_icon_mode","oa":45172},{"a":45168,"t":"code","b":[32,236,112],"m":"jsr","o":"draw_score_line","oa":28908},{"a":45171,"l":"r_B073","t":"code","b":[96],"m":"rts","x":[45177]},{"a":45172,"l":"lab_icon_mode","c":"Icon-bar mode: 6 while the Wiz-lab weapon choice is on screen (set at $AFEA, cleared at $B06D), $23 while $6E4F re-applies the permanent weapons at the start of a life (cleared at $6E6D), 0 in play. Non-zero makes $72F5 skip the icon's selection sound, $7269 paint the icon bar light red ($0A) and pulse the lit icon with the red sequence at $B543 instead of the blue one, and $89D4 set sprite multicolour 0 ($D025) to red (2) instead of blue (6).","t":"byte","b":[0],"x":[28246,28269,29291,29332,29429,35284,45034,45165]},{"a":45173,"l":"lab_chosen_icon","c":"The icon number (1-5) taken in the Wiz-lab, stored at $B0D8. No reader was found in the traced code or in the untraced icon handlers; the game uses the permanent list at $B116 instead.","t":"byte","b":[0],"x":[45272]},{"a":45174,"l":"lab_choose_weapon","c":"Wiz-lab weapon choice, one step per frame from the lab loop at $AB7E, doing nothing once $B10C is set. Reads the joystick through $9420 (only a changed value counts): right moves the cursor $B258 up to icon 5, left down to icon 1. Fire takes the icon under the cursor unless its sprite pointer ($EFF7 + icon) is 9, the blank image of a used-up icon: the icon goes into the first empty slot of the permanent list $B116-$B11E and into $B075, is applied at once through $72DF, $B10C is set, the cursor cleared and the heading replaced by \"ALL SYSTEMS GO!!\" ($B0FC) on row 0 with row 1 blanked. When all nine slots are full it empties the first two slots holding 5 (spray) and tries again; with fewer than two such slots it loops for ever at $B0D2. Live with a poked list of nine non-spray weapons: choosing spray left the CPU at $B0D2. Not reachable in play: thrust, anti-grav, beam, double, catelite and blazers turn their icons to 9 once taken, so at most six slots hold anything but spray.","t":"code","b":[173,12,177],"m":"lda","o":"lab_weapon_chosen","oa":45324,"x":[43902]},{"a":45177,"t":"code","b":[208,248],"m":"bne","o":"r_B073","oa":45171},{"a":45179,"t":"code","b":[32,32,148],"m":"jsr","o":"read_joystick_edge_lab","oa":37920},{"a":45182,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":45184,"t":"code","b":[41,8],"m":"and","o":"#$08"},{"a":45186,"t":"code","b":[208,10],"m":"bne","o":"b_B08E","oa":45198},{"a":45188,"t":"code","b":[173,88,178],"m":"lda","o":"icon_cursor","oa":45656},{"a":45191,"t":"code","b":[201,5],"m":"cmp","o":"#$05"},{"a":45193,"t":"code","b":[240,3],"m":"beq","o":"b_B08E","oa":45198},{"a":45195,"t":"code","b":[238,88,178],"m":"inc","o":"icon_cursor","oa":45656},{"a":45198,"l":"b_B08E","t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102,"x":[45186,45193]},{"a":45200,"t":"code","b":[41,4],"m":"and","o":"#$04"},{"a":45202,"t":"code","b":[208,10],"m":"bne","o":"b_B09E","oa":45214},{"a":45204,"t":"code","b":[173,88,178],"m":"lda","o":"icon_cursor","oa":45656},{"a":45207,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":45209,"t":"code","b":[240,3],"m":"beq","o":"b_B09E","oa":45214},{"a":45211,"t":"code","b":[206,88,178],"m":"dec","o":"icon_cursor","oa":45656},{"a":45214,"l":"b_B09E","t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102,"x":[45202,45209]},{"a":45216,"t":"code","b":[41,16],"m":"and","o":"#$10"},{"a":45218,"t":"code","b":[208,87],"m":"bne","o":"r_B0FB","oa":45307},{"a":45220,"t":"code","b":[172,88,178],"m":"ldy","o":"icon_cursor","oa":45656},{"a":45223,"t":"code","b":[185,247,239],"m":"lda","o":"icon_ptrs_minus_1,y","oa":61431},{"a":45226,"t":"code","b":[201,9],"m":"cmp","o":"#$09"},{"a":45228,"t":"code","b":[240,77],"m":"beq","o":"r_B0FB","oa":45307},{"a":45230,"l":"b_B0AE","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[45259]},{"a":45232,"l":"b_B0B0","t":"code","b":[185,22,177],"m":"lda","o":"permanent_weapons,y","oa":45334,"x":[45240]},{"a":45235,"t":"code","b":[240,32],"m":"beq","o":"b_B0D5","oa":45269},{"a":45237,"t":"code","b":[200],"m":"iny"},{"a":45238,"t":"code","b":[192,9],"m":"cpy","o":"#$09"},{"a":45240,"t":"code","b":[208,246],"m":"bne","o":"b_B0B0","oa":45232},{"a":45242,"t":"code","b":[162,2],"m":"ldx","o":"#$02"},{"a":45244,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":45246,"l":"b_B0BE","t":"code","b":[185,22,177],"m":"lda","o":"permanent_weapons,y","oa":45334,"x":[45264]},{"a":45249,"t":"code","b":[201,5],"m":"cmp","o":"#$05"},{"a":45251,"t":"code","b":[208,8],"m":"bne","o":"b_B0CD","oa":45261},{"a":45253,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":45255,"t":"code","b":[153,22,177],"m":"sta","o":"permanent_weapons,y","oa":45334},{"a":45258,"t":"code","b":[202],"m":"dex"},{"a":45259,"t":"code","b":[240,225],"m":"beq","o":"b_B0AE","oa":45230},{"a":45261,"l":"b_B0CD","t":"code","b":[200],"m":"iny","x":[45251]},{"a":45262,"t":"code","b":[192,9],"m":"cpy","o":"#$09"},{"a":45264,"t":"code","b":[208,236],"m":"bne","o":"b_B0BE","oa":45246},{"a":45266,"l":"j_B0D2","s":"JMP to itself: the game hangs here when the permanent list is full and holds fewer than two 5s","t":"code","b":[76,210,176],"m":"jmp","o":"j_B0D2","oa":45266,"x":[45266]},{"a":45269,"l":"b_B0D5","t":"code","b":[173,88,178],"m":"lda","o":"icon_cursor","oa":45656,"x":[45235]},{"a":45272,"t":"code","b":[141,117,176],"m":"sta","o":"lab_chosen_icon","oa":45173},{"a":45275,"t":"code","b":[153,22,177],"m":"sta","o":"permanent_weapons,y","oa":45334},{"a":45278,"t":"code","b":[32,223,114],"m":"jsr","o":"take_lit_icon","oa":29407},{"a":45281,"t":"code","b":[238,12,177],"m":"inc","o":"lab_weapon_chosen","oa":45324},{"a":45284,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":45286,"t":"code","b":[141,88,178],"m":"sta","o":"icon_cursor","oa":45656},{"a":45289,"t":"code","b":[160,16],"m":"ldy","o":"#$10"},{"a":45291,"l":"b_B0EB","t":"code","b":[185,251,176],"m":"lda","o":"r_B0FB,y","oa":45307,"x":[45305]},{"a":45294,"t":"code","b":[41,63],"m":"and","o":"#$3F"},{"a":45296,"t":"code","b":[153,11,224],"m":"sta","o":"score_row0_col11,y","oa":57355},{"a":45299,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":45301,"t":"code","b":[153,51,224],"m":"sta","o":"score_row1_col11,y","oa":57395},{"a":45304,"t":"code","b":[136],"m":"dey"},{"a":45305,"t":"code","b":[208,240],"m":"bne","o":"b_B0EB","oa":45291},{"a":45307,"l":"r_B0FB","t":"code","b":[96],"m":"rts","x":[45218,45228,45291]},{"a":45308,"l":"text_all_systems_go","c":"Wiz-lab confirmation: 16 PETSCII characters \"ALL SYSTEMS GO!!\" with no header and no terminator (the 0 after it is the variable $B10C). $B0EB copies it (AND #$3F) over the heading on row 0, $E00C-$E01B, once a weapon is chosen; the base of that read, LDA $B0FB,Y, is the RTS just before it.","t":"byte","b":[65,76,76,32,83,89,83,84]},{"a":45316,"t":"byte","b":[69,77,83,32,71,79,33,33]},{"a":45324,"l":"lab_weapon_chosen","c":"Wiz-lab done flag: cleared by $AFD5 when the lab opens, incremented at $B0E1 when a weapon is taken. $B076 does nothing while it is set, and $ADB6 awards points on leaving the lab only when it is still 0. Its address is also the base of LDA $B10C,X at $685D, which reads the table that follows.","t":"byte","b":[0],"x":[26717,44470,45029,45174,45281]},{"a":45325,"l":"tbl_continue_weapons","c":"Permanent weapons granted when a game is continued from a later level: $6858 copies the first N entries into the permanent list $B116 for a start at level N (0-based, at most 5): 1 (thrust), 1 (anti-grav), 2 (beam), 3 (catelite), 5 (spray); the rest of the table, $B112-$B114, is zero.","t":"byte","b":[1,1,2,3,5,0,0,0]},{"a":45333,"l":"player_block_base","c":"Base address of the 24-byte per-player block $B116-$B12D, which is always indexed from 1: LDA/STA $B115,Y with Y = 24 down to 1 at $6E0A-$6E31 (save to $E3C0 or $E3D8 and restore when the players alternate), and with Y up to 9 at $683D, $6860, $6E5B and $B004 for the permanent list. The byte itself (0) is the last entry of the continue table $B10D and is never read on its own.","t":"byte","b":[0],"x":[26685,26720,28170,28182,28197,28209,28251,45060]},{"a":45334,"l":"permanent_weapons","c":"Permanent weapon list, first of nine slots $B116-$B11E: icon numbers taken in the Wiz-lab (1 thrust, then anti-grav; 2 beam, then double; 3 catelite; 4 blazers; 5 spray, then swap the spray between Wiz and cat), 0 = empty. $B0B0-$B0DB fills the first empty slot. $6E4F, at the start of every life, and $B002, on entering the lab, replay the list through the icon handler $72DF so these weapons are there from birth. Cleared at $683D for a new game, preset from $B10D for a continued one. First byte of the per-player block $B116-$B12D.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[26728,45232,45246,45255,45275]},{"a":45342,"l":"level_progress_base","c":"Ninth slot of the permanent weapon list $B116, and the base of LDA/STA $B11E,X/Y at $683A, $685A, $AEF3 and $AF01 (index 1-9), which reach the per-level colour counts at $B11F-$B127.","t":"byte","b":[0],"x":[26682,26714,44787,44801]},{"a":45343,"l":"level_colours_done","c":"Colours completed on each level, one byte per level 0-8 at $B11F-$B127: 0-3, where 3 means the level is fully coloured. Incremented at $ADEC when a Wiz-lab ends, set to 3 for the levels before the start level by $685A (continue), cleared at $683A and when a whole round is finished ($AF01). $77A0 repaints the level with that many target colours from $B1D1, $A9C8 derives the highest reachable level $B1CE from it, $AE02 detects a finished level and $AEF3 a finished round. Part of the per-player block.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[30624,43464,44524,44546]},{"a":45351,"t":"byte","b":[0]},{"a":45352,"l":"current_level","c":"Current level, 0-7 on the landscapes (0 is level one). 9 during the space bonus stage ($AAF3, with the real level saved in $7A and put back at $AB30) and $0A during the round-complete sequence ($AF25). The tubes change it at $81C9: the up tube adds one unless the level is already $B1CE, anything else subtracts one. Set from the continue level $AF7E at $6852, to $B1CE after a finished level ($AECD) and to 0 after a finished round ($AF0C). It indexes most per-level tables: $B11F, $B18B, $B194, $B19D, $B1D1, $B2F0, $B31C, $7701, $A1B9. Part of the per-player block.","t":"byte","b":[0],"x":[26706,30086,30256,30481,30563,30617,30662,33229,33232,33240,33243,35047,40659,40763,40772,40831,41316,41386,42887,42926,43482,43644,43756,43763,43824,44475,44521,44543,44595,44749,44812,44837,44852]},{"a":45353,"l":"levels_finished","c":"Number of levels this player has finished, incremented at $AEDE after each level-complete sequence. While it is 0, $9F7A also gives the current level the fixed alien list built by $A0EC (eight aliens of template 1, twelve columns apart from $32 to $86) instead of leaving it to the random lists. Cleared at $6832; part of the per-player block.","t":"byte","b":[0],"x":[26674,40826,44766]},{"a":45354,"l":"rounds_finished","c":"Number of times this player has coloured all eight levels (incremented at $AF07, cleared at $6835). Non-zero makes $A087 write $0A into byte $0F of every alien template it prepares instead of the per-level value from $A12A (doubled for templates whose byte $0E is 3). Its address is also the base of the cauldron clamp at $9E0F, whose index 3-1 reaches $B12D-$B12B only. Part of the per-player block.","t":"byte","b":[0],"x":[26677,40463,40472,41095,44807]},{"a":45355,"l":"cauldron_red","c":"Red cauldron, 0-20 units; with green $B12C and blue $B12D the three cauldrons at the bottom of the screen. A red, green or blue droplet caught by the cat adds one unit to the cauldron that $B194 names for the level ($88ED); $9E0F clamps each to 20; $9E3A mixes them against the target recipe into $B12E; $9E81 draws them into the cauldron sprites, one row per frame; the Wiz-lab pours them out a unit at a time ($AD87). Part of the per-player block.","t":"byte","b":[0],"x":[26691,35053,40509,40514,40612,44423]},{"a":45356,"l":"cauldron_green","c":"Green cauldron, 0-20 units, the second of $B12B-$B12D: fed on the second, fifth and eighth levels ($B194 = 1). Drawn as sprite 2 of the bottom band.","t":"byte","b":[0],"x":[26694]},{"a":45357,"l":"cauldron_blue","c":"Blue cauldron, 0-20 units, the third of $B12B-$B12D: fed on the third and sixth levels ($B194 = 2). Drawn as sprite 4 of the bottom band. Last byte of the per-player block $B116-$B12D.","t":"byte","b":[0],"x":[26697]},{"a":45358,"l":"cauldron_mix","c":"Fourth cauldron, the target mix: the units of the target colour made so far, 0-20. $9E3A-$9E57 recomputes it every frame (not in the lab, $AC4E) as the sum, over red, green and blue, of the smaller of the recipe ($B2C0 + 3 x the target colour $B51A) and the cauldron ($B12B-$B12D). $9E81 draws it as the fourth cauldron; at 20 that sprite's top row is drawn full and $9E26 reads the change as colour complete ($B874). The Wiz-lab counts it down at $AD8A while the cat pours. Not part of the saved per-player block.","t":"byte","b":[0],"x":[26700,40535,44347,44396,44426,44429]},{"a":45359,"l":"cycle_message_colours","c":"Colour-cycles the eight message sprites of the level-complete screen, called every frame from $AE91, $AE9F and $AEC4: every fourth call ($6737 counts them) steps $6738 through the 12-colour rainbow at $B61C and writes the colour to all eight sprite colour shadows $E7EB-$E7F2.","t":"code","b":[238,55,103],"m":"inc","o":"bonus_message_frame","oa":26423,"x":[44689,44703,44740]},{"a":45362,"t":"code","b":[173,55,103],"m":"lda","o":"bonus_message_frame","oa":26423},{"a":45365,"t":"code","b":[41,3],"m":"and","o":"#$03"},{"a":45367,"t":"code","b":[208,15],"m":"bne","o":"b_B148","oa":45384},{"a":45369,"t":"code","b":[238,56,103],"m":"inc","o":"bonus_message_colour","oa":26424},{"a":45372,"t":"code","b":[173,56,103],"m":"lda","o":"bonus_message_colour","oa":26424},{"a":45375,"t":"code","b":[201,12],"m":"cmp","o":"#$0C"},{"a":45377,"t":"code","b":[208,5],"m":"bne","o":"b_B148","oa":45384},{"a":45379,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":45381,"t":"code","b":[141,56,103],"m":"sta","o":"bonus_message_colour","oa":26424},{"a":45384,"l":"b_B148","t":"code","b":[173,56,103],"m":"lda","o":"bonus_message_colour","oa":26424,"x":[45367,45377]},{"a":45387,"t":"code","b":[168],"m":"tay"},{"a":45388,"t":"code","b":[185,28,182],"m":"lda","o":"tbl_rainbow,y","oa":46620},{"a":45391,"t":"code","b":[160,8],"m":"ldy","o":"#$08"},{"a":45393,"l":"b_B151","t":"code","b":[153,234,231],"m":"sta","o":"vic_shadow_spr_mc1,y","oa":59370,"x":[45397]},{"a":45396,"t":"code","b":[136],"m":"dey"},{"a":45397,"t":"code","b":[208,250],"m":"bne","o":"b_B151","oa":45393},{"a":45399,"t":"code","b":[96],"m":"rts"},{"a":45400,"l":"assign_level_aliens","c":"After a finished level (called from $AEDB): gives alien lists to the three highest reachable levels and takes them from the rest. For levels $B1CE down to $B1CE - 2 it builds a list with $9F9B where the level has none ($B19D = 0); every lower level then gets $B19D = 0 (the loop at $B16C).","t":"code","b":[174,206,177],"m":"ldx","o":"max_level","oa":45518,"x":[44763]},{"a":45403,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":45405,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":45407,"l":"b_B15F","t":"code","b":[189,157,177],"m":"lda","o":"level_alien_list,x","oa":45469,"x":[45418]},{"a":45410,"t":"code","b":[208,3],"m":"bne","o":"b_B167","oa":45415},{"a":45412,"t":"code","b":[32,155,159],"m":"jsr","o":"make_alien_list","oa":40859},{"a":45415,"l":"b_B167","t":"code","b":[202],"m":"dex","x":[45410]},{"a":45416,"t":"code","b":[198,102],"m":"dec","o":"zp_temp_66","oa":102},{"a":45418,"t":"code","b":[208,243],"m":"bne","o":"b_B15F","oa":45407},{"a":45420,"l":"j_B16C","t":"code","b":[224,255],"m":"cpx","o":"#$FF","x":[45430]},{"a":45422,"t":"code","b":[240,9],"m":"beq","o":"r_B179","oa":45433},{"a":45424,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":45426,"t":"code","b":[157,157,177],"m":"sta","o":"level_alien_list,x","oa":45469},{"a":45429,"t":"code","b":[202],"m":"dex"},{"a":45430,"t":"code","b":[76,108,177],"m":"jmp","o":"j_B16C","oa":45420},{"a":45433,"l":"r_B179","t":"code","b":[96],"m":"rts","x":[45422]},{"a":45434,"l":"lab_frame_count","c":"Wiz-lab animation timer (cleared at $AC65): while the Wizball is parked ($B185 = 1) it counts frames to 7 and then advances the script index $B17B; while the cat walks ($B185 = 2) its low bit moves the cat's two sprites ($E7CA, $E7CC) one pixel every second frame.","t":"byte","b":[0],"x":[44133,44186,44189,44201,44263,44266]},{"a":45435,"l":"lab_script_index","c":"Wiz-lab animation index (cleared at $AC68): in the parking phase the index into the scripted joystick moves at $B17C, one step per seven frames; in the walk and pour phases a free-running counter whose bit 3 picks the cat's animation frame: $B529 = $69 or $6A while walking ($AD07), $B528/$B529 = $6B/$6C or $6D/$6E while pouring ($AD46).","t":"byte","b":[0],"x":[44136,44196,44204,44289,44292,44352,44355]},{"a":45436,"l":"lab_parking_script","c":"Scripted joystick values that park the Wizball in the Wiz-lab: $0D (down), $0B (left), then $0D six times, ended by 0 at $B184. $ACAF feeds one every seven frames into the Wizball's control input $B23F, with fire released (ORA #$10); the 0 ends the parking phase.","t":"byte","b":[13,11,13,13,13,13,13,13],"x":[44207]},{"a":45444,"t":"byte","b":[0]},{"a":45445,"l":"lab_phase","c":"Wiz-lab animation phase ($AC4F): 0 = set up (Wizball placed at the top, sprites on), 1 = the Wizball is steered down by the script at $B17C, 2 = the cat walks left to the pot ($E7CA down to $9A), 3 = the cat pours the cauldrons ($AD3B). Cleared when the lab opens ($AB11).","t":"byte","b":[0],"x":[43793,44111,44158,44172,44222,44316]},{"a":45446,"l":"lab_pour_timer","c":"Wiz-lab pouring timer: counts frames to 20; each time it wraps one unit leaves a cauldron, or, once they are empty, $B187 counts down. Its low bit is the 0 or 10 points added each frame while the mix $B12E is not empty ($AD5C, $AD92 -> $710B).","t":"byte","b":[0],"x":[44148,44374,44377,44384,44393]},{"a":45447,"l":"lab_exit_delay","c":"Wiz-lab end delay: set to 5 at $AC79; once the mix $B12E is empty it drops by one every 20 frames ($AD71) and the lab ends when it reaches 0 ($AD98).","t":"byte","b":[0],"x":[44153,44401]},{"a":45448,"l":"lab_pour_amounts","c":"Units still to pour in the Wiz-lab, one byte each for red, green and blue ($B188-$B18A), loaded at $AD2F from the target colour's recipe at $B2C0 + 3 x $B51A. Every 20 frames $AD78 takes one unit from the first non-zero entry, together with the matching cauldron and $B12E.","t":"byte","b":[0,0,0],"x":[44338,44408,44420]},{"a":45451,"l":"level_droplet_colour","c":"Droplet colour per level, nine bytes $B18B-$B193 for levels 0-8: 2 (red), 5 (green), 6 (blue), repeating. When $A9DA spawns an alien whose byte $15 (copied from its template) is set, a colour sphere, $AA7F stores this colour in its byte $10; that is the value the cat's catch at $88D8 later tests to route a droplet into a cauldron.","t":"byte","b":[2,5,6,2,5,6,2,5],"x":[43647]},{"a":45459,"t":"byte","b":[6]},{"a":45460,"l":"level_cauldron","c":"Cauldron fed on each level, nine bytes $B194-$B19C: 0 (red), 1 (green), 2 (blue), repeating, matching the droplet colours at $B18B. $88EA uses it as the index into $B12B when the cat catches a red, green or blue droplet.","t":"byte","b":[0,1,2,0,1,2,0,1],"x":[35050]},{"a":45468,"l":"alien_list_slots_base","c":"Last entry of the cauldron table $B194 (level 8 -> 2, blue), and the base of STA $B19C,Y at $9F66, which with Y = 9 down to 1 clears the alien-list slots $B19D-$B1A5.","t":"byte","b":[2],"x":[40806]},{"a":45469,"l":"level_alien_list","c":"Alien list of each level, nine bytes $B19D-$B1A5: 0 = the level has no aliens, 1-3 = which of the three lists addressed at $B1A6 ($EC00, $EC80, $EF80). $9F9B picks the list from $9F8A and fills it with a random wave; $9F5F and $B158 give lists to the three highest reachable levels and clear the others; $A9DA spawns from the current level's list and $9ED3 counts what is left of it.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[40662,40879,41199,43485,45407,45426]},{"a":45477,"t":"byte","b":[0]},{"a":45478,"l":"alien_list_addresses","c":"Addresses of the three alien lists, read as LDA $B1A6,Y (low) and $B1A7,Y (high) with Y = 2 x the list number at $9EDD, $9FB4, $A0F4 and $A9E4: words 1-3 are $EC00, $EC80 and $EF80 (in the memory of the screen at $EC00, whose characters are not shown in play; $A056 stops a list at 118 bytes, short of the sprite pointers at $EFF8); word 0, here, is never used. A list is 2-byte records, map column then alien template (bit 7 set once spawned), sorted by column, starting with a dummy 0,0 record and ended by $FF $FF.","t":"byte","b":[0],"x":[40669,40884,41204,43492]},{"a":45479,"l":"alien_list_addresses_hi","c":"High-byte column of the alien-list address table $B1A6 (LDA $B1A7,Y); this span holds the rest of words 0-3, $B1A7-$B1AD: 00, then $EC00, $EC80, $EF80 as low/high pairs.","t":"byte","b":[0,0,236,128,236,128,239],"x":[40674,40889,41209,43497]},{"a":45486,"l":"alien_spawn_cursor","c":"Spawn cursor: offset of a record in the current level's alien list. Each frame $A9DA moves it forward or back to the map column entering the view ($B1F1 + 40 when the view moves right, $B1F1 when it moves left) and spawns the alien of a matching record into a free slot at $0200. Reset to 0 at $6481, $8278, $9CDE, $9F56, $9F63 and $A1CB.","t":"byte","b":[0],"x":[25729,33400,40158,40790,40803,41419,43516,43552,43556]},{"a":45487,"l":"aliens_left","c":"Aliens of the current level's list not yet spawned (records whose template byte has bit 7 clear), counted by $9ECF and shown as two digits in the score rows (at $E028 + $71DD for the side playing). When it reaches 0 on one of the three active levels with no aliens on screen, $9F42 builds a new list, plays sound $14 and adds 1,000 points.","t":"byte","b":[0],"x":[40696,40719,40747,42914]},{"a":45488,"l":"alien_page_constant","c":"Constant 2, never written: $9DC6 loads it as the high byte ($61) of the pointer through which $9DA1 writes an alien's randomised fields into its slot in page $02 ($0200 + slot offset in $60).","t":"byte","b":[2],"x":[40390]},{"a":45489,"l":"landscape_sprite_expand","c":"Constant 0, never written: $8AA3 ORs it into the landscape band's sprite Y expansion ($D017, with $E7DB) and $8AA9 stores it as the X expansion ($D01D).","t":"byte","b":[0],"x":[35491,35497]},{"a":45490,"l":"landscape_sprite_multicolour","c":"Sprite multicolour mask for the landscape band, stored in $D01C by $8AAF. $A2FD sets each visible alien's bit and $A311/$A337 clear it again for single-colour and dying aliens; $FF at $82BA and $AB1C, 3 at $8077, 0 at $6A69 and $AE81.","t":"byte","b":[3],"x":[27241,32887,33466,35503,41725,41730,41745,41750,41783,41788,43804,44673]},{"a":45491,"l":"alien_turn_slot","c":"Offset of the alien slot whose turn it is this frame ($00, $2A ... $D2): $A212 adds 42 each frame and wraps at $FC, and $A68D runs the landscape collision test only for the alien in that slot, so each of the six slots is tested once every six frames.","t":"byte","b":[0],"x":[41490,41502,42637]},{"a":45492,"l":"star_table","c":"Five parallax stars, five bytes each ($B1B4-$B1CC, X = 0, 5 ... 20): +0 byte offset of the star in its strip of eighteen background characters (a multiple of 8, 0-$88), +1 x position 0-127 (bits 6-5 pick the pixel pair), +2 layer 0/8/16/24 (the row of the speed table $B8A1), +3 frame counter, +4 twinkle 0/4/8/12 (the row of the pixel masks $B891). $747E erases and redraws each star every frame in five strips of eighteen characters of the set at $F800 (from $F80A, $F89A, $F92A, $F9BA and $FA4A), moving it by the scroll speed $B1F4. This byte: star 0's offset.","t":"byte","b":[0],"x":[29856,29893,29905,29953,29984,29996]},{"a":45493,"l":"star_x","c":"Column +1 of the star table $B1B4, the x position (0-127) within the current character; when it wraps, $74C5/$7520 move the star to the next character (offset -8 or +8). LDA/STA $B1B5,X at $74B3-$7519.","t":"byte","b":[0],"x":[29875,29886,29934,29966,29977]},{"a":45494,"l":"star_layer","c":"Column +2 of the star table $B1B4, the parallax layer (0, 8, 16 or 24): ORed with the speed $B1F4 it indexes the speed table $B8A1 at $74AC and $7509, so the stars drift at four different rates.","t":"byte","b":[0],"x":[29868,29961]},{"a":45495,"l":"star_timer","c":"Column +3 of the star table $B1B4, a frame counter: every fourth frame $74E2 gives the star a new random twinkle phase.","t":"byte","b":[1],"x":[29912,29915]},{"a":45496,"l":"star_twinkle","c":"Column +4 of the star table $B1B4, the twinkle phase (0, 4, 8 or 12, random): the row of pixel masks at $B891, one of which is blank. This span also holds the records of stars 1-4, $B1B9-$B1CC.","t":"byte","b":[0,8,0,24,0,0,120,0],"x":[29927,29946]},{"a":45504,"t":"byte","b":[16,2,0,16,0,8,0,0]},{"a":45512,"t":"byte","b":[72,0,24,3,0]},{"a":45517,"l":"raster_list_index","c":"Display-list index: offset of the next entry in the current list ($68/$69) for the raster interrupt at $7C82. $7CB4 sets it to 2 when a list is installed and $7CA6 when a list wraps round; $7C9A advances it by 4 per band.","t":"byte","b":[0],"x":[31874,31898,31912,31934]},{"a":45518,"l":"max_level","c":"Highest level the tubes can reach: 2 + the number of fully coloured levels counted from level 0 without a gap (at most 5), computed by $A9C6 from $B11F. The up tube stops there ($81D3); the three levels $B1CE - 2 to $B1CE are the ones with aliens ($9F37, $9F6C, $B158); after a finished level the Wizball is moved to it ($AECA); at game over $6B60 turns it into the continue limit $AF7D = $B1CE - 2.","t":"byte","b":[0],"x":[27488,27512,33235,40759,40812,43478,44746,45400]},{"a":45519,"l":"life_over","c":"End-of-life flag. 1 when the Wizball is hit ($7EFB; not with BOREWIZ $BB07 set, except in the bonus stage), $36 when the bonus wave script ends ($9D3A), $80 while the bonus-stage end messages run ($65F2, $65FF); cleared at $7CFD, $8069, $AAD8 and $ADCF. Non-zero starts the 200-frame death countdown $B1D0 ($7E16) and stops aliens firing ($9BB7), the bonus wave script ($9CEA) and the colour-complete test ($9E1E); the frame loop ends when it is set and $B1D0 is down to 1 ($6462).","t":"byte","b":[0],"x":[25634,25663,25698,25980,26027,26060,26098,26111,31997,32273,32507,32873,39863,40170,40250,40478,43736,44495]},{"a":45520,"l":"death_timer","c":"Death countdown: set to 200 at $7E18 when $B1CF is first seen, just before $7DB8 starts the explosion; then decremented every frame at $7DDA but held at 1, with the Wizball sprite hidden. The frame loop at $6467 ends the life when it reads 1. Cleared at $7D00, $AADB and $ADD2.","t":"byte","b":[0],"x":[25703,32000,32218,32223,32265,32280,39622,43739,44498]},{"a":45521,"l":"level_colour_recipe","c":"Target colours of each level, four bytes per level from $B1D1 (index 4 x level): the three colours to make, in the order they replace the greys (darkest first), then 0. Level one: red, purple, cyan (2, 4, 3); two: brown, orange, yellow (9, 8, 7); three: blue, light blue, cyan (6, 14, 3); four: brown, green, yellow (9, 5, 7); five: red, orange, cyan (2, 8, 3); six: blue, light blue, yellow (6, 14, 7); seven: red, purple, yellow (2, 4, 7); eight: brown, light red, cyan (9, 10, 3). $77A9 copies the finished ones over the grey shades $B27D-$B27F and $77B5 puts the next one into the target cauldron's colour $B51A.","t":"byte","b":[2,4,3,0,9,8,7,0],"x":[30633,30645]},{"a":45529,"t":"byte","b":[6,14,3,0,9,5,7,0]},{"a":45537,"t":"byte","b":[2,8,3,0,6,14,7,0]},{"a":45545,"t":"byte","b":[2,4,7,0,9,10,3,0]},{"a":45553,"l":"view_column","c":"Coarse landscape position: the map column (in characters) at the left edge of the view, 0-$BA while the landscape can scroll. $7AC3 and $7AEB step it when the fine position $B1F2 carries out of its low three bits; past the right end ($BB-$DB) or below 0 ($DC-$FF) the view stays put ($B25D) and the Wizball moves across the screen by $B1F9 instead. $7CF3 sets $B4 and then $7586 picks a random free start column at the start of each life; $A9EE spawns aliens against it; the level-complete fly-out runs until it reaches $BC ($AEB3).","t":"byte","b":[0],"x":[30171,30280,31427,31430,31467,31470,31504,31632,31642,31989,43502,43771,44577,44723]},{"a":45554,"l":"scroll_fine","c":"Fine landscape position in pixels; its low three bits are the pixel within the character column (copied to $B1FC for the horizontal scroll register). $7BCB adds the speed $B1F4 to it, with the fraction in $B1F3, and a carry out of the low three bits steps the column $B1F1. In the bonus stage it is the Wizball's own signed x offset from the centre, kept between $87 and $53 by $7F14-$7F34.","t":"byte","b":[0],"x":[25750,31391,31401,31411,31512,31650,31679,31712,31717,31724,31749,31754,31761,32532,32538,32549,32564,33372,44123]},{"a":45555,"l":"scroll_fraction","c":"Fraction (1/256 pixel) of the fine position $B1F2, added to and carried by $7BCB; cleared at $AC56 in the lab.","t":"byte","b":[0],"x":[31700,31707,31737,31744,44118]},{"a":45556,"l":"wizball_speed","c":"Horizontal speed, a signed index -6..+6: $7BCB adds the fraction $B33D and the whole pixels $B344 for positive values; for negative ones it adds the fraction $B34B (whose carry takes a pixel off) and subtracts $B351, both at index + 6: from 1/8 up to 2 pixels a frame. $818E sets it from the spin $B21C when the Wizball bounces, or every frame with thrust; the tubes, deaths and screen changes zero it; 6 during the level-complete fly-out ($AE99); in the bonus stage it is copied from $B1F6 ($65A0). The stars read it too ($74A7).","t":"byte","b":[0],"x":[25735,26016,29863,29871,31691,31994,32215,33185,33188,33215,33221,33288,43768,44321,44574,44697,44732]},{"a":45557,"l":"bonus_unused_b1f5","c":"Cleared at $648A with the other movement variables when the bonus stage starts; no other access to it was found.","t":"byte","b":[0],"x":[25738]},{"a":45558,"l":"bonus_speed","c":"Speed of the space bonus stage: $659D copies it into $B1F4 every frame there. $6755 ramps it up by 1/16 per frame (fraction in $B1F7) to 6 while the wave script's flag $B1F8 is set and back down to 0 when it is clear. Cleared at $648D.","t":"byte","b":[0],"x":[25741,26013,26458,26476,26480,26496]},{"a":45559,"l":"bonus_speed_fraction","c":"Fraction of the bonus-stage speed $B1F6, stepped by $10 at $6761-$6784; cleared at $6490.","t":"byte","b":[0],"x":[25744,26465,26471,26485,26491,26500]},{"a":45560,"l":"bonus_flying","c":"Bonus-stage flight flag written by the wave script interpreter at $9D31: command $FF sets it ($FF), command $FE clears it; $6755 accelerates the space scroll while it is set. Cleared at $6493.","t":"byte","b":[0],"x":[25747,26453,40241]},{"a":45561,"l":"wizball_screen_offset","c":"The Wizball's x offset from the centre of the screen in pixels, signed: 0 while the landscape scrolls under it; when the view is held at a level end $7B97-$7BC7 derive it from how far $B1F1/$B1F2 have gone past the end (negative at the left end, positive at the right); in the bonus stage it is $B1F2 ($7F17). $7F3D turns it into the sprite X $B20D/$B20E = $AC + offset.","t":"byte","b":[0],"x":[25554,25759,31667,31687,32535,32578,32586,32598,33349]},{"a":45562,"l":"scroll_fine_previous","c":"Last frame's fine position $B1F2, kept by $7AB6 so that $7AAD can compute the change $B1FB.","t":"byte","b":[0],"x":[31405,31414]},{"a":45563,"l":"scroll_delta","c":"Change of the fine position $B1F2 this frame, signed (-2..+2 pixels): computed at $7AB0. $A9F1 uses its sign to spawn aliens at the edge the view is moving towards, and $A34B moves the aliens by half of it (their x counts 2-pixel steps) through the tables $B282-$B28B so they stay put on the landscape. Cleared at $64A2.","t":"byte","b":[0],"x":[25762,31408,41803,43505,43653]},{"a":45564,"l":"scroll_fine_bits","c":"Low three bits of $B1F2, the fine scroll: $8A2D writes it inverted (EOR #7, with multicolour on) into $D016 in the landscape band; $7C1D also uses it to find the character under a sprite. Set at $7B1D and $8261, 7 in the lab ($AB04).","t":"byte","b":[0],"x":[31517,31773,33377,35373,43780]},{"a":45565,"l":"screen_shown","c":"Landscape screen being shown: $00 = $E000, $10 = $E400, $20 = $E800. $8A25 ORs it into $D018 ($8E, $9E or $AE, character set $F800) and the text printer ($8D0E), the character probes ($7C36, $6F56, $9A6B) and the strip copier ($782B) turn it into the screen's page. $7B56 switches it on each coarse scroll step to the buffer built for that direction; $76C9 sets it after a full redraw.","t":"byte","b":[0],"x":[28502,30189,30409,30763,31574,31798,35365,35421,36110,39531]},{"a":45566,"l":"screen_drawn","c":"Screen that the full landscape redraw at $75EA draws into, $00 or $10 (the one not shown), chosen at $75F4 and $7613 and copied into $B1FD when the redraw ends ($76C6).","t":"byte","b":[0],"x":[30196,30227,30333,30406]},{"a":45567,"l":"scroll_step","c":"Coarse scroll step this frame: 2 when the view moved one column right, $FF when it moved left, 0 otherwise (set at $7B5B-$7B64, cleared each frame at $7A9A). $6F21 and $99BD move the Wizball's and the aliens' character bullets by one column to match. Also the base of LDA $B1FF,X at $77F9 (X = 3..1), which reaches the rebuild counters $B200-$B202.","t":"byte","b":[0],"x":[25765,28449,30713,31386,31579,31588,33291,39357]},{"a":45568,"l":"strip_rebuild_e000","c":"Rebuild progress of the landscape buffer at $E000 (first of three counters $B200-$B202, one per screen): 0-3 = quarters copied so far, 4 = up to date. $77F7 copies one quarter per call from the shown screen, shifted one column the way that buffer is meant for, and draws the new column after the last quarter; $7B74 restarts a buffer at 0 when it is given a new role.","t":"byte","b":[0],"x":[30220,30232,30727,31604]},{"a":45569,"l":"strip_rebuild_e400","c":"Rebuild progress of the landscape buffer at $E400 (0-3 quarters copied, 4 = done); see $B200.","t":"byte","b":[0],"x":[30199,30243]},{"a":45570,"l":"strip_rebuild_e800","c":"Rebuild progress of the landscape buffer at $E800 (0-3 quarters copied, 4 = done); see $B200.","t":"byte","b":[0],"x":[30202,30235]},{"a":45571,"l":"strip_role_e000","c":"Role of the buffer at $E000 (first of $B203-$B205): 0 = the screen shown, 1 or 2 = prepared for the next coarse step in one direction or the other. $7B2A-$7B77 rotate the roles on every step, so the buffer prepared for that step is shown at once while the other two are rebuilt in the background; $783F reads the role to pick the copy direction.","t":"byte","b":[0],"x":[30205,30248,30783,31530,31556,31566,31599]},{"a":45572,"l":"strip_role_e400","c":"Role of the buffer at $E400 (0 shown, 1 or 2 prepared for a step); see $B203.","t":"byte","b":[0],"x":[30210,30238,31536]},{"a":45573,"l":"strip_role_e800","c":"Role of the buffer at $E800 (0 shown, 1 or 2 prepared for a step); see $B203.","t":"byte","b":[0],"x":[30215,30253,31542]},{"a":45574,"l":"strip_roles_copy","c":"Copy of the three buffer roles $B203-$B205 ($B206-$B208), taken at $7B2D before they are rotated; $7B78 searches it for the buffer holding a given role.","t":"byte","b":[0],"x":[31533,31611]},{"a":45575,"l":"strip_roles_copy_e400","c":"Copy of the role of the $E400 buffer ($B204), taken at $7B33; see $B206.","t":"byte","b":[0],"x":[31539]},{"a":45576,"l":"strip_roles_copy_e800","c":"Copy of the role of the $E800 buffer ($B205), taken at $7B39; see $B206.","t":"byte","b":[0],"x":[31545]},{"a":45577,"l":"map_column","c":"Map tile column at the left edge of the view (tiles are five characters wide): set from the level's entry in $B2F0 by $763B and advanced by the redraw to the start column; $7AE0 and $7B08 step it when $B20B wraps. The column drawers at $78AE and $78CF read it. Also the base of STA $B209,X at $763B (X = 0-3), which fills $B209-$B20C.","t":"byte","b":[0],"x":[30267,30283,30286,30300,30356,30373,30379,30396,30894,30927,31456,31496]},{"a":45578,"l":"map_row_base","c":"First of the level's four tile rows in the map (an index into the row address tables at $0460/$0470), from byte +1 of the level's $B2F0 entry; $769C adds 4 to it (and takes 4 from $B209) after every $75DF tile columns of a full redraw, which happens within the 40 columns only when $75DF is 5 (the lab and round-end screens).","t":"byte","b":[0],"x":[30364,30370,30902,30932]},{"a":45579,"l":"map_subcolumn","c":"Character column (0-4) within the tile at the left edge of the view, stepped with the coarse scroll at $7AD6 and $7AFE. The next byte, $B20C, receives the always-zero fourth byte of the $B2F0 entry and is never read.","t":"byte","b":[0,0],"x":[30276,30296,30346,30349,30384,30400,30907,30937,31446,31449,31461,31486,31489,31501]},{"a":45581,"l":"wizball_x","c":"The Wizball's sprite X, low byte ($AC + the screen offset $B1F9, computed by $7F3D; the ninth bit is $B20E). $80B6 copies it to sprite 0's shadow $E7C4; the firing, cat and collision code read it. $B20D-$B26C are cleared at the start of every life by $7CDA.","t":"byte","b":[0],"x":[25559,25776,31965,32130,32366,32589,32601,32950,33344,33514,33658,33925,34186,34301,39642,39977]},{"a":45582,"l":"wizball_x_high","c":"Ninth bit of the Wizball's sprite X $B20D, merged into the X-MSB shadow $E7D4 at $80C1.","t":"byte","b":[0],"x":[32362,32575,32606,32961,33654,34297,39638,44142]},{"a":45583,"l":"wizball_y","c":"The Wizball's sprite Y, kept between $49 and $C8 by $8097 (the top and the ground); $80C7 copies it to sprite 0's shadow $E7C5. The bounce physics $7F6D moves it by the vertical speed $B211/$B212, anti-grav by $B218; a life starts at $C8 ($804C), or $49 with anti-grav; $8239 puts it at $4C after a tube.","t":"byte","b":[72],"x":[31984,32118,32355,32638,32641,32648,32693,32696,32703,32844,32915,32919,32928,32942,32967,33339,33484,33663,33782,33785,33914,34010,34180,34290,34310,35897,35904,39660,39993,44128]},{"a":45584,"l":"wizball_y_fraction","c":"Fraction of the Wizball's Y $B20F, carried by the bounce physics at $7F72-$7FB5.","t":"byte","b":[0],"x":[32626,32633,32681,32688,32849]},{"a":45585,"l":"wizball_vspeed","c":"Vertical speed of the bouncing Wizball, whole pixels per frame (fraction in $B212): gravity $B27C is added while falling and subtracted while rising ($7F99, $7FD0); set to 3.94 ($03F0) for the first bounce of a life ($8074) and zeroed after tubes and screens.","t":"byte","b":[0],"x":[32645,32677,32700,32706,32732,32739,32884,33352,44139,44507]},{"a":45586,"l":"wizball_vspeed_fraction","c":"Fraction of the vertical speed $B211 (1/256 pixel per frame).","t":"byte","b":[0],"x":[32630,32665,32672,32685,32709,32720,32727,32742,32892,33355,44510]},{"a":45587,"l":"tube_timer","c":"Tube countdown: $81C9 sets it to 21 when the Wizball enters a tube (after copying its current ball image to the sprite block at $ED00); while it runs, $8216 shifts that image down one row a frame so the ball sinks into the tube, the Wizball goes behind the landscape ($8B22) and cannot bounce ($818E); at 0, $8239 starts the new level. Also stops the colour-complete test ($9E21).","t":"byte","b":[0],"x":[32289,33166,33283,33324,35532,35618,40481]},{"a":45588,"l":"warp_frame","c":"Frame of the Wizball's materialise animation, 0-$17 ($B21A = it + $10, so sprite images $20-$37): counts down from $17 while $B216 = 1 (the Wizball appears at the start of a life and of the bonus stage), up to $17 while $B216 = 2 (it vanishes as the bonus stage starts). Stepped every third frame by $7FEA.","t":"byte","b":[0],"x":[25732,25918,32776,32802,32805,32817,32839]},{"a":45589,"l":"warp_divider","c":"Frame divider of the materialise animation: $7FF5 counts it to 3 and then steps $B214.","t":"byte","b":[0],"x":[32757,32764,32773,32790,32799]},{"a":45590,"l":"warp_direction","c":"Materialise animation state: 1 = appearing ($B214 counts down; set at $8042 for a new life and $6539 in the bonus stage), 2 = vanishing ($B214 counts up; set at $6476 when the bonus stage starts), 0 = none. While it is non-zero the Wizball is drawn behind the scenery ($E7DF), the cat's left-edge clamp is skipped ($8774) and $7E38 skips the tube and landscape test $836E.","t":"byte","b":[0],"x":[25718,25869,25913,32312,32746,32783,32814,32834,34676]},{"a":45591,"l":"wizball_falling","c":"Bounce direction: 1 while the Wizball falls (speed grows by gravity), 0 while it rises (speed shrinks). $7F92 clears it on hitting the ground ($C8) and then $818E turns spin into speed; $7FCC sets it when the upward speed runs out; the landscape collision handlers at $8405 and $841A flip it on hitting something above or below.","t":"byte","b":[0],"x":[32621,32658,32716,33805,33812,33826,33833]},{"a":45592,"l":"antigrav_vspeed","c":"Vertical speed with anti-grav, -4..+4 pixels per frame: every third frame ($B219) $8BEA moves it one step towards down or up while the stick is held that way, and back towards 0 otherwise; $8C3D adds it to $B20F. $8097 sets it to 1 or -1 when the Wizball reaches the top or the ground.","t":"byte","b":[0],"x":[25756,32933,32947,33361,33767,33775,33778,33789,35850,35857,35866,35873,35879,35884,35891,35894,35901]},{"a":45593,"l":"antigrav_divider","c":"Frame divider for the anti-grav speed $B218: $8BEA acts every third frame.","t":"byte","b":[0],"x":[35818,35821,35830]},{"a":45594,"l":"spin_frame","c":"Rotation frame of the Wizball, 0-15: the fraction $B21B accumulates the spin $B21C twice a frame ($815F) and carries into it; $80DA makes the sprite image $B525 = frame + $10. During the materialise animation it is $B214 + $10, and $A4 during a tube (image $B4, the copy at $ED00).","t":"byte","b":[0],"x":[32786,32823,32986,33133,33151,33157,33162,33257,33331,33539,44501]},{"a":45595,"l":"spin_fraction","c":"Fraction of the rotation frame $B21A, to which $815F adds the spin $B21C.","t":"byte","b":[0],"x":[33125,33128,33139,33146]},{"a":45596,"l":"spin","c":"Spin of the Wizball, signed -$30..+$30: $80F8 changes it by 6 a frame while the stick is held left or right (left-hand spin negative), and with anti-grav (and thrust) lets it die away when the stick is let go ($8138). It turns the ball ($B21A) and becomes the horizontal speed $B1F4 at a bounce, or all the time with thrust ($818E). Hitting a wall sideways reverses it ($842F, $843E).","t":"byte","b":[0],"x":[25753,32554,32569,33033,33049,33058,33074,33091,33096,33103,33106,33109,33119,33143,33172,33195,33294,33839,33847,33850,33854,44145,44504]},{"a":45597,"l":"spin_last","c":"Last non-zero spin ($815A): its sign is the way the Wizball faces, which decides the direction of its shots ($84AF), of the cat's shots ($8852) and the side the cat trails on ($8717). Also the base of $B21D,Y (Y = 6..1) at $AFF0 and $B05C, which reaches the saved icon pointers at $B21E.","t":"byte","b":[0],"x":[33114,33967,34583,34898,45040,45148]},{"a":45598,"l":"lab_saved_icon_pointers","c":"The six icon sprite pointers $EFF8-$EFFD saved by $AFED while the Wiz-lab shows fresh icons, put back by $B05C ($B21E-$B223). $B224-$B226 after them are not referenced.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":45606,"t":"byte","b":[0]},{"a":45607,"l":"lab_saved_cursor","c":"The icon cursor $B258 saved when the Wiz-lab opens ($AFFF) and restored by $B065. It is also the base of $B227,Y (Y = 9..1) at $AFDA and $B051, the copies of the nine weapon flags $B231-$B239: this span holds the saved thrust, anti-grav and double flags, $B228-$B22A.","t":"byte","b":[0,0,0,0],"x":[45018,45055,45137,45157]},{"a":45611,"l":"lab_saved_catelite","c":"Saved copy of the catelite flag $B234 (with the saved beam, blazers, spray and spray-owner flags $B22C-$B22F after it). $AB9D reads it: if the cat was alive when the lab opened, it walks in and drinks its milk.","t":"byte","b":[0,0,0,0,0],"x":[43933]},{"a":45616,"l":"weapon_flags_base","c":"Saved copy of the ninth weapon flag $B239, and the base of $B230,X/Y (index 1-9) at $721A, $AFD7, $AFDF and $B054, which clear, save and restore the weapon flags $B231-$B239.","t":"byte","b":[0],"x":[29210,45015,45023,45140]},{"a":45617,"l":"weapon_thrust","c":"Thrust flag, set by the first pick of icon 1 ($7380, which also shows the anti-grav picture on the icon). With thrust the spin drives the Wizball sideways every frame, not only at a bounce ($7E4C). Cleared with the other weapon flags $B231-$B239 at the start of each life ($721A), then restored from the permanent list.","t":"byte","b":[0],"x":[29226,29561,29568,32332,33080]},{"a":45618,"l":"weapon_antigrav","c":"Anti-grav flag, set by the second pick of icon 1 ($738B, which blanks the icon): no bouncing; the stick moves the Wizball up and down ($7F62 -> $8BEA) and with thrust the spin stops when the stick is let go ($8138); a life starts at the top ($808C). Landscape collisions reverse the anti-grav speed $B218 instead of bouncing ($8405 -> $83FD, $841A -> $83E7, untraced code reached only through $B3BE).","t":"byte","b":[0],"x":[29229,29579,32610,32908,33083,33797,33818]},{"a":45619,"l":"weapon_double","c":"Double flag, set by the second pick of icon 2 ($735D): shots alternate between the two directions ($84B6, via $B23A).","t":"byte","b":[0],"x":[29533,33974]},{"a":45620,"l":"weapon_catelite","c":"Catelite flag, set by icon 3 ($7368, with the cat's hit count $B26C cleared): the cat is on screen and follows the Wizball ($8640). Cleared when the cat takes its ninth hit ($8660), which also gives the icon back.","t":"byte","b":[0],"x":[27098,29544,34368,34400,34847]},{"a":45621,"l":"weapon_beam","c":"Beam flag, set by the first pick of icon 2 ($7352, which shows the double picture on the icon next): each shot also fires the beam sprites animated by $8592 ($B8DB-$B8E0).","t":"byte","b":[0],"x":[29515,29522,34194]},{"a":45622,"l":"weapon_blazers","c":"Blazers flag, set by icon 4 ($731C): the Wizball's and the cat's shots use the bigger characters (+3), two cells wide, in colour $0C ($84E3, $888D).","t":"byte","b":[0],"x":[29468,34019,34957]},{"a":45623,"l":"weapon_spray","c":"Spray flag, set by the first pick of icon 5 ($732C): each shot also fires three bullets in fan directions from the table at $B8C1 ($84FF), from the Wizball or from the cat depending on $B238.","t":"byte","b":[0],"x":[29477,29484,34047]},{"a":45624,"l":"weapon_spray_on_cat","c":"Spray owner: every later pick of icon 5 flips it ($7335, EOR #1) and changes the icon picture (8 or $0A). 0 = the Wizball sprays ($8505), 1 = the cat sprays when it fires ($855E). The next byte, $B239, is the ninth weapon flag: cleared, saved and restored with the others but never set or read.","t":"byte","b":[0,0],"x":[29493,29498,34053,34142]},{"a":45626,"l":"double_side","c":"Alternates 0/1 on each shot with double ($84BB): picks the shot's direction, so double fires both ways in turn.","t":"byte","b":[0],"x":[33979,33984]},{"a":45627,"l":"spray_set","c":"Alternates 0/9 on each spray shot ($851A, EOR #9): selects the downward or the upward three records of the spray table $B8C1.","t":"byte","b":[0],"x":[34074,34079]},{"a":45628,"l":"fire_latch","c":"Fire button as last seen (bit 4 of the Wizball's input $B23F, $10 = released), kept by $8444 for edge detection ($8453, $845C).","t":"byte","b":[0],"x":[33865,33875,33884]},{"a":45629,"l":"fire_pressed","c":"1 for the frame in which fire goes down ($8463), else 0 ($8446): $8467 fires a shot only then.","t":"byte","b":[0],"x":[33862,33891,33895]},{"a":45630,"l":"cat_input","c":"The cat's control input for this frame, joystick bits active low (0 up, 1 down, 2 left, 3 right, 4 fire): from the second port in a team game, or the shared stick while fire is held in a one-player game ($697D-$69EE); a random walk for the mutant cat ($861C) and scripted moves in the Wiz-lab ($AC00).","t":"byte","b":[0],"x":[25823,27029,27042,27094,27118,34362,34424,34852,44032]},{"a":45631,"l":"wizball_input","c":"The Wizball's control input for this frame, joystick bits active low: from the port that pressed fire at \"get ready\" ($697D-$69EE), with the directions masked off while one player steers the cat; $FF (nothing) at the bonus-stage start and after the lab, scripted in the lab ($ACB6). Read by the spin ($80F8), fire ($8444), anti-grav ($8BF9) and icon selection ($723D) code.","t":"byte","b":[0],"x":[25818,27023,27036,27087,27113,29245,33016,33870,33879,35833,44214,44515]},{"a":45632,"l":"wizard_port","c":"Which port the Wizball uses: bit 4 of port 2 ($B256) as it was when fire ended the \"get ready\" screen ($6969): 0 = port 2 pressed fire, so Wiz is on port 2 and a team's cat on port 1; $10 = the other way round.","t":"byte","b":[0],"x":[26985,27015,27051]},{"a":45633,"l":"solo_autofire","c":"Toggles bit 4 every frame while a lone player holds fire to steer the cat ($69DF): the Wizball's input then has no directions and a fire bit that goes on and off, so Wiz keeps shooting by itself.","t":"byte","b":[0],"x":[27103,27108]},{"a":45634,"l":"solo_fire_hold","c":"Frames fire has been held by a lone player, 0-10 ($69BB-$69CA); at 10, if the cat is out ($B234), the stick steers the cat instead of the Wizball. Released fire resets it.","t":"byte","b":[0],"x":[27067,27074,27082]},{"a":45635,"l":"trail_index","c":"Index (low three bits) of the newest entry in the Wizball's 8-entry position trail at $B244/$B24C, advanced every frame by $857B. The cat heads for the oldest entry ($86F5).","t":"byte","b":[0],"x":[34171,34174,34549]},{"a":45636,"l":"trail_y","c":"The Wizball's Y for each of the last eight frames ($B244-$B24B), written by $857B, read by the cat's follow code at $86FE.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[34183,34558]},{"a":45644,"l":"trail_x","c":"The Wizball's X halved for each of the last eight frames ($B24C-$B253), written by $857B, read by the cat's follow code at $8731.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[34190,34609]},{"a":45652,"l":"key_new","c":"Key pressed since the last scan, 0 for none or the same key: 1 + 8 x (7 - row) + (7 - column) from the full matrix scan at $73D4 (SPACE 4, RETURN $3F), or from the three-by-three scan at $7429 used in play (1 RUN/STOP, 2 Q, 3 C=, 4 /, 5 up-arrow, 6 =). Read for pause and quit ($6EB7), firing volume ($BA82), Wiztips ($8FF1), name entry ($6D0A), the continue keys and the BOREWIZ sequence ($AF85).","t":"byte","b":[0],"x":[27871,27914,28343,28361,29365,29401,29733,29818,36727,36849,36984,38104,40538,44933,44968,47746]},{"a":45653,"l":"key_held","c":"Key seen at the previous scan, kept by $7421/$7476 so that $B254 reports each press once.","t":"byte","b":[0],"x":[29724,29729,29809,29814]},{"a":45654,"l":"joystick_port2_raw","c":"$DC00 as read by $73D4/$7429 with both data-direction registers set to input: joystick port 2, active low.","t":"byte","b":[0],"x":[27020,27039,27056,29663,29748,37370,37925]},{"a":45655,"l":"joystick_port1_raw","c":"$DC01 as read by $73D4/$7429 with both data-direction registers set to input: joystick port 1, active low.","t":"byte","b":[0],"x":[27026,27033,27046,29669,29754,37375,37928]},{"a":45656,"l":"icon_cursor","c":"Lit icon, 0 (none) or 1-7: each pearl moves it on ($72BE, wrapping 7 -> 1, sound 9); wiggling the stick ($723C reaching 4) takes it through $72DF, which runs the icon's handler from $B549 and clears it. The Wiz-lab uses it as its cursor (1-5); $6E5E and $B007 load it with each permanent weapon in turn.","t":"byte","b":[0],"x":[28254,29345,29374,29377,29386,29407,29437,29442,29445,38531,43045,45052,45063,45078,45160,45188,45195,45204,45211,45220,45269,45286]},{"a":45657,"l":"pearls_pending","c":"Pearls collected but not yet shown: $7E8B adds one (and 100 points) when the Wizball touches a pearl, and $72AA moves the icon cursor one step per frame while it is non-zero.","t":"byte","b":[0],"x":[29354,29359,32395]},{"a":45658,"l":"icon_pulse_timer","c":"Frame counter for the lit icon's colour pulse: every fourth frame $727A steps $B25B.","t":"byte","b":[0],"x":[29306,29309]},{"a":45659,"l":"icon_pulse_step","c":"Step 0-5 of the lit icon's colour pulse ($7284): the colour is $B53D + step (blue sequence), or + 6 (red sequence) in the lab.","t":"byte","b":[0],"x":[29316,29319,29326,29329]},{"a":45660,"l":"background_flash","c":"Background flash: set to 1 by the smart bomb ($7396) and when the bonus stage starts ($64CC), to $0A at $A809 when an alien whose byte $15 is $FF is shot; while its low seven bits are non-zero $8A44 increments it every frame and writes it to $D021, so the background runs through the colours until it reaches $80 (about two seconds from 1). Cleared at $651C.","t":"byte","b":[0],"x":[25804,25884,29590,35396,35403,43017]},{"a":45661,"l":"scroll_held","c":"1 while the view is held at a level end ($7B8D) and the Wizball moves across the screen instead; 0 while the landscape scrolls ($7B22). Stops the map stepping ($7ACD, $7AF5) and the aliens' scroll compensation ($A346).","t":"byte","b":[0],"x":[31437,31477,31522,31629,41798]},{"a":45662,"l":"font_large","c":"Font of the text printer $8D1F: 0 = normal characters (set by $8CFA), 1 = the large two-by-two gothic font through $B591 (set by $8CF4); read at $8D87.","t":"byte","b":[0],"x":[36094,36231]},{"a":45663,"l":"screen_timeout","c":"Time left on an attract or waiting screen, in units of five frames: $9215 sets it (150 = 15 seconds on the title page at $8FE9, 200 after game over at $6A7F) and $921E counts it down.","t":"byte","b":[0],"x":[37397,37416]},{"a":45664,"l":"screen_timeout_divider","c":"Five-frame divider for $B25F, reloaded with 5 by $9218 and $9223.","t":"byte","b":[0],"x":[37402,37406,37413]},{"a":45665,"l":"cat_x","c":"The cat's X, halved: $8768-$878E keep it between $0F (0 while the Wizball materialises) and $A0, a value of $FA or more (a wrap below 0) becoming 0; $87B8 doubles it into sprite 1's X shadow. Moved by the stick speed $B263 plus the follow speed $B265 each frame ($874E); the cat's spray and shots start here.","t":"byte","b":[0],"x":[33364,34158,34376,34620,34638,34648,34664,34673,34681,34690,34693,34702,34744,34880,35004,39678,43954]},{"a":45666,"l":"cat_y","c":"The cat's Y, kept within $47-$C7 except in the lab ($8791-$87AB), moved by $B264 + $B266 at $875B and copied to sprite 1's Y shadow $E7C7.","t":"byte","b":[0],"x":[33369,34147,34379,34565,34651,34661,34710,34719,34722,34731,34734,34869,34945,34997,39695,43959]},{"a":45667,"l":"cat_stick_dx","c":"The cat's horizontal speed from its stick this frame: -3 (left) or +2 (right), else 0 ($86B6-$86E7).","t":"byte","b":[0],"x":[34491,34524,34535,34543,34642,34921,43970]},{"a":45668,"l":"cat_stick_dy","c":"The cat's vertical speed from its stick this frame: -4 (up) or +3 (down), else 0 ($86B6-$86CF).","t":"byte","b":[0],"x":[34488,34502,34513,34546,34655,43976]},{"a":45669,"l":"cat_follow_dx","c":"The cat's horizontal follow speed towards the Wizball's trail (clamped to -2..+2 at $873F), decaying by one each frame towards 0 ($8696).","t":"byte","b":[0],"x":[34454,34461,34464,34467,34635,34645,43973]},{"a":45670,"l":"cat_follow_dy","c":"The cat's vertical follow speed towards the Wizball's trail (clamped to -4..+4 at $8708), decaying by one each frame towards 0 ($86A6).","t":"byte","b":[0],"x":[34470,34477,34480,34483,34580,34658,43979]},{"a":45671,"l":"cat_anim_timer","c":"Frame counter for the cat's walk animation: every fourth frame $87CD steps $B268.","t":"byte","b":[0],"x":[34765,34768]},{"a":45672,"l":"cat_anim_frame","c":"The cat's animation frame 0-2; $87E6 makes its sprite image $B526 = $0D + frame.","t":"byte","b":[0],"x":[34775,34778,34787,34793]},{"a":45673,"l":"cat_side_offset","c":"How far (0-$15) the cat trails to one side of the Wizball: grows while the Wizball faces left, shrinks while it faces right ($8717-$872E), and is added to the trail X the cat aims for.","t":"byte","b":[0],"x":[34588,34593,34599,34606,34616]},{"a":45674,"l":"cat_following","c":"1 when the cat followed the Wizball this frame, 0 when its stick steered it ($8673, $8693); the cat's shot goes the way the cat moved when 0, the way the Wizball faces when 1 ($8862).","t":"byte","b":[0],"x":[34421,34451,34914]},{"a":45675,"l":"cat_stick_timer","c":"Frames the cat stays under stick control: reloaded with 10 whenever its stick is moved (or in the lab) at $868D, counted down each frame ($8690).","t":"byte","b":[0],"x":[34427,34445,34448]},{"a":45676,"l":"cat_hits","c":"Hits the cat has taken: $89A2 adds one per hit (sound 4) and at 9 the cat dies ($865A: catelite off, icon 3 back). A purple droplet sets it to 8, the mutant cat that flashes and runs wild until its next hit ($892D, $87F4); a grey one sets it to $80, the indestructacat that needs over a hundred hits ($8922). Cleared when the catelite is taken and at $806F.","t":"byte","b":[0],"x":[29554,32879,34391,34801,34980,35106,35117,35234,35237,43987,43994]},{"a":45677,"l":"cat_flash_timer","c":"Counter for the mutant cat's flashing: its bits 2-4 pick the cat's colour from the blue pulse $B5DF ($87F8).","t":"byte","b":[0],"x":[34808,34811]},{"a":45678,"l":"life_clear_length","c":"Constant $60: the number of bytes from $B20D that $7CDA clears at the start of every life ($B20D-$B26C). $B26F after it is not referenced.","t":"byte","b":[96,0],"x":[31969]},{"a":45680,"l":"joystick_last","c":"Both ports ANDed (with $E0 set) as last seen by $91FA, which returns $FF while nothing changes: edge detection for the menus and waiting screens.","t":"byte","b":[0],"x":[37384,37393]},{"a":45681,"l":"rings_mirrored","c":"Vertical mirror flag for the eight \"get ready\" ring sprites: 1 from $915F (sprite Y = $FF - y), 0 from $9163; read at $9178.","t":"byte","b":[0],"x":[37221,37240]},{"a":45682,"l":"game_mode","c":"Choice in the player menu, 0-4: one player, two players, two player team, three players, four players; up and down move it at $91DB. $687E uses it to pick the side flags $BFD6-$BFD8 from $B2AC; $93CE-$93F9 highlight the chosen line.","t":"byte","b":[0],"x":[26750,37345,37350,37359,37366,37838,37851,37861,37871,37881]},{"a":45683,"l":"text_quarter","c":"Quarter (0-3) of the large glyph that $8E59 is putting into sprite data: bit 1 = right half, bit 0 = lower half; after the fourth the next character is taken.","t":"byte","b":[0],"x":[36461,36472,36486,36489,36494,36504,36530]},{"a":45684,"l":"text_char_index","c":"Index of the next character of the string ($5E/$5F) for the sprite-text writers $8E0E and $8E59.","t":"byte","b":[0],"x":[36366,36380,36441,36499,36533]},{"a":45685,"l":"text_sprite_step","c":"Step 0-5 of the sprite-text output pointer ($8EDC): alternately down 8 rows and back up to the next byte column of the sprite; after six steps it moves on to the next sprite block.","t":"byte","b":[0],"x":[36536,36572,36594,36597,36606]},{"a":45686,"l":"font_ink_mask","c":"Byte 0 of the space glyph at $F100 (the normal font at $F000-$F1FF): 0 when that font is in normal polarity, $FF when inverted. $8C84 and $8C8D invert the font when a screen needs the other polarity and update this; $8DEA EORs it into sprite text so the sprites always get the ink.","t":"byte","b":[0],"x":[35975,35984,36017,36330]},{"a":45687,"l":"large_font_ink_mask","c":"The same for the large font at $F200-$F7FF: the byte at $F6F0, 0 or $FF, kept by $8CB5/$8CBE, EORed into large sprite text at $8E38. Its address is also the base of the lives table: $B277,X with X = side 1 or 2 reaches $B278/$B279.","t":"byte","b":[0],"x":[27125,27434,27463,29125,32097,35096,36024,36033,36080,36408,42987]},{"a":45688,"l":"lives_side1","c":"Wizballs left for side 1: 3 at the start ($6873); one lost at $6B2A; one gained every 100,000 points ($71C5), for a white droplet ($8918) and at $A7EB. The HUD shows lives - 1, at most 9 ($7D5E).","t":"byte","b":[0],"x":[26739,27444,27477]},{"a":45689,"l":"lives_side2","c":"Wizballs left for side 2, as $B278 (set to 3 at $6876).","t":"byte","b":[0],"x":[26742,27447]},{"a":45690,"l":"background_char_phase","c":"Phase of the parallax background pattern, a character code $49-$5A: stepped with the coarse scroll by $7978 (+1), $7989 (-1) and $799A; $79C2 fills the empty cells of each new landscape column with it, $12 lower for each row up.","t":"byte","b":[81],"x":[31096,31099,31108,31113,31116,31125,31130,31133,31142,31157,31166,31190,31223,31256]},{"a":45691,"l":"background_char_saved","c":"Temporary copy of $B27A while $799A draws a column one step ahead ($79A9, $79BB).","t":"byte","b":[0],"x":[31145,31163]},{"a":45692,"l":"gravity","c":"Gravity, constant $10 (never written): $7F9D adds it to the falling speed, $7FD4 subtracts it from the rising one, 1/16 pixel per frame per frame.","t":"byte","b":[16],"x":[32669,32724]},{"a":45693,"l":"landscape_colour_1","c":"First landscape shade, written to multicolour register $D022 ($7D4A, $8A0C): dark grey ($0B) until the level's first target colour is made ($77AC copies it from $B1D1); 6 in the lab and at the round end.","t":"byte","b":[11],"x":[30604,30636,32074,35340,43832,44857]},{"a":45694,"l":"landscape_colour_2","c":"Second landscape shade, multicolour register $D023: grey ($0C) until the second target colour is made.","t":"byte","b":[12],"x":[30609,32080,35346,43837,44862]},{"a":45695,"l":"landscape_colour_3","c":"Third landscape shade, the colour RAM value ($7D1A, with bit 3 for multicolour): white (9) until the third target colour is made; black (8) during freaky bits ($894D).","t":"byte","b":[9],"x":[30614,30651,30656,32026,35154,43842,44867]},{"a":45696,"l":"bullet_half","c":"Toggles every frame at $99E2: selects which half of the alien bullet table at $0300 (records $00-$70 or $80-$F0) $99BD moves this frame; $9B26 uses it too.","t":"byte","b":[0],"x":[39394,39399,39718]},{"a":45697,"l":"bullet_fired","c":"1 once an alien has fired this frame ($9C01), cleared at $9B23; $9BBD lets no other alien fire while it is set.","t":"byte","b":[0],"x":[39715,39869,39937]},{"a":45698,"l":"tbl_alien_drift_fraction","c":"Fraction to subtract from each alien's x when the view moves right by 0, 1 or 2 pixels ($B282-$B284: 0, $80, 0; SBC $B282,Y at $A354 with Y = $B1FB).","t":"byte","b":[0,128,0],"x":[41812]},{"a":45701,"l":"tbl_alien_drift_whole","c":"Whole part to subtract with $B282 ($B285-$B287: 0, 0, 1): with the fraction, 0, 0.5 and 1 steps of two pixels.","t":"byte","b":[0,0,1],"x":[41827]},{"a":45704,"l":"tbl_alien_back_fraction","c":"Fraction to add when the view moves left by 2 or 1 pixels ($B288, $B289: 0, $80; ADC at $A370 with Y = $B1FB + 2).","t":"byte","b":[0,128],"x":[41840]},{"a":45706,"l":"tbl_alien_back_whole","c":"Whole part to add with $B288 ($B28A, $B28B: 1, 0): 1 step for -2 pixels, 0.5 for -1.","t":"byte","b":[1,0],"x":[41855]},{"a":45708,"l":"tbl_alien_bump_handlers","c":"Collision responses for an alien that runs into solid landscape (a character of $A0 or more), one record of four bytes per probe cell in the order of $B3B6 (below, left, right, above, then the corners): two handler addresses; $A6BF-$A6DC calls the first and jumps to the second. $A70D reverses a downward move (below), $A6DF a leftward one, $A6E5 a rightward one, $A707 an upward one (above); the corners pair a vertical and a horizontal one, the others pair with $8404, an RTS. The handlers at $A6DF and $A6E5 are reached only through this table.","t":"byte","b":[13],"x":[42687]},{"a":45709,"l":"tbl_alien_bump_handlers_1hi","c":"Column +1 of $B28C, the high byte of the first handler (LDA $B28D,Y at $A6C5).","t":"byte","b":[167],"x":[42693]},{"a":45710,"l":"tbl_alien_bump_handlers_2lo","c":"Column +2 of $B28C, the low byte of the second handler (LDA $B28E,Y at $A6D0).","t":"byte","b":[4],"x":[42704]},{"a":45711,"l":"tbl_alien_bump_handlers_2hi","c":"Column +3 of $B28C, the high byte of the second handler (LDA $B28F,Y at $A6D6); this span holds the rest of the eight records, $B290-$B2AB.","t":"byte","b":[132,223,166,4,132,229,166,4],"x":[42710]},{"a":45719,"t":"byte","b":[132,7,167,4,132,13,167,223]},{"a":45727,"t":"byte","b":[166,13,167,229,166,7,167,223]},{"a":45735,"t":"byte","b":[166,7,167,229,166]},{"a":45740,"l":"tbl_game_mode_sides","c":"Side flags for each menu choice $B272, four bytes each ($B2AC-$B2BF, the fourth unused), copied to $BFD6-$BFD8 by $6886: side 1 plays alone (1) or as a team (2); side 2 alone or team; number of sides taking turns. One player 1,1,1; two players 1,1,2; two player team 2,1,1; three players 2,1,2; four players 2,2,2.","t":"byte","b":[1,1,1,0,1,1,2,0],"x":[26758]},{"a":45748,"t":"byte","b":[2,1,1,0,2,1,2,0]},{"a":45756,"t":"byte","b":[2,2,2,0]},{"a":45760,"l":"tbl_colour_recipes","c":"Recipe of every C64 colour, three bytes (red, green, blue units) per colour 0-15 ($B2C0-$B2EF), each adding up to 20 for the colours used as targets: red 20,0,0; cyan 0,10,10; purple 10,0,10; green 0,20,0; blue 0,0,20; yellow 10,10,0; orange 15,5,0; brown 5,10,5; light red 10,5,5; light blue 10,0,10; black, white and the greys 0,0,0. Read at $9E3A for the mix $B12E and at $AD2F for the lab's pouring.","t":"byte","b":[0,0,0,0,0,0,20,0],"x":[40506,44335]},{"a":45768,"t":"byte","b":[0,0,10,10,10,0,10,0]},{"a":45776,"t":"byte","b":[20,0,0,0,20,10,10,0]},{"a":45784,"t":"byte","b":[15,5,0,5,10,5,10,5]},{"a":45792,"t":"byte","b":[5,0,0,0,0,0,0,0]},{"a":45800,"t":"byte","b":[0,0,10,0,10,0,0,0]},{"a":45808,"l":"tbl_level_map_start","c":"Where each level's landscape lies in the map, four bytes per level 0-10 ($B2F0-$B31B): the tile column at scroll position 0 ($2C or $FF), the first of its four tile rows (0, 4, 8 or $0C), 4 (the character column within the tile), 0. Levels 0-7 share four row bands and two column halves; 9 (bonus stage) and 10 start at column $5B. $7638 copies an entry to $B209-$B20C; $7594 reads the column for the random start.","t":"byte","b":[44],"x":[30100,30264]},{"a":45809,"l":"tbl_level_map_rows","c":"Column +1 of $B2F0, the level's first tile row, read as LDY $B2F1,X at $758C to find the map row when choosing a start column; this span holds the rest of the eleven entries.","t":"byte","b":[0,4,0,255,0,4,0,255],"x":[30092]},{"a":45817,"t":"byte","b":[8,4,0,255,12,4,0,44]},{"a":45825,"t":"byte","b":[8,4,0,44,4,4,0,255]},{"a":45833,"t":"byte","b":[4,4,0,44,12,4,0,0]},{"a":45841,"t":"byte","b":[0,0,0,91,8,4,0,91]},{"a":45849,"t":"byte","b":[0,4,0]},{"a":45852,"l":"tbl_level_graphics","c":"Where each level's landscape graphics come from, one word per level 0-10 ($B31C-$B331): $1142, $0E42, $0B42, $1D42, $1A42, $1742, $1442, $2042 for levels 0-7, $2342 for 8 and 9 (bonus stage), $0E42 for 10. $77C6 copies 760 bytes from there to $FD00-$FFF7, the glyphs of characters $A0-$FE of the landscape character set at $F800, the level's own scenery (the vectors at $FFFA-$FFFF are left alone). Read as LDA $B31C,Y / $B31D,Y with Y = 2 x level.","t":"byte","b":[66],"x":[30667]},{"a":45853,"l":"tbl_level_graphics_hi","c":"High-byte column of $B31C (LDA $B31D,Y at $77D0); this span holds the rest of the eleven words, $B31D-$B331.","t":"byte","b":[17,66,14,66,11,66,29,66],"x":[30672]},{"a":45861,"t":"byte","b":[26,66,23,66,20,66,32,66]},{"a":45869,"t":"byte","b":[35,66,35,66,14]},{"a":45874,"l":"tbl_strip_quarter_lo","c":"Low bytes of the start offsets of the four quarters in which $77F7 rebuilds a landscape buffer: $78, $59, $3A, $1B (with $B336: $0078, $0159, $023A, $031B, from row 3 of the screen). $7816 writes it into the copy loop's operands at $787B and $787E.","t":"byte","b":[120,89,58,27],"x":[30742]},{"a":45878,"l":"tbl_strip_quarter_hi","c":"High-byte offsets 0-3 of the four rebuild quarters (with $B332), read at $781F and added to the screen page from $B33A.","t":"byte","b":[0,1,2,3],"x":[30751]},{"a":45882,"l":"tbl_screen_pages","c":"Page of each landscape buffer: $E0, $E4, $E8 for $E000, $E400 and $E800, indexed by buffer number at $7825, $7833 and $7A45.","t":"byte","b":[224,228,232],"x":[30757,30771,31301]},{"a":45885,"l":"tbl_speed_fraction","c":"Sub-pixel part of the horizontal speed for speed indices 0-6 ($B33D-$B343): 0, $20, $40, $80, 0, $80, 0; added to $B1F3 at $7BFD.","t":"byte","b":[0,32,64,128,0,128,0],"x":[31741]},{"a":45892,"l":"tbl_speed_whole","c":"Whole pixels of the horizontal speed for indices 0-6 ($B344-$B34A): 0, 0, 0, 0, 1, 1, 2. With $B33D: 0, 1/8, 1/4, 1/2, 1, 1.5 and 2 pixels a frame; added to $B1F2 at $7C0E.","t":"byte","b":[0,0,0,0,1,1,2],"x":[31758,31767]},{"a":45899,"l":"tbl_speed_back_fraction","c":"Sub-pixel part for the negative speeds -6..-1, index speed + 6 ($B34B-$B350): 0, $80, 0, $80, $40, $20; added to $B1F3 at $7BD8, a carry taking one more pixel off.","t":"byte","b":[0,128,0,128,64,32],"x":[31704]},{"a":45905,"l":"tbl_speed_back_whole","c":"Whole pixels subtracted for the negative speeds -6..-1 ($B351-$B356): 2, 1, 1, 0, 0, 0 ($7BE9, $7BF2).","t":"byte","b":[2,1,1,0,0,0],"x":[31721,31730]},{"a":45911,"l":"tbl_unreferenced_b357","c":"78 bytes ($B357-$B3A4) that nothing reads: no instruction in the traced code or in the untraced handlers reached through this range's tables addresses them. They run 00 40 80 00 00 00 00 00 00 00 01 02 03 04 00 00 00 00 80 40 04 03 02 01 ..., rows that look like further speed tables in the style of $B33D-$B356; purpose unknown.","t":"byte","b":[0,64,128,0,0,0,0,0]},{"a":45919,"t":"byte","b":[0,0,1,2,3,4,0,0]},{"a":45927,"t":"byte","b":[0,0,128,64,4,3,2,1]},{"a":45935,"t":"byte","b":[0,0,0,96,192,128,0,128]},{"a":45943,"t":"byte","b":[0,0,0,0,1,3,4,6]},{"a":45951,"t":"byte","b":[0,128,0,128,192,96,6,4]},{"a":45959,"t":"byte","b":[3,1,0,0,0,128,0,0]},{"a":45967,"t":"byte","b":[0,0,0,0,0,1,2,4]},{"a":45975,"t":"byte","b":[6,8,0,0,0,0,0,128]},{"a":45983,"t":"byte","b":[8,6,4,2,1,0]},{"a":45989,"l":"tbl_unreferenced_probe_cells","c":"The source form of the probe table $B3B6, not read by the game: $B3A5-$B3AD are the nine cell offsets of a three-by-three block (0, 1, 2, 40, 41, 42, 80, 81, 82) and $B3AE-$B3B5 are eight indices into them (7, 3, 5, 1, 6, 8, 0, 2), which give exactly the offsets stored at $B3B6.","t":"byte","b":[0,1,2,40,41,42,80,81]},{"a":45997,"t":"byte","b":[82,7,3,5,1,6,8,0]},{"a":46005,"t":"byte","b":[2]},{"a":46006,"l":"tbl_probe_cells","c":"Offsets of the eight cells tested around a sprite's three-by-three character block, from its top-left cell: $51 below, $28 left, $2A right, $01 above, then $50, $52, $00, $02 (the corners). $83AB tests them for the Wizball (solid from character $98) and $A6A0 for an alien (from $A0); the first solid cell picks a record of $B3BE or $B28C.","t":"byte","b":[81,40,42,1,80,82,0,2],"x":[33707,42656]},{"a":46014,"l":"tbl_wizball_bump_handlers","c":"Collision responses for the Wizball, one four-byte record per probe cell of $B3B6: two handler addresses, called one after the other by $83C4-$83E1. Below: $841A (bounce up) with $8404 (an RTS); left: $843E (reverse a leftward spin); right: $842F (reverse a rightward spin); above: $8405 (start falling); the corners combine them. All five handlers, $8404-$8443, are reached only through this table.","t":"byte","b":[26],"x":[33732]},{"a":46015,"l":"tbl_wizball_bump_handlers_1hi","c":"Column +1 of $B3BE: high byte of the first handler (LDA $B3BF,Y at $83CA).","t":"byte","b":[132],"x":[33738]},{"a":46016,"l":"tbl_wizball_bump_handlers_2lo","c":"Column +2 of $B3BE: low byte of the second handler (LDA $B3C0,Y at $83D5).","t":"byte","b":[4],"x":[33749]},{"a":46017,"l":"tbl_wizball_bump_handlers_2hi","c":"Column +3 of $B3BE: high byte of the second handler (LDA $B3C1,Y at $83DB); this span holds the rest of the eight records up to $B3DD, then four bytes that nothing reads, $B3DE-$B3E1: 0, $1A, $34, $4E.","t":"byte","b":[132,62,132,4,132,47,132,4],"x":[33755]},{"a":46025,"t":"byte","b":[132,5,132,4,132,26,132,62]},{"a":46033,"t":"byte","b":[132,26,132,47,132,5,132,62]},{"a":46041,"t":"byte","b":[132,5,132,47,132,0,26,52]},{"a":46049,"t":"byte","b":[78]},{"a":46050,"l":"display_list_play","c":"Display list for play, installed by $63B5 through the pointer at $B414: first raster line 1, then four-byte entries (band routine, raster line of the next band, 0), the last with next line 0. Bands: line 1 $B90C (sound), $14 $89BB (icon bar sprites, screen $EC00), $30 $8A52 (landscape sprites, NMI check), $3F $B903 (music), $41 $8A25 (landscape screen, scroll, background), the Wizball's line $8B0F (sprite 0 = Wizball), below it $8B22 (sprite 0 = beam or tube priority), $E5 $B8FC (music), $E8 $8BCB, $EE $8B46 (cauldron band), $F7 $8BBB, $FF $B8F3 (music).","t":"byte","b":[1,0,12,185,20,0,187,137]},{"a":46058,"t":"byte","b":[48,0,82,138,63,0,3,185]},{"a":46066,"t":"byte","b":[65,0,37,138]},{"a":46070,"l":"play_list_wizball_line","c":"Raster line at which the band $8B0F starts in the play list $B3E2 ($46 in the image): $8AC0 rewrites it every frame to the Wizball's sprite Y - 2, so sprite 0 can show the Wizball there.","t":"byte","b":[70,0,15,139],"x":[35520]},{"a":46074,"l":"play_list_below_wizball_line","c":"Raster line at which the band $8B22 starts in the play list ($50 in the image): $8AC9 rewrites it every frame to the Wizball's Y + $14, or during a tube ($8AD9) to that line rounded down to a character row, where sprite 0 changes to the beam's lower half or behind-scenery priority. The rest of the list follows, to $B413.","t":"byte","b":[80,0,34,139,229,0,252,184],"x":[35529,35545]},{"a":46082,"t":"byte","b":[232,0,203,139,238,0,70,139]},{"a":46090,"t":"byte","b":[247,0,187,139,255,0,243,184]},{"a":46098,"t":"byte","b":[0,0]},{"a":46100,"l":"ptr_display_list_play","c":"Pointer to the play display list $B3E2, low byte (LDX $B414 at $63AF).","t":"byte","b":[226],"x":[25519]},{"a":46101,"l":"ptr_display_list_play_hi","c":"High byte of the pointer to $B3E2 (LDY $B415 at $63B2).","t":"byte","b":[179],"x":[25522]},{"a":46102,"l":"display_list_title","c":"Display list of the title and high-score screen, installed by $8F89 through $B450: line 1 $AF85 (continue keys and BOREWIZ), $16 $B90C (sound), $23 $922C, $64 $B903, $6B $92A2, $93 $9327, $A0 $936A, $AD $B8FC, $AF $93A9, $C0 $93B0, $D0 $93B7, $E0 $93BE, $EE $B8F3, $F0 $93C5.","t":"byte","b":[1,0,133,175,22,0,12,185]},{"a":46110,"t":"byte","b":[35,0,44,146,100,0,3,185]},{"a":46118,"t":"byte","b":[107,0,162,146,147,0,39,147]},{"a":46126,"t":"byte","b":[160,0,106,147,173,0,252,184]},{"a":46134,"t":"byte","b":[175,0,169,147,192,0,176,147]},{"a":46142,"t":"byte","b":[208,0,183,147,224,0,190,147]},{"a":46150,"t":"byte","b":[238,0,243,184,240,0,197,147]},{"a":46158,"t":"byte","b":[0,0]},{"a":46160,"l":"ptr_display_list_title","c":"Pointer to the title display list $B416, low byte (LDX $B450 at $8F83).","t":"byte","b":[22],"x":[36739]},{"a":46161,"l":"ptr_display_list_title_hi","c":"High byte of the pointer to $B416 (LDY $B451 at $8F86).","t":"byte","b":[180],"x":[36742]},{"a":46162,"l":"display_list_menu","c":"Display list of the player menu, installed by $9020 through $B480: line 1 $AF85, $16 $B90C, $48 $93CC, $60 $93D9, $6A $B903, $78 $93E3, $90 $93ED, $A8 $93F7, $B2 $B8FC, $E6 $9419, $FF $B8F3.","t":"byte","b":[1,0,133,175,22,0,12,185]},{"a":46170,"t":"byte","b":[72,0,204,147,96,0,217,147]},{"a":46178,"t":"byte","b":[106,0,3,185,120,0,227,147]},{"a":46186,"t":"byte","b":[144,0,237,147,168,0,247,147]},{"a":46194,"t":"byte","b":[178,0,252,184,230,0,25,148]},{"a":46202,"t":"byte","b":[255,0,243,184,0,0]},{"a":46208,"l":"ptr_display_list_menu","c":"Pointer to the menu display list $B452, low byte (LDX $B480 at $901A).","t":"byte","b":[82],"x":[36890]},{"a":46209,"l":"ptr_display_list_menu_hi","c":"High byte of the pointer to $B452 (LDY $B481 at $901D).","t":"byte","b":[180],"x":[36893]},{"a":46210,"l":"display_list_name_entry","c":"Display list of the high-score name entry, installed by $6BA4 through $B4B0: line $16 $B90C, $2C $6DD5, $4E $6DDC, $6A $B903, $8E $6DE3, $A6 $6DEB, $B2 $B8FC, $B6 $6DF2, $CF $6DF9, $E6 $6E00, $FF $B8F3.","t":"byte","b":[22,0,12,185,44,0,213,109]},{"a":46218,"t":"byte","b":[78,0,220,109,106,0,3,185]},{"a":46226,"t":"byte","b":[142,0,227,109,166,0,235,109]},{"a":46234,"t":"byte","b":[178,0,252,184,182,0,242,109]},{"a":46242,"t":"byte","b":[207,0,249,109,230,0,0,110]},{"a":46250,"t":"byte","b":[255,0,243,184,0,0]},{"a":46256,"l":"ptr_display_list_name_entry","c":"Pointer to the name-entry display list $B482, low byte (LDX $B4B0 at $6B9E).","t":"byte","b":[130],"x":[27550]},{"a":46257,"l":"ptr_display_list_name_entry_hi","c":"High byte of the pointer to $B482 (LDY $B4B1 at $6BA1).","t":"byte","b":[180],"x":[27553]},{"a":46258,"l":"display_list_music_only","c":"Display list with nothing but the sound bands, used for \"get ready\" and game over, installed by $68A3 through $B4C4: line $16 $B90C, $64 $B903, $B2 $B8FC, $FF $B8F3.","t":"byte","b":[22,0,12,185,100,0,3,185]},{"a":46266,"t":"byte","b":[178,0,252,184,255,0,243,184]},{"a":46274,"t":"byte","b":[0,0]},{"a":46276,"l":"ptr_display_list_music_only","c":"Pointer to the display list $B4B2, low byte (LDX $B4C4 at $689D).","t":"byte","b":[178],"x":[26781]},{"a":46277,"l":"icon_sprite_positions_base","c":"High byte of the pointer to $B4B2 (LDY $B4C5 at $68A0), and the base of LDA $B4C5,X at $89BD (X = 8..1): the icon bar's sprite positions $B4C6-$B4CD, X and Y of sprites 0-3: ($58,$1A), ($74,$1A), ($90,$1A), ($AC,$1A).","t":"byte","b":[180,88,26,116,26,144,26,172],"x":[26784,35261]},{"a":46285,"l":"icon_sprite_positions_hi","c":"Sprite 3's Y ($1A) in the icon bar positions, and the base of LDA $B4CD,X at $89C3: $B4CE-$B4D5 position sprites 4-7: ($C8,$1A), ($E4,$1A), ($00,$1A) with the X high bit ($D010 = $40), and (0, 0). The seven icons sit 28 pixels apart.","t":"byte","b":[26,200,26,228,26,0,26,0],"x":[35267]},{"a":46293,"l":"icon_colours_base","c":"Sprite 7's Y (0) in the icon positions, and the base of the icon colours: LDA $B4D5,X at $89C9 (X = 8..1) copies $B4D6-$B4DD to $D027-$D02E; $7274 and $72A6 write them.","t":"byte","b":[0],"x":[29300,29350,35273]},{"a":46294,"l":"icon_colours","c":"Colours of the seven icons ($B4D6-$B4DC): $7269 paints them all light blue ($0E), or light red ($0A) in the Wiz-lab, and pulses the lit one ($72A6). $9689 copies icon 1's colour into a Wiztips display list ($95EE).","t":"byte","b":[14,14,14,14,14,14,14],"x":[38537]},{"a":46301,"l":"icon_pointers_base","c":"Sprite 7's colour in the icon bar ($0E), and the base of the icons' initial sprite images: LDA $B4DD,X at $720D (X = 8..1) copies $B4DE-$B4E5 to the pointers $EFF8-$EFFF at the start of each life, and $AFF3 copies the first six for the Wiz-lab.","t":"byte","b":[14],"x":[29197,45043]},{"a":46302,"l":"icon_initial_images","c":"Initial sprite images of the icon bar: 7 (thrust), $0B (beam), 2 (catelite), 6 (blazers), 8 (spray), 1 (smart bomb), 0 (shields), 0 ($B4DE-$B4E5). The icon handlers change them (3 anti-grav, 4 double, $0A the other spray, 9 blank when used up).","t":"byte","b":[7,11,2,6,8,1]},{"a":46308,"l":"message_sprite_x_base","c":"Shields' initial image (0) in the table above, and the base of LDA $B4E4,X at $6A49 and $AE61 (X = 8..1): $B4E5-$B4EC become the positions of message sprites 0-3 ($E7C4-$E7CB): (0,$7A), (0,$7A), ($74,$7A), ($8C,$7A); $B4E5 is also the icon bar's sprite 7 image (0).","t":"byte","b":[0,0,122,0,122,116,122,140],"x":[27209,44641]},{"a":46316,"l":"message_sprite_y_base","c":"Sprite 3's Y ($7A) and the base of LDA $B4EC,X at $6A4F and $AE67: $B4ED-$B4F4 position message sprites 4-7 ($E7CC-$E7D3): ($A4,$7A), ($BC,$7A), ($D4,$7A), ($EC,$7A), so sprites 2-7 make one row of text 24 pixels apart.","t":"byte","b":[122,164,122,188,122,212,122,236],"x":[27215,44647]},{"a":46324,"l":"message_sprite_colours_base","c":"Sprite 7's Y ($7A) and the base of LDA $B4F4,X at $6A55 and $AE6D: $B4F5-$B4FC are the message sprites' colours ($E7EB-$E7F2): 0, 0, then light blue ($0E) for sprites 2-7.","t":"byte","b":[122,0,0,14,14,14,14,14],"x":[27221,44653]},{"a":46332,"l":"message_sprite_images_base","c":"Sprite 7's colour ($0E) and the base of LDA $B4FC,X at $6A5B and $AE73: $B4FD-$B504 are the message sprites' images ($B525-$B52C): 0, 0, then $B4-$B9, the blocks into which $8DE4 draws the text (\"game over\", \"wot a wizace!\", \"level 1 completed\").","t":"byte","b":[14,0,0,180,181,182,183,184],"x":[27227,44659]},{"a":46340,"l":"cauldron_band_positions_base","c":"Message sprite 7's image ($B9), and the base of LDA $B504,X at $8B66 (X = 6..1): $B505-$B50A position sprites 0-2 of the cauldron band: ($44,$FC) the level number, ($82,$F8) the red cauldron, ($AC,$F8) the green one. $B50B/$B50C (0, $63) are not read.","t":"byte","b":[185,68,252,130,248,172,248,0],"x":[35686]},{"a":46348,"l":"cauldron_band_positions_hi","c":"Unread byte ($63) and the base of LDA $B50C,X at $8B6C: $B50D-$B512 position sprites 4-6 of the cauldron band: ($D6,$F8) the blue cauldron, ($14,$F8) with the X high bit ($D010 = $20) the target cauldron, and (0, 0). $B513 is not read.","t":"byte","b":[99,214,248,20,248,0,0,0],"x":[35692]},{"a":46356,"l":"cauldron_band_colours_base","c":"Unread byte ($63) and the base of LDA $B514,X at $8B72 (X = 6..1), which copies the cauldron band's sprite colours $B515-$B51A to $D027-$D02C.","t":"byte","b":[99],"x":[35698]},{"a":46357,"l":"level_number_colour","c":"Colour of sprite 0 of the cauldron band, the level number: $8BB4 rewrites it every frame from the red, green or blue pulse at $B5CB (offset $7701 = 0, 12 or 20 by level), so the number flashes in the level's cauldron colour. The next four bytes are the colours of sprites 1-4: red 2, green 5, 0 (unused), blue 6.","t":"byte","b":[1,2,5,0,6],"x":[35764]},{"a":46362,"l":"target_colour","c":"Target colour of the level: $77B8 sets it from the recipe $B1D1 (the next colour not yet made); it colours sprite 5, the fourth cauldron, and selects the recipe row at $B2C0 for the mix ($9E2C) and the lab ($AD24); $B51B after it is not read.","t":"byte","b":[8,0],"x":[30648,40492,44324]},{"a":46364,"l":"cauldron_band_images_base","c":"Unread byte (0) and the base of LDA $B51C,X at $8B78 (X = 6..1), which copies the cauldron band's sprite images $B51D-$B522 to the pointers $F7F8-$F7FD of the screen at $F400; $B51D is $A0, the block $770D draws the level number into.","t":"byte","b":[0,160],"x":[35704]},{"a":46366,"l":"red_cauldron_image","c":"Sprite 1's image in the cauldron band: $B9, the red cauldron; $38 (the empty cauldron template at $CE00) while the game-over or level-complete message is up ($69FF, $AE13), back to $B9 at $6AC5 and $AEEE. The next bytes are the images of sprites 2-5: $BA green, 0, $BB blue, $BC target; $B523 is not read.","t":"byte","b":[185,186,0,187,188,0],"x":[27135,27333,44563,44782]},{"a":46372,"l":"landscape_sprite_images_base","c":"Unread byte (0) and the base of STA $B524,X at $6A5E and $AE76 (X = 8..1), which load the message sprites' images into $B525-$B52C.","t":"byte","b":[0],"x":[27230,44662]},{"a":46373,"l":"wizball_image","c":"Sprite image of sprite 0 in the landscape band, the Wizball: $80E0 sets it to the rotation frame + $10 every frame; $8B15 writes it to the pointer $E3F8. First of the eight landscape sprite images $B525-$B52C, which $8AF9 copies to $E3F9-$E3FF (the aliens' images come from $A2F2).","t":"byte","b":[0],"x":[32992,35579,35605,41714]},{"a":46374,"l":"cat_image","c":"Sprite image of sprite 1 in the landscape band, the cat: $0D-$0F by its walk frame ($87EC); $B5 after a tube ($829B), $60 in the bonus stage ($664F).","t":"byte","b":[0],"x":[26191,33435,34796]},{"a":46375,"l":"sprite2_image","c":"Sprite image of sprite 2 in the landscape band: an alien, $B7 after a tube ($82A0), or the cat drinking its milk in the Wiz-lab ($AC32, frames from $AC4B).","t":"byte","b":[0],"x":[33440,44082]},{"a":46376,"l":"sprite3_image","c":"Sprite image of sprite 3 in the landscape band: an alien, $10 after a tube ($82D4), or the cat in the Wiz-lab ($ACDC, $AD4D).","t":"byte","b":[0],"x":[33492,44252,44365]},{"a":46377,"l":"sprite4_image","c":"Sprite image of sprite 4 in the landscape band: an alien or the cat's second sprite in the Wiz-lab ($AD0F, $AD53). $B52A-$B52C are sprites 5-7, the other aliens.","t":"byte","b":[0,0,0,0],"x":[44303,44371]},{"a":46381,"l":"tbl_unreferenced_directions","c":"Sixteen bytes that nothing reads ($B52D-$B53C): eight (x, y) steps round the compass, (0,1) (1,1) (1,0) (1,-1) (0,-1) (-1,-1) (-1,0) (-1,1). Purpose unknown.","t":"byte","b":[0,1,1,1,1,0,1,255]},{"a":46389,"t":"byte","b":[0,255,255,255,255,0,255,1]},{"a":46397,"l":"tbl_icon_pulse","c":"Colour pulse of the lit icon, six steps each ($B53D-$B548): blue 0, 6, $0E, $0F, $0E, 6 in play and red 0, 2, $0A, $0F, $0A, 2 in the Wiz-lab; $729E indexes it with $B25B (+6 in the lab).","t":"byte","b":[0,6,14,15,14,6,0,2],"x":[29342]},{"a":46405,"t":"byte","b":[10,15,10,2]},{"a":46409,"l":"tbl_icon_handlers","c":"Handler of each icon, one word per icon 0-7 ($B549-$B558), read by $730A/$7310 into the JMP at $7316: 1 $7379 thrust/anti-grav, 2 $734B beam/double, 3 $7366 catelite, 4 $731A blazers, 5 $7325 spray, 6 $7394 smart bomb, 7 $73B0 shields; word 0 ($7319) is an RTS. All but $7379 are reached only through this table (the flow tracer does not follow the JMP).","t":"byte","b":[25],"x":[29450]},{"a":46410,"l":"tbl_icon_handlers_hi","c":"High-byte column of $B549 (LDA $B54A,Y at $7310); the span holds the rest of the eight words.","t":"byte","b":[115,121,115,75,115,102,115,26],"x":[29456]},{"a":46418,"t":"byte","b":[115,37,115,148,115,176,115]},{"a":46425,"l":"tbl_unreferenced_b559","c":"24 bytes that nothing reads ($B559-$B570): 0, $0A, 5, $0F, 6, 8, $0A, $0C, $0E, 0, 2, $0A, $0C, $0E, 0, 2, 4, 6, $0E, 2, 4, 6, 8, $0A (colour-like values). Purpose unknown.","t":"byte","b":[0,10,5,15,6,8,10,12]},{"a":46433,"t":"byte","b":[14,0,2,10,12,14,0,2]},{"a":46441,"t":"byte","b":[4,6,14,2,4,6,8]},{"a":46448,"l":"title_logo_positions_base","c":"Last of the unread bytes above, and the base of LDA $B570,Y at $924B (Y = 10..1): $B571-$B57A position the five WIZBALL logo sprites of the title, X then Y: ($48,$3D), ($78,$3D), ($A8,$3D), ($D8,$3D), ($08,$3D) with the X high bit, double width.","t":"byte","b":[10,72,61,120,61,168,61,216],"x":[37451]},{"a":46456,"t":"byte","b":[61,8]},{"a":46458,"l":"title_best_score_positions_base","c":"Y of the last logo sprite ($3D), and the base of LDA $B57A,Y at $92DA (Y = 6..1): $B57B-$B580 position the three sprites showing \"1. 050000\" on the title: ($18,$76), ($48,$76), ($78,$76). The four pairs after them, $B581-$B588, are not read.","t":"byte","b":[61,24,118,72,118,120,118,168],"x":[37594]},{"a":46466,"t":"byte","b":[118,216,118,8,118,56,118]},{"a":46473,"l":"nmi_heartbeat_decrement","c":"Obscured DEC $85, the end of the bands $8B46 and $8BBB: LDA #0, then the illegal LXA #$FF ($AB), which leaves A = X = the chip's magic constant, then the illegal DCP $FF97,X ($DF: decrement and compare) and RTS. With the constant $EE, $FF97 + $EE wraps to $0085, the byte the NMI $7C61 clears every frame and that $8B04 and $9287 test the same way (LAX $86 / DCP $FF86,X, $86 = $FF). VICE's CPU core fixes LXA's constant at $EE with the comment \"needs to be 0xee for wizball\"; with another constant the decrement lands elsewhere.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[35768,35783]},{"a":46475,"s":"LXA #$FF (illegal): A = X = magic constant, $EE on VICE","t":"byte","b":[171],"note":"not a legal opcode"},{"a":46476,"t":"byte","b":[255],"note":"not a legal opcode"},{"a":46477,"t":"byte","b":[223],"note":"not a legal opcode"},{"a":46478,"t":"byte","b":[151],"note":"not a legal opcode"},{"a":46479,"t":"byte","b":[255],"note":"not a legal opcode"},{"a":46480,"t":"code","b":[96],"m":"rts"},{"a":46481,"l":"font_large_map","c":"Large-font map: for each screen code 0-$39 ($B591-$B5CA) the offset from glyph $40 of the top-left quarter of its two-by-two glyph in the set at $F000. Letters a-p (1-$10) map to $00-$1E, q-z to $40-$52, digits to $80-$92, space to $9C (blank), \"!\" to $54; codes $23-$28 (#$%&'() give $56-$5E and $94, the letters of the WIZBALL logo (W I Z B A L L). Unused codes give 0 (the a). Read by $8D99 (screen text, + $40, + $41, + $60, + $61) and $8E68 (sprite text).","t":"byte","b":[0,0,2,4,6,8,10,12],"x":[36250,36262,36280,36292,36456]},{"a":46489,"t":"byte","b":[14,16,18,20,22,24,26,28]},{"a":46497,"t":"byte","b":[30,64,66,68,70,72,74,76]},{"a":46505,"t":"byte","b":[78,80,82,0,0,0,0,0]},{"a":46513,"t":"byte","b":[156,84,0,86,88,90,92,94]},{"a":46521,"t":"byte","b":[148,0,0,0,0,0,0,0]},{"a":46529,"t":"byte","b":[128,130,132,134,136,138,140,142]},{"a":46537,"t":"byte","b":[144,146]},{"a":46539,"l":"tbl_pulse_red","c":"Red colour pulse, eight steps 0, 2, 4, $0A, 1, $0A, 4, 2 with four more after it ($B5CB-$B5D6, the last three unread): the current side's score digits ($67BD, step + 1), the level number on red levels ($8BB1) and two title colour cycles ($990F -> $EBF0, $99B6 -> $EBF2). $8BB1 reaches the green and blue pulses at +12 and +20.","t":"byte","b":[0,2,4,10,1,10,4,2],"x":[26557,35761,39183,39350]},{"a":46547,"t":"byte","b":[0,2,4,10]},{"a":46551,"l":"tbl_pulse_green","c":"Green colour pulse, eight steps 5, 0, 5, 7, $0D, 1, $0D, 7 ($B5D7-$B5DE): the lives digit in the score rows ($67B4) and the level number on green levels ($8BB1).","t":"byte","b":[5,0,5,7,13,1,13,7],"x":[26548]},{"a":46559,"l":"tbl_pulse_blue","c":"Blue colour pulse, eight steps 0, 6, 4, $0E, 1, $0E, 4, 6 ($B5DF-$B5E6): the aliens-left counter ($67B8), the level number on blue levels ($8BB1), the mutant cat ($8803) and two title cycles ($98E2 -> $EBD7, $9996 -> $EBF1).","t":"byte","b":[0,6,4,14,1,14,4,6],"x":[26552,34819,39138,39318]},{"a":46567,"l":"tbl_title_cycle_green","c":"Title colour cycle, eight steps 5, $0D, 1, $0D, 5, $0D, 1, $0D ($B5E7-$B5EE), stepped by $9943 into $EBD5.","t":"byte","b":[5,13,1,13,5,13,1,13],"x":[39235]},{"a":46575,"l":"tbl_title_cycle_blue","c":"Title colour cycle, four steps 0, 6, 3, $0E ($B5EF-$B5F2), stepped by $9963 into $EBD1, the background of the bands $922C, $6DF9 and $97D7.","t":"byte","b":[0,6,3,14],"x":[39267]},{"a":46579,"l":"tbl_title_cycle_brown","c":"Title colour cycle, four steps 2, 9, 8, 9 ($B5F3-$B5F6), stepped by $9976 into $EBD6, the background of the bands $931B, $6DEB and $9419; $B5F7-$B5FA (8, $0E, 3, $0D) after it are not read.","t":"byte","b":[2,9,8,9,8,14,3,13],"x":[39286]},{"a":46587,"l":"tbl_title_cycle_long","c":"Title colour cycle of 32 steps ($B5FB-$B61A): 5, $0D, 5, $0D, $0F, $0C, $0F, $0C, $0B, 6, 4, 3, $0E, $0A, 8, 9, 8, 9, 4, 2, 4, 2, 7, 1, 7, 1, $0A, 9, 8, 9, $0A, 1; $98B4 steps it every other call into $EBC9 and $EBCA, the middle of the ramp that $988F rolls. The last six steps are in the next span.","t":"byte","b":[5,13,5,13,15,12,15,12],"x":[39092]},{"a":46595,"t":"byte","b":[11,6,4,3,14,10,8,9]},{"a":46603,"t":"byte","b":[8,9,4,2,4,2,7,1]},{"a":46611,"t":"byte","b":[7,1]},{"a":46613,"l":"vector_check_base","c":"Steps 26-31 of the 32-step cycle $B5FB (and $B61B, unread), and the base of CMP $B615,X at $90FB: with X = $18-$1D that compares the hardware vectors at $FFFA-$FFFF with their source $B62D-$B632 on the \"get ready\" screen, and flickers the background ($9106, INC $D021) if they have been changed.","t":"byte","b":[10,9,8,9,10,1,1],"x":[37115]},{"a":46620,"l":"tbl_rainbow","c":"Twelve-colour rainbow 6, 2, 4, 5, 3, 7, 1, 7, 3, 5, 4, 2 ($B61C-$B627), for flashing text: $671E (the bonus-stage messages) and $B14C (the level-complete sprites) step through it with $6738. $B628-$B62A (6, $32, 5) after it are not read.","t":"byte","b":[6,2,4,5,3,7,1,7],"x":[26398,45388]},{"a":46628,"t":"byte","b":[3,5,4,2,6,50,5]},{"a":46635,"l":"tile_graphics_address","c":"Address of the landscape tiles, $2642 as a word with $B62C: $78F6 and $78FE add tile number x 25 + the character column 0-4 to it and read the tile's five rows 5 bytes apart (a tile is 5 by 5 characters, stored row by row). Low byte.","t":"byte","b":[66],"x":[30974]},{"a":46636,"l":"tile_graphics_address_hi","c":"High byte ($26) of the tile address $2642 (LDA $B62C at $78F6), and the base of LDA $B62C,X at $EC83 (X = 6..1), which copies the vectors that follow.","t":"byte","b":[38],"x":[30966,60547]},{"a":46637,"l":"hardware_vectors_source","c":"The game's hardware vectors, copied to $FFFA-$FFFF by the initialisation at $EC83: NMI $7C61, reset $0000, IRQ $7C73 ($B62D-$B632). $90F8 compares $FFFA-$FFFF with them again later (through the base $B615).","t":"byte","b":[97,124,0,0,115,124]},{"a":46643,"l":"text_mega_display","c":"Text page (records of column, row, PETSCII text, $FF; a further $FF ends the page) opening the high-score name entry: (2,5) \"what a mega display\", (10,8) \"of fun !!!\", (6,12) \"type your name\". Printed in the large font (colour 0) by $6C1E-$6C26 through the pointer $B7E2.","t":"byte","b":[2,5,87,72,65,84,32,65]},{"a":46651,"t":"byte","b":[32,77,69,71,65,32,68,73]},{"a":46659,"t":"byte","b":[83,80,76,65,89,255,10,8]},{"a":46667,"t":"byte","b":[79,70,32,70,85,78,32,33]},{"a":46675,"t":"byte","b":[33,33,255,6,12,84,89,80]},{"a":46683,"t":"byte","b":[69,32,89,79,85,82,32,78]},{"a":46691,"t":"byte","b":[65,77,69,255,255]},{"a":46696,"l":"text_few_words","c":"Text page (0,20) \"and also a few words\", printed in the large font by $6C94-$6C9C (pointer $B7E4) when a side has made the best score of both tables and may type the ten-character message shown on the title.","t":"byte","b":[0,20,65,78,68,32,65,76]},{"a":46704,"t":"byte","b":[83,79,32,65,32,70,69,87]},{"a":46712,"t":"byte","b":[32,87,79,82,68,83,255,255]},{"a":46720,"l":"text_wizard_feline","c":"Text page (10,15) \"wizard\", (24,15) \"feline\", printed in the normal font by $6C57-$6C5F (pointer $B7E6) over the two three-letter name fields of a team: the Wizball player's initials and the cat player's.","t":"byte","b":[10,15,87,73,90,65,82,68]},{"a":46728,"t":"byte","b":[255,24,15,70,69,76,73,78]},{"a":46736,"t":"byte","b":[69,255,255]},{"a":46739,"l":"text_wizball_logo","c":"The WIZBALL logo as a string for the large font: \"#$%&'((\" and $FF, whose codes $23-$28 map through $B591 to the logo letters W I Z B A L L. $8FB3-$8FBB draws it into sprite blocks $80-$84 (pointer $B7DA) for the title screen.","t":"byte","b":[35,36,37,38,39,40,40,255]},{"a":46747,"l":"text_best_message","c":"Text page for the title's best score: (20,8) ten spaces to clear the place, then (20,8) the best player's message (\"sensi soft\" in the image, at $B6AA). Printed in the large font, white, by $8FD2-$8FDA through $B7DE; the ten characters fill columns 20-39.","t":"byte","b":[20,8,32,32,32,32,32,32]},{"a":46755,"t":"byte","b":[32,32,32,32,255,20]},{"a":46761,"l":"best_message_base","c":"Row byte (8) of the message record, and the base of STA $B6A9,Y at $6CB0: with Y = 10 down to 1 the name entry writes the typed \"few words\" into $B6AA-$B6B3.","t":"byte","b":[8],"x":[27824]},{"a":46762,"l":"best_message","c":"The best player's message, ten PETSCII characters, \"SENSI SOFT\" until someone beats the best score of both tables; then the record's $FF and the page's closing $FF ($B6B4, $B6B5).","t":"byte","b":[83,69,78,83,73,32,83,79]},{"a":46770,"t":"byte","b":[70,84,255,255]},{"a":46774,"l":"text_player_menu","c":"Text page of the player menu, printed in the normal font by $9029-$9031 (pointer $B7E0): (15,3) \"one player\", (15,6) \"two player\", (12,9) \"two player team\", (14,12) \"three player\", (14,15) \"four  player\", (8,23) \"press space for wiztips\".","t":"byte","b":[15,3,79,78,69,32,80,76]},{"a":46782,"t":"byte","b":[65,89,69,82,255,15,6,84]},{"a":46790,"t":"byte","b":[87,79,32,80,76,65,89,69]},{"a":46798,"t":"byte","b":[82,255,12,9,84,87,79,32]},{"a":46806,"t":"byte","b":[80,76,65,89,69,82,32,84]},{"a":46814,"t":"byte","b":[69,65,77,255,14,12,84,72]},{"a":46822,"t":"byte","b":[82,69,69,32,80,76,65,89]},{"a":46830,"t":"byte","b":[69,82,255,14,15,70,79,85]},{"a":46838,"t":"byte","b":[82,32,32,80,76,65,89,69]},{"a":46846,"t":"byte","b":[82,255,8,23,80,82,69,83]},{"a":46854,"t":"byte","b":[83,32,83,80,65,67,69,32]},{"a":46862,"t":"byte","b":[70,79,82,32,87,73,90,84]},{"a":46870,"t":"byte","b":[73,80,83,255,255]},{"a":46875,"l":"tbl_get_ready_pages","c":"Text page for the \"get ready\" screen, one word per combination (16 words, $B71B-$B73A): $68C0-$68D6 builds the index 8 x (side playing - 1) + 4 x (sides - 1) + 2 x (side 2 team - 1) + (side 1 team - 1) from $BFD9-$BFD6. 0: $B73B get ready; 1: $B749 wizard; 4: $B760 player one; 5, 7: $B77B team one; 12, 13: $B79D player two; 15: $B7B8 team two; the other combinations do not occur and hold 0.","t":"byte","b":[59],"x":[26834]},{"a":46876,"l":"tbl_get_ready_pages_hi","c":"High-byte column of $B71B (LDA $B71C,Y at $68D6); the span holds the rest of the sixteen words.","t":"byte","b":[183,73,183,0,0,0,0,96],"x":[26838]},{"a":46884,"t":"byte","b":[183,123,183,0,0,123,183,0]},{"a":46892,"t":"byte","b":[0,0,0,0,0,0,0,157]},{"a":46900,"t":"byte","b":[183,157,183,0,0,184,183]},{"a":46907,"l":"text_get_ready","c":"Text page (10,10) \"get ready!\", shown in the large font before a one-player game ($68DC).","t":"byte","b":[10,10,71,69,84,32,82,69]},{"a":46915,"t":"byte","b":[65,68,89,33,255,255]},{"a":46921,"l":"text_wizard_press_fire","c":"Text page (15,8) \"wizard\", (11,12) \"press fire\": \"get ready\" for a two-player team, whose wizard chooses his port by pressing fire.","t":"byte","b":[15,8,87,73,90,65,82,68]},{"a":46929,"t":"byte","b":[255,11,12,80,82,69,83,83]},{"a":46937,"t":"byte","b":[32,70,73,82,69,255,255]},{"a":46944,"l":"text_ready_player_one","c":"Text page (11,8) \"player one\", (11,12) \"press fire\": \"get ready\" for side 1 playing alone in a two-side game.","t":"byte","b":[11,8,80,76,65,89,69,82]},{"a":46952,"t":"byte","b":[32,79,78,69,255,11,12,80]},{"a":46960,"t":"byte","b":[82,69,83,83,32,70,73,82]},{"a":46968,"t":"byte","b":[69,255,255]},{"a":46971,"l":"text_ready_team_one","c":"Text page (12,6) \"team one\", (15,10) \"wizard\", (11,14) \"press fire\": \"get ready\" for side 1 as a team in a three- or four-player game.","t":"byte","b":[12,6,84,69,65,77,32,79]},{"a":46979,"t":"byte","b":[78,69,255,15,10,87,73,90]},{"a":46987,"t":"byte","b":[65,82,68,255,11,14,80,82]},{"a":46995,"t":"byte","b":[69,83,83,32,70,73,82,69]},{"a":47003,"t":"byte","b":[255,255]},{"a":47005,"l":"text_ready_player_two","c":"Text page (11,8) \"player two\", (11,12) \"press fire\": \"get ready\" for side 2 playing alone.","t":"byte","b":[11,8,80,76,65,89,69,82]},{"a":47013,"t":"byte","b":[32,84,87,79,255,11,12,80]},{"a":47021,"t":"byte","b":[82,69,83,83,32,70,73,82]},{"a":47029,"t":"byte","b":[69,255,255]},{"a":47032,"l":"text_ready_team_two","c":"Text page (12,6) \"team two\", (15,10) \"wizard\", (11,14) \"press fire\": \"get ready\" for side 2 as a team (four players).","t":"byte","b":[12,6,84,69,65,77,32,84]},{"a":47040,"t":"byte","b":[87,79,255,15,10,87,73,90]},{"a":47048,"t":"byte","b":[65,82,68,255,11,14,80,82]},{"a":47056,"t":"byte","b":[69,83,83,32,70,73,82,69]},{"a":47064,"t":"byte","b":[255,255]},{"a":47066,"l":"ptr_text_logo","c":"Pointer to the logo string $B693, low byte (LDX $B7DA at $8FB3).","t":"byte","b":[147],"x":[36787]},{"a":47067,"l":"ptr_text_logo_hi","c":"High byte of the pointer to $B693 (LDY $B7DB at $8FB6).","t":"byte","b":[182],"x":[36790]},{"a":47068,"l":"ptr_text_best_score","c":"Pointer to the title's \"1. 050000\" string $BFE8, low byte (LDX $B7DC at $8FC7).","t":"byte","b":[232],"x":[36807]},{"a":47069,"l":"ptr_text_best_score_hi","c":"High byte of the pointer to $BFE8 (LDY $B7DD at $8FCA).","t":"byte","b":[191],"x":[36810]},{"a":47070,"l":"ptr_text_best_message","c":"Pointer to the best-message page $B69B, low byte (LDX $B7DE at $8FD2).","t":"byte","b":[155],"x":[36818]},{"a":47071,"l":"ptr_text_best_message_hi","c":"High byte of the pointer to $B69B (LDY $B7DF at $8FD5).","t":"byte","b":[182],"x":[36821]},{"a":47072,"l":"ptr_text_player_menu","c":"Pointer to the player menu page $B6B6, low byte (LDX $B7E0 at $9029).","t":"byte","b":[182],"x":[36905]},{"a":47073,"l":"ptr_text_player_menu_hi","c":"High byte of the pointer to $B6B6 (LDY $B7E1 at $902C).","t":"byte","b":[182],"x":[36908]},{"a":47074,"l":"ptr_text_mega_display","c":"Pointer to the name-entry page $B633, low byte (LDX $B7E2 at $6C1E).","t":"byte","b":[51],"x":[27678]},{"a":47075,"l":"ptr_text_mega_display_hi","c":"High byte of the pointer to $B633 (LDY $B7E3 at $6C21).","t":"byte","b":[182],"x":[27681]},{"a":47076,"l":"ptr_text_few_words","c":"Pointer to the page $B668, low byte (LDX $B7E4 at $6C94).","t":"byte","b":[104],"x":[27796]},{"a":47077,"l":"ptr_text_few_words_hi","c":"High byte of the pointer to $B668 (LDY $B7E5 at $6C97).","t":"byte","b":[182],"x":[27799]},{"a":47078,"l":"ptr_text_wizard_feline","c":"Pointer to the page $B680, low byte (LDX $B7E6 at $6C57).","t":"byte","b":[128],"x":[27735]},{"a":47079,"l":"ptr_text_wizard_feline_hi","c":"High byte of the pointer to $B680 (LDY $B7E7 at $6C5A).","t":"byte","b":[182],"x":[27738]},{"a":47080,"l":"text_colour_completed","c":"Text page (11,10) \"colour completed\", (9,12) \"laboratory  imminent\": entries 1 and 4 of the message table at $6739, printed in the normal font in the rainbow colours of $B61C by $66FC when a colour is complete and the bonus stage begins.","t":"byte","b":[11,10,67,79,76,79,85,82]},{"a":47088,"t":"byte","b":[32,67,79,77,80,76,69,84]},{"a":47096,"t":"byte","b":[69,68,255,9,12,76,65,66]},{"a":47104,"t":"byte","b":[79,82,65,84,79,82,89,32]},{"a":47112,"t":"byte","b":[32,73,77,77,73,78,69,78]},{"a":47120,"t":"byte","b":[84,255,255]},{"a":47123,"l":"text_congratulations","c":"Text page (11,6) \"congratulations!\", continuing with the tally records at $B826: entry 2 of the message table $6739, shown when the bonus wave has been survived ($6733 = 3).","t":"byte","b":[11,6,67,79,78,71,82,65]},{"a":47131,"t":"byte","b":[84,85,76,65,84,73,79,78]},{"a":47139,"t":"byte","b":[83,33,255]},{"a":47142,"l":"text_bonus_tally","c":"Text records (13,8) \"tishshshshsh\" and (15,12) \"x  40  x  000\" (aliens shot x 40 points), the tail of the page $B813 and also a page of its own: entry 3 of the message table $6739, shown without the congratulations when the bonus stage ended in a collision ($6733 = 2).","t":"byte","b":[13,8,84,73,83,72,83,72]},{"a":47150,"t":"byte","b":[83,72,83,72,83,72,255,15]},{"a":47158,"t":"byte","b":[12,88,32,32,52,48,32,32]},{"a":47166,"t":"byte","b":[88,32,32]},{"a":47169,"l":"tally_hundreds","c":"Hundreds digit of the bonus tally inside \"x  40  x  000\" (PETSCII, a space while zero): $6693 counts the tally up to the number of aliens shot ($A858), one every second frame with 40 points each, carrying through $B843, $B842 and here; $66E9 resets the three digits to \"  0\".","t":"byte","b":[48],"x":[26329,26332,26341,26352]},{"a":47170,"l":"tally_tens","c":"Tens digit of the bonus tally in \"x  40  x  000\" (a space while zero), carried into at $66C1.","t":"byte","b":[48],"x":[26305,26308,26317,26326,26355]},{"a":47171,"l":"tally_units","c":"Units digit of the bonus tally in \"x  40  x  000\", incremented at $66B2; then the record's $FF and the page's closing $FF.","t":"byte","b":[48,255,255],"x":[26290,26293,26302,26360]},{"a":47174,"l":"text_wot_a_wizace","c":"String \"  wot a wizace!  \" and $FF (17 characters, no position): $AE3C-$AE44 draws it in the normal font into the message sprites from block $B4 (pointer $B86C) when a level is complete.","t":"byte","b":[32,32,87,79,84,32,65,32]},{"a":47182,"t":"byte","b":[87,73,90,65,67,69,33,32]},{"a":47190,"t":"byte","b":[32,255]},{"a":47192,"l":"text_level_completed","c":"String \"level 1 completed\" and $FF, drawn into the same sprites $21 bytes lower by $AE4C-$AE54 (pointer $B86A); the digit at $B85E is set to the level first.","t":"byte","b":[76,69,86,69,76,32]},{"a":47198,"l":"level_completed_digit","c":"The digit of \"level 1 completed\": $AE39 writes the level + \"1\" before the string is drawn. The rest of the string, \" completed\" and $FF, follows.","t":"byte","b":[49,32,67,79,77,80,76,69],"x":[44601]},{"a":47206,"t":"byte","b":[84,69,68,255]},{"a":47210,"l":"ptr_text_level_completed","c":"Pointer to \"level 1 completed\" $B858, low byte (LDX $B86A at $AE4C).","t":"byte","b":[88],"x":[44620]},{"a":47211,"l":"ptr_text_level_completed_hi","c":"High byte of the pointer to $B858 (LDY $B86B at $AE4F).","t":"byte","b":[184],"x":[44623]},{"a":47212,"l":"ptr_text_wot_a_wizace","c":"Pointer to \"  wot a wizace!  \" $B846, low byte (LDX $B86C at $AE3C).","t":"byte","b":[70],"x":[44604]},{"a":47213,"l":"ptr_text_wot_a_wizace_hi","c":"High byte of the pointer to $B846 (LDY $B86D at $AE3F).","t":"byte","b":[184],"x":[44607]},{"a":47214,"l":"tbl_wiztips_display_lists","c":"Display list of each Wiztips page, one word per page 0-2: $9549, $957B, $95A1 ($B86E-$B873), read with Y = 2 x page at $9461 and installed through $7CB4.","t":"byte","b":[73],"x":[37985]},{"a":47215,"l":"tbl_wiztips_display_lists_hi","c":"High-byte column of $B86E (LDA $B86F,Y at $9465); the span holds the rest of the three words.","t":"byte","b":[149,123,149,161,149],"x":[37989]},{"a":47220,"l":"bonus_stage","c":"Space bonus stage flag. $9E26 copies into it, every frame, the middle byte of the top row of the fourth cauldron's sprite ($EF01): 0 while the mix is below 20 units, $AA once $9E81 has drawn that row full, so a completed colour switches the frame loop at $6414 to the bonus stage ($646F). 6 in the Wiz-lab ($AB35), cleared at $63CF and $AAFE. While set there is no landscape ($7666), collisions always kill, even with BOREWIZ ($7EEF), the Wizball moves freely ($7F0B), text goes to the landscape screen ($8D09), and the tube, alien counter and landscape collision code stand down ($836E, $9EFD, $A683).","t":"byte","b":[0],"x":[25551,25620,30310,32226,32495,32523,33646,36105,40489,40701,42627,43355,43774,43829,44451]},{"a":47221,"l":"tbl_alien_fade","c":"Colours of a dying alien ($B875-$B878): black, dark grey, grey, light grey, stepped every fourth frame by $A32F until it is removed. $B879-$B87C (4, 3, 7, 1) are not read.","t":"byte","b":[0,11,12,15,4,3,7,1],"x":[41775]},{"a":47229,"l":"tbl_flash_colours","c":"Four flash colours, light green, light blue, white, yellow ($B87D-$B880): the \"get ready\" rings step through them ($6946) and aliens flash with them ($A2E7).","t":"byte","b":[13,14,1,7],"x":[26950,41703]},{"a":47233,"l":"tbl_beam_colours","c":"Colours of the beam, light green, light blue, white, red ($B881-$B884), stepped by $B8DD at $85DF.","t":"byte","b":[13,14,1,2],"x":[34271]},{"a":47237,"l":"tbl_bullet_colours","c":"Colour RAM values for the aliens' character bullets, eight steps: white alternating with purple, blue, yellow and red ($B885-$B88C), stepped per bullet at $9ABD.","t":"byte","b":[1,4,1,6,1,7,1,2],"x":[39613]},{"a":47245,"l":"rings_colour_timer","c":"Frame counter on the \"get ready\" screen: every fifth frame $692E steps $B88E.","t":"byte","b":[0],"x":[26926,26929,26938]},{"a":47246,"l":"rings_colour_step","c":"Step of the \"get ready\" rings' colour: its low two bits index $B87D, written to all eight sprites at $694B.","t":"byte","b":[0],"x":[26941,26944]},{"a":47247,"l":"hud_flash_timer","c":"Frame counter for the score rows' colours: every fourth frame $67A1 steps $B890.","t":"byte","b":[0],"x":[26529,26532]},{"a":47248,"l":"hud_flash_step","c":"Step of the score rows' colour cycle: its low three bits index the pulses at $B5CB (the side playing's score), $B5D7 (the lives digit) and $B5DF (the aliens-left counter) in $67A1.","t":"byte","b":[0],"x":[26539,26542]},{"a":47249,"l":"tbl_star_pixels","c":"Pixel masks for the stars, four rows of four ($B891-$B8A0), row = twinkle phase, column = pixel pair 0-3: $80 $20 $08 $02, $40 $10 $04 $01, blank, and $C0 $30 $0C $03; in the multicolour background characters the three non-blank rows give the star the three landscape colours. Read at $74FE and $7564.","t":"byte","b":[128,32,8,2,64,16,4,1],"x":[29950,30052]},{"a":47257,"t":"byte","b":[0,0,0,0,192,48,12,3]},{"a":47265,"l":"tbl_star_speeds","c":"Star speeds, four layers of eight speeds ($B8A1-$B8C0), index = layer + |scroll speed| from $B1B6 and $B1F4: 0 1 2 4 8 12 16 0 / 0 2 4 8 16 24 32 0 / 0 3 6 12 24 36 48 0 / 0 4 8 16 32 48 64 0, in 1/32 of a double-width pixel; subtracted or added at $74B7 and $7512.","t":"byte","b":[0,1,2,4,8,12,16,0],"x":[29879,29970]},{"a":47273,"t":"byte","b":[0,2,4,8,16,24,32,0]},{"a":47281,"t":"byte","b":[0,3,6,12,24,36,48,0]},{"a":47289,"t":"byte","b":[0,4,8,16,32,48,64,0]},{"a":47297,"l":"tbl_spray_shots","c":"Spray pattern, six records of three bytes ($B8C1-$B8D2): x step, y step, bullet character. Downward set: (-1,+1,$77), (0,+1,$76), (+1,+1,$78); upward set from $B8CA: (+1,-1,$77), (0,-1,$76), (-1,-1,$78). $852F-$853B fire one set per shot into the bullet slots $24-$3C of $0480, alternating by $B23B.","t":"byte","b":[255],"x":[34095]},{"a":47298,"l":"tbl_spray_shots_dy","c":"Column +1 of the spray table $B8C1, the y step (LDA $B8C2,Y at $8535).","t":"byte","b":[1],"x":[34101]},{"a":47299,"l":"tbl_spray_shots_char","c":"Column +2 of the spray table $B8C1, the bullet character (LDA $B8C3,Y at $853B); the span holds the rest of the records.","t":"byte","b":[119,0,1,118,1,1,120,1],"x":[34107]},{"a":47307,"t":"byte","b":[255,119,0,255,118,255,255,120]},{"a":47315,"l":"tbl_shot_chars","c":"Shot character for each pixel row 0-7 of the shooter's Y: $79 $79 $7A $7A $7A $7B $7B $7B ($B8D3-$B8DA), so the bullet sits at the right height in its character cell; +3 with blazers. Read at $84E0 (Wizball) and $888A (cat).","t":"byte","b":[121,121,122,122,122,123,123,123],"x":[34016,34954]},{"a":47323,"l":"beam_timer","c":"Frame counter of the beam: $85A9 steps the beam phase $B8DC every fourth frame; odd frames blank its colour.","t":"byte","b":[0],"x":[33906,34217,34220,34227,34277]},{"a":47324,"l":"beam_phase","c":"Beam phase: a shot starts it at 1 ($8472) if it is idle; $85B6 steps it every fourth frame through 2 and 3 and back to 0, so the beam lasts twelve frames. While non-zero $8592 tests the beam for hits ($85F2).","t":"byte","b":[0],"x":[33901,33911,34200,34230,34236,34243,34247,34256,43733]},{"a":47325,"l":"beam_colour_step","c":"Colour step of the beam ($85B9): its low two bits index $B881.","t":"byte","b":[0],"x":[34233,34265]},{"a":47326,"l":"beam_image_upper","c":"Sprite image of the beam's upper part, $3E + 2 x phase ($85CD), 5 (blank) when idle: shown by sprite 0 in the band at $8A8B above the Wizball.","t":"byte","b":[0],"x":[29218,34207,34253,35467,43744]},{"a":47327,"l":"beam_image_lower","c":"Sprite image of the beam's lower part, $3F + 2 x phase ($85D6), 5 when idle: shown by sprite 0 below the Wizball in the band $8B22.","t":"byte","b":[0],"x":[29221,34210,34262,35641,43747]},{"a":47328,"l":"beam_colour","c":"Colour of the beam sprite ($85E2), 0 on odd frames; written to $D027 at $8A85, $8AF3 and $8B3F.","t":"byte","b":[0],"x":[34274,34286,35461,35571,35647]},{"a":47329,"l":"tbl_bullet_chars","c":"Characters for the aliens' bullets, sixteen pre-shifted dots $5B-$6A ($B8E1-$B8F0), index = fine x / 8 + 4 x (fine y / 8), the bullet's place in its cell in 2-pixel steps (fine x and y count 0-31 per cell; $9A9B-$9AAC).","t":"byte","b":[91,92,93,94,95,96,97,98],"x":[39596]},{"a":47337,"t":"byte","b":[99,100,101,102,103,104,105,106]},{"a":47345,"l":"music_voices","c":"Which voices the music uses: 0 = none (the sound effects get all three), 1 = voice 3 only (effects on voices 1 and 2), 2 = all three (no effects). Read by the sound band $B90C and by $4576 (the firing sound picks its alternative only when there is no music). Set by the screens that start a tune (2 at $8F6F, $6911, $6BC5, $6A8C...; 1 in play at $6569, $6974, $8938; 0 at $7DC0 for the explosion) and cleared by $45BD-$45C4, every frame from $6411, once voice 3's part of the tune has stopped ($5522 returns $5B = 0).","t":"byte","b":[2],"x":[17782,17860,25853,25944,25961,26897,26996,27276,27589,32192,35128,36719,41336,43872,43885,44535,44571,47385,47397]},{"a":47346,"l":"music_speed","c":"Music tempo: 0 = the music runs once a frame (band $B90C only), 1 = twice ($B8FC too), 2 = four times ($B903 and $B8F3 as well). The title, \"get ready\" and name-entry screens use 2 ($8F72, $690E, $6BC8); play uses 0 ($6979, $ADFC) and the bonus stage 1 or 0 ($6570).","t":"byte","b":[2],"x":[25858,25968,26894,27001,27592,36722,43875,43888,44540,47348,47357,47364]},{"a":47347,"l":"music_tick_4x_b","c":"Sound band present in every display list (the last one, raster line $FF, in the play list): re-enables interrupts (CLI) and, when the music tempo $B8F2 is 2, runs the music once more through $B925. With $B90C, $B8FC and $B903 it is the sound driver's clock, not a sprite multiplexer: the music runs 1, 2 or 4 times a frame.","t":"code","b":[88],"m":"cli"},{"a":47348,"t":"code","b":[173,242,184],"m":"lda","o":"music_speed","oa":47346},{"a":47351,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":47353,"t":"code","b":[240,42],"m":"beq","o":"b_B925","oa":47397},{"a":47355,"t":"code","b":[96],"m":"rts"},{"a":47356,"l":"music_tick_2x","c":"Sound band (raster line $E5 in the play list): CLI, then one more run of the music ($B925) when the tempo $B8F2 is 1 or 2.","t":"code","b":[88],"m":"cli"},{"a":47357,"t":"code","b":[173,242,184],"m":"lda","o":"music_speed","oa":47346},{"a":47360,"t":"code","b":[208,35],"m":"bne","o":"b_B925","oa":47397},{"a":47362,"t":"code","b":[96],"m":"rts"},{"a":47363,"l":"music_tick_4x_a","c":"Sound band (raster line $3F in the play list): CLI, then one more run of the music ($B925) when the tempo $B8F2 is 2.","t":"code","b":[88],"m":"cli"},{"a":47364,"t":"code","b":[173,242,184],"m":"lda","o":"music_speed","oa":47346},{"a":47367,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":47369,"t":"code","b":[240,26],"m":"beq","o":"b_B925","oa":47397},{"a":47371,"t":"code","b":[96],"m":"rts"},{"a":47372,"l":"sound_frame","c":"Main sound band, run once a frame near the top of every display list (raster line 1 in the play list, $16 on the other screens): CLI so later bands can interrupt it, steps the volume fade ($45D0), writes volume and filter mode ($45CF OR $B94D) to $D418, runs the sound effects on the voices the music leaves free ($B94E for all three when $B8F1 = 0, $B955 for voices 2 and 1 when $B8F1 = 1), then at $B925 the music: voice 3 only ($53D7, $4FD5, $4CB7) when $B8F1 = 1, all three ($50F4, $4D4E, $5269, $4E86 and those three) when 2; and $D418 again.","t":"code","b":[88],"m":"cli"},{"a":47373,"t":"code","b":[32,208,69],"m":"jsr","o":"step_music_fade","oa":17872},{"a":47376,"t":"code","b":[173,207,69],"m":"lda","o":"music_volume","oa":17871},{"a":47379,"t":"code","b":[13,77,185],"m":"ora","o":"music_filter_mode","oa":47437},{"a":47382,"t":"code","b":[141,24,212],"m":"sta","o":"sid_filter_mode_volume"},{"a":47385,"t":"code","b":[173,241,184],"m":"lda","o":"music_voices","oa":47345},{"a":47388,"t":"code","b":[240,48],"m":"beq","o":"sfx_update_all_voices","oa":47438},{"a":47390,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":47392,"t":"code","b":[240,3],"m":"beq","o":"b_B925","oa":47397},{"a":47394,"t":"code","b":[32,85,185],"m":"jsr","o":"sfx_update_voices_2_1","oa":47445},{"a":47397,"l":"b_B925","t":"code","b":[173,241,184],"m":"lda","o":"music_voices","oa":47345,"x":[47353,47360,47369,47392]},{"a":47400,"t":"code","b":[240,34],"m":"beq","o":"r_B94C","oa":47436},{"a":47402,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":47404,"t":"code","b":[240,12],"m":"beq","o":"b_B93A","oa":47418},{"a":47406,"t":"code","b":[32,244,80],"m":"jsr","o":"v1_shape_sound","oa":20724},{"a":47409,"t":"code","b":[32,78,77],"m":"jsr","o":"v1_tick","oa":19790},{"a":47412,"t":"code","b":[32,105,82],"m":"jsr","o":"v2_shape_sound","oa":21097},{"a":47415,"t":"code","b":[32,134,78],"m":"jsr","o":"v2_tick","oa":20102},{"a":47418,"l":"b_B93A","t":"code","b":[32,215,83],"m":"jsr","o":"v3_shape_sound","oa":21463,"x":[47404]},{"a":47421,"t":"code","b":[32,213,79],"m":"jsr","o":"v3_tick","oa":20437},{"a":47424,"t":"code","b":[32,183,76],"m":"jsr","o":"update_filter_sweep","oa":19639},{"a":47427,"t":"code","b":[173,207,69],"m":"lda","o":"music_volume","oa":17871},{"a":47430,"t":"code","b":[13,77,185],"m":"ora","o":"music_filter_mode","oa":47437},{"a":47433,"t":"code","b":[141,24,212],"m":"sta","o":"sid_filter_mode_volume"},{"a":47436,"l":"r_B94C","t":"code","b":[96],"m":"rts","x":[47400]},{"a":47437,"l":"music_filter_mode","c":"Filter-mode bits ORed with the volume into $D418 by $B913 and $B946: $70 (low, band and high pass) for the title tune $1A, $10 (low pass) for every other tune ($45F1); 0 once voice 3's part of the tune has stopped ($45C7).","t":"byte","b":[0],"x":[17863,17913,47379,47430]},{"a":47438,"l":"sfx_update_all_voices","c":"Runs the sound effect of voice 3 (state at $0440, SID registers at $D40E) and falls into $B955 for voices 2 and 1: taken from $B91C when no music is playing ($B8F1 = 0).","t":"code","b":[160,14],"m":"ldy","o":"#$0E","x":[47388]},{"a":47440,"t":"code","b":[162,64],"m":"ldx","o":"#$40"},{"a":47442,"t":"code","b":[32,96,185],"m":"jsr","o":"sfx_update_voice","oa":47456},{"a":47445,"l":"sfx_update_voices_2_1","c":"Runs the sound effects of voice 2 (state at $0420, SID $D407) and, falling into $B960, voice 1 ($0400, $D400): called from $B922 when the music has voice 3 ($B8F1 = 1).","t":"code","b":[160,7],"m":"ldy","o":"#$07","x":[47394]},{"a":47447,"t":"code","b":[162,32],"m":"ldx","o":"#$20"},{"a":47449,"t":"code","b":[32,96,185],"m":"jsr","o":"sfx_update_voice","oa":47456},{"a":47452,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":47454,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":47456,"l":"sfx_update_voice","c":"Plays one frame of the sound effect on one voice; X = the voice's state offset ($00, $20, $40 into $0400-$045F, 24 bytes loaded from an effect record by $4553), Y = its SID register offset (0, 7, $0E). On the first frame ($0406 = 0) it writes 0 to the control register. The frequency ($0407/$0408) and the pulse width ($040D/$040E) each sweep up by a step ($0409/$040A, $040F/$0410) for a number of frames ($040B, $0411) and down for another ($040C, $0412), direction flags $0413/$0415 and counters $0414/$0416. It writes attack/decay ($0405), sustain/release ($0417), frequency and pulse width to the SID, then the control byte $0404 with the gate on while the length $0402 or after it the tail count $0403 runs down, and 0 when both are spent. While $0402 is non-zero the voice is busy: $4592 lets a new effect take it only if the new priority byte is not greater than the playing one's (smaller numbers win).","t":"code","b":[189,6,4],"m":"lda","o":"sfx_slot_started,x","oa":1030,"x":[47442,47449]},{"a":47459,"t":"code","b":[208,8],"m":"bne","o":"b_B96D","oa":47469},{"a":47461,"t":"code","b":[254,6,4],"m":"inc","o":"sfx_slot_started,x","oa":1030},{"a":47464,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":47466,"t":"code","b":[153,4,212],"m":"sta","o":"sid_v1_control,y"},{"a":47469,"l":"b_B96D","t":"code","b":[189,19,4],"m":"lda","o":"sfx_slot_freq_dir,x","oa":1043,"x":[47459]},{"a":47472,"t":"code","b":[208,18],"m":"bne","o":"b_B984","oa":47492},{"a":47474,"t":"code","b":[189,20,4],"m":"lda","o":"sfx_slot_freq_count,x","oa":1044},{"a":47477,"t":"code","b":[208,62],"m":"bne","o":"b_B9B5","oa":47541},{"a":47479,"t":"code","b":[189,11,4],"m":"lda","o":"sfx_slot_freq_up_frames,x","oa":1035},{"a":47482,"t":"code","b":[157,20,4],"m":"sta","o":"sfx_slot_freq_count,x","oa":1044},{"a":47485,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":47487,"t":"code","b":[157,19,4],"m":"sta","o":"sfx_slot_freq_dir,x","oa":1043},{"a":47490,"t":"code","b":[208,18],"m":"bne","o":"b_B996","oa":47510},{"a":47492,"l":"b_B984","t":"code","b":[189,20,4],"m":"lda","o":"sfx_slot_freq_count,x","oa":1044,"x":[47472]},{"a":47495,"t":"code","b":[208,13],"m":"bne","o":"b_B996","oa":47510},{"a":47497,"t":"code","b":[189,12,4],"m":"lda","o":"sfx_slot_freq_down_frames,x","oa":1036},{"a":47500,"t":"code","b":[157,20,4],"m":"sta","o":"sfx_slot_freq_count,x","oa":1044},{"a":47503,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":47505,"t":"code","b":[157,19,4],"m":"sta","o":"sfx_slot_freq_dir,x","oa":1043},{"a":47508,"t":"code","b":[240,31],"m":"beq","o":"b_B9B5","oa":47541},{"a":47510,"l":"b_B996","t":"code","b":[222,20,4],"m":"dec","o":"sfx_slot_freq_count,x","oa":1044,"x":[47490,47495]},{"a":47513,"t":"code","b":[189,7,4],"m":"lda","o":"sfx_slot_freq_lo,x","oa":1031},{"a":47516,"t":"code","b":[24],"m":"clc"},{"a":47517,"t":"code","b":[125,9,4],"m":"adc","o":"sfx_slot_freq_step_lo,x","oa":1033},{"a":47520,"t":"code","b":[157,7,4],"m":"sta","o":"sfx_slot_freq_lo,x","oa":1031},{"a":47523,"t":"code","b":[144,3],"m":"bcc","o":"b_B9A8","oa":47528},{"a":47525,"t":"code","b":[254,8,4],"m":"inc","o":"sfx_slot_freq_hi,x","oa":1032},{"a":47528,"l":"b_B9A8","t":"code","b":[189,8,4],"m":"lda","o":"sfx_slot_freq_hi,x","oa":1032,"x":[47523]},{"a":47531,"t":"code","b":[24],"m":"clc"},{"a":47532,"t":"code","b":[125,10,4],"m":"adc","o":"sfx_slot_freq_step_hi,x","oa":1034},{"a":47535,"t":"code","b":[157,8,4],"m":"sta","o":"sfx_slot_freq_hi,x","oa":1032},{"a":47538,"t":"code","b":[76,212,185],"m":"jmp","o":"j_B9D4","oa":47572},{"a":47541,"l":"b_B9B5","t":"code","b":[222,20,4],"m":"dec","o":"sfx_slot_freq_count,x","oa":1044,"x":[47477,47508]},{"a":47544,"t":"code","b":[189,7,4],"m":"lda","o":"sfx_slot_freq_lo,x","oa":1031},{"a":47547,"t":"code","b":[56],"m":"sec"},{"a":47548,"t":"code","b":[253,9,4],"m":"sbc","o":"sfx_slot_freq_step_lo,x","oa":1033},{"a":47551,"t":"code","b":[157,7,4],"m":"sta","o":"sfx_slot_freq_lo,x","oa":1031},{"a":47554,"t":"code","b":[176,3],"m":"bcs","o":"b_B9C7","oa":47559},{"a":47556,"t":"code","b":[222,8,4],"m":"dec","o":"sfx_slot_freq_hi,x","oa":1032},{"a":47559,"l":"b_B9C7","t":"code","b":[189,8,4],"m":"lda","o":"sfx_slot_freq_hi,x","oa":1032,"x":[47554]},{"a":47562,"t":"code","b":[56],"m":"sec"},{"a":47563,"t":"code","b":[253,10,4],"m":"sbc","o":"sfx_slot_freq_step_hi,x","oa":1034},{"a":47566,"t":"code","b":[157,8,4],"m":"sta","o":"sfx_slot_freq_hi,x","oa":1032},{"a":47569,"t":"code","b":[76,212,185],"m":"jmp","o":"j_B9D4","oa":47572},{"a":47572,"l":"j_B9D4","t":"code","b":[189,21,4],"m":"lda","o":"sfx_slot_pulse_dir,x","oa":1045,"x":[47538,47569]},{"a":47575,"t":"code","b":[208,18],"m":"bne","o":"b_B9EB","oa":47595},{"a":47577,"t":"code","b":[189,22,4],"m":"lda","o":"sfx_slot_pulse_count,x","oa":1046},{"a":47580,"t":"code","b":[208,62],"m":"bne","o":"b_BA1C","oa":47644},{"a":47582,"t":"code","b":[189,17,4],"m":"lda","o":"sfx_slot_pulse_up_frames,x","oa":1041},{"a":47585,"t":"code","b":[157,22,4],"m":"sta","o":"sfx_slot_pulse_count,x","oa":1046},{"a":47588,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":47590,"t":"code","b":[157,21,4],"m":"sta","o":"sfx_slot_pulse_dir,x","oa":1045},{"a":47593,"t":"code","b":[208,18],"m":"bne","o":"b_B9FD","oa":47613},{"a":47595,"l":"b_B9EB","t":"code","b":[189,22,4],"m":"lda","o":"sfx_slot_pulse_count,x","oa":1046,"x":[47575]},{"a":47598,"t":"code","b":[208,13],"m":"bne","o":"b_B9FD","oa":47613},{"a":47600,"t":"code","b":[189,18,4],"m":"lda","o":"sfx_slot_pulse_down_frames,x","oa":1042},{"a":47603,"t":"code","b":[157,22,4],"m":"sta","o":"sfx_slot_pulse_count,x","oa":1046},{"a":47606,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":47608,"t":"code","b":[157,21,4],"m":"sta","o":"sfx_slot_pulse_dir,x","oa":1045},{"a":47611,"t":"code","b":[240,31],"m":"beq","o":"b_BA1C","oa":47644},{"a":47613,"l":"b_B9FD","t":"code","b":[222,22,4],"m":"dec","o":"sfx_slot_pulse_count,x","oa":1046,"x":[47593,47598]},{"a":47616,"t":"code","b":[189,13,4],"m":"lda","o":"sfx_slot_pulse_lo,x","oa":1037},{"a":47619,"t":"code","b":[24],"m":"clc"},{"a":47620,"t":"code","b":[125,15,4],"m":"adc","o":"sfx_slot_pulse_step_lo,x","oa":1039},{"a":47623,"t":"code","b":[157,13,4],"m":"sta","o":"sfx_slot_pulse_lo,x","oa":1037},{"a":47626,"t":"code","b":[144,3],"m":"bcc","o":"b_BA0F","oa":47631},{"a":47628,"t":"code","b":[254,14,4],"m":"inc","o":"sfx_slot_pulse_hi,x","oa":1038},{"a":47631,"l":"b_BA0F","t":"code","b":[189,14,4],"m":"lda","o":"sfx_slot_pulse_hi,x","oa":1038,"x":[47626]},{"a":47634,"t":"code","b":[24],"m":"clc"},{"a":47635,"t":"code","b":[125,16,4],"m":"adc","o":"sfx_slot_pulse_step_hi,x","oa":1040},{"a":47638,"t":"code","b":[157,14,4],"m":"sta","o":"sfx_slot_pulse_hi,x","oa":1038},{"a":47641,"t":"code","b":[76,59,186],"m":"jmp","o":"j_BA3B","oa":47675},{"a":47644,"l":"b_BA1C","t":"code","b":[222,22,4],"m":"dec","o":"sfx_slot_pulse_count,x","oa":1046,"x":[47580,47611]},{"a":47647,"t":"code","b":[189,13,4],"m":"lda","o":"sfx_slot_pulse_lo,x","oa":1037},{"a":47650,"t":"code","b":[56],"m":"sec"},{"a":47651,"t":"code","b":[253,15,4],"m":"sbc","o":"sfx_slot_pulse_step_lo,x","oa":1039},{"a":47654,"t":"code","b":[157,13,4],"m":"sta","o":"sfx_slot_pulse_lo,x","oa":1037},{"a":47657,"t":"code","b":[176,3],"m":"bcs","o":"b_BA2E","oa":47662},{"a":47659,"t":"code","b":[222,14,4],"m":"dec","o":"sfx_slot_pulse_hi,x","oa":1038},{"a":47662,"l":"b_BA2E","t":"code","b":[189,14,4],"m":"lda","o":"sfx_slot_pulse_hi,x","oa":1038,"x":[47657]},{"a":47665,"t":"code","b":[56],"m":"sec"},{"a":47666,"t":"code","b":[253,16,4],"m":"sbc","o":"sfx_slot_pulse_step_hi,x","oa":1040},{"a":47669,"t":"code","b":[157,14,4],"m":"sta","o":"sfx_slot_pulse_hi,x","oa":1038},{"a":47672,"t":"code","b":[76,59,186],"m":"jmp","o":"j_BA3B","oa":47675},{"a":47675,"l":"j_BA3B","t":"code","b":[189,5,4],"m":"lda","o":"sfx_slot_attack_decay,x","oa":1029,"x":[47641,47672]},{"a":47678,"t":"code","b":[153,5,212],"m":"sta","o":"sid_v1_attack_decay,y"},{"a":47681,"t":"code","b":[189,23,4],"m":"lda","o":"sfx_slot_sustain_release,x","oa":1047},{"a":47684,"t":"code","b":[153,6,212],"m":"sta","o":"sid_v1_sustain_release,y"},{"a":47687,"t":"code","b":[189,7,4],"m":"lda","o":"sfx_slot_freq_lo,x","oa":1031},{"a":47690,"t":"code","b":[153,0,212],"m":"sta","o":"sid_v1_freq_lo,y"},{"a":47693,"t":"code","b":[189,8,4],"m":"lda","o":"sfx_slot_freq_hi,x","oa":1032},{"a":47696,"t":"code","b":[153,1,212],"m":"sta","o":"sid_v1_freq_hi,y"},{"a":47699,"t":"code","b":[189,13,4],"m":"lda","o":"sfx_slot_pulse_lo,x","oa":1037},{"a":47702,"t":"code","b":[153,2,212],"m":"sta","o":"sid_v1_pulse_lo,y"},{"a":47705,"t":"code","b":[189,14,4],"m":"lda","o":"sfx_slot_pulse_hi,x","oa":1038},{"a":47708,"t":"code","b":[153,3,212],"m":"sta","o":"sid_v1_pulse_hi,y"},{"a":47711,"t":"code","b":[189,2,4],"m":"lda","o":"sfx_slot_time1,x","oa":1026},{"a":47714,"t":"code","b":[240,6],"m":"beq","o":"b_BA6A","oa":47722},{"a":47716,"t":"code","b":[222,2,4],"m":"dec","o":"sfx_slot_time1,x","oa":1026},{"a":47719,"t":"code","b":[76,114,186],"m":"jmp","o":"j_BA72","oa":47730},{"a":47722,"l":"b_BA6A","t":"code","b":[189,3,4],"m":"lda","o":"sfx_slot_time2,x","oa":1027,"x":[47714]},{"a":47725,"t":"code","b":[240,8],"m":"beq","o":"b_BA77","oa":47735},{"a":47727,"t":"code","b":[222,3,4],"m":"dec","o":"sfx_slot_time2,x","oa":1027},{"a":47730,"l":"j_BA72","t":"code","b":[189,4,4],"m":"lda","o":"sfx_slot_control,x","oa":1028,"x":[47719]},{"a":47733,"t":"code","b":[9,1],"m":"ora","o":"#$01"},{"a":47735,"l":"b_BA77","t":"code","b":[153,4,212],"m":"sta","o":"sid_v1_control,y","x":[47725]},{"a":47738,"l":"sfx_voice_offsets_base","c":"RTS that ends $B960; its address is also the base of LDA $BA7A,X at $458E, where X is an effect's voice number 1-3, reading the voice offsets that follow.","t":"code","b":[96],"m":"rts","x":[17806]},{"a":47739,"l":"tbl_sfx_voice_offsets","c":"Offset of each voice's effect state in $0400-$045F for voices 1-3: $00, $20, $40 ($BA7B-$BA7D). $BA7E-$BA80 (0, 7, $0E, the SID register offsets of the three voices) would be read for voice numbers 4-6, which no effect record has; $B94E-$B95E use immediate values instead.","t":"byte","b":[0,32,64,0,7,14]},{"a":47745,"l":"firing_volume","c":"Firing volume, 0-15 ($0A in the image): $BA82 raises it with the up-arrow key and lowers it with =, and writes it times 16 into byte 23 (the sustain level) of the two firing effects, $3C76 (effect 0) and $3DF6 (effect 16).","t":"byte","b":[10],"x":[47753,47760,47767,47772,47775]},{"a":47746,"l":"adjust_firing_volume","c":"Firing volume keys, called every frame of play from $7E5D: key code 5 (up-arrow) raises $BA81 up to 15, code 6 (=) lowers it to 0, and the value times 16 goes into the sustain nibble of both firing sound records ($3C76, $3DF6).","t":"code","b":[173,84,178],"m":"lda","o":"key_new","oa":45652,"x":[32349]},{"a":47749,"t":"code","b":[201,5],"m":"cmp","o":"#$05"},{"a":47751,"t":"code","b":[208,10],"m":"bne","o":"b_BA93","oa":47763},{"a":47753,"t":"code","b":[172,129,186],"m":"ldy","o":"firing_volume","oa":47745},{"a":47756,"t":"code","b":[192,15],"m":"cpy","o":"#$0F"},{"a":47758,"t":"code","b":[240,15],"m":"beq","o":"b_BA9F","oa":47775},{"a":47760,"t":"code","b":[238,129,186],"m":"inc","o":"firing_volume","oa":47745},{"a":47763,"l":"b_BA93","t":"code","b":[201,6],"m":"cmp","o":"#$06","x":[47751]},{"a":47765,"t":"code","b":[208,8],"m":"bne","o":"b_BA9F","oa":47775},{"a":47767,"t":"code","b":[172,129,186],"m":"ldy","o":"firing_volume","oa":47745},{"a":47770,"t":"code","b":[240,3],"m":"beq","o":"b_BA9F","oa":47775},{"a":47772,"t":"code","b":[206,129,186],"m":"dec","o":"firing_volume","oa":47745},{"a":47775,"l":"b_BA9F","t":"code","b":[173,129,186],"m":"lda","o":"firing_volume","oa":47745,"x":[47758,47765,47770]},{"a":47778,"t":"code","b":[10],"m":"asl","o":"a"},{"a":47779,"t":"code","b":[10],"m":"asl","o":"a"},{"a":47780,"t":"code","b":[10],"m":"asl","o":"a"},{"a":47781,"t":"code","b":[10],"m":"asl","o":"a"},{"a":47782,"t":"code","b":[141,118,60],"m":"sta","o":"sfx_00_sustain_release","oa":15478},{"a":47785,"t":"code","b":[141,246,61],"m":"sta","o":"sfx_16_sustain_release","oa":15862},{"a":47788,"t":"code","b":[96],"m":"rts"},{"a":47789,"l":"silence_sid","c":"Silences the SID: writes 0 to $D400-$D416 (STA $D3FF,X with X = $17 down to 1) and to the length and release counters of the three effect voices ($0402/$0403, $0422/$0423, $0442/$0443). Called before a life ($63AC), \"get ready\" ($6901) and game over ($6A84).","t":"code","b":[162,23],"m":"ldx","o":"#$17","x":[25516,26881,27268]},{"a":47791,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":47793,"l":"b_BAB1","t":"code","b":[157,255,211],"m":"sta","o":"$D3FF,x","x":[47797]},{"a":47796,"t":"code","b":[202],"m":"dex"},{"a":47797,"t":"code","b":[208,250],"m":"bne","o":"b_BAB1","oa":47793},{"a":47799,"t":"code","b":[141,2,4],"m":"sta","o":"sfx_slot_time1","oa":1026},{"a":47802,"t":"code","b":[141,3,4],"m":"sta","o":"sfx_slot_time2","oa":1027},{"a":47805,"t":"code","b":[141,34,4],"m":"sta","o":"sfx_slot2_time1","oa":1058},{"a":47808,"t":"code","b":[141,35,4],"m":"sta","o":"sfx_slot2_time2","oa":1059},{"a":47811,"t":"code","b":[141,66,4],"m":"sta","o":"sfx_slot3_time1","oa":1090},{"a":47814,"t":"code","b":[141,67,4],"m":"sta","o":"sfx_slot3_time2","oa":1091},{"a":47817,"t":"code","b":[96],"m":"rts"},{"a":47818,"l":"tbl_sfx_records","c":"Sound effect table: the address of each effect's 24-byte record, one word per effect number ($BACA-$BB01), read by $457F/$4584 with Y = 2 x effect. Effects 0-25 point at $3C5F-$3EB7 (10 and 11 are both $3D67); the last two words, $3ECF and $3EE7, continue the spacing into other data and are never requested. A record: voice 1-3, priority, length, release, control, attack/decay, 0, frequency, frequency step, sweep up and down times, pulse width, pulse step, pulse sweep times, direction flags and counters, sustain/release; $4553 copies it (25 bytes) to the voice's state at $0400 if the voice is free (length $0402 = 0) or the new priority byte is not greater than the one playing (smaller numbers win; the firing sound, effect 0, has 14).","t":"byte","b":[95],"x":[17791]},{"a":47819,"l":"tbl_sfx_records_hi","c":"High-byte column of $BACA (LDA $BACB,Y at $4584); the span holds the rest of the 28 words.","t":"byte","b":[60,119,60,143,60,167,60,191],"x":[17796]},{"a":47827,"t":"byte","b":[60,215,60,239,60,7,61,31]},{"a":47835,"t":"byte","b":[61,55,61,103,61,103,61,127]},{"a":47843,"t":"byte","b":[61,151,61,175,61,199,61,223]},{"a":47851,"t":"byte","b":[61,247,61,15,62,39,62,63]},{"a":47859,"t":"byte","b":[62,87,62,111,62,135,62,159]},{"a":47867,"t":"byte","b":[62,183,62,207,62,231,62]},{"a":47874,"l":"sfx_requested","c":"Effect number last passed to $4553 ($4569); $45A1 retries effect 0 as effect 16 when its voice is busy. The tube arrival at $82B3-$833F borrows it as the byte offset (steps of 3, one sprite row) of the Wizball image sliding into the sprite blocks at $ED00 and $ED80.","t":"byte","b":[0],"x":[17769,17825,33461,33551,33554,33557,33562,33593,33596,33599]},{"a":47875,"l":"fire_sound_alternate","c":"Toggles bit 4 on each request of effect 0 ($456E): with no music ($B8F1 = 0) the firing sound alternates between effect 0 on voice 1 and effect 16 on voice 3; with music it is always effect 0.","t":"byte","b":[0],"x":[17774,17779]},{"a":47876,"l":"bonus_loop_marker","c":"Constant $39, never written: the byte that marks a loop record in the bonus wave script ($9CF5 compares the record's second byte with it). A loop record is (target, $39, count): while the count is non-zero it is decremented and the script goes on at offset target - 2, so the loop runs count more times.","t":"byte","b":[57],"x":[40181]},{"a":47877,"l":"bonus_wait_count","c":"Frames already waited on the current record of the bonus wave script, counted up to the record's delay byte at $9D66-$9D71.","t":"byte","b":[0],"x":[40119,40294,40299,40305]},{"a":47878,"l":"bonus_script_pos","c":"Offset of the current record in the bonus wave script at $ED02 (copied from $3902 by $9CB2, which clears it); $9CEF-$9D77 step it through spawn records (template, delay), loop records, $FF/$FE (fly on/off, $B1F8) and $FD (end: $B1CF = $36).","t":"byte","b":[0],"x":[40122,40175,40203,40209,40212,40215,40221,40244,40308,40311]},{"a":47879,"l":"borewiz","c":"The BOREWIZ cheat: $AFBF sets it to 7, and the border to brown (9), when the seven keys B O R E W I Z (codes at $AFCE) are typed in a row on the title or menu screen ($AF85). While it is set, a collision does not end the life ($7EF4), except in the bonus stage. Cleared at game over ($6B6B) and on quitting ($6EDC). $BB08-$BB0A (1, 2, 3) are not read; $BB0B (4) is the column byte of the stale text record below.","t":"byte","b":[0,1,2,3,4],"x":[27499,28380,32500,44991]},{"a":47884,"l":"bonus_music_toggle","c":"Alternates 2 and 0 each time a bonus stage starts ($655F, EOR #2): at 2 the stage plays tune $0C on all three voices at double tempo, at 0 tune $21 on voice 3 only. The Wiz-lab after it has its music (tune $3D) only while it is 2 ($AB66). It sits where the row byte of the stale text record would be.","t":"byte","b":[2],"x":[25951,25954,43878]},{"a":47885,"l":"text_stale_wiztips_three","c":"Stale text that nothing reads: an earlier draft of part of Wiztips page three, left in memory and cut off by the code at $BBA0. From its header at $BB0B (column 4, row byte now the variable $BB0C): \"the horizon gives\", (7,13) \"immunity to alien bullets\", (0,15) \"after a colour is complete, you can make\", (1,16) \"a weapon permanent. just select the one\", (3,17) \"you want, whil\". The live page at $4451 reads \"hiding beneath the horizon gives\" and misspells \"permenant\". The only pointer-shaped reference, the bytes $0D $BB at $6390 after the entry's JMP $EC00, is never read.","t":"byte","b":[84,72,69,32,72,79,82,73]},{"a":47893,"t":"byte","b":[90,79,78,32,71,73,86,69]},{"a":47901,"t":"byte","b":[83,255,7,13,73,77,77,85]},{"a":47909,"t":"byte","b":[78,73,84,89,32,84,79,32]},{"a":47917,"t":"byte","b":[65,76,73,69,78,32,66,85]},{"a":47925,"t":"byte","b":[76,76,69,84,83,255,0,15]},{"a":47933,"t":"byte","b":[65,70,84,69,82,32,65,32]},{"a":47941,"t":"byte","b":[67,79,76,79,85,82,32,73]},{"a":47949,"t":"byte","b":[83,32,67,79,77,80,76,69]},{"a":47957,"t":"byte","b":[84,69,44,32,89,79,85,32]},{"a":47965,"t":"byte","b":[67,65,78,32,77,65,75,69]},{"a":47973,"t":"byte","b":[255,1,16,65,32,87,69,65]},{"a":47981,"t":"byte","b":[80,79,78,32,80,69,82,77]},{"a":47989,"t":"byte","b":[65,78,69,78,84,46,32,74]},{"a":47997,"t":"byte","b":[85,83,84,32,83,69,76,69]},{"a":48005,"t":"byte","b":[67,84,32,84,72,69,32,79]},{"a":48013,"t":"byte","b":[78,69,255,3,17,89,79,85]},{"a":48021,"t":"byte","b":[32,87,65,78,84,44,32,87]},{"a":48029,"t":"byte","b":[72,73,76]},{"a":48032,"l":"hiscore_insert_scores","c":"High-score insertion after a game (through $BFD0, from $6BB0): writes side 1's six score digits (+ \"0\") into the spare entry 8 of its table (the one-player table, or the team table at +$7E when $BFD6 = 2) with the marker \"1\" as the first name letter, and sorts both tables ($BC23); does the same for side 2 with \"2\" when two sides played; then sets $BDA5 to the table whose top entry is higher and works out the rank codes $BFF2/$BFF3 ($BC90).","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[49104]},{"a":48034,"t":"code","b":[173,214,191],"m":"lda","o":"side1_team","oa":49110},{"a":48037,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":48039,"t":"code","b":[240,2],"m":"beq","o":"b_BBAB","oa":48043},{"a":48041,"t":"code","b":[162,126],"m":"ldx","o":"#$7E"},{"a":48043,"l":"b_BBAB","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[48039]},{"a":48045,"l":"b_BBAD","t":"code","b":[185,219,191],"m":"lda","o":"side1_score,y","oa":49115,"x":[48058]},{"a":48048,"t":"code","b":[24],"m":"clc"},{"a":48049,"t":"code","b":[105,48],"m":"adc","o":"#$30"},{"a":48051,"t":"code","b":[157,41,190],"m":"sta","o":"hiscore_spare1,x","oa":48681},{"a":48054,"t":"code","b":[232],"m":"inx"},{"a":48055,"t":"code","b":[200],"m":"iny"},{"a":48056,"t":"code","b":[192,6],"m":"cpy","o":"#$06"},{"a":48058,"t":"code","b":[208,241],"m":"bne","o":"b_BBAD","oa":48045},{"a":48060,"t":"code","b":[169,49],"m":"lda","o":"#$31"},{"a":48062,"t":"code","b":[157,42,190],"m":"sta","o":"hiscore_spare1_plus1,x","oa":48682},{"a":48065,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":48067,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":48069,"t":"code","b":[32,35,188],"m":"jsr","o":"hiscore_sort_table","oa":48163},{"a":48072,"t":"code","b":[169,9],"m":"lda","o":"#$09"},{"a":48074,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":48076,"t":"code","b":[32,35,188],"m":"jsr","o":"hiscore_sort_table","oa":48163},{"a":48079,"t":"code","b":[173,216,191],"m":"lda","o":"sides","oa":49112},{"a":48082,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":48084,"t":"code","b":[240,47],"m":"beq","o":"b_BC05","oa":48133},{"a":48086,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":48088,"t":"code","b":[173,215,191],"m":"lda","o":"side2_team","oa":49111},{"a":48091,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":48093,"t":"code","b":[240,2],"m":"beq","o":"b_BBE1","oa":48097},{"a":48095,"t":"code","b":[162,126],"m":"ldx","o":"#$7E"},{"a":48097,"l":"b_BBE1","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[48093]},{"a":48099,"l":"b_BBE3","t":"code","b":[185,226,191],"m":"lda","o":"side2_score,y","oa":49122,"x":[48112]},{"a":48102,"t":"code","b":[24],"m":"clc"},{"a":48103,"t":"code","b":[105,48],"m":"adc","o":"#$30"},{"a":48105,"t":"code","b":[157,41,190],"m":"sta","o":"hiscore_spare1,x","oa":48681},{"a":48108,"t":"code","b":[232],"m":"inx"},{"a":48109,"t":"code","b":[200],"m":"iny"},{"a":48110,"t":"code","b":[192,6],"m":"cpy","o":"#$06"},{"a":48112,"t":"code","b":[208,241],"m":"bne","o":"b_BBE3","oa":48099},{"a":48114,"t":"code","b":[169,50],"m":"lda","o":"#$32"},{"a":48116,"t":"code","b":[157,42,190],"m":"sta","o":"hiscore_spare1_plus1,x","oa":48682},{"a":48119,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":48121,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":48123,"t":"code","b":[32,35,188],"m":"jsr","o":"hiscore_sort_table","oa":48163},{"a":48126,"t":"code","b":[169,9],"m":"lda","o":"#$09"},{"a":48128,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":48130,"t":"code","b":[32,35,188],"m":"jsr","o":"hiscore_sort_table","oa":48163},{"a":48133,"l":"b_BC05","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[48084]},{"a":48135,"l":"b_BC07","t":"code","b":[189,185,189],"m":"lda","o":"hiscore_tables,x","oa":48569,"x":[48148]},{"a":48138,"t":"code","b":[221,55,190],"m":"cmp","o":"hiscore_team_top,x","oa":48695},{"a":48141,"t":"code","b":[240,4],"m":"beq","o":"b_BC13","oa":48147},{"a":48143,"t":"code","b":[48,9],"m":"bmi","o":"b_BC1A","oa":48154},{"a":48145,"t":"code","b":[16,3],"m":"bpl","o":"b_BC16","oa":48150},{"a":48147,"l":"b_BC13","t":"code","b":[232],"m":"inx","x":[48141]},{"a":48148,"t":"code","b":[208,241],"m":"bne","o":"b_BC07","oa":48135},{"a":48150,"l":"b_BC16","t":"code","b":[169,1],"m":"lda","o":"#$01","x":[48145]},{"a":48152,"t":"code","b":[208,2],"m":"bne","o":"b_BC1C","oa":48156},{"a":48154,"l":"b_BC1A","t":"code","b":[169,2],"m":"lda","o":"#$02","x":[48143]},{"a":48156,"l":"b_BC1C","t":"code","b":[141,165,189],"m":"sta","o":"hiscore_best_table","oa":48549,"x":[48152]},{"a":48159,"t":"code","b":[32,144,188],"m":"jsr","o":"hiscore_find_ranks","oa":48272},{"a":48162,"t":"code","b":[96],"m":"rts"},{"a":48163,"l":"hiscore_sort_table","c":"Sorts one high-score table by score, highest first: $67 = 0 for the one-player table (entries 0-8), 9 for the team table (9-17). Compares the six digits of each entry with the next and swaps the two 14-byte entries when the next is higher, restarting from the top after every swap (a bubble sort); equal scores keep their order, so a new entry stays below an old one.","t":"code","b":[165,103],"m":"lda","o":"zp_temp_67","oa":103,"x":[48069,48076,48123,48130,48228]},{"a":48165,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":48167,"l":"b_BC27","t":"code","b":[164,102],"m":"ldy","o":"zp_temp_66","oa":102,"x":[48200]},{"a":48169,"t":"code","b":[190,166,189],"m":"ldx","o":"tbl_hiscore_offsets,y","oa":48550},{"a":48172,"t":"code","b":[160,6],"m":"ldy","o":"#$06"},{"a":48174,"l":"b_BC2E","t":"code","b":[189,185,189],"m":"lda","o":"hiscore_tables,x","oa":48569,"x":[48188]},{"a":48177,"t":"code","b":[221,199,189],"m":"cmp","o":"hiscore_entry1,x","oa":48583},{"a":48180,"t":"code","b":[240,4],"m":"beq","o":"b_BC3A","oa":48186},{"a":48182,"t":"code","b":[48,19],"m":"bmi","o":"b_BC4B","oa":48203},{"a":48184,"t":"code","b":[16,4],"m":"bpl","o":"b_BC3E","oa":48190},{"a":48186,"l":"b_BC3A","t":"code","b":[232],"m":"inx","x":[48180]},{"a":48187,"t":"code","b":[136],"m":"dey"},{"a":48188,"t":"code","b":[208,240],"m":"bne","o":"b_BC2E","oa":48174},{"a":48190,"l":"b_BC3E","t":"code","b":[230,102],"m":"inc","o":"zp_temp_66","oa":102,"x":[48184]},{"a":48192,"t":"code","b":[165,102],"m":"lda","o":"zp_temp_66","oa":102},{"a":48194,"t":"code","b":[201,17],"m":"cmp","o":"#$11"},{"a":48196,"t":"code","b":[240,4],"m":"beq","o":"r_BC4A","oa":48202},{"a":48198,"t":"code","b":[201,8],"m":"cmp","o":"#$08"},{"a":48200,"t":"code","b":[208,221],"m":"bne","o":"b_BC27","oa":48167},{"a":48202,"l":"r_BC4A","t":"code","b":[96],"m":"rts","x":[48196]},{"a":48203,"l":"b_BC4B","t":"code","b":[164,102],"m":"ldy","o":"zp_temp_66","oa":102,"x":[48182]},{"a":48205,"t":"code","b":[190,166,189],"m":"ldx","o":"tbl_hiscore_offsets,y","oa":48550},{"a":48208,"t":"code","b":[160,14],"m":"ldy","o":"#$0E"},{"a":48210,"l":"b_BC52","t":"code","b":[189,185,189],"m":"lda","o":"hiscore_tables,x","oa":48569,"x":[48226]},{"a":48213,"t":"code","b":[72],"m":"pha"},{"a":48214,"t":"code","b":[189,199,189],"m":"lda","o":"hiscore_entry1,x","oa":48583},{"a":48217,"t":"code","b":[157,185,189],"m":"sta","o":"hiscore_tables,x","oa":48569},{"a":48220,"t":"code","b":[104],"m":"pla"},{"a":48221,"t":"code","b":[157,199,189],"m":"sta","o":"hiscore_entry1,x","oa":48583},{"a":48224,"t":"code","b":[232],"m":"inx"},{"a":48225,"t":"code","b":[136],"m":"dey"},{"a":48226,"t":"code","b":[208,238],"m":"bne","o":"b_BC52","oa":48210},{"a":48228,"t":"code","b":[76,35,188],"m":"jmp","o":"hiscore_sort_table","oa":48163},{"a":48231,"l":"hiscore_rank_team_side2","c":"Part of $BC90 (reached from $BCAF): the marker \"2\" was found at position Y of the team table. Rank code 3 ($BFF3) for position 0 when the team table holds the best score, else 4 for positions 0-6, and for position 7 only when the team table holds the best score.","t":"code","b":[192,0],"m":"cpy","o":"#$00","x":[48303]},{"a":48233,"t":"code","b":[208,15],"m":"bne","o":"b_BC7A","oa":48250},{"a":48235,"t":"code","b":[173,165,189],"m":"lda","o":"hiscore_best_table","oa":48549},{"a":48238,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":48240,"t":"code","b":[208,8],"m":"bne","o":"b_BC7A","oa":48250},{"a":48242,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":48244,"t":"code","b":[141,243,191],"m":"sta","o":"rank_side2","oa":49139},{"a":48247,"t":"code","b":[76,177,188],"m":"jmp","o":"j_BCB1","oa":48305},{"a":48250,"l":"b_BC7A","t":"code","b":[192,7],"m":"cpy","o":"#$07","x":[48233,48240]},{"a":48252,"t":"code","b":[240,8],"m":"beq","o":"b_BC86","oa":48262},{"a":48254,"l":"b_BC7E","t":"code","b":[169,4],"m":"lda","o":"#$04","x":[48267]},{"a":48256,"t":"code","b":[141,243,191],"m":"sta","o":"rank_side2","oa":49139},{"a":48259,"t":"code","b":[76,177,188],"m":"jmp","o":"j_BCB1","oa":48305},{"a":48262,"l":"b_BC86","t":"code","b":[173,165,189],"m":"lda","o":"hiscore_best_table","oa":48549,"x":[48252]},{"a":48265,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":48267,"t":"code","b":[240,241],"m":"beq","o":"b_BC7E","oa":48254},{"a":48269,"t":"code","b":[76,177,188],"m":"jmp","o":"j_BCB1","oa":48305},{"a":48272,"l":"hiscore_find_ranks","c":"Finds where the markers \"1\" and \"2\" landed in the top eight positions of both tables and sets the rank codes $BFF2 (side 1) and $BFF3 (side 2): 1 = the best score of both tables, in the one-player table; 2 = another place in it; 3 and 4 = the same in the team table; 0 = not placed. Position 0 counts as best only in the table named by $BDA5; position 7 qualifies only when that table is the best one.","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[48159]},{"a":48274,"t":"code","b":[140,242,191],"m":"sty","o":"rank_side1","oa":49138},{"a":48277,"t":"code","b":[140,243,191],"m":"sty","o":"rank_side2","oa":49139},{"a":48280,"l":"b_BC98","t":"code","b":[190,166,189],"m":"ldx","o":"tbl_hiscore_offsets,y","oa":48550,"x":[48308]},{"a":48283,"t":"code","b":[189,192,189],"m":"lda","o":"hiscore_names_base,x","oa":48576},{"a":48286,"t":"code","b":[201,49],"m":"cmp","o":"#$31"},{"a":48288,"t":"code","b":[240,21],"m":"beq","o":"b_BCB7","oa":48311},{"a":48290,"t":"code","b":[201,50],"m":"cmp","o":"#$32"},{"a":48292,"t":"code","b":[240,58],"m":"beq","o":"b_BCE0","oa":48352},{"a":48294,"l":"j_BCA6","t":"code","b":[189,62,190],"m":"lda","o":"hiscore_team_names,x","oa":48702,"x":[48327,48339,48349,48368,48380,48390]},{"a":48297,"t":"code","b":[201,49],"m":"cmp","o":"#$31"},{"a":48299,"t":"code","b":[240,92],"m":"beq","o":"b_BD09","oa":48393},{"a":48301,"t":"code","b":[201,50],"m":"cmp","o":"#$32"},{"a":48303,"t":"code","b":[240,182],"m":"beq","o":"hiscore_rank_team_side2","oa":48231},{"a":48305,"l":"j_BCB1","t":"code","b":[200],"m":"iny","x":[48247,48259,48269,48409,48421,48431]},{"a":48306,"t":"code","b":[192,8],"m":"cpy","o":"#$08"},{"a":48308,"t":"code","b":[208,226],"m":"bne","o":"b_BC98","oa":48280},{"a":48310,"t":"code","b":[96],"m":"rts"},{"a":48311,"l":"b_BCB7","t":"code","b":[192,0],"m":"cpy","o":"#$00","x":[48288]},{"a":48313,"t":"code","b":[208,15],"m":"bne","o":"b_BCCA","oa":48330},{"a":48315,"t":"code","b":[173,165,189],"m":"lda","o":"hiscore_best_table","oa":48549},{"a":48318,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":48320,"t":"code","b":[208,8],"m":"bne","o":"b_BCCA","oa":48330},{"a":48322,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":48324,"t":"code","b":[141,242,191],"m":"sta","o":"rank_side1","oa":49138},{"a":48327,"t":"code","b":[76,166,188],"m":"jmp","o":"j_BCA6","oa":48294},{"a":48330,"l":"b_BCCA","t":"code","b":[192,7],"m":"cpy","o":"#$07","x":[48313,48320]},{"a":48332,"t":"code","b":[240,8],"m":"beq","o":"b_BCD6","oa":48342},{"a":48334,"l":"b_BCCE","t":"code","b":[169,2],"m":"lda","o":"#$02","x":[48347]},{"a":48336,"t":"code","b":[141,242,191],"m":"sta","o":"rank_side1","oa":49138},{"a":48339,"t":"code","b":[76,166,188],"m":"jmp","o":"j_BCA6","oa":48294},{"a":48342,"l":"b_BCD6","t":"code","b":[173,165,189],"m":"lda","o":"hiscore_best_table","oa":48549,"x":[48332]},{"a":48345,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":48347,"t":"code","b":[240,241],"m":"beq","o":"b_BCCE","oa":48334},{"a":48349,"t":"code","b":[76,166,188],"m":"jmp","o":"j_BCA6","oa":48294},{"a":48352,"l":"b_BCE0","t":"code","b":[192,0],"m":"cpy","o":"#$00","x":[48292]},{"a":48354,"t":"code","b":[208,15],"m":"bne","o":"b_BCF3","oa":48371},{"a":48356,"t":"code","b":[173,165,189],"m":"lda","o":"hiscore_best_table","oa":48549},{"a":48359,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":48361,"t":"code","b":[208,8],"m":"bne","o":"b_BCF3","oa":48371},{"a":48363,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":48365,"t":"code","b":[141,243,191],"m":"sta","o":"rank_side2","oa":49139},{"a":48368,"t":"code","b":[76,166,188],"m":"jmp","o":"j_BCA6","oa":48294},{"a":48371,"l":"b_BCF3","t":"code","b":[192,7],"m":"cpy","o":"#$07","x":[48354,48361]},{"a":48373,"t":"code","b":[240,8],"m":"beq","o":"b_BCFF","oa":48383},{"a":48375,"l":"b_BCF7","t":"code","b":[169,2],"m":"lda","o":"#$02","x":[48388]},{"a":48377,"t":"code","b":[141,243,191],"m":"sta","o":"rank_side2","oa":49139},{"a":48380,"t":"code","b":[76,166,188],"m":"jmp","o":"j_BCA6","oa":48294},{"a":48383,"l":"b_BCFF","t":"code","b":[173,165,189],"m":"lda","o":"hiscore_best_table","oa":48549,"x":[48373]},{"a":48386,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":48388,"t":"code","b":[240,241],"m":"beq","o":"b_BCF7","oa":48375},{"a":48390,"t":"code","b":[76,166,188],"m":"jmp","o":"j_BCA6","oa":48294},{"a":48393,"l":"b_BD09","t":"code","b":[192,0],"m":"cpy","o":"#$00","x":[48299]},{"a":48395,"t":"code","b":[208,15],"m":"bne","o":"b_BD1C","oa":48412},{"a":48397,"t":"code","b":[173,165,189],"m":"lda","o":"hiscore_best_table","oa":48549},{"a":48400,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":48402,"t":"code","b":[208,8],"m":"bne","o":"b_BD1C","oa":48412},{"a":48404,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":48406,"t":"code","b":[141,242,191],"m":"sta","o":"rank_side1","oa":49138},{"a":48409,"t":"code","b":[76,177,188],"m":"jmp","o":"j_BCB1","oa":48305},{"a":48412,"l":"b_BD1C","t":"code","b":[192,7],"m":"cpy","o":"#$07","x":[48395,48402]},{"a":48414,"t":"code","b":[240,8],"m":"beq","o":"b_BD28","oa":48424},{"a":48416,"l":"b_BD20","t":"code","b":[169,4],"m":"lda","o":"#$04","x":[48429]},{"a":48418,"t":"code","b":[141,242,191],"m":"sta","o":"rank_side1","oa":49138},{"a":48421,"t":"code","b":[76,177,188],"m":"jmp","o":"j_BCB1","oa":48305},{"a":48424,"l":"b_BD28","t":"code","b":[173,165,189],"m":"lda","o":"hiscore_best_table","oa":48549,"x":[48414]},{"a":48427,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":48429,"t":"code","b":[240,241],"m":"beq","o":"b_BD20","oa":48416},{"a":48431,"t":"code","b":[76,177,188],"m":"jmp","o":"j_BCB1","oa":48305},{"a":48434,"l":"hiscore_store_name","c":"Stores a typed name (through $BFD3, from $6CB9, with the marker \"1\" or \"2\" in A): finds the entry whose first name letter is the marker, stepping 14 bytes at a time, copies the seven name characters from the buffer $BFF4 over it, then rebuilds the title's score lines: the best score into \"1. \" ($BD96) and six entries per column into the page $BEB5 ($BD78), each table starting one entry lower when it holds the best score.","t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102,"x":[49107]},{"a":48436,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":48438,"l":"b_BD36","t":"code","b":[189,192,189],"m":"lda","o":"hiscore_names_base,x","oa":48576,"x":[48450]},{"a":48441,"t":"code","b":[197,102],"m":"cmp","o":"zp_temp_66","oa":102},{"a":48443,"t":"code","b":[240,7],"m":"beq","o":"b_BD44","oa":48452,"x":[14845]},{"a":48445,"t":"code","b":[138],"m":"txa"},{"a":48446,"t":"code","b":[24],"m":"clc"},{"a":48447,"t":"code","b":[105,14],"m":"adc","o":"#$0E"},{"a":48449,"t":"code","b":[170],"m":"tax"},{"a":48450,"t":"code","b":[208,242],"m":"bne","o":"b_BD36","oa":48438},{"a":48452,"l":"b_BD44","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[48443]},{"a":48454,"l":"b_BD46","t":"code","b":[185,244,191],"m":"lda","o":"hiscore_name_buffer,y","oa":49140,"x":[48464]},{"a":48457,"t":"code","b":[157,192,189],"m":"sta","o":"hiscore_names_base,x","oa":48576},{"a":48460,"t":"code","b":[232],"m":"inx"},{"a":48461,"t":"code","b":[200],"m":"iny"},{"a":48462,"t":"code","b":[192,7],"m":"cpy","o":"#$07"},{"a":48464,"t":"code","b":[208,244],"m":"bne","o":"b_BD46","oa":48454},{"a":48466,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":48468,"t":"code","b":[173,165,189],"m":"lda","o":"hiscore_best_table","oa":48549},{"a":48471,"t":"code","b":[201,1],"m":"cmp","o":"#$01"},{"a":48473,"t":"code","b":[208,5],"m":"bne","o":"b_BD60","oa":48480},{"a":48475,"t":"code","b":[32,150,189],"m":"jsr","o":"hiscore_copy_best","oa":48534},{"a":48478,"t":"code","b":[160,14],"m":"ldy","o":"#$0E"},{"a":48480,"l":"b_BD60","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[48473]},{"a":48482,"t":"code","b":[32,120,189],"m":"jsr","o":"hiscore_build_column","oa":48504},{"a":48485,"t":"code","b":[160,126],"m":"ldy","o":"#$7E"},{"a":48487,"t":"code","b":[173,165,189],"m":"lda","o":"hiscore_best_table","oa":48549},{"a":48490,"t":"code","b":[201,2],"m":"cmp","o":"#$02"},{"a":48492,"t":"code","b":[208,5],"m":"bne","o":"b_BD73","oa":48499},{"a":48494,"t":"code","b":[32,150,189],"m":"jsr","o":"hiscore_copy_best","oa":48534},{"a":48497,"t":"code","b":[160,140],"m":"ldy","o":"#$8C"},{"a":48499,"l":"b_BD73","t":"code","b":[162,20],"m":"ldx","o":"#$14","x":[48492]},{"a":48501,"t":"code","b":[76,120,189],"m":"jmp","o":"hiscore_build_column","oa":48504},{"a":48504,"l":"hiscore_build_column","c":"Copies six 14-byte entries, from table offset Y, into six rows of one column of the high-score page (X = 0 for the left column at $BEDF, $14 for the right one), skipping the 26 bytes of each row's end, next header and \"N. \" prefix between them.","t":"code","b":[169,6],"m":"lda","o":"#$06","x":[48482,48501]},{"a":48506,"t":"code","b":[133,103],"m":"sta","o":"zp_temp_67","oa":103},{"a":48508,"l":"b_BD7C","t":"code","b":[169,14],"m":"lda","o":"#$0E","x":[48531]},{"a":48510,"t":"code","b":[133,102],"m":"sta","o":"zp_temp_66","oa":102},{"a":48512,"l":"b_BD80","t":"code","b":[185,185,189],"m":"lda","o":"hiscore_tables,y","oa":48569,"x":[48522]},{"a":48515,"t":"code","b":[157,223,190],"m":"sta","o":"hiscore_page_rows,x","oa":48863},{"a":48518,"t":"code","b":[200],"m":"iny"},{"a":48519,"t":"code","b":[232],"m":"inx"},{"a":48520,"t":"code","b":[198,102],"m":"dec","o":"zp_temp_66","oa":102},{"a":48522,"t":"code","b":[208,244],"m":"bne","o":"b_BD80","oa":48512},{"a":48524,"t":"code","b":[138],"m":"txa"},{"a":48525,"t":"code","b":[24],"m":"clc"},{"a":48526,"t":"code","b":[105,26],"m":"adc","o":"#$1A"},{"a":48528,"t":"code","b":[170],"m":"tax"},{"a":48529,"t":"code","b":[198,103],"m":"dec","o":"zp_temp_67","oa":103},{"a":48531,"t":"code","b":[208,231],"m":"bne","o":"b_BD7C","oa":48508},{"a":48533,"t":"code","b":[96],"m":"rts"},{"a":48534,"l":"hiscore_copy_best","c":"Copies the six score digits of the entry at table offset Y into the title's \"1. \" line at $BFEB-$BFF0.","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[48475,48494]},{"a":48536,"l":"b_BD98","t":"code","b":[185,185,189],"m":"lda","o":"hiscore_tables,y","oa":48569,"x":[48546]},{"a":48539,"t":"code","b":[157,235,191],"m":"sta","o":"best_score_digits,x","oa":49131},{"a":48542,"t":"code","b":[200],"m":"iny"},{"a":48543,"t":"code","b":[232],"m":"inx"},{"a":48544,"t":"code","b":[224,6],"m":"cpx","o":"#$06"},{"a":48546,"t":"code","b":[208,244],"m":"bne","o":"b_BD98","oa":48536},{"a":48548,"t":"code","b":[96],"m":"rts"},{"a":48549,"l":"hiscore_best_table","c":"Which table holds the best score: 1 = the one-player table, 2 = the team table ($BC1C, from comparing the two top entries at $BC05); 0 in the image, where the title page is already built. Decides which top entry is shown as \"1.\" and which tables' ranks start one lower.","t":"byte","b":[0],"x":[48156,48235,48262,48315,48342,48356,48383,48397,48424,48468,48487]},{"a":48550,"l":"tbl_hiscore_offsets","c":"Offsets of the 14-byte high-score entries: 0, $0E, $1C ... $FC, nineteen multiples of 14 ($BDA6-$BDB8), indexed by position at $BC29, $BC4D and $BC98 (the last two, $EE and $FC, are not reached).","t":"byte","b":[0,14,28,42,56,70,84,98],"x":[48169,48205,48280]},{"a":48558,"t":"byte","b":[112,126,140,154,168,182,196,210]},{"a":48566,"t":"byte","b":[224,238,252]},{"a":48569,"l":"hiscore_tables","c":"The two high-score tables, eighteen entries of 14 PETSCII bytes: six score digits, a space, a seven-letter name. Entries 0-8 ($BDB9-$BE34) are the one-player table and 9-17 ($BE37-$BEB4) the team table; entry 8 and entry 17 are the spare slots new scores go into. In the image: \"020000 JOP    \", seven \"020000 ---    \", \"000000 ---    \"; then \"050000 --- ---\", \"020000 KRX NIF\", six \"020000 --- ---\", \"000000 --- ---\". Not saved anywhere. This span: entry 0's score and space.","t":"byte","b":[48,50,48,48,48,48,32],"x":[48135,48174,48210,48217,48512,48536]},{"a":48576,"l":"hiscore_names_base","c":"Entry 0's name ($BDC0-$BDC6, \"JOP    \"), and the base of $BDC0,X for the name of the entry at offset X: the marker test at $BC9B and $BD36 and the name store at $BD49.","t":"byte","b":[74,79,80,32,32,32,32],"x":[48283,48438,48457]},{"a":48583,"l":"hiscore_entry1","c":"Entries 1-7 of the one-player table ($BDC7-$BE28), and the base of $BDC7,X at $BC31, $BC56 and $BC5D: the entry after the one at offset X, which the sort compares and swaps with it.","t":"byte","b":[48,50,48,48,48,48,32,45],"x":[48177,48214,48221]},{"a":48591,"t":"byte","b":[45,45,32,32,32,32,48,50]},{"a":48599,"t":"byte","b":[48,48,48,48,32,45,45,45]},{"a":48607,"t":"byte","b":[32,32,32,32,48,50,48,48]},{"a":48615,"t":"byte","b":[48,48,32,45,45,45,32,32]},{"a":48623,"t":"byte","b":[32,32,48,50,48,48,48,48]},{"a":48631,"t":"byte","b":[32,45,45,45,32,32,32,32]},{"a":48639,"t":"byte","b":[48,50,48,48,48,48,32,45]},{"a":48647,"t":"byte","b":[45,45,32,32,32,32,48,50]},{"a":48655,"t":"byte","b":[48,48,48,48,32,45,45,45]},{"a":48663,"t":"byte","b":[32,32,32,32,48,50,48,48]},{"a":48671,"t":"byte","b":[48,48,32,45,45,45,32,32]},{"a":48679,"t":"byte","b":[32,32]},{"a":48681,"l":"hiscore_spare1","c":"Entry 8, the spare slot of the one-player table: $BBB3 writes a new score here (STA $BE29,X, also reaching entry 17 at +$7E) before sorting.","t":"byte","b":[48],"x":[48051,48105]},{"a":48682,"l":"hiscore_spare1_plus1","c":"Rest of entry 8, and the base of STA $BE2A,X at $BBBE/$BBF4: with X already advanced by six, that stores the marker in entry 8's (or 17's) first name letter.","t":"byte","b":[48,48,48,48,48,32,45,45],"x":[48062,48116]},{"a":48690,"t":"byte","b":[45,32,32,32,32]},{"a":48695,"l":"hiscore_team_top","c":"Entry 9, the top of the team table (\"050000 --- ---\" in the image, the best score of both at load): its score and space, compared with entry 0 at $BC0A to set $BDA5.","t":"byte","b":[48,53,48,48,48,48,32],"x":[48138]},{"a":48702,"l":"hiscore_team_names","c":"Entry 9's name and entries 10-17 of the team table ($BE3E-$BEB4); also the base of LDA $BE3E,X at $BCA6, the name of the team entry at offset X, tested for the markers.","t":"byte","b":[45,45,45,32,45,45,45,48],"x":[48294]},{"a":48710,"t":"byte","b":[50,48,48,48,48,32,75,82]},{"a":48718,"t":"byte","b":[88,32,78,73,70,48,50,48]},{"a":48726,"t":"byte","b":[48,48,48,32,45,45,45,32]},{"a":48734,"t":"byte","b":[45,45,45,48,50,48,48,48]},{"a":48742,"t":"byte","b":[48,32,45,45,45,32,45,45]},{"a":48750,"t":"byte","b":[45,48,50,48,48,48,48,32]},{"a":48758,"t":"byte","b":[45,45,45,32,45,45,45,48]},{"a":48766,"t":"byte","b":[50,48,48,48,48,32,45,45]},{"a":48774,"t":"byte","b":[45,32,45,45,45,48,50,48]},{"a":48782,"t":"byte","b":[48,48,48,32,45,45,45,32]},{"a":48790,"t":"byte","b":[45,45,45,48,50,48,48,48]},{"a":48798,"t":"byte","b":[48,32,45,45,45,32,45,45]},{"a":48806,"t":"byte","b":[45,48,48,48,48,48,48,32]},{"a":48814,"t":"byte","b":[45,45,45,32,45,45,45]},{"a":48821,"l":"text_hiscore_page","c":"Text page of the high-score table, printed in the normal font by $8F95-$8F9D through $BFFE: (14,5) \"top  scores\", (2,12) \"one  plr\", (27,12) \"two  plrs\", then rows 14, 16 ... 24 with the one-player entries at column 0 and the team entries at column 23, each \"N. \" and a 14-byte entry, ranks 2-7. $BD78 rewrites the entries in place.","t":"byte","b":[14,5,84,79,80,32,32,83]},{"a":48829,"t":"byte","b":[67,79,82,69,83,255,2,12]},{"a":48837,"t":"byte","b":[79,78,69,32,32,80,76,82]},{"a":48845,"t":"byte","b":[255,27,12,84,87,79,32,32]},{"a":48853,"t":"byte","b":[80,76,82,83,255,0,14,50]},{"a":48861,"t":"byte","b":[46,32]},{"a":48863,"l":"hiscore_page_rows","c":"The entry part of the first left row (\"020000 JOP    \") and the rest of the page to its closing $FF at $BFCA; the base of STA $BEDF,X at $BD83. Rows are 40 bytes apart, the right column 20 bytes on. $BFCB-$BFCF after the page (\"00 -0\") are not read.","t":"byte","b":[48,50,48,48,48,48,32,74],"x":[48515]},{"a":48871,"t":"byte","b":[79,80,32,32,32,32,255,23]},{"a":48879,"t":"byte","b":[14,50,46,32,48,50,48,48]},{"a":48887,"t":"byte","b":[48,48,32,75,82,88,32,78]},{"a":48895,"t":"byte","b":[73,70,255,0,16,51,46,32]},{"a":48903,"t":"byte","b":[48,50,48,48,48,48,32,45]},{"a":48911,"t":"byte","b":[45,45,32,32,32,32,255,23]},{"a":48919,"t":"byte","b":[16,51,46,32,48,50,48,48]},{"a":48927,"t":"byte","b":[48,48,32,45,45,45,32,45]},{"a":48935,"t":"byte","b":[45,45,255,0,18,52,46,32]},{"a":48943,"t":"byte","b":[48,50,48,48,48,48,32,45]},{"a":48951,"t":"byte","b":[45,45,32,32,32,32,255,23]},{"a":48959,"t":"byte","b":[18,52,46,32,48,50,48,48]},{"a":48967,"t":"byte","b":[48,48,32,45,45,45,32,45]},{"a":48975,"t":"byte","b":[45,45,255,0,20,53,46,32]},{"a":48983,"t":"byte","b":[48,50,48,48,48,48,32,45]},{"a":48991,"t":"byte","b":[45,45,32,32,32,32,255,23]},{"a":48999,"t":"byte","b":[20,53,46,32,48,50,48,48]},{"a":49007,"t":"byte","b":[48,48,32,45,45,45,32,45]},{"a":49015,"t":"byte","b":[45,45,255,0,22,54,46,32]},{"a":49023,"t":"byte","b":[48,50,48,48,48,48,32,45]},{"a":49031,"t":"byte","b":[45,45,32,32,32,32,255,23]},{"a":49039,"t":"byte","b":[22,54,46,32,48,50,48,48]},{"a":49047,"t":"byte","b":[48,48,32,45,45,45,32,45]},{"a":49055,"t":"byte","b":[45,45,255,0,24,55,46,32]},{"a":49063,"t":"byte","b":[48,50,48,48,48,48,32,45]},{"a":49071,"t":"byte","b":[45,45,32,32,32,32,255,23]},{"a":49079,"t":"byte","b":[24,55,46,32,48,50,48,48]},{"a":49087,"t":"byte","b":[48,48,32,45,45,45,32,45]},{"a":49095,"t":"byte","b":[45,45,255,255,48,48,32,45]},{"a":49103,"t":"byte","b":[48]},{"a":49104,"l":"hiscore_jump_insert","c":"Jump to $BBA0 (insert the scores, sort, rank), called at game over from $6BB0; with $BFD3 a two-entry jump table into the high-score code.","t":"code","b":[76,160,187],"m":"jmp","o":"hiscore_insert_scores","oa":48032,"x":[27568]},{"a":49107,"l":"hiscore_jump_store_name","c":"Jump to $BD32 (store a typed name), reached by JMP $BFD3 from $6CB9 with the marker in A.","t":"code","b":[76,50,189],"m":"jmp","o":"hiscore_store_name","oa":48434,"x":[27833]},{"a":49108,"t":"note","l":"score_digits_base","c":"Low byte ($32) of the JMP at $BFD3, and the base of $BFD4,X at $7113-$71BD with X = 7 or 14 ($71DA by side): the first (100,000s) digit of a side's score, $BFDB or $BFE2.","note":"inside the item at $BFD3","x":[28947,29033,29057,29117]},{"a":49109,"t":"note","l":"side_flags_base","c":"High byte ($BD) of the JMP at $BFD3, and the base of LDA $BFD5,X/Y (index 1-4) at $68C2, $6980 and $6A29, which reaches the side flags $BFD6-$BFD9.","note":"inside the item at $BFD3","x":[26818,27008,27177]},{"a":49110,"l":"side1_team","c":"Side 1 plays alone (1) or as a Wiz-and-cat team (2), from $B2AC at $6889. $BBA2 picks its high-score table and $697D its joystick routing. Also the base of $BFD6,X (the thousands digit) in the score adder $711C.","t":"byte","b":[0],"x":[26761,28956,48034]},{"a":49111,"l":"side2_team","c":"Side 2 plays alone (1) or as a team (2), from $B2AC. Also the base of $BFD7,X (the hundreds digit) in the score adder $7128/$7146.","t":"byte","b":[0],"x":[28968,28998,48088]},{"a":49112,"l":"sides","c":"Number of sides taking turns, 1 or 2, from $B2AC: $6B2D swaps sides after a lost life only when it is 2, and $BBCF enters side 2's score only then. Also the base of $BFD8,X (the tens digit) in the score adder $7131-$7143.","t":"byte","b":[0],"x":[27437,27502,28977,28980,28985,28995,48079]},{"a":49113,"l":"side_playing","c":"Side now playing, 1 or 2: set to 1 at $687B, swapped at $6B41 (EOR #3) when the other side still has lives. Indexes the lives ($B277,X), the score ($71D9 -> $BFD4,X), the score row positions ($71DB-$71DF) and the per-player block copies ($6E38, $6E45). Also the base of $BFD9,X/Y: $70D7 clears $BFDA-$BFE7 for a new game, and $714D tests the overflow digit.","t":"byte","b":[0],"x":[26560,26599,26619,26747,27005,27122,27166,27431,27452,27457,27460,27468,27473,28216,28229,28887,28939,29005,29011,29025,29049,29109,29122,32094,35093,40707,42984]},{"a":49114,"l":"side1_score_overflow","c":"Millions digit of side 1's score: $7146 carries into it; when it is non-zero $714D-$715F sets the six digits to 999999 and it back to 0. Also the base of LDA $BFDA,Y at $7192, which shows the score digits.","t":"byte","b":[0],"x":[29018,29074]},{"a":49115,"l":"side1_score","c":"Side 1's score, six digits 0-9, the 100,000s first ($BFDB-$BFE0); the last digit is never touched, so scores are multiples of 10. $710B adds A x 10 points; a change of the first digit is an extra Wizball ($71BB). $7190 shows it at the top left of the landscape screen; $BBAD enters it in the tables.","t":"byte","b":[0,0,0,0,0,0],"x":[48045]},{"a":49121,"l":"side2_score_overflow","c":"Millions digit of side 2's score (see $BFDA), and the base of LDA $BFE1,Y at $719B, which shows side 2's digits.","t":"byte","b":[0],"x":[29083]},{"a":49122,"l":"side2_score","c":"Side 2's score, six digits, the 100,000s first ($BFE2-$BFE7), shown at the top right ($71A1) and entered in the tables by $BBE3.","t":"byte","b":[0,0,0,0,0,0],"x":[48099]},{"a":49128,"l":"text_best_score","c":"String \"1. 050000\" and $FF, the best score as the title shows it: $8FC7-$8FCF draws it in the normal font into sprite blocks $85-$87 (pointer $B7DC), shown at $B57B's positions; $BD96 rewrites the six digits.","t":"byte","b":[49,46]},{"a":49130,"l":"best_score_digits_base","c":"The space of \"1. 050000\", and the base of LDA $BFEA,Y at $70DF: with Y = 6 down to 1 $70D3 converts the six digits into the HI score shown in play ($71D4-$71D9).","t":"byte","b":[32],"x":[28895]},{"a":49131,"l":"best_score_digits","c":"The six digits of the best score in \"1. 050000\" ($BFEB-$BFF0, PETSCII), written by $BD9B; then the string's $FF.","t":"byte","b":[48,53,48,48,48,48,255],"x":[48539]},{"a":49138,"l":"rank_side1","c":"Side 1's high-score rank code from $BC90: 0 none, 1 best in the one-player table, 2 placed there, 3 best in the team table, 4 placed there. $6BB3 skips the name entry when both codes are 0; an odd code also asks for the \"few words\" ($6C8D).","t":"byte","b":[3],"x":[27571,27595,48274,48324,48336,48406,48418]},{"a":49139,"l":"rank_side2","c":"Side 2's rank code, as $BFF2; also the base of STA $BFF3,Y at $6C30, $6C4E and $6C70 (index 1-10), which writes the name buffer $BFF4.","t":"byte","b":[0],"x":[27574,27616,27696,27726,27760,48244,48256,48277,48365,48377]},{"a":49140,"l":"hiscore_name_buffer","c":"Name-entry buffer, ten PETSCII bytes ($BFF4-$BFFD). It holds \"POO BAG   \" in the loaded image, a leftover that is never shown: $6C2C fills it with spaces before every name entry, the typed initials go to $BFF4-$BFF6 (and a team's cat player's to $BFF8-$BFFA), and only $BD46 reads it, copying seven bytes (\"POO BAG\" is exactly seven) into a table entry.","t":"byte","b":[80,79,79],"x":[48454]},{"a":49143,"l":"name_buffer_cat_base","c":"Fourth byte of the name buffer (the space between a team's two sets of initials), and the base of STA $BFF7,Y at $6C87 (Y = 3..1): the cat player's initials at $BFF8-$BFFA; $BFFB-$BFFD stay spaces.","t":"byte","b":[32,66,65,71,32,32,32],"x":[27783]},{"a":49150,"l":"ptr_text_hiscore_page","c":"Pointer to the high-score page $BEB5, low byte (LDX $BFFE at $8F95).","t":"byte","b":[181],"x":[36757]},{"a":49151,"l":"ptr_text_hiscore_page_hi","c":"High byte of the pointer to $BEB5 (LDY $BFFF at $8F98).","t":"byte","b":[190],"x":[36760]},{"a":49152,"l":"sprites_icons_0_4","c":"Sprite shapes 0-4 (pointers $00-$04 in VIC bank 3, $C000-$C13F), multicolour, icon-bar icons in their boxes: 0 shield (the yin-yang sphere), 1 smart bomb, 2 catelite (the cat's face), 3 anti-grav, 4 double. Matched against the Wiztips page one legend (reference/wiztips-one.png) and borne out by the code: $720B loads the bar's pointers $EFF8-$EFFF from $B4DE (07 0B 02 06 08 01 00 00), taking icon 1 turns 7 into 3 and then 9 ($7379), icon 2 turns $0B into 4 and then 9 ($734B-$7362), icon 3 turns 2 into 9 ($7366).","t":"byte","b":[255,255,255,234,170,169,234,170]},{"a":49160,"t":"byte","b":[169,234,190,169,234,255,169,235]},{"a":49168,"t":"byte","b":[255,233,235,253,233,235,253,233]},{"a":49176,"t":"byte","b":[239,255,217,239,255,217,239,95]},{"a":49184,"t":"byte","b":[89,237,85,89,237,85,89,233]},{"a":49192,"t":"byte","b":[213,105,233,213,105,233,85,105]},{"a":49200,"t":"byte","b":[234,85,169,234,150,169,234,170]},{"a":49208,"t":"byte","b":[169,234,170,169,85,85,85,20]},{"a":49216,"t":"byte","b":[255,255,255,234,170,169,234,170]},{"a":49224,"t":"byte","b":[169,234,170,169,234,170,169,234]},{"a":49232,"t":"byte","b":[171,169,234,170,105,234,169,185]},{"a":49240,"t":"byte","b":[234,167,169,232,6,169,232,202]},{"a":49248,"t":"byte","b":[169,227,2,169,227,2,169,224]},{"a":49256,"t":"byte","b":[2,169,224,2,169,224,2,169]},{"a":49264,"t":"byte","b":[232,10,169,232,10,169,234,170]},{"a":49272,"t":"byte","b":[169,234,170,169,85,85,85,20]},{"a":49280,"t":"byte","b":[255,255,255,234,170,169,234,170]},{"a":49288,"t":"byte","b":[169,234,170,169,234,170,169,234]},{"a":49296,"t":"byte","b":[190,169,234,255,169,234,250,169]},{"a":49304,"t":"byte","b":[235,235,233,235,254,41,235,138]},{"a":49312,"t":"byte","b":[41,235,138,41,235,73,105,234]},{"a":49320,"t":"byte","b":[85,169,234,213,169,234,150,169]},{"a":49328,"t":"byte","b":[234,170,169,234,170,169,234,170]},{"a":49336,"t":"byte","b":[169,234,170,169,85,85,85,30]},{"a":49344,"t":"byte","b":[255,255,255,234,170,169,237,170]},{"a":49352,"t":"byte","b":[169,253,106,169,253,106,169,237]},{"a":49360,"t":"byte","b":[170,169,237,190,169,238,253,169]},{"a":49368,"t":"byte","b":[238,193,169,235,233,105,235,0]},{"a":49376,"t":"byte","b":[105,235,193,105,234,233,153,234]},{"a":49384,"t":"byte","b":[213,153,234,150,217,234,170,217]},{"a":49392,"t":"byte","b":[234,171,213,234,171,213,234,170]},{"a":49400,"t":"byte","b":[217,234,170,169,85,85,85,30]},{"a":49408,"t":"byte","b":[255,255,255,234,170,169,250,170]},{"a":49416,"t":"byte","b":[169,246,170,169,198,170,169,229]},{"a":49424,"t":"byte","b":[186,185,193,154,153,197,170,169]},{"a":49432,"t":"byte","b":[230,170,169,214,170,169,218,170]},{"a":49440,"t":"byte","b":[173,234,170,189,234,170,177,238]},{"a":49448,"t":"byte","b":[174,249,230,166,193,234,170,241]},{"a":49456,"t":"byte","b":[234,170,185,234,170,181,234,170]},{"a":49464,"t":"byte","b":[165,234,170,169,85,85,85,30]},{"a":49472,"l":"sprite_blank_5","c":"Sprite shape 5 ($C140-$C17F), all zero in the image: the game's empty sprite. Pointer 5 hides a sprite ($7220, $859D and $AADE put 5 in $B8DE/$B8DF), and $7230 clears it at the start of play ($8F15 with Y = 5). The player menu borrows it for its star field: $9034 clears it, $903D puts a two-pixel dot in it ($C161), and $9055-$905E point all eight sprites at it.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":49480,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":49488,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":49496,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":49504,"t":"byte","b":[0]},{"a":49505,"l":"sprite_blank_5_dot","c":"Byte 33 of sprite 5 (row 11, left byte). $903D writes $C0 here, the only write found: a two-pixel dot for the player menu's stars. It stays there until $7230 clears sprite 5 when play starts (yeti-title.vsf has $C0 here, play-start.vsf 0).","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[36927]},{"a":49513,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":49521,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":49529,"t":"byte","b":[0,0,0,0,0,0,0]},{"a":49536,"l":"sprites_icons_6_11","c":"Sprite shapes 6-11 ($C180-$C2FF), more icon-bar icons: 6 blazers, 7 thrust, 8 wiz spray, 9 an arrow in a dark box, 10 cat spray, 11 beam. 9 marks a slot that cannot be taken: used up ($738E after anti-grav, $7360 after double) or in use ($736B while the catelite is out, $73CE while a shield is on); the Wiz-lab refuses a slot showing 9 ($B0A7). Icon 5 switches between 8 and 10 as the spray passes between Wiz and Cat ($7325-$734A).","t":"byte","b":[255,255,255,234,170,169,234,170]},{"a":49544,"t":"byte","b":[169,234,170,169,234,170,169,234]},{"a":49552,"t":"byte","b":[170,169,250,170,169,246,170,169]},{"a":49560,"t":"byte","b":[198,170,169,229,170,169,193,191]},{"a":49568,"t":"byte","b":[169,197,149,169,230,170,253,214]},{"a":49576,"t":"byte","b":[170,85,218,170,169,234,170,169]},{"a":49584,"t":"byte","b":[234,170,169,234,170,169,234,170]},{"a":49592,"t":"byte","b":[169,234,170,169,85,85,85,30]},{"a":49600,"t":"byte","b":[255,255,255,234,170,169,234,170]},{"a":49608,"t":"byte","b":[233,234,191,249,234,149,89,234]},{"a":49616,"t":"byte","b":[170,105,234,190,169,234,253,169]},{"a":49624,"t":"byte","b":[234,193,169,235,233,105,235,0]},{"a":49632,"t":"byte","b":[105,235,193,105,234,233,169,234]},{"a":49640,"t":"byte","b":[213,169,234,150,169,235,170,169]},{"a":49648,"t":"byte","b":[239,254,169,229,86,169,233,170]},{"a":49656,"t":"byte","b":[169,234,170,169,85,85,85,30]},{"a":49664,"t":"byte","b":[255,255,255,234,170,169,234,182]},{"a":49672,"t":"byte","b":[169,234,182,169,250,170,173,222]},{"a":49680,"t":"byte","b":[170,181,230,190,153,234,253,169]},{"a":49688,"t":"byte","b":[234,193,169,235,233,105,235,0]},{"a":49696,"t":"byte","b":[105,235,193,105,234,233,169,234]},{"a":49704,"t":"byte","b":[213,169,238,150,185,246,170,157]},{"a":49712,"t":"byte","b":[218,170,165,234,182,169,234,182]},{"a":49720,"t":"byte","b":[169,234,170,169,85,85,85,30]},{"a":49728,"t":"byte","b":[255,255,255,213,85,85,208,0]},{"a":49736,"t":"byte","b":[13,208,0,13,208,0,13,208]},{"a":49744,"t":"byte","b":[0,13,208,48,13,208,60,13]},{"a":49752,"t":"byte","b":[223,251,13,222,170,205,222,170]},{"a":49760,"t":"byte","b":[157,222,170,77,213,89,13,208]},{"a":49768,"t":"byte","b":[20,13,208,16,13,208,0,13]},{"a":49776,"t":"byte","b":[208,0,13,208,0,13,208,0]},{"a":49784,"t":"byte","b":[13,255,255,253,85,85,85,30]},{"a":49792,"t":"byte","b":[255,255,255,234,170,169,234,182]},{"a":49800,"t":"byte","b":[169,234,182,169,250,170,173,222]},{"a":49808,"t":"byte","b":[170,181,230,170,153,234,190,169]},{"a":49816,"t":"byte","b":[234,251,169,234,61,169,234,33]},{"a":49824,"t":"byte","b":[169,234,97,169,234,213,169,234]},{"a":49832,"t":"byte","b":[150,169,238,170,185,246,170,157]},{"a":49840,"t":"byte","b":[218,170,165,234,182,169,234,182]},{"a":49848,"t":"byte","b":[169,234,170,169,85,85,85,30]},{"a":49856,"t":"byte","b":[255,255,255,234,255,169,235,85]},{"a":49864,"t":"byte","b":[233,233,170,105,234,190,169,234]},{"a":49872,"t":"byte","b":[150,169,234,190,169,234,253,169]},{"a":49880,"t":"byte","b":[234,193,169,235,233,105,235,0]},{"a":49888,"t":"byte","b":[105,235,193,105,234,233,169,234]},{"a":49896,"t":"byte","b":[213,169,234,150,169,234,190,169]},{"a":49904,"t":"byte","b":[234,150,169,235,170,233,233,255]},{"a":49912,"t":"byte","b":[105,234,85,169,85,85,85,30]},{"a":49920,"l":"sprite_ring_12","c":"Sprite shape 12 ($C300-$C33F): a ring, drawn in multicolour. The 'get ready!' screen points all eight sprites at it ($68F4-$68FE) for the rings that circle the words.","t":"byte","b":[0,0,0,0,252,0,7,255]},{"a":49928,"t":"byte","b":[128,15,255,192,31,3,224,60]},{"a":49936,"t":"byte","b":[0,240,120,0,120,112,0,56]},{"a":49944,"t":"byte","b":[240,0,60,224,0,28,224,0]},{"a":49952,"t":"byte","b":[28,224,0,28,224,0,28,240]},{"a":49960,"t":"byte","b":[0,60,112,0,56,120,0,120]},{"a":49968,"t":"byte","b":[60,0,240,31,3,224,15,255]},{"a":49976,"t":"byte","b":[192,7,255,128,0,252,0,30]},{"a":49984,"l":"sprites_catelite_13_15","c":"Sprite shapes 13-15 ($C340-$C3FF): the catelite, a round cat's face with big eyes, in three animation frames. $87E6 sets sprite 1's pointer ($B526) to $0D + $B268, $B268 counting 0-2 every fourth call; sprite 1 is the catelite, hidden while $B234 is 0 ($8640).","t":"byte","b":[0,0,0,15,192,0,63,176]},{"a":49992,"t":"byte","b":[0,63,224,0,254,168,0,249]},{"a":50000,"t":"byte","b":[124,0,255,196,0,226,132,0]},{"a":50008,"t":"byte","b":[226,132,0,82,148,0,149,64]},{"a":50016,"t":"byte","b":[0,32,16,0,25,80,0,5]},{"a":50024,"t":"byte","b":[64,0,0,0,0,0,0,0]},{"a":50032,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":50040,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":50048,"t":"byte","b":[0,0,0,15,192,0,63,176]},{"a":50056,"t":"byte","b":[0,63,224,0,254,168,0,249]},{"a":50064,"t":"byte","b":[124,0,63,224,0,40,160,0]},{"a":50072,"t":"byte","b":[40,160,0,88,148,0,149,64]},{"a":50080,"t":"byte","b":[0,32,16,0,25,80,0,5]},{"a":50088,"t":"byte","b":[64,0,0,0,0,0,0,0]},{"a":50096,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":50104,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":50112,"t":"byte","b":[0,0,0,15,192,0,63,176]},{"a":50120,"t":"byte","b":[0,63,224,0,254,168,0,249]},{"a":50128,"t":"byte","b":[124,0,207,228,0,202,36,0]},{"a":50136,"t":"byte","b":[202,36,0,90,20,0,149,64]},{"a":50144,"t":"byte","b":[0,32,16,0,25,80,0,5]},{"a":50152,"t":"byte","b":[64,0,0,0,0,0,0,0]},{"a":50160,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":50168,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":50176,"l":"sprites_wizball_spin_16_31","c":"Sprite shapes 16-31 ($C400-$C7FF): the Wizball, a patterned ball, in 16 rotation frames. $80DA sets sprite 0's pointer ($B525) to $10 + $B21A, $B21A being the spin frame 0-15; $81E9 copies the frame in use into sprite $B4 ($ED00) when the ball goes down at glyph $BE ($81C9).","t":"byte","b":[0,0,0,0,255,0,3,254]},{"a":50184,"t":"byte","b":[192,3,105,128,13,20,224,13]},{"a":50192,"t":"byte","b":[52,224,14,235,208,62,190,168]},{"a":50200,"t":"byte","b":[59,215,232,45,65,120,52,0]},{"a":50208,"t":"byte","b":[28,45,65,116,43,215,212,58]},{"a":50216,"t":"byte","b":[189,84,10,150,80,10,169,80]},{"a":50224,"t":"byte","b":[14,150,80,2,169,64,2,85]},{"a":50232,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":50240,"t":"byte","b":[0,0,0,0,255,0,3,254]},{"a":50248,"t":"byte","b":[192,3,218,128,15,78,160,15]},{"a":50256,"t":"byte","b":[70,96,15,185,16,63,249,56]},{"a":50264,"t":"byte","b":[53,95,164,60,1,232,59,65]},{"a":50272,"t":"byte","b":[212,59,64,52,42,245,92,58]},{"a":50280,"t":"byte","b":[95,240,10,165,80,9,170,80]},{"a":50288,"t":"byte","b":[14,89,80,2,169,64,2,85]},{"a":50296,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":50304,"t":"byte","b":[0,0,0,0,255,0,3,254]},{"a":50312,"t":"byte","b":[192,3,230,128,15,147,160,13]},{"a":50320,"t":"byte","b":[211,160,13,125,144,61,29,104]},{"a":50328,"t":"byte","b":[63,71,52,59,67,56,59,65]},{"a":50336,"t":"byte","b":[228,58,193,212,42,208,212,57]},{"a":50344,"t":"byte","b":[116,116,9,157,112,10,103,208]},{"a":50352,"t":"byte","b":[14,89,80,2,165,64,2,85]},{"a":50360,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":50368,"t":"byte","b":[0,0,0,0,255,0,3,254]},{"a":50376,"t":"byte","b":[192,3,122,128,15,117,160,15]},{"a":50384,"t":"byte","b":[92,208,15,92,224,63,78,88]},{"a":50392,"t":"byte","b":[59,71,100,58,195,56,58,195]},{"a":50400,"t":"byte","b":[52,41,195,148,57,209,212,41]},{"a":50408,"t":"byte","b":[177,212,9,181,208,10,117,208]},{"a":50416,"t":"byte","b":[10,173,208,2,173,192,2,167]},{"a":50424,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":50432,"t":"byte","b":[0,0,0,0,255,0,3,247]},{"a":50440,"t":"byte","b":[192,3,247,128,15,183,160,15]},{"a":50448,"t":"byte","b":[215,144,14,215,96,62,215,56]},{"a":50456,"t":"byte","b":[54,195,52,54,195,216,54,195]},{"a":50464,"t":"byte","b":[88,54,195,84,38,195,52,58]},{"a":50472,"t":"byte","b":[215,52,10,215,208,10,215,80]},{"a":50480,"t":"byte","b":[14,183,80,1,183,64,2,119]},{"a":50488,"t":"byte","b":[64,0,93,0,0,0,0,21]},{"a":50496,"t":"byte","b":[0,0,0,0,255,0,3,251]},{"a":50504,"t":"byte","b":[192,3,173,192,14,173,224,14]},{"a":50512,"t":"byte","b":[117,208,13,181,208,57,177,216]},{"a":50520,"t":"byte","b":[57,209,212,57,195,88,58,195]},{"a":50528,"t":"byte","b":[52,42,195,52,59,71,212,43]},{"a":50536,"t":"byte","b":[77,84,11,92,208,11,92,208]},{"a":50544,"t":"byte","b":[11,119,80,3,117,64,2,213]},{"a":50552,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":50560,"t":"byte","b":[0,0,0,0,255,0,3,250]},{"a":50568,"t":"byte","b":[192,3,238,128,15,90,160,15]},{"a":50576,"t":"byte","b":[107,208,13,173,112,62,180,116]},{"a":50584,"t":"byte","b":[58,208,212,62,193,216,59,65]},{"a":50592,"t":"byte","b":[228,43,67,52,59,71,52,45]},{"a":50600,"t":"byte","b":[29,212,13,117,80,13,211,80]},{"a":50608,"t":"byte","b":[15,83,80,2,173,64,2,85]},{"a":50616,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":50624,"t":"byte","b":[0,0,0,0,255,0,3,254]},{"a":50632,"t":"byte","b":[192,3,234,128,15,90,160,13]},{"a":50640,"t":"byte","b":[170,144,15,170,160,62,175,248]},{"a":50648,"t":"byte","b":[62,245,92,59,64,116,59,65]},{"a":50656,"t":"byte","b":[212,61,1,212,53,95,84,63]},{"a":50664,"t":"byte","b":[245,52,9,89,48,10,77,208]},{"a":50672,"t":"byte","b":[14,70,80,2,185,64,2,85]},{"a":50680,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":50688,"t":"byte","b":[0,0,0,0,255,0,3,254]},{"a":50696,"t":"byte","b":[192,3,234,128,15,214,160,15]},{"a":50704,"t":"byte","b":[170,160,14,170,144,62,190,168]},{"a":50712,"t":"byte","b":[59,215,228,45,65,120,52,0]},{"a":50720,"t":"byte","b":[28,45,65,116,43,215,212,58]},{"a":50728,"t":"byte","b":[125,84,10,85,208,9,52,208]},{"a":50736,"t":"byte","b":[13,52,144,2,231,64,2,85]},{"a":50744,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":50752,"t":"byte","b":[0,0,0,0,255,0,3,254]},{"a":50760,"t":"byte","b":[192,3,234,128,15,229,160,15]},{"a":50768,"t":"byte","b":[170,96,15,170,144,63,250,168]},{"a":50776,"t":"byte","b":[53,95,164,60,1,232,59,65]},{"a":50784,"t":"byte","b":[212,59,64,52,41,245,92,52]},{"a":50792,"t":"byte","b":[223,244,4,229,80,11,83,80]},{"a":50800,"t":"byte","b":[14,147,80,2,173,64,2,85]},{"a":50808,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":50816,"t":"byte","b":[0,0,0,0,255,0,3,250]},{"a":50824,"t":"byte","b":[192,3,238,128,15,233,160,15]},{"a":50832,"t":"byte","b":[233,144,13,122,96,61,30,168]},{"a":50840,"t":"byte","b":[63,7,164,59,67,104,59,65]},{"a":50848,"t":"byte","b":[212,36,193,212,52,209,212,43]},{"a":50856,"t":"byte","b":[116,116,9,157,112,14,71,112]},{"a":50864,"t":"byte","b":[10,77,208,2,185,64,2,85]},{"a":50872,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":50880,"t":"byte","b":[0,0,0,0,255,0,3,254]},{"a":50888,"t":"byte","b":[192,3,122,128,15,118,160,15]},{"a":50896,"t":"byte","b":[93,144,15,93,96,63,77,104]},{"a":50904,"t":"byte","b":[59,71,100,57,195,88,52,195]},{"a":50912,"t":"byte","b":[84,36,195,84,59,209,212,41]},{"a":50920,"t":"byte","b":[113,212,9,53,208,9,53,208]},{"a":50928,"t":"byte","b":[10,237,208,2,173,192,2,103]},{"a":50936,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":50944,"t":"byte","b":[0,0,0,0,255,0,3,222]},{"a":50952,"t":"byte","b":[192,3,221,128,15,221,160,15]},{"a":50960,"t":"byte","b":[215,144,13,215,96,52,215,104]},{"a":50968,"t":"byte","b":[52,195,84,55,195,88,54,195]},{"a":50976,"t":"byte","b":[88,57,195,84,36,195,84,52]},{"a":50984,"t":"byte","b":[215,100,11,215,80,10,215,80]},{"a":50992,"t":"byte","b":[14,221,80,1,221,64,2,221]},{"a":51000,"t":"byte","b":[64,0,117,0,0,0,0,21]},{"a":51008,"t":"byte","b":[0,0,0,0,255,0,3,251]},{"a":51016,"t":"byte","b":[192,3,237,192,15,109,224,13]},{"a":51024,"t":"byte","b":[53,208,13,53,208,62,241,216]},{"a":51032,"t":"byte","b":[57,209,212,52,195,88,52,195]},{"a":51040,"t":"byte","b":[100,43,195,84,59,71,84,43]},{"a":51048,"t":"byte","b":[77,148,11,93,144,11,93,80]},{"a":51056,"t":"byte","b":[11,118,80,3,118,64,2,217]},{"a":51064,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":51072,"t":"byte","b":[0,0,0,0,255,0,3,254]},{"a":51080,"t":"byte","b":[192,3,218,128,15,78,224,15]},{"a":51088,"t":"byte","b":[79,112,14,125,112,61,180,116]},{"a":51096,"t":"byte","b":[52,209,212,52,193,216,63,65]},{"a":51104,"t":"byte","b":[212,59,67,100,59,7,84,61]},{"a":51112,"t":"byte","b":[29,84,13,118,80,15,217,144]},{"a":51120,"t":"byte","b":[14,170,80,2,165,64,3,85]},{"a":51128,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":51136,"t":"byte","b":[0,0,0,0,255,0,3,254]},{"a":51144,"t":"byte","b":[192,3,230,128,15,147,160,13]},{"a":51152,"t":"byte","b":[83,144,4,238,160,52,239,248]},{"a":51160,"t":"byte","b":[63,245,92,59,64,116,59,65]},{"a":51168,"t":"byte","b":[212,61,1,212,53,95,100,63]},{"a":51176,"t":"byte","b":[245,148,9,90,80,10,170,80]},{"a":51184,"t":"byte","b":[14,165,80,2,169,64,2,85]},{"a":51192,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":51200,"l":"sprites_wizball_appear_32_47","c":"Sprite shapes 32-47 ($C800-$CBFF): the first 16 of the 24 frames in which a Wizball appears or vanishes, the ball's pattern thinning into rings that flatten into an ellipse and then a line. $8031 sets $B21A = $10 + $B214, so the pointer is $20 + $B214: $B214 counts down from 23 to 0 as the ball appears ($8008) and up from 0 to 23 as it goes ($8022); sprite 32 is the frame next to the whole ball.","t":"byte","b":[0,0,0,0,255,0,3,254]},{"a":51208,"t":"byte","b":[192,3,105,128,13,20,224,13]},{"a":51216,"t":"byte","b":[52,224,14,235,208,62,190,168]},{"a":51224,"t":"byte","b":[59,215,232,45,65,120,52,0]},{"a":51232,"t":"byte","b":[28,45,65,116,43,215,212,58]},{"a":51240,"t":"byte","b":[189,84,10,150,80,10,169,80]},{"a":51248,"t":"byte","b":[14,150,80,2,169,64,2,85]},{"a":51256,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":51264,"t":"byte","b":[0,0,0,0,255,0,3,125]},{"a":51272,"t":"byte","b":[192,1,20,192,13,52,224,14]},{"a":51280,"t":"byte","b":[235,160,14,255,144,63,85,232]},{"a":51288,"t":"byte","b":[61,65,116,53,0,92,52,0]},{"a":51296,"t":"byte","b":[28,53,0,92,45,65,116,59]},{"a":51304,"t":"byte","b":[85,212,10,255,80,10,149,80]},{"a":51312,"t":"byte","b":[14,169,80,2,149,64,2,101]},{"a":51320,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":51328,"t":"byte","b":[0,0,0,0,255,0,3,125]},{"a":51336,"t":"byte","b":[192,1,20,192,13,52,224,14]},{"a":51344,"t":"byte","b":[255,160,15,85,208,61,65,120]},{"a":51352,"t":"byte","b":[61,0,116,53,0,92,52,0]},{"a":51360,"t":"byte","b":[28,53,0,92,61,0,116,45]},{"a":51368,"t":"byte","b":[65,116,11,85,208,10,255,80]},{"a":51376,"t":"byte","b":[14,149,80,2,169,64,2,85]},{"a":51384,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":51392,"t":"byte","b":[0,0,0,0,190,0,2,52]},{"a":51400,"t":"byte","b":[192,2,52,192,14,255,224,15]},{"a":51408,"t":"byte","b":[85,224,13,65,112,61,0,120]},{"a":51416,"t":"byte","b":[53,0,92,52,0,28,52,0]},{"a":51424,"t":"byte","b":[28,52,0,28,53,0,92,45]},{"a":51432,"t":"byte","b":[0,116,13,65,112,11,85,208]},{"a":51440,"t":"byte","b":[14,255,80,2,149,64,2,85]},{"a":51448,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":51456,"t":"byte","b":[0,0,0,0,125,0,2,52]},{"a":51464,"t":"byte","b":[192,2,255,192,15,85,224,13]},{"a":51472,"t":"byte","b":[65,112,13,0,112,61,0,120]},{"a":51480,"t":"byte","b":[53,0,92,52,0,28,52,0]},{"a":51488,"t":"byte","b":[28,52,0,28,53,0,92,45]},{"a":51496,"t":"byte","b":[0,116,13,0,112,13,65,112]},{"a":51504,"t":"byte","b":[15,85,208,2,255,64,2,85]},{"a":51512,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":51520,"t":"byte","b":[0,0,0,0,56,0,2,255]},{"a":51528,"t":"byte","b":[128,3,85,192,15,65,224,13]},{"a":51536,"t":"byte","b":[65,112,13,0,112,53,0,92]},{"a":51544,"t":"byte","b":[52,0,28,52,0,28,52,0]},{"a":51552,"t":"byte","b":[28,52,0,28,52,0,28,53]},{"a":51560,"t":"byte","b":[0,92,13,0,112,13,65,112]},{"a":51568,"t":"byte","b":[15,65,208,3,85,192,2,255]},{"a":51576,"t":"byte","b":[64,0,149,0,0,0,0,21]},{"a":51584,"t":"byte","b":[0,0,0,0,255,0,3,85]},{"a":51592,"t":"byte","b":[192,3,65,192,13,65,112,13]},{"a":51600,"t":"byte","b":[0,112,13,0,112,53,0,92]},{"a":51608,"t":"byte","b":[52,0,28,52,0,28,52,0]},{"a":51616,"t":"byte","b":[28,52,0,28,52,0,28,53]},{"a":51624,"t":"byte","b":[0,92,13,0,112,13,0,112]},{"a":51632,"t":"byte","b":[13,65,112,3,65,192,3,85]},{"a":51640,"t":"byte","b":[192,0,255,0,0,0,0,21]},{"a":51648,"t":"byte","b":[0,0,0,0,0,0,0,255]},{"a":51656,"t":"byte","b":[0,3,85,192,3,65,192,13]},{"a":51664,"t":"byte","b":[65,112,13,0,112,53,0,92]},{"a":51672,"t":"byte","b":[52,0,28,52,0,28,32,0]},{"a":51680,"t":"byte","b":[8,52,0,28,52,0,28,53]},{"a":51688,"t":"byte","b":[0,92,13,0,112,13,65,112]},{"a":51696,"t":"byte","b":[3,65,192,3,85,192,0,255]},{"a":51704,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":51712,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":51720,"t":"byte","b":[0,0,255,0,3,85,192,13]},{"a":51728,"t":"byte","b":[65,112,13,0,112,13,0,112]},{"a":51736,"t":"byte","b":[53,0,92,52,0,28,32,0]},{"a":51744,"t":"byte","b":[8,52,0,28,53,0,92,13]},{"a":51752,"t":"byte","b":[0,112,13,0,112,13,65,112]},{"a":51760,"t":"byte","b":[3,85,192,0,255,0,0,0]},{"a":51768,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":51776,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":51784,"t":"byte","b":[0,0,0,0,0,255,0,3]},{"a":51792,"t":"byte","b":[85,192,13,65,112,13,0,112]},{"a":51800,"t":"byte","b":[53,0,92,52,0,28,32,0]},{"a":51808,"t":"byte","b":[8,52,0,28,53,0,92,13]},{"a":51816,"t":"byte","b":[0,112,13,65,112,3,85,192]},{"a":51824,"t":"byte","b":[0,255,0,0,0,0,0,0]},{"a":51832,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":51840,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":51848,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":51856,"t":"byte","b":[255,0,3,85,192,13,65,112]},{"a":51864,"t":"byte","b":[13,0,112,53,0,92,32,0]},{"a":51872,"t":"byte","b":[8,53,0,92,13,0,112,13]},{"a":51880,"t":"byte","b":[65,112,3,85,192,0,255,0]},{"a":51888,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":51896,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":51904,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":51912,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":51920,"t":"byte","b":[0,0,0,255,0,3,85,192]},{"a":51928,"t":"byte","b":[13,65,112,53,0,92,32,0]},{"a":51936,"t":"byte","b":[8,53,0,92,13,65,112,3]},{"a":51944,"t":"byte","b":[85,192,0,255,0,0,0,0]},{"a":51952,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":51960,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":51968,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":51976,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":51984,"t":"byte","b":[0,0,0,0,0,0,60,0]},{"a":51992,"t":"byte","b":[3,215,192,13,65,112,32,0]},{"a":52000,"t":"byte","b":[8,13,65,112,3,215,192,0]},{"a":52008,"t":"byte","b":[60,0,0,0,0,0,0,0]},{"a":52016,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52024,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":52032,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52040,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52048,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52056,"t":"byte","b":[0,255,0,15,85,240,33,65]},{"a":52064,"t":"byte","b":[72,15,85,240,0,255,0,0]},{"a":52072,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52080,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52088,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":52096,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52104,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52112,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52120,"t":"byte","b":[0,0,0,0,255,0,35,65]},{"a":52128,"t":"byte","b":[200,0,255,0,0,0,0,0]},{"a":52136,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52144,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52152,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":52160,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52168,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52176,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52184,"t":"byte","b":[0,0,0,0,0,0,18,170]},{"a":52192,"t":"byte","b":[132,0,0,0,0,0,0,0]},{"a":52200,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52208,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52216,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":52224,"l":"sprites_wizball_appear_48_55","c":"Sprite shapes 48-55 ($CC00-$CDFE): the last 8 of the 24 appear/vanish frames, a short line at eight angles (pointer $20 + $B214 for $B214 = 16-23). 55 is the first frame shown when a Wizball arrives ($8045 sets $B214 = $17) and the last when one leaves.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52232,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52240,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52248,"t":"byte","b":[0,0,0,0,0,0,2,170]},{"a":52256,"t":"byte","b":[128,0,0,0,0,0,0,0]},{"a":52264,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52272,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52280,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":52288,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52296,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52304,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52312,"t":"byte","b":[0,2,128,0,10,0,0,40]},{"a":52320,"t":"byte","b":[0,0,160,0,2,128,0,0]},{"a":52328,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52336,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52344,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":52352,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52360,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52368,"t":"byte","b":[0,0,0,2,0,0,2,0]},{"a":52376,"t":"byte","b":[0,8,0,0,8,0,0,32]},{"a":52384,"t":"byte","b":[0,0,32,0,0,128,0,0]},{"a":52392,"t":"byte","b":[128,0,0,0,0,0,0,0]},{"a":52400,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52408,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":52416,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52424,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52432,"t":"byte","b":[0,0,0,8,0,0,8,0]},{"a":52440,"t":"byte","b":[0,8,0,0,8,0,0,32]},{"a":52448,"t":"byte","b":[0,0,32,0,0,32,0,0]},{"a":52456,"t":"byte","b":[32,0,0,0,0,0,0,0]},{"a":52464,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52472,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":52480,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52488,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52496,"t":"byte","b":[0,0,0,0,0,0,32,0]},{"a":52504,"t":"byte","b":[0,32,0,0,32,0,0,8]},{"a":52512,"t":"byte","b":[0,0,8,0,0,8,0,0]},{"a":52520,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52528,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52536,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":52544,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52552,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52560,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52568,"t":"byte","b":[0,128,0,0,32,0,0,8]},{"a":52576,"t":"byte","b":[0,0,2,0,0,0,0,0]},{"a":52584,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52592,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52600,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":52608,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52616,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52624,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52632,"t":"byte","b":[0,0,0,0,160,0,0,10]},{"a":52640,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52648,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52656,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52664,"t":"byte","b":[0,0,0,0,0,0,0,21]},{"a":52672,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52680,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52688,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52696,"t":"byte","b":[0,0,0,0,0,0,0,40]},{"a":52704,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52712,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52720,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52728,"t":"byte","b":[0,0,0,0,0,0,0]},{"a":52735,"l":"cauldron_empty_minus_1","c":"Padding byte of sprite 55, and the base of LDA $CDFF,Y with Y from $40 down to 1 at $7781 and $9DEB, which copy sprite 56 (the empty cauldron, $CE00-$CE3F) into the cauldron sprites at $EE40-$EF3F.","t":"byte","b":[21],"x":[30593,40427]},{"a":52736,"l":"sprite_cauldron_empty","c":"Sprite shape 56 ($CE00-$CE3F): an empty cauldron, drawn in multicolour. $9DE9 copies it into sprites $B9-$BC ($EE40-$EF3F), the four cauldrons at the bottom of the play screen, and $777F into $BC alone; $9EB3 reads it a row at a time (this is the base of LDA $CE00,Y) to redraw the part of a cauldron above its fill level.","t":"byte","b":[80],"x":[40627]},{"a":52737,"l":"sprite_cauldron_empty_b1","c":"Byte 1 of the empty cauldron's first row; base of LDA $CE01,Y at $9EB9, the middle byte of each cauldron row that $9EB3-$9EC4 copies.","t":"byte","b":[0],"x":[40633]},{"a":52738,"l":"sprite_cauldron_empty_b2","c":"Byte 2 of the empty cauldron's first row, and the rest of that shape to $CE3F; base of LDA $CE02,Y at $9EBF, the right-hand byte of each cauldron row that $9EB3-$9EC4 copies.","t":"byte","b":[5,220,0,31,28,0,28,7],"x":[40639]},{"a":52746,"t":"byte","b":[0,112,7,0,112,7,0,112]},{"a":52754,"t":"byte","b":[7,0,112,28,0,28,28,0]},{"a":52762,"t":"byte","b":[28,28,0,28,112,0,7,112]},{"a":52770,"t":"byte","b":[0,7,112,0,7,112,0,7]},{"a":52778,"t":"byte","b":[112,0,7,112,0,7,28,0]},{"a":52786,"t":"byte","b":[28,28,0,28,31,0,124,113]},{"a":52794,"t":"byte","b":[195,199,112,255,15,18]},{"a":52800,"l":"sprite_cauldron_full","c":"Sprite shape 57 ($CE40-$CE7E): the same cauldron full of liquid. $9EB3-$9EC4 takes a cauldron row from here (index + $40) instead of from sprite 56 when the row lies below the fill level, so each cauldron fills from the bottom up. Its top row's middle byte ($CE41 = $AA) is the value $9E26 later finds at $EF01.","t":"byte","b":[90,170,165,222,170,159,30,170]},{"a":52808,"t":"byte","b":[156,7,170,112,7,170,112,7]},{"a":52816,"t":"byte","b":[170,112,7,170,112,30,170,156]},{"a":52824,"t":"byte","b":[30,170,156,30,170,156,122,170]},{"a":52832,"t":"byte","b":[167,122,170,167,122,170,167,122]},{"a":52840,"t":"byte","b":[170,167,122,170,167,122,170,167]},{"a":52848,"t":"byte","b":[30,170,156,30,170,156,31,170]},{"a":52856,"t":"byte","b":[124,113,235,199,112,255,15]},{"a":52863,"l":"pipe_left_minus_1","c":"Padding byte of sprite 57 (value $12), and the base of LDA $CE7F,X at $831D with X from 0 to $3F: $830A copies $CE7F-$CEBE, this byte and the first 63 of sprite 58, into sprite $B4, so the pipe it draws starts one byte early (see $CE80).","t":"byte","b":[18],"x":[33565]},{"a":52864,"l":"sprite_pipe_left","c":"Sprite shape 58 ($CE80-$CEBE): the left half of a curved pipe, blue, white and red. $830A copies it with sprite 59 into sprites $B4 and $B6 ($ED00, $ED80), three bytes (one row) further down on each of 21 calls, so the pipe slides down; its top row is left behind each time and draws a trail above it. The copy reads from $CE7F with X starting at 0, so every byte lands one place late: whether the data was drawn for that or the index is a slip is unknown.","t":"byte","b":[0,0,11,0,0,11,0,0]},{"a":52872,"t":"byte","b":[11,0,0,11,0,0,43,0]},{"a":52880,"t":"byte","b":[0,47,63,0,175,63,106,191]},{"a":52888,"t":"byte","b":[63,127,254,58,127,250,63,106]},{"a":52896,"t":"byte","b":[171,58,127,254,53,106,170,58]},{"a":52904,"t":"byte","b":[106,170,58,85,85,53,106,170]},{"a":52912,"t":"byte","b":[53,85,85,58,85,85,53,85]},{"a":52920,"t":"byte","b":[85,53,90,170,53,0,0]},{"a":52927,"l":"pipe_right_minus_1","c":"Padding byte of sprite 58 (value $13), and the base of LDA $CEBF,X at $8323 (X 0-$3F), which copies $CEBF-$CEFE into sprite $B6 ($ED80) the same way $CE7F feeds sprite $B4.","t":"byte","b":[19],"x":[33571]},{"a":52928,"l":"sprite_pipe_right","c":"Sprite shape 59 ($CEC0-$CEFE): the right half of the curved pipe, continuing sprite 58; $830A copies it into sprite $B6 ($ED80).","t":"byte","b":[251,169,150,251,169,150,251,169]},{"a":52936,"t":"byte","b":[150,251,169,150,235,165,150,238]},{"a":52944,"t":"byte","b":[166,86,174,166,90,186,150,88]},{"a":52952,"t":"byte","b":[186,154,88,234,153,88,234,89]},{"a":52960,"t":"byte","b":[104,170,101,96,169,101,96,149]},{"a":52968,"t":"byte","b":[149,128,90,85,128,169,86,0]},{"a":52976,"t":"byte","b":[85,88,0,85,160,0,90,0]},{"a":52984,"t":"byte","b":[0,160,0,0,0,0,0,19]},{"a":52992,"l":"sprites_60_63","c":"Sprite shapes 60-63 ($CF00-$CFFE), multicolour: three arrow-shaped craft pointing right (60-62, small differences between them) and a diamond with an eye in the middle (63). No code was found that points a sprite at 60-63: $85C7 reaches $3E/$3F only for $B8DC = 0, which it never has there, and the aliens' pointers in $0224,X were not traced to these values. Use unknown.","t":"byte","b":[0,0,0,0,0,0,15,0]},{"a":53000,"t":"byte","b":[0,58,240,0,58,172,0,58]},{"a":53008,"t":"byte","b":[171,0,5,106,192,13,22,144]},{"a":53016,"t":"byte","b":[59,49,124,238,255,51,249,169]},{"a":53024,"t":"byte","b":[85,230,85,17,25,19,244,5]},{"a":53032,"t":"byte","b":[62,144,15,234,64,58,169,0]},{"a":53040,"t":"byte","b":[58,164,0,58,80,0,5,0]},{"a":53048,"t":"byte","b":[0,0,0,0,0,0,0,20]},{"a":53056,"t":"byte","b":[0,0,0,15,0,0,58,240]},{"a":53064,"t":"byte","b":[0,58,172,0,58,171,0,5]},{"a":53072,"t":"byte","b":[106,192,13,22,176,13,17,80]},{"a":53080,"t":"byte","b":[59,49,60,238,255,51,249,169]},{"a":53088,"t":"byte","b":[85,230,85,17,25,17,52,5]},{"a":53096,"t":"byte","b":[51,240,13,62,144,15,234,64]},{"a":53104,"t":"byte","b":[58,169,0,58,164,0,58,80]},{"a":53112,"t":"byte","b":[0,5,0,0,0,0,0,20]},{"a":53120,"t":"byte","b":[15,0,0,58,240,0,58,172]},{"a":53128,"t":"byte","b":[0,58,171,0,5,106,192,13]},{"a":53136,"t":"byte","b":[22,176,13,17,80,13,49,16]},{"a":53144,"t":"byte","b":[59,51,60,238,255,51,249,169]},{"a":53152,"t":"byte","b":[85,230,85,17,25,17,52,5]},{"a":53160,"t":"byte","b":[51,16,13,51,240,13,62,144]},{"a":53168,"t":"byte","b":[15,234,64,58,169,0,58,164]},{"a":53176,"t":"byte","b":[0,58,80,0,5,0,0,30]},{"a":53184,"t":"byte","b":[0,0,0,0,60,0,0,52]},{"a":53192,"t":"byte","b":[0,0,251,0,0,237,0,3]},{"a":53200,"t":"byte","b":[249,64,3,150,64,15,65,80]},{"a":53208,"t":"byte","b":[13,0,80,61,56,212,249,40]},{"a":53216,"t":"byte","b":[233,233,40,193,61,36,196,57]},{"a":53224,"t":"byte","b":[0,192,14,195,16,3,189,0]},{"a":53232,"t":"byte","b":[3,100,64,0,225,0,0,209]},{"a":53240,"t":"byte","b":[0,0,48,0,0,20,0]},{"a":53247,"l":"vic_regs_minus_1","c":"Padding byte of sprite 63, and the base of STA $CFFF,X/Y with the index counting down to 1, which writes the VIC-II sprite position registers $D000-$D00F: $89C0 (X 8-1, from $B4C6), $8B69 (X 6-1, from $B505), $924E (Y 10-1, from $B571), $92DD (Y 6-1, from $B57B). Not a variable.","t":"byte","b":[18],"x":[35264,35689,37454,37597]},{"a":53248,"l":"sprites_beam_arcs","c":"RAM under the I/O area, which the CPU never reads here but the video chip reads as sprite blocks $40-$7F of bank 3 (loaded with the game, unchanged in play). Blocks $40-$45: the beam's arcs, an upper and a lower arc for each of its three steps; animate_beam ($8592) points sprite 0 at $3E/$3F + 2 x step, shown by bands $8A52 and $8B22.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":53256,"t":"byte","b":[0,0,0,0,10,170,160,42]},{"a":53264,"t":"byte","b":[170,168,42,0,168,0,0,0]},{"a":53272,"t":"byte","b":[0,0,0,0,0,0,0,170]},{"a":53280,"t":"byte","b":[0,2,170,128,2,130,128,0]},{"a":53288,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":53296,"t":"byte","b":[0,40,0,0,170,0,0,130]},{"a":53304,"t":"byte","b":[0,0,0,0,0,0,0,18]},{"a":53312,"t":"byte","b":[0,0,0,0,0,0,0,130]},{"a":53320,"t":"byte","b":[0,0,170,0,0,40,0,0]},{"a":53328,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":53336,"t":"byte","b":[2,130,128,2,170,128,0,170]},{"a":53344,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":53352,"t":"byte","b":[0,0,42,0,168,42,170,168]},{"a":53360,"t":"byte","b":[10,170,160,0,0,0,0,0]},{"a":53368,"t":"byte","b":[0,0,0,0,0,0,0,18]},{"a":53376,"t":"byte","b":[0,0,0,0,0,0,10,170]},{"a":53384,"t":"byte","b":[160,42,170,168,42,0,168,0]},{"a":53392,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":53400,"t":"byte","b":[2,170,128,10,170,160,10,0]},{"a":53408,"t":"byte","b":[160,0,0,0,0,0,0,0]},{"a":53416,"t":"byte","b":[0,0,0,40,0,0,170,0]},{"a":53424,"t":"byte","b":[0,130,0,0,0,0,0,0]},{"a":53432,"t":"byte","b":[0,0,0,0,0,0,0,18]},{"a":53440,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":53448,"t":"byte","b":[0,0,0,0,0,130,0,0]},{"a":53456,"t":"byte","b":[170,0,0,40,0,0,0,0]},{"a":53464,"t":"byte","b":[0,0,0,0,0,0,10,0]},{"a":53472,"t":"byte","b":[160,10,170,160,2,170,128,0]},{"a":53480,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":53488,"t":"byte","b":[42,0,168,42,170,168,10,170]},{"a":53496,"t":"byte","b":[160,0,0,0,0,0,0,18]},{"a":53504,"t":"byte","b":[2,170,128,42,170,168,170,0]},{"a":53512,"t":"byte","b":[170,160,0,10,0,0,0,0]},{"a":53520,"t":"byte","b":[0,0,2,170,128,10,170,160]},{"a":53528,"t":"byte","b":[10,0,160,0,0,0,0,0]},{"a":53536,"t":"byte","b":[0,0,0,0,0,170,0,2]},{"a":53544,"t":"byte","b":[170,128,2,130,128,0,0,0]},{"a":53552,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":53560,"t":"byte","b":[0,0,0,0,0,0,0,18]},{"a":53568,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":53576,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":53584,"t":"byte","b":[0,0,2,130,128,2,170,128]},{"a":53592,"t":"byte","b":[0,170,0,0,0,0,0,0]},{"a":53600,"t":"byte","b":[0,0,0,0,10,0,160,10]},{"a":53608,"t":"byte","b":[170,160,2,170,128,0,0,0]},{"a":53616,"t":"byte","b":[0,0,0,160,0,10,170,0]},{"a":53624,"t":"byte","b":[170,42,170,168,2,170,128,18]},{"a":53632,"l":"sprites_police_ship","c":"Sprite blocks $46-$49 ($D180-$D27F): the police craft with its flashing beacon, the frame list $3C3B of landscape type 17 and bonus types 8-11, and the second alien on Wiztips page one ($96FB).","t":"byte","b":[0,40,0,0,172,64,0,189]},{"a":53640,"t":"byte","b":[0,0,188,80,0,189,0,0]},{"a":53648,"t":"byte","b":[188,64,0,172,0,0,168,0]},{"a":53656,"t":"byte","b":[9,1,128,47,86,224,47,170]},{"a":53664,"t":"byte","b":[96,190,170,152,190,170,88,186]},{"a":53672,"t":"byte","b":[170,88,186,169,88,46,169,96]},{"a":53680,"t":"byte","b":[38,165,96,11,85,128,2,170]},{"a":53688,"t":"byte","b":[0,0,0,0,0,0,0,22]},{"a":53696,"t":"byte","b":[0,160,0,4,232,16,1,248]},{"a":53704,"t":"byte","b":[0,20,248,4,1,248,0,4]},{"a":53712,"t":"byte","b":[248,16,0,232,0,0,168,0]},{"a":53720,"t":"byte","b":[9,1,128,47,86,224,47,170]},{"a":53728,"t":"byte","b":[96,190,170,152,190,170,88,186]},{"a":53736,"t":"byte","b":[170,88,186,169,88,46,169,96]},{"a":53744,"t":"byte","b":[38,165,96,11,85,128,2,170]},{"a":53752,"t":"byte","b":[0,0,0,0,0,0,0,22]},{"a":53760,"t":"byte","b":[0,160,0,16,168,0,0,168]},{"a":53768,"t":"byte","b":[0,65,168,0,0,168,0,16]},{"a":53776,"t":"byte","b":[168,0,0,168,0,0,168,0]},{"a":53784,"t":"byte","b":[9,1,128,47,86,224,47,170]},{"a":53792,"t":"byte","b":[96,190,170,152,190,170,88,186]},{"a":53800,"t":"byte","b":[170,88,186,169,88,46,169,96]},{"a":53808,"t":"byte","b":[38,165,96,11,85,128,2,170]},{"a":53816,"t":"byte","b":[0,0,0,0,0,0,0,22]},{"a":53824,"t":"byte","b":[0,40,0,1,168,0,0,168]},{"a":53832,"t":"byte","b":[0,4,169,0,0,168,0,1]},{"a":53840,"t":"byte","b":[168,0,0,168,0,0,168,0]},{"a":53848,"t":"byte","b":[9,1,128,47,86,224,47,170]},{"a":53856,"t":"byte","b":[96,190,170,152,190,170,88,186]},{"a":53864,"t":"byte","b":[170,88,186,169,88,46,169,96]},{"a":53872,"t":"byte","b":[38,165,96,11,85,128,2,170]},{"a":53880,"t":"byte","b":[0,0,0,0,0,0,0,22]},{"a":53888,"l":"sprites_unused_4a_4b","c":"Sprite blocks $4A-$4B ($D280-$D2FF): two frames of a diagonal streak. No template, frame list or immediate operand in the code names them.","t":"byte","b":[0,8,0,0,10,160,0,2]},{"a":53896,"t":"byte","b":[170,0,0,10,0,0,48,0]},{"a":53904,"t":"byte","b":[3,0,0,3,168,0,0,170]},{"a":53912,"t":"byte","b":[0,0,10,0,0,10,0,0]},{"a":53920,"t":"byte","b":[2,0,0,0,0,0,0,0]},{"a":53928,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":53936,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":53944,"t":"byte","b":[0,0,0,0,0,0,0,27]},{"a":53952,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":53960,"t":"byte","b":[0,128,0,0,128,0,0,160]},{"a":53968,"t":"byte","b":[0,0,32,0,0,168,0,0]},{"a":53976,"t":"byte","b":[170,128,2,170,168,2,170,170]},{"a":53984,"t":"byte","b":[170,170,170,170,10,170,170,2]},{"a":53992,"t":"byte","b":[170,166,0,168,170,0,42,40]},{"a":54000,"t":"byte","b":[0,8,200,0,10,0,0,2]},{"a":54008,"t":"byte","b":[128,0,0,192,0,0,0,27]},{"a":54016,"l":"sprites_molecule","c":"Sprite blocks $4C-$4F ($D300-$D3FF): four frames of the frame list $40E7, used by landscape types 1 (the molecule), 3 and 4, and by the first alien on Wiztips page one ($95DB).","t":"byte","b":[40,0,40,166,36,169,165,90]},{"a":54024,"t":"byte","b":[149,149,36,85,20,36,20,0]},{"a":54032,"t":"byte","b":[36,0,0,36,0,0,36,0]},{"a":54040,"t":"byte","b":[2,34,128,10,74,96,10,74]},{"a":54048,"t":"byte","b":[80,9,73,80,1,33,64,0]},{"a":54056,"t":"byte","b":[36,0,0,36,0,0,20,0]},{"a":54064,"t":"byte","b":[0,40,0,0,165,0,0,165]},{"a":54072,"t":"byte","b":[0,0,149,0,0,20,0,26]},{"a":54080,"t":"byte","b":[2,2,128,10,74,96,10,74]},{"a":54088,"t":"byte","b":[80,9,73,80,1,33,64,0]},{"a":54096,"t":"byte","b":[36,0,0,36,0,0,20,0]},{"a":54104,"t":"byte","b":[0,40,0,0,165,0,0,165]},{"a":54112,"t":"byte","b":[0,0,149,0,0,20,0,0]},{"a":54120,"t":"byte","b":[36,0,0,36,0,0,36,0]},{"a":54128,"t":"byte","b":[2,132,128,10,98,96,10,82]},{"a":54136,"t":"byte","b":[80,9,81,80,1,64,64,26]},{"a":54144,"t":"byte","b":[0,40,0,0,166,0,0,165]},{"a":54152,"t":"byte","b":[0,0,149,0,0,20,0,0]},{"a":54160,"t":"byte","b":[36,0,0,36,0,0,36,0]},{"a":54168,"t":"byte","b":[2,132,128,10,98,96,10,82]},{"a":54176,"t":"byte","b":[80,9,81,80,1,68,64,0]},{"a":54184,"t":"byte","b":[36,0,0,36,0,0,36,0]},{"a":54192,"t":"byte","b":[40,36,40,166,36,169,165,89]},{"a":54200,"t":"byte","b":[149,149,36,85,20,0,20,31]},{"a":54208,"t":"byte","b":[2,128,128,10,98,96,10,82]},{"a":54216,"t":"byte","b":[80,9,81,80,1,68,64,0]},{"a":54224,"t":"byte","b":[36,0,0,36,0,0,36,0]},{"a":54232,"t":"byte","b":[40,36,40,166,36,169,165,90]},{"a":54240,"t":"byte","b":[149,149,36,85,20,36,20,0]},{"a":54248,"t":"byte","b":[36,0,0,36,0,0,36,0]},{"a":54256,"t":"byte","b":[2,34,128,10,74,144,10,73]},{"a":54264,"t":"byte","b":[80,9,69,80,1,1,64,31]},{"a":54272,"l":"sprites_droplet","c":"Sprite blocks $50-$52 ($D400-$D4BF): the droplet a shot colour sphere leaves, wobbling as it falls (hit state 2, $A7A9).","t":"byte","b":[0,32,0,0,32,0,0,32]},{"a":54280,"t":"byte","b":[0,0,32,0,0,184,0,0]},{"a":54288,"t":"byte","b":[184,0,0,184,0,2,234,0]},{"a":54296,"t":"byte","b":[2,234,0,2,234,0,11,169]},{"a":54304,"t":"byte","b":[128,11,169,128,11,169,128,11]},{"a":54312,"t":"byte","b":[169,128,10,165,128,11,165,128]},{"a":54320,"t":"byte","b":[2,166,0,2,150,0,0,168]},{"a":54328,"t":"byte","b":[0,0,0,0,0,0,0,18]},{"a":54336,"t":"byte","b":[0,0,0,0,32,0,0,32]},{"a":54344,"t":"byte","b":[0,0,32,0,0,32,0,0]},{"a":54352,"t":"byte","b":[184,0,0,184,0,0,184,0]},{"a":54360,"t":"byte","b":[0,184,0,0,184,0,2,230]},{"a":54368,"t":"byte","b":[0,2,234,0,2,230,0,2]},{"a":54376,"t":"byte","b":[230,0,2,230,0,2,166,0]},{"a":54384,"t":"byte","b":[2,230,0,2,150,0,0,152]},{"a":54392,"t":"byte","b":[0,0,152,0,0,32,0,18]},{"a":54400,"t":"byte","b":[0,0,0,0,0,0,0,32]},{"a":54408,"t":"byte","b":[0,0,32,0,0,32,0,0]},{"a":54416,"t":"byte","b":[32,0,0,32,0,0,32,0]},{"a":54424,"t":"byte","b":[0,184,0,0,184,0,0,184]},{"a":54432,"t":"byte","b":[0,0,184,0,0,184,0,2]},{"a":54440,"t":"byte","b":[234,0,2,234,0,2,230,0]},{"a":54448,"t":"byte","b":[2,166,0,2,230,0,2,150]},{"a":54456,"t":"byte","b":[0,0,152,0,0,168,0,18]},{"a":54464,"l":"sprites_splash","c":"Sprite blocks $53-$5B ($D4C0-$D6FF): the droplet's splash when it reaches the ground, nine frames (hit state 3).","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54472,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54480,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54488,"t":"byte","b":[0,32,0,0,32,0,0,32]},{"a":54496,"t":"byte","b":[0,0,32,0,0,32,0,0]},{"a":54504,"t":"byte","b":[32,0,0,48,0,0,48,0]},{"a":54512,"t":"byte","b":[3,35,0,50,77,48,42,121]},{"a":54520,"t":"byte","b":[144,9,165,64,0,84,0,18]},{"a":54528,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54536,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54544,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54552,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54560,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54568,"t":"byte","b":[0,0,0,0,0,3,3,0]},{"a":54576,"t":"byte","b":[195,2,12,162,77,52,42,121]},{"a":54584,"t":"byte","b":[144,9,165,64,1,85,0,18]},{"a":54592,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54600,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54608,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54616,"t":"byte","b":[0,0,0,0,0,0,3,3]},{"a":54624,"t":"byte","b":[0,1,1,0,192,0,12,67]},{"a":54632,"t":"byte","b":[3,4,3,51,0,195,35,12]},{"a":54640,"t":"byte","b":[130,34,8,18,78,48,34,121]},{"a":54648,"t":"byte","b":[32,1,165,0,0,84,0,18]},{"a":54656,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54664,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54672,"t":"byte","b":[0,0,3,3,0,2,2,0]},{"a":54680,"t":"byte","b":[0,0,0,192,0,12,128,0]},{"a":54688,"t":"byte","b":[8,0,48,0,0,32,0,131]},{"a":54696,"t":"byte","b":[35,8,2,34,0,65,33,4]},{"a":54704,"t":"byte","b":[0,0,0,0,16,0,0,0]},{"a":54712,"t":"byte","b":[0,0,0,0,0,0,0,18]},{"a":54720,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54728,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54736,"t":"byte","b":[0,0,0,0,0,0,48,0]},{"a":54744,"t":"byte","b":[0,32,0,3,35,0,2,2]},{"a":54752,"t":"byte","b":[0,192,32,12,128,0,8,2]},{"a":54760,"t":"byte","b":[2,0,0,0,0,0,0,0]},{"a":54768,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54776,"t":"byte","b":[0,0,0,0,0,0,0,18]},{"a":54784,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54792,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54800,"t":"byte","b":[0,0,0,0,0,0,48,0]},{"a":54808,"t":"byte","b":[0,32,0,0,0,0,0,0]},{"a":54816,"t":"byte","b":[0,0,0,0,0,0,0,3]},{"a":54824,"t":"byte","b":[3,0,2,2,0,128,0,8]},{"a":54832,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54840,"t":"byte","b":[0,0,0,0,0,0,0,18]},{"a":54848,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54856,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54864,"t":"byte","b":[0,0,0,192,0,0,4,0]},{"a":54872,"t":"byte","b":[0,51,0,0,32,0,0,64]},{"a":54880,"t":"byte","b":[0,0,12,0,0,0,0,0]},{"a":54888,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54896,"t":"byte","b":[0,0,0,2,2,0,0,0]},{"a":54904,"t":"byte","b":[0,0,0,0,0,0,0,18]},{"a":54912,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54920,"t":"byte","b":[0,0,0,0,0,0,0,3]},{"a":54928,"t":"byte","b":[4,0,0,0,0,0,0,192]},{"a":54936,"t":"byte","b":[0,0,0,0,0,0,0,48]},{"a":54944,"t":"byte","b":[0,4,32,0,0,3,0,0]},{"a":54952,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54960,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54968,"t":"byte","b":[0,0,0,0,0,0,0,18]},{"a":54976,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":54984,"t":"byte","b":[0,0,1,0,0,0,0,0]},{"a":54992,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55000,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55008,"t":"byte","b":[0,64,0,0,0,0,0,0]},{"a":55016,"t":"byte","b":[32,0,0,0,48,0,0,0]},{"a":55024,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55032,"t":"byte","b":[0,0,0,0,0,0,0,18]},{"a":55040,"l":"sprites_explosion","c":"Sprite blocks $5C-$5F ($D700-$D7FF): an alien's explosion, played from $5F down to $5C (hit state 4, $A891).","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55048,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55056,"t":"byte","b":[51,0,3,2,0,14,0,0]},{"a":55064,"t":"byte","b":[0,0,192,0,0,0,12,0]},{"a":55072,"t":"byte","b":[192,8,0,160,0,0,0,3]},{"a":55080,"t":"byte","b":[0,64,1,3,0,0,201,0]},{"a":55088,"t":"byte","b":[0,64,0,0,0,0,0,0]},{"a":55096,"t":"byte","b":[0,0,0,0,0,0,0,20]},{"a":55104,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55112,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55120,"t":"byte","b":[204,0,3,251,0,3,154,0]},{"a":55128,"t":"byte","b":[15,70,192,1,3,64,13,0]},{"a":55136,"t":"byte","b":[64,14,3,64,14,3,0,3]},{"a":55144,"t":"byte","b":[14,64,2,126,0,0,169,0]},{"a":55152,"t":"byte","b":[0,80,0,0,0,0,0,0]},{"a":55160,"t":"byte","b":[0,0,0,0,0,0,0,20]},{"a":55168,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55176,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55184,"t":"byte","b":[0,0,0,60,0,1,251,0]},{"a":55192,"t":"byte","b":[3,154,0,15,76,64,5,3]},{"a":55200,"t":"byte","b":[64,13,13,64,2,189,0,3]},{"a":55208,"t":"byte","b":[100,0,0,85,0,0,16,0]},{"a":55216,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55224,"t":"byte","b":[0,0,0,0,0,0,0,20]},{"a":55232,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55240,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55248,"t":"byte","b":[0,0,0,0,0,0,252,0]},{"a":55256,"t":"byte","b":[0,228,0,0,153,0,3,68]},{"a":55264,"t":"byte","b":[0,3,93,0,0,180,0,0]},{"a":55272,"t":"byte","b":[68,0,0,0,0,0,0,0]},{"a":55280,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55288,"t":"byte","b":[0,0,0,0,0,0,0,20]},{"a":55296,"l":"sprite_bonus_tally","c":"Sprite block $60 ($D800-$D83F): the picture show_bonus_message puts on sprite 1 beside the bonus-stage tally (shape $60 at $664D).","t":"byte","b":[0,43,240,242,189,15,122,212]},{"a":55304,"t":"byte","b":[80,91,81,0,61,68,0,237]},{"a":55312,"t":"byte","b":[16,0,245,16,0,116,64,176]},{"a":55320,"t":"byte","b":[212,66,236,208,67,88,209,11]},{"a":55328,"t":"byte","b":[232,17,15,36,52,47,236,0]},{"a":55336,"t":"byte","b":[57,176,0,185,172,2,230,64]},{"a":55344,"t":"byte","b":[11,151,80,254,71,212,106,68]},{"a":55352,"t":"byte","b":[244,21,64,0,0,0,0,20]},{"a":55360,"l":"sprite_alien_16","c":"Sprite block $61 ($D840-$D87F): the fixed frame of landscape type 16 (record $4091).","t":"byte","b":[0,32,0,0,112,0,0,248]},{"a":55368,"t":"byte","b":[0,1,220,0,3,142,0,7]},{"a":55376,"t":"byte","b":[7,0,14,3,128,28,1,192]},{"a":55384,"t":"byte","b":[56,0,224,112,0,112,224,0]},{"a":55392,"t":"byte","b":[56,112,0,112,56,0,224,28]},{"a":55400,"t":"byte","b":[1,192,14,3,128,7,7,0]},{"a":55408,"t":"byte","b":[3,142,0,1,220,0,0,248]},{"a":55416,"t":"byte","b":[0,0,112,0,0,32,0,13]},{"a":55424,"l":"sprite_alien_15","c":"Sprite block $62 ($D880-$D8BF): the fixed frame of landscape type 15 (record $4079).","t":"byte","b":[0,0,0,0,0,0,0,48]},{"a":55432,"t":"byte","b":[0,48,228,48,60,248,240,239]},{"a":55440,"t":"byte","b":[199,212,27,197,80,7,153,64]},{"a":55448,"t":"byte","b":[15,245,64,15,229,64,15,169]},{"a":55456,"t":"byte","b":[64,15,169,64,7,229,64,61]},{"a":55464,"t":"byte","b":[85,80,59,85,144,59,153,80]},{"a":55472,"t":"byte","b":[59,153,144,59,153,80,59,153]},{"a":55480,"t":"byte","b":[80,23,149,80,1,85,0,28]},{"a":55488,"l":"sprites_unused_63_64","c":"Sprite blocks $63-$64 ($D8C0-$D93F): two frames of a creature like type 12's. No template, frame list or immediate operand in the code names them.","t":"byte","b":[0,0,0,15,65,240,12,195]},{"a":55496,"t":"byte","b":[48,14,195,176,3,195,192,4]},{"a":55504,"t":"byte","b":[0,16,52,0,52,52,0,52]},{"a":55512,"t":"byte","b":[52,0,52,52,0,52,53,60]},{"a":55520,"t":"byte","b":[244,61,251,84,12,249,16,7]},{"a":55528,"t":"byte","b":[234,80,3,230,64,3,233,64]},{"a":55536,"t":"byte","b":[3,185,64,3,169,64,0,229]},{"a":55544,"t":"byte","b":[64,0,101,0,0,20,0,28]},{"a":55552,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55560,"t":"byte","b":[0,15,0,240,13,195,112,14]},{"a":55568,"t":"byte","b":[195,176,3,195,192,12,0,48]},{"a":55576,"t":"byte","b":[60,0,52,52,0,52,53,60]},{"a":55584,"t":"byte","b":[212,13,249,208,13,249,80,7]},{"a":55592,"t":"byte","b":[234,80,3,166,64,3,233,64]},{"a":55600,"t":"byte","b":[3,169,64,3,165,64,3,149]},{"a":55608,"t":"byte","b":[64,0,213,0,0,0,0,24]},{"a":55616,"l":"sprites_alien_12","c":"Sprite blocks $65-$67 ($D940-$D9FF): landscape type 12's three frames, eased from one to the next by animation mode 1 (frame list $4100).","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55624,"t":"byte","b":[0,0,0,0,0,0,0,60]},{"a":55632,"t":"byte","b":[0,60,55,0,220,59,0,236]},{"a":55640,"t":"byte","b":[15,0,240,48,0,20,52,60]},{"a":55648,"t":"byte","b":[52,61,249,212,13,249,80,7]},{"a":55656,"t":"byte","b":[230,80,3,233,64,3,185,64]},{"a":55664,"t":"byte","b":[3,169,64,3,165,64,0,213]},{"a":55672,"t":"byte","b":[0,0,0,0,0,0,0,24]},{"a":55680,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55688,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55696,"t":"byte","b":[0,0,0,0,0,15,0,240]},{"a":55704,"t":"byte","b":[55,0,220,59,0,236,60,0]},{"a":55712,"t":"byte","b":[60,13,125,208,13,123,80,1]},{"a":55720,"t":"byte","b":[230,64,3,233,64,3,185,64]},{"a":55728,"t":"byte","b":[15,165,80,13,85,80,0,0]},{"a":55736,"t":"byte","b":[0,0,0,0,0,0,0,24]},{"a":55744,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55752,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55760,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":55768,"t":"byte","b":[0,0,0,15,0,240,55,0]},{"a":55776,"t":"byte","b":[220,59,125,236,61,123,124,1]},{"a":55784,"t":"byte","b":[234,80,3,170,64,14,233,80]},{"a":55792,"t":"byte","b":[13,85,80,0,0,0,0,0]},{"a":55800,"t":"byte","b":[0,0,0,0,0,0,0,24]},{"a":55808,"l":"sprites_lab_wiz","c":"Sprite blocks $68-$6E ($DA00-$DBBF): the Wiz in the Wiz-lab (run_lab_wiz $AC4F): $68 and $69/$6A as he climbs out of the Wizball and walks, $6B-$6E as he stirs the cauldron.","t":"byte","b":[0,0,0,0,0,60,0,0]},{"a":55816,"t":"byte","b":[220,0,1,64,0,7,64,0]},{"a":55824,"t":"byte","b":[29,0,0,29,0,0,117,0]},{"a":55832,"t":"byte","b":[0,116,0,0,84,0,1,213]},{"a":55840,"t":"byte","b":[0,1,213,0,1,213,0,3]},{"a":55848,"t":"byte","b":[85,0,2,188,0,3,175,0]},{"a":55856,"t":"byte","b":[0,191,0,10,191,192,10,255]},{"a":55864,"t":"byte","b":[192,3,255,192,2,255,240,24]},{"a":55872,"t":"byte","b":[15,253,240,15,245,240,15,245]},{"a":55880,"t":"byte","b":[124,15,53,124,48,213,124,239]},{"a":55888,"t":"byte","b":[85,252,173,85,240,173,85,48]},{"a":55896,"t":"byte","b":[13,84,64,13,84,64,13,81]},{"a":55904,"t":"byte","b":[64,13,69,64,13,23,64,4]},{"a":55912,"t":"byte","b":[93,16,0,245,16,1,213,16]},{"a":55920,"t":"byte","b":[1,213,16,13,213,16,49,213]},{"a":55928,"t":"byte","b":[20,49,64,84,0,21,85,24]},{"a":55936,"t":"byte","b":[0,255,240,3,245,240,255,85]},{"a":55944,"t":"byte","b":[124,173,85,124,173,85,124,45]},{"a":55952,"t":"byte","b":[85,252,13,84,240,13,81,48]},{"a":55960,"t":"byte","b":[13,69,64,13,21,64,12,85]},{"a":55968,"t":"byte","b":[64,12,85,64,0,87,80,0]},{"a":55976,"t":"byte","b":[125,16,1,213,16,1,213,16]},{"a":55984,"t":"byte","b":[1,213,16,1,213,20,13,213]},{"a":55992,"t":"byte","b":[20,13,64,84,0,21,85,24]},{"a":56000,"t":"byte","b":[0,0,0,0,0,0,0,1]},{"a":56008,"t":"byte","b":[223,0,7,83,0,29,64,0]},{"a":56016,"t":"byte","b":[53,64,0,117,0,0,85,0]},{"a":56024,"t":"byte","b":[1,213,0,1,212,0,1,213]},{"a":56032,"t":"byte","b":[0,3,85,0,2,213,0,3]},{"a":56040,"t":"byte","b":[181,0,0,189,0,10,191,0]},{"a":56048,"t":"byte","b":[10,255,0,3,255,192,0,255]},{"a":56056,"t":"byte","b":[192,192,255,192,179,223,240,24]},{"a":56064,"t":"byte","b":[175,255,240,45,85,240,45,85]},{"a":56072,"t":"byte","b":[112,13,85,124,13,85,124,13]},{"a":56080,"t":"byte","b":[84,252,13,64,252,13,21,48]},{"a":56088,"t":"byte","b":[12,85,64,12,85,64,0,85]},{"a":56096,"t":"byte","b":[64,0,85,80,0,87,80,0]},{"a":56104,"t":"byte","b":[93,16,0,117,16,0,117,68]},{"a":56112,"t":"byte","b":[0,117,68,0,117,68,0,117]},{"a":56120,"t":"byte","b":[68,0,16,21,0,21,85,24]},{"a":56128,"t":"byte","b":[0,0,0,0,0,0,0,1]},{"a":56136,"t":"byte","b":[124,0,7,76,0,29,0,0]},{"a":56144,"t":"byte","b":[117,0,0,117,0,1,84,0]},{"a":56152,"t":"byte","b":[1,84,0,7,80,0,7,84]},{"a":56160,"t":"byte","b":[0,13,84,0,11,212,0,14]},{"a":56168,"t":"byte","b":[244,0,2,244,0,42,252,0]},{"a":56176,"t":"byte","b":[43,255,0,15,255,0,227,127]},{"a":56184,"t":"byte","b":[192,189,255,192,181,95,192,24]},{"a":56192,"t":"byte","b":[181,95,240,53,87,240,53,85]},{"a":56200,"t":"byte","b":[252,53,85,60,53,64,124,52]},{"a":56208,"t":"byte","b":[21,124,48,21,92,48,21,92]},{"a":56216,"t":"byte","b":[0,21,80,0,21,84,0,21]},{"a":56224,"t":"byte","b":[84,0,21,84,0,21,212,0]},{"a":56232,"t":"byte","b":[23,68,0,29,68,0,29,81]},{"a":56240,"t":"byte","b":[0,29,81,0,29,81,0,29]},{"a":56248,"t":"byte","b":[81,0,196,5,0,197,85,24]},{"a":56256,"l":"sprite_lab_cat","c":"Sprite block $6F ($DBC0-$DBFF): the cat drinking its milk in the lab, alternating with block $7E (run_lab_cat $AB9D).","t":"byte","b":[12,0,0,12,0,0,8,0]},{"a":56264,"t":"byte","b":[0,40,0,0,32,0,0,32]},{"a":56272,"t":"byte","b":[0,0,32,0,0,40,0,0]},{"a":56280,"t":"byte","b":[42,160,2,10,170,2,10,170]},{"a":56288,"t":"byte","b":[170,10,170,170,10,170,170,10]},{"a":56296,"t":"byte","b":[170,166,42,168,170,40,42,40]},{"a":56304,"t":"byte","b":[40,8,8,32,10,0,35,2]},{"a":56312,"t":"byte","b":[0,44,14,0,12,3,0,16]},{"a":56320,"l":"sprite_bonus_cross_ball","c":"Sprite block $70 ($DC00-$DC3F): the cross-marked ball of bonus-stage types 12-15.","t":"byte","b":[0,0,0,0,255,0,15,233]},{"a":56328,"t":"byte","b":[240,14,233,144,62,233,168,62]},{"a":56336,"t":"byte","b":[233,152,63,233,148,59,233,100]},{"a":56344,"t":"byte","b":[255,255,253,234,245,169,234,221]},{"a":56352,"t":"byte","b":[169,234,245,169,85,85,85,59]},{"a":56360,"t":"byte","b":[213,100,62,233,148,46,233,148]},{"a":56368,"t":"byte","b":[61,233,84,14,233,144,5,233]},{"a":56376,"t":"byte","b":[80,0,85,0,0,0,0,28]},{"a":56384,"l":"sprite_bonus_textured_ball","c":"Sprite block $71 ($DC40-$DC7F): the textured ball of bonus-stage type 7, the one that bounces off shots.","t":"byte","b":[0,0,0,0,56,0,2,254]},{"a":56392,"t":"byte","b":[0,7,235,128,15,182,80,46]},{"a":56400,"t":"byte","b":[174,180,39,249,104,62,91,84]},{"a":56408,"t":"byte","b":[219,102,152,185,185,86,123,149]},{"a":56416,"t":"byte","b":[149,213,153,89,230,166,85,186]},{"a":56424,"t":"byte","b":[118,149,151,89,84,21,85,152]},{"a":56432,"t":"byte","b":[57,150,84,37,85,80,9,101]},{"a":56440,"t":"byte","b":[80,2,85,128,0,37,0,28]},{"a":56448,"l":"sprites_dart","c":"Sprite blocks $72-$77 ($DC80-$DDFF): the dart, played by the frame lists $3C2E (bonus types 5 and 6) and $40ED (landscape types 9 and 10).","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":56456,"t":"byte","b":[0,60,0,0,235,0,0,234]},{"a":56464,"t":"byte","b":[240,0,234,172,0,86,171,0]},{"a":56472,"t":"byte","b":[21,106,192,250,86,176,234,170]},{"a":56480,"t":"byte","b":[159,234,149,85,85,86,80,5]},{"a":56488,"t":"byte","b":[105,64,58,149,0,234,84,0]},{"a":56496,"t":"byte","b":[229,64,0,20,0,0,0,0]},{"a":56504,"t":"byte","b":[0,0,0,0,0,0,0,28]},{"a":56512,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":56520,"t":"byte","b":[0,60,0,0,235,192,0,234]},{"a":56528,"t":"byte","b":[176,0,234,172,0,22,171,0]},{"a":56536,"t":"byte","b":[5,90,192,250,165,176,234,170]},{"a":56544,"t":"byte","b":[95,234,149,85,85,85,80,5]},{"a":56552,"t":"byte","b":[90,64,58,169,0,234,148,0]},{"a":56560,"t":"byte","b":[233,80,0,213,64,0,20,0]},{"a":56568,"t":"byte","b":[0,0,0,0,0,0,0,22]},{"a":56576,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":56584,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":56592,"t":"byte","b":[0,0,252,0,0,235,192,0]},{"a":56600,"t":"byte","b":[218,188,0,37,171,0,245,90]},{"a":56608,"t":"byte","b":[112,214,165,85,21,85,80,249]},{"a":56616,"t":"byte","b":[85,0,21,0,0,0,0,0]},{"a":56624,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":56632,"t":"byte","b":[0,0,0,0,0,0,0,22]},{"a":56640,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":56648,"t":"byte","b":[0,0,0,0,60,0,0,235]},{"a":56656,"t":"byte","b":[192,0,234,176,0,90,172,0]},{"a":56664,"t":"byte","b":[21,171,192,245,86,176,234,86]},{"a":56672,"t":"byte","b":[159,234,169,85,85,85,80,53]},{"a":56680,"t":"byte","b":[165,0,234,84,0,213,0,0]},{"a":56688,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":56696,"t":"byte","b":[0,0,0,0,0,0,0,22]},{"a":56704,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":56712,"t":"byte","b":[0,0,0,0,0,0,0,240]},{"a":56720,"t":"byte","b":[0,0,228,0,0,233,0,0]},{"a":56728,"t":"byte","b":[58,245,0,255,160,64,234,164]},{"a":56736,"t":"byte","b":[48,85,90,172,14,169,85,1]},{"a":56744,"t":"byte","b":[85,64,0,0,0,0,0,0]},{"a":56752,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":56760,"t":"byte","b":[0,0,0,0,0,0,0,30]},{"a":56768,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":56776,"t":"byte","b":[0,0,0,0,64,0,0,240]},{"a":56784,"t":"byte","b":[0,0,228,0,0,41,0,0]},{"a":56792,"t":"byte","b":[255,149,0,234,228,192,86,170]},{"a":56800,"t":"byte","b":[180,229,89,85,13,85,80,0]},{"a":56808,"t":"byte","b":[85,0,0,0,0,0,0,0]},{"a":56816,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":56824,"t":"byte","b":[0,0,0,0,0,0,0,30]},{"a":56832,"l":"sprite_pearl","c":"Sprite block $78 ($DE00-$DE3F): the pearl an alien leaves (leave_pearl $A93C).","t":"byte","b":[0,255,0,3,0,192,12,0]},{"a":56840,"t":"byte","b":[16,12,26,48,48,125,4,48]},{"a":56848,"t":"byte","b":[125,4,48,20,4,192,0,1]},{"a":56856,"t":"byte","b":[192,0,1,192,0,1,197,0]},{"a":56864,"t":"byte","b":[81,198,65,145,198,150,145,54]},{"a":56872,"t":"byte","b":[235,148,49,190,68,49,190,68]},{"a":56880,"t":"byte","b":[4,105,16,12,20,16,1,0]},{"a":56888,"t":"byte","b":[64,0,85,0,0,0,0,21]},{"a":56896,"l":"sprites_colour_sphere","c":"Sprite blocks $79-$7D ($DE40-$DF7F): the colour sphere squashing as it bounces, frame lists $40D0 (landscape types 0, 2, 8 and 11) and $3C05 (bonus types 0, 1 and 4).","t":"byte","b":[0,60,0,0,56,0,0,56]},{"a":56904,"t":"byte","b":[0,0,56,0,0,56,0,0]},{"a":56912,"t":"byte","b":[250,0,0,233,0,0,234,0]},{"a":56920,"t":"byte","b":[0,233,0,0,233,0,0,233]},{"a":56928,"t":"byte","b":[0,0,233,0,0,233,0,0]},{"a":56936,"t":"byte","b":[169,0,0,233,0,0,165,0]},{"a":56944,"t":"byte","b":[0,36,0,0,36,0,0,36]},{"a":56952,"t":"byte","b":[0,0,36,0,0,20,0,21]},{"a":56960,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":56968,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":56976,"t":"byte","b":[0,0,0,0,0,0,170,0]},{"a":56984,"t":"byte","b":[10,255,160,47,234,184,186,170]},{"a":56992,"t":"byte","b":[166,38,169,88,10,85,160,0]},{"a":57000,"t":"byte","b":[170,0,0,0,0,0,0,0]},{"a":57008,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":57016,"t":"byte","b":[0,0,0,0,0,0,0,18]},{"a":57024,"t":"byte","b":[0,0,0,0,0,0,0,40]},{"a":57032,"t":"byte","b":[0,0,190,0,0,251,0,0]},{"a":57040,"t":"byte","b":[234,0,0,234,0,3,234,192]},{"a":57048,"t":"byte","b":[3,170,128,3,170,64,3,170]},{"a":57056,"t":"byte","b":[64,3,170,64,3,170,64,3]},{"a":57064,"t":"byte","b":[169,128,0,233,0,0,169,0]},{"a":57072,"t":"byte","b":[0,230,0,0,150,0,0,40]},{"a":57080,"t":"byte","b":[0,0,0,0,0,0,0,18]},{"a":57088,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":57096,"t":"byte","b":[0,0,40,0,0,190,0,2]},{"a":57104,"t":"byte","b":[250,128,2,234,128,2,234,128]},{"a":57112,"t":"byte","b":[11,170,96,11,170,160,11,170]},{"a":57120,"t":"byte","b":[96,10,170,96,11,170,96,2]},{"a":57128,"t":"byte","b":[169,128,2,169,128,2,165,128]},{"a":57136,"t":"byte","b":[0,150,0,0,40,0,0,0]},{"a":57144,"t":"byte","b":[0,0,0,0,0,0,0,18]},{"a":57152,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":57160,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":57168,"t":"byte","b":[40,0,2,191,128,11,234,224]},{"a":57176,"t":"byte","b":[11,170,160,46,170,168,46,170]},{"a":57184,"t":"byte","b":[152,42,170,152,14,170,96,9]},{"a":57192,"t":"byte","b":[169,96,2,86,128,0,40,0]},{"a":57200,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":57208,"t":"byte","b":[0,0,0,0,0,0,0,16]},{"a":57216,"l":"sprite_lab_cat_2","c":"Sprite block $7E ($DF80-$DFBF): the cat's second drinking frame in the lab, alternating with $6F.","t":"byte","b":[192,0,0,224,0,0,160,0]},{"a":57224,"t":"byte","b":[0,32,0,0,32,0,0,32]},{"a":57232,"t":"byte","b":[0,0,32,0,8,40,0,8]},{"a":57240,"t":"byte","b":[42,160,168,10,170,168,10,170]},{"a":57248,"t":"byte","b":[168,10,170,152,10,170,168,10]},{"a":57256,"t":"byte","b":[170,160,42,168,32,40,42,0]},{"a":57264,"t":"byte","b":[40,8,0,32,10,0,35,2]},{"a":57272,"t":"byte","b":[0,44,14,128,12,0,192,20]},{"a":57280,"l":"sprite_unused_7f","c":"Sprite block $7F ($DFC0-$DFFF): an arrow. No template, frame list or immediate operand in the code names it.","t":"byte","b":[255,192,0,255,192,0,252,0]},{"a":57288,"t":"byte","b":[0,254,0,0,239,0,0,227]},{"a":57296,"t":"byte","b":[192,0,225,224,0,224,120,0]},{"a":57304,"t":"byte","b":[224,60,0,224,15,0,0,6]},{"a":57312,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":57320,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":57328,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":57336,"t":"byte","b":[0,0,0,0,0,0,0,20]},{"a":57344,"t":"gap","n":960,"x":[31828]},{"a":57344,"t":"note","l":"screen_e000","c":"The 1 KB block $E000-$E3FF, all written at run time. Title: sprites $80-$8E, built by $8F61: $80-$84 the WIZBALL logo in the large font ($8E32), $85-$8B cleared and '1. 050000' drawn into them in the small font ($8DE4), $8C-$8E filled with $FF, solid bars that the band at $9327 shows expanded behind the text. Play: rows 0-1 are the score line, always shown from here (the band at $8A52 sets D018 = $8C), and the rows below are the first of three play-area buffers ($B1FD = 0). $7C54 clears $E000-$E0FF on every pass of the outer cycle ($63A3 calls $63CA before each get-ready screen). The entry image already holds the built title sprites.","note":"outside the tracked image","x":[31828]},{"a":57355,"t":"note","l":"score_row0_col11","c":"Base of STA $E00B,Y (Y 16-1) at $B020 and $B0F0: 16 characters at row 0, columns 12-27 of the score line, 'select permenant' ($B02F) when the Wiz-lab opens and 'all systems go!!' ($B0FC) when it closes.","note":"outside the tracked image","x":[45088,45296]},{"a":57383,"t":"note","l":"score_p1_digits_minus_1","c":"Base of STA $E027,Y (Y 6-1) at $7198: player 1's six score digits ($BFDB-$BFE0 plus $30) go to row 1, columns 0-5 ($E028-$E02D).","note":"outside the tracked image","x":[29080]},{"a":57384,"t":"note","l":"score_row1","c":"Row 1, column 0 of the score line; base of indexed writes into that row: $7D70 (X 7 or 32 from $71E0/$71E1) puts the lives digit, $2F plus the player's count at $B278/$B279 (capped at 10), next to each score; $9F0C-$9F1E (Y 9 or 29 from $71DE/$71DF) put the tens digit of the count in $B1AF.","note":"outside the tracked image","x":[32112,40716,40728,40734]},{"a":57385,"t":"note","l":"score_row1_col1","c":"Base of STA $E029,Y at $9F28: the units digit of $B1AF, one column right of the tens digit written through $E028 (row 1, columns 10 or 30).","note":"outside the tracked image","x":[40744]},{"a":57395,"t":"note","l":"score_row1_col11","c":"Base of STA $E033,Y (Y 16-1) at $B028 and $B0F5: row 1, columns 12-27 of the score line, 'weapon' centred under 'select permenant' ($B03F-$B04E) for the Wiz-lab, then cleared to glyph 0 (blank) by $B0F5.","note":"outside the tracked image","x":[45096,45301]},{"a":57400,"t":"note","l":"hiscore_digits_minus_1","c":"Base of STA $E038,Y (Y 6-1) at $71AF: the high score's six digits (from $71D4-$71D9) go to row 1, columns 17-22 ($E039-$E03E); skipped while $AC4E is non-zero.","note":"outside the tracked image","x":[29103]},{"a":57417,"t":"note","l":"score_p2_digits_minus_1","c":"Base of STA $E049,Y (Y 6-1) at $71A1: player 2's six score digits ($BFE2-$BFE7 plus $30) go to row 1, columns 34-39 ($E04A-$E04F).","note":"outside the tracked image","x":[29089]},{"a":58303,"t":"note","l":"player1_save_minus_1","c":"Last byte of row 23 of the $E000 buffer; base of the Y 24-1 copies between $B116-$B12D and player 1's save area $E3C0-$E3D7 (STA $E3BF,Y at $6E0D, LDA $E3BF,Y at $6E22).","note":"outside the tracked image","x":[28173,28194]},{"a":58304,"l":"player1_save","c":"Player 1's copy of the 24-byte per-player block $B116-$B12D ($E3C0-$E3D7), for games where players take turns: $6E08 saves it (at the start, $686B, and through $6E38 at $63C1 when $BFD9 = 1) and $6E20 restores it (through $6E42 at $63A0, and at $6B5D). It sits in row 24 of the $E000 buffer, which play never shows.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":58312,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":58320,"t":"byte","b":[0,0,0,0,0,0,0]},{"a":58327,"l":"player2_save_minus_1","c":"Last byte of player 1's save area, and the base of the Y 24-1 copies for player 2 (STA $E3D7,Y at $6E19, LDA $E3D7,Y at $6E2E).","t":"byte","b":[0],"x":[28185,28206]},{"a":58328,"l":"player2_save","c":"Player 2's copy of the per-player block $B116-$B12D ($E3D8-$E3EF): $6E14 saves it ($686E, and $6E38 when $BFD9 is not 1), $6E2C restores it ($6B75, and $6E42). $E3F0-$E3F7 after it are not used.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":58336,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":58344,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":58352,"t":"gap","n":938},{"a":58360,"t":"note","l":"sprite_ptrs_e000","c":"The eight sprite pointers of the screen at $E000 ($E3F8-$E3FF), used while $E000 is the play buffer on show. The play bands write sprite 0's pointer at $8A8E and $8A91 (from $B8DE), $8B18 (from $B525) and $8B3C (from $B8DF), and sprites 1-7's at $8AFE (from $B526-$B52C); $8A5D-$8A6D rewrite those operands' high bytes to $E3, $E7 or $EB for the buffer in use, except $8A91's, which always writes here.","note":"outside the tracked image","x":[35470,35473,35582,35608,35644]},{"a":58368,"t":"note","l":"screen_e400","c":"The 1 KB block $E400-$E7FF: the second play-area buffer ($B1FD = $10), written at run time ($7C57 clears $E400-$E4FF on every pass of the outer cycle, the scrolling code draws the landscape rows). Its hidden rows 23-24 and spare bytes hold variables ($E79A-$E7AD, $E7C3-$E7F2) and $E7F8-$E7FF are its sprite pointers. The entry image holds a leftover landscape screen here.","note":"outside the tracked image","x":[31831]},{"a":59289,"t":"note","l":"scroll_column_minus_1","c":"Row 23, column 1 of the $E400 buffer, not used as a screen cell; the base of indexed accesses to the column at $E79A: STA $E799,X at $766F (X 20-1, clears all of it when $B874 is set) and LDA/STA $E799,X at $79C5-$79CB (X 5-1, its first five rows).","note":"outside the tracked image","x":[30319,31173,31179]},{"a":59290,"l":"scroll_column","c":"The next screen column to scroll in: 20 glyph codes for rows 3-22 in four groups of five ($E79A rows 3-7, $E79F rows 8-12, $E7A4 rows 13-17, $E7A9 rows 18-22). $78CF-$7977 fills it from four 5 x 5 scenery tiles (at $2642 + 25 x tile number, read from the level map through $0460/$0470), $7978-$7A39 puts star-field glyphs into the cells left empty, and $7A3A/$7A40 copy it into column 39 or column 0 of the buffer being drawn ($7A75-$7A95).","t":"byte","b":[0],"x":[31050,31349]},{"a":59291,"l":"scroll_column_row4","c":"Screen row 4 of the scroll column; base of STA $E79B,X at $7951 (the tile byte at offset 5, X = 0, 5, 10 or 15 for the four tiles).","t":"byte","b":[0],"x":[31057]},{"a":59292,"l":"scroll_column_row5","c":"Screen row 5 of the scroll column; base of STA $E79C,X at $7958 (tile offset 10).","t":"byte","b":[0],"x":[31064]},{"a":59293,"l":"scroll_column_row6","c":"Screen row 6 of the scroll column; base of STA $E79D,X at $795F (tile offset 15).","t":"byte","b":[0],"x":[31071]},{"a":59294,"l":"scroll_column_row7","c":"Screen row 7 of the scroll column; base of STA $E79E,X at $7966 (tile offset 20) and of LDA/STA $E79E,X at $79E6-$79EC (X 5-1, the second group, rows 8-12).","t":"byte","b":[0],"x":[31078,31206,31212]},{"a":59295,"l":"scroll_column_rows8_12","c":"Screen row 8, the first of the scroll column's second group ($E79F-$E7A3); LDA $E79F,Y at $7A7B copies the group to the screen.","t":"byte","b":[0,0,0,0],"x":[31355]},{"a":59299,"l":"scroll_column_row12","c":"Screen row 12 of the scroll column; base of LDA/STA $E7A3,X at $7A07-$7A0D (X 5-1, the third group, rows 13-17).","t":"byte","b":[0],"x":[31239,31245]},{"a":59300,"l":"scroll_column_rows13_17","c":"Screen row 13, the first of the scroll column's third group ($E7A4-$E7A8); LDA $E7A4,Y at $7A81 copies it.","t":"byte","b":[0,0,0,0],"x":[31361]},{"a":59304,"l":"scroll_column_row17","c":"Screen row 17 of the scroll column; base of LDA/STA $E7A8,X at $7A28-$7A2E (X 5-1, the fourth group, rows 18-22).","t":"byte","b":[0],"x":[31272,31278]},{"a":59305,"l":"scroll_column_rows18_22","c":"Screen row 18, the first of the scroll column's fourth group ($E7A9-$E7AD, the bottom five rows); LDA $E7A9,Y at $7A87 copies it.","t":"byte","b":[0,0,0,0,0],"x":[31367]},{"a":59310,"t":"gap","n":22},{"a":59331,"t":"note","l":"vic_shadow_minus_1","c":"Byte before the VIC-II register shadow at $E7C4; base of STA $E7C3,X/Y with the index counting down to 1: $6A4C and $AE64 (X 8-1, sprite 0-3 positions from $B4E5-$B4EC) and $7CE8 (Y $11-1, clears $E7C4-$E7D4).","note":"outside the tracked image","x":[27212,31976,44644]},{"a":59332,"l":"vic_shadow_spr0_x","c":"Start of a shadow copy of the VIC-II registers $D000-$D02E ($E7C4-$E7F2, same order), kept in the hidden rows of the $E400 buffer: game code writes sprite state here and the play-area bands copy it to the chip ($8A52-$8B21). This byte is sprite 0's X, the Wizball ($D000, copied at $8A73).","t":"byte","b":[0],"x":[32953,35440,41661,43724,44233]},{"a":59333,"l":"vic_shadow_spr0_y","c":"Shadow of $D001, sprite 0's Y. The band at $8A52 uses it less 23 for the sprite drawn above the Wizball, $8B0F uses it as is, and $8ABB-$8AD9 derive from it the raster lines of the next two bands ($B3F6 = Y - 2, $B3FA = Y + 20).","t":"byte","b":[0],"x":[32970,35446,35515,35523,35537,35550,35599,41667]},{"a":59334,"l":"vic_shadow_spr1_x","c":"Shadow of $D002, sprite 1's X: the catelite ($87C0 writes it).","t":"byte","b":[0],"x":[26196,33408,34752]},{"a":59335,"l":"vic_shadow_spr1_y","c":"Shadow of $D003, sprite 1's Y; $8645 sets it to 0 (off screen) while there is no catelite ($B234 = 0).","t":"byte","b":[0],"x":[26201,33418,34373,34737,43727]},{"a":59336,"l":"vic_shadow_spr2_x","c":"Shadow of $D004, sprite 2's X.","t":"byte","b":[0],"x":[33413,44053]},{"a":59337,"l":"vic_shadow_spr2_y","c":"Shadow of $D005, sprite 2's Y.","t":"byte","b":[0],"x":[33421,44058]},{"a":59338,"l":"vic_shadow_spr3_x","c":"Shadow of $D006, sprite 3's X; $82E4 and $ACF4 count it down to move that sprite left.","t":"byte","b":[0],"x":[33481,33508,33511,44236,44276,44306]},{"a":59339,"l":"vic_shadow_spr3_y","c":"Shadow of $D007, sprite 3's Y; also the base of $E7CB,X (X 8-1) for sprites 4-7's positions $E7CC-$E7D3: read at $8AE4, written at $6A52 and $AE6A.","t":"byte","b":[0],"x":[27218,33487,35556,44244,44279,44286,44650]},{"a":59340,"l":"vic_shadow_spr4_x","c":"Shadow of $D008, sprite 4's X.","t":"byte","b":[0],"x":[44239,44273]},{"a":59341,"l":"vic_shadow_spr4_y","c":"Shadow of $D009, sprite 4's Y; sprites 5-7's X and Y follow at $E7CE-$E7D3.","t":"byte","b":[0,0,0,0,0,0,0],"x":[44247]},{"a":59348,"l":"vic_shadow_x_msb","c":"Shadow of $D010, the ninth bit of every sprite's X; copied at $8A7F, updated per sprite at $A29C-$A2B7 and $87C3-$87CA.","t":"byte","b":[0,0,0,0,0],"x":[26206,27204,32956,32964,33403,34755,34762,35455,41628,41633,41650,41655,43730,44636]},{"a":59353,"l":"vic_shadow_sprite_on","c":"Shadow of $D015, which sprites are on; copied to the chip by $8A57 for the play area. The most-written byte of the shadow (about 30 places): 3 for the Wizball and catelite alone, bits set and cleared as aliens come and go.","t":"byte","b":[0,0],"x":[25790,25881,25923,26186,27238,32016,32234,32239,33358,33456,33502,33531,35415,40161,40166,40752,41467,41472,41518,41523,41549,41717,41722,43721,43944,43949,44043,44048,44164,44169,44225,44230,44445,44670,44757]},{"a":59355,"l":"vic_shadow_y_expand","c":"Shadow of $D017, sprite Y expansion; ORed with $B1B1 and copied at $8AA0.","t":"byte","b":[0,0,0,0],"x":[33453,33536,35488,44760]},{"a":59359,"l":"vic_shadow_priority","c":"Shadow of $D01B, sprite priority; copied at $8AB5. $803C sets it to 1, putting sprite 0 behind the landscape while a Wizball appears or vanishes; also written at $7FF1.","t":"byte","b":[0],"x":[32753,32828,35509]},{"a":59360,"l":"vic_shadow_multicolour","c":"Shadow position of $D01C, sprite multicolour. $80D7 writes 1 here, but the play bands take $D01C from $B1B2 instead and nothing was found that reads this byte.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[32983]},{"a":59368,"t":"byte","b":[0]},{"a":59369,"l":"vic_shadow_spr_mc0","c":"Shadow of $D025, sprite multicolour 0; $6403 sets $0B (dark grey) when play starts; copied at $8A94.","t":"byte","b":[0],"x":[25603,35476,43853,44462]},{"a":59370,"l":"vic_shadow_spr_mc1","c":"Shadow of $D026, sprite multicolour 1; $6408 sets $0D (light green). Also the base of $E7EA,X/Y (1-8) for the eight sprite colours $E7EB-$E7F2: $8AEA copies them, $6A58 and $AE70 load them from $B4F5, $B151 sets all eight to one colour from $B61C.","t":"byte","b":[0],"x":[25608,27224,35482,35562,43858,44467,44656,45393]},{"a":59371,"l":"vic_shadow_spr0_colour","c":"Shadow of $D027, sprite 0's colour, the Wizball's (5, green, in play-start.vsf); $8B1B copies it in the band where sprite 0 is the Wizball.","t":"byte","b":[0],"x":[32978,33012,35611,41708,41780]},{"a":59372,"l":"vic_shadow_spr1_colour","c":"Shadow of $D028, sprite 1's colour, the catelite's: 5 (green), cycling through $B5DF while $B26C is 8 ($87EF-$8807).","t":"byte","b":[0],"x":[26211,27310,33445,34823,34843]},{"a":59373,"l":"vic_shadow_spr2_colour","c":"Shadow of $D029, sprite 2's colour; $6AAE fills $E7ED-$E7F2 with the colour at $EBD7.","t":"byte","b":[0],"x":[33448,44093]},{"a":59374,"l":"vic_shadow_spr3_colour","c":"Shadow of $D02A, sprite 3's colour.","t":"byte","b":[0],"x":[33497,44257]},{"a":59375,"l":"vic_shadow_spr4_colour","c":"Shadow of $D02B, sprite 4's colour; sprites 5-7's colours follow at $E7F0-$E7F2, the end of the shadow.","t":"byte","b":[0,0,0,0],"x":[44260]},{"a":59379,"t":"gap","n":935},{"a":59392,"t":"note","l":"sprite_level_digit","c":"Sprite $A0 ($E800-$E83F), the level number at the bottom left of the play screen (bottom-band pointer $F7F8 = $A0), in the hidden top rows of the third play buffer ($E800-$EBFF, $B1FD = $20). $776D clears it ($8F15 with Y = $A0) and $770D draws the digit: each pixel of the small font's '1' + level ($F188 + 8 x $B128) becomes three pixels from the table at $76E9, and each row is written twice. $7C5A also clears $E800-$E8FF on every pass of the outer cycle. The entry image holds an 8 drawn this way.","note":"outside the tracked image","x":[30511,30514,31834]},{"a":59393,"t":"note","l":"sprite_level_digit_b1","c":"Byte 1 of the level-digit sprite's first row; base of ORA/STA $E801,X at $773B-$773E, the middle byte of each digit row.","note":"outside the tracked image","x":[30523,30526]},{"a":59394,"t":"note","l":"sprite_level_digit_b2","c":"Byte 2 of the level-digit sprite's first row; base of ORA/STA $E802,X at $7747-$774A, the right-hand byte of each digit row.","note":"outside the tracked image","x":[30535,30538]},{"a":59395,"t":"note","l":"sprite_level_digit_row1","c":"Byte 0 of the level-digit sprite's second row; base of STA $E803,X at $7735, which repeats each left-hand byte one row lower.","note":"outside the tracked image","x":[30517]},{"a":59396,"t":"note","l":"sprite_level_digit_row1_b1","c":"Byte 1 of the level-digit sprite's second row; base of STA $E804,X at $7741 (the repeated middle byte).","note":"outside the tracked image","x":[30529]},{"a":59397,"t":"note","l":"sprite_level_digit_row1_b2","c":"Byte 2 of the level-digit sprite's second row; base of STA $E805,X at $774D (the repeated right-hand byte).","note":"outside the tracked image","x":[30541]},{"a":60314,"l":"menu_stars","c":"The player menu's four moving stars, 6 bytes each ($EB9A-$EBB1, X = 0, 6, 12, 18): +0 X, +1 X fraction, +2 Y, +3 Y fraction, +4 X speed, +5 Y speed. $90BD starts a free star at a random X ($24-$A3) on line $91 with random speeds of at least $20; $910A adds twice each speed to the 16-bit position and frees the star (X = 0) when X < $0C or X >= $AC, or Y < $7A or Y >= $FA (CMP and BPL tests at $9146-$9156); $915F and $9163 show each star on sprites mirrored left-right and top-bottom. Lives in the hidden rows of the third play buffer. This byte is star 0's X; 0 means free.","t":"byte","b":[0],"x":[37055,37067,37100,37151,37157,37190,37211,37274,37280]},{"a":60315,"l":"menu_star_x_frac","c":"Star 0's X fraction; base of ADC/STA $EB9B,X at $9115-$9118 for every star.","t":"byte","b":[0],"x":[37141,37144]},{"a":60316,"l":"menu_star_y","c":"Star 0's Y (a new star starts at $91, $90D0); base of $EB9C,X for every star's Y at $90E6, $913D-$9143, $9151, $9180 and $9189.","t":"byte","b":[0],"x":[37072,37094,37181,37187,37201,37248,37257]},{"a":60317,"l":"menu_star_y_frac","c":"Star 0's Y fraction; base of ADC/STA $EB9D,X at $9133-$9136.","t":"byte","b":[0],"x":[37171,37174]},{"a":60318,"l":"menu_star_x_speed","c":"Star 0's X speed, random with bit 5 set ($90D8); read by $910E.","t":"byte","b":[0],"x":[37080,37134]},{"a":60319,"l":"menu_star_y_speed","c":"Star 0's Y speed, random with bit 5 set ($90E0); read by $912C. Stars 1-3 follow at $EBA0-$EBB1.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[37088,37164]},{"a":60327,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":60335,"t":"byte","b":[0,0]},{"a":60337,"l":"title_colours_minus_1","c":"Last byte of star 3's record, and the base of STA $EBB1,X at $8FA4 (X $42-1), which clears $EBB2-$EBF3, the title's colour-cycling state, when the title starts.","t":"byte","b":[0],"x":[36772]},{"a":60338,"l":"logo_bar_delay","c":"Frame divider for the logo's colour bar: $9884 counts it to 2, then moves the 16 colours at $EBC1-$EBD0 one place outwards and steps $EBC0.","t":"byte","b":[0],"x":[39044,39047,39057]},{"a":60339,"l":"colours_d7_delay","c":"Frame divider (to 3) for the colour list at $EBD7-$EBE3, which $98BE moves on when it wraps.","t":"byte","b":[0],"x":[39102,39105,39115]},{"a":60340,"l":"colours_e4_delay","c":"Frame divider (to 3) for the colour list at $EBE4-$EBF0, which $98E9 moves on when it wraps.","t":"byte","b":[0],"x":[39145,39148,39158]},{"a":60341,"l":"colours_d2_delay","c":"Frame divider (to 3) for the four colours at $EBD2-$EBD5, which $9916 moves on when it wraps. $EBB6 after it is cleared with the rest and otherwise unused.","t":"byte","b":[0,0],"x":[39190,39193,39203]},{"a":60343,"l":"colours_e4_step","c":"Step counter for the list at $EBE4: $98E9 takes the new colour from $B5CB + (counter AND 7) and stores it at $EBF0.","t":"byte","b":[0],"x":[39174,39177]},{"a":60344,"l":"colours_d7_step","c":"Step counter for the list at $EBD7: $98BE takes the new colour from $B5DF + (counter AND 7); its low two bits also pick the background colours that $9805 and $9812 write (tables at $9821 and $9825).","t":"byte","b":[0],"x":[38917,38930,39129,39132]},{"a":60345,"l":"colours_d1_step","c":"Step counter whose low two bits pick $EBD1 from $B5EF ($994A) and $EBD6 from $B5F3 ($996A).","t":"byte","b":[0],"x":[39258,39261,39280]},{"a":60346,"l":"colours_d1_delay","c":"Frame divider (to 7) for $EBB9, stepped by $994A; $996A acts only when it is 0.","t":"byte","b":[0],"x":[39242,39245,39255,39274]},{"a":60347,"l":"colours_d2_step","c":"Step counter 0-7 for the four colours at $EBD2: $9916 takes the new colour from $B5E7 + counter and stores it at $EBD5.","t":"byte","b":[0],"x":[39219,39222,39231]},{"a":60348,"l":"colours_f1_delay","c":"Frame divider (to 4) for $EBBD, stepped by $997D.","t":"byte","b":[0],"x":[39293,39296,39306]},{"a":60349,"l":"colours_f1_step","c":"Step counter: $997D sets $EBF1 from $B5DF + (counter AND 7).","t":"byte","b":[0],"x":[39309,39312]},{"a":60350,"l":"colours_f2_delay","c":"Frame divider (to 4) for $EBBF, stepped by $999D.","t":"byte","b":[0],"x":[39325,39328,39338]},{"a":60351,"l":"colours_f2_step","c":"Step counter: $999D sets $EBF2 from $B5CB + (counter AND 7).","t":"byte","b":[0],"x":[39341,39344]},{"a":60352,"l":"logo_bar_step","c":"Step counter of the logo colour bar ($98AA): bits 1-5 pick the new colour from $B5FB for $EBC9 and $EBCA. Also the base of LDA $EBC0,X at $9271 (X 16-1), which sets the colour of the five logo sprites from the bar, one raster line at a time from line $3E.","t":"byte","b":[0],"x":[37489,39082,39085]},{"a":60353,"l":"logo_bar","c":"The logo's colour bar, 16 colours ($EBC1-$EBD0), one per raster line of the WIZBALL sprites: every other frame $9884 moves each half one place outwards, the new colour entering in the middle ($EBC9-$EBCA). This is the first colour and the base of STA $EBC1,Y at $989B.","t":"byte","b":[0],"x":[39067,39070]},{"a":60354,"l":"logo_bar_2","c":"Second colour of the logo bar; base of LDA $EBC2,Y at $9898 and STA $EBC2,X at $98A1, the two halves of the move.","t":"byte","b":[0,0,0,0,0,0,0],"x":[39064,39073]},{"a":60361,"l":"logo_bar_mid","c":"Colour 9 of the logo bar, the middle, where $98B7 stores each new colour from $B5FB.","t":"byte","b":[0],"x":[39095]},{"a":60362,"l":"logo_bar_mid2","c":"Colour 10 of the logo bar, given the same new colour as $EBC9 at $98BA.","t":"byte","b":[0,0,0,0,0,0,0],"x":[39098]},{"a":60369,"l":"title_band_bg","c":"Background colour of the title's logo band: $922C writes it to $D021; also used at $6DF9 and $97D7; $994A sets it from $B5EF. Also the base of LDA $EBD1,X at $9303 (X 4-1) for the four colours that follow.","t":"byte","b":[0],"x":[28153,37420,37635,38871,39270]},{"a":60370,"l":"colours_d2","c":"Four colours ($EBD2-$EBD5) that shift one place every third frame ($9916), the new one from $B5E7 entering at $EBD5: $9303 gives them, a line pair each from line $76, to the '1. 050000' sprites; $EBD2 alone is a background colour at $6DD5, $96AA, $9703, $97B1, $97C2, $97F0 and $97FC.","t":"byte","b":[0],"x":[28117,38570,38659,38833,38850,38896,38908,39211]},{"a":60371,"l":"colours_d3","c":"Second of the four colours at $EBD2; base of LDA $EBD3,Y at $9928 for the shift.","t":"byte","b":[0,0],"x":[39208]},{"a":60373,"l":"colours_d5","c":"Last of the four colours at $EBD2; $9946 stores each new one here.","t":"byte","b":[0],"x":[39238]},{"a":60374,"l":"colours_d6","c":"A colour that $996A picks from $B5F3; background at $9320, $9419 and $6DEB. Also the base of $EBD6,X/Y for the list that follows: X 4-1 at $938A (sprite colours) and $9408 (backgrounds), Y 12-1 at $98D0 (the shift).","t":"byte","b":[0],"x":[28139,37664,37770,37896,37913,39120,39289]},{"a":60375,"l":"colours_d7","c":"Thirteen colours ($EBD7-$EBE3) that shift one place every third frame ($98BE), the newest from $B5DF entering here: sprite colours at $938A, backgrounds at $9408; this first one alone at $6810, $6922 and $6AA9 (which copies it to sprite colours $E7ED-$E7F2).","t":"byte","b":[0],"x":[26640,26914,27305,39123,39141]},{"a":60376,"l":"colours_d8","c":"Second of the thirteen colours at $EBD7; background colour at $971A.","t":"byte","b":[0],"x":[38682]},{"a":60377,"l":"colours_d9","c":"Third of the thirteen colours at $EBD7; background colour at $9721.","t":"byte","b":[0],"x":[38689]},{"a":60378,"l":"colours_da","c":"Fourth of the thirteen colours at $EBD7; background colour at $9728.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[38696]},{"a":60386,"t":"byte","b":[0]},{"a":60387,"l":"colours_e3","c":"Last, oldest, of the thirteen colours at $EBD7; base of LDA $EBE3,X at $9393 (X 4-1), the colours of sprites 0 and 2 in the band code at $9374.","t":"byte","b":[0],"x":[37779]},{"a":60388,"l":"colours_e4","c":"Thirteen colours ($EBE4-$EBF0) that shift the other way: every third frame $98E9 moves them down one place and stores the newest, from $B5CB, at $EBF0. Read at $6DF2 and as $EBE4,X at $9742.","t":"byte","b":[0],"x":[28146,38722,39166]},{"a":60389,"l":"colours_e5","c":"Second colour of the list at $EBE4; base of LDA $EBE5,Y at $98FB for the shift.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[39163]},{"a":60397,"t":"byte","b":[0,0,0]},{"a":60400,"l":"colours_f0","c":"Last byte of the list at $EBE4, where $9912 stores each new colour.","t":"byte","b":[0],"x":[39186]},{"a":60401,"l":"colours_f1","c":"Background colour that $997D picks from $B5DF on every fourth call; used at $936A, $6DDC and $97CB.","t":"byte","b":[0],"x":[28124,37738,38859,39321]},{"a":60402,"l":"colours_f2","c":"Colour that $999D picks from $B5CB; $92AC writes it into colour RAM at rows 8-9, columns 20-39 (the large 'sensi soft' of the title), and $970C uses it.","t":"byte","b":[0],"x":[37548,38668,39353]},{"a":60403,"l":"title_clock","c":"The title's clock: $9829 counts it up to $FF and starts each colour effect once the clock passes its threshold: $0A logo bar ($9884), $23 ($994A), $5A ($9916), $69 ($999D), $9B ($98BE), $C3 ($98E9), $FE ($996A, $997D). Cleared with the rest by $8FA0.","t":"byte","b":[0],"x":[38953,38960,38963,38973,38983,38993,39003,39013,39023,39033]},{"a":60404,"t":"gap","n":12},{"a":60416,"l":"init_stage1","c":"The game's start-up, stage one, jumped to from the entry at $6389 once $01 = $35; it runs from what becomes the title screen's memory. Interrupts off; copies 12 bytes from $EC20 to $001D-$0028; switches CIA 1's interrupts off ($DC0D = $7F, then read to acknowledge); sets the stack pointer to $7F; leaves X = $7F and Y = $42 for the indexed CIA 2 addresses of stage two and continues through JMP ($EC91). $EC91-$EC92 are the operand of STA $EC2C,X at $EC90, so the jump goes to $EC2C; stage two overwrites that pointer before it leaves, and wipes most of its own code.","t":"code","b":[120],"m":"sei","x":[25485]},{"a":60417,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":60419,"l":"b_EC03","t":"code","b":[185,32,236],"m":"lda","o":"init_zp_routine,y","oa":60448,"x":[60428]},{"a":60422,"s":"absolute-mode store into zero page $001D-$0028","t":"code","b":[153,29,0],"m":"sta","o":"init_zp_stub,y","oa":29},{"a":60425,"t":"code","b":[200],"m":"iny"},{"a":60426,"t":"code","b":[192,12],"m":"cpy","o":"#$0C"},{"a":60428,"t":"code","b":[208,245],"m":"bne","o":"b_EC03","oa":60419},{"a":60430,"t":"code","b":[169,127],"m":"lda","o":"#$7F"},{"a":60432,"t":"code","b":[141,13,220],"m":"sta","o":"cia1_interrupt"},{"a":60435,"t":"code","b":[173,13,220],"m":"lda","o":"cia1_interrupt"},{"a":60438,"t":"code","b":[162,127],"m":"ldx","o":"#$7F"},{"a":60440,"t":"code","b":[154],"m":"txs"},{"a":60441,"t":"code","b":[160,66],"m":"ldy","o":"#$42"},{"a":60443,"t":"code","b":[162,127],"m":"ldx","o":"#$7F"},{"a":60445,"s":"through the operand of the STA at $EC90: goes to $EC2C","t":"code","b":[108,145,236],"m":"jmp","o":"(init_jump_ptr)","oa":60561},{"a":60448,"l":"init_zp_routine","c":"Twelve bytes that stage one copies to $001D-$0028, a routine in zero page: LDA #$35 / STA $4B / STA $29 / STA $8F / STA $00 (the 6510's data-direction register) / PLA / RTI. The copy is intact in every snapshot taken later, but no JSR, JMP, vector or pointer to $001D (or $001C) was found and the self-modified jumps take their targets from tables that do not hold it: what it is for is unknown.","t":"byte","b":[169,53,133,75,133,41,133,143],"x":[60419]},{"a":60456,"t":"byte","b":[133,0,104,64]},{"a":60460,"l":"init_stage2","c":"Start-up stage two, reached through JMP ($EC91) from $EC1D with X = $7F and Y = $42; also the first byte that its own wipe at $EC90 replaces (with RTS). It programs CIA 2 for the once-a-frame NMI and a free-running timer B, fills pages 1-3, installs the hardware vectors, wipes $EC2C-$EC8D, selects VIC bank 3, overwrites its jump pointer at $EC91 and jumps to $8F61, the title. Every CIA 2 register is reached through an indexed address that reads as CIA 1: STA $DC8F,X here is $DD0E. The steps are listed at $EC31.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[60560]},{"a":60462,"s":"$DC8F+$7F = $DD0E: CIA 2 timer A stopped","t":"code","b":[157,143,220],"m":"sta","o":"$DC8F,x"},{"a":60463,"t":"note","l":"init_stage2_op_lo","c":"Low byte of the operand of STA $DC8F,X at $EC2E, not a variable; also the base of STA $EC2F,X at $ECAE, which with X = $62 writes the new CIA 2 port A value into $EC91, the low byte of the start-up's jump pointer.","note":"inside the item at $EC2E","x":[60590]},{"a":60464,"t":"note","l":"init_stage2_op_hi","c":"High byte of that operand; the base of STA $EC30,X at $ECA3, which with X = $62 writes CIA 2's data-direction value into $EC92, the jump pointer's high byte.","note":"inside the item at $EC2E","x":[60579]},{"a":60465,"l":"init_stage2_steps","c":"Stage two from $EC31 to $ECB3, its steps in order. CIA 2, all through indexed addresses: timer B stopped ($DC90,X = $DD0F), its interrupts off ($DC8E,X = $DD0D, $7F), timer A = $4CC7 = 19,656 cycles, one PAL frame ($DC86,X = $DD05, $DCC2,Y = $DD04), timer B = $FFFF ($DC87,X = $DD06, $DCC5,Y = $DD07); zero page $86 = $FF. Waits for raster line $0A with bit 8 clear, then line $1E, starts both timers ($DCCC,Y and $DCCD,Y = 1) and enables the timer A NMI ($DD0D = $81), so the NMI comes at the same raster position every frame and timer B runs free for $7533's random numbers. Fills pages 1-3 with A = $81 exclusive-ORed with each index in turn; copies the vectors NMI $7C61, reset $0000, IRQ $7C73 from $B62D to $FFFA-$FFFF; writes $60 (RTS) to $EC2C and, calling $7533 before each further byte, its random values to $EC2D-$EC8D; sets CIA 2 port A bits 0-1 to output and 0 (VIC bank 3, $C000-$FFFF); stores those two port values over the jump pointer at $EC91-$EC92; JMP $8F61.","s":"$DD0F: timer B stopped","t":"code","b":[157,144,220],"m":"sta","o":"$DC90,x"},{"a":60468,"t":"code","b":[169,127],"m":"lda","o":"#$7F"},{"a":60470,"s":"$DD0D = $7F: CIA 2 interrupts off","t":"code","b":[157,142,220],"m":"sta","o":"$DC8E,x"},{"a":60473,"t":"code","b":[169,76],"m":"lda","o":"#$4C"},{"a":60475,"s":"$DD05 = $4C: timer A high","t":"code","b":[157,134,220],"m":"sta","o":"$DC86,x"},{"a":60478,"t":"code","b":[169,199],"m":"lda","o":"#$C7"},{"a":60480,"s":"$DCC2+$42 = $DD04 = $C7: timer A low","t":"code","b":[153,194,220],"m":"sta","o":"$DCC2,y"},{"a":60483,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":60485,"s":"$DD06 = $FF: timer B low","t":"code","b":[157,135,220],"m":"sta","o":"$DC87,x"},{"a":60488,"s":"$DCC5+$42 = $DD07 = $FF: timer B high","t":"code","b":[153,197,220],"m":"sta","o":"$DCC5,y"},{"a":60491,"t":"code","b":[133,134],"m":"sta","o":"watchdog_index","oa":134},{"a":60493,"l":"b_EC4D","t":"code","b":[173,17,208],"m":"lda","o":"vic_control1","x":[60498,60505]},{"a":60496,"t":"code","b":[41,128],"m":"and","o":"#$80"},{"a":60498,"t":"code","b":[208,249],"m":"bne","o":"b_EC4D","oa":60493},{"a":60500,"t":"code","b":[173,18,208],"m":"lda","o":"vic_raster"},{"a":60503,"t":"code","b":[201,10],"m":"cmp","o":"#$0A"},{"a":60505,"t":"code","b":[208,242],"m":"bne","o":"b_EC4D","oa":60493},{"a":60507,"t":"code","b":[169,30],"m":"lda","o":"#$1E"},{"a":60509,"l":"b_EC5D","t":"code","b":[205,18,208],"m":"cmp","o":"vic_raster","x":[60512]},{"a":60512,"t":"code","b":[208,251],"m":"bne","o":"b_EC5D","oa":60509},{"a":60514,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":60516,"s":"$DD0E = 1: timer A runs","t":"code","b":[153,204,220],"m":"sta","o":"$DCCC,y"},{"a":60519,"s":"$DD0F = 1: timer B runs","t":"code","b":[153,205,220],"m":"sta","o":"$DCCD,y"},{"a":60522,"t":"code","b":[169,129],"m":"lda","o":"#$81"},{"a":60524,"s":"$DD0D = $81: timer A NMI on","t":"code","b":[157,142,220],"m":"sta","o":"$DC8E,x"},{"a":60527,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":60529,"l":"b_EC71","t":"code","b":[153,0,1],"m":"sta","o":"f_0100,y","oa":256,"x":[60543]},{"a":60532,"t":"code","b":[153,0,2],"m":"sta","o":"alien_x,y","oa":512},{"a":60535,"t":"code","b":[153,0,3],"m":"sta","o":"bullet_column,y","oa":768},{"a":60538,"t":"code","b":[132,102],"m":"sty","o":"zp_temp_66","oa":102},{"a":60540,"t":"code","b":[69,102],"m":"eor","o":"zp_temp_66","oa":102},{"a":60542,"t":"code","b":[136],"m":"dey"},{"a":60543,"t":"code","b":[208,240],"m":"bne","o":"b_EC71","oa":60529},{"a":60545,"t":"code","b":[162,6],"m":"ldx","o":"#$06"},{"a":60547,"l":"b_EC83","t":"code","b":[189,44,182],"m":"lda","o":"tile_graphics_address_hi,x","oa":46636,"x":[60554]},{"a":60550,"t":"code","b":[157,249,255],"m":"sta","o":"vectors_minus_1,x","oa":65529},{"a":60553,"t":"code","b":[202],"m":"dex"},{"a":60554,"t":"code","b":[208,247],"m":"bne","o":"b_EC83","oa":60547},{"a":60556,"t":"code","b":[169,96],"m":"lda","o":"#$60"},{"a":60558,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":60560,"l":"b_EC90","s":"X = 0: RTS at $EC2C; then $7533's random bytes to $EC8D","t":"code","b":[157,44,236],"m":"sta","o":"init_stage2,x","oa":60460,"x":[60569]},{"a":60561,"t":"note","l":"init_jump_ptr","note":"inside the item at $EC90","x":[60445]},{"a":60563,"t":"code","b":[32,51,117],"m":"jsr","o":"random","oa":30003},{"a":60566,"t":"code","b":[232],"m":"inx"},{"a":60567,"t":"code","b":[224,98],"m":"cpx","o":"#$62"},{"a":60569,"t":"code","b":[208,245],"m":"bne","o":"b_EC90","oa":60560},{"a":60571,"t":"code","b":[173,2,221],"m":"lda","o":"cia2_ddr_a"},{"a":60574,"t":"code","b":[9,3],"m":"ora","o":"#$03"},{"a":60576,"t":"code","b":[141,2,221],"m":"sta","o":"cia2_ddr_a"},{"a":60579,"s":"X = $62: DDR value into $EC92","t":"code","b":[157,48,236],"m":"sta","o":"init_stage2_op_hi,x","oa":60464},{"a":60582,"t":"code","b":[173,0,221],"m":"lda","o":"cia2_port_a"},{"a":60585,"t":"code","b":[41,252],"m":"and","o":"#$FC"},{"a":60587,"t":"code","b":[141,0,221],"m":"sta","o":"cia2_port_a"},{"a":60590,"s":"X = $62: port value into $EC91","t":"code","b":[157,47,236],"m":"sta","o":"init_stage2_op_lo,x","oa":60463},{"a":60593,"t":"code","b":[76,97,143],"m":"jmp","o":"start_attract","oa":36705},{"a":60596,"l":"init_stale_tail","c":"55 bytes ($ECB4-$ECEA) never executed that decode as an older copy of the start-up's tail: EOR $66 / DEY / BNE, the vector copy from $B464 (LDA $B463,X / STA $FFF9,X), the self-wipe with LDA #$60 and JSR $7304 into $EC63-$ECC5, the VIC bank switch, STA $D013 of 2, and JMP $8D5D. The live code uses $B62D, $7533, $EC2C and $8F61 for these, so this is apparently left over from an earlier assembly in which those routines sat elsewhere. The title's screen clear ($8F41) overwrites it.","t":"byte","b":[69,102,136,208,240,162,6,189]},{"a":60604,"t":"byte","b":[99,180,157,249,255,202,208,247]},{"a":60612,"t":"byte","b":[169,96,162,0,157,99,236,32]},{"a":60620,"t":"byte","b":[4,115,232,224,99,208,245,173]},{"a":60628,"t":"byte","b":[2,221,9,3,141,2,221,173]},{"a":60636,"t":"byte","b":[0,221,41,252,141,0,221,169]},{"a":60644,"t":"byte","b":[2,141,19,208,76,93,141]},{"a":60651,"t":"gap","n":789},{"a":60669,"t":"note","l":"sprite_b4_minus_3","c":"Three bytes before sprite $B4; base of LDA $ECFD,Y at $8218 (Y $3E-1), which moves sprite $B4's image down one row, each byte taken from three bytes earlier, while the Wizball sinks. The two bytes it reads here ($ECFE-$ECFF) land in $ED01-$ED02 and are zeroed straight after. In the entry image this is leftover screen text.","note":"outside the tracked image","x":[33304]},{"a":60672,"t":"note","l":"sprite_b4","c":"Sprite $B4 ($ED00-$ED3F), one of the play sprites built at run time in the part of the $EC00 screen that play does not show (sprites $B0-$BF, $EC00-$EFF7; only the top band's pointers at $EFF8 are used as a screen there). When the Wizball reaches glyph $BE (apparently a tube or crater mouth: $81C9 moves $B128 one level up or down) $81E9 copies its current spin frame into this sprite ($C400 + 64 x $B21A) and $8216 sinks it one row per call for 21 calls ($B213 = $15); $830A then draws the left half of the curved pipe into it. Messages are drawn into sprites $B4-$B9: 'game over' and 'player one' or 'team two' ($6A02-$6A3C), 'wot a wizace!' and 'level n completed' ($AE2A-$AE54). The routine at $646F, which the frame loop enters once $B874 is set (apparently the bonus stage), keeps a working copy of the wave script from $3902 in $ED02-$EDFF instead.","note":"outside the tracked image","x":[33273,33307,33315,33568]},{"a":60673,"t":"note","l":"sprite_b4_b1","c":"Byte 1 of sprite $B4's top row; $8226 zeroes it after each one-row sink.","note":"outside the tracked image","x":[33318]},{"a":60674,"t":"note","l":"wave_script_copy","c":"Byte 2 of sprite $B4's top row, zeroed by $8229 after each sink. Also where $9CB2 (called at $64C1, in the routine at $646F) copies the wave script $3902-$39FF, to $ED02-$EDFF (STA $ED02,X, X 0-$FD); the sequencer at $9CEA reads it in 3-byte steps from $BB06: here the entry's first byte, a wave number or a control ($FD, $FE, $FF), at $9D05, $9D20 and $9D7A.","note":"outside the tracked image","x":[33321,40130,40197,40224,40314]},{"a":60675,"t":"note","l":"wave_script_copy_b1","c":"Byte 0 of sprite $B4's second row; in the wave-script copy the base of LDA $ED03,Y at $9CF2 and $9D63, each entry's second byte (compared with $BB04 and $BB05).","note":"outside the tracked image","x":[40178,40291]},{"a":60676,"t":"note","l":"wave_script_copy_b2","c":"Byte 1 of sprite $B4's second row; in the wave-script copy the base of $ED04,Y at $9CFA-$9D02, each entry's third byte, a repeat count that $9D02 decrements in place, which is why the script is copied out of $3902 first.","note":"outside the tracked image","x":[40186,40194]},{"a":60736,"t":"note","l":"sprite_b5","c":"Sprite $B5 ($ED40-$ED7F), below $B4 in the pipe sequence: $8334 scrolls it up one row per call (the base of STA $ED40,Y at $8347, Y 0-$3F, each byte from three bytes on) and blanks its last row ($ED7C-$ED7E); $830A's copies run into it as the pipe slides down; $6A3C draws the second line of the game-over message ('player one', 'team two' and so on) into it.","note":"outside the tracked image","x":[33607]},{"a":60739,"t":"note","l":"sprite_b5_row1","c":"Second row of sprite $B5; base of LDA $ED43,Y at $8344, the source of the upward scroll (Y 0-$3F reads up to $ED82, the top row of sprite $B6).","note":"outside the tracked image","x":[33604]},{"a":60796,"t":"note","l":"sprite_b5_last_row","c":"Last row of sprite $B5, left byte; zeroed by $835A after each upward scroll.","note":"outside the tracked image","x":[33626]},{"a":60797,"t":"note","l":"sprite_b5_last_row_b1","c":"Last row of sprite $B5, middle byte; zeroed by $8360.","note":"outside the tracked image","x":[33632]},{"a":60798,"t":"note","l":"sprite_b5_last_row_b2","c":"Last row of sprite $B5, right byte; zeroed by $8366. $ED7F after it is the padding byte.","note":"outside the tracked image","x":[33638]},{"a":60800,"t":"note","l":"sprite_b6","c":"Sprite $B6 ($ED80-$EDBF), the right-hand partner of $B4: $830A copies the right half of the pipe (sprite 59, read from $CEBF) into it, the base of STA $ED80,Y at $8326.","note":"outside the tracked image","x":[33574]},{"a":60864,"t":"note","l":"sprite_b7","c":"Sprite $B7 ($EDC0-$EDFF), the right-hand partner of $B5: $8334 scrolls it up one row per call (the base of STA $EDC0,Y at $834D) and blanks its last row ($EDFC-$EDFE).","note":"outside the tracked image","x":[33613]},{"a":60867,"t":"note","l":"sprite_b7_row1","c":"Second row of sprite $B7; base of LDA $EDC3,Y at $834A for the upward scroll (Y 0-$3F reads up to $EE02, the top of sprite $B8).","note":"outside the tracked image","x":[33610]},{"a":60924,"t":"note","l":"sprite_b7_last_row","c":"Last row of sprite $B7, left byte; zeroed by $8357.","note":"outside the tracked image","x":[33623]},{"a":60925,"t":"note","l":"sprite_b7_last_row_b1","c":"Last row of sprite $B7, middle byte; zeroed by $835D.","note":"outside the tracked image","x":[33629]},{"a":60926,"t":"note","l":"sprite_b7_last_row_b2","c":"Last row of sprite $B7, right byte; zeroed by $8363.","note":"outside the tracked image","x":[33635]},{"a":60991,"t":"note","l":"cauldron_red_minus_1","c":"Padding byte of sprite $B8 ($EE00-$EE3F); base of STA $EE3F,Y at $9DEE (Y $40-1), which copies the empty cauldron (sprite 56) into sprite $B9.","note":"outside the tracked image","x":[40430]},{"a":60992,"t":"note","l":"sprite_cauldron_red","c":"Sprite $B9 ($EE40-$EE7F), the red cauldron at the bottom of the play screen (bottom-band pointer $F7F9, colour $B516 = 2). $9DE9 makes it from sprite 56; $9E0D-$9EC5 redraws it a row at a time for the level in $B12B, rows below the level from sprite 57. Base of STA $EE40,X at $9EB6, X being the row's offset plus $00, $40, $80 or $C0 for the four cauldrons.","note":"outside the tracked image","x":[40630]},{"a":60993,"t":"note","l":"sprite_cauldron_red_b1","c":"Byte 1 of the red cauldron's top row; base of STA $EE41,X at $9EBC, the middle byte of each cauldron row.","note":"outside the tracked image","x":[40636]},{"a":60994,"t":"note","l":"sprite_cauldron_red_b2","c":"Byte 2 of the red cauldron's top row; base of STA $EE42,X at $9EC2, the right-hand byte of each cauldron row.","note":"outside the tracked image","x":[40642]},{"a":61055,"t":"note","l":"cauldron_green_minus_1","c":"Padding byte of the red cauldron; base of STA $EE7F,Y at $9DF1, which copies sprite 56 into sprite $BA, the green cauldron ($EE80-$EEBF, pointer $F7FA, colour $B517 = 5).","note":"outside the tracked image","x":[40433]},{"a":61119,"t":"note","l":"cauldron_blue_minus_1","c":"Padding byte of the green cauldron; base of STA $EEBF,Y at $9DF4, which copies sprite 56 into sprite $BB, the blue cauldron ($EEC0-$EEFF, pointer $F7FC, colour $B519 = 6).","note":"outside the tracked image","x":[40436]},{"a":61183,"t":"note","l":"cauldron_target_minus_1","c":"Padding byte of the blue cauldron; base of STA $EEFF,Y at $7784 and $9DF7, which copy sprite 56 into sprite $BC, the fourth cauldron ($EF00-$EF3F, pointer $F7FD) in the colour to be mixed ($B51A, set per level at $77B8; 2, red, in play-start.vsf).","note":"outside the tracked image","x":[30596,40439]},{"a":61185,"t":"note","l":"cauldron_target_top","c":"Middle byte of the fourth cauldron's top row. $9E26 copies it to $B874 whenever $B1CF and $B213 are both 0: it is 0 while that row is drawn from the empty cauldron (sprite 56) and $AA once it is drawn from the full one (sprite 57). So $B874 turns non-zero when the target cauldron is full, and the frame loop then leaves for $646F ($6416): apparently the colour is complete and the bonus stage follows.","note":"outside the tracked image","x":[40486]},{"a":61431,"t":"note","l":"icon_ptrs_minus_1","c":"Byte before the top band's sprite pointers $EFF8-$EFFF (the band at $89BB shows screen $EC00 with D018 = $B0 only for these); base of indexed accesses from 1: $7210 (X 8-1, the starting icons from $B4DE), $68FB (all $0C, the get-ready rings), $905E (all 5, the menu stars), $AFED-$AFF6 and $B05F (Y 6-1: saved, replaced from $B4DE and restored around the Wiz-lab), $72E4 and $B0A7 (the icon picked, $B258).","note":"outside the tracked image","x":[26875,29200,29412,36958,45037,45046,45151,45223]},{"a":61432,"t":"note","l":"icon1_ptr","c":"Icon 1's sprite pointer, thrust then anti-grav: 7 at the start ($7210), 3 once thrust is taken, 9 once both are ($7379-$7390). Title bands write it too ($925D, $92CD, $9358).","note":"outside the tracked image","x":[29573,29584,37469,37581,37720,38182]},{"a":61433,"t":"note","l":"icon2_ptr","c":"Icon 2's sprite pointer, beam then double: $0B at the start, 4 once beam is taken ($734B-$7357), 9 once double is ($7360).","note":"outside the tracked image","x":[29527,29538,37723]},{"a":61434,"t":"note","l":"icon3_ptr","c":"Icon 3's sprite pointer, the catelite: 2, then 9 while the cat is out ($736B); $8665 puts 2 back when $B26C reaches 9.","note":"outside the tracked image","x":[29549,34405,37726]},{"a":61435,"t":"note","l":"icon4_ptr","c":"Icon 4's sprite pointer, blazers: 6 from $7210; the only other write found is the title band's $8C at $9361.","note":"outside the tracked image","x":[29473,37729]},{"a":61436,"t":"note","l":"icon5_ptr","c":"Icon 5's sprite pointer, the sprays: 8 (wiz spray) at the start; $7325-$734A set $0A (cat spray) on the first take and then switch between $0A and 8 as the spray passes between Wiz and Cat.","note":"outside the tracked image","x":[29489,29505,29511]},{"a":61438,"t":"note","l":"icon7_ptr","c":"Icon 7's sprite pointer, the shield: 0; 9 while a shield is on ($73CE, which also starts the shield timer $7F06 at $28); $7EA0 and $7EDC put 0 back when the timer runs out. Icon 6, the smart bomb ($EFFD, 1), has no write of its own found beyond $7210.","note":"outside the tracked image","x":[29648,32416,32476]},{"a":61440,"l":"font_small_glyphs_00_1f","c":"The text character set at $F000 (VIC bank 3), part one: glyphs $00-$1F ($F000-$F0FF) of the small font, in screen-code order: glyph 0 blank, the letters a-z at $01-$1A in a lower-case style, then [, pound, ], up-arrow and left-arrow. Shown on the $EC00 screens (D018 = $BC, $BD) and on the score line (D018 = $8C). The whole small font ($F000-$F1FF) is stored exclusive-ORed with $FF, the way the title wants it: there colour RAM is black and $D021 changes per band, so the letters show through in the background colour.","t":"byte","b":[255,255,255,255,255,255,255,255],"x":[26437,35992,35997]},{"a":61448,"t":"byte","b":[255,193,145,57,57,145,197,255]},{"a":61456,"t":"byte","b":[225,207,147,57,57,147,199,255]},{"a":61464,"t":"byte","b":[255,195,157,63,63,155,199,255]},{"a":61472,"t":"byte","b":[15,231,147,57,57,147,199,255]},{"a":61480,"t":"byte","b":[255,195,153,1,63,155,199,255]},{"a":61488,"t":"byte","b":[195,157,159,7,159,159,159,255]},{"a":61496,"t":"byte","b":[255,133,25,49,129,121,131,255]},{"a":61504,"t":"byte","b":[63,35,25,57,57,51,49,255]},{"a":61512,"t":"byte","b":[227,179,159,207,207,207,207,255]},{"a":61520,"t":"byte","b":[255,243,227,243,243,103,143,255]},{"a":61528,"t":"byte","b":[55,39,15,51,57,49,51,255]},{"a":61536,"t":"byte","b":[207,199,231,231,231,231,231,255]},{"a":61544,"t":"byte","b":[255,19,1,41,57,51,49,255]},{"a":61552,"t":"byte","b":[255,35,9,25,57,51,49,255]},{"a":61560,"t":"byte","b":[255,199,147,57,57,147,199,255]},{"a":61568,"t":"byte","b":[255,71,17,57,19,71,63,255]},{"a":61576,"t":"byte","b":[255,197,145,57,145,197,249,255]},{"a":61584,"t":"byte","b":[255,71,19,57,19,7,49,255]},{"a":61592,"t":"byte","b":[255,195,157,143,195,115,135,255]},{"a":61600,"t":"byte","b":[231,1,207,207,207,195,231,255]},{"a":61608,"t":"byte","b":[255,25,153,57,57,49,137,255]},{"a":61616,"t":"byte","b":[255,25,153,57,57,51,143,255]},{"a":61624,"t":"byte","b":[255,25,153,57,41,1,145,255]},{"a":61632,"t":"byte","b":[255,153,65,199,143,5,51,255]},{"a":61640,"t":"byte","b":[255,153,25,49,129,121,131,255]},{"a":61648,"t":"byte","b":[255,193,179,231,207,29,3,255]},{"a":61656,"t":"byte","b":[195,207,207,207,207,207,195,255]},{"a":61664,"t":"byte","b":[243,237,207,131,207,157,3,255]},{"a":61672,"t":"byte","b":[195,243,243,243,243,243,195,255]},{"a":61680,"t":"byte","b":[255,231,195,129,231,231,231,231]},{"a":61688,"t":"byte","b":[255,239,207,128,128,207,239,255]},{"a":61696,"l":"font_small_glyphs_20_33","c":"Small font glyphs $20-$33 ($F100-$F19F): space, the punctuation ! \" # $ % & ' ( ) * + , - . /, then the digits 0-3 in a square block style. The first byte, row 0 of the space, is the font's state flag: 0 when the glyphs are the right way round, $FF when inverted (as stored). $8C84 makes the font normal and $8C8D makes it inverted, each flipping $F000-$F1FF with EOR #$FF only when needed, and both copy the flag to $B276, the mask that $8E0E exclusive-ORs into text it draws into sprites. $770D reads the digits here ($F188 + 8 x level) for the level-number sprite.","t":"byte","b":[255,255,255,255,255,255,255,255],"x":[26443,35972,35981,36003,36008,36014]},{"a":61704,"t":"byte","b":[243,243,227,231,231,223,207,255]},{"a":61712,"t":"byte","b":[153,153,153,255,255,255,255,255]},{"a":61720,"t":"byte","b":[153,153,0,153,0,153,153,255]},{"a":61728,"t":"byte","b":[231,193,159,195,249,131,231,255]},{"a":61736,"t":"byte","b":[157,153,243,231,207,153,185,255]},{"a":61744,"t":"byte","b":[195,153,195,199,152,153,192,255]},{"a":61752,"t":"byte","b":[255,255,231,255,255,255,255,255]},{"a":61760,"t":"byte","b":[243,231,207,207,207,231,243,255]},{"a":61768,"t":"byte","b":[207,231,243,243,243,231,207,255]},{"a":61776,"t":"byte","b":[199,131,41,1,41,147,199,255]},{"a":61784,"t":"byte","b":[255,231,231,129,231,231,255,255]},{"a":61792,"t":"byte","b":[255,255,255,255,255,231,231,207]},{"a":61800,"t":"byte","b":[255,255,255,129,255,255,255,255]},{"a":61808,"t":"byte","b":[255,255,255,255,255,231,231,255]},{"a":61816,"t":"byte","b":[255,252,249,243,231,207,159,255]},{"a":61824,"t":"byte","b":[1,57,57,57,57,57,1,255]},{"a":61832,"t":"byte","b":[199,231,231,231,231,231,195,255]},{"a":61840,"t":"byte","b":[1,249,249,1,63,63,1,255]},{"a":61848,"t":"byte","b":[1,249,249,225,249,249,1,255]},{"a":61856,"l":"font_small_glyphs_34_3f","c":"Small font glyphs $34-$3F ($F1A0-$F1FF): digits 4-9, then block capitals H, I, U and P for the score line's '1UP', 'HI' and '2UP' ($3A-$3D), a blank ($3E) and '?' ($3F). This address is also the operand of BIT $F1A0 at $49C8 in the music driver, used to skip: $49DC branches to $49C9, where the operand bytes A0 F1 run as LDY #$F1.","t":"byte","b":[57,57,57,1,249,249,249,255],"x":[18888]},{"a":61864,"t":"byte","b":[1,63,63,1,249,249,1,255]},{"a":61872,"t":"byte","b":[1,63,63,1,57,57,1,255]},{"a":61880,"t":"byte","b":[1,249,249,249,249,249,249,255]},{"a":61888,"t":"byte","b":[1,57,57,1,57,57,1,255]},{"a":61896,"t":"byte","b":[1,57,57,1,249,249,1,255]},{"a":61904,"t":"byte","b":[57,57,57,1,57,57,57,255]},{"a":61912,"t":"byte","b":[195,231,231,231,231,231,195,255]},{"a":61920,"t":"byte","b":[57,57,57,57,57,57,1,255]},{"a":61928,"t":"byte","b":[1,57,57,1,63,63,63,255]},{"a":61936,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":61944,"t":"byte","b":[170,191,249,243,231,255,231,255]},{"a":61952,"l":"font_large_a_p","c":"Large gothic font, glyphs $40-$7F ($F200-$F3FF): the top halves of the letters a-p, two glyphs each (a = $40/$41 ... p = $5E/$5F), and their bottom halves 32 glyphs on ($60-$7F). A character is drawn 2 x 2 from the table at $B591 (glyph = $40 + entry) by $8D1F on screen and by $8E59 into sprites; i and l use only the left column. Stored the right way round; $8CBE inverts the whole large font ($F200-$F7FF) and $8CB5 restores it.","t":"byte","b":[0,0,0,1,2,1,3,4]},{"a":61960,"t":"byte","b":[0,0,0,200,120,48,48,240]},{"a":61968,"t":"byte","b":[1,10,6,6,14,7,6,6]},{"a":61976,"t":"byte","b":[0,0,0,48,248,152,24,24]},{"a":61984,"t":"byte","b":[0,0,0,0,1,6,6,6]},{"a":61992,"t":"byte","b":[0,0,0,96,240,56,16,0]},{"a":62000,"t":"byte","b":[7,3,1,0,1,6,6,6]},{"a":62008,"t":"byte","b":[0,128,192,232,120,56,24,24]},{"a":62016,"t":"byte","b":[0,0,0,0,1,6,6,6]},{"a":62024,"t":"byte","b":[0,0,0,96,240,56,112,192]},{"a":62032,"t":"byte","b":[0,1,3,1,1,7,11,1]},{"a":62040,"t":"byte","b":[224,240,136,128,128,208,224,128]},{"a":62048,"t":"byte","b":[0,0,0,1,2,12,12,12]},{"a":62056,"t":"byte","b":[0,0,0,128,236,124,48,48]},{"a":62064,"t":"byte","b":[1,10,6,6,14,7,6,6]},{"a":62072,"t":"byte","b":[0,0,0,48,248,24,24,24]},{"a":62080,"t":"byte","b":[12,8,0,16,60,24,24,24]},{"a":62088,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":62096,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":62104,"t":"byte","b":[24,16,0,32,120,48,48,48]},{"a":62112,"t":"byte","b":[1,10,6,6,15,7,6,6]},{"a":62120,"t":"byte","b":[0,8,48,192,128,224,240,56]},{"a":62128,"t":"byte","b":[4,40,24,24,24,24,24,24]},{"a":62136,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":62144,"t":"byte","b":[0,0,0,59,127,51,49,49]},{"a":62152,"t":"byte","b":[0,0,0,48,252,156,140,140]},{"a":62160,"t":"byte","b":[0,0,0,6,15,6,6,6]},{"a":62168,"t":"byte","b":[0,0,0,96,248,112,48,48]},{"a":62176,"t":"byte","b":[0,0,0,0,1,6,6,6]},{"a":62184,"t":"byte","b":[0,0,0,192,240,56,24,24]},{"a":62192,"t":"byte","b":[0,0,0,4,14,7,6,6]},{"a":62200,"t":"byte","b":[0,0,0,96,240,56,24,24]},{"a":62208,"t":"byte","b":[4,12,14,7,3,0,0,0]},{"a":62216,"t":"byte","b":[48,48,112,184,16,0,0,0]},{"a":62224,"t":"byte","b":[6,6,15,3,0,0,0,0]},{"a":62232,"t":"byte","b":[24,24,56,224,192,0,0,0]},{"a":62240,"t":"byte","b":[6,6,15,3,0,0,0,0]},{"a":62248,"t":"byte","b":[0,8,48,224,192,0,0,0]},{"a":62256,"t":"byte","b":[6,6,15,3,0,0,0,0]},{"a":62264,"t":"byte","b":[24,24,48,224,192,0,0,0]},{"a":62272,"t":"byte","b":[7,6,15,3,0,0,0,0]},{"a":62280,"t":"byte","b":[0,8,48,224,192,0,0,0]},{"a":62288,"t":"byte","b":[1,1,1,1,1,1,1,2]},{"a":62296,"t":"byte","b":[128,128,128,128,128,128,64,0]},{"a":62304,"t":"byte","b":[12,12,30,7,1,3,7,12]},{"a":62312,"t":"byte","b":[48,48,112,184,184,24,240,96]},{"a":62320,"t":"byte","b":[6,6,6,15,2,0,0,3]},{"a":62328,"t":"byte","b":[24,24,24,24,16,48,96,128]},{"a":62336,"t":"byte","b":[24,24,24,60,8,0,0,0]},{"a":62344,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":62352,"t":"byte","b":[0,0,0,0,0,0,8,7]},{"a":62360,"t":"byte","b":[48,48,48,48,32,96,192,0]},{"a":62368,"t":"byte","b":[6,6,6,15,2,0,0,3]},{"a":62376,"t":"byte","b":[56,24,24,24,16,48,96,128]},{"a":62384,"t":"byte","b":[24,24,24,60,8,0,0,0]},{"a":62392,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":62400,"t":"byte","b":[49,49,49,123,16,0,0,0]},{"a":62408,"t":"byte","b":[140,140,140,222,132,0,0,0]},{"a":62416,"t":"byte","b":[6,6,6,15,2,0,0,0]},{"a":62424,"t":"byte","b":[48,48,48,120,16,0,0,0]},{"a":62432,"t":"byte","b":[6,6,15,3,0,0,0,0]},{"a":62440,"t":"byte","b":[24,24,56,224,192,0,0,0]},{"a":62448,"t":"byte","b":[6,6,15,7,6,6,10,0]},{"a":62456,"t":"byte","b":[24,24,24,240,96,0,0,0]},{"a":62464,"l":"font_large_q_z","c":"Large font glyphs $80-$93 ($F400-$F49F): the top halves of q-z (q = $80/$81 ... z = $92/$93); their bottom halves are at $A0-$B3. $F400-$F7FF doubles in play as the screen of the bottom band, which uses only its sprite pointers (see $F7F8).","t":"byte","b":[0,0,0,1,3,12,12,12]},{"a":62472,"t":"byte","b":[0,0,0,128,224,120,48,48]},{"a":62480,"t":"byte","b":[0,0,0,4,15,6,6,6]},{"a":62488,"t":"byte","b":[0,0,0,224,240,56,16,0]},{"a":62496,"t":"byte","b":[0,0,0,3,7,12,12,15]},{"a":62504,"t":"byte","b":[0,24,8,24,240,96,192,224]},{"a":62512,"t":"byte","b":[0,1,1,7,11,1,1,1]},{"a":62520,"t":"byte","b":[128,128,128,208,224,128,128,128]},{"a":62528,"t":"byte","b":[0,0,0,4,15,6,6,6]},{"a":62536,"t":"byte","b":[0,0,0,32,120,48,48,48]},{"a":62544,"t":"byte","b":[4,8,12,14,6,7,6,6]},{"a":62552,"t":"byte","b":[0,0,0,48,248,24,24,24]},{"a":62560,"t":"byte","b":[32,64,96,115,55,57,49,49]},{"a":62568,"t":"byte","b":[0,0,0,24,188,204,140,140]},{"a":62576,"t":"byte","b":[0,0,0,6,11,3,1,1]},{"a":62584,"t":"byte","b":[0,0,0,24,48,96,224,192]},{"a":62592,"t":"byte","b":[0,0,0,2,15,7,3,3]},{"a":62600,"t":"byte","b":[0,0,0,16,120,56,24,24]},{"a":62608,"t":"byte","b":[0,0,0,3,7,8,0,1]},{"a":62616,"t":"byte","b":[0,0,0,0,192,248,48,224]},{"a":62624,"l":"font_large_logo_digits","c":"Large font glyphs $94-$DD ($F4A0-$F6EF): '!' ($94/$95); the tops of the WIZBALL logo's W, I, Z, B and A ($96-$9F, text codes # $ % & '); the bottom halves of q-z, '!' and those logo letters ($A0-$BF); the tops of the digits 0-9 ($C0-$D3); the logo's L ($D4/$D5, code '(', used twice); blank tops ($D6-$DD, the space being $DC/$DD). This address is also the operand of BIT $F4A0 at $4C35, a skip: $4C49 branches to $4C36, where A0 F4 runs as LDY #$F4.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[19509]},{"a":62632,"t":"byte","b":[0,0,56,56,120,112,224,192]},{"a":62640,"t":"byte","b":[96,177,59,28,28,28,15,12]},{"a":62648,"t":"byte","b":[66,206,222,231,231,231,123,99]},{"a":62656,"t":"byte","b":[3,15,17,0,0,0,7,9]},{"a":62664,"t":"byte","b":[49,230,236,204,204,204,204,204]},{"a":62672,"t":"byte","b":[7,31,48,32,1,2,4,15]},{"a":62680,"t":"byte","b":[193,254,126,156,56,48,112,242]},{"a":62688,"t":"byte","b":[59,94,70,6,13,13,13,61]},{"a":62696,"t":"byte","b":[60,254,206,198,134,164,172,168]},{"a":62704,"t":"byte","b":[7,31,24,51,55,37,33,35]},{"a":62712,"t":"byte","b":[195,246,252,124,220,220,156,28]},{"a":62720,"t":"byte","b":[12,12,30,7,1,0,0,0]},{"a":62728,"t":"byte","b":[48,48,112,240,176,52,56,48]},{"a":62736,"t":"byte","b":[6,6,6,15,3,0,0,0]},{"a":62744,"t":"byte","b":[0,0,0,64,128,0,0,0]},{"a":62752,"t":"byte","b":[3,1,3,7,12,0,0,0]},{"a":62760,"t":"byte","b":[248,152,24,240,96,0,0,0]},{"a":62768,"t":"byte","b":[1,1,1,3,0,0,0,0]},{"a":62776,"t":"byte","b":[128,128,136,240,224,0,0,0]},{"a":62784,"t":"byte","b":[6,6,6,7,3,0,0,0]},{"a":62792,"t":"byte","b":[48,48,112,184,16,0,0,0]},{"a":62800,"t":"byte","b":[6,6,15,3,0,0,0,0]},{"a":62808,"t":"byte","b":[24,24,48,224,192,0,0,0]},{"a":62816,"t":"byte","b":[49,49,121,31,6,0,0,0]},{"a":62824,"t":"byte","b":[140,140,204,252,48,0,0,0]},{"a":62832,"t":"byte","b":[1,3,3,6,12,0,0,0]},{"a":62840,"t":"byte","b":[192,192,96,104,48,0,0,0]},{"a":62848,"t":"byte","b":[3,3,3,3,7,6,12,7]},{"a":62856,"t":"byte","b":[56,48,96,192,0,0,96,128]},{"a":62864,"t":"byte","b":[7,0,0,0,0,1,6,8]},{"a":62872,"t":"byte","b":[192,240,48,48,96,192,0,0]},{"a":62880,"t":"byte","b":[1,1,2,0,0,24,24,0]},{"a":62888,"t":"byte","b":[128,0,0,0,0,0,0,0]},{"a":62896,"t":"byte","b":[44,125,28,12,24,27,55,33]},{"a":62904,"t":"byte","b":[99,107,231,99,198,222,188,8]},{"a":62912,"t":"byte","b":[0,0,0,0,1,15,27,32]},{"a":62920,"t":"byte","b":[230,230,230,230,198,14,220,240]},{"a":62928,"t":"byte","b":[19,1,3,6,12,31,63,32]},{"a":62936,"t":"byte","b":[252,136,16,32,65,131,254,248]},{"a":62944,"t":"byte","b":[93,13,61,29,14,31,25,32]},{"a":62952,"t":"byte","b":[182,163,191,35,63,175,252,112]},{"a":62960,"t":"byte","b":[34,23,15,12,28,30,51,32]},{"a":62968,"t":"byte","b":[28,252,252,28,28,61,222,140]},{"a":62976,"t":"byte","b":[0,0,0,0,0,0,0,15]},{"a":62984,"t":"byte","b":[0,0,0,0,0,0,0,240]},{"a":62992,"t":"byte","b":[42,21,10,0,1,1,1,1]},{"a":63000,"t":"byte","b":[170,86,174,14,142,142,142,206]},{"a":63008,"t":"byte","b":[42,21,10,0,7,0,0,7]},{"a":63016,"t":"byte","b":[170,86,174,14,238,46,46,238]},{"a":63024,"t":"byte","b":[42,21,10,0,7,0,0,1]},{"a":63032,"t":"byte","b":[170,86,174,14,206,206,206,206]},{"a":63040,"t":"byte","b":[42,21,10,0,6,6,6,6]},{"a":63048,"t":"byte","b":[170,86,174,14,206,206,206,206]},{"a":63056,"t":"byte","b":[42,21,10,0,7,6,7,7]},{"a":63064,"t":"byte","b":[170,86,174,14,238,14,14,238]},{"a":63072,"t":"byte","b":[42,21,10,0,7,6,7,7]},{"a":63080,"t":"byte","b":[170,86,174,14,238,14,14,238]},{"a":63088,"t":"byte","b":[42,21,10,0,7,0,0,0]},{"a":63096,"t":"byte","b":[170,86,174,14,238,110,110,110]},{"a":63104,"t":"byte","b":[42,21,10,0,7,6,6,7]},{"a":63112,"t":"byte","b":[170,86,174,14,206,206,206,206]},{"a":63120,"t":"byte","b":[42,21,10,0,7,6,7,7]},{"a":63128,"t":"byte","b":[170,86,174,14,238,110,110,110]},{"a":63136,"t":"byte","b":[14,31,33,3,3,3,15,23]},{"a":63144,"t":"byte","b":[220,176,176,96,96,96,96,96]},{"a":63152,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63160,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63168,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63176,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63184,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63192,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63200,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63208,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63216,"l":"font_large_flag_bottoms","c":"Large font glyphs $DE-$FE ($F6F0-$F7F6): $DE and $DF blank (the get-ready screen is filled with $DE, $68AD); the bottom halves of the digits ($E0-$F3) and of the logo's L ($F4/$F5); $F6, a small mark; $F7-$FE blank (the space's bottom is $FC/$FD). The first byte is the large font's state flag, as $F100 is the small font's: $8CB5 makes the font normal and $8CBE makes it inverted, flipping $F200-$F7FF with EOR #$FF when needed, and both copy the flag to $B277, the mask used by $8E59.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[36021,36030,36077]},{"a":63224,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63232,"t":"byte","b":[15,0,0,0,0,0,0,0]},{"a":63240,"t":"byte","b":[240,0,0,0,0,0,0,0]},{"a":63248,"t":"byte","b":[1,1,1,1,0,10,21,42]},{"a":63256,"t":"byte","b":[206,206,206,206,14,174,86,170]},{"a":63264,"t":"byte","b":[6,7,7,7,0,10,21,42]},{"a":63272,"t":"byte","b":[14,14,14,238,14,174,86,170]},{"a":63280,"t":"byte","b":[0,0,0,7,0,10,21,42]},{"a":63288,"t":"byte","b":[238,238,238,238,14,174,86,170]},{"a":63296,"t":"byte","b":[7,0,0,0,0,10,21,42]},{"a":63304,"t":"byte","b":[238,206,238,238,14,174,86,170]},{"a":63312,"t":"byte","b":[0,0,0,7,0,10,21,42]},{"a":63320,"t":"byte","b":[110,238,238,238,14,174,86,170]},{"a":63328,"t":"byte","b":[6,7,7,7,0,10,21,42]},{"a":63336,"t":"byte","b":[110,110,110,238,14,174,86,170]},{"a":63344,"t":"byte","b":[0,0,0,0,0,10,21,42]},{"a":63352,"t":"byte","b":[238,238,238,238,14,174,86,170]},{"a":63360,"t":"byte","b":[6,6,6,7,0,10,21,42]},{"a":63368,"t":"byte","b":[238,238,238,238,14,174,86,170]},{"a":63376,"t":"byte","b":[7,0,0,7,0,10,21,42]},{"a":63384,"t":"byte","b":[238,110,238,238,14,174,86,170]},{"a":63392,"t":"byte","b":[3,15,7,3,6,7,14,24]},{"a":63400,"t":"byte","b":[96,96,96,64,224,253,62,12]},{"a":63408,"t":"byte","b":[0,0,0,28,28,12,12,24]},{"a":63416,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63424,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63432,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63440,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63448,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63456,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63464,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63472,"t":"byte","b":[0,0,0,0,0,0,0]},{"a":63479,"l":"bottom_ptrs_minus_1","c":"Last byte of glyph $FE; base of STA $F7F7,X at $8B7B (X 6-1), with which the bottom band ($8B46) sets its sprite pointers $F7F8-$F7FD from $B51D-$B522.","t":"byte","b":[0],"x":[35707]},{"a":63480,"t":"gap","n":8},{"a":63480,"t":"note","l":"sprite_ptrs_bottom_band","c":"Glyph $FF of the $F000 set, used instead as the bottom band's sprite pointers: $8B46 shows the screen at $F400 (D018 = $DC) only to get this eight-byte block; the screen cells there ($F798-$F7E7, rows 23-24) are font data shown black on black. $8B7B writes the pointers for sprites 0-5 each frame: $A0 (the level digit), $B9 and $BA (red and green cauldrons), 0 (sprite 3 is off), $BB (blue), $BC (the target cauldron); $B51E is sometimes $38 or $B9 instead. In the entry image these eight bytes are A0 B9 BA 00 BB BC 45 FF exclusive-ORed with $FF, left there by an earlier run.","note":"outside the tracked image"},{"a":63488,"l":"glyphs_play_blank","c":"The play area's character set, $F800-$FFFF, selected for the landscape rows by $8A25 (D018 = $8E ORed with $B1FD). Glyph 0 ($F800-$F807) is blank: the empty sky.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63496,"t":"gap","n":720,"x":[30019]},{"a":63496,"t":"note","l":"glyphs_stars_01_20","c":"Star-field glyphs $01-$5A ($F808-$FAD7) are written at run time: on every pass of the outer cycle $7540 clears them (this is the base of its STA $F808,X, which covers $F808-$F907) and plots one random pixel into each of five bands of 18 glyphs (144 bytes from $F808, $F898, $F928, $F9B8 and $FA48), and $747E then moves those five stars sideways a pixel at a time (their state is at $B1B4). The play screens tile the sky with glyphs $01-$5A, 18 across and 5 down, so each band's star recurs every 18 columns.","note":"outside the tracked image","x":[30019]},{"a":63752,"t":"note","l":"glyphs_stars_21_40","c":"Star-field glyphs $21-$40 ($F908-$FA07); base of STA $F908,X in the clear loop at $7546.","note":"outside the tracked image","x":[30022]},{"a":63960,"t":"note","l":"glyphs_stars_3b_5a","c":"Star-field glyphs $3B-$5A ($F9D8-$FAD7); base of STA $F9D8,X at $7549, the last of the three overlapping clear loops, which ends the cleared area at $FAD7.","note":"outside the tracked image","x":[30025]},{"a":64216,"l":"glyphs_blocks_5b_7f","c":"Play-set glyphs $5B-$7F ($FAD8-$FBFF), the same in every snapshot: $5B-$72 a small solid block at four horizontal and six vertical offsets, the last eight cut off by the top or bottom of the cell (pre-shifted copies, as for drawing a small object at any pixel); $73 a two-row block over a dotted bottom row; $74 a nearly solid cell; $75-$76 a vertical bar; $77-$78 two diagonal shapes; $79-$7B a short dash at three heights; $7C-$7E a dotted bar at three heights; $7F a solid cell with a dotted foot. No byte of $2642-$3901, where the scenery tiles are, has a value in $5B-$7F, and none appears on the play screens of the snapshots; what draws them is unknown.","t":"byte","b":[224,224,224,0,0,0,0,0]},{"a":64224,"t":"byte","b":[120,120,120,0,0,0,0,0]},{"a":64232,"t":"byte","b":[30,30,30,0,0,0,0,0]},{"a":64240,"t":"byte","b":[7,7,7,0,0,0,0,0]},{"a":64248,"t":"byte","b":[0,224,224,224,224,0,0,0]},{"a":64256,"t":"byte","b":[0,120,120,120,120,0,0,0]},{"a":64264,"t":"byte","b":[0,30,30,30,30,0,0,0]},{"a":64272,"t":"byte","b":[0,7,7,7,7,0,0,0]},{"a":64280,"t":"byte","b":[0,0,0,224,224,224,224,0]},{"a":64288,"t":"byte","b":[0,0,0,120,120,120,120,0]},{"a":64296,"t":"byte","b":[0,0,0,30,30,30,30,0]},{"a":64304,"t":"byte","b":[0,0,0,7,7,7,7,0]},{"a":64312,"t":"byte","b":[0,0,0,0,0,224,224,224]},{"a":64320,"t":"byte","b":[0,0,0,0,0,120,120,120]},{"a":64328,"t":"byte","b":[0,0,0,0,0,30,30,30]},{"a":64336,"t":"byte","b":[0,0,0,0,0,7,7,7]},{"a":64344,"t":"byte","b":[64,0,0,0,0,0,60,60]},{"a":64352,"t":"byte","b":[0,0,0,0,0,0,15,15]},{"a":64360,"t":"byte","b":[0,0,0,0,0,0,3,3]},{"a":64368,"t":"byte","b":[0,0,0,0,0,0,192,192]},{"a":64376,"t":"byte","b":[240,240,0,0,0,0,0,0]},{"a":64384,"t":"byte","b":[60,60,0,0,0,0,0,0]},{"a":64392,"t":"byte","b":[15,15,0,0,0,0,0,0]},{"a":64400,"t":"byte","b":[3,3,0,0,0,0,0,0]},{"a":64408,"t":"byte","b":[192,192,0,0,0,0,0,85]},{"a":64416,"t":"byte","b":[64,255,255,255,255,255,255,255]},{"a":64424,"t":"byte","b":[60,60,60,60,60,60,60,60]},{"a":64432,"t":"byte","b":[60,60,60,60,60,60,60,60]},{"a":64440,"t":"byte","b":[4,14,31,62,124,248,112,32]},{"a":64448,"t":"byte","b":[32,112,248,124,62,31,14,4]},{"a":64456,"t":"byte","b":[60,255,60,0,0,0,0,0]},{"a":64464,"t":"byte","b":[0,0,60,255,60,0,0,0]},{"a":64472,"t":"byte","b":[0,0,0,0,0,60,255,60]},{"a":64480,"t":"byte","b":[255,170,255,0,0,0,0,0]},{"a":64488,"t":"byte","b":[0,0,255,170,255,0,0,0]},{"a":64496,"t":"byte","b":[0,0,0,0,0,255,170,255]},{"a":64504,"t":"byte","b":[255,255,255,255,255,255,255,85]},{"a":64512,"l":"glyphs_ground_80_9f","c":"Play-set glyphs $80-$9F ($FC00-$FCFF): dots, speckled and grey textures for ground and rock. The scenery tiles at $2642 use $80-$8C and $8F-$9F; level 1's ground rows are $91, $8F/$90, $92 and $93-$97 (play-start.vsf, rows 18-22).","t":"byte","b":[0,4,64,17,4,1,16,0]},{"a":64520,"t":"byte","b":[64,17,68,1,68,17,68,16]},{"a":64528,"t":"byte","b":[81,21,81,84,21,5,81,21]},{"a":64536,"t":"byte","b":[85,85,89,85,85,21,85,85]},{"a":64544,"t":"byte","b":[101,86,85,154,102,85,101,86]},{"a":64552,"t":"byte","b":[149,102,90,102,153,149,169,102]},{"a":64560,"t":"byte","b":[170,154,169,102,154,106,166,170]},{"a":64568,"t":"byte","b":[170,170,170,166,170,106,170,170]},{"a":64576,"t":"byte","b":[85,69,86,85,89,86,105,154]},{"a":64584,"t":"byte","b":[153,105,154,166,90,21,86,89]},{"a":64592,"t":"byte","b":[170,102,90,102,69,85,81,21]},{"a":64600,"t":"byte","b":[85,85,149,85,85,81,85,85]},{"a":64608,"t":"byte","b":[85,81,149,85,101,149,105,166]},{"a":64616,"t":"byte","b":[170,153,165,153,81,85,69,84]},{"a":64624,"t":"byte","b":[102,105,166,154,165,84,149,165]},{"a":64632,"t":"byte","b":[169,170,154,170,170,170,170,170]},{"a":64640,"t":"byte","b":[169,170,154,170,170,169,170,170]},{"a":64648,"t":"byte","b":[85,85,86,101,153,102,169,154]},{"a":64656,"t":"byte","b":[170,170,170,170,170,170,170,170]},{"a":64664,"t":"byte","b":[166,170,106,153,86,85,17,64]},{"a":64672,"t":"byte","b":[170,170,154,105,150,69,20,65]},{"a":64680,"t":"byte","b":[170,169,106,166,153,69,84,17]},{"a":64688,"t":"byte","b":[154,169,106,166,149,85,68,1]},{"a":64696,"t":"byte","b":[106,170,166,90,149,69,81,16]},{"a":64704,"t":"byte","b":[40,44,185,177,165,129,36,20]},{"a":64712,"t":"byte","b":[0,2,10,43,47,43,174,187]},{"a":64720,"t":"byte","b":[0,128,160,216,4,210,17,69]},{"a":64728,"t":"byte","b":[187,188,171,45,40,9,1,0]},{"a":64736,"t":"byte","b":[129,17,5,68,20,80,64,0]},{"a":64744,"t":"byte","b":[20,64,0,0,0,0,0,0]},{"a":64752,"t":"byte","b":[53,112,53,5,13,14,14,1]},{"a":64760,"t":"byte","b":[64,12,0,49,236,240,196,68]},{"a":64768,"t":"gap","n":762,"x":[26440]},{"a":64768,"t":"note","l":"glyphs_level_a0","c":"Play-set glyphs $A0-$FE ($FD00-$FFF7), written at run time: $77C6 copies the level's scenery glyphs here, 760 bytes (95 glyphs) from the word table at $B31C indexed by the level $B128 (blocks $300 apart from $0B42); $6743, in the routine at $646F, copies the small font ($F000-$F1FF) over $FD00-$FEFF instead (this is the base of its STA $FD00,Y). All zero in the entry image.","note":"outside the tracked image","x":[26440]},{"a":65024,"t":"note","l":"glyphs_level_c0","c":"Play-set glyphs $C0-$DF ($FE00-$FEFF), the level block's second page, or the second half of the small font copied by $6743 (base of STA $FE00,Y at $674E).","note":"outside the tracked image","x":[26446]},{"a":65456,"t":"note","l":"wrap_to_zp_85","c":"Row 0 of play-set glyph $F6, not used as data here; the base of INC $FFB0,X at $93A5 with X = $D5, whose address wraps past $FFFF to $0085: the title band code at $9374 increments zero page $85 this way. $85 is also cleared by the NMI ($7C6B) and written at $8BC5; no read of it was found.","note":"outside the tracked image","x":[37797]},{"a":65506,"t":"note","l":"vectors_minus_18","c":"Row 2 of play-set glyph $FC as data; the base of LDA $FFE2,X at $90F8 with X $18-$1D, which reads $FFFA-$FFFF. On every call $90BD (the menu stars, also run by the get-ready loop) compares the hardware vectors with their source at $B62D-$B632 and increments $D021, changing the background colour, if any byte differs: a check against changed NMI, reset or IRQ vectors.","note":"outside the tracked image","x":[37112]},{"a":65529,"t":"note","l":"vectors_minus_1","c":"Byte before the hardware vectors (row 1 of play-set glyph $FF); base of STA $FFF9,X at $EC86 (X 6-1), with which the start-up copies the vectors from $B62D-$B632 to $FFFA-$FFFF. $FFF8-$FFF9 stay 0.","note":"outside the tracked image","x":[60550]},{"a":65530,"l":"vector_nmi","c":"The NMI vector, $7C61 (CIA 2's timer A, once a frame), set by the start-up from $B62D; the RAM here is live because $01 = $35.","t":"addr","b":[0,0],"oa":0,"o":"cpu_port_ddr"},{"a":65532,"l":"vector_reset","c":"The reset vector in RAM, $0000, set from $B62F. The CPU reads the reset vector from the KERNAL ROM, which banks in at reset, so this copy is not used by a reset; it is compared with $B62F by $90F8.","t":"addr","b":[0,0],"oa":0,"o":"cpu_port_ddr"},{"a":65534,"l":"vector_irq","c":"The IRQ vector, $7C73, the raster interrupt that runs the display lists; set from $B631 and checked by $90F8.","t":"addr","b":[0,0],"oa":0,"o":"cpu_port_ddr"}]}