{"schema":1,"platform":"c64","game":"the-fourth-protocol","part":"resident","title":"The Fourth Protocol","build":"Bantam Software's US disk release, 1985 (C64 Preservation Project G64, marked good); five parts: the resident disk operating system and episode loader, the title and episode menu, and the three episodes","symbols_sha256":"d776d3afe8b20861c9ad1d16b36d264d8368582aec8107e421b2fffb31768dfa","snapshot":{"file":"work/entry.vsf","sha256":"cd508bdcffc3a57521fde265e1242af1c7cba02e4a41c3f8fa896da36b9e14d1"},"index":[{"a":0,"n":"zpf_00","k":"variable","len":1,"c":true},{"a":1,"n":"zpa_01","k":"variable","len":1,"c":true},{"a":2049,"n":"basic_line","k":"table","len":13,"c":true},{"a":2062,"n":"episode_loader","k":"routine","len":25,"c":true},{"a":2069,"n":"b_0815","k":"branch","len":1,"c":false},{"a":2092,"n":"b_082C","k":"branch","len":1,"c":false},{"a":2128,"n":"load_episode_three","k":"routine","len":52,"c":true},{"a":2180,"n":"episode_file_names","k":"table","len":8,"c":true},{"a":2188,"n":"name_part1","k":"table","len":8,"c":true},{"a":2196,"n":"name_icons","k":"table","len":8,"c":true},{"a":2204,"n":"name_part2","k":"table","len":31,"c":true},{"a":2235,"n":"name_tpage","k":"table","len":8,"c":true},{"a":2243,"n":"run_title","k":"routine","len":7,"c":true},{"a":2255,"n":"a_08CF","k":"table","len":7,"c":true},{"a":2262,"n":"run_protection","k":"routine","len":7,"c":true},{"a":2274,"n":"install_os","k":"routine","len":43,"c":true},{"a":2317,"n":"nmi_rti","k":"routine","len":1,"c":true},{"a":2318,"n":"load_myos1","k":"routine","len":6,"c":true},{"a":2324,"n":"kernal_load","k":"routine","len":18,"c":true},{"a":2342,"n":"myos1_name","k":"table","len":8,"c":true},{"a":2350,"n":"irqs_off","k":"routine","len":26,"c":true},{"a":60416,"n":"os_call","k":"routine","len":3,"c":true},{"a":60419,"n":"os_print_char","k":"routine","len":3,"c":true},{"a":60422,"n":"os_print_string","k":"routine","len":3,"c":true},{"a":60425,"n":"os_print_char_in","k":"routine","len":3,"c":true},{"a":60428,"n":"os_print_string_in","k":"routine","len":3,"c":true},{"a":60431,"n":"os_dispatch","k":"routine","len":19,"c":true},{"a":60450,"n":"os_function_table","k":"variable","len":1,"c":true},{"a":60451,"n":"os_function_table_hi","k":"table","len":173,"c":true},{"a":60624,"n":"fill_window_background","k":"routine","len":25,"c":true},{"a":60649,"n":"fill_bitmap_rect","k":"routine","len":57,"c":true},{"a":60664,"n":"b_ECF8","k":"branch","len":1,"c":false},{"a":60673,"n":"b_ED01","k":"branch","len":1,"c":false},{"a":60677,"n":"b_ED05","k":"branch","len":1,"c":false},{"a":60684,"n":"KERNAL_LISTENj","k":"branch","len":1,"c":false},{"a":60706,"n":"fill_colour_rect","k":"routine","len":38,"c":true},{"a":60719,"n":"b_ED2F","k":"branch","len":1,"c":false},{"a":60724,"n":"b_ED34","k":"branch","len":1,"c":false},{"a":60740,"n":"b_ED44","k":"branch","len":1,"c":false},{"a":60744,"n":"screen_cell_address","k":"routine","len":29,"c":true},{"a":60773,"n":"bitmap_cell_address","k":"routine","len":22,"c":true},{"a":60795,"n":"bitmap_pixel_address","k":"routine","len":53,"c":true},{"a":60826,"n":"b_ED9A","k":"branch","len":1,"c":false},{"a":60848,"n":"row_times_320","k":"routine","len":17,"c":true},{"a":60865,"n":"row_times_40","k":"routine","len":17,"c":true},{"a":60882,"n":"os_inline_args","k":"routine","len":48,"c":true},{"a":60896,"n":"b_EDE0","k":"branch","len":1,"c":false},{"a":60906,"n":"b_EDEA","k":"branch","len":1,"c":false},{"a":60912,"n":"b_EDF0","k":"branch","len":1,"c":false},{"a":60930,"n":"copy_block","k":"routine","len":23,"c":true},{"a":60934,"n":"b_EE06","k":"branch","len":1,"c":false},{"a":60945,"n":"b_EE11","k":"branch","len":1,"c":false},{"a":60953,"n":"next_cell_row","k":"routine","len":14,"c":true},{"a":60967,"n":"copy_bitmap_pointer","k":"routine","len":26,"c":true},{"a":60993,"n":"bitmap_base","k":"routine","len":34,"c":true},{"a":61006,"n":"b_EE4E","k":"branch","len":1,"c":false},{"a":61027,"n":"screen_base","k":"routine","len":25,"c":true},{"a":61040,"n":"b_EE70","k":"branch","len":1,"c":false},{"a":61052,"n":"draw_to_bitmap","k":"routine","len":5,"c":true},{"a":61057,"n":"draw_to_second_bitmap","k":"routine","len":21,"c":true},{"a":61078,"n":"s_EE96","k":"routine","len":12,"c":true},{"a":61090,"n":"clear_second_screen","k":"routine","len":6,"c":true},{"a":61096,"n":"clear_screen","k":"routine","len":18,"c":true},{"a":61099,"n":"j_EEAB","k":"branch","len":1,"c":false},{"a":61125,"n":"video_setup","k":"routine","len":37,"c":true},{"a":61162,"n":"left_masks","k":"table","len":9,"c":true},{"a":61171,"n":"right_masks","k":"table","len":9,"c":true},{"a":61180,"n":"bit_values","k":"table","len":8,"c":true},{"a":61188,"n":"pixel_bits","k":"table","len":16,"c":true},{"a":61204,"n":"times_8","k":"table","len":33,"c":true},{"a":61237,"n":"times_16","k":"table","len":16,"c":true},{"a":61253,"n":"row_offsets_40","k":"variable","len":1,"c":true},{"a":61254,"n":"row_offsets_40_hi","k":"table","len":49,"c":true},{"a":61303,"n":"row_offsets_320","k":"variable","len":1,"c":true},{"a":61304,"n":"row_offsets_320_hi","k":"table","len":49,"c":true},{"a":61353,"n":"os_init","k":"routine","len":28,"c":true},{"a":61381,"n":"interrupts_off","k":"routine","len":25,"c":true},{"a":61406,"n":"io_in","k":"routine","len":5,"c":true},{"a":61411,"n":"io_out","k":"routine","len":5,"c":true},{"a":61416,"n":"screen_on","k":"routine","len":11,"c":true},{"a":61427,"n":"screen_off","k":"routine","len":9,"c":true},{"a":61436,"n":"set_border","k":"routine","len":4,"c":true},{"a":61440,"n":"os_version","k":"routine","len":17,"c":true},{"a":61447,"n":"b_F007","k":"branch","len":1,"c":false},{"a":61457,"n":"wait_x","k":"routine","len":12,"c":true},{"a":61459,"n":"b_F013","k":"branch","len":1,"c":false},{"a":61469,"n":"wait_raster_past","k":"routine","len":17,"c":true},{"a":61480,"n":"b_F028","k":"branch","len":1,"c":false},{"a":61485,"n":"r_F02D","k":"branch","len":1,"c":false},{"a":61486,"n":"wait_bottom_border","k":"routine","len":5,"c":true},{"a":61491,"n":"os_nothing","k":"routine","len":1,"c":true},{"a":61492,"n":"save_file","k":"routine","len":17,"c":true},{"a":61509,"n":"load_file","k":"routine","len":17,"c":true},{"a":61526,"n":"disk_save","k":"routine","len":22,"c":true},{"a":61548,"n":"disk_load","k":"routine","len":38,"c":true},{"a":61586,"n":"b_F092","k":"routine","len":8,"c":true},{"a":61594,"n":"kernal_enter","k":"routine","len":42,"c":true},{"a":61606,"n":"b_F0A6","k":"branch","len":1,"c":false},{"a":61636,"n":"kernal_leave","k":"routine","len":24,"c":true},{"a":61638,"n":"b_F0C6","k":"branch","len":1,"c":false},{"a":61660,"n":"swap_page3","k":"routine","len":20,"c":true},{"a":61662,"n":"b_F0DE","k":"branch","len":1,"c":false},{"a":61680,"n":"install_disk_code","k":"routine","len":18,"c":true},{"a":61682,"n":"b_F0F2","k":"branch","len":1,"c":false},{"a":61698,"n":"input_line","k":"routine","len":80,"c":true},{"a":61719,"n":"b_F117","k":"branch","len":1,"c":false},{"a":61730,"n":"b_F122","k":"branch","len":1,"c":false},{"a":61772,"n":"b_F14C","k":"branch","len":1,"c":false},{"a":61778,"n":"input_filter","k":"routine","len":87,"c":true},{"a":61801,"n":"b_F169","k":"branch","len":1,"c":false},{"a":61841,"n":"b_F191","k":"branch","len":1,"c":false},{"a":61851,"n":"b_F19B","k":"branch","len":1,"c":false},{"a":61856,"n":"b_F1A0","k":"branch","len":1,"c":false},{"a":61858,"n":"b_F1A2","k":"branch","len":1,"c":false},{"a":61863,"n":"b_F1A7","k":"branch","len":1,"c":false},{"a":61865,"n":"keys_before","k":"variable","len":1,"c":true},{"a":61866,"n":"a_F1AA","k":"table","len":5,"c":true},{"a":61871,"n":"a_F1AF","k":"variable","len":2,"c":true},{"a":61873,"n":"keys_new","k":"table","len":8,"c":true},{"a":61881,"n":"read_key","k":"routine","len":98,"c":true},{"a":61883,"n":"b_F1BB","k":"branch","len":1,"c":false},{"a":61889,"n":"b_F1C1","k":"branch","len":1,"c":false},{"a":61926,"n":"b_F1E6","k":"branch","len":1,"c":false},{"a":61931,"n":"b_F1EB","k":"branch","len":1,"c":false},{"a":61934,"n":"j_F1EE","k":"branch","len":1,"c":false},{"a":61944,"n":"b_F1F8","k":"branch","len":1,"c":false},{"a":61974,"n":"b_F216","k":"branch","len":1,"c":false},{"a":61979,"n":"key_code","k":"routine","len":22,"c":true},{"a":61997,"n":"b_F22D","k":"branch","len":1,"c":false},{"a":62001,"n":"key_held","k":"routine","len":22,"c":true},{"a":62021,"n":"b_F245","k":"branch","len":1,"c":false},{"a":62023,"n":"matrix_bit","k":"routine","len":15,"c":true},{"a":62027,"n":"b_F24B","k":"branch","len":1,"c":false},{"a":62038,"n":"matrix_select","k":"table","len":8,"c":true},{"a":62046,"n":"key_codes","k":"table","len":64,"c":true},{"a":62110,"n":"cursor_tick","k":"routine","len":18,"c":true},{"a":62127,"n":"r_F2AF","k":"branch","len":1,"c":false},{"a":62128,"n":"draw_cursor","k":"routine","len":34,"c":true},{"a":62141,"n":"b_F2BD","k":"branch","len":1,"c":false},{"a":62144,"n":"j_F2C0","k":"branch","len":1,"c":false},{"a":62162,"n":"hide_cursor","k":"routine","len":10,"c":true},{"a":62172,"n":"print_block","k":"routine","len":6,"c":true},{"a":62178,"n":"print_space","k":"routine","len":6,"c":true},{"a":62184,"n":"reset_cursor_flash","k":"routine","len":9,"c":true},{"a":62193,"n":"sprites_reset","k":"routine","len":43,"c":true},{"a":62200,"n":"b_F2F8","k":"branch","len":1,"c":false},{"a":62211,"n":"b_F303","k":"branch","len":1,"c":false},{"a":62236,"n":"sprite_on","k":"routine","len":10,"c":true},{"a":62242,"n":"j_F322","k":"branch","len":1,"c":false},{"a":62246,"n":"sprite_off","k":"routine","len":11,"c":true},{"a":62257,"n":"sprite_wide","k":"routine","len":10,"c":true},{"a":62263,"n":"j_F337","k":"branch","len":1,"c":false},{"a":62267,"n":"sprite_narrow","k":"routine","len":11,"c":true},{"a":62278,"n":"sprite_tall","k":"routine","len":10,"c":true},{"a":62284,"n":"j_F34C","k":"branch","len":1,"c":false},{"a":62288,"n":"sprite_short","k":"routine","len":11,"c":true},{"a":62299,"n":"sprite_colour","k":"routine","len":5,"c":true},{"a":62304,"n":"sprite_shape","k":"routine","len":46,"c":true},{"a":62350,"n":"sprite_blocks","k":"variable","len":1,"c":true},{"a":62351,"n":"sprite_blocks_hi","k":"table","len":15,"c":true},{"a":62366,"n":"a_F39E","k":"routine","len":3,"c":true},{"a":62369,"n":"pointer_arrow","k":"routine","len":27,"c":true},{"a":62396,"n":"pointer_shape","k":"routine","len":61,"c":true},{"a":62401,"n":"j_F3C1","k":"branch","len":1,"c":false},{"a":62457,"n":"pointer_show","k":"routine","len":9,"c":true},{"a":62466,"n":"pointer_hide","k":"routine","len":24,"c":true},{"a":62490,"n":"pointer_move","k":"routine","len":87,"c":true},{"a":62507,"n":"j_F42B","k":"branch","len":1,"c":false},{"a":62539,"n":"b_F44B","k":"branch","len":1,"c":false},{"a":62577,"n":"x_high_bits","k":"routine","len":18,"c":true},{"a":62595,"n":"a_F483","k":"routine","len":3,"c":true},{"a":62598,"n":"init_pointer","k":"routine","len":10,"c":true},{"a":62608,"n":"arrow_shapes","k":"table","len":146,"c":true},{"a":62754,"n":"add_icon_here","k":"routine","len":12,"c":true},{"a":62766,"n":"add_icon","k":"routine","len":20,"c":true},{"a":62771,"n":"j_F533","k":"branch","len":1,"c":false},{"a":62777,"n":"b_F539","k":"branch","len":1,"c":false},{"a":62786,"n":"forget_icon","k":"routine","len":9,"c":true},{"a":62795,"n":"forget_window_icons","k":"routine","len":21,"c":true},{"a":62799,"n":"b_F54F","k":"branch","len":1,"c":false},{"a":62812,"n":"b_F55C","k":"branch","len":1,"c":false},{"a":62816,"n":"free_icon_entry","k":"routine","len":6,"c":true},{"a":62822,"n":"erase_icon","k":"routine","len":64,"c":true},{"a":62854,"n":"j_F586","k":"branch","len":1,"c":false},{"a":62871,"n":"b_F597","k":"branch","len":1,"c":false},{"a":62886,"n":"find_free_icon","k":"routine","len":24,"c":true},{"a":62891,"n":"b_F5AB","k":"branch","len":1,"c":false},{"a":62908,"n":"b_F5BC","k":"branch","len":1,"c":false},{"a":62910,"n":"store_icon","k":"routine","len":25,"c":true},{"a":62916,"n":"b_F5C4","k":"branch","len":1,"c":false},{"a":62935,"n":"fetch_icon","k":"routine","len":18,"c":true},{"a":62941,"n":"KERNAL_SAVEj","k":"branch","len":1,"c":false},{"a":62953,"n":"draw_icon","k":"routine","len":6,"c":true},{"a":62959,"n":"icon_to_screen","k":"routine","len":26,"c":true},{"a":62984,"n":"r_F608","k":"branch","len":1,"c":false},{"a":62985,"n":"draw_icon_bitmap","k":"routine","len":36,"c":true},{"a":63010,"n":"b_F622","k":"branch","len":1,"c":false},{"a":63014,"n":"b_F626","k":"branch","len":1,"c":false},{"a":63017,"n":"b_F629","k":"branch","len":1,"c":false},{"a":63021,"n":"icon_pic_operand","k":"routine","len":1,"c":true},{"a":63022,"n":"a_F62E","k":"routine","len":51,"c":true},{"a":63042,"n":"b_F642","k":"branch","len":1,"c":false},{"a":63048,"n":"b_F648","k":"branch","len":1,"c":false},{"a":63073,"n":"window_flag","k":"routine","len":4,"c":true},{"a":63077,"n":"set_window_flag","k":"routine","len":8,"c":true},{"a":63085,"n":"clear_window_flag","k":"routine","len":8,"c":true},{"a":63093,"n":"erase_window_icons_here","k":"routine","len":5,"c":true},{"a":63098,"n":"erase_window_icons","k":"routine","len":33,"c":true},{"a":63107,"n":"b_F683","k":"branch","len":1,"c":false},{"a":63123,"n":"b_F693","k":"branch","len":1,"c":false},{"a":63131,"n":"reset_icons","k":"routine","len":21,"c":true},{"a":63135,"n":"b_F69F","k":"branch","len":1,"c":false},{"a":63145,"n":"b_F6A9","k":"branch","len":1,"c":false},{"a":63152,"n":"a_F6B0","k":"routine","len":3,"c":true},{"a":63155,"n":"restore_video","k":"routine","len":27,"c":true},{"a":63182,"n":"a_F6CE","k":"routine","len":3,"c":true},{"a":63185,"n":"hline_solid","k":"routine","len":72,"c":true},{"a":63257,"n":"hline","k":"routine","len":22,"c":true},{"a":63266,"n":"j_F722","k":"branch","len":1,"c":false},{"a":63279,"n":"hline_mode_set","k":"routine","len":21,"c":true},{"a":63300,"n":"s_F744","k":"routine","len":18,"c":true},{"a":63318,"n":"hline_mode_operand","k":"routine","len":13,"c":true},{"a":63331,"n":"odd_row_pattern","k":"routine","len":12,"c":true},{"a":63342,"n":"r_F76E","k":"branch","len":1,"c":false},{"a":63343,"n":"hline_length","k":"routine","len":29,"c":true},{"a":63371,"n":"r_F78B","k":"branch","len":1,"c":false},{"a":63372,"n":"hline_left_end","k":"routine","len":25,"c":true},{"a":63379,"n":"b_F793","k":"branch","len":1,"c":false},{"a":63397,"n":"a_F7A5","k":"routine","len":1,"c":true},{"a":63398,"n":"a_F7A6","k":"routine","len":6,"c":true},{"a":63404,"n":"hline_one_byte","k":"routine","len":28,"c":true},{"a":63432,"n":"a_F7C8","k":"routine","len":1,"c":true},{"a":63433,"n":"a_F7C9","k":"routine","len":6,"c":true},{"a":63439,"n":"hline_middle","k":"routine","len":9,"c":true},{"a":63445,"n":"b_F7D5","k":"branch","len":1,"c":false},{"a":63448,"n":"a_F7D8","k":"routine","len":1,"c":true},{"a":63449,"n":"a_F7D9","k":"routine","len":7,"c":true},{"a":63455,"n":"r_F7DF","k":"branch","len":1,"c":false},{"a":63456,"n":"hline_right_end","k":"routine","len":23,"c":true},{"a":63479,"n":"a_F7F7","k":"routine","len":1,"c":true},{"a":63480,"n":"a_F7F8","k":"routine","len":8,"c":true},{"a":63487,"n":"r_F7FF","k":"branch","len":1,"c":false},{"a":63488,"n":"vline","k":"routine","len":41,"c":true},{"a":63529,"n":"vline_draw","k":"routine","len":7,"c":true},{"a":63536,"n":"vline_length","k":"routine","len":8,"c":true},{"a":63544,"n":"vline_pixels","k":"routine","len":40,"c":true},{"a":63578,"n":"b_F85A","k":"branch","len":1,"c":false},{"a":63584,"n":"a_F860","k":"routine","len":1,"c":true},{"a":63585,"n":"vline_mode_operand","k":"routine","len":50,"c":true},{"a":63631,"n":"b_F88F","k":"branch","len":1,"c":false},{"a":63635,"n":"j_F893","k":"routine","len":3,"c":true},{"a":63638,"n":"draw_frame","k":"routine","len":16,"c":true},{"a":63654,"n":"frame_white","k":"routine","len":11,"c":true},{"a":63665,"n":"frame_black","k":"routine","len":9,"c":true},{"a":63674,"n":"frame_rect","k":"routine","len":75,"c":true},{"a":63708,"n":"b_F8DC","k":"branch","len":1,"c":false},{"a":63749,"n":"frame_corner","k":"routine","len":25,"c":true},{"a":63774,"n":"frame_size","k":"routine","len":19,"c":true},{"a":63793,"n":"frame_shrink","k":"routine","len":22,"c":true},{"a":63804,"n":"b_F93C","k":"branch","len":1,"c":false},{"a":63815,"n":"open_window_saved","k":"routine","len":56,"c":true},{"a":63826,"n":"b_F952","k":"branch","len":1,"c":false},{"a":63871,"n":"open_window","k":"routine","len":33,"c":true},{"a":63882,"n":"b_F98A","k":"branch","len":1,"c":false},{"a":63904,"n":"close_window_here","k":"routine","len":2,"c":true},{"a":63906,"n":"close_window","k":"routine","len":75,"c":true},{"a":63949,"n":"b_F9CD","k":"branch","len":1,"c":false},{"a":63971,"n":"j_F9E3","k":"branch","len":1,"c":false},{"a":63981,"n":"current_window","k":"routine","len":3,"c":true},{"a":63984,"n":"select_window","k":"routine","len":67,"c":true},{"a":63994,"n":"b_F9FA","k":"branch","len":1,"c":false},{"a":64051,"n":"store_window_cursor","k":"routine","len":31,"c":true},{"a":64068,"n":"b_FA44","k":"branch","len":1,"c":false},{"a":64079,"n":"b_FA4F","k":"branch","len":1,"c":false},{"a":64082,"n":"reset_windows","k":"routine","len":30,"c":true},{"a":64086,"n":"b_FA56","k":"branch","len":1,"c":false},{"a":64094,"n":"b_FA5E","k":"branch","len":1,"c":false},{"a":64112,"n":"next_save_slot","k":"routine","len":23,"c":true},{"a":64122,"n":"b_FA7A","k":"branch","len":1,"c":false},{"a":64135,"n":"store_saved_window","k":"routine","len":14,"c":true},{"a":64149,"n":"fetch_window_entry","k":"routine","len":24,"c":true},{"a":64172,"n":"r_FAAC","k":"branch","len":1,"c":false},{"a":64173,"n":"fetch_window_rect","k":"routine","len":20,"c":true},{"a":64180,"n":"b_FAB4","k":"branch","len":1,"c":false},{"a":64193,"n":"store_window_entry","k":"routine","len":28,"c":true},{"a":64199,"n":"b_FAC7","k":"branch","len":1,"c":false},{"a":64221,"n":"find_free_window","k":"routine","len":22,"c":true},{"a":64225,"n":"b_FAE1","k":"branch","len":1,"c":false},{"a":64241,"n":"b_FAF1","k":"branch","len":1,"c":false},{"a":64243,"n":"add_frame_cells","k":"routine","len":13,"c":true},{"a":64256,"n":"save_bitmap_under","k":"routine","len":70,"c":true},{"a":64282,"n":"b_FB1A","k":"branch","len":1,"c":false},{"a":64291,"n":"b_FB23","k":"branch","len":1,"c":false},{"a":64295,"n":"b_FB27","k":"branch","len":1,"c":false},{"a":64305,"n":"b_FB31","k":"branch","len":1,"c":false},{"a":64310,"n":"b_FB36","k":"branch","len":1,"c":false},{"a":64326,"n":"save_colours_under","k":"routine","len":51,"c":true},{"a":64343,"n":"b_FB57","k":"branch","len":1,"c":false},{"a":64348,"n":"b_FB5C","k":"branch","len":1,"c":false},{"a":64358,"n":"b_FB66","k":"branch","len":1,"c":false},{"a":64372,"n":"b_FB74","k":"branch","len":1,"c":false},{"a":64377,"n":"restore_bitmap_under","k":"routine","len":69,"c":true},{"a":64402,"n":"b_FB92","k":"branch","len":1,"c":false},{"a":64411,"n":"b_FB9B","k":"branch","len":1,"c":false},{"a":64415,"n":"b_FB9F","k":"branch","len":1,"c":false},{"a":64425,"n":"b_FBA9","k":"branch","len":1,"c":false},{"a":64430,"n":"b_FBAE","k":"branch","len":1,"c":false},{"a":64446,"n":"restore_colours_under","k":"routine","len":51,"c":true},{"a":64463,"n":"b_FBCF","k":"branch","len":1,"c":false},{"a":64468,"n":"b_FBD4","k":"branch","len":1,"c":false},{"a":64478,"n":"b_FBDE","k":"branch","len":1,"c":false},{"a":64492,"n":"b_FBEC","k":"branch","len":1,"c":false},{"a":64497,"n":"a_FBF1","k":"routine","len":3,"c":true},{"a":64500,"n":"print_char","k":"routine","len":10,"c":true},{"a":64507,"n":"b_FBFB","k":"branch","len":1,"c":false},{"a":64510,"n":"draw_glyph","k":"routine","len":2,"c":true},{"a":64512,"n":"os_dead_stub","k":"routine","len":7,"c":true},{"a":64519,"n":"print_char_in_window","k":"routine","len":23,"c":true},{"a":64542,"n":"print_inline_string","k":"routine","len":37,"c":true},{"a":64550,"n":"j_FC26","k":"branch","len":1,"c":false},{"a":64565,"n":"b_FC35","k":"branch","len":1,"c":false},{"a":64576,"n":"b_FC40","k":"branch","len":1,"c":false},{"a":64579,"n":"print_inline_string_in_window","k":"routine","len":52,"c":true},{"a":64597,"n":"j_FC55","k":"branch","len":1,"c":false},{"a":64612,"n":"b_FC64","k":"branch","len":1,"c":false},{"a":64623,"n":"b_FC6F","k":"branch","len":1,"c":false},{"a":64631,"n":"wrap_check","k":"routine","len":46,"c":true},{"a":64659,"n":"b_FC93","k":"branch","len":1,"c":false},{"a":64664,"n":"b_FC98","k":"branch","len":1,"c":false},{"a":64668,"n":"b_FC9C","k":"branch","len":1,"c":false},{"a":64677,"n":"control_code","k":"routine","len":19,"c":true},{"a":64696,"n":"control_codes","k":"variable","len":1,"c":true},{"a":64697,"n":"control_codes_hi","k":"table","len":65,"c":true},{"a":64762,"n":"a_FCFA","k":"routine","len":1,"c":true},{"a":64763,"n":"a_FCFB","k":"routine","len":1,"c":true},{"a":64764,"n":"a_FCFC","k":"routine","len":1,"c":true},{"a":64765,"n":"a_FCFD","k":"routine","len":1,"c":true},{"a":64766,"n":"a_FCFE","k":"routine","len":1,"c":true},{"a":64767,"n":"a_FCFF","k":"routine","len":1,"c":true},{"a":64768,"n":"a_FD00","k":"routine","len":1,"c":true},{"a":64769,"n":"r_FD01","k":"routine","len":1,"c":true},{"a":64770,"n":"a_FD02","k":"routine","len":1,"c":true},{"a":64771,"n":"a_FD03","k":"routine","len":3,"c":true},{"a":64774,"n":"a_FD06","k":"routine","len":8,"c":true},{"a":64782,"n":"a_FD0E","k":"routine","len":1,"c":true},{"a":64783,"n":"a_FD0F","k":"routine","len":37,"c":true},{"a":64785,"n":"b_FD11","k":"branch","len":1,"c":false},{"a":64820,"n":"a_FD34","k":"routine","len":8,"c":true},{"a":64828,"n":"a_FD3C","k":"routine","len":1,"c":true},{"a":64829,"n":"a_FD3D","k":"routine","len":1,"c":true},{"a":64830,"n":"a_FD3E","k":"routine","len":1,"c":true},{"a":64831,"n":"a_FD3F","k":"routine","len":1,"c":true},{"a":64832,"n":"a_FD40","k":"routine","len":1,"c":true},{"a":64833,"n":"a_FD41","k":"routine","len":1,"c":true},{"a":64834,"n":"a_FD42","k":"routine","len":1,"c":true},{"a":64835,"n":"a_FD43","k":"routine","len":1,"c":true},{"a":64836,"n":"a_FD44","k":"routine","len":1,"c":true},{"a":64837,"n":"a_FD45","k":"routine","len":1,"c":true},{"a":64838,"n":"a_FD46","k":"routine","len":1,"c":true},{"a":64839,"n":"a_FD47","k":"routine","len":1,"c":true},{"a":64840,"n":"a_FD48","k":"routine","len":1,"c":true},{"a":64841,"n":"a_FD49","k":"routine","len":1,"c":true},{"a":64842,"n":"a_FD4A","k":"routine","len":1,"c":true},{"a":64843,"n":"a_FD4B","k":"routine","len":1,"c":true},{"a":64844,"n":"a_FD4C","k":"routine","len":1,"c":true},{"a":64845,"n":"a_FD4D","k":"routine","len":1,"c":true},{"a":64846,"n":"a_FD4E","k":"routine","len":1,"c":true},{"a":64847,"n":"copy_glyph","k":"routine","len":17,"c":true},{"a":64849,"n":"b_FD51","k":"branch","len":1,"c":false},{"a":64864,"n":"cursor_address","k":"routine","len":44,"c":true},{"a":64908,"n":"cursor_advance","k":"routine","len":6,"c":true},{"a":64914,"n":"glyph_address","k":"routine","len":32,"c":true},{"a":64946,"n":"font","k":"table","len":463,"c":true},{"a":65409,"n":"KERNAL_CINT","k":"table","len":3,"c":true},{"a":65412,"n":"KERNAL_IOINIT","k":"table","len":3,"c":true},{"a":65415,"n":"KERNAL_RAMTAS","k":"table","len":3,"c":true},{"a":65418,"n":"KERNAL_RESTOR","k":"table","len":48,"c":true},{"a":65466,"n":"KERNAL_SETLFS","k":"table","len":3,"c":true},{"a":65469,"n":"KERNAL_SETNAM","k":"table","len":20,"c":true}],"records":[{"a":0,"l":"zpf_00","c":"The processor port's direction register, which the OS never writes. kernal_enter and kernal_leave name it only as the base of LDA $00,X and STA $00,X, with X from 1, to copy zero page from $01 up.","t":"byte","b":[0],"x":[60464,60494,60496,60504,60566,60568,60570,60572,60580,60582,60584,60586,60588,61606,61641]},{"a":1,"l":"zpa_01","c":"The processor port: $15 (written $05) banks the KERNAL and BASIC out and leaves the chips in. The disk code at $0700 writes $36 to bring the KERNAL back for a save or load, and kernal_leave's copy of zero page puts $15 back; io_out writes $14 for RAM everywhere.","t":"byte","b":[0],"x":[2131,2299,61408,61413,61528,61550]},{"a":2,"t":"gap","n":2047,"x":[60724,60730,60734,60748,60752,60760,60764,60803,60805,60818,60820,60835,60839,60954,60958,60967,60978,60999,61008,61033,61078,63023,63042,63053,63057,63390,63401,63425,63436,63450,63472,63483,63544,63548,63578,63590,63606,63610,64028,64348,64362,64366,64470,64482,64486]},{"a":2,"t":"note","l":"bitmap_ptr","c":"The OS's drawing pointer, low byte then high: the bitmap or screen-memory byte being drawn.","note":"outside the tracked image","x":[60724,60730,60734,60748,60752,60760,60764,60803,60805,60818,60820,60835,60839,60954,60958,60967,60978,60999,61008,61033,61078,63023,63042,63053,63057,63390,63401,63425,63436,63450,63472,63483,63544,63548,63578,63590,63606,63610,64028,64348,64362,64366,64470,64482,64486]},{"a":4,"t":"note","l":"bitmap_ptr2","c":"A second drawing pointer, for copies and for the cell row below.","note":"outside the tracked image","x":[60677,60969,60986,61080,63516,63520,63619,63623,64295,64417]},{"a":6,"t":"note","l":"draw_flag","c":"$FF while drawing goes to the shown bitmap at $2000 (draw_to_bitmap); zero would mean the second bitmap at $C000, which was never finished.","note":"outside the tracked image","x":[60993,61027,61054,64256,64274]},{"a":7,"t":"note","l":"line_pattern","c":"The pattern byte the line routines draw; on odd rows it is EORed with line_pattern_eor.","note":"outside the tracked image","x":[63187,63198,63207,63218,63227,63238,63336,63340,63397,63432,63448,63479,63584,63592,63596,63656,63667]},{"a":8,"t":"note","l":"line_pattern_eor","c":"What a line's pattern is EORed with on odd pixel rows.","note":"outside the tracked image","x":[63191,63200,63211,63220,63231,63240,63338,63560,63562,63594,63660,63669]},{"a":31,"t":"note","l":"os_args","c":"The OS's argument block, $1F-$26: os_inline_args copies a function's inline arguments here, and the window and icon routines keep a rectangle here (x, y, width, height, two pattern bytes or a picture address, a colour, a window).","note":"outside the tracked image","x":[60649,60706,60914,61063,61578,61703,62316,62371,62401,62477,62495,62508,62512,62529,62534,62563,62916,62944,62972,62974,62985,63753,64183,64199,64243,64262,64326,64377,64446,64787,64801,64803]},{"a":62,"t":"note","l":"bg_pattern_a","c":"The screen background's first pattern byte, set by clear_screen and used wherever a window or an icon on the bare screen is rubbed out.","note":"outside the tracked image","x":[60629,61101,62871,63952]},{"a":63,"t":"note","l":"bg_pattern_b","c":"The screen background's second pattern byte, EORed into the first on alternate rows.","note":"outside the tracked image","x":[60633,61105,62875,63956]},{"a":64,"t":"note","l":"bg_colour","c":"The screen background's colour byte.","note":"outside the tracked image","x":[60637,61109,62879,63960]},{"a":65,"t":"note","l":"save_stack","c":"Sixteen times the number of saved windows (8-14) open, 0 to $70.","note":"outside the tracked image","x":[63938,63943,64101,64113,64123,64125]},{"a":66,"t":"note","l":"save_ptr","c":"Where the next saved window's background goes, low byte then high; reset_windows starts it at $C810.","note":"outside the tracked image","x":[64105,64138,64164,64297,64299,64350,64352,64385]},{"a":68,"t":"note","l":"window","c":"The current window's entry as select_window copies it, $44-$4D: x, y, width and height of its inside, its two pattern bytes, its colour, a spare byte, and the text cursor's x ($4C) and y ($4D) in pixels within it.","note":"outside the tracked image","x":[63997,64005,64017,64068,64094,64785]},{"a":76,"t":"note","l":"text_x","c":"The text cursor's x in pixels within the current window's inside, a multiple of 8.","note":"outside the tracked image","x":[61832,61837,62128,63865,64634,64771,64815,64822,64864,64870,64909,64911]},{"a":77,"t":"note","l":"text_y","c":"The text cursor's y in pixels within the current window's inside, a multiple of 8.","note":"outside the tracked image","x":[63867,64774,64779,64817,64885]},{"a":78,"t":"note","l":"current_win","c":"The current window's number: 0-7 plain windows, 8-14 windows that saved what they covered, $FF none.","note":"outside the tracked image","x":[62759,63093,63904,63981,63987,64044,64053,64519,64525,64579,64589]},{"a":79,"t":"note","l":"win_bitmap","c":"The bitmap address of the current window's inside's top-left cell, low byte then high.","note":"outside the tracked image","x":[64030,64875]},{"a":81,"t":"note","l":"win_last_x","c":"The last x in pixels where a character fits on a line of the current window.","note":"outside the tracked image","x":[64042,64632]},{"a":82,"t":"note","l":"last_char","c":"The last character print_char drew, for wrap_check's hyphen.","note":"outside the tracked image","x":[64644,64665]},{"a":83,"t":"note","l":"cursor_count","c":"input_line's flash counter: the cursor flips every 19 calls.","note":"outside the tracked image","x":[62110,62116,62186]},{"a":84,"t":"note","l":"cursor_on","c":"Whether input_line's block cursor is shown ($FF) or not.","note":"outside the tracked image","x":[62118,62122,62131,62155,62165,62190]},{"a":85,"t":"note","l":"pointer_hot_x","c":"The pointer's hot spot, x pixels in from the sprite's left edge.","note":"outside the tracked image","x":[62440,62532]},{"a":86,"t":"note","l":"pointer_hot_y","c":"The pointer's hot spot, y pixels down from the sprite's top.","note":"outside the tracked image","x":[62444,62548]},{"a":87,"t":"note","l":"pointer_x","c":"Where pointer_move last put the pointer: x low and high bytes ($57, $58) and y ($59), in screen pixels.","note":"outside the tracked image","x":[62475,62497]},{"a":512,"t":"note","l":"window_table","c":"The sixteen windows, 16 bytes each: x, y, width, height of the whole window, frame included (cells), its two pattern bytes and colour, a spare byte, the text cursor's x and y, and for windows 8-14 the address its background was saved at. A byte 0 of $FF marks the slot free.","note":"outside the tracked image","x":[62968,63977,63994,64070,64086,64140,64160,64166,64180,64201,64212,64216,64225]},{"a":768,"t":"note","l":"icon_table","c":"The 32 icons, 8 bytes each: x, y, width, height (cells, within the window's inside), the picture's address, the colour byte and the window. A window byte of $FF marks the slot free. While the KERNAL works on the disk, swap_page3 puts the KERNAL's own page 3 here.","note":"outside the tracked image","x":[61662,61669,61688,62891,62918,62941,63135]},{"a":1024,"t":"note","l":"window_flags","c":"Eighteen flags, $FF for each window that has been selected since it opened (set_window_flag); close_window clears them.","note":"outside the tracked image","x":[63073,63080,63088,63145]},{"a":2049,"l":"basic_line","c":"The BASIC line the episode loader's file begins with, 10 SYS 2062: a link to $080C, line number 10, the SYS token and \"2062\" ($080E). The boot jumps to $080E itself and never runs it.","t":"byte","b":[12,8,10,0,158,32,50,48]},{"a":2057,"t":"byte","b":[54,50,0,0,0]},{"a":2062,"l":"episode_loader","c":"The hub between the menu and the episodes. On the first run (the boot's second stage leaves $99 = $2C) it installs the OS (install_os). Then it runs the copy protection (run_protection) and the title (run_title), which returns the episode chosen in A: 0 loads XXXPART1 and jumps to $4005; 1 loads XXXMYOS2 and runs it at $8000 (the OS again, with its save area at $D000), loads XXXICONS and XXXPART2 and jumps to $4077; 2 goes to load_episode_three.","t":"code","b":[165,153],"m":"lda","oa":153,"o":"zpa_99"},{"a":2064,"t":"code","b":[201,44],"m":"cmp","o":"#$2C"},{"a":2066,"c":"Skips install_os when the loader runs again. The branch's offset is 1, so it lands inside the JSR, on its operand's bytes $E2 $08, which the 6510 takes as a two-byte NOP (an undocumented opcode), and so arrives at $0817 as if it had skipped the call. The first run never takes the branch, and no episode's code holds a jump back to $080E, so the game never runs it.","t":"code","b":[208,1],"m":"bne","oa":2069,"o":"b_0815"},{"a":2068,"t":"code","b":[32,226,8],"m":"jsr","oa":2274,"o":"install_os"},{"a":2071,"t":"code","b":[32,214,8],"m":"jsr","oa":2262,"o":"run_protection"},{"a":2074,"t":"code","b":[32,195,8],"m":"jsr","oa":2243,"o":"run_title"},{"a":2077,"t":"code","b":[170],"m":"tax"},{"a":2078,"t":"code","b":[208,12],"m":"bne","oa":2092,"o":"b_082C"},{"a":2080,"c":"Episode 0: loads XXXPART1 (OS function $55, load_file, eight characters) and jumps into it at $4005.","t":"code","b":[162,8],"m":"ldx","o":"#$08"},{"a":2082,"t":"code","b":[169,85],"m":"lda","o":"#$55"},{"a":2084,"t":"code","b":[32,0,236],"m":"jsr","oa":60416,"o":"os_call"},{"a":2087,"c":"load_file's argument: the address of the name XXXPART1, in episode_file_names.","t":"addr","b":[140,8],"oa":2188,"o":"name_part1"},{"a":2089,"c":"JMP $4005, episode one's entry.","t":"code","b":[76,5,64],"m":"jmp","oa":16389,"o":"$4005"},{"a":2092,"l":"b_082C","t":"code","b":[202],"m":"dex","x":[2078]},{"a":2093,"t":"code","b":[208,33],"m":"bne","oa":2128,"o":"load_episode_three"},{"a":2095,"c":"Episode 1: loads XXXMYOS2, the OS again with its save area moved to $D000, and runs its installer at $8000.","t":"code","b":[162,8],"m":"ldx","o":"#$08"},{"a":2097,"t":"code","b":[169,85],"m":"lda","o":"#$55"},{"a":2099,"t":"code","b":[32,0,236],"m":"jsr","oa":60416,"o":"os_call"},{"a":2102,"c":"load_file's argument: the name XXXMYOS2.","t":"addr","b":[132,8],"oa":2180,"o":"episode_file_names"},{"a":2104,"c":"Runs XXXMYOS2's installer, which copies it over the OS at $EC00.","t":"code","b":[32,0,128],"m":"jsr","oa":32768,"o":"$8000"},{"a":2107,"c":"Loads XXXICONS, episode two's icon pictures, to $1000.","t":"code","b":[162,8],"m":"ldx","o":"#$08"},{"a":2109,"t":"code","b":[169,85],"m":"lda","o":"#$55"},{"a":2111,"t":"code","b":[32,0,236],"m":"jsr","oa":60416,"o":"os_call"},{"a":2114,"c":"load_file's argument: the name XXXICONS.","t":"addr","b":[148,8],"oa":2196,"o":"name_icons"},{"a":2116,"c":"Loads XXXPART2 and jumps into it at $4077.","t":"code","b":[162,8],"m":"ldx","o":"#$08"},{"a":2118,"t":"code","b":[169,85],"m":"lda","o":"#$55"},{"a":2120,"t":"code","b":[32,0,236],"m":"jsr","oa":60416,"o":"os_call"},{"a":2123,"c":"load_file's argument: the name XXXPART2.","t":"addr","b":[156,8],"oa":2204,"o":"name_part2"},{"a":2125,"c":"JMP $4077, episode two's entry.","t":"code","b":[76,119,64],"m":"jmp","oa":16503,"o":"$4077"},{"a":2128,"l":"load_episode_three","c":"Episode three runs on the KERNAL: banks the ROMs back in ($01 = $37), resets the stack, and calls the KERNAL's IOINIT, RAMTAS, RESTOR and CINT as a reset would; then loads XXXF0, XXXF1 and XXXF2 by name through the KERNAL (kernal_load) and jumps to $C000.","t":"code","b":[120],"m":"sei","x":[2093]},{"a":2129,"t":"code","b":[169,55],"m":"lda","o":"#$37"},{"a":2131,"t":"code","b":[133,1],"m":"sta","oa":1,"o":"zpa_01"},{"a":2133,"t":"code","b":[162,255],"m":"ldx","o":"#$FF"},{"a":2135,"t":"code","b":[154],"m":"txs"},{"a":2136,"t":"code","b":[216],"m":"cld"},{"a":2137,"t":"code","b":[32,132,255],"m":"jsr","oa":65412,"o":"KERNAL_IOINIT"},{"a":2140,"t":"code","b":[32,135,255],"m":"jsr","oa":65415,"o":"KERNAL_RAMTAS"},{"a":2143,"t":"code","b":[32,138,255],"m":"jsr","oa":65418,"o":"KERNAL_RESTOR"},{"a":2146,"t":"code","b":[32,129,255],"m":"jsr","oa":65409,"o":"KERNAL_CINT"},{"a":2149,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":2151,"t":"code","b":[162,172],"m":"ldx","o":"#$AC"},{"a":2153,"t":"code","b":[160,8],"m":"ldy","o":"#$08"},{"a":2155,"t":"code","b":[32,20,9],"m":"jsr","oa":2324,"o":"kernal_load"},{"a":2158,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":2160,"t":"code","b":[162,177],"m":"ldx","o":"#$B1"},{"a":2162,"t":"code","b":[160,8],"m":"ldy","o":"#$08"},{"a":2164,"t":"code","b":[32,20,9],"m":"jsr","oa":2324,"o":"kernal_load"},{"a":2167,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":2169,"t":"code","b":[162,182],"m":"ldx","o":"#$B6"},{"a":2171,"t":"code","b":[160,8],"m":"ldy","o":"#$08"},{"a":2173,"t":"code","b":[32,20,9],"m":"jsr","oa":2324,"o":"kernal_load"},{"a":2176,"t":"code","b":[88],"m":"cli"},{"a":2177,"t":"code","b":[76,0,192],"m":"jmp","oa":49152,"o":"$C000"},{"a":2180,"l":"episode_file_names","c":"The names the OS's load_file and kernal_load are given, eight characters each and no terminator: XXXMYOS2, XXXPART1, XXXICONS, XXXPART2, XXXPART3 (which nothing loads, and which the disk does not have), then the five-letter XXXF0, XXXF1, XXXF2, and XXXTPAGE.","t":"byte","b":[88,88,88,77,89,79,83,50],"x":[2102]},{"a":2188,"l":"name_part1","c":"XXXPART1, episode one.","t":"byte","b":[88,88,88,80,65,82,84,49],"x":[2087]},{"a":2196,"l":"name_icons","c":"XXXICONS, episode two's icon pictures.","t":"byte","b":[88,88,88,73,67,79,78,83],"x":[2114]},{"a":2204,"l":"name_part2","c":"XXXPART2, episode two.","t":"byte","b":[88,88,88,80,65,82,84,50],"x":[2123]},{"a":2212,"c":"XXXPART3, which no code names and the disk does not have.","t":"byte","b":[88,88,88,80,65,82,84,51]},{"a":2220,"c":"XXXF0, XXXF1 and XXXF2, five characters each, for kernal_load: episode three's three files.","t":"byte","b":[88,88,88,70,48,88,88,88]},{"a":2228,"t":"byte","b":[70,49,88,88,88,70,50]},{"a":2235,"l":"name_tpage","c":"XXXTPAGE, the title program.","t":"byte","b":[88,88,88,84,80,65,71,69],"x":[2250]},{"a":2243,"l":"run_title","c":"Loads XXXTPAGE with the OS's load_file and jumps to it at $4000; the title program's RTS returns the episode chosen to episode_loader.","t":"code","b":[162,8],"m":"ldx","o":"#$08","x":[2074]},{"a":2245,"t":"code","b":[169,85],"m":"lda","o":"#$55"},{"a":2247,"t":"code","b":[32,0,236],"m":"jsr","oa":60416,"o":"os_call"},{"a":2250,"c":"load_file's argument: the name XXXTPAGE, the last in episode_file_names.","t":"addr","b":[187,8],"oa":2235,"o":"name_tpage"},{"a":2252,"c":"JMP $4000: the title program returns to episode_loader with the episode chosen in A.","t":"code","b":[76,0,64],"m":"jmp","oa":16384,"o":"$4000"},{"a":2255,"l":"a_08CF","c":"The name XXXCOPY, seven characters.","t":"byte","b":[88,88,88,67,79,80,89],"x":[2269]},{"a":2262,"l":"run_protection","c":"Loads XXXCOPY with the OS's load_file and jumps to it at $4000; it returns to episode_loader.","t":"code","b":[162,7],"m":"ldx","o":"#$07","x":[2071]},{"a":2264,"t":"code","b":[169,85],"m":"lda","o":"#$55"},{"a":2266,"t":"code","b":[32,0,236],"m":"jsr","oa":60416,"o":"os_call"},{"a":2269,"c":"load_file's argument: the name XXXCOPY, seven characters.","t":"addr","b":[207,8],"oa":2255,"o":"a_08CF"},{"a":2271,"c":"JMP $4000: the copy protection's check returns to episode_loader.","t":"code","b":[76,0,64],"m":"jmp","oa":16384,"o":"$4000"},{"a":2274,"l":"install_os","c":"Once, at start-up: points the NMI vector at $FFFA to an RTI ($090D), so RESTORE does nothing; turns the KERNAL's messages off ($9D); loads XXXMYOS1 (kernal_load with myos1_name) and turns off interrupts (irqs_off); runs the installer at $8000, which copies the OS to $EC00; banks the KERNAL and BASIC out ($01 = $05); sets a light grey border, blanks the screen (OS function $0E) and has the OS copy its disk code to $0700 (function $56).","t":"code","b":[169,13],"m":"lda","o":"#$0D","x":[2068]},{"a":2276,"t":"code","b":[141,250,255],"m":"sta","oa":65530,"o":"$FFFA"},{"a":2279,"t":"code","b":[169,9],"m":"lda","o":"#$09"},{"a":2281,"t":"code","b":[141,251,255],"m":"sta","oa":65531,"o":"$FFFB"},{"a":2284,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":2286,"t":"code","b":[133,157],"m":"sta","oa":157,"o":"zpa_9D"},{"a":2288,"t":"code","b":[32,14,9],"m":"jsr","oa":2318,"o":"load_myos1"},{"a":2291,"t":"code","b":[32,46,9],"m":"jsr","oa":2350,"o":"irqs_off"},{"a":2294,"t":"code","b":[32,0,128],"m":"jsr","oa":32768,"o":"$8000"},{"a":2297,"t":"code","b":[169,5],"m":"lda","o":"#$05"},{"a":2299,"t":"code","b":[133,1],"m":"sta","oa":1,"o":"zpa_01"},{"a":2301,"t":"code","b":[169,15],"m":"lda","o":"#$0F"},{"a":2303,"t":"code","b":[141,32,208],"m":"sta","o":"vic_border"},{"a":2306,"t":"code","b":[169,14],"m":"lda","o":"#$0E"},{"a":2308,"t":"code","b":[32,0,236],"m":"jsr","oa":60416,"o":"os_call"},{"a":2311,"t":"code","b":[169,86],"m":"lda","o":"#$56"},{"a":2313,"t":"code","b":[32,0,236],"m":"jsr","oa":60416,"o":"os_call"},{"a":2316,"t":"code","b":[96],"m":"rts"},{"a":2317,"l":"nmi_rti","c":"The NMI handler install_os sets: an RTI, so RESTORE is ignored while the title runs.","t":"code","b":[64],"m":"rti"},{"a":2318,"l":"load_myos1","c":"Names XXXMYOS1 for kernal_load.","t":"code","b":[169,8],"m":"lda","o":"#$08","x":[2288]},{"a":2320,"t":"code","b":[162,38],"m":"ldx","o":"#$26"},{"a":2322,"t":"code","b":[160,9],"m":"ldy","o":"#$09"},{"a":2324,"l":"kernal_load","c":"Loads a file through the KERNAL: SETNAM with A = the name's length and X/Y its address, SETLFS 15, 8, 1, then LOAD to the address in the file's header.","t":"code","b":[32,189,255],"m":"jsr","oa":65469,"o":"KERNAL_SETNAM","x":[2155,2164,2173]},{"a":2327,"t":"code","b":[169,15],"m":"lda","o":"#$0F"},{"a":2329,"t":"code","b":[162,8],"m":"ldx","o":"#$08"},{"a":2331,"t":"code","b":[160,1],"m":"ldy","o":"#$01"},{"a":2333,"t":"code","b":[32,186,255],"m":"jsr","oa":65466,"o":"KERNAL_SETLFS"},{"a":2336,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":2338,"t":"code","b":[32,213,255],"m":"jsr","oa":65493,"o":"KERNAL_LOAD"},{"a":2341,"t":"code","b":[96],"m":"rts"},{"a":2342,"l":"myos1_name","c":"The name XXXMYOS1.","t":"byte","b":[88,88,88,77,89,79,83,49]},{"a":2350,"l":"irqs_off","c":"Masks interrupts and clears the video chip's interrupt enable and its pending flags. Its CIA writes go to $DC1A and $DD1A, which the chips decode as register $0A (the time-of-day clock's hours), not the interrupt control register at $DC0D/$DD0D, so the CIAs' interrupts are left as they were; the OS's os_init turns them off properly later.","t":"code","b":[120],"m":"sei","x":[2291]},{"a":2351,"t":"code","b":[169,127],"m":"lda","o":"#$7F"},{"a":2353,"t":"code","b":[141,26,220],"m":"sta","o":"$DC1A"},{"a":2356,"t":"code","b":[141,26,221],"m":"sta","o":"$DD1A"},{"a":2359,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":2361,"t":"code","b":[141,26,208],"m":"sta","o":"vic_irq_enable"},{"a":2364,"t":"code","b":[173,26,220],"m":"lda","o":"$DC1A"},{"a":2367,"t":"code","b":[173,26,221],"m":"lda","o":"$DD1A"},{"a":2370,"t":"code","b":[169,15],"m":"lda","o":"#$0F"},{"a":2372,"t":"code","b":[141,25,208],"m":"sta","o":"vic_irq_status"},{"a":2375,"t":"code","b":[96],"m":"rts"},{"a":2376,"t":"gap","n":58040},{"a":60416,"l":"os_call","c":"The OS's entry: JSR $EC00 with a function number in A ($00-$56) runs that function through the table at os_function_table, with X and Y passed through. Functions $10, $11, $2D, $2E, $35, $38, $3F, $4D, $54 and $55 read their arguments from the bytes after the caller's JSR (os_inline_args), and the caller resumes after them.","t":"code","b":[76,15,236],"m":"jmp","oa":60431,"o":"os_dispatch","x":[2084,2099,2111,2120,2247,2266,2308,2313]},{"a":60419,"l":"os_print_char","c":"Prints the character in A in the current window (print_char): a code below $20 is a control code, anything else a glyph, wrapped at the window's right edge.","t":"code","b":[76,244,251],"m":"jmp","oa":64500,"o":"print_char","x":[61756]},{"a":60422,"l":"os_print_string","c":"Prints the zero-terminated string that follows the caller's JSR in the current window, and returns to the byte after the zero (print_inline_string).","t":"code","b":[76,30,252],"m":"jmp","oa":64542,"o":"print_inline_string"},{"a":60425,"l":"os_print_char_in","c":"Prints the character in A in window X, leaving the current window selected afterwards (print_char_in_window).","t":"code","b":[76,7,252],"m":"jmp","oa":64519,"o":"print_char_in_window"},{"a":60428,"l":"os_print_string_in","c":"Prints the zero-terminated string that follows the caller's JSR in window X, then reselects the current window (print_inline_string_in_window).","t":"code","b":[76,67,252],"m":"jmp","oa":64579,"o":"print_inline_string_in_window"},{"a":60431,"l":"os_dispatch","c":"The dispatcher behind os_call: doubles the function number in A, takes the routine's address from os_function_table into $14/$15 and jumps there with Y restored.","t":"code","b":[132,19],"m":"sty","oa":19,"o":"zpa_13","x":[60416]},{"a":60433,"t":"code","b":[10],"m":"asl","o":"a"},{"a":60434,"t":"code","b":[168],"m":"tay"},{"a":60435,"t":"code","b":[185,34,236],"m":"lda","oa":60450,"o":"os_function_table,y"},{"a":60438,"t":"code","b":[133,20],"m":"sta","oa":20,"o":"zpa_14"},{"a":60440,"t":"code","b":[185,35,236],"m":"lda","oa":60451,"o":"os_function_table_hi,y"},{"a":60443,"t":"code","b":[133,21],"m":"sta","oa":21,"o":"zpa_15"},{"a":60445,"t":"code","b":[164,19],"m":"ldy","oa":19,"o":"zpa_13"},{"a":60447,"t":"code","b":[108,20,0],"m":"jmp","oa":20,"o":"(zpa_14)"},{"a":60450,"l":"os_function_table","c":"Addresses of the 87 OS functions, $00 to $56, two bytes each. A zero entry ($07, $16, $17, $1B, $3A-$3D, $41-$45) is a number nothing implements; calling it jumps to $0000. Several entries ($0A, $18-$1A, $1C-$1F, $21, $23, $39) lead to JMP $FC00, which lands inside an instruction (os_dead_stub).","t":"addr","b":[169,239],"oa":61353,"o":"os_init","x":[60435]},{"a":60451,"t":"note","l":"os_function_table_hi","c":"The same table read a byte on, for each entry's high byte (os_dispatch loads os_function_table+1,Y).","note":"inside the item at $EC22","x":[60440]},{"a":60452,"t":"addr","b":[197,238],"oa":61125,"o":"video_setup"},{"a":60454,"t":"addr","b":[168,238],"oa":61096,"o":"clear_screen"},{"a":60456,"t":"addr","b":[162,238],"oa":61090,"o":"clear_second_screen"},{"a":60458,"t":"addr","b":[82,250],"oa":64082,"o":"reset_windows"},{"a":60460,"t":"addr","b":[155,246],"oa":63131,"o":"reset_icons"},{"a":60462,"t":"addr","b":[134,244],"oa":62598,"o":"init_pointer"},{"a":60464,"t":"addr","b":[0,0],"oa":0,"o":"zpf_00"},{"a":60466,"t":"addr","b":[0,240],"oa":61440,"o":"os_version"},{"a":60468,"t":"addr","b":[17,240],"oa":61457,"o":"wait_x"},{"a":60470,"t":"addr","b":[158,243],"oa":62366,"o":"a_F39E"},{"a":60472,"t":"addr","b":[222,239],"oa":61406,"o":"io_in"},{"a":60474,"t":"addr","b":[227,239],"oa":61411,"o":"io_out"},{"a":60476,"t":"addr","b":[232,239],"oa":61416,"o":"screen_on"},{"a":60478,"t":"addr","b":[243,239],"oa":61427,"o":"screen_off"},{"a":60480,"t":"addr","b":[252,239],"oa":61436,"o":"set_border"},{"a":60482,"t":"addr","b":[127,249],"oa":63871,"o":"open_window"},{"a":60484,"t":"addr","b":[71,249],"oa":63815,"o":"open_window_saved"},{"a":60486,"t":"addr","b":[160,249],"oa":63904,"o":"close_window_here"},{"a":60488,"t":"addr","b":[162,249],"oa":63906,"o":"close_window"},{"a":60490,"t":"addr","b":[237,249],"oa":63981,"o":"current_window"},{"a":60492,"t":"addr","b":[240,249],"oa":63984,"o":"select_window"},{"a":60494,"t":"addr","b":[0,0],"oa":0,"o":"zpf_00"},{"a":60496,"t":"addr","b":[0,0],"oa":0,"o":"zpf_00"},{"a":60498,"t":"addr","b":[241,251],"oa":64497,"o":"a_FBF1"},{"a":60500,"t":"addr","b":[241,251],"oa":64497,"o":"a_FBF1"},{"a":60502,"t":"addr","b":[241,251],"oa":64497,"o":"a_FBF1"},{"a":60504,"t":"addr","b":[0,0],"oa":0,"o":"zpf_00"},{"a":60506,"t":"addr","b":[176,246],"oa":63152,"o":"a_F6B0"},{"a":60508,"t":"addr","b":[176,246],"oa":63152,"o":"a_F6B0"},{"a":60510,"t":"addr","b":[176,246],"oa":63152,"o":"a_F6B0"},{"a":60512,"t":"addr","b":[176,246],"oa":63152,"o":"a_F6B0"},{"a":60514,"t":"addr","b":[124,238],"oa":61052,"o":"draw_to_bitmap"},{"a":60516,"t":"addr","b":[129,238],"oa":61057,"o":"draw_to_second_bitmap"},{"a":60518,"t":"addr","b":[179,246],"oa":63155,"o":"restore_video"},{"a":60520,"t":"addr","b":[206,246],"oa":63182,"o":"a_F6CE"},{"a":60522,"t":"addr","b":[209,246],"oa":63185,"o":"hline_solid"},{"a":60524,"t":"addr","b":[209,246],"oa":63185,"o":"hline_solid"},{"a":60526,"t":"addr","b":[209,246],"oa":63185,"o":"hline_solid"},{"a":60528,"t":"addr","b":[209,246],"oa":63185,"o":"hline_solid"},{"a":60530,"t":"addr","b":[209,246],"oa":63185,"o":"hline_solid"},{"a":60532,"t":"addr","b":[209,246],"oa":63185,"o":"hline_solid"},{"a":60534,"t":"addr","b":[97,246],"oa":63073,"o":"window_flag"},{"a":60536,"t":"addr","b":[66,245],"oa":62786,"o":"forget_icon"},{"a":60538,"t":"addr","b":[75,245],"oa":62795,"o":"forget_window_icons"},{"a":60540,"t":"addr","b":[34,245],"oa":62754,"o":"add_icon_here"},{"a":60542,"t":"addr","b":[46,245],"oa":62766,"o":"add_icon"},{"a":60544,"t":"addr","b":[102,245],"oa":62822,"o":"erase_icon"},{"a":60546,"t":"addr","b":[101,246],"oa":63077,"o":"set_window_flag"},{"a":60548,"t":"addr","b":[109,246],"oa":63085,"o":"clear_window_flag"},{"a":60550,"t":"addr","b":[117,246],"oa":63093,"o":"erase_window_icons_here"},{"a":60552,"t":"addr","b":[122,246],"oa":63098,"o":"erase_window_icons"},{"a":60554,"t":"addr","b":[161,243],"oa":62369,"o":"pointer_arrow"},{"a":60556,"t":"addr","b":[188,243],"oa":62396,"o":"pointer_shape"},{"a":60558,"t":"addr","b":[249,243],"oa":62457,"o":"pointer_show"},{"a":60560,"t":"addr","b":[2,244],"oa":62466,"o":"pointer_hide"},{"a":60562,"t":"addr","b":[26,244],"oa":62490,"o":"pointer_move"},{"a":60564,"t":"addr","b":[131,244],"oa":62595,"o":"a_F483"},{"a":60566,"t":"addr","b":[0,0],"oa":0,"o":"zpf_00"},{"a":60568,"t":"addr","b":[0,0],"oa":0,"o":"zpf_00"},{"a":60570,"t":"addr","b":[0,0],"oa":0,"o":"zpf_00"},{"a":60572,"t":"addr","b":[0,0],"oa":0,"o":"zpf_00"},{"a":60574,"t":"addr","b":[185,241],"oa":61881,"o":"read_key"},{"a":60576,"t":"addr","b":[2,241],"oa":61698,"o":"input_line"},{"a":60578,"t":"addr","b":[49,242],"oa":62001,"o":"key_held"},{"a":60580,"t":"addr","b":[0,0],"oa":0,"o":"zpf_00"},{"a":60582,"t":"addr","b":[0,0],"oa":0,"o":"zpf_00"},{"a":60584,"t":"addr","b":[0,0],"oa":0,"o":"zpf_00"},{"a":60586,"t":"addr","b":[0,0],"oa":0,"o":"zpf_00"},{"a":60588,"t":"addr","b":[0,0],"oa":0,"o":"zpf_00"},{"a":60590,"t":"addr","b":[28,243],"oa":62236,"o":"sprite_on"},{"a":60592,"t":"addr","b":[38,243],"oa":62246,"o":"sprite_off"},{"a":60594,"t":"addr","b":[49,243],"oa":62257,"o":"sprite_wide"},{"a":60596,"t":"addr","b":[59,243],"oa":62267,"o":"sprite_narrow"},{"a":60598,"t":"addr","b":[70,243],"oa":62278,"o":"sprite_tall"},{"a":60600,"t":"addr","b":[80,243],"oa":62288,"o":"sprite_short"},{"a":60602,"t":"addr","b":[91,243],"oa":62299,"o":"sprite_colour"},{"a":60604,"t":"addr","b":[96,243],"oa":62304,"o":"sprite_shape"},{"a":60606,"t":"addr","b":[51,240],"oa":61491,"o":"os_nothing"},{"a":60608,"t":"addr","b":[51,240],"oa":61491,"o":"os_nothing"},{"a":60610,"t":"addr","b":[51,240],"oa":61491,"o":"os_nothing"},{"a":60612,"t":"addr","b":[51,240],"oa":61491,"o":"os_nothing"},{"a":60614,"t":"addr","b":[51,240],"oa":61491,"o":"os_nothing"},{"a":60616,"t":"addr","b":[51,240],"oa":61491,"o":"os_nothing"},{"a":60618,"t":"addr","b":[52,240],"oa":61492,"o":"save_file"},{"a":60620,"t":"addr","b":[69,240],"oa":61509,"o":"load_file"},{"a":60622,"t":"addr","b":[240,240],"oa":61680,"o":"install_disk_code"},{"a":60624,"l":"fill_window_background","c":"Fills a rectangle of the bitmap with the screen's background pattern and colour. Takes seven bytes after the caller's JSR (x, y, width, height in character cells, and three bytes it ignores), copies the background pattern bg_pattern_a/bg_pattern_b and colour bg_colour into $23-$25 and goes on into fill_bitmap_rect.","t":"code","b":[169,7],"m":"lda","o":"#$07","x":[61111]},{"a":60626,"t":"code","b":[32,210,237],"m":"jsr","oa":60882,"o":"os_inline_args"},{"a":60629,"t":"code","b":[165,62],"m":"lda","oa":62,"o":"bg_pattern_a"},{"a":60631,"t":"code","b":[133,35],"m":"sta","oa":35,"o":"zpa_23"},{"a":60633,"t":"code","b":[165,63],"m":"lda","oa":63,"o":"bg_pattern_b"},{"a":60635,"t":"code","b":[133,36],"m":"sta","oa":36,"o":"zpa_24"},{"a":60637,"t":"code","b":[165,64],"m":"lda","oa":64,"o":"bg_colour"},{"a":60639,"t":"code","b":[133,37],"m":"sta","oa":37,"o":"zpa_25"},{"a":60641,"t":"code","b":[76,233,236],"m":"jmp","oa":60649,"o":"fill_bitmap_rect"},{"a":60644,"c":"Unused: LDA #7 / JSR os_inline_args, the same seven-byte argument fetch as fill_window_background without its colour copy, which no entry reaches.","t":"code","b":[169,7],"m":"lda","o":"#$07"},{"a":60646,"t":"code","b":[32,210,237],"m":"jsr","oa":60882,"o":"os_inline_args"},{"a":60649,"l":"fill_bitmap_rect","c":"Fills the character cells of a rectangle of the bitmap: x in $1F, y in $20, width in $21, height in $22 (cells). Each cell's eight pixel rows alternate between the pattern byte in $23 and that byte EOR $24, so $FF/$00 is solid, $FF/$FF horizontal stripes and $AA/$FF a checkerboard. Draws to whichever bitmap draw_to_bitmap chose.","t":"code","b":[165,31],"m":"lda","oa":31,"o":"os_args","x":[60641,62857,63848,63889,63967,64795]},{"a":60651,"t":"code","b":[133,39],"m":"sta","oa":39,"o":"zpa_27"},{"a":60653,"t":"code","b":[165,32],"m":"lda","oa":32,"o":"zpa_20"},{"a":60655,"t":"code","b":[133,41],"m":"sta","oa":41,"o":"zpa_29"},{"a":60657,"t":"code","b":[32,101,237],"m":"jsr","oa":60773,"o":"bitmap_cell_address"},{"a":60660,"t":"code","b":[165,34],"m":"lda","oa":34,"o":"zpa_22"},{"a":60662,"t":"code","b":[133,11],"m":"sta","oa":11,"o":"zpa_0B"},{"a":60664,"l":"b_ECF8","t":"code","b":[165,33],"m":"lda","oa":33,"o":"zpa_21","x":[60698]},{"a":60666,"t":"code","b":[133,13],"m":"sta","oa":13,"o":"zpa_0D"},{"a":60668,"t":"code","b":[32,39,238],"m":"jsr","oa":60967,"o":"copy_bitmap_pointer"},{"a":60671,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":60673,"l":"b_ED01","t":"code","b":[165,35],"m":"lda","oa":35,"o":"zpa_23","x":[60691]},{"a":60675,"t":"code","b":[162,8],"m":"ldx","o":"#$08"},{"a":60677,"l":"b_ED05","t":"code","b":[145,4],"m":"sta","oa":4,"o":"(bitmap_ptr2),y","x":[60687]},{"a":60679,"t":"code","b":[200],"m":"iny"},{"a":60680,"t":"code","b":[208,2],"m":"bne","oa":60684,"o":"KERNAL_LISTENj"},{"a":60682,"t":"code","b":[230,5],"m":"inc","oa":5,"o":"zpa_05"},{"a":60684,"l":"KERNAL_LISTENj","t":"code","b":[69,36],"m":"eor","oa":36,"o":"zpa_24","x":[60680]},{"a":60686,"t":"code","b":[202],"m":"dex"},{"a":60687,"t":"code","b":[208,244],"m":"bne","oa":60677,"o":"b_ED05"},{"a":60689,"t":"code","b":[198,13],"m":"dec","oa":13,"o":"zpa_0D"},{"a":60691,"t":"code","b":[208,236],"m":"bne","oa":60673,"o":"b_ED01"},{"a":60693,"t":"code","b":[32,25,238],"m":"jsr","oa":60953,"o":"next_cell_row"},{"a":60696,"t":"code","b":[198,11],"m":"dec","oa":11,"o":"zpa_0B"},{"a":60698,"t":"code","b":[208,220],"m":"bne","oa":60664,"o":"b_ECF8"},{"a":60700,"t":"code","b":[96],"m":"rts"},{"a":60701,"c":"Unused: LDA #7 / JSR os_inline_args in front of fill_colour_rect, an argument-taking entry no caller uses.","t":"code","b":[169,7],"m":"lda","o":"#$07"},{"a":60703,"t":"code","b":[32,210,237],"m":"jsr","oa":60882,"o":"os_inline_args"},{"a":60706,"l":"fill_colour_rect","c":"Fills the screen-memory cells (the colour of each 8x8 cell in bitmap mode) of the rectangle x $1F, y $20, width $21, height $22 with the colour byte in $25: high nybble for set pixels, low nybble for clear ones.","t":"code","b":[165,31],"m":"lda","oa":31,"o":"os_args","x":[61121,62854,63069,63854,63895,63964]},{"a":60708,"t":"code","b":[133,39],"m":"sta","oa":39,"o":"zpa_27"},{"a":60710,"t":"code","b":[165,32],"m":"lda","oa":32,"o":"zpa_20"},{"a":60712,"t":"code","b":[133,41],"m":"sta","oa":41,"o":"zpa_29"},{"a":60714,"t":"code","b":[32,72,237],"m":"jsr","oa":60744,"o":"screen_cell_address"},{"a":60717,"t":"code","b":[166,34],"m":"ldx","oa":34,"o":"zpa_22"},{"a":60719,"l":"b_ED2F","t":"code","b":[165,37],"m":"lda","oa":37,"o":"zpa_25","x":[60741]},{"a":60721,"t":"code","b":[164,33],"m":"ldy","oa":33,"o":"zpa_21"},{"a":60723,"t":"code","b":[136],"m":"dey"},{"a":60724,"l":"b_ED34","t":"code","b":[145,2],"m":"sta","oa":2,"o":"(bitmap_ptr),y","x":[60727]},{"a":60726,"t":"code","b":[136],"m":"dey"},{"a":60727,"t":"code","b":[16,251],"m":"bpl","oa":60724,"o":"b_ED34"},{"a":60729,"t":"code","b":[24],"m":"clc"},{"a":60730,"t":"code","b":[165,2],"m":"lda","oa":2,"o":"bitmap_ptr"},{"a":60732,"t":"code","b":[105,40],"m":"adc","o":"#$28"},{"a":60734,"t":"code","b":[133,2],"m":"sta","oa":2,"o":"bitmap_ptr"},{"a":60736,"t":"code","b":[144,2],"m":"bcc","oa":60740,"o":"b_ED44"},{"a":60738,"t":"code","b":[230,3],"m":"inc","oa":3,"o":"zpa_03"},{"a":60740,"l":"b_ED44","t":"code","b":[202],"m":"dex","x":[60736]},{"a":60741,"t":"code","b":[208,232],"m":"bne","oa":60719,"o":"b_ED2F"},{"a":60743,"t":"code","b":[96],"m":"rts"},{"a":60744,"l":"screen_cell_address","c":"Points $02/$03 at the screen-memory byte of cell ($27, $29): screen_base, plus $27, plus $29 times 40 (row_times_40).","t":"code","b":[32,99,238],"m":"jsr","oa":61027,"o":"screen_base","x":[60714,64334,64454]},{"a":60747,"t":"code","b":[24],"m":"clc"},{"a":60748,"t":"code","b":[165,2],"m":"lda","oa":2,"o":"bitmap_ptr"},{"a":60750,"t":"code","b":[101,39],"m":"adc","oa":39,"o":"zpa_27"},{"a":60752,"t":"code","b":[133,2],"m":"sta","oa":2,"o":"bitmap_ptr"},{"a":60754,"t":"code","b":[165,41],"m":"lda","oa":41,"o":"zpa_29"},{"a":60756,"t":"code","b":[32,193,237],"m":"jsr","oa":60865,"o":"row_times_40"},{"a":60759,"t":"code","b":[24],"m":"clc"},{"a":60760,"t":"code","b":[165,2],"m":"lda","oa":2,"o":"bitmap_ptr"},{"a":60762,"t":"code","b":[101,9],"m":"adc","oa":9,"o":"zpa_09"},{"a":60764,"t":"code","b":[133,2],"m":"sta","oa":2,"o":"bitmap_ptr"},{"a":60766,"t":"code","b":[165,3],"m":"lda","oa":3,"o":"zpa_03"},{"a":60768,"t":"code","b":[101,10],"m":"adc","oa":10,"o":"zpa_0A"},{"a":60770,"t":"code","b":[133,3],"m":"sta","oa":3,"o":"zpa_03"},{"a":60772,"t":"code","b":[96],"m":"rts"},{"a":60773,"l":"bitmap_cell_address","c":"Converts the cell column $27 and row $29 to pixels (times 8, the column's high byte to $28) and falls into bitmap_pixel_address.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[60657,61071,62993,64025,64270,64393]},{"a":60775,"t":"code","b":[6,39],"m":"asl","oa":39,"o":"zpa_27"},{"a":60777,"t":"code","b":[42],"m":"rol","o":"a"},{"a":60778,"t":"code","b":[6,39],"m":"asl","oa":39,"o":"zpa_27"},{"a":60780,"t":"code","b":[42],"m":"rol","o":"a"},{"a":60781,"t":"code","b":[6,39],"m":"asl","oa":39,"o":"zpa_27"},{"a":60783,"t":"code","b":[42],"m":"rol","o":"a"},{"a":60784,"t":"code","b":[133,40],"m":"sta","oa":40,"o":"zpa_28"},{"a":60786,"t":"code","b":[6,41],"m":"asl","oa":41,"o":"zpa_29"},{"a":60788,"t":"code","b":[6,41],"m":"asl","oa":41,"o":"zpa_29"},{"a":60790,"t":"code","b":[6,41],"m":"asl","oa":41,"o":"zpa_29"},{"a":60792,"t":"code","b":[76,123,237],"m":"jmp","oa":60795,"o":"bitmap_pixel_address"},{"a":60795,"l":"bitmap_pixel_address","c":"Points $02/$03 at the bitmap byte holding pixel x $27/$28 (0-319), y $29 (0-199): bitmap_base, plus x rounded down to a cell, plus the pixel row within the cell, plus 320 for each cell row (row_times_320).","t":"code","b":[32,65,238],"m":"jsr","oa":60993,"o":"bitmap_base","x":[60792,63248,63263,63491,63507]},{"a":60798,"t":"code","b":[165,39],"m":"lda","oa":39,"o":"zpa_27"},{"a":60800,"t":"code","b":[41,248],"m":"and","o":"#$F8"},{"a":60802,"t":"code","b":[24],"m":"clc"},{"a":60803,"t":"code","b":[101,2],"m":"adc","oa":2,"o":"bitmap_ptr"},{"a":60805,"t":"code","b":[133,2],"m":"sta","oa":2,"o":"bitmap_ptr"},{"a":60807,"t":"code","b":[165,3],"m":"lda","oa":3,"o":"zpa_03"},{"a":60809,"t":"code","b":[101,40],"m":"adc","oa":40,"o":"zpa_28"},{"a":60811,"t":"code","b":[133,3],"m":"sta","oa":3,"o":"zpa_03"},{"a":60813,"t":"code","b":[24],"m":"clc"},{"a":60814,"t":"code","b":[165,41],"m":"lda","oa":41,"o":"zpa_29"},{"a":60816,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":60818,"t":"code","b":[101,2],"m":"adc","oa":2,"o":"bitmap_ptr"},{"a":60820,"t":"code","b":[133,2],"m":"sta","oa":2,"o":"bitmap_ptr"},{"a":60822,"t":"code","b":[144,2],"m":"bcc","oa":60826,"o":"b_ED9A"},{"a":60824,"t":"code","b":[230,3],"m":"inc","oa":3,"o":"zpa_03"},{"a":60826,"l":"b_ED9A","t":"code","b":[165,41],"m":"lda","oa":41,"o":"zpa_29","x":[60822]},{"a":60828,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":60829,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":60830,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":60831,"t":"code","b":[32,176,237],"m":"jsr","oa":60848,"o":"row_times_320"},{"a":60834,"t":"code","b":[24],"m":"clc"},{"a":60835,"t":"code","b":[165,2],"m":"lda","oa":2,"o":"bitmap_ptr"},{"a":60837,"t":"code","b":[101,9],"m":"adc","oa":9,"o":"zpa_09"},{"a":60839,"t":"code","b":[133,2],"m":"sta","oa":2,"o":"bitmap_ptr"},{"a":60841,"t":"code","b":[165,3],"m":"lda","oa":3,"o":"zpa_03"},{"a":60843,"t":"code","b":[101,10],"m":"adc","oa":10,"o":"zpa_0A"},{"a":60845,"t":"code","b":[133,3],"m":"sta","oa":3,"o":"zpa_03"},{"a":60847,"t":"code","b":[96],"m":"rts"},{"a":60848,"l":"row_times_320","c":"Sets $09/$0A to A times 320, the bitmap offset of cell row A, from the table at row_offsets_320.","t":"code","b":[132,19],"m":"sty","oa":19,"o":"zpa_13","x":[60831]},{"a":60850,"t":"code","b":[10],"m":"asl","o":"a"},{"a":60851,"t":"code","b":[168],"m":"tay"},{"a":60852,"t":"code","b":[185,120,239],"m":"lda","oa":61304,"o":"row_offsets_320_hi,y"},{"a":60855,"t":"code","b":[133,10],"m":"sta","oa":10,"o":"zpa_0A"},{"a":60857,"t":"code","b":[185,119,239],"m":"lda","oa":61303,"o":"row_offsets_320,y"},{"a":60860,"t":"code","b":[133,9],"m":"sta","oa":9,"o":"zpa_09"},{"a":60862,"t":"code","b":[164,19],"m":"ldy","oa":19,"o":"zpa_13"},{"a":60864,"t":"code","b":[96],"m":"rts"},{"a":60865,"l":"row_times_40","c":"Sets $09/$0A to A times 40, the screen-memory offset of row A, from the table at row_offsets_40.","t":"code","b":[132,19],"m":"sty","oa":19,"o":"zpa_13","x":[60756]},{"a":60867,"t":"code","b":[10],"m":"asl","o":"a"},{"a":60868,"t":"code","b":[168],"m":"tay"},{"a":60869,"t":"code","b":[185,70,239],"m":"lda","oa":61254,"o":"row_offsets_40_hi,y"},{"a":60872,"t":"code","b":[133,10],"m":"sta","oa":10,"o":"zpa_0A"},{"a":60874,"t":"code","b":[185,69,239],"m":"lda","oa":61253,"o":"row_offsets_40,y"},{"a":60877,"t":"code","b":[133,9],"m":"sta","oa":9,"o":"zpa_09"},{"a":60879,"t":"code","b":[164,19],"m":"ldy","oa":19,"o":"zpa_13"},{"a":60881,"t":"code","b":[96],"m":"rts"},{"a":60882,"l":"os_inline_args","c":"Copies the arguments an OS function takes from after its caller's JSR: A is the count. Pops its own return address, then the caller's, copies that many bytes into $1F upward, pushes the caller's return address moved past them and jumps back into the function. Used by ten functions (os_call says which).","t":"code","b":[133,26],"m":"sta","oa":26,"o":"zpa_1A","x":[60626,60646,60703,61497,61514,61700,62306,62398,62492,62756,62768,63817,63873]},{"a":60884,"t":"code","b":[104],"m":"pla"},{"a":60885,"t":"code","b":[133,20],"m":"sta","oa":20,"o":"zpa_14"},{"a":60887,"t":"code","b":[104],"m":"pla"},{"a":60888,"t":"code","b":[133,21],"m":"sta","oa":21,"o":"zpa_15"},{"a":60890,"t":"code","b":[230,20],"m":"inc","oa":20,"o":"zpa_14"},{"a":60892,"t":"code","b":[208,2],"m":"bne","oa":60896,"o":"b_EDE0"},{"a":60894,"t":"code","b":[230,21],"m":"inc","oa":21,"o":"zpa_15"},{"a":60896,"l":"b_EDE0","t":"code","b":[104],"m":"pla","x":[60892]},{"a":60897,"t":"code","b":[133,22],"m":"sta","oa":22,"o":"zpa_16"},{"a":60899,"t":"code","b":[104],"m":"pla"},{"a":60900,"t":"code","b":[133,23],"m":"sta","oa":23,"o":"zpa_17"},{"a":60902,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":60904,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":60906,"l":"b_EDEA","t":"code","b":[230,22],"m":"inc","oa":22,"o":"zpa_16","x":[60919]},{"a":60908,"t":"code","b":[208,2],"m":"bne","oa":60912,"o":"b_EDF0"},{"a":60910,"t":"code","b":[230,23],"m":"inc","oa":23,"o":"zpa_17"},{"a":60912,"l":"b_EDF0","t":"code","b":[177,22],"m":"lda","oa":22,"o":"(zpa_16),y","x":[60908]},{"a":60914,"t":"code","b":[149,31],"m":"sta","oa":31,"o":"os_args,x"},{"a":60916,"t":"code","b":[232],"m":"inx"},{"a":60917,"t":"code","b":[228,26],"m":"cpx","oa":26,"o":"zpa_1A"},{"a":60919,"t":"code","b":[208,241],"m":"bne","oa":60906,"o":"b_EDEA"},{"a":60921,"t":"code","b":[165,23],"m":"lda","oa":23,"o":"zpa_17"},{"a":60923,"t":"code","b":[72],"m":"pha"},{"a":60924,"t":"code","b":[165,22],"m":"lda","oa":22,"o":"zpa_16"},{"a":60926,"t":"code","b":[72],"m":"pha"},{"a":60927,"t":"code","b":[108,20,0],"m":"jmp","oa":20,"o":"(zpa_14)"},{"a":60930,"l":"copy_block","c":"Copies $0B bytes plus $0C further pages from the address in $16/$17 to the address in $14/$15 (with $0C = 0, exactly $0B bytes; $0B = 0 is a whole page).","t":"code","b":[166,11],"m":"ldx","oa":11,"o":"zpa_0B","x":[62346,62425]},{"a":60932,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":60934,"l":"b_EE06","t":"code","b":[177,22],"m":"lda","oa":22,"o":"(zpa_16),y","x":[60946,60950]},{"a":60936,"t":"code","b":[145,20],"m":"sta","oa":20,"o":"(zpa_14),y"},{"a":60938,"t":"code","b":[200],"m":"iny"},{"a":60939,"t":"code","b":[208,4],"m":"bne","oa":60945,"o":"b_EE11"},{"a":60941,"t":"code","b":[230,21],"m":"inc","oa":21,"o":"zpa_15"},{"a":60943,"t":"code","b":[230,23],"m":"inc","oa":23,"o":"zpa_17"},{"a":60945,"l":"b_EE11","t":"code","b":[202],"m":"dex","x":[60939]},{"a":60946,"t":"code","b":[208,242],"m":"bne","oa":60934,"o":"b_EE06"},{"a":60948,"t":"code","b":[198,12],"m":"dec","oa":12,"o":"zpa_0C"},{"a":60950,"t":"code","b":[16,238],"m":"bpl","oa":60934,"o":"b_EE06"},{"a":60952,"t":"code","b":[96],"m":"rts"},{"a":60953,"l":"next_cell_row","c":"Adds 320 to the bitmap pointer $02/$03: the same column one cell row down.","t":"code","b":[24],"m":"clc","x":[60693,64318,64438]},{"a":60954,"t":"code","b":[165,2],"m":"lda","oa":2,"o":"bitmap_ptr"},{"a":60956,"t":"code","b":[105,64],"m":"adc","o":"#$40"},{"a":60958,"t":"code","b":[133,2],"m":"sta","oa":2,"o":"bitmap_ptr"},{"a":60960,"t":"code","b":[165,3],"m":"lda","oa":3,"o":"zpa_03"},{"a":60962,"t":"code","b":[105,1],"m":"adc","o":"#$01"},{"a":60964,"t":"code","b":[133,3],"m":"sta","oa":3,"o":"zpa_03"},{"a":60966,"t":"code","b":[96],"m":"rts"},{"a":60967,"l":"copy_bitmap_pointer","c":"Copies the bitmap pointer $02/$03 into $04/$05.","t":"code","b":[165,2],"m":"lda","oa":2,"o":"bitmap_ptr","x":[60668,64286,64406]},{"a":60969,"t":"code","b":[133,4],"m":"sta","oa":4,"o":"bitmap_ptr2"},{"a":60971,"t":"code","b":[165,3],"m":"lda","oa":3,"o":"zpa_03"},{"a":60973,"t":"code","b":[133,5],"m":"sta","oa":5,"o":"zpa_05"},{"a":60975,"t":"code","b":[96],"m":"rts"},{"a":60976,"c":"Unused: points $02/$03 at $2000 and $04/$05 at $C000, the two bitmaps draw_to_bitmap chooses between; nothing calls it.","t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":60978,"t":"code","b":[133,2],"m":"sta","oa":2,"o":"bitmap_ptr"},{"a":60980,"t":"code","b":[169,32],"m":"lda","o":"#$20"},{"a":60982,"t":"code","b":[133,3],"m":"sta","oa":3,"o":"zpa_03"},{"a":60984,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":60986,"t":"code","b":[133,4],"m":"sta","oa":4,"o":"bitmap_ptr2"},{"a":60988,"t":"code","b":[169,192],"m":"lda","o":"#$C0"},{"a":60990,"t":"code","b":[133,5],"m":"sta","oa":5,"o":"zpa_05"},{"a":60992,"t":"code","b":[96],"m":"rts"},{"a":60993,"l":"bitmap_base","c":"Points $02/$03 at the bitmap being drawn: $2000 when draw_to_bitmap is set ($06 not zero), $C000 otherwise.","t":"code","b":[165,6],"m":"lda","oa":6,"o":"draw_flag","x":[60795]},{"a":60995,"t":"code","b":[240,9],"m":"beq","oa":61006,"o":"b_EE4E"},{"a":60997,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":60999,"t":"code","b":[133,2],"m":"sta","oa":2,"o":"bitmap_ptr"},{"a":61001,"t":"code","b":[169,32],"m":"lda","o":"#$20"},{"a":61003,"t":"code","b":[133,3],"m":"sta","oa":3,"o":"zpa_03"},{"a":61005,"t":"code","b":[96],"m":"rts"},{"a":61006,"l":"b_EE4E","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[60995]},{"a":61008,"t":"code","b":[133,2],"m":"sta","oa":2,"o":"bitmap_ptr"},{"a":61010,"t":"code","b":[169,192],"m":"lda","o":"#$C0"},{"a":61012,"t":"code","b":[133,3],"m":"sta","oa":3,"o":"zpa_03"},{"a":61014,"t":"code","b":[96],"m":"rts"},{"a":61015,"c":"Unused fragments: JMP $FC00 (os_dead_stub), then LDA #$3F / STA $0B / LDA #$1F / STA $0C / RTS, a byte count of $1F3F (the bitmap's 8,000 bytes less one) for copy_block that nothing loads.","t":"code","b":[76,0,252],"m":"jmp","oa":64512,"o":"os_dead_stub"},{"a":61018,"t":"code","b":[169,63],"m":"lda","o":"#$3F"},{"a":61020,"t":"code","b":[133,11],"m":"sta","oa":11,"o":"zpa_0B"},{"a":61022,"t":"code","b":[169,31],"m":"lda","o":"#$1F"},{"a":61024,"t":"code","b":[133,12],"m":"sta","oa":12,"o":"zpa_0C"},{"a":61026,"t":"code","b":[96],"m":"rts"},{"a":61027,"l":"screen_base","c":"Points $02/$03 at screen memory, $0C00, when draw_to_bitmap is set; otherwise jumps to os_dead_stub, so the second screen it was meant to choose was never finished.","t":"code","b":[165,6],"m":"lda","oa":6,"o":"draw_flag","x":[60744]},{"a":61029,"t":"code","b":[240,9],"m":"beq","oa":61040,"o":"b_EE70"},{"a":61031,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":61033,"t":"code","b":[133,2],"m":"sta","oa":2,"o":"bitmap_ptr"},{"a":61035,"t":"code","b":[169,12],"m":"lda","o":"#$0C"},{"a":61037,"t":"code","b":[133,3],"m":"sta","oa":3,"o":"zpa_03"},{"a":61039,"t":"code","b":[96],"m":"rts"},{"a":61040,"l":"b_EE70","t":"code","b":[76,0,252],"m":"jmp","oa":64512,"o":"os_dead_stub","x":[61029]},{"a":61043,"c":"Unused: LDA #$E7 / STA $0B / LDA #$03 / STA $0C / RTS, a count of $03E7 (screen memory's 1,000 bytes less one).","t":"code","b":[169,231],"m":"lda","o":"#$E7"},{"a":61045,"t":"code","b":[133,11],"m":"sta","oa":11,"o":"zpa_0B"},{"a":61047,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":61049,"t":"code","b":[133,12],"m":"sta","oa":12,"o":"zpa_0C"},{"a":61051,"t":"code","b":[96],"m":"rts"},{"a":61052,"l":"draw_to_bitmap","c":"OS function $20: sets $06 to $FF, so every drawing routine draws into the bitmap at $2000 with its colours at $0C00, the screen the video chip shows.","t":"code","b":[169,255],"m":"lda","o":"#$FF","x":[60514,61060,61096,64259]},{"a":61054,"t":"code","b":[133,6],"m":"sta","oa":6,"o":"draw_flag"},{"a":61056,"t":"code","b":[96],"m":"rts"},{"a":61057,"l":"draw_to_second_bitmap","c":"OS function $21: jumps to os_dead_stub. It was to clear $06 so drawing went to the bitmap at $C000; as built it would crash.","t":"code","b":[76,0,252],"m":"jmp","oa":64512,"o":"os_dead_stub","x":[60516,61090]},{"a":61060,"c":"Unused: a routine that selects the shown bitmap, converts the cell ($1F, $20) to a bitmap address and points $04/$05 one cell row further down ($EE96), which nothing calls.","t":"code","b":[32,124,238],"m":"jsr","oa":61052,"o":"draw_to_bitmap"},{"a":61063,"t":"code","b":[165,31],"m":"lda","oa":31,"o":"os_args"},{"a":61065,"t":"code","b":[133,39],"m":"sta","oa":39,"o":"zpa_27"},{"a":61067,"t":"code","b":[165,32],"m":"lda","oa":32,"o":"zpa_20"},{"a":61069,"t":"code","b":[133,41],"m":"sta","oa":41,"o":"zpa_29"},{"a":61071,"t":"code","b":[32,101,237],"m":"jsr","oa":60773,"o":"bitmap_cell_address"},{"a":61074,"t":"code","b":[32,150,238],"m":"jsr","oa":61078,"o":"s_EE96"},{"a":61077,"t":"code","b":[96],"m":"rts"},{"a":61078,"l":"s_EE96","c":"Part of the unused routine at $EE84: points $04/$05 one cell row (320 bytes) below $02/$03.","t":"code","b":[165,2],"m":"lda","oa":2,"o":"bitmap_ptr","x":[61074,63251,63513]},{"a":61080,"t":"code","b":[133,4],"m":"sta","oa":4,"o":"bitmap_ptr2"},{"a":61082,"t":"code","b":[165,3],"m":"lda","oa":3,"o":"zpa_03"},{"a":61084,"t":"code","b":[24],"m":"clc"},{"a":61085,"t":"code","b":[105,64],"m":"adc","o":"#$40"},{"a":61087,"t":"code","b":[133,5],"m":"sta","oa":5,"o":"zpa_05"},{"a":61089,"t":"code","b":[96],"m":"rts"},{"a":61090,"l":"clear_second_screen","c":"OS function $03: calls draw_to_second_bitmap, which jumps to os_dead_stub, then would clear the screen as clear_screen does. As built it crashes; nothing calls it.","t":"code","b":[32,129,238],"m":"jsr","oa":61057,"o":"draw_to_second_bitmap","x":[60456]},{"a":61093,"t":"code","b":[76,171,238],"m":"jmp","oa":61099,"o":"j_EEAB"},{"a":61096,"l":"clear_screen","c":"OS function $02: selects the shown bitmap, sets the screen's background to pattern $FF/$FF in colour $10 (white set pixels, black clear ones), which fill_bitmap_rect draws as alternate white and black pixel rows, the striped background behind every icon screen, and fills the whole 40 by 25 cells with it, bitmap and colours.","t":"code","b":[32,124,238],"m":"jsr","oa":61052,"o":"draw_to_bitmap","x":[60454,61357]},{"a":61099,"l":"j_EEAB","t":"code","b":[169,255],"m":"lda","o":"#$FF","x":[61093]},{"a":61101,"t":"code","b":[133,62],"m":"sta","oa":62,"o":"bg_pattern_a"},{"a":61103,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":61105,"t":"code","b":[133,63],"m":"sta","oa":63,"o":"bg_pattern_b"},{"a":61107,"t":"code","b":[169,16],"m":"lda","o":"#$10"},{"a":61109,"t":"code","b":[133,64],"m":"sta","oa":64,"o":"bg_colour"},{"a":61111,"t":"code","b":[32,208,236],"m":"jsr","oa":60624,"o":"fill_window_background"},{"a":61114,"c":"fill_window_background's seven inline arguments: x 0, y 0, width 40 ($28), height 25 ($19), and three bytes it ignores.","t":"byte","b":[0,0,40,25,0,0,0]},{"a":61121,"c":"clear_screen, after its inline arguments: colours all 1,000 cells with the background colour (fill_colour_rect) and returns.","t":"code","b":[32,34,237],"m":"jsr","oa":60706,"o":"fill_colour_rect"},{"a":61124,"t":"code","b":[96],"m":"rts"},{"a":61125,"l":"video_setup","c":"OS function $01: points the video chip at bank 0 ($0000-$3FFF, CIA 2 port A bits 0-1 set), turns bitmap mode on and sets $D018 to $38: screen memory (the cells' colours) at $0C00, the bitmap at $2000.","t":"code","b":[173,2,221],"m":"lda","o":"cia2_ddr_a","x":[60452,61354]},{"a":61128,"t":"code","b":[9,3],"m":"ora","o":"#$03"},{"a":61130,"t":"code","b":[141,2,221],"m":"sta","o":"cia2_ddr_a"},{"a":61133,"t":"code","b":[173,0,221],"m":"lda","o":"cia2_port_a"},{"a":61136,"t":"code","b":[41,252],"m":"and","o":"#$FC"},{"a":61138,"t":"code","b":[9,3],"m":"ora","o":"#$03"},{"a":61140,"t":"code","b":[141,0,221],"m":"sta","o":"cia2_port_a"},{"a":61143,"t":"code","b":[173,17,208],"m":"lda","o":"vic_control1"},{"a":61146,"t":"code","b":[9,32],"m":"ora","o":"#$20"},{"a":61148,"t":"code","b":[141,17,208],"m":"sta","o":"vic_control1"},{"a":61151,"t":"code","b":[173,24,208],"m":"lda","o":"vic_memory"},{"a":61154,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":61156,"t":"code","b":[9,56],"m":"ora","o":"#$38"},{"a":61158,"t":"code","b":[141,24,208],"m":"sta","o":"vic_memory"},{"a":61161,"t":"code","b":[96],"m":"rts"},{"a":61162,"l":"left_masks","c":"Nine masks of the leftmost 0 to 8 pixels of a byte ($00, $80, $C0 ... $FF), read by the horizontal line routines to keep the pixels left of a line's start.","t":"byte","b":[0,128,192,224,240,248,252,254],"x":[63386,63409]},{"a":61170,"t":"byte","b":[255]},{"a":61171,"l":"right_masks","c":"Nine masks of the pixels right of a position ($7F, $3F ... $00, $FF), read by the horizontal line routines to keep the pixels past a line's end.","t":"byte","b":[127,63,31,15,7,3,1,0],"x":[63419,63465]},{"a":61179,"t":"byte","b":[255]},{"a":61180,"l":"bit_values","c":"The eight bit values $01 to $80: the sprite functions ($46-$4B) turn sprite X into its bit with this table.","t":"byte","b":[1,2,4,8,16,32,64,128],"x":[62236,62246,62257,62267,62278,62288]},{"a":61188,"l":"pixel_bits","c":"The bit of each pixel in a byte, left to right ($80 ... $01), then the same inverted ($7F ... $FE), for the vertical line routine.","t":"byte","b":[128,64,32,16,8,4,2,1],"x":[63555]},{"a":61196,"t":"byte","b":[127,191,223,239,247,251,253,254]},{"a":61204,"l":"times_8","c":"Multiples of 8, 0 to 256 ($00-$F8 then $00): the offset of entry X in the icon table, and of column X's byte in a bitmap cell row.","t":"byte","b":[0,8,16,24,32,40,48,56],"x":[62786,62799,62862,62911,62936,63017,63445,63469,64039]},{"a":61212,"t":"byte","b":[64,72,80,88,96,104,112,120]},{"a":61220,"t":"byte","b":[128,136,144,152,160,168,176,184]},{"a":61228,"t":"byte","b":[192,200,208,216,224,232,240,248]},{"a":61236,"t":"byte","b":[0]},{"a":61237,"l":"times_16","c":"Multiples of 16 ($00-$F0): the offset of entry X in the window table at window_table.","t":"byte","b":[0,16,32,48,64,80,96,112],"x":[62836,62965,63972,63989,64059,64175,64194]},{"a":61245,"t":"byte","b":[128,144,160,176,192,208,224,240]},{"a":61253,"l":"row_offsets_40","c":"Twenty-five row offsets in screen memory, 0 to 960 in steps of 40, two bytes each, low byte first (row_times_40 reads from $EF45/$EF46).","t":"byte","b":[0],"x":[60874]},{"a":61254,"l":"row_offsets_40_hi","c":"row_offsets_40 read a byte on: the high byte of each row's offset, and the next row's low byte.","t":"byte","b":[0,40,0,80,0,120,0,160],"x":[60869]},{"a":61262,"t":"byte","b":[0,200,0,240,0,24,1,64]},{"a":61270,"t":"byte","b":[1,104,1,144,1,184,1,224]},{"a":61278,"t":"byte","b":[1,8,2,48,2,88,2,128]},{"a":61286,"t":"byte","b":[2,168,2,208,2,248,2,32]},{"a":61294,"t":"byte","b":[3,72,3,112,3,152,3,192]},{"a":61302,"t":"byte","b":[3]},{"a":61303,"l":"row_offsets_320","c":"Twenty-five row offsets in the bitmap, 0 to 7,680 in steps of 320, two bytes each, low byte first (row_times_320).","t":"byte","b":[0],"x":[60857,64892]},{"a":61304,"l":"row_offsets_320_hi","c":"row_offsets_320 read a byte on: the high byte of each row's offset, and the next row's low byte.","t":"byte","b":[0,64,1,128,2,192,3,0],"x":[60852,64900]},{"a":61312,"t":"byte","b":[5,64,6,128,7,192,8,0]},{"a":61320,"t":"byte","b":[10,64,11,128,12,192,13,0]},{"a":61328,"t":"byte","b":[15,64,16,128,17,192,18,0]},{"a":61336,"t":"byte","b":[20,64,21,128,22,192,23,0]},{"a":61344,"t":"byte","b":[25,64,26,128,27,192,28,0]},{"a":61352,"t":"byte","b":[30]},{"a":61353,"l":"os_init","c":"OS function $00: masks interrupts and sets the machine up from nothing: video bank and bitmap mode (video_setup), the striped screen (clear_screen), an empty window table (reset_windows), an empty icon table (reset_icons), the eight sprites off and their pointers at $0FF8 set to blocks $2E-$35 (sprites_reset), the arrow pointer (init_pointer), every interrupt off (interrupts_off), and the SID's volume at full.","t":"code","b":[120],"m":"sei","x":[60450]},{"a":61354,"t":"code","b":[32,197,238],"m":"jsr","oa":61125,"o":"video_setup"},{"a":61357,"t":"code","b":[32,168,238],"m":"jsr","oa":61096,"o":"clear_screen"},{"a":61360,"t":"code","b":[32,82,250],"m":"jsr","oa":64082,"o":"reset_windows"},{"a":61363,"t":"code","b":[32,155,246],"m":"jsr","oa":63131,"o":"reset_icons"},{"a":61366,"t":"code","b":[32,241,242],"m":"jsr","oa":62193,"o":"sprites_reset"},{"a":61369,"t":"code","b":[32,134,244],"m":"jsr","oa":62598,"o":"init_pointer"},{"a":61372,"t":"code","b":[32,197,239],"m":"jsr","oa":61381,"o":"interrupts_off"},{"a":61375,"t":"code","b":[169,15],"m":"lda","o":"#$0F"},{"a":61377,"t":"code","b":[141,24,212],"m":"sta","o":"sid_filter_mode_volume"},{"a":61380,"t":"code","b":[96],"m":"rts"},{"a":61381,"l":"interrupts_off","c":"Turns off the video chip's raster interrupt and both CIAs' interrupts, and acknowledges any the chips hold.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[61372,61500,61517]},{"a":61383,"t":"code","b":[141,26,208],"m":"sta","o":"vic_irq_enable"},{"a":61386,"t":"code","b":[169,127],"m":"lda","o":"#$7F"},{"a":61388,"t":"code","b":[141,13,220],"m":"sta","o":"cia1_interrupt"},{"a":61391,"t":"code","b":[141,13,221],"m":"sta","o":"cia2_interrupt"},{"a":61394,"t":"code","b":[173,13,221],"m":"lda","o":"cia2_interrupt"},{"a":61397,"t":"code","b":[173,13,220],"m":"lda","o":"cia1_interrupt"},{"a":61400,"t":"code","b":[169,15],"m":"lda","o":"#$0F"},{"a":61402,"t":"code","b":[141,25,208],"m":"sta","o":"vic_irq_status"},{"a":61405,"t":"code","b":[96],"m":"rts"},{"a":61406,"l":"io_in","c":"OS function $0B: $01 = $15, RAM everywhere but the chips at $D000-$DFFF: the game's normal map, with the KERNAL and BASIC switched out.","t":"code","b":[169,21],"m":"lda","o":"#$15","x":[60472,63844,63934]},{"a":61408,"t":"code","b":[133,1],"m":"sta","oa":1,"o":"zpa_01"},{"a":61410,"t":"code","b":[96],"m":"rts"},{"a":61411,"l":"io_out","c":"OS function $0C: $01 = $14, RAM everywhere, the chips switched out too; the window routines use it to read and write the RAM under $D000.","t":"code","b":[169,20],"m":"lda","o":"#$14","x":[60474,63835,63925]},{"a":61413,"t":"code","b":[133,1],"m":"sta","oa":1,"o":"zpa_01"},{"a":61415,"t":"code","b":[96],"m":"rts"},{"a":61416,"l":"screen_on","c":"OS function $0D: turns the display on (bit 4 of $D011) and clears the raster line's bit 8.","t":"code","b":[173,17,208],"m":"lda","o":"vic_control1","x":[60476]},{"a":61419,"t":"code","b":[9,16],"m":"ora","o":"#$10"},{"a":61421,"t":"code","b":[41,127],"m":"and","o":"#$7F"},{"a":61423,"t":"code","b":[141,17,208],"m":"sta","o":"vic_control1"},{"a":61426,"t":"code","b":[96],"m":"rts"},{"a":61427,"l":"screen_off","c":"OS function $0E: blanks the display (bit 4 of $D011 cleared), and clears bit 8 of the raster compare.","t":"code","b":[173,17,208],"m":"lda","o":"vic_control1","x":[60478]},{"a":61430,"t":"code","b":[41,111],"m":"and","o":"#$6F"},{"a":61432,"t":"code","b":[141,17,208],"m":"sta","o":"vic_control1"},{"a":61435,"t":"code","b":[96],"m":"rts"},{"a":61436,"l":"set_border","c":"OS function $0F: sets the border colour to X.","t":"code","b":[142,32,208],"m":"stx","o":"vic_border","x":[60480]},{"a":61439,"t":"code","b":[96],"m":"rts"},{"a":61440,"l":"os_version","c":"OS function $08: returns X = $1F and Y = 0, and changes nothing else; what the two numbers mean is unknown.","t":"code","b":[162,31],"m":"ldx","o":"#$1F","x":[60466]},{"a":61442,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":61444,"t":"code","b":[96],"m":"rts"},{"a":61445,"c":"Unused: a delay of A times wait_x (A in $0B, X = 0 each time), which nothing calls.","t":"code","b":[133,11],"m":"sta","oa":11,"o":"zpa_0B"},{"a":61447,"l":"b_F007","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[61454]},{"a":61449,"t":"code","b":[32,17,240],"m":"jsr","oa":61457,"o":"wait_x"},{"a":61452,"t":"code","b":[198,11],"m":"dec","oa":11,"o":"zpa_0B"},{"a":61454,"t":"code","b":[208,247],"m":"bne","oa":61447,"o":"b_F007"},{"a":61456,"t":"code","b":[96],"m":"rts"},{"a":61457,"l":"wait_x","c":"OS function $09: a delay loop of X times 256 inner turns, about 1.3 ms of a PAL machine for each unit of X (X = 0 counts 256).","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[60468,61449,61463,61896]},{"a":61459,"l":"b_F013","t":"code","b":[136],"m":"dey","x":[61460]},{"a":61460,"t":"code","b":[208,253],"m":"bne","oa":61459,"o":"b_F013"},{"a":61462,"t":"code","b":[202],"m":"dex"},{"a":61463,"t":"code","b":[208,248],"m":"bne","oa":61457,"o":"wait_x"},{"a":61465,"t":"code","b":[96],"m":"rts"},{"a":61466,"c":"Unused: JMP $FC00 (os_dead_stub).","t":"code","b":[76,0,252],"m":"jmp","oa":64512,"o":"os_dead_stub"},{"a":61469,"l":"wait_raster_past","c":"Waits until the raster line is past the value in A: loops while A is at or above $D012's low byte.","t":"code","b":[205,18,208],"m":"cmp","o":"vic_raster","x":[61472,61488]},{"a":61472,"t":"code","b":[176,251],"m":"bcs","oa":61469,"o":"wait_raster_past"},{"a":61474,"t":"code","b":[96],"m":"rts"},{"a":61475,"c":"Unused: waits until the raster is past X and then past Y, which nothing calls.","t":"code","b":[236,18,208],"m":"cpx","o":"vic_raster"},{"a":61478,"t":"code","b":[176,5],"m":"bcs","oa":61485,"o":"r_F02D"},{"a":61480,"l":"b_F028","t":"code","b":[204,18,208],"m":"cpy","o":"vic_raster","x":[61483]},{"a":61483,"t":"code","b":[176,251],"m":"bcs","oa":61480,"o":"b_F028"},{"a":61485,"l":"r_F02D","t":"code","b":[96],"m":"rts","x":[61478]},{"a":61486,"l":"wait_bottom_border","c":"Waits until the raster is past line $FA, in the bottom border, before the pointer or the video bank is changed.","t":"code","b":[169,250],"m":"lda","o":"#$FA","x":[62552,63155]},{"a":61488,"t":"code","b":[76,29,240],"m":"jmp","oa":61469,"o":"wait_raster_past"},{"a":61491,"l":"os_nothing","c":"OS functions $4E-$53: return at once.","t":"code","b":[96],"m":"rts","x":[60606,60608,60610,60612,60614,60616]},{"a":61492,"l":"save_file","c":"OS function $54: saves memory to disk with the KERNAL. Takes six bytes after the call: the name's address, the first address to save and the address after the last; X is the name's length. Masks interrupts, saves zero page (kernal_enter) and jumps to the KERNAL caller at $0700 (disk_save there), which returns to the caller with the KERNAL's carry and A.","t":"code","b":[120],"m":"sei","x":[60618]},{"a":61493,"t":"code","b":[134,37],"m":"stx","oa":37,"o":"zpa_25"},{"a":61495,"t":"code","b":[169,6],"m":"lda","o":"#$06"},{"a":61497,"t":"code","b":[32,210,237],"m":"jsr","oa":60882,"o":"os_inline_args"},{"a":61500,"t":"code","b":[32,197,239],"m":"jsr","oa":61381,"o":"interrupts_off"},{"a":61503,"t":"code","b":[32,154,240],"m":"jsr","oa":61594,"o":"kernal_enter"},{"a":61506,"t":"code","b":[76,0,7],"m":"jmp","oa":1792,"o":"j_0700"},{"a":61509,"l":"load_file","c":"OS function $55: loads a file from drive 8 to the address in its own header, with the KERNAL. Takes two bytes after the call, the name's address; X is the name's length. Masks interrupts, saves zero page and jumps to disk_load at $0700, which returns with the KERNAL's carry (set on an error) and A.","t":"code","b":[120],"m":"sei","x":[60620]},{"a":61510,"t":"code","b":[134,37],"m":"stx","oa":37,"o":"zpa_25"},{"a":61512,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":61514,"t":"code","b":[32,210,237],"m":"jsr","oa":60882,"o":"os_inline_args"},{"a":61517,"t":"code","b":[32,197,239],"m":"jsr","oa":61381,"o":"interrupts_off"},{"a":61520,"t":"code","b":[32,154,240],"m":"jsr","oa":61594,"o":"kernal_enter"},{"a":61523,"t":"code","b":[76,22,7],"m":"jmp","oa":1814,"o":"j_0716"},{"a":61526,"l":"disk_save","c":"Runs at $0700, where install_disk_code copies these 256 bytes: banks the KERNAL in ($01 = $36), sets file 15 on drive 8, secondary address 1 (the call at $0728), names the file ($0732: length $25, name at $1F/$20), and calls SAVE from the address in $21/$22 to the one in $23/$24; then restores zero page ($073C).","t":"code","b":[169,54],"m":"lda","o":"#$36","x":[61682]},{"a":61528,"t":"code","b":[133,1],"m":"sta","oa":1,"o":"zpa_01"},{"a":61530,"t":"code","b":[32,40,7],"m":"jsr","oa":1832,"o":"s_0728"},{"a":61533,"t":"code","b":[32,50,7],"m":"jsr","oa":1842,"o":"s_0732"},{"a":61536,"t":"code","b":[166,35],"m":"ldx","oa":35,"o":"zpa_23"},{"a":61538,"t":"code","b":[164,36],"m":"ldy","oa":36,"o":"zpa_24"},{"a":61540,"t":"code","b":[169,33],"m":"lda","o":"#$21"},{"a":61542,"t":"code","b":[32,216,255],"m":"jsr","oa":65496,"o":"KERNAL_SAVE"},{"a":61545,"t":"code","b":[184],"m":"clv"},{"a":61546,"t":"code","b":[80,38],"m":"bvc","oa":61586,"o":"b_F092"},{"a":61548,"l":"disk_load","c":"At $0716: banks the KERNAL in, sets file 15 on drive 8, secondary address 1, names the file and calls LOAD with A = 0, to the address in the file's header; then restores zero page and returns with the KERNAL's flags and A.","t":"code","b":[169,54],"m":"lda","o":"#$36"},{"a":61550,"t":"code","b":[133,1],"m":"sta","oa":1,"o":"zpa_01"},{"a":61552,"t":"code","b":[32,40,7],"m":"jsr","oa":1832,"o":"s_0728"},{"a":61555,"t":"code","b":[32,50,7],"m":"jsr","oa":1842,"o":"s_0732"},{"a":61558,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":61560,"t":"code","b":[32,213,255],"m":"jsr","oa":65493,"o":"KERNAL_LOAD"},{"a":61563,"t":"code","b":[184],"m":"clv"},{"a":61564,"t":"code","b":[80,20],"m":"bvc","oa":61586,"o":"b_F092"},{"a":61566,"c":"At $0728: SETLFS with file 15, drive 8, secondary address 1.","t":"code","b":[169,15],"m":"lda","o":"#$0F"},{"a":61568,"t":"code","b":[162,8],"m":"ldx","o":"#$08"},{"a":61570,"t":"code","b":[160,1],"m":"ldy","o":"#$01"},{"a":61572,"t":"code","b":[32,186,255],"m":"jsr","oa":65466,"o":"KERNAL_SETLFS"},{"a":61575,"t":"code","b":[96],"m":"rts"},{"a":61576,"c":"At $0732: SETNAM with the length in $25 and the name at $1F/$20.","t":"code","b":[165,37],"m":"lda","oa":37,"o":"zpa_25"},{"a":61578,"t":"code","b":[166,31],"m":"ldx","oa":31,"o":"os_args"},{"a":61580,"t":"code","b":[164,32],"m":"ldy","oa":32,"o":"zpa_20"},{"a":61582,"t":"code","b":[32,189,255],"m":"jsr","oa":65469,"o":"KERNAL_SETNAM"},{"a":61585,"t":"code","b":[96],"m":"rts"},{"a":61586,"l":"b_F092","c":"At $073C: keeps the KERNAL's flags and A while zero page and page 3 go back (kernal_leave), and returns to the caller of save_file or load_file.","t":"code","b":[8],"m":"php","x":[61546,61564]},{"a":61587,"t":"code","b":[72],"m":"pha"},{"a":61588,"t":"code","b":[32,110,7],"m":"jsr","oa":1902,"o":"s_076E"},{"a":61591,"t":"code","b":[104],"m":"pla"},{"a":61592,"t":"code","b":[40],"m":"plp"},{"a":61593,"t":"code","b":[96],"m":"rts"},{"a":61594,"l":"kernal_enter","c":"Called at its own address by save_file and load_file (and present at $0744 in the copy): keeps $02A1/$02A2 in $1A/$1B, copies zero page $01-$FF to $0413-$0511, swaps page 3 with the KERNAL's page 3 kept at $0600 (swap_page3), then sets $90 and $94 to $40 and $91, $9D, $02A1 and $02A2 to zero for the KERNAL.","t":"code","b":[173,161,2],"m":"lda","oa":673,"o":"a_02A1","x":[61503,61520]},{"a":61597,"t":"code","b":[133,26],"m":"sta","oa":26,"o":"zpa_1A"},{"a":61599,"t":"code","b":[173,162,2],"m":"lda","oa":674,"o":"a_02A2"},{"a":61602,"t":"code","b":[133,27],"m":"sta","oa":27,"o":"zpa_1B"},{"a":61604,"t":"code","b":[162,1],"m":"ldx","o":"#$01"},{"a":61606,"l":"b_F0A6","t":"code","b":[181,0],"m":"lda","oa":0,"o":"zpf_00,x","x":[61612]},{"a":61608,"t":"code","b":[157,18,4],"m":"sta","oa":1042,"o":"f_0412,x"},{"a":61611,"t":"code","b":[232],"m":"inx"},{"a":61612,"t":"code","b":[208,248],"m":"bne","oa":61606,"o":"b_F0A6"},{"a":61614,"t":"code","b":[32,134,7],"m":"jsr","oa":1926,"o":"s_0786"},{"a":61617,"t":"code","b":[169,64],"m":"lda","o":"#$40"},{"a":61619,"t":"code","b":[133,144],"m":"sta","oa":144,"o":"zpa_90"},{"a":61621,"t":"code","b":[133,148],"m":"sta","oa":148,"o":"zpa_94"},{"a":61623,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":61625,"t":"code","b":[133,145],"m":"sta","oa":145,"o":"zpa_91"},{"a":61627,"t":"code","b":[133,157],"m":"sta","oa":157,"o":"zpa_9D"},{"a":61629,"t":"code","b":[141,161,2],"m":"sta","oa":673,"o":"a_02A1"},{"a":61632,"t":"code","b":[141,162,2],"m":"sta","oa":674,"o":"a_02A2"},{"a":61635,"t":"code","b":[96],"m":"rts"},{"a":61636,"l":"kernal_leave","c":"At $076E: copies zero page back from $0413-$0511, restores $02A1/$02A2 and swaps page 3 back, so the OS's icon table is at $0300 again.","t":"code","b":[162,1],"m":"ldx","o":"#$01"},{"a":61638,"l":"b_F0C6","t":"code","b":[189,18,4],"m":"lda","oa":1042,"o":"f_0412,x","x":[61644]},{"a":61641,"t":"code","b":[149,0],"m":"sta","oa":0,"o":"zpf_00,x"},{"a":61643,"t":"code","b":[232],"m":"inx"},{"a":61644,"t":"code","b":[208,248],"m":"bne","oa":61638,"o":"b_F0C6"},{"a":61646,"t":"code","b":[165,26],"m":"lda","oa":26,"o":"zpa_1A"},{"a":61648,"t":"code","b":[141,161,2],"m":"sta","oa":673,"o":"a_02A1"},{"a":61651,"t":"code","b":[165,27],"m":"lda","oa":27,"o":"zpa_1B"},{"a":61653,"t":"code","b":[141,162,2],"m":"sta","oa":674,"o":"a_02A2"},{"a":61656,"t":"code","b":[32,134,7],"m":"jsr","oa":1926,"o":"s_0786"},{"a":61659,"t":"code","b":[96],"m":"rts"},{"a":61660,"l":"swap_page3","c":"At $0786: exchanges the 256 bytes at $0300 (the OS's icon table) with those at $0600 (the KERNAL's page 3, vectors included, as install_disk_code kept it), so the KERNAL runs with its own vectors.","t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":61662,"l":"b_F0DE","t":"code","b":[189,0,3],"m":"lda","oa":768,"o":"icon_table,x","x":[61677]},{"a":61665,"t":"code","b":[168],"m":"tay"},{"a":61666,"t":"code","b":[189,0,6],"m":"lda","oa":1536,"o":"f_0600,x"},{"a":61669,"t":"code","b":[157,0,3],"m":"sta","oa":768,"o":"icon_table,x"},{"a":61672,"t":"code","b":[152],"m":"tya"},{"a":61673,"t":"code","b":[157,0,6],"m":"sta","oa":1536,"o":"f_0600,x"},{"a":61676,"t":"code","b":[232],"m":"inx"},{"a":61677,"t":"code","b":[208,239],"m":"bne","oa":61662,"o":"b_F0DE"},{"a":61679,"t":"code","b":[96],"m":"rts"},{"a":61680,"l":"install_disk_code","c":"OS function $56: copies the 256 bytes from disk_save to $0700, and the KERNAL's page 3 ($0300-$03FF) to $0600, before the OS takes page 3 for its icon table. The episode loader calls it once, at start-up.","t":"code","b":[162,0],"m":"ldx","o":"#$00","x":[60622]},{"a":61682,"l":"b_F0F2","t":"code","b":[189,86,240],"m":"lda","oa":61526,"o":"disk_save,x","x":[61695]},{"a":61685,"t":"code","b":[157,0,7],"m":"sta","oa":1792,"o":"j_0700,x"},{"a":61688,"t":"code","b":[189,0,3],"m":"lda","oa":768,"o":"icon_table,x"},{"a":61691,"t":"code","b":[157,0,6],"m":"sta","oa":1536,"o":"f_0600,x"},{"a":61694,"t":"code","b":[232],"m":"inx"},{"a":61695,"t":"code","b":[208,241],"m":"bne","oa":61682,"o":"b_F0F2"},{"a":61697,"t":"code","b":[96],"m":"rts"},{"a":61698,"l":"input_line","c":"OS function $3F: reads a line typed at the keyboard into a buffer. Takes three bytes after the call: the buffer's address and its length. Clears the buffer, flashes a block cursor, takes printable keys (a space only after the first character) up to one fewer than the length, INST/DEL to rub out and RETURN to finish once something is typed; RETURN is stored after the text. Each key is echoed in the current window. Returns the buffer's address in X/Y.","t":"code","b":[169,3],"m":"lda","o":"#$03","x":[60576]},{"a":61700,"t":"code","b":[32,210,237],"m":"jsr","oa":60882,"o":"os_inline_args"},{"a":61703,"t":"code","b":[165,31],"m":"lda","oa":31,"o":"os_args"},{"a":61705,"t":"code","b":[133,24],"m":"sta","oa":24,"o":"zpa_18"},{"a":61707,"t":"code","b":[165,32],"m":"lda","oa":32,"o":"zpa_20"},{"a":61709,"t":"code","b":[133,25],"m":"sta","oa":25,"o":"zpa_19"},{"a":61711,"t":"code","b":[165,33],"m":"lda","oa":33,"o":"zpa_21"},{"a":61713,"t":"code","b":[133,15],"m":"sta","oa":15,"o":"zpa_0F"},{"a":61715,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":61717,"t":"code","b":[164,33],"m":"ldy","oa":33,"o":"zpa_21"},{"a":61719,"l":"b_F117","t":"code","b":[145,24],"m":"sta","oa":24,"o":"(zpa_18),y","x":[61722]},{"a":61721,"t":"code","b":[136],"m":"dey"},{"a":61722,"t":"code","b":[16,251],"m":"bpl","oa":61719,"o":"b_F117"},{"a":61724,"t":"code","b":[32,232,242],"m":"jsr","oa":62184,"o":"reset_cursor_flash"},{"a":61727,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":61729,"t":"code","b":[72],"m":"pha"},{"a":61730,"l":"b_F122","t":"code","b":[32,158,242],"m":"jsr","oa":62110,"o":"cursor_tick","x":[61736,61741,61770]},{"a":61733,"t":"code","b":[32,185,241],"m":"jsr","oa":61881,"o":"read_key"},{"a":61736,"t":"code","b":[144,248],"m":"bcc","oa":61730,"o":"b_F122"},{"a":61738,"t":"code","b":[32,82,241],"m":"jsr","oa":61778,"o":"input_filter"},{"a":61741,"t":"code","b":[144,243],"m":"bcc","oa":61730,"o":"b_F122"},{"a":61743,"t":"code","b":[72],"m":"pha"},{"a":61744,"t":"code","b":[186],"m":"tsx"},{"a":61745,"t":"code","b":[188,2,1],"m":"ldy","oa":258,"o":"f_0102,x"},{"a":61748,"t":"code","b":[145,24],"m":"sta","oa":24,"o":"(zpa_18),y"},{"a":61750,"t":"code","b":[254,2,1],"m":"inc","oa":258,"o":"f_0102,x"},{"a":61753,"t":"code","b":[32,210,242],"m":"jsr","oa":62162,"o":"hide_cursor"},{"a":61756,"t":"code","b":[32,3,236],"m":"jsr","oa":60419,"o":"os_print_char"},{"a":61759,"t":"code","b":[104],"m":"pla"},{"a":61760,"t":"code","b":[201,13],"m":"cmp","o":"#$0D"},{"a":61762,"t":"code","b":[240,8],"m":"beq","oa":61772,"o":"b_F14C"},{"a":61764,"t":"code","b":[186],"m":"tsx"},{"a":61765,"t":"code","b":[189,1,1],"m":"lda","oa":257,"o":"f_0101,x"},{"a":61768,"t":"code","b":[197,15],"m":"cmp","oa":15,"o":"zpa_0F"},{"a":61770,"t":"code","b":[144,214],"m":"bcc","oa":61730,"o":"b_F122"},{"a":61772,"l":"b_F14C","t":"code","b":[104],"m":"pla","x":[61762]},{"a":61773,"t":"code","b":[166,24],"m":"ldx","oa":24,"o":"zpa_18"},{"a":61775,"t":"code","b":[164,25],"m":"ldy","oa":25,"o":"zpa_19"},{"a":61777,"t":"code","b":[96],"m":"rts"},{"a":61778,"l":"input_filter","c":"For input_line: decides what the key in A does to the line whose length is on the stack. RETURN ends it (carry set) unless it is empty; DEL rubs out the last character and moves the text cursor back; a printable key is accepted (carry set) while there is room; the rest, and a space typed first, are refused (carry clear) with control code 7, which prints nothing.","t":"code","b":[186],"m":"tsx","x":[61738]},{"a":61779,"t":"code","b":[201,128],"m":"cmp","o":"#$80"},{"a":61781,"t":"code","b":[176,75],"m":"bcs","oa":61858,"o":"b_F1A2"},{"a":61783,"t":"code","b":[201,13],"m":"cmp","o":"#$0D"},{"a":61785,"t":"code","b":[240,64],"m":"beq","oa":61851,"o":"b_F19B"},{"a":61787,"t":"code","b":[201,32],"m":"cmp","o":"#$20"},{"a":61789,"t":"code","b":[144,67],"m":"bcc","oa":61858,"o":"b_F1A2"},{"a":61791,"t":"code","b":[208,8],"m":"bne","oa":61801,"o":"b_F169"},{"a":61793,"t":"code","b":[188,3,1],"m":"ldy","oa":259,"o":"f_0103,x"},{"a":61796,"t":"code","b":[208,43],"m":"bne","oa":61841,"o":"b_F191"},{"a":61798,"t":"code","b":[76,162,241],"m":"jmp","oa":61858,"o":"b_F1A2"},{"a":61801,"l":"b_F169","t":"code","b":[201,127],"m":"cmp","o":"#$7F","x":[61791]},{"a":61803,"t":"code","b":[208,36],"m":"bne","oa":61841,"o":"b_F191"},{"a":61805,"t":"code","b":[188,3,1],"m":"ldy","oa":259,"o":"f_0103,x"},{"a":61808,"t":"code","b":[240,48],"m":"beq","oa":61858,"o":"b_F1A2"},{"a":61810,"t":"code","b":[222,3,1],"m":"dec","oa":259,"o":"f_0103,x"},{"a":61813,"t":"code","b":[152],"m":"tya"},{"a":61814,"t":"code","b":[72],"m":"pha"},{"a":61815,"t":"code","b":[32,210,242],"m":"jsr","oa":62162,"o":"hide_cursor"},{"a":61818,"t":"code","b":[104],"m":"pla"},{"a":61819,"t":"code","b":[168],"m":"tay"},{"a":61820,"t":"code","b":[136],"m":"dey"},{"a":61821,"t":"code","b":[177,24],"m":"lda","oa":24,"o":"(zpa_18),y"},{"a":61823,"t":"code","b":[72],"m":"pha"},{"a":61824,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":61826,"t":"code","b":[145,24],"m":"sta","oa":24,"o":"(zpa_18),y"},{"a":61828,"t":"code","b":[104],"m":"pla"},{"a":61829,"t":"code","b":[32,146,253],"m":"jsr","oa":64914,"o":"glyph_address"},{"a":61832,"t":"code","b":[165,76],"m":"lda","oa":76,"o":"text_x"},{"a":61834,"t":"code","b":[56],"m":"sec"},{"a":61835,"t":"code","b":[233,8],"m":"sbc","o":"#$08"},{"a":61837,"t":"code","b":[133,76],"m":"sta","oa":76,"o":"text_x"},{"a":61839,"t":"code","b":[24],"m":"clc"},{"a":61840,"t":"code","b":[96],"m":"rts"},{"a":61841,"l":"b_F191","t":"code","b":[188,3,1],"m":"ldy","oa":259,"o":"f_0103,x","x":[61796,61803]},{"a":61844,"t":"code","b":[200],"m":"iny"},{"a":61845,"t":"code","b":[196,15],"m":"cpy","oa":15,"o":"zpa_0F"},{"a":61847,"t":"code","b":[144,7],"m":"bcc","oa":61856,"o":"b_F1A0"},{"a":61849,"t":"code","b":[176,7],"m":"bcs","oa":61858,"o":"b_F1A2"},{"a":61851,"l":"b_F19B","t":"code","b":[188,3,1],"m":"ldy","oa":259,"o":"f_0103,x","x":[61785]},{"a":61854,"t":"code","b":[240,7],"m":"beq","oa":61863,"o":"b_F1A7"},{"a":61856,"l":"b_F1A0","t":"code","b":[56],"m":"sec","x":[61847]},{"a":61857,"t":"code","b":[96],"m":"rts"},{"a":61858,"l":"b_F1A2","t":"code","b":[169,7],"m":"lda","o":"#$07","x":[61781,61789,61798,61808,61849]},{"a":61860,"t":"code","b":[32,1,253],"m":"jsr","oa":64769,"o":"r_FD01"},{"a":61863,"l":"b_F1A7","t":"code","b":[24],"m":"clc","x":[61854]},{"a":61864,"t":"code","b":[96],"m":"rts"},{"a":61865,"l":"keys_before","c":"The keyboard matrix as last read, one byte per row ($FF: nothing held), kept by read_key to see which keys went down since.","t":"byte","b":[253],"x":[61908,61918]},{"a":61866,"l":"a_F1AA","c":"keys_before's second byte, row 1, whose bit 7 is the left SHIFT (key_code reads it).","t":"byte","b":[255,255,255,255,255],"x":[61979]},{"a":61871,"l":"a_F1AF","c":"keys_before's seventh byte, row 6, whose bit 4 is the right SHIFT (key_code reads it).","t":"byte","b":[255,255],"x":[61986]},{"a":61873,"l":"keys_new","c":"The keys pressed since the last read_key, one byte per row, a set bit for each key that went down.","t":"byte","b":[2,0,0,0,0,0,0,0],"x":[61913,61926]},{"a":61881,"l":"read_key","c":"OS function $3E: scans the keyboard's eight rows, each read again after a short wait until two reads agree, and keeps the state in keys_before. Returns the ASCII of the first key that went down since the last call (key_codes) with the carry set, or $FF with the carry clear when none did. Holding a key gives it once.","t":"code","b":[160,7],"m":"ldy","o":"#$07","x":[60574,61733]},{"a":61883,"l":"b_F1BB","t":"code","b":[185,86,242],"m":"lda","oa":62038,"o":"matrix_select,y","x":[61922]},{"a":61886,"t":"code","b":[141,0,220],"m":"sta","o":"cia1_port_a"},{"a":61889,"l":"b_F1C1","t":"code","b":[173,1,220],"m":"lda","o":"cia1_port_b","x":[61904]},{"a":61892,"t":"code","b":[132,19],"m":"sty","oa":19,"o":"zpa_13"},{"a":61894,"t":"code","b":[162,1],"m":"ldx","o":"#$01"},{"a":61896,"t":"code","b":[32,17,240],"m":"jsr","oa":61457,"o":"wait_x"},{"a":61899,"t":"code","b":[164,19],"m":"ldy","oa":19,"o":"zpa_13"},{"a":61901,"t":"code","b":[205,1,220],"m":"cmp","o":"cia1_port_b"},{"a":61904,"t":"code","b":[208,239],"m":"bne","oa":61889,"o":"b_F1C1"},{"a":61906,"t":"code","b":[133,17],"m":"sta","oa":17,"o":"zpa_11"},{"a":61908,"t":"code","b":[25,169,241],"m":"ora","oa":61865,"o":"keys_before,y"},{"a":61911,"t":"code","b":[69,17],"m":"eor","oa":17,"o":"zpa_11"},{"a":61913,"t":"code","b":[153,177,241],"m":"sta","oa":61873,"o":"keys_new,y"},{"a":61916,"t":"code","b":[165,17],"m":"lda","oa":17,"o":"zpa_11"},{"a":61918,"t":"code","b":[153,169,241],"m":"sta","oa":61865,"o":"keys_before,y"},{"a":61921,"t":"code","b":[136],"m":"dey"},{"a":61922,"t":"code","b":[16,215],"m":"bpl","oa":61883,"o":"b_F1BB"},{"a":61924,"t":"code","b":[160,7],"m":"ldy","o":"#$07"},{"a":61926,"l":"b_F1E6","t":"code","b":[185,177,241],"m":"lda","oa":61873,"o":"keys_new,y","x":[61938]},{"a":61929,"t":"code","b":[162,7],"m":"ldx","o":"#$07"},{"a":61931,"l":"b_F1EB","t":"code","b":[10],"m":"asl","o":"a","x":[61935]},{"a":61932,"t":"code","b":[176,10],"m":"bcs","oa":61944,"o":"b_F1F8"},{"a":61934,"l":"j_F1EE","t":"code","b":[202],"m":"dex","x":[61971]},{"a":61935,"t":"code","b":[16,250],"m":"bpl","oa":61931,"o":"b_F1EB"},{"a":61937,"t":"code","b":[136],"m":"dey"},{"a":61938,"t":"code","b":[16,242],"m":"bpl","oa":61926,"o":"b_F1E6"},{"a":61940,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":61942,"t":"code","b":[24],"m":"clc"},{"a":61943,"t":"code","b":[96],"m":"rts"},{"a":61944,"l":"b_F1F8","t":"code","b":[72],"m":"pha","x":[61932]},{"a":61945,"t":"code","b":[134,18],"m":"stx","oa":18,"o":"zpa_12"},{"a":61947,"t":"code","b":[132,19],"m":"sty","oa":19,"o":"zpa_13"},{"a":61949,"t":"code","b":[152],"m":"tya"},{"a":61950,"t":"code","b":[10],"m":"asl","o":"a"},{"a":61951,"t":"code","b":[10],"m":"asl","o":"a"},{"a":61952,"t":"code","b":[10],"m":"asl","o":"a"},{"a":61953,"t":"code","b":[134,26],"m":"stx","oa":26,"o":"zpa_1A"},{"a":61955,"t":"code","b":[24],"m":"clc"},{"a":61956,"t":"code","b":[101,26],"m":"adc","oa":26,"o":"zpa_1A"},{"a":61958,"t":"code","b":[168],"m":"tay"},{"a":61959,"t":"code","b":[32,27,242],"m":"jsr","oa":61979,"o":"key_code"},{"a":61962,"t":"code","b":[201,255],"m":"cmp","o":"#$FF"},{"a":61964,"t":"code","b":[208,8],"m":"bne","oa":61974,"o":"b_F216"},{"a":61966,"t":"code","b":[104],"m":"pla"},{"a":61967,"t":"code","b":[166,18],"m":"ldx","oa":18,"o":"zpa_12"},{"a":61969,"t":"code","b":[164,19],"m":"ldy","oa":19,"o":"zpa_13"},{"a":61971,"t":"code","b":[76,238,241],"m":"jmp","oa":61934,"o":"j_F1EE"},{"a":61974,"l":"b_F216","t":"code","b":[170],"m":"tax","x":[61964]},{"a":61975,"t":"code","b":[104],"m":"pla"},{"a":61976,"t":"code","b":[138],"m":"txa"},{"a":61977,"t":"code","b":[56],"m":"sec"},{"a":61978,"t":"code","b":[96],"m":"rts"},{"a":61979,"l":"key_code","c":"Returns key_codes' entry Y for read_key. It tests whether the left SHIFT ($F1AA bit 7) and right SHIFT ($F1AF bit 4) are held, but both branches read the same table, so SHIFT changes nothing.","t":"code","b":[173,170,241],"m":"lda","oa":61866,"o":"a_F1AA","x":[61959]},{"a":61982,"t":"code","b":[41,128],"m":"and","o":"#$80"},{"a":61984,"t":"code","b":[240,11],"m":"beq","oa":61997,"o":"b_F22D"},{"a":61986,"t":"code","b":[173,175,241],"m":"lda","oa":61871,"o":"a_F1AF"},{"a":61989,"t":"code","b":[41,16],"m":"and","o":"#$10"},{"a":61991,"t":"code","b":[240,4],"m":"beq","oa":61997,"o":"b_F22D"},{"a":61993,"t":"code","b":[185,94,242],"m":"lda","oa":62046,"o":"key_codes,y"},{"a":61996,"t":"code","b":[96],"m":"rts"},{"a":61997,"l":"b_F22D","t":"code","b":[185,94,242],"m":"lda","oa":62046,"o":"key_codes,y","x":[61984,61991]},{"a":62000,"t":"code","b":[96],"m":"rts"},{"a":62001,"l":"key_held","c":"OS function $40: tests one key of the matrix, X = row times 16 plus column. Returns the carry set while that key is held.","t":"code","b":[134,26],"m":"stx","oa":26,"o":"zpa_1A","x":[60578]},{"a":62003,"t":"code","b":[32,71,242],"m":"jsr","oa":62023,"o":"matrix_bit"},{"a":62006,"t":"code","b":[141,0,220],"m":"sta","o":"cia1_port_a"},{"a":62009,"t":"code","b":[32,71,242],"m":"jsr","oa":62023,"o":"matrix_bit"},{"a":62012,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":62014,"t":"code","b":[45,1,220],"m":"and","o":"cia1_port_b"},{"a":62017,"t":"code","b":[240,2],"m":"beq","oa":62021,"o":"b_F245"},{"a":62019,"t":"code","b":[24],"m":"clc"},{"a":62020,"t":"code","b":[96],"m":"rts"},{"a":62021,"l":"b_F245","t":"code","b":[56],"m":"sec","x":[62017]},{"a":62022,"t":"code","b":[96],"m":"rts"},{"a":62023,"l":"matrix_bit","c":"For key_held: takes the next four bits of $1A as a row or column number and returns that line's select mask from matrix_select.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[62003,62009]},{"a":62025,"t":"code","b":[162,4],"m":"ldx","o":"#$04"},{"a":62027,"l":"b_F24B","t":"code","b":[6,26],"m":"asl","oa":26,"o":"zpa_1A","x":[62031]},{"a":62029,"t":"code","b":[42],"m":"rol","o":"a"},{"a":62030,"t":"code","b":[202],"m":"dex"},{"a":62031,"t":"code","b":[208,250],"m":"bne","oa":62027,"o":"b_F24B"},{"a":62033,"t":"code","b":[168],"m":"tay"},{"a":62034,"t":"code","b":[185,86,242],"m":"lda","oa":62038,"o":"matrix_select,y"},{"a":62037,"t":"code","b":[96],"m":"rts"},{"a":62038,"l":"matrix_select","c":"The eight one-line-low masks ($FE, $FD ... $7F) written to CIA 1 port A to read one row of the keyboard.","t":"byte","b":[254,253,251,247,239,223,191,127],"x":[61883,62034]},{"a":62046,"l":"key_codes","c":"The keyboard matrix as ASCII, row by row, eight keys a row: INST/DEL $7F, RETURN $0D, the left/right cursor key $09, F7 $81, F1 $82, F3 $83, F5 $84, the up/down cursor key $10, then the letters, digits and punctuation; the left arrow is $08, HOME $1E, and the SHIFTs, CTRL, C= and STOP $FF (not keys).","t":"byte","b":[127,13,9,129,130,131,132,16],"x":[61993,61997]},{"a":62054,"t":"byte","b":[51,87,65,52,90,83,69,255]},{"a":62062,"t":"byte","b":[53,82,68,54,67,70,84,88]},{"a":62070,"t":"byte","b":[55,89,71,56,66,72,85,86]},{"a":62078,"t":"byte","b":[57,73,74,48,77,75,79,78]},{"a":62086,"t":"byte","b":[43,80,76,45,46,58,64,44]},{"a":62094,"t":"byte","b":[96,42,59,30,255,61,94,47]},{"a":62102,"t":"byte","b":[49,8,255,50,32,255,81,255]},{"a":62110,"l":"cursor_tick","c":"For input_line: every 19th call flips the cursor between shown and hidden ($54) and redraws it.","t":"code","b":[198,83],"m":"dec","oa":83,"o":"cursor_count","x":[61730]},{"a":62112,"t":"code","b":[208,13],"m":"bne","oa":62127,"o":"r_F2AF"},{"a":62114,"t":"code","b":[169,19],"m":"lda","o":"#$13"},{"a":62116,"t":"code","b":[133,83],"m":"sta","oa":83,"o":"cursor_count"},{"a":62118,"t":"code","b":[165,84],"m":"lda","oa":84,"o":"cursor_on"},{"a":62120,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":62122,"t":"code","b":[133,84],"m":"sta","oa":84,"o":"cursor_on"},{"a":62124,"t":"code","b":[32,176,242],"m":"jsr","oa":62128,"o":"draw_cursor"},{"a":62127,"l":"r_F2AF","t":"code","b":[96],"m":"rts","x":[62112]},{"a":62128,"l":"draw_cursor","c":"Prints a block ($61) or a space at the text cursor, depending on $54, and moves the cursor back where it was (control code 9).","t":"code","b":[165,76],"m":"lda","oa":76,"o":"text_x","x":[62124,62157,62167]},{"a":62130,"t":"code","b":[72],"m":"pha"},{"a":62131,"t":"code","b":[165,84],"m":"lda","oa":84,"o":"cursor_on"},{"a":62133,"t":"code","b":[208,6],"m":"bne","oa":62141,"o":"b_F2BD"},{"a":62135,"t":"code","b":[32,226,242],"m":"jsr","oa":62178,"o":"print_space"},{"a":62138,"t":"code","b":[76,192,242],"m":"jmp","oa":62144,"o":"j_F2C0"},{"a":62141,"l":"b_F2BD","t":"code","b":[32,220,242],"m":"jsr","oa":62172,"o":"print_block","x":[62133]},{"a":62144,"l":"j_F2C0","t":"code","b":[104],"m":"pla","x":[62138]},{"a":62145,"t":"code","b":[170],"m":"tax"},{"a":62146,"t":"code","b":[169,9],"m":"lda","o":"#$09"},{"a":62148,"t":"code","b":[32,244,251],"m":"jsr","oa":64500,"o":"print_char"},{"a":62151,"t":"code","b":[96],"m":"rts"},{"a":62152,"c":"Unused: shows the block cursor at once.","t":"code","b":[72],"m":"pha"},{"a":62153,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":62155,"t":"code","b":[133,84],"m":"sta","oa":84,"o":"cursor_on"},{"a":62157,"t":"code","b":[32,176,242],"m":"jsr","oa":62128,"o":"draw_cursor"},{"a":62160,"t":"code","b":[104],"m":"pla"},{"a":62161,"t":"code","b":[96],"m":"rts"},{"a":62162,"l":"hide_cursor","c":"For input_line: rubs out the block cursor before a key is echoed.","t":"code","b":[72],"m":"pha","x":[61753,61815]},{"a":62163,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":62165,"t":"code","b":[133,84],"m":"sta","oa":84,"o":"cursor_on"},{"a":62167,"t":"code","b":[32,176,242],"m":"jsr","oa":62128,"o":"draw_cursor"},{"a":62170,"t":"code","b":[104],"m":"pla"},{"a":62171,"t":"code","b":[96],"m":"rts"},{"a":62172,"l":"print_block","c":"Prints character $61, the solid block of the cursor.","t":"code","b":[169,97],"m":"lda","o":"#$61","x":[62141]},{"a":62174,"t":"code","b":[32,244,251],"m":"jsr","oa":64500,"o":"print_char"},{"a":62177,"t":"code","b":[96],"m":"rts"},{"a":62178,"l":"print_space","c":"Prints a space.","t":"code","b":[169,32],"m":"lda","o":"#$20","x":[62135]},{"a":62180,"t":"code","b":[32,244,251],"m":"jsr","oa":64500,"o":"print_char"},{"a":62183,"t":"code","b":[96],"m":"rts"},{"a":62184,"l":"reset_cursor_flash","c":"Starts the cursor's flash: counter 1, hidden.","t":"code","b":[169,1],"m":"lda","o":"#$01","x":[61724]},{"a":62186,"t":"code","b":[133,83],"m":"sta","oa":83,"o":"cursor_count"},{"a":62188,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":62190,"t":"code","b":[133,84],"m":"sta","oa":84,"o":"cursor_on"},{"a":62192,"t":"code","b":[96],"m":"rts"},{"a":62193,"l":"sprites_reset","c":"Turns every sprite off and zeroes the sprite positions and $D010, points the eight sprites at blocks $2E-$35 ($0B80-$0D7F in bank 0) through the pointers at $0FF8, and clears their expansion, multicolour and priority bits.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[61366]},{"a":62195,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":62198,"t":"code","b":[162,16],"m":"ldx","o":"#$10"},{"a":62200,"l":"b_F2F8","t":"code","b":[157,0,208],"m":"sta","o":"vic_sprite0_x,x","x":[62204]},{"a":62203,"t":"code","b":[202],"m":"dex"},{"a":62204,"t":"code","b":[16,250],"m":"bpl","oa":62200,"o":"b_F2F8"},{"a":62206,"t":"code","b":[169,46],"m":"lda","o":"#$2E"},{"a":62208,"t":"code","b":[24],"m":"clc"},{"a":62209,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":62211,"l":"b_F303","t":"code","b":[157,248,15],"m":"sta","oa":4088,"o":"f_0FF8,x","x":[62219]},{"a":62214,"t":"code","b":[105,1],"m":"adc","o":"#$01"},{"a":62216,"t":"code","b":[232],"m":"inx"},{"a":62217,"t":"code","b":[224,8],"m":"cpx","o":"#$08"},{"a":62219,"t":"code","b":[208,246],"m":"bne","oa":62211,"o":"b_F303"},{"a":62221,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":62223,"t":"code","b":[141,23,208],"m":"sta","o":"vic_sprite_expand_y"},{"a":62226,"t":"code","b":[141,29,208],"m":"sta","o":"vic_sprite_expand_x"},{"a":62229,"t":"code","b":[141,28,208],"m":"sta","o":"vic_sprite_multicolour"},{"a":62232,"t":"code","b":[141,27,208],"m":"sta","o":"vic_sprite_priority"},{"a":62235,"t":"code","b":[96],"m":"rts"},{"a":62236,"l":"sprite_on","c":"OS function $46: turns sprite X on.","t":"code","b":[189,252,238],"m":"lda","oa":61180,"o":"bit_values,x","x":[60590]},{"a":62239,"t":"code","b":[13,21,208],"m":"ora","o":"vic_sprite_enable"},{"a":62242,"l":"j_F322","t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable","x":[62254]},{"a":62245,"t":"code","b":[96],"m":"rts"},{"a":62246,"l":"sprite_off","c":"OS function $47: turns sprite X off.","t":"code","b":[189,252,238],"m":"lda","oa":61180,"o":"bit_values,x","x":[60592]},{"a":62249,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":62251,"t":"code","b":[45,21,208],"m":"and","o":"vic_sprite_enable"},{"a":62254,"t":"code","b":[76,34,243],"m":"jmp","oa":62242,"o":"j_F322"},{"a":62257,"l":"sprite_wide","c":"OS function $48: doubles sprite X's width.","t":"code","b":[189,252,238],"m":"lda","oa":61180,"o":"bit_values,x","x":[60594]},{"a":62260,"t":"code","b":[13,29,208],"m":"ora","o":"vic_sprite_expand_x"},{"a":62263,"l":"j_F337","t":"code","b":[141,29,208],"m":"sta","o":"vic_sprite_expand_x","x":[62275]},{"a":62266,"t":"code","b":[96],"m":"rts"},{"a":62267,"l":"sprite_narrow","c":"OS function $49: returns sprite X to normal width.","t":"code","b":[189,252,238],"m":"lda","oa":61180,"o":"bit_values,x","x":[60596]},{"a":62270,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":62272,"t":"code","b":[45,29,208],"m":"and","o":"vic_sprite_expand_x"},{"a":62275,"t":"code","b":[76,55,243],"m":"jmp","oa":62263,"o":"j_F337"},{"a":62278,"l":"sprite_tall","c":"OS function $4A: doubles sprite X's height.","t":"code","b":[189,252,238],"m":"lda","oa":61180,"o":"bit_values,x","x":[60598]},{"a":62281,"t":"code","b":[13,23,208],"m":"ora","o":"vic_sprite_expand_y"},{"a":62284,"l":"j_F34C","t":"code","b":[141,23,208],"m":"sta","o":"vic_sprite_expand_y","x":[62296]},{"a":62287,"t":"code","b":[96],"m":"rts"},{"a":62288,"l":"sprite_short","c":"OS function $4B: returns sprite X to normal height.","t":"code","b":[189,252,238],"m":"lda","oa":61180,"o":"bit_values,x","x":[60600]},{"a":62291,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":62293,"t":"code","b":[45,23,208],"m":"and","o":"vic_sprite_expand_y"},{"a":62296,"t":"code","b":[76,76,243],"m":"jmp","oa":62284,"o":"j_F34C"},{"a":62299,"l":"sprite_colour","c":"OS function $4C: sets sprite X's colour to Y.","t":"code","b":[152],"m":"tya","x":[60602,62313]},{"a":62300,"t":"code","b":[157,39,208],"m":"sta","o":"vic_sprite0_colour,x"},{"a":62303,"t":"code","b":[96],"m":"rts"},{"a":62304,"l":"sprite_shape","c":"OS function $4D: takes four bytes after the call (the shape's address, a colour and a sprite number) and copies the 64-byte shape into that sprite's block (sprite_blocks) and sets its colour.","t":"code","b":[169,4],"m":"lda","o":"#$04","x":[60604]},{"a":62306,"t":"code","b":[32,210,237],"m":"jsr","oa":60882,"o":"os_inline_args"},{"a":62309,"t":"code","b":[166,34],"m":"ldx","oa":34,"o":"zpa_22"},{"a":62311,"t":"code","b":[164,33],"m":"ldy","oa":33,"o":"zpa_21"},{"a":62313,"t":"code","b":[32,91,243],"m":"jsr","oa":62299,"o":"sprite_colour"},{"a":62316,"t":"code","b":[165,31],"m":"lda","oa":31,"o":"os_args"},{"a":62318,"t":"code","b":[133,22],"m":"sta","oa":22,"o":"zpa_16"},{"a":62320,"t":"code","b":[165,32],"m":"lda","oa":32,"o":"zpa_20"},{"a":62322,"t":"code","b":[133,23],"m":"sta","oa":23,"o":"zpa_17"},{"a":62324,"t":"code","b":[6,34],"m":"asl","oa":34,"o":"zpa_22"},{"a":62326,"t":"code","b":[166,34],"m":"ldx","oa":34,"o":"zpa_22"},{"a":62328,"t":"code","b":[189,142,243],"m":"lda","oa":62350,"o":"sprite_blocks,x"},{"a":62331,"t":"code","b":[133,20],"m":"sta","oa":20,"o":"zpa_14"},{"a":62333,"t":"code","b":[189,143,243],"m":"lda","oa":62351,"o":"sprite_blocks_hi,x"},{"a":62336,"t":"code","b":[133,21],"m":"sta","oa":21,"o":"zpa_15"},{"a":62338,"t":"code","b":[169,64],"m":"lda","o":"#$40"},{"a":62340,"t":"code","b":[133,11],"m":"sta","oa":11,"o":"zpa_0B"},{"a":62342,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":62344,"t":"code","b":[133,12],"m":"sta","oa":12,"o":"zpa_0C"},{"a":62346,"t":"code","b":[32,2,238],"m":"jsr","oa":60930,"o":"copy_block"},{"a":62349,"t":"code","b":[96],"m":"rts"},{"a":62350,"l":"sprite_blocks","c":"Where each sprite's 64-byte shape goes, sprites 0-7: $0B80, $0BC0, $0B40, $0B00, $0AC0, $0A80, $0A40, $0A00. Only the first two agree with the pointers sprites_reset sets.","t":"byte","b":[128],"x":[62328]},{"a":62351,"l":"sprite_blocks_hi","c":"sprite_blocks read a byte on, for each address's high byte.","t":"byte","b":[11,192,11,64,11,0,11,192],"x":[62333]},{"a":62359,"t":"byte","b":[10,128,10,64,10,0,10]},{"a":62366,"l":"a_F39E","c":"OS function $0A: jumps to os_dead_stub.","t":"code","b":[76,0,252],"m":"jmp","oa":64512,"o":"os_dead_stub","x":[60470]},{"a":62369,"l":"pointer_arrow","c":"OS function $34: makes the pointer the OS's own arrow: copies the two 64-byte shapes at arrow_shapes to sprite blocks $2E and $2F ($0B80) for sprites 0 and 1, yellow and black, with the hot spot three pixels in and two down, at the arrow's tip.","t":"code","b":[169,144],"m":"lda","o":"#$90","x":[60554,62604]},{"a":62371,"t":"code","b":[133,31],"m":"sta","oa":31,"o":"os_args"},{"a":62373,"t":"code","b":[169,244],"m":"lda","o":"#$F4"},{"a":62375,"t":"code","b":[133,32],"m":"sta","oa":32,"o":"zpa_20"},{"a":62377,"t":"code","b":[169,7],"m":"lda","o":"#$07"},{"a":62379,"t":"code","b":[133,33],"m":"sta","oa":33,"o":"zpa_21"},{"a":62381,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":62383,"t":"code","b":[133,34],"m":"sta","oa":34,"o":"zpa_22"},{"a":62385,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":62387,"t":"code","b":[133,35],"m":"sta","oa":35,"o":"zpa_23"},{"a":62389,"t":"code","b":[169,2],"m":"lda","o":"#$02"},{"a":62391,"t":"code","b":[133,36],"m":"sta","oa":36,"o":"zpa_24"},{"a":62393,"t":"code","b":[76,193,243],"m":"jmp","oa":62401,"o":"j_F3C1"},{"a":62396,"l":"pointer_shape","c":"OS function $35: makes the pointer a pair of sprites of the caller's own: takes six bytes after the call (the address of two 64-byte shapes, the two colours, the hot spot's x and y) and installs them in sprites 0 and 1 as pointer_arrow does.","t":"code","b":[169,6],"m":"lda","o":"#$06","x":[60556]},{"a":62398,"t":"code","b":[32,210,237],"m":"jsr","oa":60882,"o":"os_inline_args"},{"a":62401,"l":"j_F3C1","t":"code","b":[165,31],"m":"lda","oa":31,"o":"os_args","x":[62393]},{"a":62403,"t":"code","b":[133,22],"m":"sta","oa":22,"o":"zpa_16"},{"a":62405,"t":"code","b":[165,32],"m":"lda","oa":32,"o":"zpa_20"},{"a":62407,"t":"code","b":[133,23],"m":"sta","oa":23,"o":"zpa_17"},{"a":62409,"t":"code","b":[169,128],"m":"lda","o":"#$80"},{"a":62411,"t":"code","b":[133,20],"m":"sta","oa":20,"o":"zpa_14"},{"a":62413,"t":"code","b":[169,11],"m":"lda","o":"#$0B"},{"a":62415,"t":"code","b":[133,21],"m":"sta","oa":21,"o":"zpa_15"},{"a":62417,"t":"code","b":[169,128],"m":"lda","o":"#$80"},{"a":62419,"t":"code","b":[133,11],"m":"sta","oa":11,"o":"zpa_0B"},{"a":62421,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":62423,"t":"code","b":[133,12],"m":"sta","oa":12,"o":"zpa_0C"},{"a":62425,"t":"code","b":[32,2,238],"m":"jsr","oa":60930,"o":"copy_block"},{"a":62428,"t":"code","b":[165,33],"m":"lda","oa":33,"o":"zpa_21"},{"a":62430,"t":"code","b":[141,39,208],"m":"sta","o":"vic_sprite0_colour"},{"a":62433,"t":"code","b":[165,34],"m":"lda","oa":34,"o":"zpa_22"},{"a":62435,"t":"code","b":[141,40,208],"m":"sta","o":"vic_sprite1_colour"},{"a":62438,"t":"code","b":[165,35],"m":"lda","oa":35,"o":"zpa_23"},{"a":62440,"t":"code","b":[133,85],"m":"sta","oa":85,"o":"pointer_hot_x"},{"a":62442,"t":"code","b":[165,36],"m":"lda","oa":36,"o":"zpa_24"},{"a":62444,"t":"code","b":[133,86],"m":"sta","oa":86,"o":"pointer_hot_y"},{"a":62446,"t":"code","b":[169,46],"m":"lda","o":"#$2E"},{"a":62448,"t":"code","b":[141,248,15],"m":"sta","oa":4088,"o":"f_0FF8"},{"a":62451,"t":"code","b":[169,47],"m":"lda","o":"#$2F"},{"a":62453,"t":"code","b":[141,249,15],"m":"sta","oa":4089,"o":"a_0FF9"},{"a":62456,"t":"code","b":[96],"m":"rts"},{"a":62457,"l":"pointer_show","c":"OS function $36: turns sprites 0 and 1, the pointer, on.","t":"code","b":[173,21,208],"m":"lda","o":"vic_sprite_enable","x":[60558]},{"a":62460,"t":"code","b":[9,3],"m":"ora","o":"#$03"},{"a":62462,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":62465,"t":"code","b":[96],"m":"rts"},{"a":62466,"l":"pointer_hide","c":"OS function $37: turns sprites 0-5 off, the pointer with them, and leaves 6 and 7.","t":"code","b":[173,21,208],"m":"lda","o":"vic_sprite_enable","x":[60560]},{"a":62469,"t":"code","b":[41,192],"m":"and","o":"#$C0"},{"a":62471,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":62474,"t":"code","b":[96],"m":"rts"},{"a":62475,"c":"Unused: puts the pointer back where pointer_move last put it, from the copy in $57-$59.","t":"code","b":[165,87],"m":"lda","oa":87,"o":"pointer_x"},{"a":62477,"t":"code","b":[133,31],"m":"sta","oa":31,"o":"os_args"},{"a":62479,"t":"code","b":[165,88],"m":"lda","oa":88,"o":"zpa_58"},{"a":62481,"t":"code","b":[133,32],"m":"sta","oa":32,"o":"zpa_20"},{"a":62483,"t":"code","b":[165,89],"m":"lda","oa":89,"o":"zpa_59"},{"a":62485,"t":"code","b":[133,33],"m":"sta","oa":33,"o":"zpa_21"},{"a":62487,"t":"code","b":[76,43,244],"m":"jmp","oa":62507,"o":"j_F42B"},{"a":62490,"l":"pointer_move","c":"OS function $38: moves the pointer. Takes three bytes after the call: x (two bytes, 0-319) and y in screen pixels, kept in $57-$59. Adds the sprite origin (24, 50), takes off the hot spot, waits for the bottom border and sets both sprites' positions and their x high bits.","t":"code","b":[169,3],"m":"lda","o":"#$03","x":[60562]},{"a":62492,"t":"code","b":[32,210,237],"m":"jsr","oa":60882,"o":"os_inline_args"},{"a":62495,"t":"code","b":[165,31],"m":"lda","oa":31,"o":"os_args"},{"a":62497,"t":"code","b":[133,87],"m":"sta","oa":87,"o":"pointer_x"},{"a":62499,"t":"code","b":[165,32],"m":"lda","oa":32,"o":"zpa_20"},{"a":62501,"t":"code","b":[133,88],"m":"sta","oa":88,"o":"zpa_58"},{"a":62503,"t":"code","b":[165,33],"m":"lda","oa":33,"o":"zpa_21"},{"a":62505,"t":"code","b":[133,89],"m":"sta","oa":89,"o":"zpa_59"},{"a":62507,"l":"j_F42B","t":"code","b":[24],"m":"clc","x":[62487]},{"a":62508,"t":"code","b":[165,31],"m":"lda","oa":31,"o":"os_args"},{"a":62510,"t":"code","b":[105,24],"m":"adc","o":"#$18"},{"a":62512,"t":"code","b":[133,31],"m":"sta","oa":31,"o":"os_args"},{"a":62514,"t":"code","b":[165,32],"m":"lda","oa":32,"o":"zpa_20"},{"a":62516,"t":"code","b":[105,0],"m":"adc","o":"#$00"},{"a":62518,"t":"code","b":[133,32],"m":"sta","oa":32,"o":"zpa_20"},{"a":62520,"t":"code","b":[165,33],"m":"lda","oa":33,"o":"zpa_21"},{"a":62522,"t":"code","b":[24],"m":"clc"},{"a":62523,"t":"code","b":[105,50],"m":"adc","o":"#$32"},{"a":62525,"t":"code","b":[133,33],"m":"sta","oa":33,"o":"zpa_21"},{"a":62527,"t":"code","b":[166,32],"m":"ldx","oa":32,"o":"zpa_20"},{"a":62529,"t":"code","b":[165,31],"m":"lda","oa":31,"o":"os_args"},{"a":62531,"t":"code","b":[56],"m":"sec"},{"a":62532,"t":"code","b":[229,85],"m":"sbc","oa":85,"o":"pointer_hot_x"},{"a":62534,"t":"code","b":[133,31],"m":"sta","oa":31,"o":"os_args"},{"a":62536,"t":"code","b":[176,1],"m":"bcs","oa":62539,"o":"b_F44B"},{"a":62538,"t":"code","b":[202],"m":"dex"},{"a":62539,"l":"b_F44B","t":"code","b":[138],"m":"txa","x":[62536]},{"a":62540,"t":"code","b":[32,113,244],"m":"jsr","oa":62577,"o":"x_high_bits"},{"a":62543,"t":"code","b":[133,32],"m":"sta","oa":32,"o":"zpa_20"},{"a":62545,"t":"code","b":[165,33],"m":"lda","oa":33,"o":"zpa_21"},{"a":62547,"t":"code","b":[56],"m":"sec"},{"a":62548,"t":"code","b":[229,86],"m":"sbc","oa":86,"o":"pointer_hot_y"},{"a":62550,"t":"code","b":[133,33],"m":"sta","oa":33,"o":"zpa_21"},{"a":62552,"t":"code","b":[32,46,240],"m":"jsr","oa":61486,"o":"wait_bottom_border"},{"a":62555,"t":"code","b":[165,33],"m":"lda","oa":33,"o":"zpa_21"},{"a":62557,"t":"code","b":[141,1,208],"m":"sta","o":"vic_sprite0_y"},{"a":62560,"t":"code","b":[141,3,208],"m":"sta","o":"vic_sprite1_y"},{"a":62563,"t":"code","b":[165,31],"m":"lda","oa":31,"o":"os_args"},{"a":62565,"t":"code","b":[141,0,208],"m":"sta","o":"vic_sprite0_x"},{"a":62568,"t":"code","b":[141,2,208],"m":"sta","o":"vic_sprite1_x"},{"a":62571,"t":"code","b":[165,32],"m":"lda","oa":32,"o":"zpa_20"},{"a":62573,"t":"code","b":[141,16,208],"m":"sta","o":"vic_sprite_x_msb"},{"a":62576,"t":"code","b":[96],"m":"rts"},{"a":62577,"l":"x_high_bits","c":"Returns $D010 with sprites 0 and 1's x high bits both set to bit 0 of A.","t":"code","b":[41,1],"m":"and","o":"#$01","x":[62540]},{"a":62579,"t":"code","b":[133,17],"m":"sta","oa":17,"o":"zpa_11"},{"a":62581,"t":"code","b":[6,17],"m":"asl","oa":17,"o":"zpa_11"},{"a":62583,"t":"code","b":[5,17],"m":"ora","oa":17,"o":"zpa_11"},{"a":62585,"t":"code","b":[133,17],"m":"sta","oa":17,"o":"zpa_11"},{"a":62587,"t":"code","b":[173,16,208],"m":"lda","o":"vic_sprite_x_msb"},{"a":62590,"t":"code","b":[41,252],"m":"and","o":"#$FC"},{"a":62592,"t":"code","b":[5,17],"m":"ora","oa":17,"o":"zpa_11"},{"a":62594,"t":"code","b":[96],"m":"rts"},{"a":62595,"l":"a_F483","c":"OS function $39: jumps to os_dead_stub.","t":"code","b":[76,0,252],"m":"jmp","oa":64512,"o":"os_dead_stub","x":[60564]},{"a":62598,"l":"init_pointer","c":"OS function $06: sets $5A and $5B to $FF and installs the arrow pointer (pointer_arrow).","t":"code","b":[169,255],"m":"lda","o":"#$FF","x":[60462,61369]},{"a":62600,"t":"code","b":[133,91],"m":"sta","oa":91,"o":"zpa_5B"},{"a":62602,"t":"code","b":[133,90],"m":"sta","oa":90,"o":"zpa_5A"},{"a":62604,"t":"code","b":[32,161,243],"m":"jsr","oa":62369,"o":"pointer_arrow"},{"a":62607,"t":"code","b":[96],"m":"rts"},{"a":62608,"l":"arrow_shapes","c":"The arrow pointer's two sprite shapes, 64 bytes each: an arrow pointing up and to the left at $F490, drawn yellow, and a copy a pixel larger all round at $F4D0, drawn black behind it as its outline. The episodes replace it with a hand of their own (pointer_shape).","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":62616,"t":"byte","b":[0,8,0,0,12,0,0,14]},{"a":62624,"t":"byte","b":[0,0,15,0,0,15,128,0]},{"a":62632,"t":"byte","b":[15,192,0,15,224,0,15,0]},{"a":62640,"t":"byte","b":[0,13,128,0,9,128,0,0]},{"a":62648,"t":"byte","b":[192,0,0,192,0,0,96,0]},{"a":62656,"t":"byte","b":[0,112,0,0,56,0,0,24]},{"a":62664,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":62672,"t":"byte","b":[0,0,0,0,0,0,28,0]},{"a":62680,"t":"byte","b":[0,30,0,0,31,0,0,31]},{"a":62688,"t":"byte","b":[128,0,31,192,0,31,224,0]},{"a":62696,"t":"byte","b":[31,240,0,31,240,0,31,240]},{"a":62704,"t":"byte","b":[0,31,192,0,27,224,0,1]},{"a":62712,"t":"byte","b":[224,0,1,240,0,1,240,0]},{"a":62720,"t":"byte","b":[0,248,0,0,248,0,0,124]},{"a":62728,"t":"byte","b":[0,0,60,0,0,0,0,0]},{"a":62736,"c":"Six JMP $FC00 instructions (os_dead_stub), the bodies of six functions left unwritten; nothing jumps here.","t":"byte","b":[76,0,252,76,0,252,76,0]},{"a":62744,"t":"byte","b":[252,76,0,252,76,0,252,76]},{"a":62752,"t":"byte","b":[0,252]},{"a":62754,"l":"add_icon_here","c":"OS function $2D: puts an icon in the current window. Takes seven bytes after the call (x, y, width and height in cells within the window, the address of its picture and its colour) and goes on as add_icon does.","t":"code","b":[169,7],"m":"lda","o":"#$07","x":[60540]},{"a":62756,"t":"code","b":[32,210,237],"m":"jsr","oa":60882,"o":"os_inline_args"},{"a":62759,"t":"code","b":[165,78],"m":"lda","oa":78,"o":"current_win"},{"a":62761,"t":"code","b":[133,38],"m":"sta","oa":38,"o":"zpa_26"},{"a":62763,"t":"code","b":[76,51,245],"m":"jmp","oa":62771,"o":"j_F533"},{"a":62766,"l":"add_icon","c":"OS function $2E: puts an icon on the screen. Takes eight bytes after the call: x, y, width, height (cells, relative to the window's inside), the address of the picture (rows of width bytes, top to bottom), the colour byte for its cells, and the window it belongs to ($10: the whole screen). Finds a free entry in icon_table, stores it and draws the picture. Returns its number in A (0-31), or $FF with the N flag set when all 32 are taken.","t":"code","b":[169,8],"m":"lda","o":"#$08","x":[60542]},{"a":62768,"t":"code","b":[32,210,237],"m":"jsr","oa":60882,"o":"os_inline_args"},{"a":62771,"l":"j_F533","t":"code","b":[32,166,245],"m":"jsr","oa":62886,"o":"find_free_icon","x":[62763]},{"a":62774,"t":"code","b":[16,1],"m":"bpl","oa":62777,"o":"b_F539"},{"a":62776,"t":"code","b":[96],"m":"rts"},{"a":62777,"l":"b_F539","t":"code","b":[72],"m":"pha","x":[62774]},{"a":62778,"t":"code","b":[32,190,245],"m":"jsr","oa":62910,"o":"store_icon"},{"a":62781,"t":"code","b":[32,233,245],"m":"jsr","oa":62953,"o":"draw_icon"},{"a":62784,"t":"code","b":[104],"m":"pla"},{"a":62785,"t":"code","b":[96],"m":"rts"},{"a":62786,"l":"forget_icon","c":"OS function $2B: frees icon X's entry without touching the screen.","t":"code","b":[188,20,239],"m":"ldy","oa":61204,"o":"times_8,x","x":[60536]},{"a":62789,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":62791,"t":"code","b":[153,7,3],"m":"sta","oa":775,"o":"f_0307,y"},{"a":62794,"t":"code","b":[96],"m":"rts"},{"a":62795,"l":"forget_window_icons","c":"OS function $2C: frees the entry of every icon belonging to window X, without touching the screen.","t":"code","b":[134,18],"m":"stx","oa":18,"o":"zpa_12","x":[60538]},{"a":62797,"t":"code","b":[162,31],"m":"ldx","o":"#$1F"},{"a":62799,"l":"b_F54F","t":"code","b":[188,20,239],"m":"ldy","oa":61204,"o":"times_8,x","x":[62813]},{"a":62802,"t":"code","b":[185,7,3],"m":"lda","oa":775,"o":"f_0307,y"},{"a":62805,"t":"code","b":[197,18],"m":"cmp","oa":18,"o":"zpa_12"},{"a":62807,"t":"code","b":[208,3],"m":"bne","oa":62812,"o":"b_F55C"},{"a":62809,"t":"code","b":[32,96,245],"m":"jsr","oa":62816,"o":"free_icon_entry"},{"a":62812,"l":"b_F55C","t":"code","b":[202],"m":"dex","x":[62807]},{"a":62813,"t":"code","b":[16,240],"m":"bpl","oa":62799,"o":"b_F54F"},{"a":62815,"t":"code","b":[96],"m":"rts"},{"a":62816,"l":"free_icon_entry","c":"Marks the icon entry at offset Y as free.","t":"code","b":[169,255],"m":"lda","o":"#$FF","x":[62809]},{"a":62818,"t":"code","b":[153,7,3],"m":"sta","oa":775,"o":"f_0307,y"},{"a":62821,"t":"code","b":[96],"m":"rts"},{"a":62822,"l":"erase_icon","c":"OS function $2F: rubs icon X off the screen, filling its cells with its window's own pattern and colour (or the screen's background, for window $10), and frees its entry.","t":"code","b":[138],"m":"txa","x":[60544,63120]},{"a":62823,"t":"code","b":[72],"m":"pha"},{"a":62824,"t":"code","b":[32,215,245],"m":"jsr","oa":62935,"o":"fetch_icon"},{"a":62827,"t":"code","b":[32,239,245],"m":"jsr","oa":62959,"o":"icon_to_screen"},{"a":62830,"t":"code","b":[166,38],"m":"ldx","oa":38,"o":"zpa_26"},{"a":62832,"t":"code","b":[224,16],"m":"cpx","o":"#$10"},{"a":62834,"t":"code","b":[240,35],"m":"beq","oa":62871,"o":"b_F597"},{"a":62836,"t":"code","b":[188,53,239],"m":"ldy","oa":61237,"o":"times_16,x"},{"a":62839,"t":"code","b":[185,4,2],"m":"lda","oa":516,"o":"f_0204,y"},{"a":62842,"t":"code","b":[133,35],"m":"sta","oa":35,"o":"zpa_23"},{"a":62844,"t":"code","b":[185,5,2],"m":"lda","oa":517,"o":"f_0205,y"},{"a":62847,"t":"code","b":[133,36],"m":"sta","oa":36,"o":"zpa_24"},{"a":62849,"t":"code","b":[185,6,2],"m":"lda","oa":518,"o":"f_0206,y"},{"a":62852,"t":"code","b":[133,37],"m":"sta","oa":37,"o":"zpa_25"},{"a":62854,"l":"j_F586","t":"code","b":[32,34,237],"m":"jsr","oa":60706,"o":"fill_colour_rect","x":[62883]},{"a":62857,"t":"code","b":[32,233,236],"m":"jsr","oa":60649,"o":"fill_bitmap_rect"},{"a":62860,"t":"code","b":[104],"m":"pla"},{"a":62861,"t":"code","b":[170],"m":"tax"},{"a":62862,"t":"code","b":[188,20,239],"m":"ldy","oa":61204,"o":"times_8,x"},{"a":62865,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":62867,"t":"code","b":[153,7,3],"m":"sta","oa":775,"o":"f_0307,y"},{"a":62870,"t":"code","b":[96],"m":"rts"},{"a":62871,"l":"b_F597","t":"code","b":[165,62],"m":"lda","oa":62,"o":"bg_pattern_a","x":[62834]},{"a":62873,"t":"code","b":[133,35],"m":"sta","oa":35,"o":"zpa_23"},{"a":62875,"t":"code","b":[165,63],"m":"lda","oa":63,"o":"bg_pattern_b"},{"a":62877,"t":"code","b":[133,36],"m":"sta","oa":36,"o":"zpa_24"},{"a":62879,"t":"code","b":[165,64],"m":"lda","oa":64,"o":"bg_colour"},{"a":62881,"t":"code","b":[133,37],"m":"sta","oa":37,"o":"zpa_25"},{"a":62883,"t":"code","b":[76,134,245],"m":"jmp","oa":62854,"o":"j_F586"},{"a":62886,"l":"find_free_icon","c":"Returns in A the first free entry of icon_table (one whose window byte is negative), with N clear, or $FF when there is none.","t":"code","b":[24],"m":"clc","x":[62771]},{"a":62887,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":62889,"t":"code","b":[162,7],"m":"ldx","o":"#$07"},{"a":62891,"l":"b_F5AB","t":"code","b":[189,0,3],"m":"lda","oa":768,"o":"icon_table,x","x":[62903]},{"a":62894,"t":"code","b":[48,12],"m":"bmi","oa":62908,"o":"b_F5BC"},{"a":62896,"t":"code","b":[138],"m":"txa"},{"a":62897,"t":"code","b":[105,8],"m":"adc","o":"#$08"},{"a":62899,"t":"code","b":[170],"m":"tax"},{"a":62900,"t":"code","b":[200],"m":"iny"},{"a":62901,"t":"code","b":[192,32],"m":"cpy","o":"#$20"},{"a":62903,"t":"code","b":[208,242],"m":"bne","oa":62891,"o":"b_F5AB"},{"a":62905,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":62907,"t":"code","b":[96],"m":"rts"},{"a":62908,"l":"b_F5BC","t":"code","b":[152],"m":"tya","x":[62894]},{"a":62909,"t":"code","b":[96],"m":"rts"},{"a":62910,"l":"store_icon","c":"Copies the eight argument bytes $1F-$26 into icon entry A.","t":"code","b":[170],"m":"tax","x":[62778]},{"a":62911,"t":"code","b":[188,20,239],"m":"ldy","oa":61204,"o":"times_8,x"},{"a":62914,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":62916,"l":"b_F5C4","t":"code","b":[181,31],"m":"lda","oa":31,"o":"os_args,x","x":[62925]},{"a":62918,"t":"code","b":[153,0,3],"m":"sta","oa":768,"o":"icon_table,y"},{"a":62921,"t":"code","b":[200],"m":"iny"},{"a":62922,"t":"code","b":[232],"m":"inx"},{"a":62923,"t":"code","b":[224,8],"m":"cpx","o":"#$08"},{"a":62925,"t":"code","b":[208,245],"m":"bne","oa":62916,"o":"b_F5C4"},{"a":62927,"t":"code","b":[96],"m":"rts"},{"a":62928,"c":"Unused: reads an icon's entry and turns it into screen cells, without drawing.","t":"code","b":[32,215,245],"m":"jsr","oa":62935,"o":"fetch_icon"},{"a":62931,"t":"code","b":[32,239,245],"m":"jsr","oa":62959,"o":"icon_to_screen"},{"a":62934,"t":"code","b":[96],"m":"rts"},{"a":62935,"l":"fetch_icon","c":"Copies icon entry A into $1F-$26.","t":"code","b":[170],"m":"tax","x":[62824,62928,63109]},{"a":62936,"t":"code","b":[188,20,239],"m":"ldy","oa":61204,"o":"times_8,x"},{"a":62939,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":62941,"l":"KERNAL_SAVEj","t":"code","b":[185,0,3],"m":"lda","oa":768,"o":"icon_table,y","x":[62950]},{"a":62944,"t":"code","b":[149,31],"m":"sta","oa":31,"o":"os_args,x"},{"a":62946,"t":"code","b":[200],"m":"iny"},{"a":62947,"t":"code","b":[232],"m":"inx"},{"a":62948,"t":"code","b":[224,8],"m":"cpx","o":"#$08"},{"a":62950,"t":"code","b":[208,245],"m":"bne","oa":62941,"o":"KERNAL_SAVEj"},{"a":62952,"t":"code","b":[96],"m":"rts"},{"a":62953,"l":"draw_icon","c":"Turns the icon in $1F-$26 into screen cells (icon_to_screen) and draws its picture (draw_icon_bitmap).","t":"code","b":[32,239,245],"m":"jsr","oa":62959,"o":"icon_to_screen","x":[62781]},{"a":62956,"t":"code","b":[76,9,246],"m":"jmp","oa":62985,"o":"draw_icon_bitmap"},{"a":62959,"l":"icon_to_screen","c":"Adds the icon's window's inside corner (the window's x and y plus one) to the icon's x and y; window $10 means the whole screen and adds nothing.","t":"code","b":[166,38],"m":"ldx","oa":38,"o":"zpa_26","x":[62827,62931,62953]},{"a":62961,"t":"code","b":[224,16],"m":"cpx","o":"#$10"},{"a":62963,"t":"code","b":[240,19],"m":"beq","oa":62984,"o":"r_F608"},{"a":62965,"t":"code","b":[188,53,239],"m":"ldy","oa":61237,"o":"times_16,x"},{"a":62968,"t":"code","b":[185,0,2],"m":"lda","oa":512,"o":"window_table,y"},{"a":62971,"t":"code","b":[56],"m":"sec"},{"a":62972,"t":"code","b":[101,31],"m":"adc","oa":31,"o":"os_args"},{"a":62974,"t":"code","b":[133,31],"m":"sta","oa":31,"o":"os_args"},{"a":62976,"t":"code","b":[185,1,2],"m":"lda","oa":513,"o":"f_0201,y"},{"a":62979,"t":"code","b":[56],"m":"sec"},{"a":62980,"t":"code","b":[101,32],"m":"adc","oa":32,"o":"zpa_20"},{"a":62982,"t":"code","b":[133,32],"m":"sta","oa":32,"o":"zpa_20"},{"a":62984,"l":"r_F608","t":"code","b":[96],"m":"rts","x":[62963]},{"a":62985,"l":"draw_icon_bitmap","c":"Copies the icon picture at the address in $23/$24 into the bitmap at cell ($1F, $20), $21 bytes a row and eight rows a cell row for $22 cell rows, then colours the cells with $25. The picture's address is written into the LDA at $F62C (its operand is $F62D/$F62E).","t":"code","b":[165,31],"m":"lda","oa":31,"o":"os_args","x":[62956]},{"a":62987,"t":"code","b":[133,39],"m":"sta","oa":39,"o":"zpa_27"},{"a":62989,"t":"code","b":[165,32],"m":"lda","oa":32,"o":"zpa_20"},{"a":62991,"t":"code","b":[133,41],"m":"sta","oa":41,"o":"zpa_29"},{"a":62993,"t":"code","b":[32,101,237],"m":"jsr","oa":60773,"o":"bitmap_cell_address"},{"a":62996,"t":"code","b":[165,35],"m":"lda","oa":35,"o":"zpa_23"},{"a":62998,"t":"code","b":[141,45,246],"m":"sta","oa":63021,"o":"icon_pic_operand"},{"a":63001,"t":"code","b":[165,36],"m":"lda","oa":36,"o":"zpa_24"},{"a":63003,"t":"code","b":[141,46,246],"m":"sta","oa":63022,"o":"a_F62E"},{"a":63006,"t":"code","b":[165,34],"m":"lda","oa":34,"o":"zpa_22"},{"a":63008,"t":"code","b":[133,11],"m":"sta","oa":11,"o":"zpa_0B"},{"a":63010,"l":"b_F622","t":"code","b":[169,8],"m":"lda","o":"#$08","x":[63067]},{"a":63012,"t":"code","b":[133,13],"m":"sta","oa":13,"o":"zpa_0D"},{"a":63014,"l":"b_F626","t":"code","b":[166,33],"m":"ldx","oa":33,"o":"zpa_21","x":[63050]},{"a":63016,"t":"code","b":[202],"m":"dex"},{"a":63017,"l":"b_F629","t":"code","b":[188,20,239],"m":"ldy","oa":61204,"o":"times_8,x","x":[63026]},{"a":63020,"t":"code","b":[189,133,66],"m":"lda","oa":17029,"o":"$4285,x"},{"a":63021,"t":"note","l":"icon_pic_operand","c":"The operand of draw_icon_bitmap's LDA, written with the picture's address and moved on a row at a time.","note":"inside the item at $F62C","x":[62998,63031,63034]},{"a":63022,"t":"note","l":"a_F62E","c":"The operand's high byte (icon_pic_operand).","note":"inside the item at $F62C","x":[63003,63039]},{"a":63023,"t":"code","b":[145,2],"m":"sta","oa":2,"o":"(bitmap_ptr),y"},{"a":63025,"t":"code","b":[202],"m":"dex"},{"a":63026,"t":"code","b":[16,245],"m":"bpl","oa":63017,"o":"b_F629"},{"a":63028,"t":"code","b":[165,33],"m":"lda","oa":33,"o":"zpa_21"},{"a":63030,"t":"code","b":[24],"m":"clc"},{"a":63031,"t":"code","b":[109,45,246],"m":"adc","oa":63021,"o":"icon_pic_operand"},{"a":63034,"t":"code","b":[141,45,246],"m":"sta","oa":63021,"o":"icon_pic_operand"},{"a":63037,"t":"code","b":[144,3],"m":"bcc","oa":63042,"o":"b_F642"},{"a":63039,"t":"code","b":[238,46,246],"m":"inc","oa":63022,"o":"a_F62E"},{"a":63042,"l":"b_F642","t":"code","b":[230,2],"m":"inc","oa":2,"o":"bitmap_ptr","x":[63037]},{"a":63044,"t":"code","b":[208,2],"m":"bne","oa":63048,"o":"b_F648"},{"a":63046,"t":"code","b":[230,3],"m":"inc","oa":3,"o":"zpa_03"},{"a":63048,"l":"b_F648","t":"code","b":[198,13],"m":"dec","oa":13,"o":"zpa_0D","x":[63044]},{"a":63050,"t":"code","b":[208,218],"m":"bne","oa":63014,"o":"b_F626"},{"a":63052,"t":"code","b":[24],"m":"clc"},{"a":63053,"t":"code","b":[165,2],"m":"lda","oa":2,"o":"bitmap_ptr"},{"a":63055,"t":"code","b":[105,56],"m":"adc","o":"#$38"},{"a":63057,"t":"code","b":[133,2],"m":"sta","oa":2,"o":"bitmap_ptr"},{"a":63059,"t":"code","b":[165,3],"m":"lda","oa":3,"o":"zpa_03"},{"a":63061,"t":"code","b":[105,1],"m":"adc","o":"#$01"},{"a":63063,"t":"code","b":[133,3],"m":"sta","oa":3,"o":"zpa_03"},{"a":63065,"t":"code","b":[198,11],"m":"dec","oa":11,"o":"zpa_0B"},{"a":63067,"t":"code","b":[208,197],"m":"bne","oa":63010,"o":"b_F622"},{"a":63069,"t":"code","b":[32,34,237],"m":"jsr","oa":60706,"o":"fill_colour_rect"},{"a":63072,"t":"code","b":[96],"m":"rts"},{"a":63073,"l":"window_flag","c":"OS function $2A: returns window X's flag from $0400 (set while the window is open).","t":"code","b":[189,0,4],"m":"lda","oa":1024,"o":"window_flags,x","x":[60534]},{"a":63076,"t":"code","b":[96],"m":"rts"},{"a":63077,"l":"set_window_flag","c":"OS function $30: sets window X's flag at $0400 to $FF.","t":"code","b":[72],"m":"pha","x":[60546,64047]},{"a":63078,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":63080,"t":"code","b":[157,0,4],"m":"sta","oa":1024,"o":"window_flags,x"},{"a":63083,"t":"code","b":[104],"m":"pla"},{"a":63084,"t":"code","b":[96],"m":"rts"},{"a":63085,"l":"clear_window_flag","c":"OS function $31: clears window X's flag at $0400.","t":"code","b":[72],"m":"pha","x":[60548,63908]},{"a":63086,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":63088,"t":"code","b":[157,0,4],"m":"sta","oa":1024,"o":"window_flags,x"},{"a":63091,"t":"code","b":[104],"m":"pla"},{"a":63092,"t":"code","b":[96],"m":"rts"},{"a":63093,"l":"erase_window_icons_here","c":"OS function $32: rubs off every icon of the current window (erase_window_icons).","t":"code","b":[166,78],"m":"ldx","oa":78,"o":"current_win","x":[60550]},{"a":63095,"t":"code","b":[76,122,246],"m":"jmp","oa":63098,"o":"erase_window_icons"},{"a":63098,"l":"erase_window_icons","c":"OS function $33: rubs off and frees every icon belonging to window X, the last entry first.","t":"code","b":[72],"m":"pha","x":[60552,63095,63911]},{"a":63099,"t":"code","b":[138],"m":"txa"},{"a":63100,"t":"code","b":[72],"m":"pha"},{"a":63101,"t":"code","b":[134,16],"m":"stx","oa":16,"o":"zpa_10"},{"a":63103,"t":"code","b":[169,31],"m":"lda","o":"#$1F"},{"a":63105,"t":"code","b":[133,15],"m":"sta","oa":15,"o":"zpa_0F"},{"a":63107,"l":"b_F683","t":"code","b":[165,15],"m":"lda","oa":15,"o":"zpa_0F","x":[63125]},{"a":63109,"t":"code","b":[32,215,245],"m":"jsr","oa":62935,"o":"fetch_icon"},{"a":63112,"t":"code","b":[165,38],"m":"lda","oa":38,"o":"zpa_26"},{"a":63114,"t":"code","b":[197,16],"m":"cmp","oa":16,"o":"zpa_10"},{"a":63116,"t":"code","b":[208,5],"m":"bne","oa":63123,"o":"b_F693"},{"a":63118,"t":"code","b":[166,15],"m":"ldx","oa":15,"o":"zpa_0F"},{"a":63120,"t":"code","b":[32,102,245],"m":"jsr","oa":62822,"o":"erase_icon"},{"a":63123,"l":"b_F693","t":"code","b":[198,15],"m":"dec","oa":15,"o":"zpa_0F","x":[63116]},{"a":63125,"t":"code","b":[16,236],"m":"bpl","oa":63107,"o":"b_F683"},{"a":63127,"t":"code","b":[104],"m":"pla"},{"a":63128,"t":"code","b":[170],"m":"tax"},{"a":63129,"t":"code","b":[104],"m":"pla"},{"a":63130,"t":"code","b":[96],"m":"rts"},{"a":63131,"l":"reset_icons","c":"OS function $05: frees all 32 icon entries (fills $0300-$03FF with $FF) and clears the eighteen window flags at $0400-$0411.","t":"code","b":[169,255],"m":"lda","o":"#$FF","x":[60460,61363]},{"a":63133,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":63135,"l":"b_F69F","t":"code","b":[157,0,3],"m":"sta","oa":768,"o":"icon_table,x","x":[63139]},{"a":63138,"t":"code","b":[232],"m":"inx"},{"a":63139,"t":"code","b":[208,250],"m":"bne","oa":63135,"o":"b_F69F"},{"a":63141,"t":"code","b":[162,17],"m":"ldx","o":"#$11"},{"a":63143,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":63145,"l":"b_F6A9","t":"code","b":[157,0,4],"m":"sta","oa":1024,"o":"window_flags,x","x":[63149]},{"a":63148,"t":"code","b":[202],"m":"dex"},{"a":63149,"t":"code","b":[16,250],"m":"bpl","oa":63145,"o":"b_F6A9"},{"a":63151,"t":"code","b":[96],"m":"rts"},{"a":63152,"l":"a_F6B0","c":"OS functions $1C-$1F: jump to os_dead_stub.","t":"code","b":[76,0,252],"m":"jmp","oa":64512,"o":"os_dead_stub","x":[60506,60508,60510,60512]},{"a":63155,"l":"restore_video","c":"OS function $22: waits for the bottom border, points the video chip at bank 0 again with $D018 = $38, and turns on the sprites kept in $1E.","t":"code","b":[32,46,240],"m":"jsr","oa":61486,"o":"wait_bottom_border","x":[60518]},{"a":63158,"t":"code","b":[173,0,221],"m":"lda","o":"cia2_port_a"},{"a":63161,"t":"code","b":[9,3],"m":"ora","o":"#$03"},{"a":63163,"t":"code","b":[141,0,221],"m":"sta","o":"cia2_port_a"},{"a":63166,"t":"code","b":[173,24,208],"m":"lda","o":"vic_memory"},{"a":63169,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":63171,"t":"code","b":[9,56],"m":"ora","o":"#$38"},{"a":63173,"t":"code","b":[141,24,208],"m":"sta","o":"vic_memory"},{"a":63176,"t":"code","b":[165,30],"m":"lda","oa":30,"o":"zpa_1E"},{"a":63178,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":63181,"t":"code","b":[96],"m":"rts"},{"a":63182,"l":"a_F6CE","c":"OS function $23: jumps to os_dead_stub.","t":"code","b":[76,0,252],"m":"jmp","oa":64512,"o":"os_dead_stub","x":[60520]},{"a":63185,"l":"hline_solid","c":"OS functions $24-$29 (all one entry): draws a horizontal line in solid set pixels, from x $27/$28 to x $2A on line $29 (hline).","t":"code","b":[169,255],"m":"lda","o":"#$FF","x":[60522,60524,60526,60528,60530,60532]},{"a":63187,"t":"code","b":[133,7],"m":"sta","oa":7,"o":"line_pattern"},{"a":63189,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":63191,"t":"code","b":[133,8],"m":"sta","oa":8,"o":"line_pattern_eor"},{"a":63193,"t":"code","b":[76,25,247],"m":"jmp","oa":63257,"o":"hline"},{"a":63196,"c":"Unused entries for other line styles: clear pixels, then a solid and a clear vertical line ($F800), and two more for an XOR form ($F893), and a horizontal line that also points $04/$05 one cell row down ($F70D); nothing calls them.","t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":63198,"t":"code","b":[133,7],"m":"sta","oa":7,"o":"line_pattern"},{"a":63200,"t":"code","b":[133,8],"m":"sta","oa":8,"o":"line_pattern_eor"},{"a":63202,"t":"code","b":[76,25,247],"m":"jmp","oa":63257,"o":"hline"},{"a":63205,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":63207,"t":"code","b":[133,7],"m":"sta","oa":7,"o":"line_pattern"},{"a":63209,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":63211,"t":"code","b":[133,8],"m":"sta","oa":8,"o":"line_pattern_eor"},{"a":63213,"t":"code","b":[76,0,248],"m":"jmp","oa":63488,"o":"vline"},{"a":63216,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":63218,"t":"code","b":[133,7],"m":"sta","oa":7,"o":"line_pattern"},{"a":63220,"t":"code","b":[133,8],"m":"sta","oa":8,"o":"line_pattern_eor"},{"a":63222,"t":"code","b":[76,0,248],"m":"jmp","oa":63488,"o":"vline"},{"a":63225,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":63227,"t":"code","b":[133,7],"m":"sta","oa":7,"o":"line_pattern"},{"a":63229,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":63231,"t":"code","b":[133,8],"m":"sta","oa":8,"o":"line_pattern_eor"},{"a":63233,"t":"code","b":[76,147,248],"m":"jmp","oa":63635,"o":"j_F893"},{"a":63236,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":63238,"t":"code","b":[133,7],"m":"sta","oa":7,"o":"line_pattern"},{"a":63240,"t":"code","b":[133,8],"m":"sta","oa":8,"o":"line_pattern_eor"},{"a":63242,"t":"code","b":[76,147,248],"m":"jmp","oa":63635,"o":"j_F893"},{"a":63245,"t":"code","b":[32,68,247],"m":"jsr","oa":63300,"o":"s_F744"},{"a":63248,"t":"code","b":[32,123,237],"m":"jsr","oa":60795,"o":"bitmap_pixel_address"},{"a":63251,"t":"code","b":[32,150,238],"m":"jsr","oa":61078,"o":"s_EE96"},{"a":63254,"t":"code","b":[76,34,247],"m":"jmp","oa":63266,"o":"j_F722"},{"a":63257,"l":"hline","c":"Draws a horizontal line on pixel row $29 from x $27 to x $2A in the pattern $07 (EOR $08 on odd rows): the partial byte at each end with its mask, the whole bytes between.","t":"code","b":[32,47,247],"m":"jsr","oa":63279,"o":"hline_mode_set","x":[63193,63202,63694,63733]},{"a":63260,"t":"code","b":[32,99,247],"m":"jsr","oa":63331,"o":"odd_row_pattern"},{"a":63263,"t":"code","b":[32,123,237],"m":"jsr","oa":60795,"o":"bitmap_pixel_address"},{"a":63266,"l":"j_F722","t":"code","b":[32,111,247],"m":"jsr","oa":63343,"o":"hline_length","x":[63254]},{"a":63269,"t":"code","b":[32,140,247],"m":"jsr","oa":63372,"o":"hline_left_end"},{"a":63272,"t":"code","b":[32,224,247],"m":"jsr","oa":63456,"o":"hline_right_end"},{"a":63275,"t":"code","b":[32,207,247],"m":"jsr","oa":63439,"o":"hline_middle"},{"a":63278,"t":"code","b":[96],"m":"rts"},{"a":63279,"l":"hline_mode_set","c":"Sets hline's four self-modified instructions back to AND $07, its normal mode (the operands at $F7A5, $F7C8, $F7F7, $F7D8).","t":"code","b":[169,37],"m":"lda","o":"#$25","x":[63257]},{"a":63281,"t":"code","b":[141,165,247],"m":"sta","oa":63397,"o":"a_F7A5"},{"a":63284,"t":"code","b":[141,200,247],"m":"sta","oa":63432,"o":"a_F7C8"},{"a":63287,"t":"code","b":[141,247,247],"m":"sta","oa":63479,"o":"a_F7F7"},{"a":63290,"t":"code","b":[169,165],"m":"lda","o":"#$A5"},{"a":63292,"t":"code","b":[141,216,247],"m":"sta","oa":63448,"o":"a_F7D8"},{"a":63295,"t":"code","b":[169,7],"m":"lda","o":"#$07"},{"a":63297,"t":"code","b":[76,86,247],"m":"jmp","oa":63318,"o":"hline_mode_operand"},{"a":63300,"l":"s_F744","c":"Unused: switches hline's four instructions to AND ($04),Y and LDA ($04),Y, to copy a line from the second pointer rather than draw the pattern.","t":"code","b":[169,49],"m":"lda","o":"#$31","x":[63245]},{"a":63302,"t":"code","b":[141,165,247],"m":"sta","oa":63397,"o":"a_F7A5"},{"a":63305,"t":"code","b":[141,200,247],"m":"sta","oa":63432,"o":"a_F7C8"},{"a":63308,"t":"code","b":[141,247,247],"m":"sta","oa":63479,"o":"a_F7F7"},{"a":63311,"t":"code","b":[169,177],"m":"lda","o":"#$B1"},{"a":63313,"t":"code","b":[141,216,247],"m":"sta","oa":63448,"o":"a_F7D8"},{"a":63316,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":63318,"l":"hline_mode_operand","c":"Writes A into the operand of hline's four self-modified instructions.","t":"code","b":[141,166,247],"m":"sta","oa":63398,"o":"a_F7A6","x":[63297]},{"a":63321,"t":"code","b":[141,201,247],"m":"sta","oa":63433,"o":"a_F7C9"},{"a":63324,"t":"code","b":[141,248,247],"m":"sta","oa":63480,"o":"a_F7F8"},{"a":63327,"t":"code","b":[141,217,247],"m":"sta","oa":63449,"o":"a_F7D9"},{"a":63330,"t":"code","b":[96],"m":"rts"},{"a":63331,"l":"odd_row_pattern","c":"On an odd pixel row ($29), alternates the line pattern ($07 EOR $08), for a dithered line.","t":"code","b":[165,41],"m":"lda","oa":41,"o":"zpa_29","x":[63260,63488]},{"a":63333,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":63334,"t":"code","b":[144,6],"m":"bcc","oa":63342,"o":"r_F76E"},{"a":63336,"t":"code","b":[165,7],"m":"lda","oa":7,"o":"line_pattern"},{"a":63338,"t":"code","b":[69,8],"m":"eor","oa":8,"o":"line_pattern_eor"},{"a":63340,"t":"code","b":[133,7],"m":"sta","oa":7,"o":"line_pattern"},{"a":63342,"l":"r_F76E","t":"code","b":[96],"m":"rts","x":[63334]},{"a":63343,"l":"hline_length","c":"Sets $2C to the number of byte boundaries the line from $27 to $2A crosses.","t":"code","b":[165,42],"m":"lda","oa":42,"o":"zpa_2A","x":[63266]},{"a":63345,"t":"code","b":[56],"m":"sec"},{"a":63346,"t":"code","b":[229,39],"m":"sbc","oa":39,"o":"zpa_27"},{"a":63348,"t":"code","b":[72],"m":"pha"},{"a":63349,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":63350,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":63351,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":63352,"t":"code","b":[133,44],"m":"sta","oa":44,"o":"zpa_2C"},{"a":63354,"t":"code","b":[104],"m":"pla"},{"a":63355,"t":"code","b":[240,14],"m":"beq","oa":63371,"o":"r_F78B"},{"a":63357,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":63359,"t":"code","b":[133,17],"m":"sta","oa":17,"o":"zpa_11"},{"a":63361,"t":"code","b":[165,42],"m":"lda","oa":42,"o":"zpa_2A"},{"a":63363,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":63365,"t":"code","b":[197,17],"m":"cmp","oa":17,"o":"zpa_11"},{"a":63367,"t":"code","b":[16,2],"m":"bpl","oa":63371,"o":"r_F78B"},{"a":63369,"t":"code","b":[230,44],"m":"inc","oa":44,"o":"zpa_2C"},{"a":63371,"l":"r_F78B","t":"code","b":[96],"m":"rts","x":[63355,63367]},{"a":63372,"l":"hline_left_end","c":"Draws the line's first byte: the pixels from the start to the byte's end, or, when the line starts and ends in one byte, only those between (hline_one_byte).","t":"code","b":[165,44],"m":"lda","oa":44,"o":"zpa_2C","x":[63269]},{"a":63374,"t":"code","b":[208,3],"m":"bne","oa":63379,"o":"b_F793"},{"a":63376,"t":"code","b":[76,172,247],"m":"jmp","oa":63404,"o":"hline_one_byte"},{"a":63379,"l":"b_F793","t":"code","b":[165,39],"m":"lda","oa":39,"o":"zpa_27","x":[63374]},{"a":63381,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":63383,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":63385,"t":"code","b":[170],"m":"tax"},{"a":63386,"t":"code","b":[189,234,238],"m":"lda","oa":61162,"o":"left_masks,x"},{"a":63389,"t":"code","b":[72],"m":"pha"},{"a":63390,"t":"code","b":[49,2],"m":"and","oa":2,"o":"(bitmap_ptr),y"},{"a":63392,"t":"code","b":[133,17],"m":"sta","oa":17,"o":"zpa_11"},{"a":63394,"t":"code","b":[104],"m":"pla"},{"a":63395,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":63397,"l":"a_F7A5","c":"The operand of hline_left_end's AND, one of the four hline_mode_operand writes ($25: AND $07, zero page).","t":"code","b":[37,7],"m":"and","oa":7,"o":"line_pattern","x":[63281,63302]},{"a":63398,"t":"note","l":"a_F7A6","c":"The zero-page address hline_left_end's AND reads, $07.","note":"inside the item at $F7A5","x":[63318]},{"a":63399,"t":"code","b":[5,17],"m":"ora","oa":17,"o":"zpa_11"},{"a":63401,"t":"code","b":[145,2],"m":"sta","oa":2,"o":"(bitmap_ptr),y"},{"a":63403,"t":"code","b":[96],"m":"rts"},{"a":63404,"l":"hline_one_byte","c":"Draws a line that starts and ends in one byte, keeping the pixels outside it.","t":"code","b":[165,39],"m":"lda","oa":39,"o":"zpa_27","x":[63376]},{"a":63406,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":63408,"t":"code","b":[170],"m":"tax"},{"a":63409,"t":"code","b":[189,234,238],"m":"lda","oa":61162,"o":"left_masks,x"},{"a":63412,"t":"code","b":[72],"m":"pha"},{"a":63413,"t":"code","b":[165,42],"m":"lda","oa":42,"o":"zpa_2A"},{"a":63415,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":63417,"t":"code","b":[170],"m":"tax"},{"a":63418,"t":"code","b":[104],"m":"pla"},{"a":63419,"t":"code","b":[29,243,238],"m":"ora","oa":61171,"o":"right_masks,x"},{"a":63422,"t":"code","b":[72],"m":"pha"},{"a":63423,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":63425,"t":"code","b":[49,2],"m":"and","oa":2,"o":"(bitmap_ptr),y"},{"a":63427,"t":"code","b":[133,17],"m":"sta","oa":17,"o":"zpa_11"},{"a":63429,"t":"code","b":[104],"m":"pla"},{"a":63430,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":63432,"l":"a_F7C8","c":"The operand of hline_one_byte's AND, written by hline_mode_set.","t":"code","b":[37,7],"m":"and","oa":7,"o":"line_pattern","x":[63284,63305]},{"a":63433,"t":"note","l":"a_F7C9","c":"The zero-page address hline_one_byte's AND reads, $07.","note":"inside the item at $F7C8","x":[63321]},{"a":63434,"t":"code","b":[5,17],"m":"ora","oa":17,"o":"zpa_11"},{"a":63436,"t":"code","b":[145,2],"m":"sta","oa":2,"o":"(bitmap_ptr),y"},{"a":63438,"t":"code","b":[96],"m":"rts"},{"a":63439,"l":"hline_middle","c":"Fills the whole bytes between the line's two ends with the pattern.","t":"code","b":[165,44],"m":"lda","oa":44,"o":"zpa_2C","x":[63275]},{"a":63441,"t":"code","b":[240,12],"m":"beq","oa":63455,"o":"r_F7DF"},{"a":63443,"t":"code","b":[166,44],"m":"ldx","oa":44,"o":"zpa_2C"},{"a":63445,"l":"b_F7D5","t":"code","b":[188,20,239],"m":"ldy","oa":61204,"o":"times_8,x","x":[63453]},{"a":63448,"l":"a_F7D8","c":"hline_middle's LDA $07, whose opcode hline_mode_set writes ($A5).","t":"code","b":[165,7],"m":"lda","oa":7,"o":"line_pattern","x":[63292,63313]},{"a":63449,"t":"note","l":"a_F7D9","c":"The zero-page address hline_middle's LDA reads, $07: the pattern byte.","note":"inside the item at $F7D8","x":[63327]},{"a":63450,"t":"code","b":[145,2],"m":"sta","oa":2,"o":"(bitmap_ptr),y"},{"a":63452,"t":"code","b":[202],"m":"dex"},{"a":63453,"t":"code","b":[208,246],"m":"bne","oa":63445,"o":"b_F7D5"},{"a":63455,"l":"r_F7DF","t":"code","b":[96],"m":"rts","x":[63441]},{"a":63456,"l":"hline_right_end","c":"Draws the line's last byte, from its start to the line's end.","t":"code","b":[166,44],"m":"ldx","oa":44,"o":"zpa_2C","x":[63272]},{"a":63458,"t":"code","b":[240,27],"m":"beq","oa":63487,"o":"r_F7FF"},{"a":63460,"t":"code","b":[165,42],"m":"lda","oa":42,"o":"zpa_2A"},{"a":63462,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":63464,"t":"code","b":[168],"m":"tay"},{"a":63465,"t":"code","b":[185,243,238],"m":"lda","oa":61171,"o":"right_masks,y"},{"a":63468,"t":"code","b":[72],"m":"pha"},{"a":63469,"t":"code","b":[188,20,239],"m":"ldy","oa":61204,"o":"times_8,x"},{"a":63472,"t":"code","b":[49,2],"m":"and","oa":2,"o":"(bitmap_ptr),y"},{"a":63474,"t":"code","b":[133,17],"m":"sta","oa":17,"o":"zpa_11"},{"a":63476,"t":"code","b":[104],"m":"pla"},{"a":63477,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":63479,"l":"a_F7F7","c":"The operand of hline_right_end's AND, written by hline_mode_set.","t":"code","b":[37,7],"m":"and","oa":7,"o":"line_pattern","x":[63287,63308]},{"a":63480,"t":"note","l":"a_F7F8","c":"The operand's second byte of the AND at $F7F7, which hline_mode_operand writes with the others.","note":"inside the item at $F7F7","x":[63324]},{"a":63481,"t":"code","b":[5,17],"m":"ora","oa":17,"o":"zpa_11"},{"a":63483,"t":"code","b":[145,2],"m":"sta","oa":2,"o":"(bitmap_ptr),y"},{"a":63485,"t":"code","b":[198,44],"m":"dec","oa":44,"o":"zpa_2C"},{"a":63487,"l":"r_F7FF","t":"code","b":[96],"m":"rts","x":[63458]},{"a":63488,"l":"vline","c":"Draws a vertical line in x column $27, from row $29 to row $2A, in the pattern of $07 (alternating with $08 a row), setting one pixel a row.","t":"code","b":[32,99,247],"m":"jsr","oa":63331,"o":"odd_row_pattern","x":[63213,63222,63716,63745]},{"a":63491,"t":"code","b":[32,123,237],"m":"jsr","oa":60795,"o":"bitmap_pixel_address"},{"a":63494,"t":"code","b":[32,48,248],"m":"jsr","oa":63536,"o":"vline_length"},{"a":63497,"t":"code","b":[169,165],"m":"lda","o":"#$A5"},{"a":63499,"t":"code","b":[141,96,248],"m":"sta","oa":63584,"o":"a_F860"},{"a":63502,"t":"code","b":[169,7],"m":"lda","o":"#$07"},{"a":63504,"t":"code","b":[76,41,248],"m":"jmp","oa":63529,"o":"vline_draw"},{"a":63507,"c":"Unused: a vertical line that copies from the second pointer, the counterpart of $F744.","t":"code","b":[32,123,237],"m":"jsr","oa":60795,"o":"bitmap_pixel_address"},{"a":63510,"t":"code","b":[32,48,248],"m":"jsr","oa":63536,"o":"vline_length"},{"a":63513,"t":"code","b":[32,150,238],"m":"jsr","oa":61078,"o":"s_EE96"},{"a":63516,"t":"code","b":[165,4],"m":"lda","oa":4,"o":"bitmap_ptr2"},{"a":63518,"t":"code","b":[41,248],"m":"and","o":"#$F8"},{"a":63520,"t":"code","b":[133,4],"m":"sta","oa":4,"o":"bitmap_ptr2"},{"a":63522,"t":"code","b":[169,177],"m":"lda","o":"#$B1"},{"a":63524,"t":"code","b":[141,96,248],"m":"sta","oa":63584,"o":"a_F860"},{"a":63527,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":63529,"l":"vline_draw","c":"Writes vline's mode into its self-modified LDA at $F860/$F861 and draws it (vline_pixels).","t":"code","b":[141,97,248],"m":"sta","oa":63585,"o":"vline_mode_operand","x":[63504]},{"a":63532,"t":"code","b":[32,56,248],"m":"jsr","oa":63544,"o":"vline_pixels"},{"a":63535,"t":"code","b":[96],"m":"rts"},{"a":63536,"l":"vline_length","c":"Sets $2C to the line's height, $2A minus $29.","t":"code","b":[56],"m":"sec","x":[63494,63510]},{"a":63537,"t":"code","b":[165,42],"m":"lda","oa":42,"o":"zpa_2A"},{"a":63539,"t":"code","b":[229,41],"m":"sbc","oa":41,"o":"zpa_29"},{"a":63541,"t":"code","b":[133,44],"m":"sta","oa":44,"o":"zpa_2C"},{"a":63543,"t":"code","b":[96],"m":"rts"},{"a":63544,"l":"vline_pixels","c":"Sets or clears the pixel of column $27 on each row down the line, crossing into the next cell row every eighth.","t":"code","b":[165,2],"m":"lda","oa":2,"o":"bitmap_ptr","x":[63532]},{"a":63546,"t":"code","b":[41,248],"m":"and","o":"#$F8"},{"a":63548,"t":"code","b":[133,2],"m":"sta","oa":2,"o":"bitmap_ptr"},{"a":63550,"t":"code","b":[165,39],"m":"lda","oa":39,"o":"zpa_27"},{"a":63552,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":63554,"t":"code","b":[170],"m":"tax"},{"a":63555,"t":"code","b":[189,4,239],"m":"lda","oa":61188,"o":"pixel_bits,x"},{"a":63558,"t":"code","b":[133,17],"m":"sta","oa":17,"o":"zpa_11"},{"a":63560,"t":"code","b":[37,8],"m":"and","oa":8,"o":"line_pattern_eor"},{"a":63562,"t":"code","b":[133,8],"m":"sta","oa":8,"o":"line_pattern_eor"},{"a":63564,"t":"code","b":[165,17],"m":"lda","oa":17,"o":"zpa_11"},{"a":63566,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":63568,"t":"code","b":[133,19],"m":"sta","oa":19,"o":"zpa_13"},{"a":63570,"t":"code","b":[165,41],"m":"lda","oa":41,"o":"zpa_29"},{"a":63572,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":63574,"t":"code","b":[168],"m":"tay"},{"a":63575,"t":"code","b":[166,44],"m":"ldx","oa":44,"o":"zpa_2C"},{"a":63577,"t":"code","b":[232],"m":"inx"},{"a":63578,"l":"b_F85A","t":"code","b":[177,2],"m":"lda","oa":2,"o":"(bitmap_ptr),y","x":[63632]},{"a":63580,"t":"code","b":[37,19],"m":"and","oa":19,"o":"zpa_13"},{"a":63582,"t":"code","b":[133,18],"m":"sta","oa":18,"o":"zpa_12"},{"a":63584,"l":"a_F860","c":"vline_pixels's LDA, whose opcode vline_draw writes ($A5).","t":"code","b":[165,7],"m":"lda","oa":7,"o":"line_pattern","x":[63499,63524]},{"a":63585,"t":"note","l":"vline_mode_operand","c":"The operand of vline_pixels's LDA $07, which vline_draw writes ($A5/$07 for the pattern; the unused $F813 would make it LDA ($04),Y).","note":"inside the item at $F860","x":[63529]},{"a":63586,"t":"code","b":[37,17],"m":"and","oa":17,"o":"zpa_11"},{"a":63588,"t":"code","b":[5,18],"m":"ora","oa":18,"o":"zpa_12"},{"a":63590,"t":"code","b":[145,2],"m":"sta","oa":2,"o":"(bitmap_ptr),y"},{"a":63592,"t":"code","b":[165,7],"m":"lda","oa":7,"o":"line_pattern"},{"a":63594,"t":"code","b":[69,8],"m":"eor","oa":8,"o":"line_pattern_eor"},{"a":63596,"t":"code","b":[133,7],"m":"sta","oa":7,"o":"line_pattern"},{"a":63598,"t":"code","b":[200],"m":"iny"},{"a":63599,"t":"code","b":[192,8],"m":"cpy","o":"#$08"},{"a":63601,"t":"code","b":[208,28],"m":"bne","oa":63631,"o":"b_F88F"},{"a":63603,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":63605,"t":"code","b":[24],"m":"clc"},{"a":63606,"t":"code","b":[165,2],"m":"lda","oa":2,"o":"bitmap_ptr"},{"a":63608,"t":"code","b":[105,64],"m":"adc","o":"#$40"},{"a":63610,"t":"code","b":[133,2],"m":"sta","oa":2,"o":"bitmap_ptr"},{"a":63612,"t":"code","b":[165,3],"m":"lda","oa":3,"o":"zpa_03"},{"a":63614,"t":"code","b":[105,1],"m":"adc","o":"#$01"},{"a":63616,"t":"code","b":[133,3],"m":"sta","oa":3,"o":"zpa_03"},{"a":63618,"t":"code","b":[24],"m":"clc"},{"a":63619,"t":"code","b":[165,4],"m":"lda","oa":4,"o":"bitmap_ptr2"},{"a":63621,"t":"code","b":[105,64],"m":"adc","o":"#$40"},{"a":63623,"t":"code","b":[133,4],"m":"sta","oa":4,"o":"bitmap_ptr2"},{"a":63625,"t":"code","b":[165,5],"m":"lda","oa":5,"o":"zpa_05"},{"a":63627,"t":"code","b":[105,1],"m":"adc","o":"#$01"},{"a":63629,"t":"code","b":[133,5],"m":"sta","oa":5,"o":"zpa_05"},{"a":63631,"l":"b_F88F","t":"code","b":[202],"m":"dex","x":[63601]},{"a":63632,"t":"code","b":[208,200],"m":"bne","oa":63578,"o":"b_F85A"},{"a":63634,"t":"code","b":[96],"m":"rts"},{"a":63635,"l":"j_F893","c":"Unused: a second JMP $FC00 to os_dead_stub, after the vertical-line code.","t":"code","b":[76,0,252],"m":"jmp","oa":64512,"o":"os_dead_stub","x":[63233,63242]},{"a":63638,"l":"draw_frame","c":"Draws a window's double outline around the cells x $1F, y $20, width $21, height $22: a black rectangle on its outermost pixels, then a white one a pixel inside it.","t":"code","b":[32,5,249],"m":"jsr","oa":63749,"o":"frame_corner","x":[63851,63892,64798]},{"a":63641,"t":"code","b":[32,30,249],"m":"jsr","oa":63774,"o":"frame_size"},{"a":63644,"t":"code","b":[32,177,248],"m":"jsr","oa":63665,"o":"frame_black"},{"a":63647,"t":"code","b":[32,49,249],"m":"jsr","oa":63793,"o":"frame_shrink"},{"a":63650,"t":"code","b":[32,166,248],"m":"jsr","oa":63654,"o":"frame_white"},{"a":63653,"t":"code","b":[96],"m":"rts"},{"a":63654,"l":"frame_white","c":"Draws the rectangle in $2D-$31 in white (solid set pixels).","t":"code","b":[169,255],"m":"lda","o":"#$FF","x":[63650]},{"a":63656,"t":"code","b":[133,7],"m":"sta","oa":7,"o":"line_pattern"},{"a":63658,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":63660,"t":"code","b":[133,8],"m":"sta","oa":8,"o":"line_pattern_eor"},{"a":63662,"t":"code","b":[76,186,248],"m":"jmp","oa":63674,"o":"frame_rect"},{"a":63665,"l":"frame_black","c":"Draws the rectangle in $2D-$31 in black (clear pixels).","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[63644]},{"a":63667,"t":"code","b":[133,7],"m":"sta","oa":7,"o":"line_pattern"},{"a":63669,"t":"code","b":[133,8],"m":"sta","oa":8,"o":"line_pattern_eor"},{"a":63671,"t":"code","b":[76,186,248],"m":"jmp","oa":63674,"o":"frame_rect"},{"a":63674,"l":"frame_rect","c":"Draws the four sides of the rectangle at x $2D/$2E, y $2F, width $30, height $31, in the current pattern: top, right, bottom, left.","t":"code","b":[165,45],"m":"lda","oa":45,"o":"zpa_2D","x":[63662,63671]},{"a":63676,"t":"code","b":[133,39],"m":"sta","oa":39,"o":"zpa_27"},{"a":63678,"t":"code","b":[165,46],"m":"lda","oa":46,"o":"zpa_2E"},{"a":63680,"t":"code","b":[133,40],"m":"sta","oa":40,"o":"zpa_28"},{"a":63682,"t":"code","b":[165,47],"m":"lda","oa":47,"o":"zpa_2F"},{"a":63684,"t":"code","b":[133,41],"m":"sta","oa":41,"o":"zpa_29"},{"a":63686,"t":"code","b":[24],"m":"clc"},{"a":63687,"t":"code","b":[165,45],"m":"lda","oa":45,"o":"zpa_2D"},{"a":63689,"t":"code","b":[101,48],"m":"adc","oa":48,"o":"zpa_30"},{"a":63691,"t":"code","b":[133,42],"m":"sta","oa":42,"o":"zpa_2A"},{"a":63693,"t":"code","b":[72],"m":"pha"},{"a":63694,"t":"code","b":[32,25,247],"m":"jsr","oa":63257,"o":"hline"},{"a":63697,"t":"code","b":[24],"m":"clc"},{"a":63698,"t":"code","b":[165,48],"m":"lda","oa":48,"o":"zpa_30"},{"a":63700,"t":"code","b":[101,39],"m":"adc","oa":39,"o":"zpa_27"},{"a":63702,"t":"code","b":[133,39],"m":"sta","oa":39,"o":"zpa_27"},{"a":63704,"t":"code","b":[144,2],"m":"bcc","oa":63708,"o":"b_F8DC"},{"a":63706,"t":"code","b":[230,40],"m":"inc","oa":40,"o":"zpa_28"},{"a":63708,"l":"b_F8DC","t":"code","b":[24],"m":"clc","x":[63704]},{"a":63709,"t":"code","b":[165,47],"m":"lda","oa":47,"o":"zpa_2F"},{"a":63711,"t":"code","b":[101,49],"m":"adc","oa":49,"o":"zpa_31"},{"a":63713,"t":"code","b":[133,42],"m":"sta","oa":42,"o":"zpa_2A"},{"a":63715,"t":"code","b":[72],"m":"pha"},{"a":63716,"t":"code","b":[32,0,248],"m":"jsr","oa":63488,"o":"vline"},{"a":63719,"t":"code","b":[165,45],"m":"lda","oa":45,"o":"zpa_2D"},{"a":63721,"t":"code","b":[133,39],"m":"sta","oa":39,"o":"zpa_27"},{"a":63723,"t":"code","b":[165,46],"m":"lda","oa":46,"o":"zpa_2E"},{"a":63725,"t":"code","b":[133,40],"m":"sta","oa":40,"o":"zpa_28"},{"a":63727,"t":"code","b":[104],"m":"pla"},{"a":63728,"t":"code","b":[133,41],"m":"sta","oa":41,"o":"zpa_29"},{"a":63730,"t":"code","b":[104],"m":"pla"},{"a":63731,"t":"code","b":[133,42],"m":"sta","oa":42,"o":"zpa_2A"},{"a":63733,"t":"code","b":[32,25,247],"m":"jsr","oa":63257,"o":"hline"},{"a":63736,"t":"code","b":[165,47],"m":"lda","oa":47,"o":"zpa_2F"},{"a":63738,"t":"code","b":[133,41],"m":"sta","oa":41,"o":"zpa_29"},{"a":63740,"t":"code","b":[24],"m":"clc"},{"a":63741,"t":"code","b":[101,49],"m":"adc","oa":49,"o":"zpa_31"},{"a":63743,"t":"code","b":[133,42],"m":"sta","oa":42,"o":"zpa_2A"},{"a":63745,"t":"code","b":[32,0,248],"m":"jsr","oa":63488,"o":"vline"},{"a":63748,"t":"code","b":[96],"m":"rts"},{"a":63749,"l":"frame_corner","c":"Converts the cell corner $1F, $20 to the pixel corner $2D/$2E, $2F.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[63638]},{"a":63751,"t":"code","b":[133,46],"m":"sta","oa":46,"o":"zpa_2E"},{"a":63753,"t":"code","b":[165,31],"m":"lda","oa":31,"o":"os_args"},{"a":63755,"t":"code","b":[10],"m":"asl","o":"a"},{"a":63756,"t":"code","b":[38,46],"m":"rol","oa":46,"o":"zpa_2E"},{"a":63758,"t":"code","b":[10],"m":"asl","o":"a"},{"a":63759,"t":"code","b":[38,46],"m":"rol","oa":46,"o":"zpa_2E"},{"a":63761,"t":"code","b":[10],"m":"asl","o":"a"},{"a":63762,"t":"code","b":[38,46],"m":"rol","oa":46,"o":"zpa_2E"},{"a":63764,"t":"code","b":[133,45],"m":"sta","oa":45,"o":"zpa_2D"},{"a":63766,"t":"code","b":[165,32],"m":"lda","oa":32,"o":"zpa_20"},{"a":63768,"t":"code","b":[10],"m":"asl","o":"a"},{"a":63769,"t":"code","b":[10],"m":"asl","o":"a"},{"a":63770,"t":"code","b":[10],"m":"asl","o":"a"},{"a":63771,"t":"code","b":[133,47],"m":"sta","oa":47,"o":"zpa_2F"},{"a":63773,"t":"code","b":[96],"m":"rts"},{"a":63774,"l":"frame_size","c":"Converts the size in cells $21, $22 to pixels less one, in $30 and $31.","t":"code","b":[165,33],"m":"lda","oa":33,"o":"zpa_21","x":[63641]},{"a":63776,"t":"code","b":[10],"m":"asl","o":"a"},{"a":63777,"t":"code","b":[10],"m":"asl","o":"a"},{"a":63778,"t":"code","b":[10],"m":"asl","o":"a"},{"a":63779,"t":"code","b":[133,48],"m":"sta","oa":48,"o":"zpa_30"},{"a":63781,"t":"code","b":[198,48],"m":"dec","oa":48,"o":"zpa_30"},{"a":63783,"t":"code","b":[165,34],"m":"lda","oa":34,"o":"zpa_22"},{"a":63785,"t":"code","b":[10],"m":"asl","o":"a"},{"a":63786,"t":"code","b":[10],"m":"asl","o":"a"},{"a":63787,"t":"code","b":[10],"m":"asl","o":"a"},{"a":63788,"t":"code","b":[133,49],"m":"sta","oa":49,"o":"zpa_31"},{"a":63790,"t":"code","b":[198,49],"m":"dec","oa":49,"o":"zpa_31"},{"a":63792,"t":"code","b":[96],"m":"rts"},{"a":63793,"l":"frame_shrink","c":"Moves the rectangle in $2D-$31 a pixel in on every side.","t":"code","b":[24],"m":"clc","x":[63647]},{"a":63794,"t":"code","b":[165,45],"m":"lda","oa":45,"o":"zpa_2D"},{"a":63796,"t":"code","b":[105,1],"m":"adc","o":"#$01"},{"a":63798,"t":"code","b":[133,45],"m":"sta","oa":45,"o":"zpa_2D"},{"a":63800,"t":"code","b":[208,2],"m":"bne","oa":63804,"o":"b_F93C"},{"a":63802,"t":"code","b":[230,46],"m":"inc","oa":46,"o":"zpa_2E"},{"a":63804,"l":"b_F93C","t":"code","b":[230,47],"m":"inc","oa":47,"o":"zpa_2F","x":[63800]},{"a":63806,"t":"code","b":[198,48],"m":"dec","oa":48,"o":"zpa_30"},{"a":63808,"t":"code","b":[198,48],"m":"dec","oa":48,"o":"zpa_30"},{"a":63810,"t":"code","b":[198,49],"m":"dec","oa":49,"o":"zpa_31"},{"a":63812,"t":"code","b":[198,49],"m":"dec","oa":49,"o":"zpa_31"},{"a":63814,"t":"code","b":[96],"m":"rts"},{"a":63815,"l":"open_window_saved","c":"OS function $11: opens a window that keeps what it covers. Takes eight bytes after the call: x, y, width, height (in cells, the inside: the frame adds a cell all round), two pattern bytes and a colour for its inside, and a spare byte. Takes the next of seven slots, windows 8-14, stacked one on another, saves the bitmap and colours under it at the save pointer (save_bitmap_under, save_colours_under, with the chips switched out so the RAM under $D000 can hold them), fills it, frames it and makes it current with the text cursor at its top left. Returns its number in A, or $FF with N set when all seven are open; windows must be closed in the reverse order.","t":"code","b":[169,8],"m":"lda","o":"#$08","x":[60484]},{"a":63817,"t":"code","b":[32,210,237],"m":"jsr","oa":60882,"o":"os_inline_args"},{"a":63820,"t":"code","b":[32,112,250],"m":"jsr","oa":64112,"o":"next_save_slot"},{"a":63823,"t":"code","b":[16,1],"m":"bpl","oa":63826,"o":"b_F952"},{"a":63825,"t":"code","b":[96],"m":"rts"},{"a":63826,"l":"b_F952","t":"code","b":[72],"m":"pha","x":[63823]},{"a":63827,"t":"code","b":[32,243,250],"m":"jsr","oa":64243,"o":"add_frame_cells"},{"a":63830,"t":"code","b":[32,135,250],"m":"jsr","oa":64135,"o":"store_saved_window"},{"a":63833,"t":"code","b":[8],"m":"php"},{"a":63834,"t":"code","b":[120],"m":"sei"},{"a":63835,"t":"code","b":[32,227,239],"m":"jsr","oa":61411,"o":"io_out"},{"a":63838,"t":"code","b":[32,0,251],"m":"jsr","oa":64256,"o":"save_bitmap_under"},{"a":63841,"t":"code","b":[32,70,251],"m":"jsr","oa":64326,"o":"save_colours_under"},{"a":63844,"t":"code","b":[32,222,239],"m":"jsr","oa":61406,"o":"io_in"},{"a":63847,"t":"code","b":[40],"m":"plp"},{"a":63848,"t":"code","b":[32,233,236],"m":"jsr","oa":60649,"o":"fill_bitmap_rect"},{"a":63851,"t":"code","b":[32,150,248],"m":"jsr","oa":63638,"o":"draw_frame"},{"a":63854,"t":"code","b":[32,34,237],"m":"jsr","oa":60706,"o":"fill_colour_rect"},{"a":63857,"t":"code","b":[104],"m":"pla"},{"a":63858,"t":"code","b":[170],"m":"tax"},{"a":63859,"t":"code","b":[32,240,249],"m":"jsr","oa":63984,"o":"select_window"},{"a":63862,"t":"code","b":[72],"m":"pha"},{"a":63863,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":63865,"t":"code","b":[133,76],"m":"sta","oa":76,"o":"text_x"},{"a":63867,"t":"code","b":[133,77],"m":"sta","oa":77,"o":"text_y"},{"a":63869,"t":"code","b":[104],"m":"pla"},{"a":63870,"t":"code","b":[96],"m":"rts"},{"a":63871,"l":"open_window","c":"OS function $10: opens a window that does not keep what it covers, in the first free slot of windows 0-7. The same eight arguments as open_window_saved; returns its number, or $FF with N set when none is free.","t":"code","b":[169,8],"m":"lda","o":"#$08","x":[60482]},{"a":63873,"t":"code","b":[32,210,237],"m":"jsr","oa":60882,"o":"os_inline_args"},{"a":63876,"t":"code","b":[32,221,250],"m":"jsr","oa":64221,"o":"find_free_window"},{"a":63879,"t":"code","b":[16,1],"m":"bpl","oa":63882,"o":"b_F98A"},{"a":63881,"t":"code","b":[96],"m":"rts"},{"a":63882,"l":"b_F98A","t":"code","b":[72],"m":"pha","x":[63879]},{"a":63883,"t":"code","b":[32,243,250],"m":"jsr","oa":64243,"o":"add_frame_cells"},{"a":63886,"t":"code","b":[32,193,250],"m":"jsr","oa":64193,"o":"store_window_entry"},{"a":63889,"t":"code","b":[32,233,236],"m":"jsr","oa":60649,"o":"fill_bitmap_rect"},{"a":63892,"t":"code","b":[32,150,248],"m":"jsr","oa":63638,"o":"draw_frame"},{"a":63895,"t":"code","b":[32,34,237],"m":"jsr","oa":60706,"o":"fill_colour_rect"},{"a":63898,"t":"code","b":[104],"m":"pla"},{"a":63899,"t":"code","b":[170],"m":"tax"},{"a":63900,"t":"code","b":[32,240,249],"m":"jsr","oa":63984,"o":"select_window"},{"a":63903,"t":"code","b":[96],"m":"rts"},{"a":63904,"l":"close_window_here","c":"OS function $12: closes the current window (close_window).","t":"code","b":[166,78],"m":"ldx","oa":78,"o":"current_win","x":[60486]},{"a":63906,"l":"close_window","c":"OS function $13: closes window X: clears its flag, rubs off its icons, and puts back what it covered (windows 8-15: restore_bitmap_under and restore_colours_under, then the save stack shrinks by 16 bytes) or the screen's background (windows 0-7). Its slot is marked free.","t":"code","b":[138],"m":"txa","x":[60488]},{"a":63907,"t":"code","b":[72],"m":"pha"},{"a":63908,"t":"code","b":[32,109,246],"m":"jsr","oa":63085,"o":"clear_window_flag"},{"a":63911,"t":"code","b":[32,122,246],"m":"jsr","oa":63098,"o":"erase_window_icons"},{"a":63914,"t":"code","b":[201,8],"m":"cmp","o":"#$08"},{"a":63916,"t":"code","b":[48,31],"m":"bmi","oa":63949,"o":"b_F9CD"},{"a":63918,"t":"code","b":[72],"m":"pha"},{"a":63919,"t":"code","b":[104],"m":"pla"},{"a":63920,"t":"code","b":[32,149,250],"m":"jsr","oa":64149,"o":"fetch_window_entry"},{"a":63923,"t":"code","b":[8],"m":"php"},{"a":63924,"t":"code","b":[120],"m":"sei"},{"a":63925,"t":"code","b":[32,227,239],"m":"jsr","oa":61411,"o":"io_out"},{"a":63928,"t":"code","b":[32,121,251],"m":"jsr","oa":64377,"o":"restore_bitmap_under"},{"a":63931,"t":"code","b":[32,190,251],"m":"jsr","oa":64446,"o":"restore_colours_under"},{"a":63934,"t":"code","b":[32,222,239],"m":"jsr","oa":61406,"o":"io_in"},{"a":63937,"t":"code","b":[40],"m":"plp"},{"a":63938,"t":"code","b":[165,65],"m":"lda","oa":65,"o":"save_stack"},{"a":63940,"t":"code","b":[56],"m":"sec"},{"a":63941,"t":"code","b":[233,16],"m":"sbc","o":"#$10"},{"a":63943,"t":"code","b":[133,65],"m":"sta","oa":65,"o":"save_stack"},{"a":63945,"t":"code","b":[104],"m":"pla"},{"a":63946,"t":"code","b":[76,227,249],"m":"jmp","oa":63971,"o":"j_F9E3"},{"a":63949,"l":"b_F9CD","t":"code","b":[32,149,250],"m":"jsr","oa":64149,"o":"fetch_window_entry","x":[63916]},{"a":63952,"t":"code","b":[165,62],"m":"lda","oa":62,"o":"bg_pattern_a"},{"a":63954,"t":"code","b":[133,35],"m":"sta","oa":35,"o":"zpa_23"},{"a":63956,"t":"code","b":[165,63],"m":"lda","oa":63,"o":"bg_pattern_b"},{"a":63958,"t":"code","b":[133,36],"m":"sta","oa":36,"o":"zpa_24"},{"a":63960,"t":"code","b":[165,64],"m":"lda","oa":64,"o":"bg_colour"},{"a":63962,"t":"code","b":[133,37],"m":"sta","oa":37,"o":"zpa_25"},{"a":63964,"t":"code","b":[32,34,237],"m":"jsr","oa":60706,"o":"fill_colour_rect"},{"a":63967,"t":"code","b":[32,233,236],"m":"jsr","oa":60649,"o":"fill_bitmap_rect"},{"a":63970,"t":"code","b":[104],"m":"pla"},{"a":63971,"l":"j_F9E3","t":"code","b":[170],"m":"tax","x":[63946]},{"a":63972,"t":"code","b":[188,53,239],"m":"ldy","oa":61237,"o":"times_16,x"},{"a":63975,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":63977,"t":"code","b":[153,0,2],"m":"sta","oa":512,"o":"window_table,y"},{"a":63980,"t":"code","b":[96],"m":"rts"},{"a":63981,"l":"current_window","c":"OS function $14: returns the current window's number in A.","t":"code","b":[165,78],"m":"lda","oa":78,"o":"current_win","x":[60490]},{"a":63983,"t":"code","b":[96],"m":"rts"},{"a":63984,"l":"select_window","c":"OS function $15: makes window X current. Stores the previous window's text cursor back in its entry (store_window_cursor), copies window X's entry into $44-$4D, takes the inside as the frame less a cell all round, and works out the inside's bitmap address ($4F/$50) and the last pixel a character may start at ($51). Sets X's flag.","t":"code","b":[32,51,250],"m":"jsr","oa":64051,"o":"store_window_cursor","x":[60492,63859,63900,64528,64538,64592,64625]},{"a":63987,"t":"code","b":[134,78],"m":"stx","oa":78,"o":"current_win"},{"a":63989,"t":"code","b":[188,53,239],"m":"ldy","oa":61237,"o":"times_16,x"},{"a":63992,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":63994,"l":"b_F9FA","t":"code","b":[185,0,2],"m":"lda","oa":512,"o":"window_table,y","x":[64003]},{"a":63997,"t":"code","b":[149,68],"m":"sta","oa":68,"o":"window,x"},{"a":63999,"t":"code","b":[200],"m":"iny"},{"a":64000,"t":"code","b":[232],"m":"inx"},{"a":64001,"t":"code","b":[224,10],"m":"cpx","o":"#$0A"},{"a":64003,"t":"code","b":[208,245],"m":"bne","oa":63994,"o":"b_F9FA"},{"a":64005,"t":"code","b":[230,68],"m":"inc","oa":68,"o":"window"},{"a":64007,"t":"code","b":[230,69],"m":"inc","oa":69,"o":"zpa_45"},{"a":64009,"t":"code","b":[198,70],"m":"dec","oa":70,"o":"zpa_46"},{"a":64011,"t":"code","b":[198,70],"m":"dec","oa":70,"o":"zpa_46"},{"a":64013,"t":"code","b":[198,71],"m":"dec","oa":71,"o":"zpa_47"},{"a":64015,"t":"code","b":[198,71],"m":"dec","oa":71,"o":"zpa_47"},{"a":64017,"t":"code","b":[165,68],"m":"lda","oa":68,"o":"window"},{"a":64019,"t":"code","b":[133,39],"m":"sta","oa":39,"o":"zpa_27"},{"a":64021,"t":"code","b":[165,69],"m":"lda","oa":69,"o":"zpa_45"},{"a":64023,"t":"code","b":[133,41],"m":"sta","oa":41,"o":"zpa_29"},{"a":64025,"t":"code","b":[32,101,237],"m":"jsr","oa":60773,"o":"bitmap_cell_address"},{"a":64028,"t":"code","b":[165,2],"m":"lda","oa":2,"o":"bitmap_ptr"},{"a":64030,"t":"code","b":[133,79],"m":"sta","oa":79,"o":"win_bitmap"},{"a":64032,"t":"code","b":[165,3],"m":"lda","oa":3,"o":"zpa_03"},{"a":64034,"t":"code","b":[133,80],"m":"sta","oa":80,"o":"zpa_50"},{"a":64036,"t":"code","b":[166,70],"m":"ldx","oa":70,"o":"zpa_46"},{"a":64038,"t":"code","b":[202],"m":"dex"},{"a":64039,"t":"code","b":[189,20,239],"m":"lda","oa":61204,"o":"times_8,x"},{"a":64042,"t":"code","b":[133,81],"m":"sta","oa":81,"o":"win_last_x"},{"a":64044,"t":"code","b":[165,78],"m":"lda","oa":78,"o":"current_win"},{"a":64046,"t":"code","b":[170],"m":"tax"},{"a":64047,"t":"code","b":[32,101,246],"m":"jsr","oa":63077,"o":"set_window_flag"},{"a":64050,"t":"code","b":[96],"m":"rts"},{"a":64051,"l":"store_window_cursor","c":"Writes $48-$4D, the current window's patterns, colour and text cursor, back into its entry of window_table.","t":"code","b":[134,18],"m":"stx","oa":18,"o":"zpa_12","x":[63984]},{"a":64053,"t":"code","b":[166,78],"m":"ldx","oa":78,"o":"current_win"},{"a":64055,"t":"code","b":[224,255],"m":"cpx","o":"#$FF"},{"a":64057,"t":"code","b":[240,20],"m":"beq","oa":64079,"o":"b_FA4F"},{"a":64059,"t":"code","b":[189,53,239],"m":"lda","oa":61237,"o":"times_16,x"},{"a":64062,"t":"code","b":[24],"m":"clc"},{"a":64063,"t":"code","b":[105,4],"m":"adc","o":"#$04"},{"a":64065,"t":"code","b":[168],"m":"tay"},{"a":64066,"t":"code","b":[162,4],"m":"ldx","o":"#$04"},{"a":64068,"l":"b_FA44","t":"code","b":[181,68],"m":"lda","oa":68,"o":"window,x","x":[64077]},{"a":64070,"t":"code","b":[153,0,2],"m":"sta","oa":512,"o":"window_table,y"},{"a":64073,"t":"code","b":[200],"m":"iny"},{"a":64074,"t":"code","b":[232],"m":"inx"},{"a":64075,"t":"code","b":[224,10],"m":"cpx","o":"#$0A"},{"a":64077,"t":"code","b":[208,245],"m":"bne","oa":64068,"o":"b_FA44"},{"a":64079,"l":"b_FA4F","t":"code","b":[166,18],"m":"ldx","oa":18,"o":"zpa_12","x":[64057]},{"a":64081,"t":"code","b":[96],"m":"rts"},{"a":64082,"l":"reset_windows","c":"OS function $04: frees all sixteen windows (fills $0200-$02FF with $FF), clears the current window's copy at $44-$51 to $FF, and starts the stack of saved backgrounds empty, at $C810 (in XXXMYOS2, at $D000).","t":"code","b":[169,255],"m":"lda","o":"#$FF","x":[60458,61360]},{"a":64084,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":64086,"l":"b_FA56","t":"code","b":[157,0,2],"m":"sta","oa":512,"o":"window_table,x","x":[64090]},{"a":64089,"t":"code","b":[202],"m":"dex"},{"a":64090,"t":"code","b":[208,250],"m":"bne","oa":64086,"o":"b_FA56"},{"a":64092,"t":"code","b":[162,13],"m":"ldx","o":"#$0D"},{"a":64094,"l":"b_FA5E","t":"code","b":[149,68],"m":"sta","oa":68,"o":"window,x","x":[64097]},{"a":64096,"t":"code","b":[202],"m":"dex"},{"a":64097,"t":"code","b":[16,251],"m":"bpl","oa":64094,"o":"b_FA5E"},{"a":64099,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":64101,"t":"code","b":[133,65],"m":"sta","oa":65,"o":"save_stack"},{"a":64103,"t":"code","b":[169,16],"m":"lda","o":"#$10"},{"a":64104,"t":"note","c":"The background save area's start, high byte $10 (low) and $C8 (high): $C810, the first byte after episode one's program. XXXMYOS2 loads $00 and $D0 here, $D000, after episode two's.","note":"inside the item at $FA67"},{"a":64105,"t":"code","b":[133,66],"m":"sta","oa":66,"o":"save_ptr"},{"a":64107,"t":"code","b":[169,200],"m":"lda","o":"#$C8"},{"a":64109,"t":"code","b":[133,67],"m":"sta","oa":67,"o":"zpa_43"},{"a":64111,"t":"code","b":[96],"m":"rts"},{"a":64112,"l":"next_save_slot","c":"Takes the next slot of saved windows: adds 16 to $41 and returns 8 plus the slot number in A, or $FF with N set when seven are already taken ($41 would reach $80).","t":"code","b":[24],"m":"clc","x":[63820]},{"a":64113,"t":"code","b":[165,65],"m":"lda","oa":65,"o":"save_stack"},{"a":64115,"t":"code","b":[105,16],"m":"adc","o":"#$10"},{"a":64117,"t":"code","b":[16,3],"m":"bpl","oa":64122,"o":"b_FA7A"},{"a":64119,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":64121,"t":"code","b":[96],"m":"rts"},{"a":64122,"l":"b_FA7A","t":"code","b":[170],"m":"tax","x":[64117]},{"a":64123,"t":"code","b":[165,65],"m":"lda","oa":65,"o":"save_stack"},{"a":64125,"t":"code","b":[134,65],"m":"stx","oa":65,"o":"save_stack"},{"a":64127,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":64128,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":64129,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":64130,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":64131,"t":"code","b":[24],"m":"clc"},{"a":64132,"t":"code","b":[105,8],"m":"adc","o":"#$08"},{"a":64134,"t":"code","b":[96],"m":"rts"},{"a":64135,"l":"store_saved_window","c":"Stores the window in $1F-$26 as entry A (store_window_entry) and its background's address, $42/$43, in bytes 10 and 11.","t":"code","b":[32,193,250],"m":"jsr","oa":64193,"o":"store_window_entry","x":[63830]},{"a":64138,"t":"code","b":[165,66],"m":"lda","oa":66,"o":"save_ptr"},{"a":64140,"t":"code","b":[153,0,2],"m":"sta","oa":512,"o":"window_table,y"},{"a":64143,"t":"code","b":[165,67],"m":"lda","oa":67,"o":"zpa_43"},{"a":64145,"t":"code","b":[153,1,2],"m":"sta","oa":513,"o":"f_0201,y"},{"a":64148,"t":"code","b":[96],"m":"rts"},{"a":64149,"l":"fetch_window_entry","c":"Copies window A's entry into $1F-$26 and, for windows 8-15, takes its background's address back into $42/$43.","t":"code","b":[72],"m":"pha","x":[63920,63949]},{"a":64150,"t":"code","b":[32,173,250],"m":"jsr","oa":64173,"o":"fetch_window_rect"},{"a":64153,"t":"code","b":[200],"m":"iny"},{"a":64154,"t":"code","b":[200],"m":"iny"},{"a":64155,"t":"code","b":[104],"m":"pla"},{"a":64156,"t":"code","b":[201,8],"m":"cmp","o":"#$08"},{"a":64158,"t":"code","b":[48,12],"m":"bmi","oa":64172,"o":"r_FAAC"},{"a":64160,"t":"code","b":[185,0,2],"m":"lda","oa":512,"o":"window_table,y"},{"a":64163,"t":"code","b":[200],"m":"iny"},{"a":64164,"t":"code","b":[133,66],"m":"sta","oa":66,"o":"save_ptr"},{"a":64166,"t":"code","b":[185,0,2],"m":"lda","oa":512,"o":"window_table,y"},{"a":64169,"t":"code","b":[200],"m":"iny"},{"a":64170,"t":"code","b":[133,67],"m":"sta","oa":67,"o":"zpa_43"},{"a":64172,"l":"r_FAAC","t":"code","b":[96],"m":"rts","x":[64158]},{"a":64173,"l":"fetch_window_rect","c":"Copies the first eight bytes of window A's entry into $1F-$26.","t":"code","b":[170],"m":"tax","x":[64150]},{"a":64174,"t":"code","b":[72],"m":"pha"},{"a":64175,"t":"code","b":[188,53,239],"m":"ldy","oa":61237,"o":"times_16,x"},{"a":64178,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":64180,"l":"b_FAB4","t":"code","b":[185,0,2],"m":"lda","oa":512,"o":"window_table,y","x":[64189]},{"a":64183,"t":"code","b":[149,31],"m":"sta","oa":31,"o":"os_args,x"},{"a":64185,"t":"code","b":[200],"m":"iny"},{"a":64186,"t":"code","b":[232],"m":"inx"},{"a":64187,"t":"code","b":[224,8],"m":"cpx","o":"#$08"},{"a":64189,"t":"code","b":[208,245],"m":"bne","oa":64180,"o":"b_FAB4"},{"a":64191,"t":"code","b":[104],"m":"pla"},{"a":64192,"t":"code","b":[96],"m":"rts"},{"a":64193,"l":"store_window_entry","c":"Copies $1F-$26 into window A's entry, with its text cursor (bytes 8-9) at the top left.","t":"code","b":[170],"m":"tax","x":[63886,64135]},{"a":64194,"t":"code","b":[188,53,239],"m":"ldy","oa":61237,"o":"times_16,x"},{"a":64197,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":64199,"l":"b_FAC7","t":"code","b":[181,31],"m":"lda","oa":31,"o":"os_args,x","x":[64208]},{"a":64201,"t":"code","b":[153,0,2],"m":"sta","oa":512,"o":"window_table,y"},{"a":64204,"t":"code","b":[200],"m":"iny"},{"a":64205,"t":"code","b":[232],"m":"inx"},{"a":64206,"t":"code","b":[224,8],"m":"cpx","o":"#$08"},{"a":64208,"t":"code","b":[208,245],"m":"bne","oa":64199,"o":"b_FAC7"},{"a":64210,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":64212,"t":"code","b":[153,0,2],"m":"sta","oa":512,"o":"window_table,y"},{"a":64215,"t":"code","b":[200],"m":"iny"},{"a":64216,"t":"code","b":[153,0,2],"m":"sta","oa":512,"o":"window_table,y"},{"a":64219,"t":"code","b":[200],"m":"iny"},{"a":64220,"t":"code","b":[96],"m":"rts"},{"a":64221,"l":"find_free_window","c":"Returns the first free slot among windows 0-7 (byte 0 negative), or $FF when none is.","t":"code","b":[160,0],"m":"ldy","o":"#$00","x":[63876]},{"a":64223,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":64225,"l":"b_FAE1","t":"code","b":[189,0,2],"m":"lda","oa":512,"o":"window_table,x","x":[64236]},{"a":64228,"t":"code","b":[48,11],"m":"bmi","oa":64241,"o":"b_FAF1"},{"a":64230,"t":"code","b":[200],"m":"iny"},{"a":64231,"t":"code","b":[138],"m":"txa"},{"a":64232,"t":"code","b":[24],"m":"clc"},{"a":64233,"t":"code","b":[105,16],"m":"adc","o":"#$10"},{"a":64235,"t":"code","b":[170],"m":"tax"},{"a":64236,"t":"code","b":[16,243],"m":"bpl","oa":64225,"o":"b_FAE1"},{"a":64238,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":64240,"t":"code","b":[96],"m":"rts"},{"a":64241,"l":"b_FAF1","t":"code","b":[152],"m":"tya","x":[64228]},{"a":64242,"t":"code","b":[96],"m":"rts"},{"a":64243,"l":"add_frame_cells","c":"Grows the rectangle in $1F-$22 by a cell on every side, for the frame.","t":"code","b":[198,31],"m":"dec","oa":31,"o":"os_args","x":[63827,63883,64792]},{"a":64245,"t":"code","b":[198,32],"m":"dec","oa":32,"o":"zpa_20"},{"a":64247,"t":"code","b":[230,33],"m":"inc","oa":33,"o":"zpa_21"},{"a":64249,"t":"code","b":[230,33],"m":"inc","oa":33,"o":"zpa_21"},{"a":64251,"t":"code","b":[230,34],"m":"inc","oa":34,"o":"zpa_22"},{"a":64253,"t":"code","b":[230,34],"m":"inc","oa":34,"o":"zpa_22"},{"a":64255,"t":"code","b":[96],"m":"rts"},{"a":64256,"l":"save_bitmap_under","c":"Copies the bitmap bytes of the rectangle $1F-$22 to the background save area at $42/$43, cell by cell, moving the pointer on.","t":"code","b":[165,6],"m":"lda","oa":6,"o":"draw_flag","x":[63838]},{"a":64258,"t":"code","b":[72],"m":"pha"},{"a":64259,"t":"code","b":[32,124,238],"m":"jsr","oa":61052,"o":"draw_to_bitmap"},{"a":64262,"t":"code","b":[165,31],"m":"lda","oa":31,"o":"os_args"},{"a":64264,"t":"code","b":[133,39],"m":"sta","oa":39,"o":"zpa_27"},{"a":64266,"t":"code","b":[165,32],"m":"lda","oa":32,"o":"zpa_20"},{"a":64268,"t":"code","b":[133,41],"m":"sta","oa":41,"o":"zpa_29"},{"a":64270,"t":"code","b":[32,101,237],"m":"jsr","oa":60773,"o":"bitmap_cell_address"},{"a":64273,"t":"code","b":[104],"m":"pla"},{"a":64274,"t":"code","b":[133,6],"m":"sta","oa":6,"o":"draw_flag"},{"a":64276,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":64278,"t":"code","b":[165,34],"m":"lda","oa":34,"o":"zpa_22"},{"a":64280,"t":"code","b":[133,11],"m":"sta","oa":11,"o":"zpa_0B"},{"a":64282,"l":"b_FB1A","t":"code","b":[165,33],"m":"lda","oa":33,"o":"zpa_21","x":[64323]},{"a":64284,"t":"code","b":[133,13],"m":"sta","oa":13,"o":"zpa_0D"},{"a":64286,"t":"code","b":[32,39,238],"m":"jsr","oa":60967,"o":"copy_bitmap_pointer"},{"a":64289,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":64291,"l":"b_FB23","t":"code","b":[169,8],"m":"lda","o":"#$08","x":[64316]},{"a":64293,"t":"code","b":[133,15],"m":"sta","oa":15,"o":"zpa_0F"},{"a":64295,"l":"b_FB27","t":"code","b":[177,4],"m":"lda","oa":4,"o":"(bitmap_ptr2),y","x":[64312]},{"a":64297,"t":"code","b":[129,66],"m":"sta","oa":66,"o":"(save_ptr,x)"},{"a":64299,"t":"code","b":[230,66],"m":"inc","oa":66,"o":"save_ptr"},{"a":64301,"t":"code","b":[208,2],"m":"bne","oa":64305,"o":"b_FB31"},{"a":64303,"t":"code","b":[230,67],"m":"inc","oa":67,"o":"zpa_43"},{"a":64305,"l":"b_FB31","t":"code","b":[200],"m":"iny","x":[64301]},{"a":64306,"t":"code","b":[208,2],"m":"bne","oa":64310,"o":"b_FB36"},{"a":64308,"t":"code","b":[230,5],"m":"inc","oa":5,"o":"zpa_05"},{"a":64310,"l":"b_FB36","t":"code","b":[198,15],"m":"dec","oa":15,"o":"zpa_0F","x":[64306]},{"a":64312,"t":"code","b":[208,237],"m":"bne","oa":64295,"o":"b_FB27"},{"a":64314,"t":"code","b":[198,13],"m":"dec","oa":13,"o":"zpa_0D"},{"a":64316,"t":"code","b":[208,229],"m":"bne","oa":64291,"o":"b_FB23"},{"a":64318,"t":"code","b":[32,25,238],"m":"jsr","oa":60953,"o":"next_cell_row"},{"a":64321,"t":"code","b":[198,11],"m":"dec","oa":11,"o":"zpa_0B"},{"a":64323,"t":"code","b":[208,213],"m":"bne","oa":64282,"o":"b_FB1A"},{"a":64325,"t":"code","b":[96],"m":"rts"},{"a":64326,"l":"save_colours_under","c":"Copies the screen-memory bytes of the same rectangle to the save area after them.","t":"code","b":[165,31],"m":"lda","oa":31,"o":"os_args","x":[63841]},{"a":64328,"t":"code","b":[133,39],"m":"sta","oa":39,"o":"zpa_27"},{"a":64330,"t":"code","b":[165,32],"m":"lda","oa":32,"o":"zpa_20"},{"a":64332,"t":"code","b":[133,41],"m":"sta","oa":41,"o":"zpa_29"},{"a":64334,"t":"code","b":[32,72,237],"m":"jsr","oa":60744,"o":"screen_cell_address"},{"a":64337,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":64339,"t":"code","b":[165,34],"m":"lda","oa":34,"o":"zpa_22"},{"a":64341,"t":"code","b":[133,13],"m":"sta","oa":13,"o":"zpa_0D"},{"a":64343,"l":"b_FB57","t":"code","b":[165,37],"m":"lda","oa":37,"o":"zpa_25","x":[64374]},{"a":64345,"t":"code","b":[164,33],"m":"ldy","oa":33,"o":"zpa_21"},{"a":64347,"t":"code","b":[136],"m":"dey"},{"a":64348,"l":"b_FB5C","t":"code","b":[177,2],"m":"lda","oa":2,"o":"(bitmap_ptr),y","x":[64359]},{"a":64350,"t":"code","b":[129,66],"m":"sta","oa":66,"o":"(save_ptr,x)"},{"a":64352,"t":"code","b":[230,66],"m":"inc","oa":66,"o":"save_ptr"},{"a":64354,"t":"code","b":[208,2],"m":"bne","oa":64358,"o":"b_FB66"},{"a":64356,"t":"code","b":[230,67],"m":"inc","oa":67,"o":"zpa_43"},{"a":64358,"l":"b_FB66","t":"code","b":[136],"m":"dey","x":[64354]},{"a":64359,"t":"code","b":[16,243],"m":"bpl","oa":64348,"o":"b_FB5C"},{"a":64361,"t":"code","b":[24],"m":"clc"},{"a":64362,"t":"code","b":[165,2],"m":"lda","oa":2,"o":"bitmap_ptr"},{"a":64364,"t":"code","b":[105,40],"m":"adc","o":"#$28"},{"a":64366,"t":"code","b":[133,2],"m":"sta","oa":2,"o":"bitmap_ptr"},{"a":64368,"t":"code","b":[144,2],"m":"bcc","oa":64372,"o":"b_FB74"},{"a":64370,"t":"code","b":[230,3],"m":"inc","oa":3,"o":"zpa_03"},{"a":64372,"l":"b_FB74","t":"code","b":[198,13],"m":"dec","oa":13,"o":"zpa_0D","x":[64368]},{"a":64374,"t":"code","b":[208,223],"m":"bne","oa":64343,"o":"b_FB57"},{"a":64376,"t":"code","b":[96],"m":"rts"},{"a":64377,"l":"restore_bitmap_under","c":"Copies a window's saved bitmap from the address in $42/$43 back into its rectangle.","t":"code","b":[165,31],"m":"lda","oa":31,"o":"os_args","x":[63928]},{"a":64379,"t":"code","b":[133,39],"m":"sta","oa":39,"o":"zpa_27"},{"a":64381,"t":"code","b":[165,32],"m":"lda","oa":32,"o":"zpa_20"},{"a":64383,"t":"code","b":[133,41],"m":"sta","oa":41,"o":"zpa_29"},{"a":64385,"t":"code","b":[165,66],"m":"lda","oa":66,"o":"save_ptr"},{"a":64387,"t":"code","b":[133,20],"m":"sta","oa":20,"o":"zpa_14"},{"a":64389,"t":"code","b":[165,67],"m":"lda","oa":67,"o":"zpa_43"},{"a":64391,"t":"code","b":[133,21],"m":"sta","oa":21,"o":"zpa_15"},{"a":64393,"t":"code","b":[32,101,237],"m":"jsr","oa":60773,"o":"bitmap_cell_address"},{"a":64396,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":64398,"t":"code","b":[165,34],"m":"lda","oa":34,"o":"zpa_22"},{"a":64400,"t":"code","b":[133,11],"m":"sta","oa":11,"o":"zpa_0B"},{"a":64402,"l":"b_FB92","t":"code","b":[165,33],"m":"lda","oa":33,"o":"zpa_21","x":[64443]},{"a":64404,"t":"code","b":[133,13],"m":"sta","oa":13,"o":"zpa_0D"},{"a":64406,"t":"code","b":[32,39,238],"m":"jsr","oa":60967,"o":"copy_bitmap_pointer"},{"a":64409,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":64411,"l":"b_FB9B","t":"code","b":[169,8],"m":"lda","o":"#$08","x":[64436]},{"a":64413,"t":"code","b":[133,15],"m":"sta","oa":15,"o":"zpa_0F"},{"a":64415,"l":"b_FB9F","t":"code","b":[161,20],"m":"lda","oa":20,"o":"(zpa_14,x)","x":[64432]},{"a":64417,"t":"code","b":[145,4],"m":"sta","oa":4,"o":"(bitmap_ptr2),y"},{"a":64419,"t":"code","b":[230,20],"m":"inc","oa":20,"o":"zpa_14"},{"a":64421,"t":"code","b":[208,2],"m":"bne","oa":64425,"o":"b_FBA9"},{"a":64423,"t":"code","b":[230,21],"m":"inc","oa":21,"o":"zpa_15"},{"a":64425,"l":"b_FBA9","t":"code","b":[200],"m":"iny","x":[64421]},{"a":64426,"t":"code","b":[208,2],"m":"bne","oa":64430,"o":"b_FBAE"},{"a":64428,"t":"code","b":[230,5],"m":"inc","oa":5,"o":"zpa_05"},{"a":64430,"l":"b_FBAE","t":"code","b":[198,15],"m":"dec","oa":15,"o":"zpa_0F","x":[64426]},{"a":64432,"t":"code","b":[208,237],"m":"bne","oa":64415,"o":"b_FB9F"},{"a":64434,"t":"code","b":[198,13],"m":"dec","oa":13,"o":"zpa_0D"},{"a":64436,"t":"code","b":[208,229],"m":"bne","oa":64411,"o":"b_FB9B"},{"a":64438,"t":"code","b":[32,25,238],"m":"jsr","oa":60953,"o":"next_cell_row"},{"a":64441,"t":"code","b":[198,11],"m":"dec","oa":11,"o":"zpa_0B"},{"a":64443,"t":"code","b":[208,213],"m":"bne","oa":64402,"o":"b_FB92"},{"a":64445,"t":"code","b":[96],"m":"rts"},{"a":64446,"l":"restore_colours_under","c":"Copies the window's saved screen-memory bytes back after restore_bitmap_under.","t":"code","b":[165,31],"m":"lda","oa":31,"o":"os_args","x":[63931]},{"a":64448,"t":"code","b":[133,39],"m":"sta","oa":39,"o":"zpa_27"},{"a":64450,"t":"code","b":[165,32],"m":"lda","oa":32,"o":"zpa_20"},{"a":64452,"t":"code","b":[133,41],"m":"sta","oa":41,"o":"zpa_29"},{"a":64454,"t":"code","b":[32,72,237],"m":"jsr","oa":60744,"o":"screen_cell_address"},{"a":64457,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":64459,"t":"code","b":[165,34],"m":"lda","oa":34,"o":"zpa_22"},{"a":64461,"t":"code","b":[133,13],"m":"sta","oa":13,"o":"zpa_0D"},{"a":64463,"l":"b_FBCF","t":"code","b":[165,37],"m":"lda","oa":37,"o":"zpa_25","x":[64494]},{"a":64465,"t":"code","b":[164,33],"m":"ldy","oa":33,"o":"zpa_21"},{"a":64467,"t":"code","b":[136],"m":"dey"},{"a":64468,"l":"b_FBD4","t":"code","b":[161,20],"m":"lda","oa":20,"o":"(zpa_14,x)","x":[64479]},{"a":64470,"t":"code","b":[145,2],"m":"sta","oa":2,"o":"(bitmap_ptr),y"},{"a":64472,"t":"code","b":[230,20],"m":"inc","oa":20,"o":"zpa_14"},{"a":64474,"t":"code","b":[208,2],"m":"bne","oa":64478,"o":"b_FBDE"},{"a":64476,"t":"code","b":[230,21],"m":"inc","oa":21,"o":"zpa_15"},{"a":64478,"l":"b_FBDE","t":"code","b":[136],"m":"dey","x":[64474]},{"a":64479,"t":"code","b":[16,243],"m":"bpl","oa":64468,"o":"b_FBD4"},{"a":64481,"t":"code","b":[24],"m":"clc"},{"a":64482,"t":"code","b":[165,2],"m":"lda","oa":2,"o":"bitmap_ptr"},{"a":64484,"t":"code","b":[105,40],"m":"adc","o":"#$28"},{"a":64486,"t":"code","b":[133,2],"m":"sta","oa":2,"o":"bitmap_ptr"},{"a":64488,"t":"code","b":[144,2],"m":"bcc","oa":64492,"o":"b_FBEC"},{"a":64490,"t":"code","b":[230,3],"m":"inc","oa":3,"o":"zpa_03"},{"a":64492,"l":"b_FBEC","t":"code","b":[198,13],"m":"dec","oa":13,"o":"zpa_0D","x":[64488]},{"a":64494,"t":"code","b":[208,223],"m":"bne","oa":64463,"o":"b_FBCF"},{"a":64496,"t":"code","b":[96],"m":"rts"},{"a":64497,"l":"a_FBF1","c":"OS functions $18-$1A: jump to os_dead_stub.","t":"code","b":[76,0,252],"m":"jmp","oa":64512,"o":"os_dead_stub","x":[60498,60500,60502]},{"a":64500,"l":"print_char","c":"Prints A in the current window: a control code below $20 goes to its routine through control_codes; a glyph is checked against the window's width (wrap_check), looked up in the font (glyph_address) and copied, inverted, to the text cursor, which moves on eight pixels.","t":"code","b":[201,32],"m":"cmp","o":"#$20","x":[60419,62148,62174,62180,64521,64533,64556,64603,64661,64671]},{"a":64502,"t":"code","b":[16,3],"m":"bpl","oa":64507,"o":"b_FBFB"},{"a":64504,"t":"code","b":[76,165,252],"m":"jmp","oa":64677,"o":"control_code"},{"a":64507,"l":"b_FBFB","t":"code","b":[32,119,252],"m":"jsr","oa":64631,"o":"wrap_check","x":[64502]},{"a":64510,"l":"draw_glyph","c":"Draws character A at the text cursor without the width check, and moves the cursor on.","t":"code","b":[32,146,253],"m":"jsr","oa":64914,"o":"glyph_address","x":[64656]},{"a":64512,"t":"note","l":"os_dead_stub","c":"The target of every JMP $FC00 in the OS: this address is the third byte of the JSR $FD92 above it, so the processor reads $FD $20 $FD (SBC $FD20,X) and runs on through misaligned bytes. Every function that jumps here (os_function_table) crashes if called.","note":"inside the item at $FBFE","x":[61015,61040,61057,61466,62366,62595,63152,63182,63635,64497]},{"a":64513,"t":"code","b":[32,96,253],"m":"jsr","oa":64864,"o":"cursor_address"},{"a":64516,"t":"code","b":[76,79,253],"m":"jmp","oa":64847,"o":"copy_glyph"},{"a":64519,"l":"print_char_in_window","c":"Prints A in window X; when X is not the current window, selects X for the character and the previous window again after it.","t":"code","b":[228,78],"m":"cpx","oa":78,"o":"current_win","x":[60425]},{"a":64521,"t":"code","b":[240,233],"m":"beq","oa":64500,"o":"print_char"},{"a":64523,"t":"code","b":[133,17],"m":"sta","oa":17,"o":"zpa_11"},{"a":64525,"t":"code","b":[165,78],"m":"lda","oa":78,"o":"current_win"},{"a":64527,"t":"code","b":[72],"m":"pha"},{"a":64528,"t":"code","b":[32,240,249],"m":"jsr","oa":63984,"o":"select_window"},{"a":64531,"t":"code","b":[165,17],"m":"lda","oa":17,"o":"zpa_11"},{"a":64533,"t":"code","b":[32,244,251],"m":"jsr","oa":64500,"o":"print_char"},{"a":64536,"t":"code","b":[104],"m":"pla"},{"a":64537,"t":"code","b":[170],"m":"tax"},{"a":64538,"t":"code","b":[32,240,249],"m":"jsr","oa":63984,"o":"select_window"},{"a":64541,"t":"code","b":[96],"m":"rts"},{"a":64542,"l":"print_inline_string","c":"Prints the zero-terminated string after the caller's JSR in the current window, a character at a time through print_char, and returns past its zero.","t":"code","b":[104],"m":"pla","x":[60422,64581]},{"a":64543,"t":"code","b":[133,24],"m":"sta","oa":24,"o":"zpa_18"},{"a":64545,"t":"code","b":[104],"m":"pla"},{"a":64546,"t":"code","b":[133,25],"m":"sta","oa":25,"o":"zpa_19"},{"a":64548,"t":"code","b":[160,1],"m":"ldy","o":"#$01"},{"a":64550,"l":"j_FC26","t":"code","b":[132,29],"m":"sty","oa":29,"o":"zpa_1D","x":[64562]},{"a":64552,"t":"code","b":[177,24],"m":"lda","oa":24,"o":"(zpa_18),y"},{"a":64554,"t":"code","b":[240,9],"m":"beq","oa":64565,"o":"b_FC35"},{"a":64556,"t":"code","b":[32,244,251],"m":"jsr","oa":64500,"o":"print_char"},{"a":64559,"t":"code","b":[164,29],"m":"ldy","oa":29,"o":"zpa_1D"},{"a":64561,"t":"code","b":[200],"m":"iny"},{"a":64562,"t":"code","b":[76,38,252],"m":"jmp","oa":64550,"o":"j_FC26"},{"a":64565,"l":"b_FC35","t":"code","b":[200],"m":"iny","x":[64554]},{"a":64566,"t":"code","b":[152],"m":"tya"},{"a":64567,"t":"code","b":[24],"m":"clc"},{"a":64568,"t":"code","b":[101,24],"m":"adc","oa":24,"o":"zpa_18"},{"a":64570,"t":"code","b":[133,24],"m":"sta","oa":24,"o":"zpa_18"},{"a":64572,"t":"code","b":[144,2],"m":"bcc","oa":64576,"o":"b_FC40"},{"a":64574,"t":"code","b":[230,25],"m":"inc","oa":25,"o":"zpa_19"},{"a":64576,"l":"b_FC40","t":"code","b":[108,24,0],"m":"jmp","oa":24,"o":"(zpa_18)","x":[64572]},{"a":64579,"l":"print_inline_string_in_window","c":"Prints the zero-terminated string after the caller's JSR in window X, selecting it for the string and the previous window again after it.","t":"code","b":[228,78],"m":"cpx","oa":78,"o":"current_win","x":[60428]},{"a":64581,"t":"code","b":[240,215],"m":"beq","oa":64542,"o":"print_inline_string"},{"a":64583,"t":"code","b":[104],"m":"pla"},{"a":64584,"t":"code","b":[133,24],"m":"sta","oa":24,"o":"zpa_18"},{"a":64586,"t":"code","b":[104],"m":"pla"},{"a":64587,"t":"code","b":[133,25],"m":"sta","oa":25,"o":"zpa_19"},{"a":64589,"t":"code","b":[165,78],"m":"lda","oa":78,"o":"current_win"},{"a":64591,"t":"code","b":[72],"m":"pha"},{"a":64592,"t":"code","b":[32,240,249],"m":"jsr","oa":63984,"o":"select_window"},{"a":64595,"t":"code","b":[160,1],"m":"ldy","o":"#$01"},{"a":64597,"l":"j_FC55","t":"code","b":[132,29],"m":"sty","oa":29,"o":"zpa_1D","x":[64609]},{"a":64599,"t":"code","b":[177,24],"m":"lda","oa":24,"o":"(zpa_18),y"},{"a":64601,"t":"code","b":[240,9],"m":"beq","oa":64612,"o":"b_FC64"},{"a":64603,"t":"code","b":[32,244,251],"m":"jsr","oa":64500,"o":"print_char"},{"a":64606,"t":"code","b":[164,29],"m":"ldy","oa":29,"o":"zpa_1D"},{"a":64608,"t":"code","b":[200],"m":"iny"},{"a":64609,"t":"code","b":[76,85,252],"m":"jmp","oa":64597,"o":"j_FC55"},{"a":64612,"l":"b_FC64","t":"code","b":[200],"m":"iny","x":[64601]},{"a":64613,"t":"code","b":[152],"m":"tya"},{"a":64614,"t":"code","b":[24],"m":"clc"},{"a":64615,"t":"code","b":[101,24],"m":"adc","oa":24,"o":"zpa_18"},{"a":64617,"t":"code","b":[133,24],"m":"sta","oa":24,"o":"zpa_18"},{"a":64619,"t":"code","b":[144,2],"m":"bcc","oa":64623,"o":"b_FC6F"},{"a":64621,"t":"code","b":[230,25],"m":"inc","oa":25,"o":"zpa_19"},{"a":64623,"l":"b_FC6F","t":"code","b":[104],"m":"pla","x":[64619]},{"a":64624,"t":"code","b":[170],"m":"tax"},{"a":64625,"t":"code","b":[32,240,249],"m":"jsr","oa":63984,"o":"select_window"},{"a":64628,"t":"code","b":[108,24,0],"m":"jmp","oa":24,"o":"(zpa_18)"},{"a":64631,"l":"wrap_check","c":"Before a glyph is drawn: when the text cursor is past the window's last position ($51), ends the line. If the new character is a space it is dropped; otherwise, if the previous character was a letter or other printable, a hyphen is drawn first, so a word broken at the edge is hyphenated.","t":"code","b":[72],"m":"pha","x":[64507]},{"a":64632,"t":"code","b":[165,81],"m":"lda","oa":81,"o":"win_last_x"},{"a":64634,"t":"code","b":[197,76],"m":"cmp","oa":76,"o":"text_x"},{"a":64636,"t":"code","b":[176,26],"m":"bcs","oa":64664,"o":"b_FC98"},{"a":64638,"t":"code","b":[104],"m":"pla"},{"a":64639,"t":"code","b":[72],"m":"pha"},{"a":64640,"t":"code","b":[201,32],"m":"cmp","o":"#$20"},{"a":64642,"t":"code","b":[240,24],"m":"beq","oa":64668,"o":"b_FC9C"},{"a":64644,"t":"code","b":[165,82],"m":"lda","oa":82,"o":"last_char"},{"a":64646,"t":"code","b":[201,33],"m":"cmp","o":"#$21"},{"a":64648,"t":"code","b":[144,9],"m":"bcc","oa":64659,"o":"b_FC93"},{"a":64650,"t":"code","b":[201,127],"m":"cmp","o":"#$7F"},{"a":64652,"t":"code","b":[176,5],"m":"bcs","oa":64659,"o":"b_FC93"},{"a":64654,"t":"code","b":[169,45],"m":"lda","o":"#$2D"},{"a":64656,"t":"code","b":[32,254,251],"m":"jsr","oa":64510,"o":"draw_glyph"},{"a":64659,"l":"b_FC93","t":"code","b":[169,13],"m":"lda","o":"#$0D","x":[64648,64652]},{"a":64661,"t":"code","b":[32,244,251],"m":"jsr","oa":64500,"o":"print_char"},{"a":64664,"l":"b_FC98","t":"code","b":[104],"m":"pla","x":[64636]},{"a":64665,"t":"code","b":[133,82],"m":"sta","oa":82,"o":"last_char"},{"a":64667,"t":"code","b":[96],"m":"rts"},{"a":64668,"l":"b_FC9C","t":"code","b":[104],"m":"pla","x":[64642]},{"a":64669,"t":"code","b":[169,13],"m":"lda","o":"#$0D"},{"a":64671,"t":"code","b":[32,244,251],"m":"jsr","oa":64500,"o":"print_char"},{"a":64674,"t":"code","b":[104],"m":"pla"},{"a":64675,"t":"code","b":[104],"m":"pla"},{"a":64676,"t":"code","b":[96],"m":"rts"},{"a":64677,"l":"control_code","c":"Runs control code A (below $20) through the table control_codes.","t":"code","b":[10],"m":"asl","o":"a","x":[64504]},{"a":64678,"t":"code","b":[132,19],"m":"sty","oa":19,"o":"zpa_13"},{"a":64680,"t":"code","b":[168],"m":"tay"},{"a":64681,"t":"code","b":[185,184,252],"m":"lda","oa":64696,"o":"control_codes,y"},{"a":64684,"t":"code","b":[133,20],"m":"sta","oa":20,"o":"zpa_14"},{"a":64686,"t":"code","b":[185,185,252],"m":"lda","oa":64697,"o":"control_codes_hi,y"},{"a":64689,"t":"code","b":[133,21],"m":"sta","oa":21,"o":"zpa_15"},{"a":64691,"t":"code","b":[164,19],"m":"ldy","oa":19,"o":"zpa_13"},{"a":64693,"t":"code","b":[108,20,0],"m":"jmp","oa":20,"o":"(zpa_14)"},{"a":64696,"l":"control_codes","c":"The 32 control codes' routines: 9 sets the cursor's x to X, 10 moves down a line, 12 clears the window, 13 starts a new line; every other code returns at once.","t":"addr","b":[250,252],"oa":64762,"o":"a_FCFA","x":[64681]},{"a":64697,"t":"note","l":"control_codes_hi","c":"control_codes read a byte on, for each routine's high byte.","note":"inside the item at $FCB8","x":[64686]},{"a":64698,"t":"addr","b":[251,252],"oa":64763,"o":"a_FCFB"},{"a":64700,"t":"addr","b":[252,252],"oa":64764,"o":"a_FCFC"},{"a":64702,"t":"addr","b":[253,252],"oa":64765,"o":"a_FCFD"},{"a":64704,"t":"addr","b":[254,252],"oa":64766,"o":"a_FCFE"},{"a":64706,"t":"addr","b":[255,252],"oa":64767,"o":"a_FCFF"},{"a":64708,"t":"addr","b":[0,253],"oa":64768,"o":"a_FD00"},{"a":64710,"t":"addr","b":[1,253],"oa":64769,"o":"r_FD01"},{"a":64712,"t":"addr","b":[2,253],"oa":64770,"o":"a_FD02"},{"a":64714,"t":"addr","b":[3,253],"oa":64771,"o":"a_FD03"},{"a":64716,"t":"addr","b":[6,253],"oa":64774,"o":"a_FD06"},{"a":64718,"t":"addr","b":[14,253],"oa":64782,"o":"a_FD0E"},{"a":64720,"t":"addr","b":[15,253],"oa":64783,"o":"a_FD0F"},{"a":64722,"t":"addr","b":[52,253],"oa":64820,"o":"a_FD34"},{"a":64724,"t":"addr","b":[60,253],"oa":64828,"o":"a_FD3C"},{"a":64726,"t":"addr","b":[61,253],"oa":64829,"o":"a_FD3D"},{"a":64728,"t":"addr","b":[62,253],"oa":64830,"o":"a_FD3E"},{"a":64730,"t":"addr","b":[63,253],"oa":64831,"o":"a_FD3F"},{"a":64732,"t":"addr","b":[64,253],"oa":64832,"o":"a_FD40"},{"a":64734,"t":"addr","b":[65,253],"oa":64833,"o":"a_FD41"},{"a":64736,"t":"addr","b":[66,253],"oa":64834,"o":"a_FD42"},{"a":64738,"t":"addr","b":[67,253],"oa":64835,"o":"a_FD43"},{"a":64740,"t":"addr","b":[68,253],"oa":64836,"o":"a_FD44"},{"a":64742,"t":"addr","b":[69,253],"oa":64837,"o":"a_FD45"},{"a":64744,"t":"addr","b":[70,253],"oa":64838,"o":"a_FD46"},{"a":64746,"t":"addr","b":[71,253],"oa":64839,"o":"a_FD47"},{"a":64748,"t":"addr","b":[72,253],"oa":64840,"o":"a_FD48"},{"a":64750,"t":"addr","b":[73,253],"oa":64841,"o":"a_FD49"},{"a":64752,"t":"addr","b":[74,253],"oa":64842,"o":"a_FD4A"},{"a":64754,"t":"addr","b":[75,253],"oa":64843,"o":"a_FD4B"},{"a":64756,"t":"addr","b":[76,253],"oa":64844,"o":"a_FD4C"},{"a":64758,"t":"addr","b":[77,253],"oa":64845,"o":"a_FD4D"},{"a":64760,"t":"addr","b":[78,253],"oa":64846,"o":"a_FD4E"},{"a":64762,"l":"a_FCFA","c":"Control codes 0-8 (and 7, which input_filter uses as a beep that makes no sound): return at once.","t":"code","b":[96],"m":"rts","x":[64696]},{"a":64763,"l":"a_FCFB","c":"Control code 1: returns.","t":"code","b":[96],"m":"rts","x":[64698]},{"a":64764,"l":"a_FCFC","c":"Control code 2: returns.","t":"code","b":[96],"m":"rts","x":[64700]},{"a":64765,"l":"a_FCFD","c":"Control code 3: returns.","t":"code","b":[96],"m":"rts","x":[64702]},{"a":64766,"l":"a_FCFE","c":"Control code 4: returns.","t":"code","b":[96],"m":"rts","x":[64704]},{"a":64767,"l":"a_FCFF","c":"Control code 5: returns.","t":"code","b":[96],"m":"rts","x":[64706]},{"a":64768,"l":"a_FD00","c":"Control code 6: returns.","t":"code","b":[96],"m":"rts","x":[64708]},{"a":64769,"l":"r_FD01","c":"Control code 7: returns; input_filter calls it as a beep that makes no sound.","t":"code","b":[96],"m":"rts","x":[61860,64710]},{"a":64770,"l":"a_FD02","c":"Control code 8: returns.","t":"code","b":[96],"m":"rts","x":[64712]},{"a":64771,"l":"a_FD03","c":"Control code 9: the text cursor's x becomes X (in pixels).","t":"code","b":[134,76],"m":"stx","oa":76,"o":"text_x","x":[64714]},{"a":64773,"t":"code","b":[96],"m":"rts"},{"a":64774,"l":"a_FD06","c":"Control code 10, line feed: the text cursor moves eight pixels down.","t":"code","b":[165,77],"m":"lda","oa":77,"o":"text_y","x":[64716,64824]},{"a":64776,"t":"code","b":[24],"m":"clc"},{"a":64777,"t":"code","b":[105,8],"m":"adc","o":"#$08"},{"a":64779,"t":"code","b":[133,77],"m":"sta","oa":77,"o":"text_y"},{"a":64781,"t":"code","b":[96],"m":"rts"},{"a":64782,"l":"a_FD0E","c":"Control code 11: returns.","t":"code","b":[96],"m":"rts","x":[64718]},{"a":64783,"l":"a_FD0F","c":"Control code 12: clears the current window: refills its whole rectangle with its own pattern and colour, redraws its frame, and puts the cursor at its top left.","t":"code","b":[162,6],"m":"ldx","o":"#$06","x":[64720]},{"a":64785,"l":"b_FD11","t":"code","b":[181,68],"m":"lda","oa":68,"o":"window,x","x":[64790]},{"a":64787,"t":"code","b":[149,31],"m":"sta","oa":31,"o":"os_args,x"},{"a":64789,"t":"code","b":[202],"m":"dex"},{"a":64790,"t":"code","b":[16,249],"m":"bpl","oa":64785,"o":"b_FD11"},{"a":64792,"t":"code","b":[32,243,250],"m":"jsr","oa":64243,"o":"add_frame_cells"},{"a":64795,"t":"code","b":[32,233,236],"m":"jsr","oa":60649,"o":"fill_bitmap_rect"},{"a":64798,"t":"code","b":[32,150,248],"m":"jsr","oa":63638,"o":"draw_frame"},{"a":64801,"t":"code","b":[230,31],"m":"inc","oa":31,"o":"os_args"},{"a":64803,"t":"code","b":[230,31],"m":"inc","oa":31,"o":"os_args"},{"a":64805,"t":"code","b":[198,33],"m":"dec","oa":33,"o":"zpa_21"},{"a":64807,"t":"code","b":[198,33],"m":"dec","oa":33,"o":"zpa_21"},{"a":64809,"t":"code","b":[198,34],"m":"dec","oa":34,"o":"zpa_22"},{"a":64811,"t":"code","b":[198,34],"m":"dec","oa":34,"o":"zpa_22"},{"a":64813,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":64815,"t":"code","b":[133,76],"m":"sta","oa":76,"o":"text_x"},{"a":64817,"t":"code","b":[133,77],"m":"sta","oa":77,"o":"text_y"},{"a":64819,"t":"code","b":[96],"m":"rts"},{"a":64820,"l":"a_FD34","c":"Control code 13, carriage return: the cursor goes to the start of the line, then a line feed.","t":"code","b":[169,0],"m":"lda","o":"#$00","x":[64722]},{"a":64822,"t":"code","b":[133,76],"m":"sta","oa":76,"o":"text_x"},{"a":64824,"t":"code","b":[32,6,253],"m":"jsr","oa":64774,"o":"a_FD06"},{"a":64827,"t":"code","b":[96],"m":"rts"},{"a":64828,"l":"a_FD3C","c":"Control codes 14-31: return at once.","t":"code","b":[96],"m":"rts","x":[64724]},{"a":64829,"l":"a_FD3D","c":"Control code 15: returns.","t":"code","b":[96],"m":"rts","x":[64726]},{"a":64830,"l":"a_FD3E","c":"Control code 16: returns.","t":"code","b":[96],"m":"rts","x":[64728]},{"a":64831,"l":"a_FD3F","c":"Control code 17: returns.","t":"code","b":[96],"m":"rts","x":[64730]},{"a":64832,"l":"a_FD40","c":"Control code 18: returns.","t":"code","b":[96],"m":"rts","x":[64732]},{"a":64833,"l":"a_FD41","c":"Control code 19: returns.","t":"code","b":[96],"m":"rts","x":[64734]},{"a":64834,"l":"a_FD42","c":"Control code 20: returns.","t":"code","b":[96],"m":"rts","x":[64736]},{"a":64835,"l":"a_FD43","c":"Control code 21: returns.","t":"code","b":[96],"m":"rts","x":[64738]},{"a":64836,"l":"a_FD44","c":"Control code 22: returns.","t":"code","b":[96],"m":"rts","x":[64740]},{"a":64837,"l":"a_FD45","c":"Control code 23: returns.","t":"code","b":[96],"m":"rts","x":[64742]},{"a":64838,"l":"a_FD46","c":"Control code 24: returns.","t":"code","b":[96],"m":"rts","x":[64744]},{"a":64839,"l":"a_FD47","c":"Control code 25: returns.","t":"code","b":[96],"m":"rts","x":[64746]},{"a":64840,"l":"a_FD48","c":"Control code 26: returns.","t":"code","b":[96],"m":"rts","x":[64748]},{"a":64841,"l":"a_FD49","c":"Control code 27: returns.","t":"code","b":[96],"m":"rts","x":[64750]},{"a":64842,"l":"a_FD4A","c":"Control code 28: returns.","t":"code","b":[96],"m":"rts","x":[64752]},{"a":64843,"l":"a_FD4B","c":"Control code 29: returns.","t":"code","b":[96],"m":"rts","x":[64754]},{"a":64844,"l":"a_FD4C","c":"Control code 30: returns.","t":"code","b":[96],"m":"rts","x":[64756]},{"a":64845,"l":"a_FD4D","c":"Control code 31: returns.","t":"code","b":[96],"m":"rts","x":[64758]},{"a":64846,"l":"a_FD4E","c":"An RTS after the last control code's, which nothing reaches.","t":"code","b":[96],"m":"rts","x":[64760]},{"a":64847,"l":"copy_glyph","c":"Copies the eight bytes of the glyph at $14/$15, inverted (black letters on white), to the bitmap at $16/$17, and moves the text cursor on eight pixels.","t":"code","b":[160,7],"m":"ldy","o":"#$07","x":[64516]},{"a":64849,"l":"b_FD51","t":"code","b":[177,20],"m":"lda","oa":20,"o":"(zpa_14),y","x":[64856]},{"a":64851,"t":"code","b":[73,255],"m":"eor","o":"#$FF"},{"a":64853,"t":"code","b":[145,22],"m":"sta","oa":22,"o":"(zpa_16),y"},{"a":64855,"t":"code","b":[136],"m":"dey"},{"a":64856,"t":"code","b":[16,247],"m":"bpl","oa":64849,"o":"b_FD51"},{"a":64858,"t":"code","b":[169,8],"m":"lda","o":"#$08"},{"a":64860,"t":"code","b":[32,140,253],"m":"jsr","oa":64908,"o":"cursor_advance"},{"a":64863,"t":"code","b":[96],"m":"rts"},{"a":64864,"l":"cursor_address","c":"Points $16/$17 at the bitmap byte of the text cursor: the window's inside address plus the cursor's x rounded to a cell, plus its y's cell row times 320.","t":"code","b":[165,76],"m":"lda","oa":76,"o":"text_x","x":[64513]},{"a":64866,"t":"code","b":[41,7],"m":"and","o":"#$07"},{"a":64868,"t":"code","b":[133,13],"m":"sta","oa":13,"o":"zpa_0D"},{"a":64870,"t":"code","b":[165,76],"m":"lda","oa":76,"o":"text_x"},{"a":64872,"t":"code","b":[41,248],"m":"and","o":"#$F8"},{"a":64874,"t":"code","b":[24],"m":"clc"},{"a":64875,"t":"code","b":[101,79],"m":"adc","oa":79,"o":"win_bitmap"},{"a":64877,"t":"code","b":[133,22],"m":"sta","oa":22,"o":"zpa_16"},{"a":64879,"t":"code","b":[165,80],"m":"lda","oa":80,"o":"zpa_50"},{"a":64881,"t":"code","b":[105,0],"m":"adc","o":"#$00"},{"a":64883,"t":"code","b":[133,23],"m":"sta","oa":23,"o":"zpa_17"},{"a":64885,"t":"code","b":[165,77],"m":"lda","oa":77,"o":"text_y"},{"a":64887,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":64888,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":64889,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":64890,"t":"code","b":[10],"m":"asl","o":"a"},{"a":64891,"t":"code","b":[168],"m":"tay"},{"a":64892,"t":"code","b":[185,119,239],"m":"lda","oa":61303,"o":"row_offsets_320,y"},{"a":64895,"t":"code","b":[24],"m":"clc"},{"a":64896,"t":"code","b":[101,22],"m":"adc","oa":22,"o":"zpa_16"},{"a":64898,"t":"code","b":[133,22],"m":"sta","oa":22,"o":"zpa_16"},{"a":64900,"t":"code","b":[185,120,239],"m":"lda","oa":61304,"o":"row_offsets_320_hi,y"},{"a":64903,"t":"code","b":[101,23],"m":"adc","oa":23,"o":"zpa_17"},{"a":64905,"t":"code","b":[133,23],"m":"sta","oa":23,"o":"zpa_17"},{"a":64907,"t":"code","b":[96],"m":"rts"},{"a":64908,"l":"cursor_advance","c":"Adds A to the text cursor's x ($4C).","t":"code","b":[24],"m":"clc","x":[64860]},{"a":64909,"t":"code","b":[101,76],"m":"adc","oa":76,"o":"text_x"},{"a":64911,"t":"code","b":[133,76],"m":"sta","oa":76,"o":"text_x"},{"a":64913,"t":"code","b":[96],"m":"rts"},{"a":64914,"l":"glyph_address","c":"Points $14/$15 at the eight bytes of character A in the font: font plus (A - $20) times 8.","t":"code","b":[56],"m":"sec","x":[61829,64510]},{"a":64915,"t":"code","b":[233,32],"m":"sbc","o":"#$20"},{"a":64917,"t":"code","b":[133,20],"m":"sta","oa":20,"o":"zpa_14"},{"a":64919,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":64921,"t":"code","b":[6,20],"m":"asl","oa":20,"o":"zpa_14"},{"a":64923,"t":"code","b":[42],"m":"rol","o":"a"},{"a":64924,"t":"code","b":[6,20],"m":"asl","oa":20,"o":"zpa_14"},{"a":64926,"t":"code","b":[42],"m":"rol","o":"a"},{"a":64927,"t":"code","b":[6,20],"m":"asl","oa":20,"o":"zpa_14"},{"a":64929,"t":"code","b":[42],"m":"rol","o":"a"},{"a":64930,"t":"code","b":[133,21],"m":"sta","oa":21,"o":"zpa_15"},{"a":64932,"t":"code","b":[24],"m":"clc"},{"a":64933,"t":"code","b":[165,20],"m":"lda","oa":20,"o":"zpa_14"},{"a":64935,"t":"code","b":[105,178],"m":"adc","o":"#$B2"},{"a":64937,"t":"code","b":[133,20],"m":"sta","oa":20,"o":"zpa_14"},{"a":64939,"t":"code","b":[165,21],"m":"lda","oa":21,"o":"zpa_15"},{"a":64941,"t":"code","b":[105,253],"m":"adc","o":"#$FD"},{"a":64943,"t":"code","b":[133,21],"m":"sta","oa":21,"o":"zpa_15"},{"a":64945,"t":"code","b":[96],"m":"rts"},{"a":64946,"l":"font","c":"The OS's font, 8 bytes a character from the space ($20) to $61: capitals, digits and punctuation in a cell five pixels wide and seven high, $60 a pound sign (shown for the backquote) and $61 the solid block of the text cursor. Every character fills a whole 8x8 cell when drawn, so text runs at 40 characters a line.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":64954,"t":"byte","b":[128,128,128,128,128,0,128,0]},{"a":64962,"t":"byte","b":[160,160,160,0,0,0,0,0]},{"a":64970,"t":"byte","b":[80,80,248,80,248,80,80,0]},{"a":64978,"t":"byte","b":[32,248,160,248,40,248,32,0]},{"a":64986,"t":"byte","b":[64,72,16,32,64,144,16,0]},{"a":64994,"t":"byte","b":[64,160,160,64,168,144,104,0]},{"a":65002,"t":"byte","b":[32,64,128,0,0,0,0,0]},{"a":65010,"t":"byte","b":[32,64,128,128,128,64,32,0]},{"a":65018,"t":"byte","b":[128,64,32,32,32,64,128,0]},{"a":65026,"t":"byte","b":[0,32,248,112,248,32,0,0]},{"a":65034,"t":"byte","b":[0,32,32,248,32,32,0,0]},{"a":65042,"t":"byte","b":[0,0,0,0,0,64,64,128]},{"a":65050,"t":"byte","b":[1,1,1,241,1,1,1,1]},{"a":65058,"t":"byte","b":[0,0,0,0,0,192,192,0]},{"a":65066,"t":"byte","b":[0,8,16,32,64,128,0,0]},{"a":65074,"t":"byte","b":[96,144,176,240,208,144,96,0]},{"a":65082,"t":"byte","b":[64,192,64,64,64,64,224,0]},{"a":65090,"t":"byte","b":[96,144,16,32,64,128,240,0]},{"a":65098,"t":"byte","b":[96,144,16,96,16,144,96,0]},{"a":65106,"t":"byte","b":[16,48,80,144,248,16,16,0]},{"a":65114,"t":"byte","b":[240,128,224,16,16,144,96,0]},{"a":65122,"t":"byte","b":[32,64,128,224,144,144,96,0]},{"a":65130,"t":"byte","b":[240,16,32,64,64,64,64,0]},{"a":65138,"t":"byte","b":[96,144,144,96,144,144,96,0]},{"a":65146,"t":"byte","b":[96,144,144,112,16,32,64,0]},{"a":65154,"t":"byte","b":[0,0,128,128,0,128,128,0]},{"a":65162,"t":"byte","b":[0,0,64,64,0,64,64,128]},{"a":65170,"t":"byte","b":[16,32,64,128,64,32,16,0]},{"a":65178,"t":"byte","b":[0,0,248,0,248,0,0,0]},{"a":65186,"t":"byte","b":[128,64,32,16,32,64,128,0]},{"a":65194,"t":"byte","b":[96,144,32,64,64,0,64,0]},{"a":65202,"t":"byte","b":[56,68,186,162,162,186,68,56]},{"a":65210,"t":"byte","b":[96,144,144,240,144,144,144,0]},{"a":65218,"t":"byte","b":[224,144,144,224,144,144,224,0]},{"a":65226,"t":"byte","b":[96,144,128,128,128,144,96,0]},{"a":65234,"t":"byte","b":[192,160,144,144,144,160,192,0]},{"a":65242,"t":"byte","b":[240,128,128,224,128,128,240,0]},{"a":65250,"t":"byte","b":[240,128,128,224,128,128,128,0]},{"a":65258,"t":"byte","b":[96,144,128,176,144,144,96,0]},{"a":65266,"t":"byte","b":[144,144,144,240,144,144,144,0]},{"a":65274,"t":"byte","b":[224,64,64,64,64,64,224,0]},{"a":65282,"t":"byte","b":[240,32,32,32,32,160,64,0]},{"a":65290,"t":"byte","b":[128,144,160,192,192,160,144,0]},{"a":65298,"t":"byte","b":[128,128,128,128,128,128,240,0]},{"a":65306,"t":"byte","b":[136,136,216,168,168,136,136,0]},{"a":65314,"t":"byte","b":[144,144,208,240,176,144,144,0]},{"a":65322,"t":"byte","b":[96,144,144,144,144,144,96,0]},{"a":65330,"t":"byte","b":[224,144,144,224,128,128,128,0]},{"a":65338,"t":"byte","b":[96,144,144,144,144,160,80,0]},{"a":65346,"t":"byte","b":[224,144,144,224,160,144,144,0]},{"a":65354,"t":"byte","b":[96,144,128,96,16,144,96,0]},{"a":65362,"t":"byte","b":[248,32,32,32,32,32,32,0]},{"a":65370,"t":"byte","b":[144,144,144,144,144,144,96,0]},{"a":65378,"t":"byte","b":[136,136,136,80,80,32,32,0]},{"a":65386,"t":"byte","b":[136,136,168,168,248,216,136,0]},{"a":65394,"t":"byte","b":[136,216,112,32,112,216,136,0]},{"a":65402,"t":"byte","b":[136,136,216,112,32,32,32]},{"a":65409,"l":"KERNAL_CINT","c":"Font bytes (the end of 'Y' and the start of 'Z'). The episode loader's JSR $FF81 (load_episode_three) is a call to the KERNAL's CINT in ROM, which is banked in at the time, not to these bytes.","t":"byte","b":[0,248,8],"x":[2146]},{"a":65412,"l":"KERNAL_IOINIT","c":"Font bytes. The episode loader's JSR $FF84 is the KERNAL's IOINIT, in ROM at the time.","t":"byte","b":[16,32,64],"x":[2137]},{"a":65415,"l":"KERNAL_RAMTAS","c":"Font bytes. The episode loader's JSR $FF87 is the KERNAL's RAMTAS, in ROM at the time.","t":"byte","b":[128,248,0],"x":[2140]},{"a":65418,"l":"KERNAL_RESTOR","c":"Font bytes (the start of '['). The episode loader's JSR $FF8A is the KERNAL's RESTOR, in ROM at the time.","t":"byte","b":[224,128,128,128,128,128,224,0],"x":[2143]},{"a":65426,"t":"byte","b":[0,192,96,48,24,12,0,0]},{"a":65434,"t":"byte","b":[224,32,32,32,32,32,224,0]},{"a":65442,"t":"byte","b":[32,80,136,136,0,0,0,0]},{"a":65450,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":65458,"t":"byte","b":[32,80,64,224,64,64,240,0]},{"a":65466,"l":"KERNAL_SETLFS","c":"Font bytes (the cursor block, $61). kernal_load's JSR $FFBA is the KERNAL's SETLFS, in ROM at the time.","t":"byte","b":[252,252,252],"x":[2333,61572]},{"a":65469,"l":"KERNAL_SETNAM","c":"Font bytes (the cursor block). kernal_load's JSR $FFBD is the KERNAL's SETNAM, in ROM at the time.","t":"byte","b":[252,252,252,252,0],"x":[2324,61582]},{"a":65474,"c":"The last fifteen bytes the installer copies, after the font's final glyph: nothing reads them.","t":"byte","b":[96,104,164,29,49,72,32,197]},{"a":65482,"t":"byte","b":[116,31,31,62,87,92,110]},{"a":65489,"t":"gap","n":47}]}