{"schema":1,"platform":"spectrum","game":"fat-worm-blows-a-sparky","title":"Fat Worm Blows a Sparky","build":"original Durell Software release, a tape image made with Ramsoft MakeTZX; a BASIC program loads a 190-byte turbo loader to $FAF2, which loads 49,000 bytes to $4000-$FF67 and returns to $EFD8","symbols_sha256":"d33c97bf4640f4735154aa4453feafc6fdb90fc6e1138331380e140bd303307a","index":[{"a":23296,"n":"sprite_shift_1","k":"table","len":256,"c":true},{"a":23552,"n":"sprite_shift_2","k":"table","len":256,"c":true},{"a":23808,"n":"sprite_shift_3","k":"table","len":256,"c":true},{"a":24064,"n":"sprite_shift_4","k":"table","len":256,"c":true},{"a":24320,"n":"sprite_shift_5","k":"table","len":256,"c":true},{"a":24576,"n":"sprite_shift_6","k":"table","len":256,"c":true},{"a":24832,"n":"sprite_shift_7","k":"table","len":256,"c":true},{"a":25088,"n":"bit_reverse_table","k":"table","len":256,"c":true},{"a":25344,"n":"perspective_table","k":"table","len":128,"c":true},{"a":25472,"n":"slope_cosine_table","k":"table","len":64,"c":true},{"a":25536,"n":"sine_table","k":"table","len":64,"c":true},{"a":25600,"n":"cell_grid_template","k":"table","len":50,"c":true},{"a":25650,"n":"cell_grid","k":"table","len":24,"c":true},{"a":25674,"n":"current_cell","k":"table","len":26,"c":true},{"a":25700,"n":"cell_6464","k":"table","len":8,"c":true},{"a":25708,"n":"cell_6464_items","k":"table","len":43,"c":true},{"a":25751,"n":"cell_6497","k":"table","len":8,"c":true},{"a":25759,"n":"cell_6497_items","k":"table","len":15,"c":true},{"a":25774,"n":"cell_64ae","k":"table","len":8,"c":true},{"a":25782,"n":"cell_64ae_items","k":"table","len":22,"c":true},{"a":25804,"n":"cell_64cc","k":"table","len":8,"c":true},{"a":25812,"n":"cell_64cc_items","k":"table","len":29,"c":true},{"a":25841,"n":"cell_64f1","k":"table","len":8,"c":true},{"a":25849,"n":"cell_64f1_items","k":"table","len":43,"c":true},{"a":25892,"n":"cell_6524","k":"table","len":8,"c":true},{"a":25900,"n":"cell_6524_items","k":"table","len":8,"c":true},{"a":25908,"n":"cell_6534","k":"table","len":8,"c":true},{"a":25916,"n":"cell_6534_items","k":"table","len":15,"c":true},{"a":25931,"n":"cell_654b","k":"table","len":8,"c":true},{"a":25939,"n":"cell_654b_items","k":"table","len":8,"c":true},{"a":25947,"n":"cell_655b","k":"table","len":8,"c":true},{"a":25955,"n":"cell_655b_items","k":"table","len":22,"c":true},{"a":25977,"n":"cell_6579","k":"table","len":8,"c":true},{"a":25985,"n":"cell_6579_items","k":"table","len":22,"c":true},{"a":26007,"n":"cell_6597","k":"table","len":8,"c":true},{"a":26015,"n":"cell_6597_items","k":"table","len":8,"c":true},{"a":26023,"n":"cell_65a7","k":"table","len":8,"c":true},{"a":26031,"n":"cell_65a7_items","k":"table","len":8,"c":true},{"a":26039,"n":"cell_65b7","k":"table","len":8,"c":true},{"a":26047,"n":"cell_65b7_items","k":"table","len":36,"c":true},{"a":26083,"n":"cell_65e3","k":"table","len":8,"c":true},{"a":26091,"n":"cell_65e3_items","k":"table","len":39,"c":true},{"a":26130,"n":"cell_65e3_handler","k":"variable","len":2,"c":true},{"a":26132,"n":"cell_65e3_items_2","k":"table","len":9,"c":true},{"a":26141,"n":"cell_661d","k":"table","len":8,"c":true},{"a":26149,"n":"cell_661d_items","k":"table","len":36,"c":true},{"a":26185,"n":"cell_6649","k":"table","len":8,"c":true},{"a":26193,"n":"cell_6649_items","k":"table","len":78,"c":true},{"a":26271,"n":"cell_669f","k":"table","len":8,"c":true},{"a":26279,"n":"cell_669f_items","k":"table","len":15,"c":true},{"a":26294,"n":"cell_66b6","k":"table","len":8,"c":true},{"a":26302,"n":"cell_66b6_items","k":"table","len":8,"c":true},{"a":26310,"n":"cell_66c6","k":"table","len":8,"c":true},{"a":26318,"n":"cell_66c6_items","k":"table","len":64,"c":true},{"a":26382,"n":"cell_670e","k":"table","len":8,"c":true},{"a":26390,"n":"cell_670e_items","k":"table","len":22,"c":true},{"a":26412,"n":"cell_672c","k":"table","len":8,"c":true},{"a":26420,"n":"cell_672c_items","k":"table","len":36,"c":true},{"a":26456,"n":"cell_6758","k":"table","len":8,"c":true},{"a":26464,"n":"cell_6758_items","k":"table","len":36,"c":true},{"a":26500,"n":"cell_6784","k":"table","len":8,"c":true},{"a":26508,"n":"cell_6784_items","k":"table","len":36,"c":true},{"a":26544,"n":"cell_67b0","k":"table","len":8,"c":true},{"a":26552,"n":"cell_67b0_items","k":"table","len":64,"c":true},{"a":26616,"n":"cell_67f8","k":"table","len":8,"c":true},{"a":26624,"n":"cell_67f8_items","k":"table","len":36,"c":true},{"a":26660,"n":"cell_6824","k":"table","len":8,"c":true},{"a":26668,"n":"cell_6824_items","k":"table","len":22,"c":true},{"a":26690,"n":"cell_6842","k":"table","len":8,"c":true},{"a":26698,"n":"cell_6842_items","k":"table","len":57,"c":true},{"a":26755,"n":"cell_6883","k":"table","len":8,"c":true},{"a":26763,"n":"cell_6883_items","k":"table","len":22,"c":true},{"a":26785,"n":"cell_68a1","k":"table","len":8,"c":true},{"a":26793,"n":"cell_68a1_items","k":"table","len":29,"c":true},{"a":26822,"n":"cell_68c6","k":"table","len":8,"c":true},{"a":26830,"n":"cell_68c6_items","k":"table","len":29,"c":true},{"a":26859,"n":"cell_68eb","k":"table","len":8,"c":true},{"a":26867,"n":"cell_68eb_items","k":"table","len":22,"c":true},{"a":26889,"n":"cell_6909","k":"table","len":8,"c":true},{"a":26897,"n":"cell_6909_items","k":"table","len":36,"c":true},{"a":26933,"n":"cell_6935","k":"table","len":8,"c":true},{"a":26941,"n":"cell_6935_items","k":"table","len":22,"c":true},{"a":26963,"n":"cell_6953","k":"table","len":8,"c":true},{"a":26971,"n":"cell_6953_items","k":"table","len":36,"c":true},{"a":27007,"n":"cell_697f","k":"table","len":8,"c":true},{"a":27015,"n":"cell_697f_items","k":"table","len":15,"c":true},{"a":27030,"n":"cell_6996","k":"table","len":8,"c":true},{"a":27038,"n":"cell_6996_items","k":"table","len":15,"c":true},{"a":27053,"n":"cell_69ad","k":"table","len":8,"c":true},{"a":27061,"n":"cell_69ad_items","k":"table","len":36,"c":true},{"a":27097,"n":"cell_69d9","k":"table","len":8,"c":true},{"a":27105,"n":"cell_69d9_items","k":"table","len":22,"c":true},{"a":27127,"n":"cell_69f7","k":"table","len":8,"c":true},{"a":27135,"n":"cell_69f7_items","k":"table","len":22,"c":true},{"a":27157,"n":"cell_6a15","k":"table","len":8,"c":true},{"a":27165,"n":"cell_6a15_items","k":"table","len":11,"c":true},{"a":27176,"n":"cell_6a15_handler","k":"variable","len":2,"c":true},{"a":27178,"n":"cell_6a15_items_2","k":"table","len":9,"c":true},{"a":27187,"n":"cell_6a33","k":"table","len":8,"c":true},{"a":27195,"n":"cell_6a33_items","k":"table","len":22,"c":true},{"a":27217,"n":"cell_6a51","k":"table","len":8,"c":true},{"a":27225,"n":"cell_6a51_items","k":"table","len":29,"c":true},{"a":27254,"n":"cell_6a76","k":"table","len":8,"c":true},{"a":27262,"n":"cell_6a76_items","k":"table","len":29,"c":true},{"a":27291,"n":"cell_6a9b","k":"table","len":8,"c":true},{"a":27299,"n":"cell_6a9b_items","k":"table","len":25,"c":true},{"a":27324,"n":"cell_6a9b_handler","k":"variable","len":2,"c":true},{"a":27326,"n":"cell_6a9b_items_2","k":"table","len":9,"c":true},{"a":27335,"n":"cell_6ac7","k":"table","len":8,"c":true},{"a":27343,"n":"cell_6ac7_items","k":"table","len":43,"c":true},{"a":27386,"n":"cell_6afa","k":"table","len":8,"c":true},{"a":27394,"n":"cell_6afa_items","k":"table","len":15,"c":true},{"a":27409,"n":"cell_6b11","k":"table","len":8,"c":true},{"a":27417,"n":"cell_6b11_items","k":"table","len":22,"c":true},{"a":27439,"n":"cell_6b2f","k":"table","len":8,"c":true},{"a":27447,"n":"cell_6b2f_items","k":"table","len":4,"c":true},{"a":27451,"n":"cell_6b2f_handler","k":"variable","len":2,"c":true},{"a":27453,"n":"cell_6b2f_items_2","k":"table","len":9,"c":true},{"a":27462,"n":"cell_6b46","k":"table","len":8,"c":true},{"a":27470,"n":"cell_6b46_items","k":"table","len":4,"c":true},{"a":27474,"n":"cell_6b46_handler_1","k":"variable","len":2,"c":true},{"a":27476,"n":"cell_6b46_items_2","k":"table","len":12,"c":true},{"a":27488,"n":"cell_6b46_handler_2","k":"variable","len":2,"c":true},{"a":27490,"n":"cell_6b46_items_3","k":"table","len":12,"c":true},{"a":27502,"n":"cell_6b46_handler_3","k":"variable","len":2,"c":true},{"a":27504,"n":"cell_6b46_items_4","k":"table","len":12,"c":true},{"a":27516,"n":"cell_6b46_handler_4","k":"variable","len":2,"c":true},{"a":27518,"n":"cell_6b46_items_5","k":"table","len":12,"c":true},{"a":27530,"n":"cell_6b46_handler_5","k":"variable","len":2,"c":true},{"a":27532,"n":"cell_6b46_items_6","k":"table","len":12,"c":true},{"a":27544,"n":"cell_6b46_handler_6","k":"variable","len":2,"c":true},{"a":27546,"n":"cell_6b46_items_7","k":"table","len":16,"c":true},{"a":27562,"n":"cell_6baa","k":"table","len":8,"c":true},{"a":27570,"n":"cell_6baa_items","k":"table","len":11,"c":true},{"a":27581,"n":"cell_6baa_handler_1","k":"variable","len":2,"c":true},{"a":27583,"n":"cell_6baa_items_2","k":"table","len":12,"c":true},{"a":27595,"n":"cell_6baa_handler_2","k":"variable","len":2,"c":true},{"a":27597,"n":"cell_6baa_items_3","k":"table","len":12,"c":true},{"a":27609,"n":"cell_6baa_handler_3","k":"variable","len":2,"c":true},{"a":27611,"n":"cell_6baa_items_4","k":"table","len":12,"c":true},{"a":27623,"n":"cell_6baa_handler_4","k":"variable","len":2,"c":true},{"a":27625,"n":"cell_6baa_items_5","k":"table","len":9,"c":true},{"a":27634,"n":"cell_6bf2","k":"table","len":8,"c":true},{"a":27642,"n":"cell_6bf2_items","k":"table","len":18,"c":true},{"a":27660,"n":"cell_6bf2_handler_1","k":"variable","len":2,"c":true},{"a":27662,"n":"cell_6bf2_items_2","k":"table","len":12,"c":true},{"a":27674,"n":"cell_6bf2_handler_2","k":"variable","len":2,"c":true},{"a":27676,"n":"cell_6bf2_items_3","k":"table","len":9,"c":true},{"a":27685,"n":"cell_6c25","k":"table","len":8,"c":true},{"a":27693,"n":"cell_6c25_items","k":"table","len":43,"c":true},{"a":27736,"n":"cell_6c58","k":"table","len":8,"c":true},{"a":27744,"n":"cell_6c58_items","k":"table","len":8,"c":true},{"a":27752,"n":"cell_6c68","k":"table","len":8,"c":true},{"a":27760,"n":"cell_6c68_items","k":"table","len":15,"c":true},{"a":27775,"n":"cell_6c7f","k":"table","len":8,"c":true},{"a":27783,"n":"cell_6c7f_items","k":"table","len":50,"c":true},{"a":27833,"n":"cell_6cb9","k":"table","len":8,"c":true},{"a":27841,"n":"cell_6cb9_items","k":"table","len":29,"c":true},{"a":27870,"n":"cell_6cde","k":"table","len":8,"c":true},{"a":27878,"n":"cell_6cde_items","k":"table","len":43,"c":true},{"a":27921,"n":"cell_6d11","k":"table","len":8,"c":true},{"a":27929,"n":"cell_6d11_items","k":"table","len":46,"c":true},{"a":27975,"n":"cell_6d11_handler","k":"variable","len":2,"c":true},{"a":27977,"n":"cell_6d11_items_2","k":"table","len":9,"c":true},{"a":27986,"n":"cell_6d52","k":"table","len":8,"c":true},{"a":27994,"n":"cell_6d52_items","k":"table","len":11,"c":true},{"a":28005,"n":"cell_6d52_handler","k":"variable","len":2,"c":true},{"a":28007,"n":"cell_6d52_items_2","k":"table","len":30,"c":true},{"a":28037,"n":"cell_6d85","k":"table","len":8,"c":true},{"a":28045,"n":"cell_6d85_items","k":"table","len":18,"c":true},{"a":28063,"n":"cell_6d85_handler","k":"variable","len":2,"c":true},{"a":28065,"n":"cell_6d85_items_2","k":"table","len":9,"c":true},{"a":28074,"n":"cell_6daa","k":"table","len":8,"c":true},{"a":28082,"n":"cell_6daa_items","k":"table","len":18,"c":true},{"a":28100,"n":"cell_6daa_handler","k":"variable","len":2,"c":true},{"a":28102,"n":"cell_6daa_items_2","k":"table","len":9,"c":true},{"a":28111,"n":"cell_6dcf","k":"table","len":8,"c":true},{"a":28119,"n":"cell_6dcf_items","k":"table","len":8,"c":true},{"a":28127,"n":"cell_6ddf","k":"table","len":8,"c":true},{"a":28135,"n":"cell_6ddf_items","k":"table","len":36,"c":true},{"a":28171,"n":"cell_6e0b","k":"table","len":8,"c":true},{"a":28179,"n":"cell_6e0b_items","k":"table","len":85,"c":true},{"a":28264,"n":"cell_6e68","k":"table","len":8,"c":true},{"a":28272,"n":"cell_6e68_items","k":"table","len":50,"c":true},{"a":28322,"n":"cell_6ea2","k":"table","len":8,"c":true},{"a":28330,"n":"cell_6ea2_items","k":"table","len":29,"c":true},{"a":28359,"n":"cell_6ec7","k":"table","len":8,"c":true},{"a":28367,"n":"cell_6ec7_items","k":"table","len":29,"c":true},{"a":28396,"n":"cell_6eec","k":"table","len":8,"c":true},{"a":28404,"n":"cell_6eec_items","k":"table","len":8,"c":true},{"a":28412,"n":"cell_6efc","k":"table","len":8,"c":true},{"a":28420,"n":"cell_6efc_items","k":"table","len":43,"c":true},{"a":28463,"n":"cell_6f2f","k":"table","len":8,"c":true},{"a":28471,"n":"cell_6f2f_items","k":"table","len":15,"c":true},{"a":28486,"n":"cell_6f46","k":"table","len":8,"c":true},{"a":28494,"n":"cell_6f46_items","k":"table","len":8,"c":true},{"a":28502,"n":"cell_6f56","k":"table","len":8,"c":true},{"a":28510,"n":"cell_6f56_items","k":"table","len":15,"c":true},{"a":28525,"n":"cell_6f6d","k":"table","len":8,"c":true},{"a":28533,"n":"cell_6f6d_items","k":"table","len":8,"c":true},{"a":28541,"n":"cell_6f7d","k":"table","len":8,"c":true},{"a":28549,"n":"cell_6f7d_items","k":"table","len":15,"c":true},{"a":28564,"n":"cell_6f94","k":"table","len":8,"c":true},{"a":28572,"n":"cell_6f94_items","k":"table","len":8,"c":true},{"a":28580,"n":"cell_6fa4","k":"table","len":8,"c":true},{"a":28588,"n":"cell_6fa4_items","k":"table","len":15,"c":true},{"a":28603,"n":"cell_6fbb","k":"table","len":8,"c":true},{"a":28611,"n":"cell_6fbb_items","k":"variable","len":1,"c":true},{"a":28612,"n":"cell_6fc4","k":"table","len":8,"c":true},{"a":28620,"n":"cell_6fc4_items","k":"variable","len":1,"c":true},{"a":28621,"n":"cell_6fcd","k":"table","len":8,"c":true},{"a":28629,"n":"cell_6fcd_items","k":"variable","len":1,"c":true},{"a":28630,"n":"cell_6fd6","k":"table","len":8,"c":true},{"a":28638,"n":"cell_6fd6_items","k":"table","len":32,"c":true},{"a":28670,"n":"cell_6fd6_handler","k":"variable","len":2,"c":true},{"a":28672,"n":"cell_6fd6_items_2","k":"table","len":37,"c":true},{"a":28709,"n":"cell_7025","k":"table","len":8,"c":true},{"a":28717,"n":"cell_7025_items","k":"table","len":15,"c":true},{"a":28732,"n":"cell_703c","k":"table","len":8,"c":true},{"a":28740,"n":"cell_703c_items","k":"table","len":29,"c":true},{"a":28769,"n":"cell_7061","k":"table","len":8,"c":true},{"a":28777,"n":"cell_7061_items","k":"table","len":22,"c":true},{"a":28799,"n":"cell_707f","k":"table","len":8,"c":true},{"a":28807,"n":"cell_707f_items","k":"table","len":36,"c":true},{"a":28843,"n":"cell_70ab","k":"table","len":8,"c":true},{"a":28851,"n":"cell_70ab_items","k":"table","len":22,"c":true},{"a":28873,"n":"cell_70c9","k":"table","len":8,"c":true},{"a":28881,"n":"cell_70c9_items","k":"table","len":36,"c":true},{"a":28917,"n":"cell_70f5","k":"table","len":8,"c":true},{"a":28925,"n":"cell_70f5_items","k":"table","len":29,"c":true},{"a":28954,"n":"cell_711a","k":"table","len":8,"c":true},{"a":28962,"n":"cell_711a_items","k":"table","len":8,"c":true},{"a":28970,"n":"cell_712a","k":"table","len":8,"c":true},{"a":28978,"n":"cell_712a_items","k":"table","len":8,"c":true},{"a":28986,"n":"cell_713a","k":"table","len":8,"c":true},{"a":28994,"n":"cell_713a_items","k":"table","len":36,"c":true},{"a":29030,"n":"cell_7166","k":"table","len":8,"c":true},{"a":29038,"n":"cell_7166_items","k":"table","len":15,"c":true},{"a":29053,"n":"cell_717d","k":"table","len":8,"c":true},{"a":29061,"n":"cell_717d_items","k":"table","len":22,"c":true},{"a":29083,"n":"cell_719b","k":"table","len":8,"c":true},{"a":29091,"n":"cell_719b_items","k":"table","len":8,"c":true},{"a":29099,"n":"cell_71ab","k":"table","len":8,"c":true},{"a":29107,"n":"cell_71ab_items","k":"table","len":15,"c":true},{"a":29122,"n":"cell_71c2","k":"table","len":8,"c":true},{"a":29130,"n":"cell_71c2_items","k":"table","len":29,"c":true},{"a":29159,"n":"cell_71e7","k":"table","len":8,"c":true},{"a":29167,"n":"cell_71e7_items","k":"table","len":22,"c":true},{"a":29189,"n":"cell_7205","k":"table","len":8,"c":true},{"a":29197,"n":"cell_7205_items","k":"table","len":29,"c":true},{"a":29226,"n":"cell_722a","k":"table","len":8,"c":true},{"a":29234,"n":"cell_722a_items","k":"table","len":29,"c":true},{"a":29263,"n":"cell_724f","k":"table","len":8,"c":true},{"a":29271,"n":"cell_724f_items","k":"table","len":22,"c":true},{"a":29293,"n":"cell_726d","k":"table","len":8,"c":true},{"a":29301,"n":"cell_726d_items","k":"table","len":8,"c":true},{"a":29309,"n":"cell_727d","k":"table","len":8,"c":true},{"a":29317,"n":"cell_727d_items","k":"table","len":18,"c":true},{"a":29335,"n":"cell_727d_handler","k":"variable","len":2,"c":true},{"a":29337,"n":"cell_727d_items_2","k":"table","len":9,"c":true},{"a":29346,"n":"cell_72a2","k":"table","len":8,"c":true},{"a":29354,"n":"cell_72a2_items","k":"table","len":15,"c":true},{"a":29369,"n":"cell_72b9","k":"table","len":8,"c":true},{"a":29377,"n":"cell_72b9_items","k":"table","len":36,"c":true},{"a":29413,"n":"cell_72e5","k":"table","len":8,"c":true},{"a":29421,"n":"cell_72e5_items","k":"table","len":29,"c":true},{"a":29450,"n":"cell_730a","k":"table","len":8,"c":true},{"a":29458,"n":"cell_730a_items","k":"table","len":22,"c":true},{"a":29480,"n":"cell_7328","k":"table","len":8,"c":true},{"a":29488,"n":"cell_7328_items","k":"table","len":22,"c":true},{"a":29510,"n":"cell_7346","k":"table","len":8,"c":true},{"a":29518,"n":"cell_7346_items","k":"table","len":22,"c":true},{"a":29540,"n":"cell_7364","k":"table","len":8,"c":true},{"a":29548,"n":"cell_7364_items","k":"table","len":22,"c":true},{"a":29570,"n":"cell_7382","k":"table","len":8,"c":true},{"a":29578,"n":"cell_7382_items","k":"table","len":15,"c":true},{"a":29593,"n":"cell_7399","k":"table","len":8,"c":true},{"a":29601,"n":"cell_7399_items","k":"table","len":43,"c":true},{"a":29644,"n":"cell_73cc","k":"table","len":8,"c":true},{"a":29652,"n":"cell_73cc_items","k":"table","len":22,"c":true},{"a":29674,"n":"cell_73ea","k":"table","len":8,"c":true},{"a":29682,"n":"cell_73ea_items","k":"table","len":29,"c":true},{"a":29711,"n":"cell_740f","k":"table","len":8,"c":true},{"a":29719,"n":"cell_740f_items","k":"table","len":8,"c":true},{"a":29727,"n":"cell_741f","k":"table","len":8,"c":true},{"a":29735,"n":"cell_741f_items","k":"table","len":15,"c":true},{"a":29750,"n":"cell_7436","k":"table","len":8,"c":true},{"a":29758,"n":"cell_7436_items","k":"table","len":25,"c":true},{"a":29783,"n":"cell_7436_handler","k":"variable","len":2,"c":true},{"a":29785,"n":"cell_7436_items_2","k":"table","len":9,"c":true},{"a":29794,"n":"cell_7462","k":"table","len":8,"c":true},{"a":29802,"n":"cell_7462_items","k":"table","len":29,"c":true},{"a":29831,"n":"cell_7487","k":"table","len":8,"c":true},{"a":29839,"n":"cell_7487_items","k":"table","len":15,"c":true},{"a":29854,"n":"cell_749e","k":"table","len":8,"c":true},{"a":29862,"n":"cell_749e_items","k":"table","len":22,"c":true},{"a":29884,"n":"cell_74bc","k":"table","len":8,"c":true},{"a":29892,"n":"cell_74bc_items","k":"table","len":22,"c":true},{"a":29914,"n":"cell_74da","k":"table","len":8,"c":true},{"a":29922,"n":"cell_74da_items","k":"table","len":36,"c":true},{"a":29958,"n":"cell_7506","k":"table","len":8,"c":true},{"a":29966,"n":"cell_7506_items","k":"table","len":8,"c":true},{"a":29974,"n":"cell_7516","k":"table","len":8,"c":true},{"a":29982,"n":"cell_7516_items","k":"table","len":15,"c":true},{"a":29997,"n":"cell_752d","k":"table","len":8,"c":true},{"a":30005,"n":"cell_752d_items","k":"variable","len":1,"c":true},{"a":30006,"n":"cell_7536","k":"table","len":8,"c":true},{"a":30014,"n":"cell_7536_items","k":"variable","len":1,"c":true},{"a":30015,"n":"cell_753f","k":"table","len":8,"c":true},{"a":30023,"n":"cell_753f_items","k":"variable","len":1,"c":true},{"a":30024,"n":"cell_7548","k":"table","len":8,"c":true},{"a":30032,"n":"cell_7548_items","k":"table","len":15,"c":true},{"a":30047,"n":"cell_755f","k":"table","len":8,"c":true},{"a":30055,"n":"cell_755f_items","k":"variable","len":1,"c":true},{"a":30056,"n":"cell_7568","k":"table","len":8,"c":true},{"a":30064,"n":"cell_7568_items","k":"variable","len":1,"c":true},{"a":30065,"n":"cell_7571","k":"table","len":8,"c":true},{"a":30073,"n":"cell_7571_items","k":"variable","len":1,"c":true},{"a":30074,"n":"board_end","k":"variable","len":2,"c":true},{"a":30076,"n":"unreferenced_jump_to_eb9c","k":"routine","len":3,"c":true},{"a":30079,"n":"start_new_game","k":"routine","len":185,"c":true},{"a":30264,"n":"frame_loop","k":"routine","len":360,"c":true},{"a":30624,"n":"update_bugs_on_worm","k":"routine","len":155,"c":true},{"a":30779,"n":"end_of_game","k":"routine","len":84,"c":true},{"a":30863,"n":"keep_hi_score_and_leave","k":"routine","len":58,"c":true},{"a":30921,"n":"drive_reached_sequence","k":"routine","len":70,"c":true},{"a":30991,"n":"end_sprite_address","k":"variable","len":2,"c":true},{"a":30993,"n":"set_end_sprite","k":"routine","len":3,"c":true},{"a":30996,"n":"end_sequence_pass","k":"routine","len":17,"c":true},{"a":31013,"n":"add_object_wave","k":"routine","len":44,"c":true},{"a":31057,"n":"object_wave_records","k":"table","len":180,"c":true},{"a":31237,"n":"panel_light_colours","k":"table","len":16,"c":true},{"a":31253,"n":"light_colour_choices","k":"table","len":16,"c":true},{"a":31269,"n":"pick_light_colour","k":"routine","len":11,"c":true},{"a":31280,"n":"update_panel","k":"routine","len":254,"c":true},{"a":31534,"n":"split_decimal","k":"routine","len":47,"c":true},{"a":31581,"n":"count_power_of_ten","k":"routine","len":6,"c":true},{"a":31587,"n":"draw_digit_low_half","k":"routine","len":8,"c":true},{"a":31595,"n":"draw_digit_high_half","k":"routine","len":32,"c":true},{"a":31627,"n":"wait_for_one_key","k":"routine","len":37,"c":true},{"a":31664,"n":"key_name_codes","k":"table","len":40,"c":true},{"a":31704,"n":"redefiner_row_slots","k":"table","len":8,"c":true},{"a":31712,"n":"control_key_codes","k":"table","len":8,"c":true},{"a":31720,"n":"test_key","k":"routine","len":27,"c":true},{"a":31747,"n":"kempston_bit_map","k":"table","len":16,"c":true},{"a":31763,"n":"read_controls","k":"routine","len":94,"c":true},{"a":31857,"n":"object_count_plus_one","k":"variable","len":1,"c":true},{"a":31858,"n":"object_list_end","k":"variable","len":2,"c":true},{"a":31860,"n":"object_list","k":"table","len":30,"c":true},{"a":31890,"n":"show_forgery_warning","k":"routine","len":33,"c":true},{"a":31923,"n":"print_warning_char","k":"routine","len":45,"c":true},{"a":31968,"n":"forgery_warning_text","k":"string","len":592,"c":true},{"a":32560,"n":"copy_panel_to_screen","k":"routine","len":19,"c":true},{"a":32579,"n":"top_left_attribute","k":"variable","len":1,"c":true},{"a":32580,"n":"unused_7f44","k":"table","len":8,"c":true},{"a":32588,"n":"worm_nose_points","k":"table","len":8,"c":true},{"a":32596,"n":"worm_segment_1","k":"table","len":16,"c":true},{"a":32612,"n":"worm_segment_2","k":"table","len":16,"c":true},{"a":32628,"n":"worm_segment_3","k":"table","len":16,"c":true},{"a":32644,"n":"worm_segment_4","k":"table","len":16,"c":true},{"a":32660,"n":"worm_segment_overflow","k":"table","len":16,"c":true},{"a":32676,"n":"worm_segments_at_start","k":"table","len":64,"c":true},{"a":32740,"n":"worm_segments_at_start_spare","k":"table","len":16,"c":true},{"a":32756,"n":"worm_x","k":"variable","len":2,"c":true},{"a":32758,"n":"worm_y","k":"variable","len":2,"c":true},{"a":32760,"n":"worm_step_x","k":"variable","len":2,"c":true},{"a":32762,"n":"worm_step_y","k":"variable","len":2,"c":true},{"a":32764,"n":"worm_step_z","k":"variable","len":2,"c":true},{"a":32766,"n":"worm_z","k":"variable","len":2,"c":true},{"a":32768,"n":"worm_deflected_flag","k":"variable","len":1,"c":true},{"a":32769,"n":"worm_heading","k":"variable","len":1,"c":true},{"a":32770,"n":"worm_speed_fraction","k":"variable","len":1,"c":true},{"a":32771,"n":"worm_speed","k":"variable","len":1,"c":true},{"a":32772,"n":"worm_fall_speed","k":"variable","len":1,"c":true},{"a":32773,"n":"ground_slope","k":"variable","len":2,"c":true},{"a":32775,"n":"unused_8007","k":"table","len":4,"c":true},{"a":32779,"n":"base_rect_x1","k":"variable","len":2,"c":true},{"a":32781,"n":"base_rect_x2","k":"variable","len":2,"c":true},{"a":32783,"n":"base_rect_y1","k":"variable","len":2,"c":true},{"a":32785,"n":"base_rect_y2","k":"variable","len":2,"c":true},{"a":32787,"n":"top_rect_x1","k":"variable","len":2,"c":true},{"a":32789,"n":"top_rect_x2","k":"variable","len":2,"c":true},{"a":32791,"n":"top_rect_y1","k":"variable","len":2,"c":true},{"a":32793,"n":"top_rect_y2","k":"variable","len":2,"c":true},{"a":32795,"n":"shape_x0","k":"variable","len":1,"c":true},{"a":32796,"n":"shape_x0_high","k":"variable","len":1,"c":true},{"a":32797,"n":"shape_y0","k":"variable","len":1,"c":true},{"a":32798,"n":"shape_y0_high","k":"variable","len":1,"c":true},{"a":32799,"n":"shape_x1","k":"variable","len":1,"c":true},{"a":32800,"n":"shape_x1_high","k":"variable","len":1,"c":true},{"a":32801,"n":"shape_y1","k":"variable","len":2,"c":true},{"a":32803,"n":"shape_x2","k":"variable","len":1,"c":true},{"a":32804,"n":"shape_x2_high","k":"variable","len":1,"c":true},{"a":32805,"n":"shape_y2","k":"variable","len":1,"c":true},{"a":32806,"n":"shape_y2_high","k":"variable","len":1,"c":true},{"a":32807,"n":"shape_x3","k":"variable","len":1,"c":true},{"a":32808,"n":"shape_x3_high","k":"variable","len":1,"c":true},{"a":32809,"n":"shape_y3","k":"variable","len":1,"c":true},{"a":32810,"n":"shape_y3_high","k":"variable","len":1,"c":true},{"a":32811,"n":"extent_x1","k":"variable","len":1,"c":true},{"a":32812,"n":"extent_x1_high","k":"variable","len":1,"c":true},{"a":32813,"n":"extent_x2","k":"variable","len":1,"c":true},{"a":32814,"n":"extent_x2_high","k":"variable","len":1,"c":true},{"a":32815,"n":"extent_y1","k":"variable","len":1,"c":true},{"a":32816,"n":"extent_y1_high","k":"variable","len":1,"c":true},{"a":32817,"n":"extent_y2","k":"variable","len":1,"c":true},{"a":32818,"n":"extent_y2_high","k":"variable","len":1,"c":true},{"a":32819,"n":"probe_x","k":"variable","len":1,"c":true},{"a":32820,"n":"probe_y","k":"variable","len":1,"c":true},{"a":32821,"n":"probe_z","k":"variable","len":1,"c":true},{"a":32822,"n":"probe_surface","k":"variable","len":1,"c":true},{"a":32823,"n":"probe_hit","k":"variable","len":1,"c":true},{"a":32824,"n":"probe_hit_high","k":"variable","len":1,"c":true},{"a":32825,"n":"probe_slope","k":"variable","len":2,"c":true},{"a":32827,"n":"probe_floor","k":"variable","len":2,"c":true},{"a":32829,"n":"probe_top","k":"variable","len":1,"c":true},{"a":32830,"n":"probe_bottom","k":"variable","len":1,"c":true},{"a":32831,"n":"probe_ramp","k":"variable","len":1,"c":true},{"a":32832,"n":"probe_ramp_flags","k":"variable","len":1,"c":true},{"a":32833,"n":"probe_x_sign","k":"variable","len":2,"c":true},{"a":32835,"n":"quad_row3_right_x","k":"variable","len":2,"c":true},{"a":32837,"n":"quad_lowest_x","k":"variable","len":2,"c":true},{"a":32839,"n":"display_list_free","k":"variable","len":2,"c":true},{"a":32841,"n":"cell_offset_x","k":"variable","len":1,"c":true},{"a":32842,"n":"cell_offset_y","k":"variable","len":1,"c":true},{"a":32843,"n":"draw_entry","k":"variable","len":2,"c":true},{"a":32845,"n":"insert_after","k":"variable","len":1,"c":true},{"a":32846,"n":"entry_added_flag","k":"variable","len":1,"c":true},{"a":32847,"n":"draw_type","k":"variable","len":1,"c":true},{"a":32848,"n":"fill_right_edge_count","k":"variable","len":1,"c":true},{"a":32849,"n":"fill_left_edge_count","k":"variable","len":1,"c":true},{"a":32850,"n":"fill_rows_left","k":"variable","len":1,"c":true},{"a":32851,"n":"fire_request","k":"variable","len":1,"c":true},{"a":32852,"n":"fire_held","k":"variable","len":1,"c":true},{"a":32853,"n":"copy_click_period","k":"variable","len":1,"c":true},{"a":32854,"n":"clear_click_period","k":"variable","len":1,"c":true},{"a":32855,"n":"controls","k":"variable","len":1,"c":true},{"a":32856,"n":"control_lock","k":"variable","len":1,"c":true},{"a":32857,"n":"frame_counter","k":"variable","len":2,"c":true},{"a":32859,"n":"spindles_collected","k":"variable","len":1,"c":true},{"a":32860,"n":"spindles_shown","k":"variable","len":1,"c":true},{"a":32861,"n":"sparkies","k":"variable","len":1,"c":true},{"a":32862,"n":"sparkies_shown","k":"variable","len":2,"c":true},{"a":32864,"n":"score","k":"variable","len":2,"c":true},{"a":32866,"n":"score_shown","k":"variable","len":2,"c":true},{"a":32868,"n":"hi_score","k":"variable","len":2,"c":true},{"a":32870,"n":"bug_spawn_budget","k":"variable","len":1,"c":true},{"a":32871,"n":"narrow_segment_countdown","k":"variable","len":1,"c":true},{"a":32872,"n":"entries_added","k":"variable","len":1,"c":true},{"a":32873,"n":"visible_cells","k":"table","len":54,"c":true},{"a":32927,"n":"worm_segment_count","k":"variable","len":1,"c":true},{"a":32928,"n":"segment_loop_counter","k":"variable","len":1,"c":true},{"a":32929,"n":"running_x","k":"variable","len":1,"c":true},{"a":32930,"n":"running_x_high","k":"variable","len":1,"c":true},{"a":32931,"n":"running_y","k":"variable","len":1,"c":true},{"a":32932,"n":"running_y_high","k":"variable","len":1,"c":true},{"a":32933,"n":"running_z","k":"variable","len":1,"c":true},{"a":32934,"n":"running_z_high","k":"variable","len":1,"c":true},{"a":32935,"n":"unused_80a7","k":"variable","len":2,"c":true},{"a":32937,"n":"probe_cell_diagonal","k":"variable","len":2,"c":true},{"a":32939,"n":"probe_cell_low_y","k":"variable","len":2,"c":true},{"a":32941,"n":"probe_cell_low_x","k":"variable","len":2,"c":true},{"a":32943,"n":"probe_cell_far","k":"variable","len":2,"c":true},{"a":32945,"n":"probe_far_cell_offset","k":"variable","len":2,"c":true},{"a":32947,"n":"fill_scratch","k":"variable","len":1,"c":true},{"a":32948,"n":"fill_outline_flag","k":"variable","len":2,"c":true},{"a":32950,"n":"face_pattern_y_sides","k":"variable","len":2,"c":true},{"a":32952,"n":"face_pattern_top","k":"variable","len":2,"c":true},{"a":32954,"n":"face_pattern_x_sides","k":"variable","len":2,"c":true},{"a":32956,"n":"face_pattern_unread","k":"variable","len":2,"c":true},{"a":32958,"n":"fill_pattern","k":"variable","len":1,"c":true},{"a":32959,"n":"fill_pattern_toggle","k":"variable","len":1,"c":true},{"a":32960,"n":"unused_80c0","k":"table","len":6,"c":true},{"a":32966,"n":"unread_word_80c6","k":"variable","len":2,"c":true},{"a":32968,"n":"unread_word_80c8","k":"variable","len":2,"c":true},{"a":32970,"n":"unused_80ca","k":"variable","len":1,"c":true},{"a":32971,"n":"face_pattern_sets","k":"table","len":32,"c":true},{"a":33003,"n":"scale_extent_for_height","k":"routine","len":43,"c":true},{"a":33046,"n":"scale_high_byte","k":"routine","len":8,"c":true},{"a":33054,"n":"scale_coordinate","k":"routine","len":189,"c":true},{"a":33243,"n":"draw_object","k":"routine","len":180,"c":true},{"a":33423,"n":"draw_top_face","k":"routine","len":33,"c":true},{"a":33456,"n":"draw_wall_y1","k":"routine","len":32,"c":true},{"a":33488,"n":"draw_wall_y2","k":"routine","len":32,"c":true},{"a":33520,"n":"draw_wall_x1","k":"routine","len":32,"c":true},{"a":33552,"n":"draw_wall_x2","k":"routine","len":32,"c":true},{"a":33584,"n":"unused_empty_routine","k":"routine","len":2,"c":true},{"a":33586,"n":"unused_extent_save","k":"table","len":8,"c":true},{"a":33594,"n":"unused_tapered_box","k":"routine","len":162,"c":true},{"a":33756,"n":"draw_sparky","k":"routine","len":46,"c":true},{"a":33802,"n":"draw_crawly","k":"routine","len":120,"c":true},{"a":33922,"n":"draw_type_e1_pyramid","k":"routine","len":70,"c":true},{"a":33992,"n":"draw_types_e8_ef_halftone_box","k":"routine","len":28,"c":true},{"a":34020,"n":"draw_type_e0_box_with_readout","k":"routine","len":56,"c":true},{"a":34076,"n":"draw_worm_section","k":"routine","len":182,"c":true},{"a":34258,"n":"draw_type_f2_sized_sprite","k":"routine","len":56,"c":true},{"a":34314,"n":"draw_spindle","k":"routine","len":53,"c":true},{"a":34367,"n":"draw_type_fb_burst","k":"routine","len":40,"c":true},{"a":34407,"n":"draw_sputnik","k":"routine","len":168,"c":true},{"a":34575,"n":"draw_type_e6_sprite","k":"routine","len":61,"c":true},{"a":34636,"n":"draw_type_f4_pulsing_block","k":"routine","len":225,"c":true},{"a":34861,"n":"stripe_top_offset","k":"variable","len":1,"c":true},{"a":34862,"n":"stripe_top_step","k":"variable","len":1,"c":true},{"a":34863,"n":"stripe_base_offset","k":"variable","len":1,"c":true},{"a":34864,"n":"stripe_base_step","k":"variable","len":1,"c":true},{"a":34865,"n":"stripe_top_width","k":"variable","len":2,"c":true},{"a":34867,"n":"draw_debugger_block","k":"routine","len":233,"c":true},{"a":35100,"n":"draw_next_stripe","k":"routine","len":61,"c":true},{"a":35161,"n":"draw_stripe_band","k":"routine","len":77,"c":true},{"a":35238,"n":"draw_type_e2_dark_box","k":"routine","len":18,"c":true},{"a":35256,"n":"dispatch_special_types","k":"routine","len":90,"c":true},{"a":35346,"n":"draw_box_by_face_code","k":"routine","len":116,"c":true},{"a":35462,"n":"unused_midpoint_routine","k":"routine","len":54,"c":true},{"a":35516,"n":"draw_wedge_x","k":"routine","len":13,"c":true},{"a":35529,"n":"draw_wedge_high_x1","k":"routine","len":125,"c":true},{"a":35654,"n":"draw_wedge_high_x2","k":"routine","len":125,"c":true},{"a":35779,"n":"draw_wedge_y","k":"routine","len":13,"c":true},{"a":35792,"n":"draw_wedge_high_y1","k":"routine","len":90,"c":true},{"a":35882,"n":"draw_wedge_high_y2","k":"routine","len":90,"c":true},{"a":35972,"n":"draw_half_box","k":"routine","len":23,"c":true},{"a":35995,"n":"draw_half_box_corner_x1_y2","k":"routine","len":94,"c":true},{"a":36089,"n":"draw_half_box_corner_x2_y2","k":"routine","len":94,"c":true},{"a":36183,"n":"draw_half_box_corner_x1_y1","k":"routine","len":94,"c":true},{"a":36277,"n":"draw_half_box_corner_x2_y1","k":"routine","len":94,"c":true},{"a":36371,"n":"draw_rectangle","k":"routine","len":29,"c":true},{"a":36400,"n":"clip_rectangle","k":"routine","len":55,"c":true},{"a":36455,"n":"fill_rectangle","k":"routine","len":152,"c":true},{"a":36607,"n":"unused_byte_8eff","k":"variable","len":1,"c":true},{"a":36608,"n":"mask_pixels_to_right","k":"table","len":8,"c":true},{"a":36616,"n":"mask_clear_pixel","k":"table","len":8,"c":true},{"a":36624,"n":"mask_set_pixel","k":"table","len":8,"c":true},{"a":36632,"n":"unused_zeros_8f18","k":"table","len":28,"c":true},{"a":36660,"n":"row_fill_chain","k":"routine","len":74,"c":true},{"a":36734,"n":"rect_plain_rows","k":"routine","len":9,"c":true},{"a":36743,"n":"row_fill_jump","k":"routine","len":3,"c":true},{"a":36746,"n":"rect_border_row","k":"routine","len":17,"c":true},{"a":36763,"n":"rect_dithered_start","k":"routine","len":48,"c":true},{"a":36811,"n":"rect_dithered_row_end","k":"routine","len":20,"c":true},{"a":36831,"n":"rect_dithered_rows","k":"routine","len":22,"c":true},{"a":36853,"n":"fill_outlined_trapezoid_regs","k":"routine","len":23,"c":true},{"a":36876,"n":"fill_outlined_trapezoid","k":"routine","len":54,"c":true},{"a":36930,"n":"classify_edge_ends","k":"routine","len":73,"c":true},{"a":37003,"n":"edge_x_at_row","k":"routine","len":19,"c":true},{"a":37022,"n":"interpolate","k":"routine","len":91,"c":true},{"a":37113,"n":"fill_trapezoid","k":"routine","len":46,"c":true},{"a":37159,"n":"trapezoid_clip_top","k":"routine","len":71,"c":true},{"a":37230,"n":"trapezoid_clip_bottom","k":"routine","len":81,"c":true},{"a":37311,"n":"trapezoid_clip_both","k":"routine","len":49,"c":true},{"a":37360,"n":"trapezoid_walk_up","k":"routine","len":41,"c":true},{"a":37401,"n":"trapezoid_walk_down","k":"routine","len":87,"c":true},{"a":37488,"n":"trapezoid_setup","k":"routine","len":369,"c":true},{"a":37857,"n":"trapezoid_rows","k":"routine","len":76,"c":true},{"a":37933,"n":"right_edge_select","k":"routine","len":2,"c":true},{"a":37935,"n":"right_edge_vertical","k":"routine","len":6,"c":true},{"a":37941,"n":"right_edge_steep_left","k":"routine","len":29,"c":true},{"a":37970,"n":"right_edge_shallow_left","k":"routine","len":40,"c":true},{"a":38010,"n":"right_edge_steep_right","k":"routine","len":36,"c":true},{"a":38046,"n":"right_edge_shallow_right","k":"routine","len":39,"c":true},{"a":38085,"n":"left_edge_select","k":"routine","len":5,"c":true},{"a":38090,"n":"left_edge_vertical","k":"routine","len":6,"c":true},{"a":38096,"n":"left_edge_steep_left","k":"routine","len":38,"c":true},{"a":38134,"n":"left_edge_shallow_left","k":"routine","len":41,"c":true},{"a":38175,"n":"left_edge_steep_right","k":"routine","len":27,"c":true},{"a":38202,"n":"left_edge_shallow_right","k":"routine","len":38,"c":true},{"a":38240,"n":"trapezoid_next_row","k":"routine","len":25,"c":true},{"a":38265,"n":"fill_upright_quad_regs","k":"routine","len":23,"c":true},{"a":38288,"n":"fill_upright_quad","k":"routine","len":141,"c":true},{"a":38429,"n":"upright_quad_flat_triangle","k":"routine","len":35,"c":true},{"a":38464,"n":"upright_quad_top_right_higher","k":"routine","len":43,"c":true},{"a":38507,"n":"upright_quad_bottom","k":"routine","len":72,"c":true},{"a":38579,"n":"upright_quad_left_above_right","k":"routine","len":179,"c":true},{"a":38758,"n":"upright_quad_right_above_left","k":"routine","len":179,"c":true},{"a":38937,"n":"fill_quad","k":"routine","len":109,"c":true},{"a":39046,"n":"fill_quad_bands","k":"routine","len":184,"c":true},{"a":39230,"n":"quad_levels","k":"routine","len":121,"c":true},{"a":39351,"n":"quad_levels_v2_lowest","k":"routine","len":50,"c":true},{"a":39401,"n":"quad_levels_v0_above_v3","k":"routine","len":100,"c":true},{"a":39501,"n":"quad_levels_v3_above_v2","k":"routine","len":50,"c":true},{"a":39551,"n":"link_handover_0","k":"variable","len":2,"c":true},{"a":39553,"n":"link_handover_2","k":"variable","len":2,"c":true},{"a":39555,"n":"link_handover_4","k":"variable","len":2,"c":true},{"a":39557,"n":"unused_bytes_9a85","k":"table","len":4,"c":true},{"a":39561,"n":"find_floor_under_point","k":"routine","len":250,"c":true},{"a":39811,"n":"object_surface_at_point","k":"routine","len":82,"c":true},{"a":39893,"n":"flat_object_surface","k":"routine","len":42,"c":true},{"a":39935,"n":"x_ramp_surface","k":"routine","len":103,"c":true},{"a":40038,"n":"y_ramp_surface","k":"routine","len":102,"c":true},{"a":40140,"n":"ratio_smaller_over_larger","k":"routine","len":37,"c":true},{"a":40177,"n":"move_worm","k":"routine","len":179,"c":true},{"a":40356,"n":"probe_new_head_position","k":"routine","len":102,"c":true},{"a":40458,"n":"head_touches_object","k":"routine","len":166,"c":true},{"a":40624,"n":"head_step_or_wall","k":"routine","len":135,"c":true},{"a":40759,"n":"bounce_off_wall","k":"routine","len":21,"c":true},{"a":40780,"n":"stop_worm","k":"routine","len":10,"c":true},{"a":40790,"n":"unused_jump_to_edge_test","k":"table","len":3,"c":true},{"a":40793,"n":"commit_head_move","k":"routine","len":57,"c":true},{"a":40850,"n":"scroll_cell_window_plus_x","k":"routine","len":163,"c":true},{"a":41013,"n":"scroll_cell_window_minus_x","k":"routine","len":182,"c":true},{"a":41195,"n":"fill_window_column","k":"routine","len":167,"c":true},{"a":41362,"n":"find_cell_in_window","k":"routine","len":38,"c":true},{"a":41400,"n":"commit_head_move_y","k":"routine","len":31,"c":true},{"a":41431,"n":"scroll_cell_window_minus_y","k":"routine","len":158,"c":true},{"a":41589,"n":"scroll_cell_window_plus_y","k":"routine","len":158,"c":true},{"a":41747,"n":"fill_window_row","k":"routine","len":160,"c":true},{"a":41907,"n":"commit_head_move_z","k":"routine","len":13,"c":true},{"a":41920,"n":"turn_back_at_board_edge","k":"routine","len":41,"c":true},{"a":41961,"n":"begin_body_pass","k":"routine","len":28,"c":true},{"a":41989,"n":"pull_body_link","k":"routine","len":355,"c":true},{"a":42344,"n":"settle_body_joint","k":"routine","len":68,"c":true},{"a":42412,"n":"joint_collects_spindle","k":"routine","len":49,"c":true},{"a":42461,"n":"joint_on_debugger","k":"routine","len":25,"c":true},{"a":42486,"n":"joint_catches_bug","k":"routine","len":48,"c":true},{"a":42534,"n":"joint_eats_sparky","k":"routine","len":74,"c":true},{"a":42608,"n":"joint_step_or_wall","k":"routine","len":330,"c":true},{"a":42938,"n":"unused_joint_step_fragment","k":"table","len":11,"c":true},{"a":42949,"n":"next_body_link","k":"routine","len":16,"c":true},{"a":42965,"n":"order_quad_corners","k":"routine","len":236,"c":true},{"a":43201,"n":"null_cell_neighbours","k":"table","len":3,"c":true},{"a":43204,"n":"sine_lookup","k":"routine","len":20,"c":true},{"a":43224,"n":"multiply_e_by_a","k":"routine","len":3,"c":true},{"a":43227,"n":"multiply_de_by_a_fraction","k":"routine","len":75,"c":true},{"a":43302,"n":"worm_velocity","k":"routine","len":116,"c":true},{"a":43418,"n":"slope_adjust_y","k":"routine","len":8,"c":true},{"a":43426,"n":"slope_adjust","k":"routine","len":337,"c":true},{"a":43763,"n":"build_display_list","k":"routine","len":727,"c":true},{"a":44490,"n":"list_nearby_cells","k":"routine","len":116,"c":true},{"a":44606,"n":"list_objects","k":"routine","len":144,"c":true},{"a":44750,"n":"scratch_record","k":"table","len":10,"c":true},{"a":44760,"n":"insert_worm_segments","k":"routine","len":33,"c":true},{"a":44793,"n":"add_cell_to_list","k":"routine","len":80,"c":true},{"a":44873,"n":"run_record_handler","k":"routine","len":26,"c":true},{"a":44899,"n":"record_handler_call","k":"routine","len":16,"c":true},{"a":44915,"n":"add_record_to_list","k":"routine","len":149,"c":true},{"a":45064,"n":"list_insert_ordered","k":"routine","len":61,"c":true},{"a":45125,"n":"compare_records","k":"routine","len":96,"c":true},{"a":45221,"n":"compare_positions","k":"routine","len":547,"c":true},{"a":45768,"n":"compare_heights","k":"routine","len":44,"c":true},{"a":45812,"n":"draw_display_list","k":"routine","len":92,"c":true},{"a":45904,"n":"floor_dot_generator","k":"routine","len":26,"c":true},{"a":45930,"n":"draw_legged_creature","k":"routine","len":295,"c":true},{"a":46225,"n":"leg_end_point","k":"routine","len":79,"c":true},{"a":46304,"n":"draw_small_creature","k":"routine","len":207,"c":true},{"a":46511,"n":"draw_leg_strip","k":"routine","len":320,"c":true},{"a":46831,"n":"leg_strip_store_left","k":"routine","len":14,"c":true},{"a":46845,"n":"leg_strip_store_right","k":"routine","len":5,"c":true},{"a":46850,"n":"leg_strip_mirrored","k":"routine","len":23,"c":true},{"a":46873,"n":"leg_mirror_left_clip_unreached","k":"routine","len":12,"c":true},{"a":46885,"n":"leg_mirror_right_edge","k":"routine","len":19,"c":true},{"a":46904,"n":"leg_mirror_plot","k":"routine","len":95,"c":true},{"a":46999,"n":"plot_spark","k":"routine","len":29,"c":true},{"a":47028,"n":"leg_row_step","k":"variable","len":2,"c":true},{"a":47030,"n":"plot_disc","k":"routine","len":42,"c":true},{"a":47072,"n":"plot_shape_24","k":"routine","len":3,"c":true},{"a":47075,"n":"plot_shape","k":"routine","len":527,"c":true},{"a":47602,"n":"clear_pixel","k":"routine","len":39,"c":true},{"a":47641,"n":"fill_quad_script","k":"routine","len":113,"c":true},{"a":47754,"n":"script_corner_y","k":"routine","len":21,"c":true},{"a":47775,"n":"script_corner_x","k":"routine","len":14,"c":true},{"a":47789,"n":"disk_lift_counter","k":"variable","len":1,"c":true},{"a":47790,"n":"hand_quad_script","k":"table","len":75,"c":true},{"a":47865,"n":"hand_second_quad_script","k":"table","len":13,"c":true},{"a":47878,"n":"draw_floppy_disk","k":"routine","len":495,"c":true},{"a":48373,"n":"draw_counter_display","k":"routine","len":29,"c":true},{"a":48402,"n":"build_counter_display","k":"routine","len":44,"c":true},{"a":48446,"n":"xor_digit_segments","k":"routine","len":46,"c":true},{"a":48492,"n":"counter_units","k":"variable","len":1,"c":true},{"a":48493,"n":"counter_tens","k":"variable","len":1,"c":true},{"a":48494,"n":"counter_hundreds","k":"variable","len":1,"c":true},{"a":48495,"n":"raise_item_handler","k":"routine","len":33,"c":true},{"a":48528,"n":"lower_item_handler","k":"routine","len":65,"c":true},{"a":48593,"n":"wave_item_handler","k":"routine","len":54,"c":true},{"a":48647,"n":"release_bug_handler","k":"routine","len":202,"c":true},{"a":48849,"n":"disk_drive_handler","k":"routine","len":86,"c":true},{"a":48935,"n":"spark_picture_table","k":"table","len":50,"c":true},{"a":48985,"n":"disc_picture_table","k":"table","len":50,"c":true},{"a":49035,"n":"unused_picture_table","k":"table","len":50,"c":true},{"a":49085,"n":"spark_pictures","k":"table","len":67,"c":true},{"a":49152,"n":"spark_pictures_from_c000","k":"table","len":753,"c":true},{"a":49905,"n":"disc_pictures","k":"table","len":706,"c":true},{"a":50611,"n":"explosion_picture_1","k":"table","len":60,"c":true},{"a":50671,"n":"explosion_picture_2","k":"table","len":60,"c":true},{"a":50731,"n":"explosion_picture_3","k":"table","len":60,"c":true},{"a":50791,"n":"leg_stroke_records","k":"table","len":64,"c":true},{"a":50855,"n":"leg_stroke_rows","k":"table","len":184,"c":true},{"a":51039,"n":"disk_hub_picture_a","k":"table","len":102,"c":true},{"a":51141,"n":"disk_hub_picture_b","k":"table","len":102,"c":true},{"a":51243,"n":"disk_slot_picture","k":"table","len":84,"c":true},{"a":51327,"n":"disk_label_left","k":"table","len":48,"c":true},{"a":51375,"n":"disk_label_right","k":"table","len":48,"c":true},{"a":51423,"n":"spiked_ball_shadow","k":"table","len":52,"c":true},{"a":51475,"n":"spiked_ball_picture_22","k":"table","len":132,"c":true},{"a":51607,"n":"spiked_ball_picture_18","k":"table","len":108,"c":true},{"a":51715,"n":"spiked_ball_picture_15","k":"table","len":60,"c":true},{"a":51775,"n":"spiked_ball_picture_12","k":"table","len":48,"c":true},{"a":51823,"n":"scatter_picture_a","k":"table","len":64,"c":true},{"a":51887,"n":"scatter_picture_b","k":"table","len":64,"c":true},{"a":51951,"n":"small_bug_ring_6","k":"table","len":24,"c":true},{"a":51975,"n":"small_bug_ring_7","k":"table","len":28,"c":true},{"a":52003,"n":"small_bug_middle_a","k":"table","len":20,"c":true},{"a":52023,"n":"small_bug_middle_b","k":"table","len":20,"c":true},{"a":52043,"n":"spindle_pictures","k":"table","len":192,"c":true},{"a":52235,"n":"counter_display_left","k":"table","len":96,"c":true},{"a":52331,"n":"counter_display_right","k":"table","len":96,"c":true},{"a":52427,"n":"digit_segment_masks","k":"table","len":10,"c":true},{"a":52437,"n":"segment_stream_two_digits","k":"table","len":150,"c":true},{"a":52587,"n":"segment_stream_units_digit","k":"table","len":75,"c":true},{"a":52662,"n":"digit_glyphs","k":"table","len":80,"c":true},{"a":52742,"n":"map_last_cell","k":"variable","len":2,"c":true},{"a":52744,"n":"map_last_spindle_count","k":"variable","len":2,"c":true},{"a":52746,"n":"update_insert_map","k":"routine","len":31,"c":true},{"a":52777,"n":"draw_insert_map","k":"routine","len":74,"c":true},{"a":52851,"n":"draw_map_square","k":"routine","len":72,"c":true},{"a":52923,"n":"map_mask_first_byte","k":"variable","len":1,"c":true},{"a":52924,"n":"map_mask_second_byte","k":"variable","len":1,"c":true},{"a":52925,"n":"map_mask_third_byte","k":"table","len":3,"c":true},{"a":52928,"n":"plot_map_record","k":"routine","len":309,"c":true},{"a":53237,"n":"paint_map_block","k":"routine","len":50,"c":true},{"a":53287,"n":"paint_map_cell","k":"routine","len":31,"c":true},{"a":53318,"n":"ball_rotation","k":"variable","len":1,"c":true},{"a":53319,"n":"ball_gore_angle","k":"variable","len":1,"c":true},{"a":53320,"n":"ball_gores_left","k":"variable","len":1,"c":true},{"a":53321,"n":"ball_spin","k":"variable","len":1,"c":true},{"a":53322,"n":"ball_x","k":"variable","len":1,"c":true},{"a":53323,"n":"ball_top_row","k":"variable","len":1,"c":true},{"a":53324,"n":"ball_fall_speed","k":"variable","len":1,"c":true},{"a":53325,"n":"ball_x_speed","k":"variable","len":2,"c":true},{"a":53327,"n":"ball_edge_before_r17","k":"variable","len":1,"c":true},{"a":53328,"n":"ball_edge_before_r34","k":"variable","len":1,"c":true},{"a":53329,"n":"ball_edge_r17","k":"variable","len":1,"c":true},{"a":53330,"n":"ball_edge_r34","k":"variable","len":1,"c":true},{"a":53331,"n":"ball_edge_before_r29","k":"variable","len":1,"c":true},{"a":53332,"n":"ball_edge_r29","k":"table","len":3,"c":true},{"a":53335,"n":"ball_strip_heights","k":"table","len":3,"c":true},{"a":53338,"n":"ball_shadow_done","k":"table","len":4,"c":true},{"a":53342,"n":"halt_screen","k":"routine","len":87,"c":true},{"a":53429,"n":"halt_screen_pass","k":"routine","len":155,"c":true},{"a":53584,"n":"draw_ball_gores","k":"routine","len":323,"c":true},{"a":53907,"n":"draw_ball_strip_flipped","k":"routine","len":13,"c":true},{"a":53920,"n":"draw_ball_strip","k":"routine","len":33,"c":true},{"a":53953,"n":"unreached_ret_after_strip","k":"variable","len":1,"c":true},{"a":53954,"n":"ball_gore_edge","k":"routine","len":94,"c":true},{"a":54048,"n":"multiply_a_by_de","k":"routine","len":22,"c":true},{"a":54070,"n":"halt_screen_show","k":"routine","len":59,"c":true},{"a":54129,"n":"draw_strip_tile","k":"routine","len":12,"c":true},{"a":54141,"n":"draw_halt_backdrop","k":"routine","len":109,"c":true},{"a":54250,"n":"halt_strip_tiles","k":"table","len":56,"c":true},{"a":54306,"n":"halt_strip_tile_odd","k":"table","len":8,"c":true},{"a":54314,"n":"train_gap_timer","k":"variable","len":1,"c":true},{"a":54315,"n":"train_gap","k":"variable","len":1,"c":true},{"a":54316,"n":"train_square","k":"variable","len":2,"c":true},{"a":54318,"n":"train_start_x","k":"variable","len":1,"c":true},{"a":54319,"n":"train_start_y","k":"variable","len":1,"c":true},{"a":54320,"n":"train_start_height","k":"variable","len":1,"c":true},{"a":54321,"n":"train_heading","k":"variable","len":1,"c":true},{"a":54322,"n":"train_members_left","k":"table","len":5,"c":true},{"a":54327,"n":"eruption_delay","k":"variable","len":1,"c":true},{"a":54328,"n":"spawn_objects","k":"routine","len":89,"c":true},{"a":54417,"n":"spawn_flyer","k":"routine","len":153,"c":true},{"a":54570,"n":"spawn_train","k":"routine","len":92,"c":true},{"a":54662,"n":"start_train","k":"routine","len":158,"c":true},{"a":54820,"n":"emit_train_member","k":"routine","len":109,"c":true},{"a":54929,"n":"walk_objects","k":"routine","len":3,"c":true},{"a":54932,"n":"walk_next_object","k":"routine","len":53,"c":true},{"a":54985,"n":"update_bug","k":"routine","len":108,"c":true},{"a":55093,"n":"bug_move","k":"routine","len":175,"c":true},{"a":55268,"n":"bug_chase","k":"routine","len":97,"c":true},{"a":55365,"n":"bug_collision","k":"routine","len":119,"c":true},{"a":55484,"n":"bug_blocked","k":"routine","len":133,"c":true},{"a":55617,"n":"distance_to_worm","k":"routine","len":60,"c":true},{"a":55677,"n":"step_limbs_up","k":"routine","len":25,"c":true},{"a":55702,"n":"step_limbs_down","k":"routine","len":19,"c":true},{"a":55721,"n":"burper_wait_and_rise","k":"routine","len":68,"c":true},{"a":55789,"n":"update_sparky","k":"routine","len":79,"c":true},{"a":55868,"n":"finish_object_move","k":"routine","len":56,"c":true},{"a":55924,"n":"sparky_collision","k":"routine","len":41,"c":true},{"a":55965,"n":"sparky_fizzle","k":"routine","len":42,"c":true},{"a":56007,"n":"sparky_join_track","k":"routine","len":42,"c":true},{"a":56049,"n":"update_arrival_marker","k":"routine","len":27,"c":true},{"a":56076,"n":"update_rider","k":"routine","len":150,"c":true},{"a":56226,"n":"rider_turn","k":"routine","len":27,"c":true},{"a":56253,"n":"unreached_inc_after_rider","k":"table","len":3,"c":true},{"a":56256,"n":"f0_handler_exit","k":"routine","len":6,"c":true},{"a":56262,"n":"f0_f1_reaches_e8_record","k":"routine","len":163,"c":true},{"a":56425,"n":"e5_flyer_handler","k":"routine","len":399,"c":true},{"a":56824,"n":"e6_burst_handler","k":"routine","len":42,"c":true},{"a":56866,"n":"become_e6_burst","k":"routine","len":31,"c":true},{"a":56897,"n":"fb_marker_handler","k":"routine","len":119,"c":true},{"a":57016,"n":"count_ed_arrival","k":"routine","len":46,"c":true},{"a":57062,"n":"remove_object_record","k":"routine","len":30,"c":true},{"a":57092,"n":"velocity_from_heading","k":"routine","len":64,"c":true},{"a":57156,"n":"set_move_box","k":"routine","len":91,"c":true},{"a":57247,"n":"square_from_reference","k":"routine","len":25,"c":true},{"a":57272,"n":"probe_move","k":"routine","len":146,"c":true},{"a":57418,"n":"fill_square_low_x_low_y","k":"routine","len":35,"c":true},{"a":57453,"n":"fill_square_high_x_low_y","k":"routine","len":31,"c":true},{"a":57484,"n":"fill_square_low_x_high_y","k":"routine","len":37,"c":true},{"a":57521,"n":"fill_square_high_x_high_y","k":"routine","len":33,"c":true},{"a":57554,"n":"probe_records_and_objects","k":"routine","len":253,"c":true},{"a":57807,"n":"test_square_records","k":"routine","len":522,"c":true},{"a":58329,"n":"test_against_object","k":"routine","len":150,"c":true},{"a":58479,"n":"random_state","k":"table","len":3,"c":true},{"a":58482,"n":"random_next","k":"routine","len":26,"c":true},{"a":58508,"n":"worm_width_table","k":"table","len":34,"c":true},{"a":58542,"n":"sound_script_pointer","k":"variable","len":2,"c":true},{"a":58544,"n":"sound_script_counter","k":"variable","len":1,"c":true},{"a":58545,"n":"sound_script_reload","k":"variable","len":1,"c":true},{"a":58546,"n":"sound_script_menu","k":"table","len":3,"c":true},{"a":58549,"n":"sound_script_menu_link","k":"variable","len":2,"c":true},{"a":58551,"n":"sound_script_alarm","k":"table","len":9,"c":true},{"a":58560,"n":"sound_script_alarm_link","k":"variable","len":2,"c":true},{"a":58562,"n":"sound_script_game_start","k":"table","len":29,"c":true},{"a":58591,"n":"sound_script_game_start_stop","k":"variable","len":2,"c":true},{"a":58593,"n":"sound_script_touch","k":"table","len":5,"c":true},{"a":58598,"n":"sound_script_touch_stop","k":"variable","len":2,"c":true},{"a":58600,"n":"sound_script_f3_meets_f1","k":"table","len":4,"c":true},{"a":58604,"n":"sound_script_f3_meets_f1_stop","k":"variable","len":2,"c":true},{"a":58606,"n":"sound_script_game_end","k":"table","len":7,"c":true},{"a":58613,"n":"sound_script_game_end_link","k":"variable","len":2,"c":true},{"a":58615,"n":"start_sound_script_if_idle","k":"routine","len":5,"c":true},{"a":58620,"n":"start_sound_script","k":"routine","len":12,"c":true},{"a":58632,"n":"menu","k":"routine","len":20,"c":true},{"a":58652,"n":"menu_poll_keys","k":"routine","len":40,"c":true},{"a":58692,"n":"key_redefiner","k":"routine","len":110,"c":true},{"a":58802,"n":"wait_keys_released","k":"routine","len":9,"c":true},{"a":58811,"n":"key_row_address","k":"routine","len":17,"c":true},{"a":58828,"n":"note_pitch_table","k":"table","len":24,"c":true},{"a":58852,"n":"tune_script_pointers","k":"table","len":20,"c":true},{"a":58872,"n":"tune_script_a0","k":"table","len":5,"c":true},{"a":58877,"n":"tune_script_a1","k":"table","len":9,"c":true},{"a":58886,"n":"tune_script_a2","k":"table","len":9,"c":true},{"a":58895,"n":"tune_script_a3","k":"table","len":9,"c":true},{"a":58904,"n":"tune_script_a4","k":"table","len":7,"c":true},{"a":58911,"n":"tune_script_a5","k":"table","len":9,"c":true},{"a":58920,"n":"tune_script_a6","k":"table","len":56,"c":true},{"a":58976,"n":"tune_script_a7","k":"table","len":37,"c":true},{"a":59013,"n":"tune_script_a8","k":"table","len":9,"c":true},{"a":59022,"n":"tune_script_a9","k":"table","len":17,"c":true},{"a":59039,"n":"play_tune_forever","k":"routine","len":12,"c":true},{"a":59051,"n":"play_tune_element","k":"routine","len":107,"c":true},{"a":59158,"n":"note_period_and_count","k":"routine","len":47,"c":true},{"a":59205,"n":"play_note","k":"routine","len":3,"c":true},{"a":59208,"n":"tone_loop","k":"routine","len":21,"c":true},{"a":59229,"n":"tone_carry_opcode","k":"routine","len":56,"c":true},{"a":59285,"n":"message_pointers","k":"table","len":20,"c":true},{"a":59305,"n":"key_name_space","k":"string","len":7,"c":true},{"a":59312,"n":"key_name_space_end","k":"variable","len":1,"c":true},{"a":59313,"n":"key_name_sym_shift","k":"string","len":11,"c":true},{"a":59324,"n":"key_name_sym_shift_end","k":"variable","len":1,"c":true},{"a":59325,"n":"key_name_caps_shift","k":"string","len":12,"c":true},{"a":59337,"n":"key_name_caps_shift_end","k":"variable","len":1,"c":true},{"a":59338,"n":"key_name_enter","k":"string","len":7,"c":true},{"a":59345,"n":"key_name_enter_end","k":"variable","len":1,"c":true},{"a":59346,"n":"control_name_suffix","k":"string","len":8,"c":true},{"a":59354,"n":"control_name_suffix_end","k":"variable","len":1,"c":true},{"a":59355,"n":"menu_page_message","k":"table","len":5,"c":true},{"a":59360,"n":"menu_title_text","k":"string","len":24,"c":true},{"a":59384,"n":"menu_rule_cursor","k":"table","len":3,"c":true},{"a":59387,"n":"menu_rule_text","k":"string","len":24,"c":true},{"a":59411,"n":"menu_credits_setup","k":"table","len":5,"c":true},{"a":59416,"n":"menu_author_text","k":"string","len":16,"c":true},{"a":59432,"n":"menu_copyright_cursor","k":"table","len":3,"c":true},{"a":59435,"n":"menu_copyright_text","k":"string","len":21,"c":true},{"a":59456,"n":"menu_options_setup","k":"table","len":5,"c":true},{"a":59461,"n":"menu_option_redefine_text","k":"string","len":17,"c":true},{"a":59478,"n":"menu_option_start_cursor","k":"table","len":3,"c":true},{"a":59481,"n":"menu_option_start_text","k":"string","len":14,"c":true},{"a":59495,"n":"menu_kempston_attribute_code","k":"variable","len":1,"c":true},{"a":59496,"n":"kempston_flag","k":"variable","len":1,"c":true},{"a":59497,"n":"menu_option_kempston_cursor","k":"table","len":3,"c":true},{"a":59500,"n":"menu_option_kempston_text","k":"string","len":21,"c":true},{"a":59521,"n":"menu_page_end","k":"variable","len":1,"c":true},{"a":59522,"n":"redefiner_page_message","k":"table","len":5,"c":true},{"a":59527,"n":"redefiner_title_text","k":"string","len":15,"c":true},{"a":59542,"n":"redefiner_rows_setup","k":"table","len":5,"c":true},{"a":59547,"n":"key_row_blast_name","k":"string","len":6,"c":true},{"a":59553,"n":"key_row_blast_suffix_code","k":"variable","len":1,"c":true},{"a":59554,"n":"key_row_blast_key","k":"variable","len":1,"c":true},{"a":59555,"n":"key_row_blast_next_cursor","k":"table","len":3,"c":true},{"a":59558,"n":"key_row_burp_name","k":"string","len":5,"c":true},{"a":59563,"n":"key_row_burp_suffix_code","k":"variable","len":1,"c":true},{"a":59564,"n":"key_row_burp_key","k":"string","len":2,"c":true},{"a":59566,"n":"key_row_burp_next_cursor","k":"table","len":3,"c":true},{"a":59569,"n":"key_row_fast_name","k":"string","len":5,"c":true},{"a":59574,"n":"key_row_fast_suffix_code","k":"variable","len":1,"c":true},{"a":59575,"n":"key_row_fast_key","k":"string","len":2,"c":true},{"a":59577,"n":"key_row_fast_next_cursor","k":"table","len":3,"c":true},{"a":59580,"n":"key_row_slow_name","k":"string","len":5,"c":true},{"a":59585,"n":"key_row_slow_suffix_code","k":"variable","len":1,"c":true},{"a":59586,"n":"key_row_slow_key","k":"string","len":2,"c":true},{"a":59588,"n":"key_row_slow_next_cursor","k":"table","len":3,"c":true},{"a":59591,"n":"key_row_right_name","k":"string","len":6,"c":true},{"a":59597,"n":"key_row_right_suffix_code","k":"variable","len":1,"c":true},{"a":59598,"n":"key_row_right_key","k":"string","len":1,"c":true},{"a":59599,"n":"key_row_right_next_cursor","k":"table","len":3,"c":true},{"a":59602,"n":"key_row_left_name","k":"string","len":5,"c":true},{"a":59607,"n":"key_row_left_suffix_code","k":"variable","len":1,"c":true},{"a":59608,"n":"key_row_left_key","k":"string","len":2,"c":true},{"a":59610,"n":"key_row_left_next_cursor","k":"table","len":3,"c":true},{"a":59613,"n":"key_row_bounc_name","k":"string","len":6,"c":true},{"a":59619,"n":"key_row_bounc_suffix_code","k":"variable","len":1,"c":true},{"a":59620,"n":"key_row_bounc_key","k":"string","len":1,"c":true},{"a":59621,"n":"key_row_bounc_next_cursor","k":"table","len":3,"c":true},{"a":59624,"n":"key_row_abort_name","k":"string","len":6,"c":true},{"a":59630,"n":"key_row_abort_suffix_code","k":"variable","len":1,"c":true},{"a":59631,"n":"key_row_abort_key","k":"string","len":1,"c":true},{"a":59632,"n":"key_row_abort_next_cursor","k":"table","len":3,"c":true},{"a":59635,"n":"key_row_exit_name","k":"string","len":5,"c":true},{"a":59640,"n":"redefiner_help_setup","k":"table","len":5,"c":true},{"a":59645,"n":"redefiner_help_advance_text","k":"string","len":6,"c":true},{"a":59651,"n":"redefiner_help_advance_key","k":"variable","len":1,"c":true},{"a":59652,"n":"redefiner_help_advance_tail","k":"string","len":11,"c":true},{"a":59663,"n":"redefiner_help_change_cursor","k":"table","len":3,"c":true},{"a":59666,"n":"redefiner_help_change_text","k":"string","len":6,"c":true},{"a":59672,"n":"redefiner_help_change_key","k":"variable","len":1,"c":true},{"a":59673,"n":"redefiner_help_change_tail","k":"string","len":18,"c":true},{"a":59691,"n":"redefiner_page_end","k":"variable","len":1,"c":true},{"a":59692,"n":"key_wanted_message","k":"table","len":4,"c":true},{"a":59696,"n":"show_text_page","k":"routine","len":42,"c":true},{"a":59738,"n":"print_cursor","k":"variable","len":2,"c":true},{"a":59740,"n":"print_attribute","k":"variable","len":1,"c":true},{"a":59741,"n":"print_message","k":"routine","len":137,"c":true},{"a":59878,"n":"saved_stack_pointer","k":"variable","len":2,"c":true},{"a":59880,"n":"copy_buffer_to_screen","k":"routine","len":192,"c":true},{"a":60072,"n":"unreached_ret","k":"variable","len":1,"c":true},{"a":60073,"n":"clear_buffer_draw_floor","k":"routine","len":130,"c":true},{"a":60203,"n":"draw_floor_square","k":"routine","len":83,"c":true},{"a":60286,"n":"display_list_head","k":"variable","len":2,"c":true},{"a":60288,"n":"display_list_gap","k":"table","len":13,"c":true},{"a":60301,"n":"leftover_list_record","k":"table","len":15,"c":true},{"a":60316,"n":"master_tape","k":"routine","len":207,"c":true},{"a":61400,"n":"entry_stub","k":"routine","len":33,"c":true},{"a":61440,"n":"panel_bitmap","k":"table","len":1024,"c":true},{"a":62464,"n":"panel_bitmap_lower","k":"table","len":1024,"c":true},{"a":63488,"n":"panel_attributes","k":"table","len":256,"c":true},{"a":64036,"n":"tape_utility_entry","k":"routine","len":50,"c":true},{"a":64086,"n":"tape_utility_signature","k":"string","len":10,"c":true},{"a":64096,"n":"tape_utility_dispatch","k":"routine","len":7,"c":true}],"records":[{"a":0,"t":"gap","n":23296,"x":[25600,25602,25606,25608,25610,25612,25616,25618,25626,25650,25652,25656,25658,25660,25662,25666,25668,25676,25751,25755,25774,25806,25892,25894,25896,25908,25910,26007,26027,26312,26412,26416,26456,26460,26500,26504,26544,26548,26690,26757,26759,26785,26791,26822,26826,26889,26891,26939,26965,27011,27013,27032,27055,27059,27099,27127,27131,27157,27163,27189,27193,27223,27258,27291,27295,27335,27339,27388,27390,27409,27413,27439,27441,27466,27468,27562,27566,27634,27636,27687,27691,27758,27921,27990,27992,28043,28080,28111,28117,28127,28131,28133,28173,28270,28324,28363,28396,28402,28414,28416,28418,28465,28469,28490,28492,28502,28504,28531,28566,28570,28582,28584,28603,28616,28621,28632,28634,28709,28713,28771,28801,28803,28847,28954,28970,28990,29083,29103,29230,29309,29315,29346,29348,29352,29373,29375,29419,29450,29456,29480,29484,29512,29576,29595,29680,29713,29754,29756,29796,29837,29854,29888,29918,29958,29962,29974,29978,29997,30001,30006,30010,30015,30019,30024,30026,30028,30049,30053,30058,30062,30067,30071,32937,32939,32941,32943]},{"a":23296,"l":"sprite_shift_1","c":"Sprite shift table for an offset of 1 pixel, the first of seven 256-byte pages at $5B00-$61FF; the page for an offset of s pixels is at $5A00 + $100*s. Odd offsets hold a right shift and even offsets a left shift: byte L is L>>1 when L is odd and (L<<6) AND $FF when L is even. A sprite byte v is looked up at v OR 1 for the part that stays in the first screen byte (v>>1) and at (v<<1) AND $FF for the bit that spills into the next byte ((v<<7) AND $FF), so one page gives both halves. The pages arrive on the tape already filled: the loop that makes them, $EC19-$EC59, belongs to the mastering routine at $EB9C, which the game does not run. They are read by the four masked sprite loops at $B6DF, $B760, $B8C3 and $B9A8. Each is entered with the page number in a register, made from the low three bits of the x coordinate by ADD A,$5A ($B6DB, $B75A, $B8BC, $B9A1); when those bits are 0 a byte-aligned loop is used instead and no page is read.","t":"byte","b":[0,0,128,1,0,2,128,3]},{"a":23304,"t":"byte","b":[0,4,128,5,0,6,128,7]},{"a":23312,"t":"byte","b":[0,8,128,9,0,10,128,11]},{"a":23320,"t":"byte","b":[0,12,128,13,0,14,128,15]},{"a":23328,"t":"byte","b":[0,16,128,17,0,18,128,19]},{"a":23336,"t":"byte","b":[0,20,128,21,0,22,128,23]},{"a":23344,"t":"byte","b":[0,24,128,25,0,26,128,27]},{"a":23352,"t":"byte","b":[0,28,128,29,0,30,128,31]},{"a":23360,"t":"byte","b":[0,32,128,33,0,34,128,35]},{"a":23368,"t":"byte","b":[0,36,128,37,0,38,128,39]},{"a":23376,"t":"byte","b":[0,40,128,41,0,42,128,43]},{"a":23384,"t":"byte","b":[0,44,128,45,0,46,128,47]},{"a":23392,"t":"byte","b":[0,48,128,49,0,50,128,51]},{"a":23400,"t":"byte","b":[0,52,128,53,0,54,128,55]},{"a":23408,"t":"byte","b":[0,56,128,57,0,58,128,59]},{"a":23416,"t":"byte","b":[0,60,128,61,0,62,128,63]},{"a":23424,"t":"byte","b":[0,64,128,65,0,66,128,67]},{"a":23432,"t":"byte","b":[0,68,128,69,0,70,128,71]},{"a":23440,"t":"byte","b":[0,72,128,73,0,74,128,75]},{"a":23448,"t":"byte","b":[0,76,128,77,0,78,128,79]},{"a":23456,"t":"byte","b":[0,80,128,81,0,82,128,83]},{"a":23464,"t":"byte","b":[0,84,128,85,0,86,128,87]},{"a":23472,"t":"byte","b":[0,88,128,89,0,90,128,91]},{"a":23480,"t":"byte","b":[0,92,128,93,0,94,128,95]},{"a":23488,"t":"byte","b":[0,96,128,97,0,98,128,99]},{"a":23496,"t":"byte","b":[0,100,128,101,0,102,128,103]},{"a":23504,"t":"byte","b":[0,104,128,105,0,106,128,107]},{"a":23512,"t":"byte","b":[0,108,128,109,0,110,128,111]},{"a":23520,"t":"byte","b":[0,112,128,113,0,114,128,115]},{"a":23528,"t":"byte","b":[0,116,128,117,0,118,128,119]},{"a":23536,"t":"byte","b":[0,120,128,121,0,122,128,123]},{"a":23544,"t":"byte","b":[0,124,128,125,0,126,128,127]},{"a":23552,"l":"sprite_shift_2","c":"Sprite shift table for an offset of 2 pixels (page $5C of the seven described at sprite_shift_1). Byte L is L>>2 when L is odd and (L<<5) AND $FF when L is even: offset $FF holds $3F and offset $FE holds $C0. Looked up at v OR 1 it gives v>>2, the part of a sprite byte that stays in the first screen byte; looked up at (v<<1) AND $FF it gives (v<<6) AND $FF, the 2 bits that spill into the next byte.","t":"byte","b":[0,0,64,0,128,1,192,1]},{"a":23560,"t":"byte","b":[0,2,64,2,128,3,192,3]},{"a":23568,"t":"byte","b":[0,4,64,4,128,5,192,5]},{"a":23576,"t":"byte","b":[0,6,64,6,128,7,192,7]},{"a":23584,"t":"byte","b":[0,8,64,8,128,9,192,9]},{"a":23592,"t":"byte","b":[0,10,64,10,128,11,192,11]},{"a":23600,"t":"byte","b":[0,12,64,12,128,13,192,13]},{"a":23608,"t":"byte","b":[0,14,64,14,128,15,192,15]},{"a":23616,"t":"byte","b":[0,16,64,16,128,17,192,17]},{"a":23624,"t":"byte","b":[0,18,64,18,128,19,192,19]},{"a":23632,"t":"byte","b":[0,20,64,20,128,21,192,21]},{"a":23640,"t":"byte","b":[0,22,64,22,128,23,192,23]},{"a":23648,"t":"byte","b":[0,24,64,24,128,25,192,25]},{"a":23656,"t":"byte","b":[0,26,64,26,128,27,192,27]},{"a":23664,"t":"byte","b":[0,28,64,28,128,29,192,29]},{"a":23672,"t":"byte","b":[0,30,64,30,128,31,192,31]},{"a":23680,"t":"byte","b":[0,32,64,32,128,33,192,33]},{"a":23688,"t":"byte","b":[0,34,64,34,128,35,192,35]},{"a":23696,"t":"byte","b":[0,36,64,36,128,37,192,37]},{"a":23704,"t":"byte","b":[0,38,64,38,128,39,192,39]},{"a":23712,"t":"byte","b":[0,40,64,40,128,41,192,41]},{"a":23720,"t":"byte","b":[0,42,64,42,128,43,192,43]},{"a":23728,"t":"byte","b":[0,44,64,44,128,45,192,45]},{"a":23736,"t":"byte","b":[0,46,64,46,128,47,192,47]},{"a":23744,"t":"byte","b":[0,48,64,48,128,49,192,49]},{"a":23752,"t":"byte","b":[0,50,64,50,128,51,192,51]},{"a":23760,"t":"byte","b":[0,52,64,52,128,53,192,53]},{"a":23768,"t":"byte","b":[0,54,64,54,128,55,192,55]},{"a":23776,"t":"byte","b":[0,56,64,56,128,57,192,57]},{"a":23784,"t":"byte","b":[0,58,64,58,128,59,192,59]},{"a":23792,"t":"byte","b":[0,60,64,60,128,61,192,61]},{"a":23800,"t":"byte","b":[0,62,64,62,128,63,192,63]},{"a":23808,"l":"sprite_shift_3","c":"Sprite shift table for an offset of 3 pixels (page $5D of the seven described at sprite_shift_1). Byte L is L>>3 when L is odd and (L<<4) AND $FF when L is even: offset $FF holds $1F and offset $FE holds $E0. Looked up at v OR 1 it gives v>>3, the part of a sprite byte that stays in the first screen byte; looked up at (v<<1) AND $FF it gives (v<<5) AND $FF, the 3 bits that spill into the next byte.","t":"byte","b":[0,0,32,0,64,0,96,0]},{"a":23816,"t":"byte","b":[128,1,160,1,192,1,224,1]},{"a":23824,"t":"byte","b":[0,2,32,2,64,2,96,2]},{"a":23832,"t":"byte","b":[128,3,160,3,192,3,224,3]},{"a":23840,"t":"byte","b":[0,4,32,4,64,4,96,4]},{"a":23848,"t":"byte","b":[128,5,160,5,192,5,224,5]},{"a":23856,"t":"byte","b":[0,6,32,6,64,6,96,6]},{"a":23864,"t":"byte","b":[128,7,160,7,192,7,224,7]},{"a":23872,"t":"byte","b":[0,8,32,8,64,8,96,8]},{"a":23880,"t":"byte","b":[128,9,160,9,192,9,224,9]},{"a":23888,"t":"byte","b":[0,10,32,10,64,10,96,10]},{"a":23896,"t":"byte","b":[128,11,160,11,192,11,224,11]},{"a":23904,"t":"byte","b":[0,12,32,12,64,12,96,12]},{"a":23912,"t":"byte","b":[128,13,160,13,192,13,224,13]},{"a":23920,"t":"byte","b":[0,14,32,14,64,14,96,14]},{"a":23928,"t":"byte","b":[128,15,160,15,192,15,224,15]},{"a":23936,"t":"byte","b":[0,16,32,16,64,16,96,16]},{"a":23944,"t":"byte","b":[128,17,160,17,192,17,224,17]},{"a":23952,"t":"byte","b":[0,18,32,18,64,18,96,18]},{"a":23960,"t":"byte","b":[128,19,160,19,192,19,224,19]},{"a":23968,"t":"byte","b":[0,20,32,20,64,20,96,20]},{"a":23976,"t":"byte","b":[128,21,160,21,192,21,224,21]},{"a":23984,"t":"byte","b":[0,22,32,22,64,22,96,22]},{"a":23992,"t":"byte","b":[128,23,160,23,192,23,224,23]},{"a":24000,"t":"byte","b":[0,24,32,24,64,24,96,24]},{"a":24008,"t":"byte","b":[128,25,160,25,192,25,224,25]},{"a":24016,"t":"byte","b":[0,26,32,26,64,26,96,26]},{"a":24024,"t":"byte","b":[128,27,160,27,192,27,224,27]},{"a":24032,"t":"byte","b":[0,28,32,28,64,28,96,28]},{"a":24040,"t":"byte","b":[128,29,160,29,192,29,224,29]},{"a":24048,"t":"byte","b":[0,30,32,30,64,30,96,30]},{"a":24056,"t":"byte","b":[128,31,160,31,192,31,224,31]},{"a":24064,"l":"sprite_shift_4","c":"Sprite shift table for an offset of 4 pixels (page $5E of the seven described at sprite_shift_1). Byte L is L>>4 when L is odd and (L<<3) AND $FF when L is even: offset $FF holds $0F and offset $FE holds $F0. Looked up at v OR 1 it gives v>>4, the part of a sprite byte that stays in the first screen byte; looked up at (v<<1) AND $FF it gives (v<<4) AND $FF, the 4 bits that spill into the next byte.","t":"byte","b":[0,0,16,0,32,0,48,0]},{"a":24072,"t":"byte","b":[64,0,80,0,96,0,112,0]},{"a":24080,"t":"byte","b":[128,1,144,1,160,1,176,1]},{"a":24088,"t":"byte","b":[192,1,208,1,224,1,240,1]},{"a":24096,"t":"byte","b":[0,2,16,2,32,2,48,2]},{"a":24104,"t":"byte","b":[64,2,80,2,96,2,112,2]},{"a":24112,"t":"byte","b":[128,3,144,3,160,3,176,3]},{"a":24120,"t":"byte","b":[192,3,208,3,224,3,240,3]},{"a":24128,"t":"byte","b":[0,4,16,4,32,4,48,4]},{"a":24136,"t":"byte","b":[64,4,80,4,96,4,112,4]},{"a":24144,"t":"byte","b":[128,5,144,5,160,5,176,5]},{"a":24152,"t":"byte","b":[192,5,208,5,224,5,240,5]},{"a":24160,"t":"byte","b":[0,6,16,6,32,6,48,6]},{"a":24168,"t":"byte","b":[64,6,80,6,96,6,112,6]},{"a":24176,"t":"byte","b":[128,7,144,7,160,7,176,7]},{"a":24184,"t":"byte","b":[192,7,208,7,224,7,240,7]},{"a":24192,"t":"byte","b":[0,8,16,8,32,8,48,8]},{"a":24200,"t":"byte","b":[64,8,80,8,96,8,112,8]},{"a":24208,"t":"byte","b":[128,9,144,9,160,9,176,9]},{"a":24216,"t":"byte","b":[192,9,208,9,224,9,240,9]},{"a":24224,"t":"byte","b":[0,10,16,10,32,10,48,10]},{"a":24232,"t":"byte","b":[64,10,80,10,96,10,112,10]},{"a":24240,"t":"byte","b":[128,11,144,11,160,11,176,11]},{"a":24248,"t":"byte","b":[192,11,208,11,224,11,240,11]},{"a":24256,"t":"byte","b":[0,12,16,12,32,12,48,12]},{"a":24264,"t":"byte","b":[64,12,80,12,96,12,112,12]},{"a":24272,"t":"byte","b":[128,13,144,13,160,13,176,13]},{"a":24280,"t":"byte","b":[192,13,208,13,224,13,240,13]},{"a":24288,"t":"byte","b":[0,14,16,14,32,14,48,14]},{"a":24296,"t":"byte","b":[64,14,80,14,96,14,112,14]},{"a":24304,"t":"byte","b":[128,15,144,15,160,15,176,15]},{"a":24312,"t":"byte","b":[192,15,208,15,224,15,240,15]},{"a":24320,"l":"sprite_shift_5","c":"Sprite shift table for an offset of 5 pixels (page $5F of the seven described at sprite_shift_1). Byte L is L>>5 when L is odd and (L<<2) AND $FF when L is even: offset $FF holds $07 and offset $FE holds $F8. Looked up at v OR 1 it gives v>>5, the part of a sprite byte that stays in the first screen byte; looked up at (v<<1) AND $FF it gives (v<<3) AND $FF, the 5 bits that spill into the next byte.","t":"byte","b":[0,0,8,0,16,0,24,0]},{"a":24328,"t":"byte","b":[32,0,40,0,48,0,56,0]},{"a":24336,"t":"byte","b":[64,0,72,0,80,0,88,0]},{"a":24344,"t":"byte","b":[96,0,104,0,112,0,120,0]},{"a":24352,"t":"byte","b":[128,1,136,1,144,1,152,1]},{"a":24360,"t":"byte","b":[160,1,168,1,176,1,184,1]},{"a":24368,"t":"byte","b":[192,1,200,1,208,1,216,1]},{"a":24376,"t":"byte","b":[224,1,232,1,240,1,248,1]},{"a":24384,"t":"byte","b":[0,2,8,2,16,2,24,2]},{"a":24392,"t":"byte","b":[32,2,40,2,48,2,56,2]},{"a":24400,"t":"byte","b":[64,2,72,2,80,2,88,2]},{"a":24408,"t":"byte","b":[96,2,104,2,112,2,120,2]},{"a":24416,"t":"byte","b":[128,3,136,3,144,3,152,3]},{"a":24424,"t":"byte","b":[160,3,168,3,176,3,184,3]},{"a":24432,"t":"byte","b":[192,3,200,3,208,3,216,3]},{"a":24440,"t":"byte","b":[224,3,232,3,240,3,248,3]},{"a":24448,"t":"byte","b":[0,4,8,4,16,4,24,4]},{"a":24456,"t":"byte","b":[32,4,40,4,48,4,56,4]},{"a":24464,"t":"byte","b":[64,4,72,4,80,4,88,4]},{"a":24472,"t":"byte","b":[96,4,104,4,112,4,120,4]},{"a":24480,"t":"byte","b":[128,5,136,5,144,5,152,5]},{"a":24488,"t":"byte","b":[160,5,168,5,176,5,184,5]},{"a":24496,"t":"byte","b":[192,5,200,5,208,5,216,5]},{"a":24504,"t":"byte","b":[224,5,232,5,240,5,248,5]},{"a":24512,"t":"byte","b":[0,6,8,6,16,6,24,6]},{"a":24520,"t":"byte","b":[32,6,40,6,48,6,56,6]},{"a":24528,"t":"byte","b":[64,6,72,6,80,6,88,6]},{"a":24536,"t":"byte","b":[96,6,104,6,112,6,120,6]},{"a":24544,"t":"byte","b":[128,7,136,7,144,7,152,7]},{"a":24552,"t":"byte","b":[160,7,168,7,176,7,184,7]},{"a":24560,"t":"byte","b":[192,7,200,7,208,7,216,7]},{"a":24568,"t":"byte","b":[224,7,232,7,240,7,248,7]},{"a":24576,"l":"sprite_shift_6","c":"Sprite shift table for an offset of 6 pixels (page $60 of the seven described at sprite_shift_1). Byte L is L>>6 when L is odd and (L<<1) AND $FF when L is even: offset $FF holds $03 and offset $FE holds $FC. Looked up at v OR 1 it gives v>>6, the part of a sprite byte that stays in the first screen byte; looked up at (v<<1) AND $FF it gives (v<<2) AND $FF, the 6 bits that spill into the next byte.","t":"byte","b":[0,0,4,0,8,0,12,0]},{"a":24584,"t":"byte","b":[16,0,20,0,24,0,28,0]},{"a":24592,"t":"byte","b":[32,0,36,0,40,0,44,0]},{"a":24600,"t":"byte","b":[48,0,52,0,56,0,60,0]},{"a":24608,"t":"byte","b":[64,0,68,0,72,0,76,0]},{"a":24616,"t":"byte","b":[80,0,84,0,88,0,92,0]},{"a":24624,"t":"byte","b":[96,0,100,0,104,0,108,0]},{"a":24632,"t":"byte","b":[112,0,116,0,120,0,124,0]},{"a":24640,"t":"byte","b":[128,1,132,1,136,1,140,1]},{"a":24648,"t":"byte","b":[144,1,148,1,152,1,156,1]},{"a":24656,"t":"byte","b":[160,1,164,1,168,1,172,1]},{"a":24664,"t":"byte","b":[176,1,180,1,184,1,188,1]},{"a":24672,"t":"byte","b":[192,1,196,1,200,1,204,1]},{"a":24680,"t":"byte","b":[208,1,212,1,216,1,220,1]},{"a":24688,"t":"byte","b":[224,1,228,1,232,1,236,1]},{"a":24696,"t":"byte","b":[240,1,244,1,248,1,252,1]},{"a":24704,"t":"byte","b":[0,2,4,2,8,2,12,2]},{"a":24712,"t":"byte","b":[16,2,20,2,24,2,28,2]},{"a":24720,"t":"byte","b":[32,2,36,2,40,2,44,2]},{"a":24728,"t":"byte","b":[48,2,52,2,56,2,60,2]},{"a":24736,"t":"byte","b":[64,2,68,2,72,2,76,2]},{"a":24744,"t":"byte","b":[80,2,84,2,88,2,92,2]},{"a":24752,"t":"byte","b":[96,2,100,2,104,2,108,2]},{"a":24760,"t":"byte","b":[112,2,116,2,120,2,124,2]},{"a":24768,"t":"byte","b":[128,3,132,3,136,3,140,3]},{"a":24776,"t":"byte","b":[144,3,148,3,152,3,156,3]},{"a":24784,"t":"byte","b":[160,3,164,3,168,3,172,3]},{"a":24792,"t":"byte","b":[176,3,180,3,184,3,188,3]},{"a":24800,"t":"byte","b":[192,3,196,3,200,3,204,3]},{"a":24808,"t":"byte","b":[208,3,212,3,216,3,220,3]},{"a":24816,"t":"byte","b":[224,3,228,3,232,3,236,3]},{"a":24824,"t":"byte","b":[240,3,244,3,248,3,252,3]},{"a":24832,"l":"sprite_shift_7","c":"Sprite shift table for an offset of 7 pixels (page $61 of the seven described at sprite_shift_1). Byte L is L>>7 when L is odd and L itself when L is even: offset $FF holds $01 and offset $FE holds $FE. Looked up at v OR 1 it gives v>>7, the part of a sprite byte that stays in the first screen byte; looked up at (v<<1) AND $FF it gives (v<<1) AND $FF, the 7 bits that spill into the next byte.","t":"byte","b":[0,0,2,0,4,0,6,0]},{"a":24840,"t":"byte","b":[8,0,10,0,12,0,14,0]},{"a":24848,"t":"byte","b":[16,0,18,0,20,0,22,0]},{"a":24856,"t":"byte","b":[24,0,26,0,28,0,30,0]},{"a":24864,"t":"byte","b":[32,0,34,0,36,0,38,0]},{"a":24872,"t":"byte","b":[40,0,42,0,44,0,46,0]},{"a":24880,"t":"byte","b":[48,0,50,0,52,0,54,0]},{"a":24888,"t":"byte","b":[56,0,58,0,60,0,62,0]},{"a":24896,"t":"byte","b":[64,0,66,0,68,0,70,0]},{"a":24904,"t":"byte","b":[72,0,74,0,76,0,78,0]},{"a":24912,"t":"byte","b":[80,0,82,0,84,0,86,0]},{"a":24920,"t":"byte","b":[88,0,90,0,92,0,94,0]},{"a":24928,"t":"byte","b":[96,0,98,0,100,0,102,0]},{"a":24936,"t":"byte","b":[104,0,106,0,108,0,110,0]},{"a":24944,"t":"byte","b":[112,0,114,0,116,0,118,0]},{"a":24952,"t":"byte","b":[120,0,122,0,124,0,126,0]},{"a":24960,"t":"byte","b":[128,1,130,1,132,1,134,1]},{"a":24968,"t":"byte","b":[136,1,138,1,140,1,142,1]},{"a":24976,"t":"byte","b":[144,1,146,1,148,1,150,1]},{"a":24984,"t":"byte","b":[152,1,154,1,156,1,158,1]},{"a":24992,"t":"byte","b":[160,1,162,1,164,1,166,1]},{"a":25000,"t":"byte","b":[168,1,170,1,172,1,174,1]},{"a":25008,"t":"byte","b":[176,1,178,1,180,1,182,1]},{"a":25016,"t":"byte","b":[184,1,186,1,188,1,190,1]},{"a":25024,"t":"byte","b":[192,1,194,1,196,1,198,1]},{"a":25032,"t":"byte","b":[200,1,202,1,204,1,206,1]},{"a":25040,"t":"byte","b":[208,1,210,1,212,1,214,1]},{"a":25048,"t":"byte","b":[216,1,218,1,220,1,222,1]},{"a":25056,"t":"byte","b":[224,1,226,1,228,1,230,1]},{"a":25064,"t":"byte","b":[232,1,234,1,236,1,238,1]},{"a":25072,"t":"byte","b":[240,1,242,1,244,1,246,1]},{"a":25080,"t":"byte","b":[248,1,250,1,252,1,254,1]},{"a":25088,"l":"bit_reverse_table","c":"Bit-reversal table, 256 bytes: byte L is L with its eight bits in the opposite order, so offset $01 holds $80 and offset $0F holds $F0. It arrives on the tape already filled; the loop that makes it, $EBF0-$EC17 (eight SLA C, RR A pairs for each L), is part of the mastering routine at $EB9C. Three places read it. The mirrored sprite loops at $B748 and $B760 keep $62 in D' and fetch both bytes of every sprite row through it, which draws the sprite flipped left to right; the second of them then shifts each reversed byte through a sprite_shift page. The halt screen keeps $62 in B ($D08A) and, for each of the eight pixel rows at $5002-$5702, copies 14 bytes (columns 2-15) to columns 29 down to 16, each byte reversed through this table and rotated left one bit through the carry ($D092-$D09B).","t":"byte","b":[0,128,64,192,32,160,96,224]},{"a":25096,"t":"byte","b":[16,144,80,208,48,176,112,240]},{"a":25104,"t":"byte","b":[8,136,72,200,40,168,104,232]},{"a":25112,"t":"byte","b":[24,152,88,216,56,184,120,248]},{"a":25120,"t":"byte","b":[4,132,68,196,36,164,100,228]},{"a":25128,"t":"byte","b":[20,148,84,212,52,180,116,244]},{"a":25136,"t":"byte","b":[12,140,76,204,44,172,108,236]},{"a":25144,"t":"byte","b":[28,156,92,220,60,188,124,252]},{"a":25152,"t":"byte","b":[2,130,66,194,34,162,98,226]},{"a":25160,"t":"byte","b":[18,146,82,210,50,178,114,242]},{"a":25168,"t":"byte","b":[10,138,74,202,42,170,106,234]},{"a":25176,"t":"byte","b":[26,154,90,218,58,186,122,250]},{"a":25184,"t":"byte","b":[6,134,70,198,38,166,102,230]},{"a":25192,"t":"byte","b":[22,150,86,214,54,182,118,246]},{"a":25200,"t":"byte","b":[14,142,78,206,46,174,110,238]},{"a":25208,"t":"byte","b":[30,158,94,222,62,190,126,254]},{"a":25216,"t":"byte","b":[1,129,65,193,33,161,97,225]},{"a":25224,"t":"byte","b":[17,145,81,209,49,177,113,241]},{"a":25232,"t":"byte","b":[9,137,73,201,41,169,105,233]},{"a":25240,"t":"byte","b":[25,153,89,217,57,185,121,249]},{"a":25248,"t":"byte","b":[5,133,69,197,37,165,101,229]},{"a":25256,"t":"byte","b":[21,149,85,213,53,181,117,245]},{"a":25264,"t":"byte","b":[13,141,77,205,45,173,109,237]},{"a":25272,"t":"byte","b":[29,157,93,221,61,189,125,253]},{"a":25280,"t":"byte","b":[3,131,67,195,35,163,99,227]},{"a":25288,"t":"byte","b":[19,147,83,211,51,179,115,243]},{"a":25296,"t":"byte","b":[11,139,75,203,43,171,107,235]},{"a":25304,"t":"byte","b":[27,155,91,219,59,187,123,251]},{"a":25312,"t":"byte","b":[7,135,71,199,39,167,103,231]},{"a":25320,"t":"byte","b":[23,151,87,215,55,183,119,247]},{"a":25328,"t":"byte","b":[15,143,79,207,47,175,111,239]},{"a":25336,"t":"byte","b":[31,159,95,223,63,191,127,255]},{"a":25344,"l":"perspective_table","c":"Perspective curve, 128 bytes, indexed by height/2: the first of three tables that share page $63. $80EB takes a height in A, loads entry A>>1 into B and has $811E multiply each of four projected coordinates by (128+B)/128, so an entry is the extra magnification, in 128ths, of anything at that height above the board. The entries never fall as the index grows: 0 at height 0, $40 at height $80, $80 at height $C0 and $FA at height $FE. They stay within 1.2 of 128*i/(192-i), which makes the magnification about 384/(384-height), as seen from 384 units above the board; the exact rule that produced the bytes is not established. $80EB has two callers, both in $81DB, which calls it with the bottom height of the item it is drawing (unless that is 0) and then with the top height; $8584-$858D reads the table the same way to scale the constant 10.","t":"byte","b":[0,1,1,2,3,3,4,5]},{"a":25352,"t":"byte","b":[5,6,7,8,8,9,10,11]},{"a":25360,"t":"byte","b":[12,12,13,14,15,16,16,17]},{"a":25368,"t":"byte","b":[18,19,20,21,22,23,24,25]},{"a":25376,"t":"byte","b":[26,26,27,28,29,30,32,33]},{"a":25384,"t":"byte","b":[34,35,36,37,38,39,40,41]},{"a":25392,"t":"byte","b":[43,44,45,46,48,49,50,51]},{"a":25400,"t":"byte","b":[53,54,55,57,58,60,61,63]},{"a":25408,"t":"byte","b":[64,66,67,69,70,72,73,75]},{"a":25416,"t":"byte","b":[77,79,80,82,84,86,88,90]},{"a":25424,"t":"byte","b":[92,93,95,98,100,102,104,106]},{"a":25432,"t":"byte","b":[108,111,113,115,118,120,123,125]},{"a":25440,"t":"byte","b":[128,131,133,136,139,142,145,148]},{"a":25448,"t":"byte","b":[151,154,157,161,164,168,171,175]},{"a":25456,"t":"byte","b":[179,182,186,191,195,199,203,208]},{"a":25464,"t":"byte","b":[213,218,223,228,233,238,244,250]},{"a":25472,"l":"slope_cosine_table","c":"Sixty-four bytes: entry i is 256/sqrt(1+(i/64)^2) rounded down and held to $FF, that is 256 times the cosine of the angle whose tangent is i/64. It runs from $FF at i=0 to $B6 at i=63. Read at $AA8B and $AAC7, in the routine at $A9A2 that $A926 calls while it turns the worm's speed and heading into velocities. Both reads use offset $80 + (t>>2) on page $63, where t is the low byte of the slope word the caller loaded from ($8005), and each multiplies a magnitude by entry/256. $A9A2 returns before either read when t is 0.","t":"byte","b":[255,255,255,255,255,255,254,254]},{"a":25480,"t":"byte","b":[254,253,252,252,251,250,250,249]},{"a":25488,"t":"byte","b":[248,247,246,245,244,243,242,240]},{"a":25496,"t":"byte","b":[239,238,237,235,234,233,231,230]},{"a":25504,"t":"byte","b":[228,227,226,224,223,221,220,218]},{"a":25512,"t":"byte","b":[217,215,214,212,210,209,207,206]},{"a":25520,"t":"byte","b":[204,203,201,200,198,197,195,194]},{"a":25528,"t":"byte","b":[192,191,189,188,186,185,183,182]},{"a":25536,"l":"sine_table","c":"Quarter sine wave, 64 bytes, read at $A8D6 by the sine routine $A8C4. Of the five instructions that load H with $63 ($80EB, $8584, $A8C4, $AA89, $AAC5) it is the one whose offset runs from $C0 up. $A8C4 takes an angle in A with 256 steps to the circle, folds it into the first quadrant (index A AND $3F, or 63 minus that when bit 6 of A is set), returns the entry in A and leaves bit 7 of the angle, the sign, in the carry of AF'. Entry 0 is 0 and the rest climb to $FF, within 1.1 of 255*sin((i+0.5)*90/64 degrees); the exact rule that produced the bytes is not established. $A8C4 has 16 callers; the cosine is taken by adding $40 to the angle first, as at $A928.","t":"byte","b":[0,9,15,21,28,34,40,46]},{"a":25544,"t":"byte","b":[52,58,64,71,77,82,88,94]},{"a":25552,"t":"byte","b":[100,106,111,117,122,128,133,138]},{"a":25560,"t":"byte","b":[144,149,154,159,164,169,173,178]},{"a":25568,"t":"byte","b":[182,187,191,195,199,203,207,210]},{"a":25576,"t":"byte","b":[214,217,220,223,226,229,232,234]},{"a":25584,"t":"byte","b":[237,239,241,243,245,247,248,249]},{"a":25592,"t":"byte","b":[251,252,253,253,254,255,255,255]},{"a":25600,"l":"cell_grid_template","c":"Starting contents of cell_grid: 25 words, five rows of five, each the address of a cell record or 0. The LDIR at $7617-$7620 copies these 50 bytes to cell_grid when a game starts, and no other instruction names $6400. The centre word, at $6418, is cell_64ae, the cell the worm starts in; 16 of the 25 words hold a cell address and 9 are 0. The first word of the last row, at $6428, is cell_7382, the same cell as the word after it. The links in the cell records put cell_73ea there instead (it is the west link of cell_7382 and the south link of cell_73cc). That corner of the grid is outside the nine cells drawn, and the first time the grid moves the word is either dropped or rebuilt from the links.","t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":25602,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":25604,"t":"addr","b":[155,106],"oa":27291,"o":"cell_6a9b"},{"a":25606,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":25608,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":25610,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":25612,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":25614,"t":"addr","b":[151,100],"oa":25751,"o":"cell_6497"},{"a":25616,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":25618,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":25620,"t":"addr","b":[153,115],"oa":29593,"o":"cell_7399"},{"a":25622,"t":"addr","b":[70,115],"oa":29510,"o":"cell_7346"},{"a":25624,"t":"addr","b":[174,100],"oa":25774,"o":"cell_64ae"},{"a":25626,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":25628,"t":"addr","b":[36,101],"oa":25892,"o":"cell_6524"},{"a":25630,"t":"addr","b":[204,115],"oa":29644,"o":"cell_73cc"},{"a":25632,"t":"addr","b":[100,115],"oa":29540,"o":"cell_7364"},{"a":25634,"t":"addr","b":[100,100],"oa":25700,"o":"cell_6464"},{"a":25636,"t":"addr","b":[204,100],"oa":25804,"o":"cell_64cc"},{"a":25638,"t":"addr","b":[241,100],"oa":25841,"o":"cell_64f1"},{"a":25640,"t":"addr","b":[130,115],"oa":29570,"o":"cell_7382"},{"a":25642,"t":"addr","b":[130,115],"oa":29570,"o":"cell_7382"},{"a":25644,"t":"addr","b":[75,101],"oa":25931,"o":"cell_654b"},{"a":25646,"t":"addr","b":[91,101],"oa":25947,"o":"cell_655b"},{"a":25648,"t":"addr","b":[121,101],"oa":25977,"o":"cell_6579"},{"a":25650,"l":"cell_grid","c":"The cell grid: 25 words, five rows of five, each the address of a cell record or 0 where the board has no cell. The entry for row r, column c is at $6432 + 10*r + 2*c; rows run north to south, columns west to east, and the centre entry at $644A (current_cell) is the cell the worm is in. A game start fills it from cell_grid_template. When the worm crosses a cell edge, $9F92 (east), $A035 (west), $A1D7 (north) or $A275 (south) slides the whole grid one column or row the other way with LDIR or LDDR, fills the row or column that opens up from the link words of the cells next to it, and has $A0EB and $A313 follow links again along the outer columns and rows. $ADD2-$AE3B passes the nine entries round the centre to $AEF9 for drawing; $A192 searches all 25 for a cell address and returns its column and row; $DF9F fetches the entry for a column and row; $D551 scans all 25 for blocks of type $E8-$EB; the insert map at $CE2E reads them from the last entry backwards.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[40850]},{"a":25652,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":25654,"t":"addr","b":[155,106],"oa":27291,"o":"cell_6a9b"},{"a":25656,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":25658,"t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[41013]},{"a":25660,"t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[40856]},{"a":25662,"t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[44558]},{"a":25664,"t":"addr","b":[151,100],"oa":25751,"o":"cell_6497","x":[44510]},{"a":25666,"t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[44570]},{"a":25668,"t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[41019]},{"a":25670,"t":"addr","b":[153,115],"oa":29593,"o":"cell_7399","x":[40862]},{"a":25672,"t":"addr","b":[70,115],"oa":29510,"o":"cell_7346","x":[44522]},{"a":25674,"l":"current_cell","c":"Centre entry (row 2, column 2) of cell_grid: the address of the cell the worm is in. $ADD2 takes it first when the nine cells round the worm are listed for drawing; $CE1D compares it with the copy at $CE06 to decide whether the insert map needs redrawing; $A3C0 tests its high byte at $644B, and when that is 0 the worm has moved onto a square with no cell: $80 is added to the heading at $8001 to turn it round and the sparky count at $805D drops by one, stopping at 0. The 12 words after it are the rest of cell_grid: columns 3 and 4 of row 2, then rows 3 and 4.","t":"addr","b":[174,100],"oa":25774,"o":"cell_64ae","x":[44498,52765]},{"a":25676,"t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[44534]},{"a":25678,"t":"addr","b":[36,101],"oa":25892,"o":"cell_6524","x":[41025]},{"a":25680,"t":"addr","b":[204,115],"oa":29644,"o":"cell_73cc","x":[40868]},{"a":25682,"t":"addr","b":[100,115],"oa":29540,"o":"cell_7364","x":[44582]},{"a":25684,"t":"addr","b":[100,100],"oa":25700,"o":"cell_6464","x":[44546]},{"a":25686,"t":"addr","b":[204,100],"oa":25804,"o":"cell_64cc","x":[44594]},{"a":25688,"t":"addr","b":[241,100],"oa":25841,"o":"cell_64f1","x":[41031]},{"a":25690,"t":"addr","b":[234,115],"oa":29674,"o":"cell_73ea","x":[40874]},{"a":25692,"t":"addr","b":[130,115],"oa":29570,"o":"cell_7382"},{"a":25694,"t":"addr","b":[75,101],"oa":25931,"o":"cell_654b"},{"a":25696,"t":"addr","b":[91,101],"oa":25947,"o":"cell_655b"},{"a":25698,"t":"addr","b":[121,101],"oa":25977,"o":"cell_6579","x":[41037]},{"a":25700,"l":"cell_6464","c":"First in memory of the board's 129 cell records, which run from $6464 to $7579 and are followed by board_end. A cell is a 256 by 256 square of the circuit board. Its record is four link words, the addresses of the cells to the east, north, west and south in that order (0 for none), then a list of 7-byte items closed by a 0 byte (see cell_6464_items). East is +x, right on the screen; south is +y, down the screen. The grid code at $9F92-$A3B2 follows the links, as do the object code at $DFF7-$E0D1 and the insert map at $CE61. Counting them as the game-start loop at $759F walks them (8 bytes of links, 7 an item, a 0 ends a list) gives 129 cells and 459 items. In the comments on these records a cell's place is counted in cells from the start cell cell_64ae along the links, leaving out the two links that do not fit a flat map (cell_670e east to cell_7571, cell_68eb east to cell_6c25, and their return links). This cell is 1 south of the start cell. Links: east cell_64cc, north cell_64ae, west cell_7364, south cell_654b. It holds 6 items (6 blocks).","t":"addr","b":[204,100],"oa":25804,"o":"cell_64cc","x":[25634,25684,25780,25808,25933,29540]},{"a":25702,"t":"addr","b":[174,100],"oa":25774,"o":"cell_64ae"},{"a":25704,"t":"addr","b":[100,115],"oa":29540,"o":"cell_7364"},{"a":25706,"t":"addr","b":[75,101],"oa":25931,"o":"cell_654b"},{"a":25708,"l":"cell_6464_items","c":"Item list of cell_6464: six items and the 0 that ends the list at $6496. Every item on the board is 7 bytes: +0 top height, +1 bottom height, +2 x, +3 x size, +4 y, +5 y size, +6 type. x and y are 0-255 inside the cell and a size may carry the item past the cell's edge; +0 is never 0, because a 0 there ends the list. $AF73 reads the seven bytes in that order into a 15-byte display record and gives up early when +1 is $FF or the item lies wholly outside the 256 by 128 window round the worm. Bits 7-6 of the type give the shape: $C0 a block, $80 a ramp along x, $40 a ramp along y, $00 a wedge, a block cut along a diagonal; in the ramps, none of which has bit 5 set on this board, bit 4 says which end is high, and in the wedges bits 5-4 say which corner is kept. Bits 1-0 pick one of four 8-byte shading sets at $80CB ($825F). Block types with bit 5 set are picked out by value at $89BF-$8A0F: on this board $E0 (the sprites from $CC0B and $CC6B are drawn on its top), $E1 (drawn as a pyramid), $E2 (its own shading, $89A6), $E3 ($8833), $E8-$ED (shading $FFAA; $E8-$EB are also the blocks $D55A picks to start a train of objects from), $F4 ($874C), $F5 (not drawn), $F6 ($BB06) and $F7. Type $F7 with $0C at +5 is a spindle: $75BE sets its +1 to its +0 less one when a game starts, $A5B3 sets +1 to $FF when the worm touches it, and bit 0 of +0 decides whether its four-frame sprite runs forwards or backwards ($8611). Type $F7 with anything else at +5 is a handler record, never drawn: +4 and +5 hold the address of a routine that $AF49 calls just before it lists the item after the record. Here: 1: block, x $72-$A2, y $40-$70, height $00-$30, type $C5. 2: block, x $72-$A2, y $40-$70, height $30-$70, type $E1. 3: block, x $A2-$150, y $50-$60, height $00-$30, type $E2. 4: block, x $82-$92, y $70-$150, height $00-$30, type $E2. 5: block, x $82-$92, y $10-$40, height $00-$30, type $E2. 6: block, x $00-$72, y $50-$60, height $00-$30, type $E2.","t":"byte","b":[48,0,114,48,64,48,197,112]},{"a":25716,"t":"byte","b":[48,114,48,64,48,225,48,0]},{"a":25724,"t":"byte","b":[162,174,80,16,226,48,0,130]},{"a":25732,"t":"byte","b":[16,112,224,226,48,0,130,16]},{"a":25740,"t":"byte","b":[16,48,226,48,0,0,114,80]},{"a":25748,"t":"byte","b":[16,226,0]},{"a":25751,"l":"cell_6497","c":"Board cell 1 north of the start cell (cell_64ae): record 2 of 129. Links: east none, north cell_6a9b, west none, south cell_64ae. It holds 2 items (2 blocks), listed at cell_6497_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[25614,25664,25776,27297]},{"a":25753,"t":"addr","b":[155,106],"oa":27291,"o":"cell_6a9b"},{"a":25755,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":25757,"t":"addr","b":[174,100],"oa":25774,"o":"cell_64ae"},{"a":25759,"l":"cell_6497_items","c":"Item list of cell_6497: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $64AD. 1: block, x $0A-$49, y $0A-$5A, height $00-$28, type $E0. 2: block, x $82-$92, y $30-$120, height $00-$30, type $E2.","t":"byte","b":[40,0,10,63,10,80,224,48]},{"a":25767,"t":"byte","b":[0,130,16,48,240,226,0]},{"a":25774,"l":"cell_64ae","c":"Board cell 3 of 129, the start cell. Links: east none, north cell_6497, west cell_7346, south cell_6464. It holds 3 items (2 blocks, 1 spindle), listed at cell_64ae_items. The worm starts here, at x 8, y 5: $75FE-$7605 put $08 and $05 in the high bytes of the position words at $7FF4 and $7FF6, and this cell is the centre word of cell_grid_template.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[25624,25674,25702,25757,29510]},{"a":25776,"t":"addr","b":[151,100],"oa":25751,"o":"cell_6497"},{"a":25778,"t":"addr","b":[70,115],"oa":29510,"o":"cell_7346"},{"a":25780,"t":"addr","b":[100,100],"oa":25700,"o":"cell_6464"},{"a":25782,"l":"cell_64ae_items","c":"Item list of cell_64ae: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $64CB. 1: block, x $0A-$3C, y $0A-$3C, height $00-$E0, type $E0. 2: spindle, x $BE-$CA, y $00-$0C, top $03. 3: block, x $82-$92, y $20-$110, height $00-$30, type $E2.","t":"byte","b":[224,0,10,50,10,50,224,3]},{"a":25790,"t":"byte","b":[0,190,12,0,12,247,48,0]},{"a":25798,"t":"byte","b":[130,16,32,240,226,0]},{"a":25804,"l":"cell_64cc","c":"Board cell 1 east and 1 south of the start cell (cell_64ae): record 4 of 129. Links: east cell_64f1, north none, west cell_6464, south cell_655b. It holds 4 items (2 blocks, 2 ramps), listed at cell_64cc_items.","t":"addr","b":[241,100],"oa":25841,"o":"cell_64f1","x":[25636,25686,25700,25845,25949]},{"a":25806,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":25808,"t":"addr","b":[100,100],"oa":25700,"o":"cell_6464"},{"a":25810,"t":"addr","b":[91,101],"oa":25947,"o":"cell_655b"},{"a":25812,"l":"cell_64cc_items","c":"Item list of cell_64cc: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $64F0. 1: block, x $50-$140, y $50-$60, height $00-$30, type $E2. 2: block, x $3D-$10D, y $C0-$F3, height $49-$56, type $CC. 3: ramp, x $3D-$7C, y $F3-$17B, height $56 at y $F3 falling to $00 at y $17B, type $50. 4: ramp, x $F0-$112, y $F0-$166, height $56 at y $F0 rising to $96 at y $166, type $40.","t":"byte","b":[48,0,80,240,80,16,226,86]},{"a":25820,"t":"byte","b":[73,61,208,192,51,204,86,0]},{"a":25828,"t":"byte","b":[61,63,243,136,80,150,86,240]},{"a":25836,"t":"byte","b":[34,240,118,64,0]},{"a":25841,"l":"cell_64f1","c":"Board cell 2 east and 1 south of the start cell (cell_64ae): record 5 of 129. Links: east cell_6534, north cell_6524, west cell_64cc, south cell_6579. It holds 6 items (6 blocks), listed at cell_64f1_items.","t":"addr","b":[52,101],"oa":25908,"o":"cell_6534","x":[25638,25688,25804,25898,25912,25979]},{"a":25843,"t":"addr","b":[36,101],"oa":25892,"o":"cell_6524"},{"a":25845,"t":"addr","b":[204,100],"oa":25804,"o":"cell_64cc"},{"a":25847,"t":"addr","b":[121,101],"oa":25977,"o":"cell_6579"},{"a":25849,"l":"cell_64f1_items","c":"Item list of cell_64f1: 6 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6523. 1: block, x $40-$120, y $50-$60, height $00-$30, type $E2. 2: block, x $0D-$90, y $C0-$F3, height $49-$56, type $D8. 3: block, x $90-$BC, y $C0-$1A0, height $49-$56, type $C0. 4: block, x $A0-$C3, y $12-$71, height $67-$78, type $DC. 5: block, x $A0-$C3, y $71-$A1, height $00-$78, type $C0. 6: block, x $C3-$140, y $71-$A1, height $67-$78, type $C0.","t":"byte","b":[48,0,64,224,80,16,226,86]},{"a":25857,"t":"byte","b":[73,13,131,192,51,216,86,73]},{"a":25865,"t":"byte","b":[144,44,192,224,192,120,103,160]},{"a":25873,"t":"byte","b":[35,18,95,220,120,0,160,35]},{"a":25881,"t":"byte","b":[113,48,192,120,103,195,125,113]},{"a":25889,"t":"byte","b":[48,192,0]},{"a":25892,"l":"cell_6524","c":"Board cell 2 east of the start cell (cell_64ae): record 6 of 129. Links: east none, north none, west none, south cell_64f1. It holds 1 item (1 ramp), listed at cell_6524_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[25628,25678,25843]},{"a":25894,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":25896,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":25898,"t":"addr","b":[241,100],"oa":25841,"o":"cell_64f1"},{"a":25900,"l":"cell_6524_items","c":"Item list of cell_6524: 1 item of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6533. 1: ramp, x $A0-$C3, y $A0-$112, height $00 at y $A0 rising to $78 at y $112, type $40.","t":"byte","b":[120,0,160,35,160,114,64,0]},{"a":25908,"l":"cell_6534","c":"Board cell 3 east and 1 south of the start cell (cell_64ae): record 7 of 129. Links: east none, north none, west cell_64f1, south cell_6597. It holds 2 items (1 block, 1 ramp), listed at cell_6534_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[25841,26009]},{"a":25910,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":25912,"t":"addr","b":[241,100],"oa":25841,"o":"cell_64f1"},{"a":25914,"t":"addr","b":[151,101],"oa":26007,"o":"cell_6597"},{"a":25916,"l":"cell_6534_items","c":"Item list of cell_6534: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $654A. 1: ramp, x $40-$D0, y $71-$A1, height $78 at x $40 falling to $00 at x $D0, type $90. 2: block, x $20-$30, y $50-$140, height $00-$30, type $E2.","t":"byte","b":[120,0,64,144,113,48,144,48]},{"a":25924,"t":"byte","b":[0,32,16,80,240,226,0]},{"a":25931,"l":"cell_654b","c":"Board cell 2 south of the start cell (cell_64ae): record 8 of 129. Links: east cell_655b, north cell_6464, west cell_7382, south cell_65a7. It holds 1 item (1 block), listed at cell_654b_items.","t":"addr","b":[91,101],"oa":25947,"o":"cell_655b","x":[25644,25694,25706,25951,26025,29570]},{"a":25933,"t":"addr","b":[100,100],"oa":25700,"o":"cell_6464"},{"a":25935,"t":"addr","b":[130,115],"oa":29570,"o":"cell_7382"},{"a":25937,"t":"addr","b":[167,101],"oa":26023,"o":"cell_65a7"},{"a":25939,"l":"cell_654b_items","c":"Item list of cell_654b: 1 item of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $655A. 1: block, x $82-$92, y $50-$140, height $00-$30, type $E2.","t":"byte","b":[48,0,130,16,80,240,226,0]},{"a":25947,"l":"cell_655b","c":"Board cell 1 east and 2 south of the start cell (cell_64ae): record 9 of 129. Links: east cell_6579, north cell_64cc, west cell_654b, south cell_65b7. It holds 3 items (3 blocks), listed at cell_655b_items.","t":"addr","b":[121,101],"oa":25977,"o":"cell_6579","x":[25646,25696,25810,25931,25981,26041]},{"a":25949,"t":"addr","b":[204,100],"oa":25804,"o":"cell_64cc"},{"a":25951,"t":"addr","b":[75,101],"oa":25931,"o":"cell_654b"},{"a":25953,"t":"addr","b":[183,101],"oa":26039,"o":"cell_65b7"},{"a":25955,"l":"cell_655b_items","c":"Item list of cell_655b: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6578. 1: block, x $F0-$112, y $66-$B0, height $76-$96, type $DC. 2: block, x $E0-$122, y $B0-$160, height $76-$96, type $D5. 3: block, x $F0-$112, y $A8-$B8, height $00-$76, type $C4.","t":"byte","b":[150,118,240,34,102,74,220,150]},{"a":25963,"t":"byte","b":[118,224,66,176,176,213,118,0]},{"a":25971,"t":"byte","b":[240,34,168,16,196,0]},{"a":25977,"l":"cell_6579","c":"Board cell 2 east and 2 south of the start cell (cell_64ae): record 10 of 129. Links: east cell_6597, north cell_64f1, west cell_655b, south cell_65e3. It holds 3 items (3 blocks), listed at cell_6579_items.","t":"addr","b":[151,101],"oa":26007,"o":"cell_6597","x":[25648,25698,25847,25947,26011,26085]},{"a":25979,"t":"addr","b":[241,100],"oa":25841,"o":"cell_64f1"},{"a":25981,"t":"addr","b":[91,101],"oa":25947,"o":"cell_655b"},{"a":25983,"t":"addr","b":[227,101],"oa":26083,"o":"cell_65e3"},{"a":25985,"l":"cell_6579_items","c":"Item list of cell_6579: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6596. 1: block, x $BC-$E0, y $88-$A0, height $49-$56, type $C8. 2: block, x $C0-$CE, y $88-$A0, height $00-$49, type $C6. 3: block, x $C3-$E0, y $A0-$188, height $49-$56, type $DC.","t":"byte","b":[86,73,188,36,136,24,200,73]},{"a":25993,"t":"byte","b":[0,192,14,136,24,198,86,73]},{"a":26001,"t":"byte","b":[195,29,160,232,220,0]},{"a":26007,"l":"cell_6597","c":"Board cell 3 east and 2 south of the start cell (cell_64ae): record 11 of 129. Links: east none, north cell_6534, west cell_6579, south cell_661d. It holds 1 item (1 block), listed at cell_6597_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[25914,25977,26143]},{"a":26009,"t":"addr","b":[52,101],"oa":25908,"o":"cell_6534"},{"a":26011,"t":"addr","b":[121,101],"oa":25977,"o":"cell_6579"},{"a":26013,"t":"addr","b":[29,102],"oa":26141,"o":"cell_661d"},{"a":26015,"l":"cell_6597_items","c":"Item list of cell_6597: 1 item of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $65A6. 1: block, x $20-$30, y $40-$108, height $00-$30, type $E2.","t":"byte","b":[48,0,32,16,64,200,226,0]},{"a":26023,"l":"cell_65a7","c":"Board cell 3 south of the start cell (cell_64ae): record 12 of 129. Links: east cell_65b7, north cell_654b, west none, south cell_6649. It holds 1 item (1 block), listed at cell_65a7_items.","t":"addr","b":[183,101],"oa":26039,"o":"cell_65b7","x":[25937,26043,26187]},{"a":26025,"t":"addr","b":[75,101],"oa":25931,"o":"cell_654b"},{"a":26027,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":26029,"t":"addr","b":[73,102],"oa":26185,"o":"cell_6649"},{"a":26031,"l":"cell_65a7_items","c":"Item list of cell_65a7: 1 item of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $65B6. 1: block, x $82-$92, y $40-$120, height $00-$30, type $E2.","t":"byte","b":[48,0,130,16,64,224,226,0]},{"a":26039,"l":"cell_65b7","c":"Board cell 1 east and 3 south of the start cell (cell_64ae): record 13 of 129. Links: east cell_65e3, north cell_655b, west cell_65a7, south cell_669f. It holds 5 items (5 blocks), listed at cell_65b7_items.","t":"addr","b":[227,101],"oa":26083,"o":"cell_65e3","x":[25953,26023,26087,26273]},{"a":26041,"t":"addr","b":[91,101],"oa":25947,"o":"cell_655b"},{"a":26043,"t":"addr","b":[167,101],"oa":26023,"o":"cell_65a7"},{"a":26045,"t":"addr","b":[159,102],"oa":26271,"o":"cell_669f"},{"a":26047,"l":"cell_65b7_items","c":"Item list of cell_65b7: 5 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $65E2. 1: block, x $E0-$122, y $70-$B4, height $76-$96, type $DC. 2: block, x $40-$50, y $60-$70, height $30-$76, type $C4. 3: block, x $40-$50, y $60-$158, height $00-$30, type $E2. 4: block, x $E0-$160, y $B4-$C8, height $76-$96, type $CC. 5: block, x $40-$122, y $60-$70, height $76-$97, type $E2.","t":"byte","b":[150,118,224,66,112,68,220,118]},{"a":26055,"t":"byte","b":[48,64,16,96,16,196,48,0]},{"a":26063,"t":"byte","b":[64,16,96,248,226,150,118,224]},{"a":26071,"t":"byte","b":[128,180,20,204,151,118,64,226]},{"a":26079,"t":"byte","b":[96,16,226,0]},{"a":26083,"l":"cell_65e3","c":"Board cell 2 east and 3 south of the start cell (cell_64ae): record 14 of 129. Links: east cell_661d, north cell_6579, west cell_65b7, south cell_66b6. It holds 7 items (5 blocks, 1 wedge, 1 handler record), listed at cell_65e3_items.","t":"addr","b":[29,102],"oa":26141,"o":"cell_661d","x":[25983,26039,26145,26296]},{"a":26085,"t":"addr","b":[121,101],"oa":25977,"o":"cell_6579"},{"a":26087,"t":"addr","b":[183,101],"oa":26039,"o":"cell_65b7"},{"a":26089,"t":"addr","b":[182,102],"oa":26294,"o":"cell_66b6"},{"a":26091,"l":"cell_65e3_items","c":"Item list of cell_65e3: 7 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $661C. The list runs on through the handler word at $6612. 1: block, x $60-$D8, y $B4-$C8, height $76-$96, type $D8. 2: block, x $22-$80, y $60-$70, height $78-$97, type $E2. 3: block, x $80-$95, y $50-$80, height $00-$B0, type $EA. 4: wedge with its square corner to the south-west, x $D8-$108, y $B4-$104, height $70-$96, type $30. 5: block, x $C3-$143, y $88-$A5, height $49-$56, type $C0. 6: handler record ($64 $46 $02 $14), its handler word at $6612. 7: block, x $6C-$94, y $18-$40, height $00-$30, type $F4.","t":"byte","b":[150,118,96,120,180,20,216,151]},{"a":26099,"t":"byte","b":[120,34,94,96,16,226,176,0]},{"a":26107,"t":"byte","b":[128,21,80,48,234,150,112,216]},{"a":26115,"t":"byte","b":[48,180,80,48,86,73,195,128]},{"a":26123,"t":"byte","b":[136,29,192,100,70,2,20]},{"a":26130,"l":"cell_65e3_handler","c":"Handler word of the record at $660E in cell_65e3: the four parameter bytes $64 $46 $02 $14 come before it and the $F7 tag after it. The tape image holds $BD90 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6615, a type $F4 block at x $6C-$94, y $18-$40), with HL pointing at the record. $BD90 takes $02 off that item's top each call until it would fall below $14, sets it to $14 and, because the item is type $F4, writes $BE07 here and a random 5 to 36 into the record's first byte. $BE07 counts that byte down by one a call; when it runs out it adds $02 to the top each call up to $46, and once there, if ($8066) is not 0 and ($7C71) is below $0C, it takes one off ($8066), adds a type $F3 object over the middle of the item and writes $BD90 back. The first byte's value in the image, $64, is replaced before $BE07 ever reads it.","t":"addr","b":[144,189],"oa":48528,"o":"lower_item_handler"},{"a":26132,"l":"cell_65e3_items_2","c":"Item list of cell_65e3, carried on after the handler word at $6612: the $F7 tag that closes the record at $660E, then item 7 and the closing 0 at $661C. The items are described at cell_65e3_items.","t":"byte","b":[247,48,0,108,40,24,40,244]},{"a":26140,"t":"byte","b":[0]},{"a":26141,"l":"cell_661d","c":"Board cell 3 east and 3 south of the start cell (cell_64ae): record 15 of 129. Links: east cell_66c6, north cell_6597, west cell_65e3, south cell_67f8. It holds 5 items (4 blocks, 1 wedge), listed at cell_661d_items.","t":"addr","b":[198,102],"oa":26310,"o":"cell_66c6","x":[26013,26083,26314,26618]},{"a":26143,"t":"addr","b":[151,101],"oa":26007,"o":"cell_6597"},{"a":26145,"t":"addr","b":[227,101],"oa":26083,"o":"cell_65e3"},{"a":26147,"t":"addr","b":[248,103],"oa":26616,"o":"cell_67f8"},{"a":26149,"l":"cell_661d_items","c":"Item list of cell_661d: 5 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6648. 1: wedge with its square corner to the south-east, x $08-$38, y $B4-$104, height $70-$96, type $20. 2: block, x $38-$110, y $B4-$C8, height $76-$96, type $C8. 3: block, x $43-$133, y $88-$9C, height $49-$56, type $D8. 4: block, x $20-$118, y $08-$18, height $00-$30, type $E2. 5: block, x $AA-$BB, y $9C-$12A, height $00-$56, type $C0.","t":"byte","b":[150,112,8,48,180,80,32,150]},{"a":26157,"t":"byte","b":[118,56,216,180,20,200,86,73]},{"a":26165,"t":"byte","b":[67,240,136,20,216,48,0,32]},{"a":26173,"t":"byte","b":[248,8,16,226,86,0,170,17]},{"a":26181,"t":"byte","b":[156,142,192,0]},{"a":26185,"l":"cell_6649","c":"Board cell 4 south of the start cell (cell_64ae): record 16 of 129. Links: east cell_669f, north cell_65a7, west cell_6e0b, south cell_6c58. It holds 11 items (10 blocks, 1 spindle), listed at cell_6649_items.","t":"addr","b":[159,102],"oa":26271,"o":"cell_669f","x":[26029,26275,27738,28171]},{"a":26187,"t":"addr","b":[167,101],"oa":26023,"o":"cell_65a7"},{"a":26189,"t":"addr","b":[11,110],"oa":28171,"o":"cell_6e0b"},{"a":26191,"t":"addr","b":[88,108],"oa":27736,"o":"cell_6c58"},{"a":26193,"l":"cell_6649_items","c":"Item list of cell_6649: 11 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $669E. 1: block, x $50-$92, y $20-$30, height $00-$30, type $E2. 2: block, x $3E-$50, y $11-$3F, height $00-$70, type $EC. 3: block, x $3E-$51, y $49-$77, height $00-$70, type $EC. 4: block, x $51-$150, y $58-$68, height $00-$30, type $E2. 5: spindle, x $D0-$DC, y $5A-$66, top $32. 6: block, x $3E-$50, y $81-$AF, height $00-$70, type $E8. 7: block, x $50-$140, y $90-$A0, height $00-$30, type $E2. 8: block, x $3E-$51, y $B9-$E7, height $00-$70, type $EC. 9: block, x $51-$150, y $C8-$D8, height $00-$30, type $E2. 10: block, x $3E-$51, y $F1-$11F, height $00-$70, type $EC. 11: block, x $51-$93, y $FF-$110, height $00-$30, type $E2.","t":"byte","b":[48,0,80,66,32,16,226,112]},{"a":26201,"t":"byte","b":[0,62,18,17,46,236,112,0]},{"a":26209,"t":"byte","b":[62,19,73,46,236,48,0,81]},{"a":26217,"t":"byte","b":[255,88,16,226,50,0,208,12]},{"a":26225,"t":"byte","b":[90,12,247,112,0,62,18,129]},{"a":26233,"t":"byte","b":[46,232,48,0,80,240,144,16]},{"a":26241,"t":"byte","b":[226,112,0,62,19,185,46,236]},{"a":26249,"t":"byte","b":[48,0,81,255,200,16,226,112]},{"a":26257,"t":"byte","b":[0,62,19,241,46,236,48,0]},{"a":26265,"t":"byte","b":[81,66,255,17,226,0]},{"a":26271,"l":"cell_669f","c":"Board cell 1 east and 4 south of the start cell (cell_64ae): record 17 of 129. Links: east cell_66b6, north cell_65b7, west cell_6649, south cell_6c68. It holds 2 items (2 blocks), listed at cell_669f_items.","t":"addr","b":[182,102],"oa":26294,"o":"cell_66b6","x":[26045,26185,26298,27754]},{"a":26273,"t":"addr","b":[183,101],"oa":26039,"o":"cell_65b7"},{"a":26275,"t":"addr","b":[73,102],"oa":26185,"o":"cell_6649"},{"a":26277,"t":"addr","b":[104,108],"oa":27752,"o":"cell_6c68"},{"a":26279,"l":"cell_669f_items","c":"Item list of cell_669f: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $66B5. 1: block, x $40-$130, y $90-$A0, height $00-$30, type $E2. 2: block, x $50-$60, y $C8-$150, height $00-$30, type $E2.","t":"byte","b":[48,0,64,240,144,16,226,48]},{"a":26287,"t":"byte","b":[0,80,16,200,136,226,0]},{"a":26294,"l":"cell_66b6","c":"Board cell 2 east and 4 south of the start cell (cell_64ae): record 18 of 129. Links: east cell_67f8, north cell_65e3, west cell_669f, south cell_6c7f. It holds 1 item (1 block), listed at cell_66b6_items.","t":"addr","b":[248,103],"oa":26616,"o":"cell_67f8","x":[26089,26271,26620,27777]},{"a":26296,"t":"addr","b":[227,101],"oa":26083,"o":"cell_65e3"},{"a":26298,"t":"addr","b":[159,102],"oa":26271,"o":"cell_669f"},{"a":26300,"t":"addr","b":[127,108],"oa":27775,"o":"cell_6c7f"},{"a":26302,"l":"cell_66b6_items","c":"Item list of cell_66b6: 1 item of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $66C5. 1: block, x $30-$120, y $90-$A0, height $00-$30, type $E2.","t":"byte","b":[48,0,48,240,144,16,226,0]},{"a":26310,"l":"cell_66c6","c":"Board cell 4 east and 3 south of the start cell (cell_64ae): record 19 of 129. Links: east cell_670e, north none, west cell_661d, south cell_6824. It holds 9 items (6 blocks, 2 ramps, 1 spindle), listed at cell_66c6_items.","t":"addr","b":[14,103],"oa":26382,"o":"cell_670e","x":[26141,26386,26662]},{"a":26312,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":26314,"t":"addr","b":[29,102],"oa":26141,"o":"cell_661d"},{"a":26316,"t":"addr","b":[36,104],"oa":26660,"o":"cell_6824"},{"a":26318,"l":"cell_66c6_items","c":"Item list of cell_66c6: 9 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $670D. 1: block, x $00-$E0, y $9C-$B4, height $00-$B6, type $C0. 2: block, x $00-$E0, y $CD-$E5, height $00-$B6, type $C0. 3: block, x $18-$110, y $08-$18, height $00-$30, type $E2. 4: block, x $33-$B3, y $88-$9C, height $00-$56, type $C0. 5: block, x $B3-$110, y $88-$9C, height $49-$56, type $C8. 6: ramp, x $10-$84, y $B4-$CD, height $96 at x $10 falling to $00 at x $84, type $94. 7: spindle, x $84-$90, y $BD-$C9, top $02. 8: ramp, x $90-$E0, y $B4-$CD, height $00 at x $90 rising to $B6 at x $E0, type $84. 9: block, x $C8-$E0, y $E5-$118, height $76-$96, type $DC.","t":"byte","b":[182,0,0,224,156,24,192,182]},{"a":26326,"t":"byte","b":[0,0,224,205,24,192,48,0]},{"a":26334,"t":"byte","b":[24,248,8,16,226,86,0,51]},{"a":26342,"t":"byte","b":[128,136,20,192,86,73,179,93]},{"a":26350,"t":"byte","b":[136,20,200,150,0,16,116,180]},{"a":26358,"t":"byte","b":[25,148,2,0,132,12,189,12]},{"a":26366,"t":"byte","b":[247,182,0,144,80,180,25,132]},{"a":26374,"t":"byte","b":[150,118,200,24,229,51,220,0]},{"a":26382,"l":"cell_670e","c":"Board cell 5 east and 3 south of the start cell (cell_64ae): record 20 of 129. Links: east cell_7571, north cell_672c, west cell_66c6, south cell_6842. It holds 3 items (3 blocks), listed at cell_670e_items. Its east link does not fit a flat map: cell_7571 lies 8 west and 1 north of the start cell. The board is joined to itself there.","t":"addr","b":[113,117],"oa":30065,"o":"cell_7571","x":[26310,26418,26692,30069]},{"a":26384,"t":"addr","b":[44,103],"oa":26412,"o":"cell_672c"},{"a":26386,"t":"addr","b":[198,102],"oa":26310,"o":"cell_66c6"},{"a":26388,"t":"addr","b":[66,104],"oa":26690,"o":"cell_6842"},{"a":26390,"l":"cell_670e_items","c":"Item list of cell_670e: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $672B. 1: block, x $10-$40, y $08-$18, height $00-$30, type $E2. 2: block, x $F0-$100, y $20-$110, height $00-$30, type $E2. 3: block, x $10-$74, y $88-$A5, height $00-$56, type $C0.","t":"byte","b":[48,0,16,48,8,16,226,48]},{"a":26398,"t":"byte","b":[0,240,16,32,240,226,86,0]},{"a":26406,"t":"byte","b":[16,100,136,29,192,0]},{"a":26412,"l":"cell_672c","c":"Board cell 5 east and 2 south of the start cell (cell_64ae): record 21 of 129. Links: east none, north cell_6758, west none, south cell_670e. It holds 5 items (4 blocks, 1 ramp), listed at cell_672c_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[26384,26462]},{"a":26414,"t":"addr","b":[88,103],"oa":26456,"o":"cell_6758"},{"a":26416,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":26418,"t":"addr","b":[14,103],"oa":26382,"o":"cell_670e"},{"a":26420,"l":"cell_672c_items","c":"Item list of cell_672c: 5 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6757. 1: block, x $40-$50, y $E0-$118, height $00-$30, type $E2. 2: block, x $40-$50, y $12-$E0, height $00-$30, type $E2. 3: block, x $F0-$100, y $30-$120, height $00-$30, type $E2. 4: block, x $58-$74, y $AA-$188, height $49-$56, type $C0. 5: ramp, x $50-$F0, y $CC-$EC, height $00 at y $CC rising to $30 at y $EC, type $44.","t":"byte","b":[48,0,64,16,224,56,226,48]},{"a":26428,"t":"byte","b":[0,64,16,18,206,226,48,0]},{"a":26436,"t":"byte","b":[240,16,48,240,226,86,73,88]},{"a":26444,"t":"byte","b":[28,170,222,192,48,0,80,160]},{"a":26452,"t":"byte","b":[204,32,68,0]},{"a":26456,"l":"cell_6758","c":"Board cell 5 east and 1 south of the start cell (cell_64ae): record 22 of 129. Links: east none, north cell_6784, west none, south cell_672c. It holds 5 items (2 blocks, 3 ramps), listed at cell_6758_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[26414,26506]},{"a":26458,"t":"addr","b":[132,103],"oa":26500,"o":"cell_6784"},{"a":26460,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":26462,"t":"addr","b":[44,103],"oa":26412,"o":"cell_672c"},{"a":26464,"l":"cell_6758_items","c":"Item list of cell_6758: 5 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6783. 1: block, x $40-$50, y $22-$112, height $00-$30, type $E2. 2: block, x $F0-$100, y $40-$130, height $00-$30, type $E2. 3: ramp, x $50-$F0, y $12-$32, height $00 at y $12 rising to $30 at y $32, type $44. 4: ramp, x $50-$F0, y $66-$8B, height $00 at y $66 rising to $30 at y $8B, type $44. 5: ramp, x $50-$F0, y $AA-$CB, height $00 at y $AA rising to $30 at y $CB, type $44.","t":"byte","b":[48,0,64,16,34,240,226,48]},{"a":26472,"t":"byte","b":[0,240,16,64,240,226,48,0]},{"a":26480,"t":"byte","b":[80,160,18,32,68,48,0,80]},{"a":26488,"t":"byte","b":[160,102,37,68,48,0,80,160]},{"a":26496,"t":"byte","b":[170,33,68,0]},{"a":26500,"l":"cell_6784","c":"Board cell 5 east of the start cell (cell_64ae): record 23 of 129. Links: east none, north cell_67b0, west none, south cell_6758. It holds 5 items (5 blocks), listed at cell_6784_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[26458,26550]},{"a":26502,"t":"addr","b":[176,103],"oa":26544,"o":"cell_67b0"},{"a":26504,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":26506,"t":"addr","b":[88,103],"oa":26456,"o":"cell_6758"},{"a":26508,"l":"cell_6784_items","c":"Item list of cell_6784: 5 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $67AF. 1: block, x $40-$50, y $72-$122, height $00-$30, type $E2. 2: block, x $00-$50, y $62-$72, height $00-$30, type $E2. 3: block, x $00-$10, y $00-$62, height $00-$30, type $E2. 4: block, x $F0-$100, y $50-$140, height $00-$30, type $E2. 5: block, x $95-$B5, y $40-$52, height $00-$80, type $EC.","t":"byte","b":[48,0,64,16,114,176,226,48]},{"a":26516,"t":"byte","b":[0,0,80,98,16,226,48,0]},{"a":26524,"t":"byte","b":[0,16,0,98,226,48,0,240]},{"a":26532,"t":"byte","b":[16,80,240,226,128,0,149,32]},{"a":26540,"t":"byte","b":[64,18,236,0]},{"a":26544,"l":"cell_67b0","c":"Board cell 5 east and 1 north of the start cell (cell_64ae): record 24 of 129. Links: east none, north cell_6883, west none, south cell_6784. It holds 9 items (7 blocks, 2 spindles), listed at cell_67b0_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[26502,26761]},{"a":26546,"t":"addr","b":[131,104],"oa":26755,"o":"cell_6883"},{"a":26548,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":26550,"t":"addr","b":[132,103],"oa":26500,"o":"cell_6784"},{"a":26552,"l":"cell_67b0_items","c":"Item list of cell_67b0: 9 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $67F7. 1: block, x $00-$10, y $72-$100, height $00-$30, type $E2. 2: block, x $00-$F0, y $62-$72, height $00-$30, type $E2. 3: block, x $F0-$100, y $62-$150, height $00-$30, type $E2. 4: spindle, x $90-$9C, y $90-$9C, top $02. 5: block, x $40-$53, y $A0-$C0, height $00-$80, type $E8. 6: block, x $53-$AD, y $A8-$B8, height $00-$30, type $E2. 7: block, x $9D-$AD, y $B8-$140, height $00-$30, type $E2. 8: block, x $2A-$66, y $30-$46, height $00-$60, type $EC. 9: spindle, x $10-$1C, y $20-$2C, top $03.","t":"byte","b":[48,0,0,16,114,142,226,48]},{"a":26560,"t":"byte","b":[0,0,240,98,16,226,48,0]},{"a":26568,"t":"byte","b":[240,16,98,238,226,2,0,144]},{"a":26576,"t":"byte","b":[12,144,12,247,128,0,64,19]},{"a":26584,"t":"byte","b":[160,32,232,48,0,83,90,168]},{"a":26592,"t":"byte","b":[16,226,48,0,157,16,184,136]},{"a":26600,"t":"byte","b":[226,96,0,42,60,48,22,236]},{"a":26608,"t":"byte","b":[3,0,16,12,32,12,247,0]},{"a":26616,"l":"cell_67f8","c":"Board cell 3 east and 4 south of the start cell (cell_64ae): record 25 of 129. Links: east cell_6824, north cell_661d, west cell_66b6, south cell_6cb9. It holds 5 items (5 blocks), listed at cell_67f8_items.","t":"addr","b":[36,104],"oa":26660,"o":"cell_6824","x":[26147,26294,26664,27835]},{"a":26618,"t":"addr","b":[29,102],"oa":26141,"o":"cell_661d"},{"a":26620,"t":"addr","b":[182,102],"oa":26294,"o":"cell_66b6"},{"a":26622,"t":"addr","b":[185,108],"oa":27833,"o":"cell_6cb9"},{"a":26624,"l":"cell_67f8_items","c":"Item list of cell_67f8: 5 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6823. 1: block, x $20-$32, y $81-$AF, height $00-$70, type $ED. 2: block, x $32-$82, y $88-$A8, height $00-$90, type $E0. 3: block, x $82-$94, y $81-$AF, height $00-$70, type $ED. 4: block, x $94-$140, y $90-$A0, height $00-$30, type $E2. 5: block, x $AA-$BB, y $2A-$120, height $49-$56, type $D0.","t":"byte","b":[112,0,32,18,129,46,237,144]},{"a":26632,"t":"byte","b":[0,50,80,136,32,224,112,0]},{"a":26640,"t":"byte","b":[130,18,129,46,237,48,0,148]},{"a":26648,"t":"byte","b":[172,144,16,226,86,73,170,17]},{"a":26656,"t":"byte","b":[42,246,208,0]},{"a":26660,"l":"cell_6824","c":"Board cell 4 east and 4 south of the start cell (cell_64ae): record 26 of 129. Links: east cell_6842, north cell_66c6, west cell_67f8, south cell_6cde. It holds 3 items (3 blocks), listed at cell_6824_items.","t":"addr","b":[66,104],"oa":26690,"o":"cell_6842","x":[26316,26616,26694,27872]},{"a":26662,"t":"addr","b":[198,102],"oa":26310,"o":"cell_66c6"},{"a":26664,"t":"addr","b":[248,103],"oa":26616,"o":"cell_67f8"},{"a":26666,"t":"addr","b":[222,108],"oa":27870,"o":"cell_6cde"},{"a":26668,"l":"cell_6824_items","c":"Item list of cell_6824: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6841. 1: block, x $40-$130, y $90-$A0, height $00-$30, type $E2. 2: block, x $C8-$E0, y $18-$110, height $76-$96, type $DC. 3: block, x $60-$70, y $A0-$110, height $00-$2E, type $D0.","t":"byte","b":[48,0,64,240,144,16,226,150]},{"a":26676,"t":"byte","b":[118,200,24,24,248,220,46,0]},{"a":26684,"t":"byte","b":[96,16,160,112,208,0]},{"a":26690,"l":"cell_6842","c":"Board cell 5 east and 4 south of the start cell (cell_64ae): record 27 of 129. Links: east none, north cell_670e, west cell_6824, south cell_6d11. It holds 8 items (6 blocks, 2 spindles), listed at cell_6842_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[26388,26660,27923]},{"a":26692,"t":"addr","b":[14,103],"oa":26382,"o":"cell_670e"},{"a":26694,"t":"addr","b":[36,104],"oa":26660,"o":"cell_6824"},{"a":26696,"t":"addr","b":[17,109],"oa":27921,"o":"cell_6d11"},{"a":26698,"l":"cell_6842_items","c":"Item list of cell_6842: 8 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6882. 1: block, x $30-$F0, y $90-$A0, height $00-$30, type $E2. 2: block, x $F0-$100, y $10-$A0, height $00-$30, type $E2. 3: spindle, x $77-$83, y $77-$83, top $01. 4: block, x $20-$30, y $A0-$140, height $00-$2E, type $D0. 5: spindle, x $77-$83, y $C0-$CC, top $02. 6: block, x $E5-$100, y $C0-$F8, height $00-$60, type $EC. 7: block, x $55-$E5, y $D4-$E4, height $00-$30, type $E2. 8: block, x $55-$65, y $E4-$130, height $00-$30, type $E2.","t":"byte","b":[48,0,48,192,144,16,226,48]},{"a":26706,"t":"byte","b":[0,240,16,16,144,226,1,0]},{"a":26714,"t":"byte","b":[119,12,119,12,247,46,0,32]},{"a":26722,"t":"byte","b":[16,160,160,208,2,0,119,12]},{"a":26730,"t":"byte","b":[192,12,247,96,0,229,27,192]},{"a":26738,"t":"byte","b":[56,236,48,0,85,144,212,16]},{"a":26746,"t":"byte","b":[226,48,0,85,16,228,76,226]},{"a":26754,"t":"byte","b":[0]},{"a":26755,"l":"cell_6883","c":"Board cell 5 east and 2 north of the start cell (cell_64ae): record 28 of 129. Links: east cell_68a1, north none, west none, south cell_67b0. It holds 3 items (3 blocks), listed at cell_6883_items.","t":"addr","b":[161,104],"oa":26785,"o":"cell_68a1","x":[26546,26789]},{"a":26757,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":26759,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":26761,"t":"addr","b":[176,103],"oa":26544,"o":"cell_67b0"},{"a":26763,"l":"cell_6883_items","c":"Item list of cell_6883: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $68A0. 1: block, x $40-$50, y $60-$130, height $00-$30, type $E2. 2: block, x $40-$D0, y $50-$60, height $00-$30, type $E2. 3: block, x $D0-$E5, y $3A-$76, height $00-$60, type $EA.","t":"byte","b":[48,0,64,16,96,208,226,48]},{"a":26771,"t":"byte","b":[0,64,144,80,16,226,96,0]},{"a":26779,"t":"byte","b":[208,21,58,60,234,0]},{"a":26785,"l":"cell_68a1","c":"Board cell 6 east and 2 north of the start cell (cell_64ae): record 29 of 129. Links: east none, north cell_68c6, west cell_6883, south none. It holds 4 items (3 blocks, 1 spindle), listed at cell_68a1_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[26755,26828]},{"a":26787,"t":"addr","b":[198,104],"oa":26822,"o":"cell_68c6"},{"a":26789,"t":"addr","b":[131,104],"oa":26755,"o":"cell_6883"},{"a":26791,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":26793,"l":"cell_68a1_items","c":"Item list of cell_68a1: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $68C5. 1: block, x $A0-$100, y $A0-$100, height $60-$90, type $C0. 2: spindle, x $A3-$AF, y $F0-$FC, top $93. 3: block, x $A0-$C3, y $A0-$C3, height $00-$60, type $C4. 4: block, x $D5-$100, y $10-$A0, height $60-$90, type $DE.","t":"byte","b":[144,96,160,96,160,96,192,147]},{"a":26801,"t":"byte","b":[144,163,12,240,12,247,96,0]},{"a":26809,"t":"byte","b":[160,35,160,35,196,144,96,213]},{"a":26817,"t":"byte","b":[43,16,144,222,0]},{"a":26822,"l":"cell_68c6","c":"Board cell 6 east and 3 north of the start cell (cell_64ae): record 30 of 129. Links: east none, north cell_68eb, west none, south cell_68a1. It holds 4 items (3 blocks, 1 ramp), listed at cell_68c6_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[26787,26865]},{"a":26824,"t":"addr","b":[235,104],"oa":26859,"o":"cell_68eb"},{"a":26826,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":26828,"t":"addr","b":[161,104],"oa":26785,"o":"cell_68a1"},{"a":26830,"l":"cell_68c6_items","c":"Item list of cell_68c6: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $68EA. 1: block, x $D5-$100, y $90-$110, height $60-$90, type $D7. 2: block, x $22-$D5, y $90-$B4, height $00-$90, type $C0. 3: block, x $00-$22, y $08-$B4, height $60-$90, type $C0. 4: ramp, x $B0-$100, y $08-$6F, height $50 at y $08 falling to $00 at y $6F, type $52.","t":"byte","b":[144,96,213,43,144,128,215,144]},{"a":26838,"t":"byte","b":[0,34,179,144,36,192,144,96]},{"a":26846,"t":"byte","b":[0,34,8,172,192,80,0,176]},{"a":26854,"t":"byte","b":[80,8,103,82,0]},{"a":26859,"l":"cell_68eb","c":"Board cell 6 east and 4 north of the start cell (cell_64ae): record 31 of 129. Links: east cell_6c25, north cell_6909, west cell_6935, south cell_68c6. It holds 3 items (3 blocks), listed at cell_68eb_items. Its east link does not fit a flat map: cell_6c25 lies 1 west and 9 north of the start cell. The board is joined to itself there.","t":"addr","b":[37,108],"oa":27685,"o":"cell_6c25","x":[26824,26895,26933,27689]},{"a":26861,"t":"addr","b":[9,105],"oa":26889,"o":"cell_6909"},{"a":26863,"t":"addr","b":[53,105],"oa":26933,"o":"cell_6935"},{"a":26865,"t":"addr","b":[198,104],"oa":26822,"o":"cell_68c6"},{"a":26867,"l":"cell_68eb_items","c":"Item list of cell_68eb: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6908. 1: block, x $B0-$C0, y $10-$108, height $00-$50, type $DC. 2: block, x $F8-$111, y $90-$100, height $00-$50, type $C0. 3: block, x $00-$12, y $CC-$108, height $60-$90, type $D4.","t":"byte","b":[80,0,176,16,16,248,220,80]},{"a":26875,"t":"byte","b":[0,248,25,144,112,192,144,96]},{"a":26883,"t":"byte","b":[0,18,204,60,212,0]},{"a":26889,"l":"cell_6909","c":"Board cell 6 east and 5 north of the start cell (cell_64ae): record 32 of 129. Links: east none, north none, west cell_6953, south cell_68eb. It holds 5 items (4 blocks, 1 spindle), listed at cell_6909_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[26861,26963]},{"a":26891,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":26893,"t":"addr","b":[83,105],"oa":26963,"o":"cell_6953"},{"a":26895,"t":"addr","b":[235,104],"oa":26859,"o":"cell_68eb"},{"a":26897,"l":"cell_6909_items","c":"Item list of cell_6909: 5 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6934. 1: block, x $B0-$100, y $F8-$110, height $00-$50, type $C0. 2: block, x $B0-$100, y $39-$F8, height $39-$50, type $D7. 3: block, x $B0-$C4, y $00-$39, height $00-$50, type $EC. 4: block, x $00-$B0, y $15-$25, height $00-$30, type $E2. 5: spindle, x $90-$9C, y $40-$4C, top $02.","t":"byte","b":[80,0,176,80,248,24,192,80]},{"a":26905,"t":"byte","b":[57,176,80,57,191,215,80,0]},{"a":26913,"t":"byte","b":[176,20,0,57,236,48,0,0]},{"a":26921,"t":"byte","b":[176,21,16,226,2,0,144,12]},{"a":26929,"t":"byte","b":[64,12,247,0]},{"a":26933,"l":"cell_6935","c":"Board cell 5 east and 4 north of the start cell (cell_64ae): record 33 of 129. Links: east cell_68eb, north cell_6953, west cell_697f, south none. It holds 3 items (3 blocks), listed at cell_6935_items.","t":"addr","b":[235,104],"oa":26859,"o":"cell_68eb","x":[26863,26969,27007]},{"a":26935,"t":"addr","b":[83,105],"oa":26963,"o":"cell_6953"},{"a":26937,"t":"addr","b":[127,105],"oa":27007,"o":"cell_697f"},{"a":26939,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":26941,"l":"cell_6935_items","c":"Item list of cell_6935: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6952. 1: block, x $70-$90, y $00-$50, height $00-$90, type $C0. 2: block, x $90-$F0, y $40-$70, height $60-$90, type $C0. 3: block, x $E0-$112, y $70-$CC, height $60-$90, type $C0.","t":"byte","b":[144,0,112,32,0,80,192,144]},{"a":26949,"t":"byte","b":[96,144,96,64,48,192,144,96]},{"a":26957,"t":"byte","b":[224,50,112,92,192,0]},{"a":26963,"l":"cell_6953","c":"Board cell 5 east and 5 north of the start cell (cell_64ae): record 34 of 129. Links: east cell_6909, north none, west cell_6996, south cell_6935. It holds 5 items (4 blocks, 1 ramp), listed at cell_6953_items.","t":"addr","b":[9,105],"oa":26889,"o":"cell_6909","x":[26893,26935,27030]},{"a":26965,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":26967,"t":"addr","b":[150,105],"oa":27030,"o":"cell_6996"},{"a":26969,"t":"addr","b":[53,105],"oa":26933,"o":"cell_6935"},{"a":26971,"l":"cell_6953_items","c":"Item list of cell_6953: 5 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $697E. 1: block, x $10-$100, y $15-$25, height $00-$30, type $E2. 2: block, x $10-$20, y $25-$C5, height $00-$30, type $E2. 3: block, x $00-$30, y $C5-$DA, height $00-$70, type $E9. 4: block, x $20-$80, y $65-$A5, height $00-$2E, type $C0. 5: ramp, x $60-$80, y $A0-$100, height $2E at y $A0 rising to $90 at y $100, type $41.","t":"byte","b":[48,0,16,240,21,16,226,48]},{"a":26979,"t":"byte","b":[0,16,16,37,160,226,112,0]},{"a":26987,"t":"byte","b":[0,48,197,21,233,46,0,32]},{"a":26995,"t":"byte","b":[96,101,64,192,144,46,96,32]},{"a":27003,"t":"byte","b":[160,96,65,0]},{"a":27007,"l":"cell_697f","c":"Board cell 4 east and 4 north of the start cell (cell_64ae): record 35 of 129. Links: east cell_6935, north cell_6996, west none, south none. It holds 2 items (2 spindles), listed at cell_697f_items.","t":"addr","b":[53,105],"oa":26933,"o":"cell_6935","x":[26937,27036]},{"a":27009,"t":"addr","b":[150,105],"oa":27030,"o":"cell_6996"},{"a":27011,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27013,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27015,"l":"cell_697f_items","c":"Item list of cell_697f: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6995. 1: spindle, x $20-$2C, y $A0-$AC, top $03. 2: spindle, x $40-$4C, y $C0-$CC, top $02.","t":"byte","b":[3,0,32,12,160,12,247,2]},{"a":27023,"t":"byte","b":[0,64,12,192,12,247,0]},{"a":27030,"l":"cell_6996","c":"Board cell 4 east and 5 north of the start cell (cell_64ae): record 36 of 129. Links: east cell_6953, north none, west cell_69ad, south cell_697f. It holds 2 items (1 block, 1 ramp), listed at cell_6996_items.","t":"addr","b":[83,105],"oa":26963,"o":"cell_6953","x":[26967,27009,27053]},{"a":27032,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27034,"t":"addr","b":[173,105],"oa":27053,"o":"cell_69ad"},{"a":27036,"t":"addr","b":[127,105],"oa":27007,"o":"cell_697f"},{"a":27038,"l":"cell_6996_items","c":"Item list of cell_6996: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $69AC. 1: block, x $A8-$110, y $65-$A5, height $00-$2E, type $C0. 2: ramp, x $50-$B0, y $40-$80, height $70 at x $50 falling to $2E at x $B0, type $90.","t":"byte","b":[46,0,168,104,101,64,192,112]},{"a":27046,"t":"byte","b":[46,80,96,64,64,144,0]},{"a":27053,"l":"cell_69ad","c":"Board cell 3 east and 5 north of the start cell (cell_64ae): record 37 of 129. Links: east cell_6996, north none, west cell_69d9, south none. It holds 5 items (3 blocks, 1 ramp, 1 spindle), listed at cell_69ad_items.","t":"addr","b":[150,105],"oa":27030,"o":"cell_6996","x":[27034,27097]},{"a":27055,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27057,"t":"addr","b":[217,105],"oa":27097,"o":"cell_69d9"},{"a":27059,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27061,"l":"cell_69ad_items","c":"Item list of cell_69ad: 5 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $69D8. 1: block, x $60-$150, y $40-$58, height $00-$70, type $C0. 2: ramp, x $60-$C0, y $58-$80, height $70 at x $60 falling to $30 at x $C0, type $90. 3: block, x $B0-$D8, y $58-$80, height $00-$30, type $C0. 4: spindle, x $C0-$CC, y $60-$6C, top $32. 5: block, x $20-$60, y $40-$80, height $00-$70, type $C0.","t":"byte","b":[112,0,96,240,64,24,192,112]},{"a":27069,"t":"byte","b":[48,96,96,88,40,144,48,0]},{"a":27077,"t":"byte","b":[176,40,88,40,192,50,48,192]},{"a":27085,"t":"byte","b":[12,96,12,247,112,0,32,64]},{"a":27093,"t":"byte","b":[64,64,192,0]},{"a":27097,"l":"cell_69d9","c":"Board cell 2 east and 5 north of the start cell (cell_64ae): record 38 of 129. Links: east cell_69ad, north none, west cell_6a51, south cell_69f7. It holds 3 items (3 blocks), listed at cell_69d9_items.","t":"addr","b":[173,105],"oa":27053,"o":"cell_69ad","x":[27057,27129,27217]},{"a":27099,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27101,"t":"addr","b":[81,106],"oa":27217,"o":"cell_6a51"},{"a":27103,"t":"addr","b":[247,105],"oa":27127,"o":"cell_69f7"},{"a":27105,"l":"cell_69d9_items","c":"Item list of cell_69d9: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $69F6. 1: block, x $50-$120, y $60-$80, height $50-$70, type $D8. 2: block, x $18-$50, y $60-$80, height $00-$70, type $EB. 3: block, x $2C-$3C, y $80-$160, height $00-$30, type $E2.","t":"byte","b":[112,80,80,208,96,32,216,112]},{"a":27113,"t":"byte","b":[0,24,56,96,32,235,48,0]},{"a":27121,"t":"byte","b":[44,16,128,224,226,0]},{"a":27127,"l":"cell_69f7","c":"Board cell 2 east and 4 north of the start cell (cell_64ae): record 39 of 129. Links: east none, north cell_69d9, west none, south cell_6a15. It holds 3 items (1 block, 2 spindles), listed at cell_69f7_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[27103,27159]},{"a":27129,"t":"addr","b":[217,105],"oa":27097,"o":"cell_69d9"},{"a":27131,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27133,"t":"addr","b":[21,106],"oa":27157,"o":"cell_6a15"},{"a":27135,"l":"cell_69f7_items","c":"Item list of cell_69f7: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6A14. 1: block, x $2C-$3C, y $60-$120, height $00-$30, type $E2. 2: spindle, x $2E-$3A, y $30-$3C, top $33. 3: spindle, x $7A-$86, y $7A-$86, top $02.","t":"byte","b":[48,0,44,16,96,192,226,51]},{"a":27143,"t":"byte","b":[48,46,12,48,12,247,2,0]},{"a":27151,"t":"byte","b":[122,12,122,12,247,0]},{"a":27157,"l":"cell_6a15","c":"Board cell 2 east and 3 north of the start cell (cell_64ae): record 40 of 129. Links: east none, north cell_69f7, west cell_6a33, south none. It holds 3 items (1 block, 1 spindle, 1 handler record), listed at cell_6a15_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[27133,27187]},{"a":27159,"t":"addr","b":[247,105],"oa":27127,"o":"cell_69f7"},{"a":27161,"t":"addr","b":[51,106],"oa":27187,"o":"cell_6a33"},{"a":27163,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27165,"l":"cell_6a15_items","c":"Item list of cell_6a15: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6A32. The list runs on through the handler word at $6A28. 1: spindle, x $F0-$FC, y $F0-$FC, top $03. 2: handler record ($64 $3C $02 $0A), its handler word at $6A28. 3: block, x $80-$C0, y $80-$C0, height $00-$30, type $F4.","t":"byte","b":[3,0,240,12,240,12,247,100]},{"a":27173,"t":"byte","b":[60,2,10]},{"a":27176,"l":"cell_6a15_handler","c":"Handler word of the record at $6A24 in cell_6a15: the four parameter bytes $64 $3C $02 $0A come before it and the $F7 tag after it. The tape image holds $BD90 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6A2B, a type $F4 block at x $80-$C0, y $80-$C0), with HL pointing at the record. $BD90 takes $02 off that item's top each call until it would fall below $0A, sets it to $0A and, because the item is type $F4, writes $BE07 here and a random 5 to 36 into the record's first byte. $BE07 counts that byte down by one a call; when it runs out it adds $02 to the top each call up to $3C, and once there, if ($8066) is not 0 and ($7C71) is below $0C, it takes one off ($8066), adds a type $F3 object over the middle of the item and writes $BD90 back. The first byte's value in the image, $64, is replaced before $BE07 ever reads it.","t":"addr","b":[144,189],"oa":48528,"o":"lower_item_handler"},{"a":27178,"l":"cell_6a15_items_2","c":"Item list of cell_6a15, carried on after the handler word at $6A28: the $F7 tag that closes the record at $6A24, then item 3 and the closing 0 at $6A32. The items are described at cell_6a15_items.","t":"byte","b":[247,48,0,128,64,128,64,244]},{"a":27186,"t":"byte","b":[0]},{"a":27187,"l":"cell_6a33","c":"Board cell 1 east and 3 north of the start cell (cell_64ae): record 41 of 129. Links: east cell_6a15, north none, west cell_6a76, south none. It holds 3 items (2 blocks, 1 spindle), listed at cell_6a33_items.","t":"addr","b":[21,106],"oa":27157,"o":"cell_6a15","x":[27161,27254]},{"a":27189,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27191,"t":"addr","b":[118,106],"oa":27254,"o":"cell_6a76"},{"a":27193,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27195,"l":"cell_6a33_items","c":"Item list of cell_6a33: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6A50. 1: block, x $60-$13C, y $20-$30, height $00-$30, type $E2. 2: spindle, x $30-$3C, y $24-$30, top $32. 3: block, x $20-$36, y $A9-$E7, height $00-$70, type $EC.","t":"byte","b":[48,0,96,220,32,16,226,50]},{"a":27203,"t":"byte","b":[48,48,12,36,12,247,112,0]},{"a":27211,"t":"byte","b":[32,22,169,62,236,0]},{"a":27217,"l":"cell_6a51","c":"Board cell 1 east and 5 north of the start cell (cell_64ae): record 42 of 129. Links: east cell_69d9, north cell_6b11, west cell_6afa, south none. It holds 4 items (2 blocks, 2 spindles), listed at cell_6a51_items.","t":"addr","b":[217,105],"oa":27097,"o":"cell_69d9","x":[27101,27386,27415]},{"a":27219,"t":"addr","b":[17,107],"oa":27409,"o":"cell_6b11"},{"a":27221,"t":"addr","b":[250,106],"oa":27386,"o":"cell_6afa"},{"a":27223,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27225,"l":"cell_6a51_items","c":"Item list of cell_6a51: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6A75. 1: block, x $70-$90, y $00-$60, height $30-$40, type $C0. 2: spindle, x $7A-$86, y $30-$3C, top $42. 3: block, x $60-$A0, y $60-$A0, height $00-$40, type $C2. 4: spindle, x $7A-$86, y $7A-$86, top $41.","t":"byte","b":[64,48,112,32,0,96,192,66]},{"a":27233,"t":"byte","b":[64,122,12,48,12,247,64,0]},{"a":27241,"t":"byte","b":[96,64,96,64,194,65,64,122]},{"a":27249,"t":"byte","b":[12,122,12,247,0]},{"a":27254,"l":"cell_6a76","c":"Board cell 3 north of the start cell (cell_64ae): record 43 of 129. Links: east cell_6a33, north cell_6ac7, west none, south cell_6a9b. It holds 4 items (3 blocks, 1 spindle), listed at cell_6a76_items.","t":"addr","b":[51,106],"oa":27187,"o":"cell_6a33","x":[27191,27293,27341]},{"a":27256,"t":"addr","b":[199,106],"oa":27335,"o":"cell_6ac7"},{"a":27258,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27260,"t":"addr","b":[155,106],"oa":27291,"o":"cell_6a9b"},{"a":27262,"l":"cell_6a76_items","c":"Item list of cell_6a76: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6A9A. 1: block, x $B0-$160, y $20-$30, height $00-$30, type $E2. 2: block, x $72-$82, y $D0-$108, height $00-$30, type $E2. 3: spindle, x $F0-$FC, y $F0-$FC, top $01. 4: block, x $72-$120, y $C0-$D0, height $00-$30, type $E2.","t":"byte","b":[48,0,176,176,32,16,226,48]},{"a":27270,"t":"byte","b":[0,114,16,208,56,226,1,0]},{"a":27278,"t":"byte","b":[240,12,240,12,247,48,0,114]},{"a":27286,"t":"byte","b":[174,192,16,226,0]},{"a":27291,"l":"cell_6a9b","c":"Board cell 2 north of the start cell (cell_64ae): record 44 of 129. Links: east none, north cell_6a76, west none, south cell_6497. It holds 5 items (3 blocks, 1 spindle, 1 handler record), listed at cell_6a9b_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[25604,25654,25753,27260]},{"a":27293,"t":"addr","b":[118,106],"oa":27254,"o":"cell_6a76"},{"a":27295,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27297,"t":"addr","b":[151,100],"oa":25751,"o":"cell_6497"},{"a":27299,"l":"cell_6a9b_items","c":"Item list of cell_6a9b: 5 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6AC6. The list runs on through the handler word at $6ABC. 1: block, x $72-$82, y $10-$50, height $00-$30, type $E2. 2: block, x $82-$92, y $40-$130, height $10-$30, type $E2. 3: spindle, x $10-$1C, y $10-$1C, top $03. 4: handler record ($05 $DB $09 $1E), its handler word at $6ABC. 5: block, x $40-$80, y $90-$E0, height $00-$50, type $C0.","t":"byte","b":[48,0,114,16,16,64,226,48]},{"a":27307,"t":"byte","b":[16,130,16,64,240,226,3,0]},{"a":27315,"t":"byte","b":[16,12,16,12,247,5,219,9]},{"a":27323,"t":"byte","b":[30]},{"a":27324,"l":"cell_6a9b_handler","c":"Handler word of the record at $6AB8 in cell_6a9b: the four parameter bytes $05 $DB $09 $1E come before it and the $F7 tag after it. The tape image holds $BD6F here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6ABF, a type $C0 block at x $40-$80, y $90-$E0), with HL pointing at the record. $BD6F adds $05 to that item's top each call until it would reach $DB, sets it to $DB and writes $BD90 here; $BD90 then takes $09 off each call until the top would fall below $1E, sets it to $1E and writes $BD6F back. The top starts at $50 and so cycles between $1E and $DB.","t":"addr","b":[111,189],"oa":48495,"o":"raise_item_handler"},{"a":27326,"l":"cell_6a9b_items_2","c":"Item list of cell_6a9b, carried on after the handler word at $6ABC: the $F7 tag that closes the record at $6AB8, then item 5 and the closing 0 at $6AC6. The items are described at cell_6a9b_items.","t":"byte","b":[247,80,0,64,64,144,80,192]},{"a":27334,"t":"byte","b":[0]},{"a":27335,"l":"cell_6ac7","c":"Board cell 4 north of the start cell (cell_64ae): record 45 of 129. Links: east none, north cell_6afa, west none, south cell_6a76. It holds 6 items (5 blocks, 1 spindle), listed at cell_6ac7_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[27256,27392]},{"a":27337,"t":"addr","b":[250,106],"oa":27386,"o":"cell_6afa"},{"a":27339,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27341,"t":"addr","b":[118,106],"oa":27254,"o":"cell_6a76"},{"a":27343,"l":"cell_6ac7_items","c":"Item list of cell_6ac7: 6 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6AF9. 1: block, x $B0-$C0, y $40-$120, height $00-$30, type $E2. 2: spindle, x $B4-$C0, y $60-$6C, top $32. 3: block, x $20-$A0, y $50-$B0, height $60-$90, type $E3. 4: block, x $20-$A0, y $50-$78, height $00-$60, type $C5. 5: block, x $20-$A0, y $88-$B0, height $00-$60, type $C5. 6: block, x $40-$45, y $78-$88, height $00-$01, type $F5.","t":"byte","b":[48,0,176,16,64,224,226,50]},{"a":27351,"t":"byte","b":[48,180,12,96,12,247,144,96]},{"a":27359,"t":"byte","b":[32,128,80,96,227,96,0,32]},{"a":27367,"t":"byte","b":[128,80,40,197,96,0,32,128]},{"a":27375,"t":"byte","b":[136,40,197,1,0,64,5,120]},{"a":27383,"t":"byte","b":[16,245,0]},{"a":27386,"l":"cell_6afa","c":"Board cell 5 north of the start cell (cell_64ae): record 46 of 129. Links: east cell_6a51, north none, west none, south cell_6ac7. It holds 2 items (2 blocks), listed at cell_6afa_items.","t":"addr","b":[81,106],"oa":27217,"o":"cell_6a51","x":[27221,27337]},{"a":27388,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27390,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27392,"t":"addr","b":[199,106],"oa":27335,"o":"cell_6ac7"},{"a":27394,"l":"cell_6afa_items","c":"Item list of cell_6afa: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6B10. 1: block, x $A0-$D0, y $C0-$D8, height $00-$70, type $EC. 2: block, x $B0-$C0, y $D8-$140, height $00-$30, type $E2.","t":"byte","b":[112,0,160,48,192,24,236,48]},{"a":27402,"t":"byte","b":[0,176,16,216,104,226,0]},{"a":27409,"l":"cell_6b11","c":"Board cell 1 east and 6 north of the start cell (cell_64ae): record 47 of 129. Links: east none, north cell_6b2f, west none, south cell_6a51. It holds 3 items (2 blocks, 1 ramp), listed at cell_6b11_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[27219,27445]},{"a":27411,"t":"addr","b":[47,107],"oa":27439,"o":"cell_6b2f"},{"a":27413,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27415,"t":"addr","b":[81,106],"oa":27217,"o":"cell_6a51"},{"a":27417,"l":"cell_6b11_items","c":"Item list of cell_6b11: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6B2E. 1: ramp, x $00-$70, y $B0-$100, height $00 at y $B0 rising to $40 at y $100, type $40. 2: block, x $70-$90, y $80-$100, height $00-$40, type $C0. 3: block, x $90-$100, y $80-$90, height $00-$40, type $C8.","t":"byte","b":[64,0,0,112,176,80,64,64]},{"a":27425,"t":"byte","b":[0,112,32,128,128,192,64,0]},{"a":27433,"t":"byte","b":[144,112,128,16,200,0]},{"a":27439,"l":"cell_6b2f","c":"Board cell 1 east and 7 north of the start cell (cell_64ae): record 48 of 129. Links: east none, north none, west cell_6b46, south cell_6b11. It holds 2 items (1 block, 1 handler record), listed at cell_6b2f_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[27411,27462]},{"a":27441,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27443,"t":"addr","b":[70,107],"oa":27462,"o":"cell_6b46"},{"a":27445,"t":"addr","b":[17,107],"oa":27409,"o":"cell_6b11"},{"a":27447,"l":"cell_6b2f_items","c":"Item list of cell_6b2f: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6B45. The list runs on through the handler word at $6B3B. 1: handler record ($64 $60 $02 $30), its handler word at $6B3B. 2: block, x $60-$A0, y $60-$A0, height $00-$40, type $F4.","t":"byte","b":[100,96,2,48]},{"a":27451,"l":"cell_6b2f_handler","c":"Handler word of the record at $6B37 in cell_6b2f: the four parameter bytes $64 $60 $02 $30 come before it and the $F7 tag after it. The tape image holds $BD90 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6B3E, a type $F4 block at x $60-$A0, y $60-$A0), with HL pointing at the record. $BD90 takes $02 off that item's top each call until it would fall below $30, sets it to $30 and, because the item is type $F4, writes $BE07 here and a random 5 to 36 into the record's first byte. $BE07 counts that byte down by one a call; when it runs out it adds $02 to the top each call up to $60, and once there, if ($8066) is not 0 and ($7C71) is below $0C, it takes one off ($8066), adds a type $F3 object over the middle of the item and writes $BD90 back. The first byte's value in the image, $64, is replaced before $BE07 ever reads it.","t":"addr","b":[144,189],"oa":48528,"o":"lower_item_handler"},{"a":27453,"l":"cell_6b2f_items_2","c":"Item list of cell_6b2f, carried on after the handler word at $6B3B: the $F7 tag that closes the record at $6B37, then item 2 and the closing 0 at $6B45. The items are described at cell_6b2f_items.","t":"byte","b":[247,64,0,96,64,96,64,244]},{"a":27461,"t":"byte","b":[0]},{"a":27462,"l":"cell_6b46","c":"Board cell 7 north of the start cell (cell_64ae): record 49 of 129. Links: east cell_6b2f, north cell_6baa, west none, south none. It holds 13 items (6 blocks, 1 ramp, 6 handler records), listed at cell_6b46_items.","t":"addr","b":[47,107],"oa":27439,"o":"cell_6b2f","x":[27443,27568]},{"a":27464,"t":"addr","b":[170,107],"oa":27562,"o":"cell_6baa"},{"a":27466,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27468,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27470,"l":"cell_6b46_items","c":"Item list of cell_6b46: 13 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6BA9. The list runs on through the handler words at $6B52, $6B60, $6B6E, $6B7C, $6B8A and $6B98. 1: handler record ($02 $32 $32 $50), its handler word at $6B52. 2: block, x $60-$A0, y $00-$20, height $00-$50, type $C0. 3: handler record ($02 $3C $32 $50), its handler word at $6B60. 4: block, x $60-$A0, y $20-$40, height $00-$50, type $C0. 5: handler record ($02 $46 $32 $50), its handler word at $6B6E. 6: block, x $60-$A0, y $40-$60, height $00-$50, type $C0. 7: handler record ($02 $50 $32 $50), its handler word at $6B7C. 8: block, x $60-$A0, y $60-$80, height $00-$50, type $C0. 9: handler record ($02 $5A $32 $50), its handler word at $6B8A. 10: block, x $60-$A0, y $80-$A0, height $00-$50, type $C0. 11: handler record ($02 $64 $32 $50), its handler word at $6B98. 12: block, x $60-$A0, y $A0-$C0, height $00-$50, type $C0. 13: ramp, x $A0-$F0, y $80-$C0, height $70 at x $A0 falling to $00 at x $F0, type $90.","t":"byte","b":[2,50,50,80]},{"a":27474,"l":"cell_6b46_handler_1","c":"Handler word of the record at $6B4E in cell_6b46: the four parameter bytes $02 $32 $32 $50 come before it and the $F7 tag after it. The tape image holds $BDD1 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6B55, a type $C0 block at x $60-$A0, y $00-$20), with HL pointing at the record. $BDD1 sets that item's top afresh each call: it shifts the low byte of the frame counter ($8059) left 2 places, adds the phase $32, takes the sine of that angle ($A8C4), takes the high byte of the sine times the amplitude $32, and adds that to, or takes it from, the centre $50 according to the sine's sign. The top swings between $1F and $81 once every 64 frames.","t":"addr","b":[209,189],"oa":48593,"o":"wave_item_handler"},{"a":27476,"l":"cell_6b46_items_2","c":"Item list of cell_6b46, carried on after the handler word at $6B52: the $F7 tag that closes the record at $6B4E, then item 2 and the four parameter bytes of the record at $6B5C. The items are described at cell_6b46_items.","t":"byte","b":[247,80,0,96,64,0,32,192]},{"a":27484,"t":"byte","b":[2,60,50,80]},{"a":27488,"l":"cell_6b46_handler_2","c":"Handler word of the record at $6B5C in cell_6b46: the four parameter bytes $02 $3C $32 $50 come before it and the $F7 tag after it. The tape image holds $BDD1 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6B63, a type $C0 block at x $60-$A0, y $20-$40), with HL pointing at the record. $BDD1 sets that item's top afresh each call: it shifts the low byte of the frame counter ($8059) left 2 places, adds the phase $3C, takes the sine of that angle ($A8C4), takes the high byte of the sine times the amplitude $32, and adds that to, or takes it from, the centre $50 according to the sine's sign. The top swings between $1F and $81 once every 64 frames.","t":"addr","b":[209,189],"oa":48593,"o":"wave_item_handler"},{"a":27490,"l":"cell_6b46_items_3","c":"Item list of cell_6b46, carried on after the handler word at $6B60: the $F7 tag that closes the record at $6B5C, then item 4 and the four parameter bytes of the record at $6B6A. The items are described at cell_6b46_items.","t":"byte","b":[247,80,0,96,64,32,32,192]},{"a":27498,"t":"byte","b":[2,70,50,80]},{"a":27502,"l":"cell_6b46_handler_3","c":"Handler word of the record at $6B6A in cell_6b46: the four parameter bytes $02 $46 $32 $50 come before it and the $F7 tag after it. The tape image holds $BDD1 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6B71, a type $C0 block at x $60-$A0, y $40-$60), with HL pointing at the record. $BDD1 sets that item's top afresh each call: it shifts the low byte of the frame counter ($8059) left 2 places, adds the phase $46, takes the sine of that angle ($A8C4), takes the high byte of the sine times the amplitude $32, and adds that to, or takes it from, the centre $50 according to the sine's sign. The top swings between $1F and $81 once every 64 frames.","t":"addr","b":[209,189],"oa":48593,"o":"wave_item_handler"},{"a":27504,"l":"cell_6b46_items_4","c":"Item list of cell_6b46, carried on after the handler word at $6B6E: the $F7 tag that closes the record at $6B6A, then item 6 and the four parameter bytes of the record at $6B78. The items are described at cell_6b46_items.","t":"byte","b":[247,80,0,96,64,64,32,192]},{"a":27512,"t":"byte","b":[2,80,50,80]},{"a":27516,"l":"cell_6b46_handler_4","c":"Handler word of the record at $6B78 in cell_6b46: the four parameter bytes $02 $50 $32 $50 come before it and the $F7 tag after it. The tape image holds $BDD1 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6B7F, a type $C0 block at x $60-$A0, y $60-$80), with HL pointing at the record. $BDD1 sets that item's top afresh each call: it shifts the low byte of the frame counter ($8059) left 2 places, adds the phase $50, takes the sine of that angle ($A8C4), takes the high byte of the sine times the amplitude $32, and adds that to, or takes it from, the centre $50 according to the sine's sign. The top swings between $1F and $81 once every 64 frames.","t":"addr","b":[209,189],"oa":48593,"o":"wave_item_handler"},{"a":27518,"l":"cell_6b46_items_5","c":"Item list of cell_6b46, carried on after the handler word at $6B7C: the $F7 tag that closes the record at $6B78, then item 8 and the four parameter bytes of the record at $6B86. The items are described at cell_6b46_items.","t":"byte","b":[247,80,0,96,64,96,32,192]},{"a":27526,"t":"byte","b":[2,90,50,80]},{"a":27530,"l":"cell_6b46_handler_5","c":"Handler word of the record at $6B86 in cell_6b46: the four parameter bytes $02 $5A $32 $50 come before it and the $F7 tag after it. The tape image holds $BDD1 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6B8D, a type $C0 block at x $60-$A0, y $80-$A0), with HL pointing at the record. $BDD1 sets that item's top afresh each call: it shifts the low byte of the frame counter ($8059) left 2 places, adds the phase $5A, takes the sine of that angle ($A8C4), takes the high byte of the sine times the amplitude $32, and adds that to, or takes it from, the centre $50 according to the sine's sign. The top swings between $1F and $81 once every 64 frames.","t":"addr","b":[209,189],"oa":48593,"o":"wave_item_handler"},{"a":27532,"l":"cell_6b46_items_6","c":"Item list of cell_6b46, carried on after the handler word at $6B8A: the $F7 tag that closes the record at $6B86, then item 10 and the four parameter bytes of the record at $6B94. The items are described at cell_6b46_items.","t":"byte","b":[247,80,0,96,64,128,32,192]},{"a":27540,"t":"byte","b":[2,100,50,80]},{"a":27544,"l":"cell_6b46_handler_6","c":"Handler word of the record at $6B94 in cell_6b46: the four parameter bytes $02 $64 $32 $50 come before it and the $F7 tag after it. The tape image holds $BDD1 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6B9B, a type $C0 block at x $60-$A0, y $A0-$C0), with HL pointing at the record. $BDD1 sets that item's top afresh each call: it shifts the low byte of the frame counter ($8059) left 2 places, adds the phase $64, takes the sine of that angle ($A8C4), takes the high byte of the sine times the amplitude $32, and adds that to, or takes it from, the centre $50 according to the sine's sign. The top swings between $1F and $81 once every 64 frames.","t":"addr","b":[209,189],"oa":48593,"o":"wave_item_handler"},{"a":27546,"l":"cell_6b46_items_7","c":"Item list of cell_6b46, carried on after the handler word at $6B98: the $F7 tag that closes the record at $6B94, then items 12 to 13 and the closing 0 at $6BA9. The items are described at cell_6b46_items.","t":"byte","b":[247,80,0,96,64,160,32,192]},{"a":27554,"t":"byte","b":[112,0,160,80,128,64,144,0]},{"a":27562,"l":"cell_6baa","c":"Board cell 8 north of the start cell (cell_64ae): record 50 of 129. Links: east none, north cell_6bf2, west none, south cell_6b46. It holds 9 items (5 blocks, 4 handler records), listed at cell_6baa_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[27464,27640]},{"a":27564,"t":"addr","b":[242,107],"oa":27634,"o":"cell_6bf2"},{"a":27566,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27568,"t":"addr","b":[70,107],"oa":27462,"o":"cell_6b46"},{"a":27570,"l":"cell_6baa_items","c":"Item list of cell_6baa: 9 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6BF1. The list runs on through the handler words at $6BBD, $6BCB, $6BD9 and $6BE7. 1: block, x $80-$A0, y $00-$80, height $00-$50, type $C2. 2: handler record ($02 $0A $32 $50), its handler word at $6BBD. 3: block, x $60-$A0, y $80-$A0, height $00-$50, type $C0. 4: handler record ($02 $14 $32 $50), its handler word at $6BCB. 5: block, x $60-$A0, y $A0-$C0, height $00-$50, type $C0. 6: handler record ($02 $1E $32 $50), its handler word at $6BD9. 7: block, x $60-$A0, y $C0-$E0, height $00-$50, type $C0. 8: handler record ($02 $28 $32 $50), its handler word at $6BE7. 9: block, x $60-$A0, y $E0-$100, height $00-$50, type $C0.","t":"byte","b":[80,0,128,32,0,128,194,2]},{"a":27578,"t":"byte","b":[10,50,80]},{"a":27581,"l":"cell_6baa_handler_1","c":"Handler word of the record at $6BB9 in cell_6baa: the four parameter bytes $02 $0A $32 $50 come before it and the $F7 tag after it. The tape image holds $BDD1 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6BC0, a type $C0 block at x $60-$A0, y $80-$A0), with HL pointing at the record. $BDD1 sets that item's top afresh each call: it shifts the low byte of the frame counter ($8059) left 2 places, adds the phase $0A, takes the sine of that angle ($A8C4), takes the high byte of the sine times the amplitude $32, and adds that to, or takes it from, the centre $50 according to the sine's sign. The top swings between $1F and $81 once every 64 frames.","t":"addr","b":[209,189],"oa":48593,"o":"wave_item_handler"},{"a":27583,"l":"cell_6baa_items_2","c":"Item list of cell_6baa, carried on after the handler word at $6BBD: the $F7 tag that closes the record at $6BB9, then item 3 and the four parameter bytes of the record at $6BC7. The items are described at cell_6baa_items.","t":"byte","b":[247,80,0,96,64,128,32,192]},{"a":27591,"t":"byte","b":[2,20,50,80]},{"a":27595,"l":"cell_6baa_handler_2","c":"Handler word of the record at $6BC7 in cell_6baa: the four parameter bytes $02 $14 $32 $50 come before it and the $F7 tag after it. The tape image holds $BDD1 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6BCE, a type $C0 block at x $60-$A0, y $A0-$C0), with HL pointing at the record. $BDD1 sets that item's top afresh each call: it shifts the low byte of the frame counter ($8059) left 2 places, adds the phase $14, takes the sine of that angle ($A8C4), takes the high byte of the sine times the amplitude $32, and adds that to, or takes it from, the centre $50 according to the sine's sign. The top swings between $1F and $81 once every 64 frames.","t":"addr","b":[209,189],"oa":48593,"o":"wave_item_handler"},{"a":27597,"l":"cell_6baa_items_3","c":"Item list of cell_6baa, carried on after the handler word at $6BCB: the $F7 tag that closes the record at $6BC7, then item 5 and the four parameter bytes of the record at $6BD5. The items are described at cell_6baa_items.","t":"byte","b":[247,80,0,96,64,160,32,192]},{"a":27605,"t":"byte","b":[2,30,50,80]},{"a":27609,"l":"cell_6baa_handler_3","c":"Handler word of the record at $6BD5 in cell_6baa: the four parameter bytes $02 $1E $32 $50 come before it and the $F7 tag after it. The tape image holds $BDD1 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6BDC, a type $C0 block at x $60-$A0, y $C0-$E0), with HL pointing at the record. $BDD1 sets that item's top afresh each call: it shifts the low byte of the frame counter ($8059) left 2 places, adds the phase $1E, takes the sine of that angle ($A8C4), takes the high byte of the sine times the amplitude $32, and adds that to, or takes it from, the centre $50 according to the sine's sign. The top swings between $1F and $81 once every 64 frames.","t":"addr","b":[209,189],"oa":48593,"o":"wave_item_handler"},{"a":27611,"l":"cell_6baa_items_4","c":"Item list of cell_6baa, carried on after the handler word at $6BD9: the $F7 tag that closes the record at $6BD5, then item 7 and the four parameter bytes of the record at $6BE3. The items are described at cell_6baa_items.","t":"byte","b":[247,80,0,96,64,192,32,192]},{"a":27619,"t":"byte","b":[2,40,50,80]},{"a":27623,"l":"cell_6baa_handler_4","c":"Handler word of the record at $6BE3 in cell_6baa: the four parameter bytes $02 $28 $32 $50 come before it and the $F7 tag after it. The tape image holds $BDD1 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6BEA, a type $C0 block at x $60-$A0, y $E0-$100), with HL pointing at the record. $BDD1 sets that item's top afresh each call: it shifts the low byte of the frame counter ($8059) left 2 places, adds the phase $28, takes the sine of that angle ($A8C4), takes the high byte of the sine times the amplitude $32, and adds that to, or takes it from, the centre $50 according to the sine's sign. The top swings between $1F and $81 once every 64 frames.","t":"addr","b":[209,189],"oa":48593,"o":"wave_item_handler"},{"a":27625,"l":"cell_6baa_items_5","c":"Item list of cell_6baa, carried on after the handler word at $6BE7: the $F7 tag that closes the record at $6BE3, then item 9 and the closing 0 at $6BF1. The items are described at cell_6baa_items.","t":"byte","b":[247,80,0,96,64,224,32,192]},{"a":27633,"t":"byte","b":[0]},{"a":27634,"l":"cell_6bf2","c":"Board cell 9 north of the start cell (cell_64ae): record 51 of 129. Links: east none, north none, west cell_6c25, south cell_6baa. It holds 6 items (3 blocks, 1 wedge, 2 handler records), listed at cell_6bf2_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[27564,27685]},{"a":27636,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27638,"t":"addr","b":[37,108],"oa":27685,"o":"cell_6c25"},{"a":27640,"t":"addr","b":[170,107],"oa":27562,"o":"cell_6baa"},{"a":27642,"l":"cell_6bf2_items","c":"Item list of cell_6bf2: 6 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6C24. The list runs on through the handler words at $6C0C and $6C1A. 1: block, x $00-$60, y $60-$A0, height $00-$60, type $C2. 2: wedge with its square corner to the north-east, x $30-$60, y $A0-$D0, height $20-$60, type $06. 3: handler record ($02 $0A $32 $50), its handler word at $6C0C. 4: block, x $60-$A0, y $D0-$100, height $00-$50, type $C0. 5: handler record ($02 $28 $32 $50), its handler word at $6C1A. 6: block, x $60-$A0, y $A0-$D0, height $00-$50, type $C0.","t":"byte","b":[96,0,0,96,96,64,194,96]},{"a":27650,"t":"byte","b":[32,48,48,160,48,6,2,10]},{"a":27658,"t":"byte","b":[50,80]},{"a":27660,"l":"cell_6bf2_handler_1","c":"Handler word of the record at $6C08 in cell_6bf2: the four parameter bytes $02 $0A $32 $50 come before it and the $F7 tag after it. The tape image holds $BDD1 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6C0F, a type $C0 block at x $60-$A0, y $D0-$100), with HL pointing at the record. $BDD1 sets that item's top afresh each call: it shifts the low byte of the frame counter ($8059) left 2 places, adds the phase $0A, takes the sine of that angle ($A8C4), takes the high byte of the sine times the amplitude $32, and adds that to, or takes it from, the centre $50 according to the sine's sign. The top swings between $1F and $81 once every 64 frames.","t":"addr","b":[209,189],"oa":48593,"o":"wave_item_handler"},{"a":27662,"l":"cell_6bf2_items_2","c":"Item list of cell_6bf2, carried on after the handler word at $6C0C: the $F7 tag that closes the record at $6C08, then item 4 and the four parameter bytes of the record at $6C16. The items are described at cell_6bf2_items.","t":"byte","b":[247,80,0,96,64,208,48,192]},{"a":27670,"t":"byte","b":[2,40,50,80]},{"a":27674,"l":"cell_6bf2_handler_2","c":"Handler word of the record at $6C16 in cell_6bf2: the four parameter bytes $02 $28 $32 $50 come before it and the $F7 tag after it. The tape image holds $BDD1 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6C1D, a type $C0 block at x $60-$A0, y $A0-$D0), with HL pointing at the record. $BDD1 sets that item's top afresh each call: it shifts the low byte of the frame counter ($8059) left 2 places, adds the phase $28, takes the sine of that angle ($A8C4), takes the high byte of the sine times the amplitude $32, and adds that to, or takes it from, the centre $50 according to the sine's sign. The top swings between $1F and $81 once every 64 frames.","t":"addr","b":[209,189],"oa":48593,"o":"wave_item_handler"},{"a":27676,"l":"cell_6bf2_items_3","c":"Item list of cell_6bf2, carried on after the handler word at $6C1A: the $F7 tag that closes the record at $6C16, then item 6 and the closing 0 at $6C24. The items are described at cell_6bf2_items.","t":"byte","b":[247,80,0,96,64,160,48,192]},{"a":27684,"t":"byte","b":[0]},{"a":27685,"l":"cell_6c25","c":"Board cell 1 west and 9 north of the start cell (cell_64ae): record 52 of 129. Links: east cell_6bf2, north none, west cell_68eb, south none. It holds 6 items (1 block, 5 spindles), listed at cell_6c25_items. Its west link does not fit a flat map: cell_68eb lies 6 east and 4 north of the start cell. The board is joined to itself there.","t":"addr","b":[242,107],"oa":27634,"o":"cell_6bf2","x":[26859,27638]},{"a":27687,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27689,"t":"addr","b":[235,104],"oa":26859,"o":"cell_68eb"},{"a":27691,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27693,"l":"cell_6c25_items","c":"Item list of cell_6c25: 6 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6C57. 1: block, x $A0-$100, y $60-$A0, height $00-$40, type $C2. 2: spindle, x $90-$9C, y $7A-$86, top $31. 3: spindle, x $88-$94, y $7A-$86, top $28. 4: spindle, x $80-$8C, y $7A-$86, top $21. 5: spindle, x $78-$84, y $7A-$86, top $18. 6: spindle, x $70-$7C, y $7A-$86, top $11.","t":"byte","b":[64,0,160,96,96,64,194,49]},{"a":27701,"t":"byte","b":[48,144,12,122,12,247,40,39]},{"a":27709,"t":"byte","b":[136,12,122,12,247,33,32,128]},{"a":27717,"t":"byte","b":[12,122,12,247,24,23,120,12]},{"a":27725,"t":"byte","b":[122,12,247,17,16,112,12,122]},{"a":27733,"t":"byte","b":[12,247,0]},{"a":27736,"l":"cell_6c58","c":"Board cell 5 south of the start cell (cell_64ae): record 53 of 129. Links: east cell_6c68, north cell_6649, west cell_6e68, south cell_6ddf. It holds 1 item (1 block), listed at cell_6c58_items.","t":"addr","b":[104,108],"oa":27752,"o":"cell_6c68","x":[26191,27756,28129,28264]},{"a":27738,"t":"addr","b":[73,102],"oa":26185,"o":"cell_6649"},{"a":27740,"t":"addr","b":[104,110],"oa":28264,"o":"cell_6e68"},{"a":27742,"t":"addr","b":[223,109],"oa":28127,"o":"cell_6ddf"},{"a":27744,"l":"cell_6c58_items","c":"Item list of cell_6c58: 1 item of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6C67. 1: block, x $83-$93, y $10-$100, height $00-$30, type $E2.","t":"byte","b":[48,0,131,16,16,240,226,0]},{"a":27752,"l":"cell_6c68","c":"Board cell 1 east and 5 south of the start cell (cell_64ae): record 54 of 129. Links: east cell_6c7f, north cell_669f, west cell_6c58, south none. It holds 2 items (2 blocks), listed at cell_6c68_items.","t":"addr","b":[127,108],"oa":27775,"o":"cell_6c7f","x":[26277,27736,27779]},{"a":27754,"t":"addr","b":[159,102],"oa":26271,"o":"cell_669f"},{"a":27756,"t":"addr","b":[88,108],"oa":27736,"o":"cell_6c58"},{"a":27758,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27760,"l":"cell_6c68_items","c":"Item list of cell_6c68: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6C7E. 1: block, x $50-$60, y $50-$E0, height $00-$30, type $E2. 2: block, x $60-$150, y $D0-$E0, height $00-$30, type $E2.","t":"byte","b":[48,0,80,16,80,144,226,48]},{"a":27768,"t":"byte","b":[0,96,240,208,16,226,0]},{"a":27775,"l":"cell_6c7f","c":"Board cell 2 east and 5 south of the start cell (cell_64ae): record 55 of 129. Links: east cell_6cb9, north cell_66b6, west cell_6c68, south cell_6d52. It holds 7 items (6 blocks, 1 spindle), listed at cell_6c7f_items.","t":"addr","b":[185,108],"oa":27833,"o":"cell_6cb9","x":[26300,27752,27837,27988]},{"a":27777,"t":"addr","b":[182,102],"oa":26294,"o":"cell_66b6"},{"a":27779,"t":"addr","b":[104,108],"oa":27752,"o":"cell_6c68"},{"a":27781,"t":"addr","b":[82,109],"oa":27986,"o":"cell_6d52"},{"a":27783,"l":"cell_6c7f_items","c":"Item list of cell_6c7f: 7 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6CB8. 1: block, x $50-$60, y $D0-$140, height $00-$30, type $E2. 2: spindle, x $10-$1C, y $D4-$E0, top $32. 3: block, x $68-$98, y $68-$98, height $00-$E0, type $C3. 4: block, x $98-$E8, y $70-$90, height $60-$80, type $C8. 5: block, x $70-$90, y $98-$E8, height $60-$80, type $D0. 6: block, x $18-$68, y $70-$90, height $60-$80, type $CC. 7: block, x $70-$90, y $18-$68, height $60-$80, type $D4.","t":"byte","b":[48,0,80,16,208,112,226,50]},{"a":27791,"t":"byte","b":[48,16,12,212,12,247,224,0]},{"a":27799,"t":"byte","b":[104,48,104,48,195,128,96,152]},{"a":27807,"t":"byte","b":[80,112,32,200,128,96,112,32]},{"a":27815,"t":"byte","b":[152,80,208,128,96,24,80,112]},{"a":27823,"t":"byte","b":[32,204,128,96,112,32,24,80]},{"a":27831,"t":"byte","b":[212,0]},{"a":27833,"l":"cell_6cb9","c":"Board cell 3 east and 5 south of the start cell (cell_64ae): record 56 of 129. Links: east cell_6cde, north cell_67f8, west cell_6c7f, south cell_6d85. It holds 4 items (4 blocks), listed at cell_6cb9_items.","t":"addr","b":[222,108],"oa":27870,"o":"cell_6cde","x":[26622,27775,27874,28039]},{"a":27835,"t":"addr","b":[248,103],"oa":26616,"o":"cell_67f8"},{"a":27837,"t":"addr","b":[127,108],"oa":27775,"o":"cell_6c7f"},{"a":27839,"t":"addr","b":[133,109],"oa":28037,"o":"cell_6d85"},{"a":27841,"l":"cell_6cb9_items","c":"Item list of cell_6cb9: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6CDD. 1: block, x $40-$60, y $30-$70, height $00-$B0, type $C0. 2: block, x $80-$A0, y $30-$70, height $00-$B0, type $C1. 3: block, x $C0-$E0, y $30-$70, height $00-$B0, type $C2. 4: block, x $FF-$11F, y $30-$70, height $00-$B0, type $C3.","t":"byte","b":[176,0,64,32,48,64,192,176]},{"a":27849,"t":"byte","b":[0,128,32,48,64,193,176,0]},{"a":27857,"t":"byte","b":[192,32,48,64,194,176,0,255]},{"a":27865,"t":"byte","b":[32,48,64,195,0]},{"a":27870,"l":"cell_6cde","c":"Board cell 4 east and 5 south of the start cell (cell_64ae): record 57 of 129. Links: east cell_6d11, north cell_6824, west cell_6cb9, south cell_6daa. It holds 6 items (5 blocks, 1 ramp), listed at cell_6cde_items.","t":"addr","b":[17,109],"oa":27921,"o":"cell_6d11","x":[26666,27833,27925,28076]},{"a":27872,"t":"addr","b":[36,104],"oa":26660,"o":"cell_6824"},{"a":27874,"t":"addr","b":[185,108],"oa":27833,"o":"cell_6cb9"},{"a":27876,"t":"addr","b":[170,109],"oa":28074,"o":"cell_6daa"},{"a":27878,"l":"cell_6cde_items","c":"Item list of cell_6cde: 6 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6D10. 1: block, x $60-$70, y $10-$100, height $00-$2E, type $C0. 2: block, x $C8-$F0, y $10-$40, height $00-$96, type $C0. 3: ramp, x $C8-$F0, y $40-$A0, height $96 at y $40 falling to $00 at y $A0, type $58. 4: block, x $70-$110, y $F0-$100, height $00-$2E, type $D8. 5: block, x $70-$110, y $F0-$100, height $00-$2E, type $D8. 6: block, x $70-$F0, y $B0-$C0, height $00-$2E, type $C8.","t":"byte","b":[46,0,96,16,16,240,192,150]},{"a":27886,"t":"byte","b":[0,200,40,16,48,192,150,0]},{"a":27894,"t":"byte","b":[200,40,64,96,88,46,0,112]},{"a":27902,"t":"byte","b":[160,240,16,216,46,0,112,160]},{"a":27910,"t":"byte","b":[240,16,216,46,0,112,128,176]},{"a":27918,"t":"byte","b":[16,200,0]},{"a":27921,"l":"cell_6d11","c":"Board cell 5 east and 5 south of the start cell (cell_64ae): record 58 of 129. Links: east none, north cell_6842, west cell_6cde, south cell_6dcf. It holds 8 items (6 blocks, 1 spindle, 1 handler record), listed at cell_6d11_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[26696,27870,28113]},{"a":27923,"t":"addr","b":[66,104],"oa":26690,"o":"cell_6842"},{"a":27925,"t":"addr","b":[222,108],"oa":27870,"o":"cell_6cde"},{"a":27927,"t":"addr","b":[207,109],"oa":28111,"o":"cell_6dcf"},{"a":27929,"l":"cell_6d11_items","c":"Item list of cell_6d11: 8 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6D51. The list runs on through the handler word at $6D47. 1: block, x $10-$100, y $F0-$100, height $00-$2E, type $C8. 2: block, x $55-$B5, y $30-$40, height $00-$30, type $E2. 3: block, x $A5-$B5, y $40-$A0, height $00-$30, type $E2. 4: block, x $35-$B5, y $A0-$B0, height $00-$30, type $E2. 5: block, x $20-$35, y $90-$C0, height $00-$70, type $E8. 6: spindle, x $77-$83, y $10-$1C, top $03. 7: handler record ($64 $46 $02 $14), its handler word at $6D47. 8: block, x $B8-$D8, y $B8-$D8, height $00-$30, type $F4.","t":"byte","b":[46,0,16,240,240,16,200,48]},{"a":27937,"t":"byte","b":[0,85,96,48,16,226,48,0]},{"a":27945,"t":"byte","b":[165,16,64,96,226,48,0,53]},{"a":27953,"t":"byte","b":[128,160,16,226,112,0,32,21]},{"a":27961,"t":"byte","b":[144,48,232,3,0,119,12,16]},{"a":27969,"t":"byte","b":[12,247,100,70,2,20]},{"a":27975,"l":"cell_6d11_handler","c":"Handler word of the record at $6D43 in cell_6d11: the four parameter bytes $64 $46 $02 $14 come before it and the $F7 tag after it. The tape image holds $BD90 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6D4A, a type $F4 block at x $B8-$D8, y $B8-$D8), with HL pointing at the record. $BD90 takes $02 off that item's top each call until it would fall below $14, sets it to $14 and, because the item is type $F4, writes $BE07 here and a random 5 to 36 into the record's first byte. $BE07 counts that byte down by one a call; when it runs out it adds $02 to the top each call up to $46, and once there, if ($8066) is not 0 and ($7C71) is below $0C, it takes one off ($8066), adds a type $F3 object over the middle of the item and writes $BD90 back. The first byte's value in the image, $64, is replaced before $BE07 ever reads it.","t":"addr","b":[144,189],"oa":48528,"o":"lower_item_handler"},{"a":27977,"l":"cell_6d11_items_2","c":"Item list of cell_6d11, carried on after the handler word at $6D47: the $F7 tag that closes the record at $6D43, then item 8 and the closing 0 at $6D51. The items are described at cell_6d11_items.","t":"byte","b":[247,48,0,184,32,184,32,244]},{"a":27985,"t":"byte","b":[0]},{"a":27986,"l":"cell_6d52","c":"Board cell 2 east and 6 south of the start cell (cell_64ae): record 59 of 129. Links: east cell_6d85, north cell_6c7f, west none, south none. It holds 6 items (3 blocks, 2 wedges, 1 handler record), listed at cell_6d52_items.","t":"addr","b":[133,109],"oa":28037,"o":"cell_6d85","x":[27781,28041]},{"a":27988,"t":"addr","b":[127,108],"oa":27775,"o":"cell_6c7f"},{"a":27990,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27992,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":27994,"l":"cell_6d52_items","c":"Item list of cell_6d52: 6 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6D84. The list runs on through the handler word at $6D65. 1: block, x $3C-$74, y $40-$56, height $00-$77, type $E9. 2: handler record ($03 $A0 $05 $01), its handler word at $6D65. 3: block, x $B0-$E0, y $B0-$E0, height $00-$80, type $C2. 4: wedge with its square corner to the north-east, x $B0-$E0, y $E0-$100, height $67-$98, type $01. 5: wedge with its square corner to the south-west, x $E0-$110, y $B0-$E0, height $67-$98, type $31. 6: block, x $E0-$110, y $E0-$100, height $67-$98, type $D9.","t":"byte","b":[119,0,60,56,64,22,233,3]},{"a":28002,"t":"byte","b":[160,5,1]},{"a":28005,"l":"cell_6d52_handler","c":"Handler word of the record at $6D61 in cell_6d52: the four parameter bytes $03 $A0 $05 $01 come before it and the $F7 tag after it. The tape image holds $BD6F here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6D68, a type $C2 block at x $B0-$E0, y $B0-$E0), with HL pointing at the record. $BD6F adds $03 to that item's top each call until it would reach $A0, sets it to $A0 and writes $BD90 here; $BD90 then takes $05 off each call until the top would fall below $01, sets it to $01 and writes $BD6F back. The top starts at $80 and so cycles between $01 and $A0.","t":"addr","b":[111,189],"oa":48495,"o":"raise_item_handler"},{"a":28007,"l":"cell_6d52_items_2","c":"Item list of cell_6d52, carried on after the handler word at $6D65: the $F7 tag that closes the record at $6D61, then items 3 to 6 and the closing 0 at $6D84. The items are described at cell_6d52_items.","t":"byte","b":[247,128,0,176,48,176,48,194]},{"a":28015,"t":"byte","b":[152,103,176,48,224,32,1,152]},{"a":28023,"t":"byte","b":[103,224,48,176,48,49,152,103]},{"a":28031,"t":"byte","b":[224,48,224,32,217,0]},{"a":28037,"l":"cell_6d85","c":"Board cell 3 east and 6 south of the start cell (cell_64ae): record 60 of 129. Links: east cell_6daa, north cell_6cb9, west cell_6d52, south none. It holds 4 items (1 block, 1 wedge, 1 spindle, 1 handler record), listed at cell_6d85_items.","t":"addr","b":[170,109],"oa":28074,"o":"cell_6daa","x":[27839,27986,28078]},{"a":28039,"t":"addr","b":[185,108],"oa":27833,"o":"cell_6cb9"},{"a":28041,"t":"addr","b":[82,109],"oa":27986,"o":"cell_6d52"},{"a":28043,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28045,"l":"cell_6d85_items","c":"Item list of cell_6d85: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6DA9. The list runs on through the handler word at $6D9F. 1: block, x $10-$100, y $C0-$F0, height $67-$98, type $C1. 2: spindle, x $70-$7C, y $D2-$DE, top $9A. 3: handler record ($03 $00 $60 $90), its handler word at $6D9F. 4: wedge with its square corner to the south-west, x $60-$A0, y $20-$50, height $00-$30, type $33.","t":"byte","b":[152,103,16,240,192,48,193,154]},{"a":28053,"t":"byte","b":[153,112,12,210,12,247,3,0]},{"a":28061,"t":"byte","b":[96,144]},{"a":28063,"l":"cell_6d85_handler","c":"Handler word of the record at $6D9B in cell_6d85: the four parameter bytes $03 $00 $60 $90 come before it and the $F7 tag after it. The tape image holds $BDD1 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6DA2, a type $33 wedge at x $60-$A0, y $20-$50), with HL pointing at the record. $BDD1 sets that item's top afresh each call: it shifts the low byte of the frame counter ($8059) left 3 places, adds the phase $00, takes the sine of that angle ($A8C4), takes the high byte of the sine times the amplitude $60, and adds that to, or takes it from, the centre $90 according to the sine's sign. The top swings between $31 and $EF once every 32 frames.","t":"addr","b":[209,189],"oa":48593,"o":"wave_item_handler"},{"a":28065,"l":"cell_6d85_items_2","c":"Item list of cell_6d85, carried on after the handler word at $6D9F: the $F7 tag that closes the record at $6D9B, then item 4 and the closing 0 at $6DA9. The items are described at cell_6d85_items.","t":"byte","b":[247,48,0,96,64,32,48,51]},{"a":28073,"t":"byte","b":[0]},{"a":28074,"l":"cell_6daa","c":"Board cell 4 east and 6 south of the start cell (cell_64ae): record 61 of 129. Links: east cell_6dcf, north cell_6cde, west cell_6d85, south none. It holds 4 items (3 blocks, 1 handler record), listed at cell_6daa_items.","t":"addr","b":[207,109],"oa":28111,"o":"cell_6dcf","x":[27876,28037,28115]},{"a":28076,"t":"addr","b":[222,108],"oa":27870,"o":"cell_6cde"},{"a":28078,"t":"addr","b":[133,109],"oa":28037,"o":"cell_6d85"},{"a":28080,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28082,"l":"cell_6daa_items","c":"Item list of cell_6daa: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6DCE. The list runs on through the handler word at $6DC4. 1: block, x $00-$A0, y $C8-$E8, height $67-$98, type $DB. 2: block, x $A0-$F0, y $A0-$F0, height $67-$98, type $C0. 3: handler record ($64 $B0 $02 $A0), its handler word at $6DC4. 4: block, x $B8-$D8, y $B8-$D8, height $98-$A8, type $F4.","t":"byte","b":[152,103,0,160,200,32,219,152]},{"a":28090,"t":"byte","b":[103,160,80,160,80,192,100,176]},{"a":28098,"t":"byte","b":[2,160]},{"a":28100,"l":"cell_6daa_handler","c":"Handler word of the record at $6DC0 in cell_6daa: the four parameter bytes $64 $B0 $02 $A0 come before it and the $F7 tag after it. The tape image holds $BD90 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($6DC7, a type $F4 block at x $B8-$D8, y $B8-$D8), with HL pointing at the record. $BD90 takes $02 off that item's top each call until it would fall below $A0, sets it to $A0 and, because the item is type $F4, writes $BE07 here and a random 5 to 36 into the record's first byte. $BE07 counts that byte down by one a call; when it runs out it adds $02 to the top each call up to $B0, and once there, if ($8066) is not 0 and ($7C71) is below $0C, it takes one off ($8066), adds a type $F3 object over the middle of the item and writes $BD90 back. The first byte's value in the image, $64, is replaced before $BE07 ever reads it.","t":"addr","b":[144,189],"oa":48528,"o":"lower_item_handler"},{"a":28102,"l":"cell_6daa_items_2","c":"Item list of cell_6daa, carried on after the handler word at $6DC4: the $F7 tag that closes the record at $6DC0, then item 4 and the closing 0 at $6DCE. The items are described at cell_6daa_items.","t":"byte","b":[247,168,152,184,32,184,32,244]},{"a":28110,"t":"byte","b":[0]},{"a":28111,"l":"cell_6dcf","c":"Board cell 5 east and 6 south of the start cell (cell_64ae): record 62 of 129. Links: east none, north cell_6d11, west cell_6daa, south none. It holds 1 item (1 spindle), listed at cell_6dcf_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[27927,28074]},{"a":28113,"t":"addr","b":[17,109],"oa":27921,"o":"cell_6d11"},{"a":28115,"t":"addr","b":[170,109],"oa":28074,"o":"cell_6daa"},{"a":28117,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28119,"l":"cell_6dcf_items","c":"Item list of cell_6dcf: 1 item of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6DDE. 1: spindle, x $F0-$FC, y $F0-$FC, top $01.","t":"byte","b":[1,0,240,12,240,12,247,0]},{"a":28127,"l":"cell_6ddf","c":"Board cell 6 south of the start cell (cell_64ae): record 63 of 129. Links: east none, north cell_6c58, west none, south none. It holds 5 items (4 blocks, 1 spindle), listed at cell_6ddf_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[27742]},{"a":28129,"t":"addr","b":[88,108],"oa":27736,"o":"cell_6c58"},{"a":28131,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28133,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28135,"l":"cell_6ddf_items","c":"Item list of cell_6ddf: 5 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6E0A. 1: block, x $83-$93, y $00-$50, height $10-$30, type $E2. 2: block, x $70-$A6, y $50-$64, height $00-$70, type $E9. 3: spindle, x $82-$8E, y $65-$71, top $02. 4: block, x $70-$A6, y $90-$D0, height $20-$70, type $E3. 5: block, x $70-$A6, y $90-$D0, height $00-$01, type $F5.","t":"byte","b":[48,16,131,16,0,80,226,112]},{"a":28143,"t":"byte","b":[0,112,54,80,20,233,2,0]},{"a":28151,"t":"byte","b":[130,12,101,12,247,112,32,112]},{"a":28159,"t":"byte","b":[54,144,64,227,1,0,112,54]},{"a":28167,"t":"byte","b":[144,64,245,0]},{"a":28171,"l":"cell_6e0b","c":"Board cell 1 west and 4 south of the start cell (cell_64ae): record 64 of 129. Links: east cell_6649, north none, west cell_6ea2, south cell_6e68. It holds 12 items (12 blocks), listed at cell_6e0b_items.","t":"addr","b":[73,102],"oa":26185,"o":"cell_6649","x":[26189,28266,28322]},{"a":28173,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28175,"t":"addr","b":[162,110],"oa":28322,"o":"cell_6ea2"},{"a":28177,"t":"addr","b":[104,110],"oa":28264,"o":"cell_6e68"},{"a":28179,"l":"cell_6e0b_items","c":"Item list of cell_6e0b: 12 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6E67. 1: block, x $A0-$13E, y $08-$100, height $60-$90, type $D5. 2: block, x $A0-$13E, y $40-$110, height $00-$60, type $D8. 3: block, x $30-$8D, y $D0-$E0, height $00-$30, type $E2. 4: block, x $20-$30, y $D0-$180, height $00-$30, type $E2. 5: block, x $00-$8D, y $98-$A8, height $00-$30, type $E2. 6: block, x $8D-$A0, y $11-$3F, height $00-$70, type $EA. 7: block, x $00-$8D, y $20-$30, height $00-$30, type $E2. 8: block, x $8D-$A0, y $49-$77, height $00-$70, type $EA. 9: block, x $00-$8D, y $58-$68, height $00-$30, type $E2. 10: block, x $8D-$A0, y $81-$AF, height $00-$70, type $EC. 11: block, x $8D-$A0, y $B9-$E7, height $00-$70, type $EC. 12: block, x $8D-$A0, y $F1-$11F, height $00-$70, type $EC.","t":"byte","b":[144,96,160,158,8,248,213,96]},{"a":28187,"t":"byte","b":[0,160,158,64,208,216,48,0]},{"a":28195,"t":"byte","b":[48,93,208,16,226,48,0,32]},{"a":28203,"t":"byte","b":[16,208,176,226,48,0,0,141]},{"a":28211,"t":"byte","b":[152,16,226,112,0,141,19,17]},{"a":28219,"t":"byte","b":[46,234,48,0,0,141,32,16]},{"a":28227,"t":"byte","b":[226,112,0,141,19,73,46,234]},{"a":28235,"t":"byte","b":[48,0,0,141,88,16,226,112]},{"a":28243,"t":"byte","b":[0,141,19,129,46,236,112,0]},{"a":28251,"t":"byte","b":[141,19,185,46,236,112,0,141]},{"a":28259,"t":"byte","b":[19,241,46,236,0]},{"a":28264,"l":"cell_6e68","c":"Board cell 1 west and 5 south of the start cell (cell_64ae): record 65 of 129. Links: east cell_6c58, north cell_6e0b, west cell_6ec7, south none. It holds 7 items (6 blocks, 1 ramp), listed at cell_6e68_items.","t":"addr","b":[88,108],"oa":27736,"o":"cell_6c58","x":[27740,28177,28359]},{"a":28266,"t":"addr","b":[11,110],"oa":28171,"o":"cell_6e0b"},{"a":28268,"t":"addr","b":[199,110],"oa":28359,"o":"cell_6ec7"},{"a":28270,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28272,"l":"cell_6e68_items","c":"Item list of cell_6e68: 7 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6EA1. 1: block, x $A0-$13E, y $00-$50, height $60-$90, type $D1. 2: ramp, x $A0-$D0, y $50-$90, height $90 at y $50 falling to $00 at y $90, type $53. 3: block, x $60-$8D, y $00-$10, height $00-$30, type $E2. 4: block, x $50-$60, y $00-$80, height $00-$30, type $E2. 5: block, x $00-$60, y $88-$98, height $00-$30, type $E2. 6: block, x $50-$60, y $A0-$B0, height $00-$A0, type $E2. 7: block, x $00-$60, y $B0-$C0, height $70-$A0, type $E2.","t":"byte","b":[144,96,160,158,0,80,209,144]},{"a":28280,"t":"byte","b":[0,160,48,80,64,83,48,0]},{"a":28288,"t":"byte","b":[96,45,0,16,226,48,0,80]},{"a":28296,"t":"byte","b":[16,0,128,226,48,0,0,96]},{"a":28304,"t":"byte","b":[136,16,226,160,0,80,16,160]},{"a":28312,"t":"byte","b":[16,226,160,112,0,96,176,16]},{"a":28320,"t":"byte","b":[226,0]},{"a":28322,"l":"cell_6ea2","c":"Board cell 2 west and 4 south of the start cell (cell_64ae): record 66 of 129. Links: east cell_6e0b, north none, west cell_6efc, south cell_6ec7. It holds 4 items (4 blocks), listed at cell_6ea2_items.","t":"addr","b":[11,110],"oa":28171,"o":"cell_6e0b","x":[28175,28361,28412]},{"a":28324,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28326,"t":"addr","b":[252,110],"oa":28412,"o":"cell_6efc"},{"a":28328,"t":"addr","b":[199,110],"oa":28359,"o":"cell_6ec7"},{"a":28330,"l":"cell_6ea2_items","c":"Item list of cell_6ea2: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6EC6. 1: block, x $F0-$100, y $98-$180, height $00-$30, type $E2. 2: block, x $A8-$C0, y $10-$40, height $00-$70, type $EC. 3: block, x $C0-$100, y $20-$30, height $00-$30, type $E2. 4: block, x $10-$100, y $58-$68, height $00-$30, type $E2.","t":"byte","b":[48,0,240,16,152,232,226,112]},{"a":28338,"t":"byte","b":[0,168,24,16,48,236,48,0]},{"a":28346,"t":"byte","b":[192,64,32,16,226,48,0,16]},{"a":28354,"t":"byte","b":[240,88,16,226,0]},{"a":28359,"l":"cell_6ec7","c":"Board cell 2 west and 5 south of the start cell (cell_64ae): record 67 of 129. Links: east cell_6e68, north cell_6ea2, west none, south cell_6eec. It holds 4 items (4 blocks), listed at cell_6ec7_items.","t":"addr","b":[104,110],"oa":28264,"o":"cell_6e68","x":[28268,28328,28398]},{"a":28361,"t":"addr","b":[162,110],"oa":28322,"o":"cell_6ea2"},{"a":28363,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28365,"t":"addr","b":[236,110],"oa":28396,"o":"cell_6eec"},{"a":28367,"l":"cell_6ec7_items","c":"Item list of cell_6ec7: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6EEB. 1: block, x $00-$14, y $7A-$B6, height $00-$70, type $E8. 2: block, x $14-$100, y $88-$98, height $00-$30, type $E2. 3: block, x $77-$100, y $B0-$C0, height $70-$A0, type $E2. 4: block, x $70-$77, y $B0-$140, height $70-$A0, type $E2.","t":"byte","b":[112,0,0,20,122,60,232,48]},{"a":28375,"t":"byte","b":[0,20,236,136,16,226,160,112]},{"a":28383,"t":"byte","b":[119,137,176,16,226,160,112,112]},{"a":28391,"t":"byte","b":[7,176,144,226,0]},{"a":28396,"l":"cell_6eec","c":"Board cell 2 west and 6 south of the start cell (cell_64ae): record 68 of 129. Links: east none, north cell_6ec7, west cell_6f2f, south none. It holds 1 item (1 block), listed at cell_6eec_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[28365,28463]},{"a":28398,"t":"addr","b":[199,110],"oa":28359,"o":"cell_6ec7"},{"a":28400,"t":"addr","b":[47,111],"oa":28463,"o":"cell_6f2f"},{"a":28402,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28404,"l":"cell_6eec_items","c":"Item list of cell_6eec: 1 item of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6EFB. 1: block, x $00-$70, y $30-$40, height $00-$A0, type $E2.","t":"byte","b":[160,0,0,112,48,16,226,0]},{"a":28412,"l":"cell_6efc","c":"Board cell 3 west and 4 south of the start cell (cell_64ae): record 69 of 129. Links: east cell_6ea2, north none, west none, south none. It holds 6 items (5 blocks, 1 spindle), listed at cell_6efc_items.","t":"addr","b":[162,110],"oa":28322,"o":"cell_6ea2","x":[28326]},{"a":28414,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28416,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28418,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28420,"l":"cell_6efc_items","c":"Item list of cell_6efc: 6 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6F2E. 1: block, x $00-$40, y $E4-$100, height $00-$70, type $E9. 2: block, x $18-$28, y $50-$E4, height $00-$30, type $E2. 3: block, x $28-$B0, y $50-$60, height $00-$30, type $E2. 4: block, x $B0-$110, y $40-$70, height $00-$70, type $ED. 5: block, x $B0-$110, y $20-$40, height $00-$30, type $E0. 6: spindle, x $08-$14, y $08-$14, top $01.","t":"byte","b":[112,0,0,64,228,28,233,48]},{"a":28428,"t":"byte","b":[0,24,16,80,148,226,48,0]},{"a":28436,"t":"byte","b":[40,136,80,16,226,112,0,176]},{"a":28444,"t":"byte","b":[96,64,48,237,48,0,176,96]},{"a":28452,"t":"byte","b":[32,32,224,1,0,8,12,8]},{"a":28460,"t":"byte","b":[12,247,0]},{"a":28463,"l":"cell_6f2f","c":"Board cell 3 west and 6 south of the start cell (cell_64ae): record 70 of 129. Links: east cell_6eec, north none, west cell_6f46, south none. It holds 2 items (2 blocks), listed at cell_6f2f_items.","t":"addr","b":[236,110],"oa":28396,"o":"cell_6eec","x":[28400,28486]},{"a":28465,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28467,"t":"addr","b":[70,111],"oa":28486,"o":"cell_6f46"},{"a":28469,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28471,"l":"cell_6f2f_items","c":"Item list of cell_6f2f: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6F45. 1: block, x $60-$77, y $00-$50, height $00-$A2, type $EC. 2: block, x $77-$100, y $30-$40, height $00-$A0, type $E2.","t":"byte","b":[162,0,96,23,0,80,236,160]},{"a":28479,"t":"byte","b":[0,119,137,48,16,226,0]},{"a":28486,"l":"cell_6f46","c":"Board cell 4 west and 6 south of the start cell (cell_64ae): record 71 of 129. Links: east cell_6f2f, north cell_6f56, west none, south none. It holds 1 item (1 spindle), listed at cell_6f46_items.","t":"addr","b":[47,111],"oa":28463,"o":"cell_6f2f","x":[28467,28508]},{"a":28488,"t":"addr","b":[86,111],"oa":28502,"o":"cell_6f56"},{"a":28490,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28492,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28494,"l":"cell_6f46_items","c":"Item list of cell_6f46: 1 item of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6F55. 1: spindle, x $00-$0C, y $F4-$100, top $02.","t":"byte","b":[2,0,0,12,244,12,247,0]},{"a":28502,"l":"cell_6f56","c":"Board cell 4 west and 5 south of the start cell (cell_64ae): record 72 of 129. Links: east none, north none, west cell_6f6d, south cell_6f46. It holds 2 items (2 blocks), listed at cell_6f56_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[28488,28525]},{"a":28504,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28506,"t":"addr","b":[109,111],"oa":28525,"o":"cell_6f6d"},{"a":28508,"t":"addr","b":[70,111],"oa":28486,"o":"cell_6f46"},{"a":28510,"l":"cell_6f56_items","c":"Item list of cell_6f56: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6F6C. 1: block, x $70-$100, y $00-$C0, height $00-$F8, type $C0. 2: block, x $00-$70, y $B0-$C0, height $00-$F0, type $D8.","t":"byte","b":[248,0,112,144,0,192,192,240]},{"a":28518,"t":"byte","b":[0,0,112,176,16,216,0]},{"a":28525,"l":"cell_6f6d","c":"Board cell 5 west and 5 south of the start cell (cell_64ae): record 73 of 129. Links: east cell_6f56, north cell_6fbb, west cell_6f7d, south none. It holds 1 item (1 block), listed at cell_6f6d_items.","t":"addr","b":[86,111],"oa":28502,"o":"cell_6f56","x":[28506,28541,28609]},{"a":28527,"t":"addr","b":[187,111],"oa":28603,"o":"cell_6fbb"},{"a":28529,"t":"addr","b":[125,111],"oa":28541,"o":"cell_6f7d"},{"a":28531,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28533,"l":"cell_6f6d_items","c":"Item list of cell_6f6d: 1 item of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6F7C. 1: block, x $10-$100, y $B0-$C0, height $00-$F0, type $D8.","t":"byte","b":[240,0,16,240,176,16,216,0]},{"a":28541,"l":"cell_6f7d","c":"Board cell 6 west and 5 south of the start cell (cell_64ae): record 74 of 129. Links: east cell_6f6d, north cell_6fc4, west cell_6f94, south cell_7328. It holds 2 items (2 blocks), listed at cell_6f7d_items.","t":"addr","b":[109,111],"oa":28525,"o":"cell_6f6d","x":[28529,28564,28618,29482]},{"a":28543,"t":"addr","b":[196,111],"oa":28612,"o":"cell_6fc4"},{"a":28545,"t":"addr","b":[148,111],"oa":28564,"o":"cell_6f94"},{"a":28547,"t":"addr","b":[40,115],"oa":29480,"o":"cell_7328"},{"a":28549,"l":"cell_6f7d_items","c":"Item list of cell_6f7d: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6F93. 1: block, x $50-$110, y $B0-$C0, height $00-$F0, type $CC. 2: block, x $00-$50, y $B0-$100, height $30-$50, type $C2.","t":"byte","b":[240,0,80,192,176,16,204,80]},{"a":28557,"t":"byte","b":[48,0,80,176,80,194,0]},{"a":28564,"l":"cell_6f94","c":"Board cell 7 west and 5 south of the start cell (cell_64ae): record 75 of 129. Links: east cell_6f7d, north none, west cell_6fa4, south none. It holds 1 item (1 block), listed at cell_6f94_items.","t":"addr","b":[125,111],"oa":28541,"o":"cell_6f7d","x":[28545,28580]},{"a":28566,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28568,"t":"addr","b":[164,111],"oa":28580,"o":"cell_6fa4"},{"a":28570,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28572,"l":"cell_6f94_items","c":"Item list of cell_6f94: 1 item of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6FA3. 1: block, x $60-$150, y $B0-$C0, height $00-$30, type $D8.","t":"byte","b":[48,0,96,240,176,16,216,0]},{"a":28580,"l":"cell_6fa4","c":"Board cell 8 west and 5 south of the start cell (cell_64ae): record 76 of 129. Links: east cell_6f94, north none, west none, south cell_7025. It holds 2 items (2 blocks), listed at cell_6fa4_items.","t":"addr","b":[148,111],"oa":28564,"o":"cell_6f94","x":[28568,28711]},{"a":28582,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28584,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28586,"t":"addr","b":[37,112],"oa":28709,"o":"cell_7025"},{"a":28588,"l":"cell_6fa4_items","c":"Item list of cell_6fa4: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $6FBA. 1: block, x $90-$160, y $B0-$C0, height $00-$30, type $D8. 2: block, x $80-$90, y $B0-$150, height $00-$30, type $C0.","t":"byte","b":[48,0,144,208,176,16,216,48]},{"a":28596,"t":"byte","b":[0,128,16,176,160,192,0]},{"a":28603,"l":"cell_6fbb","c":"Board cell 5 west and 4 south of the start cell (cell_64ae): record 77 of 129. Links: east none, north cell_6fcd, west cell_6fc4, south cell_6f6d. It holds no items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[28527,28612,28627]},{"a":28605,"t":"addr","b":[205,111],"oa":28621,"o":"cell_6fcd"},{"a":28607,"t":"addr","b":[196,111],"oa":28612,"o":"cell_6fc4"},{"a":28609,"t":"addr","b":[109,111],"oa":28525,"o":"cell_6f6d"},{"a":28611,"l":"cell_6fbb_items","c":"Item list of cell_6fbb: empty. The single 0 at $6FC3 ends it: the cell has no items.","t":"byte","b":[0]},{"a":28612,"l":"cell_6fc4","c":"Board cell 6 west and 4 south of the start cell (cell_64ae): record 78 of 129. Links: east cell_6fbb, north cell_6fd6, west none, south cell_6f7d. It holds no items.","t":"addr","b":[187,111],"oa":28603,"o":"cell_6fbb","x":[28543,28607,28636]},{"a":28614,"t":"addr","b":[214,111],"oa":28630,"o":"cell_6fd6"},{"a":28616,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28618,"t":"addr","b":[125,111],"oa":28541,"o":"cell_6f7d"},{"a":28620,"l":"cell_6fc4_items","c":"Item list of cell_6fc4: empty. The single 0 at $6FCC ends it: the cell has no items.","t":"byte","b":[0]},{"a":28621,"l":"cell_6fcd","c":"Board cell 5 west and 3 south of the start cell (cell_64ae): record 79 of 129. Links: east none, north cell_7506, west cell_6fd6, south cell_6fbb. It holds no items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[28605,28630,29964]},{"a":28623,"t":"addr","b":[6,117],"oa":29958,"o":"cell_7506"},{"a":28625,"t":"addr","b":[214,111],"oa":28630,"o":"cell_6fd6"},{"a":28627,"t":"addr","b":[187,111],"oa":28603,"o":"cell_6fbb"},{"a":28629,"l":"cell_6fcd_items","c":"Item list of cell_6fcd: empty. The single 0 at $6FD5 ends it: the cell has no items.","t":"byte","b":[0]},{"a":28630,"l":"cell_6fd6","c":"Board cell 6 west and 3 south of the start cell (cell_64ae): record 80 of 129. Links: east cell_6fcd, north none, west none, south cell_6fc4. It holds 10 items (8 blocks, 1 ramp, 1 handler record), listed at cell_6fd6_items. It holds the board's only type $F6 item, the one drawn by $BB06; when the worm touches a type $F6 item, $9E6B puts $C0 in ($8058) and ($805B).","t":"addr","b":[205,111],"oa":28621,"o":"cell_6fcd","x":[28614,28625]},{"a":28632,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28634,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28636,"t":"addr","b":[196,111],"oa":28612,"o":"cell_6fc4"},{"a":28638,"l":"cell_6fd6_items","c":"Item list of cell_6fd6: 10 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7024. The list runs on through the handler word at $6FFE. 1: block, x $E8-$100, y $00-$80, height $00-$44, type $C0. 2: block, x $88-$A0, y $00-$80, height $00-$44, type $C0. 3: block, x $A0-$E8, y $68-$80, height $00-$44, type $C0. 4: block, x $A2-$E6, y $09-$5E, height $00-$03, type $F6. 5: handler record ($0A $0A $0A $0A), its handler word at $6FFE. 6: block, x $BC-$CC, y $40-$C0, height $44-$50, type $E2. 7: block, x $BE-$CA, y $35-$40, height $24-$51, type $EC. 8: block, x $50-$88, y $C0-$110, height $00-$20, type $E0. 9: ramp, x $00-$50, y $C0-$110, height $00 at x $00 rising to $50 at x $50, type $80. 10: block, x $88-$100, y $C0-$110, height $00-$50, type $E9.","t":"byte","b":[68,0,232,24,0,128,192,68]},{"a":28646,"t":"byte","b":[0,136,24,0,128,192,68,0]},{"a":28654,"t":"byte","b":[160,72,104,24,192,3,0,162]},{"a":28662,"t":"byte","b":[68,9,85,246,10,10,10,10]},{"a":28670,"l":"cell_6fd6_handler","c":"Handler word of the record at $6FFA in cell_6fd6: the bytes $0A $0A $0A $0A come before it and the $F7 tag after it. The tape image holds $BED1, and this is the only record on the board that uses it. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls it just before it lists the next item, with HL pointing at the record. $BED1 first sets the top of the third item after the record ($700F) to $20 while fewer than 50 spindles have been collected (($805B) below $32) and to $50 from then on. It then moves the item after the record ($7001) along y: the record's second byte is a pause counter and its third a target y. When the pause runs out a new target of $40-$5F is drawn from the random bytes; the item's y then closes a quarter of the gap each call, its y size is set so that its far edge stays at y $C0, and the y of the second item ($7008) is kept 11 less than its own; on arrival a new pause of 1-16 calls is set. While ($D42B) is not 0 the pause is held at $63.","t":"addr","b":[209,190],"oa":48849,"o":"disk_drive_handler"},{"a":28672,"l":"cell_6fd6_items_2","c":"Item list of cell_6fd6, carried on after the handler word at $6FFE: the $F7 tag that closes the record at $6FFA, then items 6 to 10 and the closing 0 at $7024. The items are described at cell_6fd6_items.","t":"byte","b":[247,80,68,188,16,64,128,226]},{"a":28680,"t":"byte","b":[81,36,190,12,53,11,236,32]},{"a":28688,"t":"byte","b":[0,80,56,192,80,224,80,0]},{"a":28696,"t":"byte","b":[0,80,192,80,128,80,0,136]},{"a":28704,"t":"byte","b":[120,192,80,233,0]},{"a":28709,"l":"cell_7025","c":"Board cell 8 west and 6 south of the start cell (cell_64ae): record 81 of 129. Links: east none, north cell_6fa4, west none, south cell_703c. It holds 2 items (1 block, 1 spindle), listed at cell_7025_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[28586,28734]},{"a":28711,"t":"addr","b":[164,111],"oa":28580,"o":"cell_6fa4"},{"a":28713,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28715,"t":"addr","b":[60,112],"oa":28732,"o":"cell_703c"},{"a":28717,"l":"cell_7025_items","c":"Item list of cell_7025: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $703B. 1: spindle, x $80-$8C, y $80-$8C, top $02. 2: block, x $00-$80, y $40-$50, height $00-$30, type $CC.","t":"byte","b":[2,0,128,12,128,12,247,48]},{"a":28725,"t":"byte","b":[0,0,128,64,16,204,0]},{"a":28732,"l":"cell_703c","c":"Board cell 8 west and 7 south of the start cell (cell_64ae): record 82 of 129. Links: east cell_7061, north cell_7025, west cell_707f, south cell_70c9. It holds 4 items (4 blocks), listed at cell_703c_items.","t":"addr","b":[97,112],"oa":28769,"o":"cell_7061","x":[28715,28773,28799,28875]},{"a":28734,"t":"addr","b":[37,112],"oa":28709,"o":"cell_7025"},{"a":28736,"t":"addr","b":[127,112],"oa":28799,"o":"cell_707f"},{"a":28738,"t":"addr","b":[201,112],"oa":28873,"o":"cell_70c9"},{"a":28740,"l":"cell_703c_items","c":"Item list of cell_703c: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7060. 1: block, x $20-$110, y $60-$70, height $00-$50, type $D8. 2: block, x $80-$120, y $C0-$D0, height $00-$50, type $D8. 3: block, x $70-$80, y $C0-$120, height $00-$50, type $C0. 4: block, x $10-$20, y $C0-$110, height $00-$50, type $D4.","t":"byte","b":[80,0,32,240,96,16,216,80]},{"a":28748,"t":"byte","b":[0,128,160,192,16,216,80,0]},{"a":28756,"t":"byte","b":[112,16,192,96,192,80,0,16]},{"a":28764,"t":"byte","b":[16,192,80,212,0]},{"a":28769,"l":"cell_7061","c":"Board cell 7 west and 7 south of the start cell (cell_64ae): record 83 of 129. Links: east cell_711a, north none, west cell_703c, south cell_70f5. It holds 3 items (3 blocks), listed at cell_7061_items.","t":"addr","b":[26,113],"oa":28954,"o":"cell_711a","x":[28732,28919,28958]},{"a":28771,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28773,"t":"addr","b":[60,112],"oa":28732,"o":"cell_703c"},{"a":28775,"t":"addr","b":[245,112],"oa":28917,"o":"cell_70f5"},{"a":28777,"l":"cell_7061_items","c":"Item list of cell_7061: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $707E. 1: block, x $10-$100, y $60-$70, height $00-$50, type $C8. 2: block, x $20-$110, y $C0-$D0, height $00-$50, type $D8. 3: block, x $D8-$100, y $00-$60, height $00-$50, type $D4.","t":"byte","b":[80,0,16,240,96,16,200,80]},{"a":28785,"t":"byte","b":[0,32,240,192,16,216,80,0]},{"a":28793,"t":"byte","b":[216,40,0,96,212,0]},{"a":28799,"l":"cell_707f","c":"Board cell 9 west and 7 south of the start cell (cell_64ae): record 84 of 129. Links: east cell_703c, north none, west none, south cell_70ab. It holds 5 items (3 blocks, 1 ramp, 1 spindle), listed at cell_707f_items.","t":"addr","b":[60,112],"oa":28732,"o":"cell_703c","x":[28736,28845]},{"a":28801,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28803,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28805,"t":"addr","b":[171,112],"oa":28843,"o":"cell_70ab"},{"a":28807,"l":"cell_707f_items","c":"Item list of cell_707f: 5 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $70AA. 1: block, x $80-$120, y $60-$70, height $00-$50, type $D8. 2: block, x $60-$80, y $60-$D0, height $00-$90, type $C0. 3: block, x $80-$110, y $C0-$D0, height $00-$50, type $D8. 4: ramp, x $60-$A0, y $D0-$110, height $30 at x $60 falling to $00 at x $A0, type $90. 5: spindle, x $A0-$AC, y $80-$8C, top $02.","t":"byte","b":[80,0,128,160,96,16,216,144]},{"a":28815,"t":"byte","b":[0,96,32,96,112,192,80,0]},{"a":28823,"t":"byte","b":[128,144,192,16,216,48,0,96]},{"a":28831,"t":"byte","b":[64,208,64,144,2,0,160,12]},{"a":28839,"t":"byte","b":[128,12,247,0]},{"a":28843,"l":"cell_70ab","c":"Board cell 9 west and 8 south of the start cell (cell_64ae): record 85 of 129. Links: east cell_70c9, north cell_707f, west none, south cell_713a. It holds 3 items (1 block, 2 spindles), listed at cell_70ab_items.","t":"addr","b":[201,112],"oa":28873,"o":"cell_70c9","x":[28805,28877,28988]},{"a":28845,"t":"addr","b":[127,112],"oa":28799,"o":"cell_707f"},{"a":28847,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28849,"t":"addr","b":[58,113],"oa":28986,"o":"cell_713a"},{"a":28851,"l":"cell_70ab_items","c":"Item list of cell_70ab: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $70C8. 1: block, x $60-$80, y $10-$100, height $00-$50, type $D4. 2: spindle, x $A0-$AC, y $00-$0C, top $01. 3: spindle, x $A0-$AC, y $80-$8C, top $02.","t":"byte","b":[80,0,96,32,16,240,212,1]},{"a":28859,"t":"byte","b":[0,160,12,0,12,247,2,0]},{"a":28867,"t":"byte","b":[160,12,128,12,247,0]},{"a":28873,"l":"cell_70c9","c":"Board cell 8 west and 8 south of the start cell (cell_64ae): record 86 of 129. Links: east cell_70f5, north cell_703c, west cell_70ab, south cell_7166. It holds 5 items (4 blocks, 1 spindle), listed at cell_70c9_items.","t":"addr","b":[245,112],"oa":28917,"o":"cell_70f5","x":[28738,28843,28921,29032]},{"a":28875,"t":"addr","b":[60,112],"oa":28732,"o":"cell_703c"},{"a":28877,"t":"addr","b":[171,112],"oa":28843,"o":"cell_70ab"},{"a":28879,"t":"addr","b":[102,113],"oa":29030,"o":"cell_7166"},{"a":28881,"l":"cell_70c9_items","c":"Item list of cell_70c9: 5 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $70F4. 1: block, x $70-$80, y $20-$B0, height $00-$50, type $DC. 2: block, x $70-$150, y $B0-$C0, height $00-$50, type $C0. 3: block, x $10-$20, y $10-$F0, height $00-$50, type $D0. 4: block, x $10-$100, y $F0-$100, height $00-$50, type $C0. 5: spindle, x $A0-$AC, y $00-$0C, top $01.","t":"byte","b":[80,0,112,16,32,144,220,80]},{"a":28889,"t":"byte","b":[0,112,224,176,16,192,80,0]},{"a":28897,"t":"byte","b":[16,16,16,224,208,80,0,16]},{"a":28905,"t":"byte","b":[240,240,16,192,1,0,160,12]},{"a":28913,"t":"byte","b":[0,12,247,0]},{"a":28917,"l":"cell_70f5","c":"Board cell 7 west and 8 south of the start cell (cell_64ae): record 87 of 129. Links: east cell_712a, north cell_7061, west cell_70c9, south cell_717d. It holds 4 items (4 blocks), listed at cell_70f5_items.","t":"addr","b":[42,113],"oa":28970,"o":"cell_712a","x":[28775,28873,28974,29055]},{"a":28919,"t":"addr","b":[97,112],"oa":28769,"o":"cell_7061"},{"a":28921,"t":"addr","b":[201,112],"oa":28873,"o":"cell_70c9"},{"a":28923,"t":"addr","b":[125,113],"oa":29053,"o":"cell_717d"},{"a":28925,"l":"cell_70f5_items","c":"Item list of cell_70f5: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7119. 1: block, x $40-$120, y $00-$20, height $00-$50, type $C0. 2: block, x $10-$100, y $60-$70, height $00-$50, type $C0. 3: block, x $B0-$C0, y $70-$100, height $00-$50, type $D0. 4: block, x $00-$B0, y $F0-$100, height $00-$50, type $D8.","t":"byte","b":[80,0,64,224,0,32,192,80]},{"a":28933,"t":"byte","b":[0,16,240,96,16,192,80,0]},{"a":28941,"t":"byte","b":[176,16,112,144,208,80,0,0]},{"a":28949,"t":"byte","b":[176,240,16,216,0]},{"a":28954,"l":"cell_711a","c":"Board cell 6 west and 7 south of the start cell (cell_64ae): record 88 of 129. Links: east none, north cell_7328, west cell_7061, south cell_712a. It holds 1 item (1 block), listed at cell_711a_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[28769,28972,29486]},{"a":28956,"t":"addr","b":[40,115],"oa":29480,"o":"cell_7328"},{"a":28958,"t":"addr","b":[97,112],"oa":28769,"o":"cell_7061"},{"a":28960,"t":"addr","b":[42,113],"oa":28970,"o":"cell_712a"},{"a":28962,"l":"cell_711a_items","c":"Item list of cell_711a: 1 item of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7129. 1: block, x $10-$100, y $C0-$D0, height $00-$50, type $C8.","t":"byte","b":[80,0,16,240,192,16,200,0]},{"a":28970,"l":"cell_712a","c":"Board cell 6 west and 8 south of the start cell (cell_64ae): record 89 of 129. Links: east none, north cell_711a, west cell_70f5, south cell_719b. It holds 1 item (1 block), listed at cell_712a_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[28917,28960,29085]},{"a":28972,"t":"addr","b":[26,113],"oa":28954,"o":"cell_711a"},{"a":28974,"t":"addr","b":[245,112],"oa":28917,"o":"cell_70f5"},{"a":28976,"t":"addr","b":[155,113],"oa":29083,"o":"cell_719b"},{"a":28978,"l":"cell_712a_items","c":"Item list of cell_712a: 1 item of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7139. 1: block, x $20-$40, y $10-$100, height $00-$50, type $C0.","t":"byte","b":[80,0,32,32,16,240,192,0]},{"a":28986,"l":"cell_713a","c":"Board cell 9 west and 9 south of the start cell (cell_64ae): record 90 of 129. Links: east cell_7166, north cell_70ab, west none, south cell_71ab. It holds 5 items (4 blocks, 1 ramp), listed at cell_713a_items.","t":"addr","b":[102,113],"oa":29030,"o":"cell_7166","x":[28849,29034,29101]},{"a":28988,"t":"addr","b":[171,112],"oa":28843,"o":"cell_70ab"},{"a":28990,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":28992,"t":"addr","b":[171,113],"oa":29099,"o":"cell_71ab"},{"a":28994,"l":"cell_713a_items","c":"Item list of cell_713a: 5 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7165. 1: block, x $60-$70, y $00-$40, height $00-$50, type $DC. 2: block, x $60-$100, y $40-$50, height $00-$50, type $C0. 3: ramp, x $60-$100, y $50-$80, height $00 at x $60 rising to $70 at x $100, type $82. 4: block, x $60-$100, y $80-$90, height $00-$50, type $C0. 5: block, x $60-$70, y $90-$120, height $00-$50, type $C0.","t":"byte","b":[80,0,96,16,0,64,220,80]},{"a":29002,"t":"byte","b":[0,96,160,64,16,192,112,0]},{"a":29010,"t":"byte","b":[96,160,80,48,130,80,0,96]},{"a":29018,"t":"byte","b":[160,128,16,192,80,0,96,16]},{"a":29026,"t":"byte","b":[144,144,192,0]},{"a":29030,"l":"cell_7166","c":"Board cell 8 west and 9 south of the start cell (cell_64ae): record 91 of 129. Links: east cell_717d, north cell_70c9, west cell_713a, south cell_71c2. It holds 2 items (2 blocks), listed at cell_7166_items.","t":"addr","b":[125,113],"oa":29053,"o":"cell_717d","x":[28879,28986,29057,29124]},{"a":29032,"t":"addr","b":[201,112],"oa":28873,"o":"cell_70c9"},{"a":29034,"t":"addr","b":[58,113],"oa":28986,"o":"cell_713a"},{"a":29036,"t":"addr","b":[194,113],"oa":29122,"o":"cell_71c2"},{"a":29038,"l":"cell_7166_items","c":"Item list of cell_7166: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $717C. 1: block, x $00-$E0, y $50-$80, height $50-$70, type $D8. 2: block, x $E0-$140, y $50-$80, height $50-$70, type $D8.","t":"byte","b":[112,80,0,224,80,48,216,112]},{"a":29046,"t":"byte","b":[80,224,96,80,48,216,0]},{"a":29053,"l":"cell_717d","c":"Board cell 7 west and 9 south of the start cell (cell_64ae): record 92 of 129. Links: east cell_719b, north cell_70f5, west cell_7166, south cell_71e7. It holds 3 items (3 blocks), listed at cell_717d_items.","t":"addr","b":[155,113],"oa":29083,"o":"cell_719b","x":[28923,29030,29087,29161]},{"a":29055,"t":"addr","b":[245,112],"oa":28917,"o":"cell_70f5"},{"a":29057,"t":"addr","b":[102,113],"oa":29030,"o":"cell_7166"},{"a":29059,"t":"addr","b":[231,113],"oa":29159,"o":"cell_71e7"},{"a":29061,"l":"cell_717d_items","c":"Item list of cell_717d: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $719A. 1: block, x $40-$70, y $50-$130, height $50-$70, type $C0. 2: block, x $B0-$130, y $80-$90, height $00-$50, type $C0. 3: block, x $B0-$C0, y $90-$180, height $00-$50, type $D0.","t":"byte","b":[112,80,64,48,80,224,192,80]},{"a":29069,"t":"byte","b":[0,176,128,128,16,192,80,0]},{"a":29077,"t":"byte","b":[176,16,144,240,208,0]},{"a":29083,"l":"cell_719b","c":"Board cell 6 west and 9 south of the start cell (cell_64ae): record 93 of 129. Links: east none, north cell_712a, west cell_717d, south cell_7205. It holds 1 item (1 block), listed at cell_719b_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[28976,29053,29191]},{"a":29085,"t":"addr","b":[42,113],"oa":28970,"o":"cell_712a"},{"a":29087,"t":"addr","b":[125,113],"oa":29053,"o":"cell_717d"},{"a":29089,"t":"addr","b":[5,114],"oa":29189,"o":"cell_7205"},{"a":29091,"l":"cell_719b_items","c":"Item list of cell_719b: 1 item of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $71AA. 1: block, x $20-$30, y $00-$80, height $00-$50, type $D0.","t":"byte","b":[80,0,32,16,0,128,208,0]},{"a":29099,"l":"cell_71ab","c":"Board cell 9 west and 10 south of the start cell (cell_64ae): record 94 of 129. Links: east cell_71c2, north cell_713a, west none, south cell_722a. It holds 2 items (2 blocks), listed at cell_71ab_items.","t":"addr","b":[194,113],"oa":29122,"o":"cell_71c2","x":[28992,29126,29228]},{"a":29101,"t":"addr","b":[58,113],"oa":28986,"o":"cell_713a"},{"a":29103,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29105,"t":"addr","b":[42,114],"oa":29226,"o":"cell_722a"},{"a":29107,"l":"cell_71ab_items","c":"Item list of cell_71ab: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $71C1. 1: block, x $60-$70, y $20-$110, height $00-$50, type $DC. 2: block, x $F0-$100, y $20-$110, height $00-$50, type $D4.","t":"byte","b":[80,0,96,16,32,240,220,80]},{"a":29115,"t":"byte","b":[0,240,16,32,240,212,0]},{"a":29122,"l":"cell_71c2","c":"Board cell 8 west and 10 south of the start cell (cell_64ae): record 95 of 129. Links: east cell_71e7, north cell_7166, west cell_71ab, south cell_724f. It holds 4 items (4 blocks), listed at cell_71c2_items.","t":"addr","b":[231,113],"oa":29159,"o":"cell_71e7","x":[29036,29099,29163,29265]},{"a":29124,"t":"addr","b":[102,113],"oa":29030,"o":"cell_7166"},{"a":29126,"t":"addr","b":[171,113],"oa":29099,"o":"cell_71ab"},{"a":29128,"t":"addr","b":[79,114],"oa":29263,"o":"cell_724f"},{"a":29130,"l":"cell_71c2_items","c":"Item list of cell_71c2: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $71E6. 1: block, x $00-$C0, y $20-$30, height $00-$50, type $C8. 2: block, x $60-$E0, y $50-$60, height $00-$50, type $C8. 3: block, x $60-$70, y $B0-$120, height $00-$50, type $D4. 4: block, x $D0-$E0, y $60-$110, height $00-$50, type $DC.","t":"byte","b":[80,0,0,192,32,16,200,80]},{"a":29138,"t":"byte","b":[0,96,128,80,16,200,80,0]},{"a":29146,"t":"byte","b":[96,16,176,112,212,80,0,208]},{"a":29154,"t":"byte","b":[16,96,176,220,0]},{"a":29159,"l":"cell_71e7","c":"Board cell 7 west and 10 south of the start cell (cell_64ae): record 96 of 129. Links: east cell_7205, north cell_717d, west cell_71c2, south cell_726d. It holds 3 items (2 blocks, 1 ramp), listed at cell_71e7_items.","t":"addr","b":[5,114],"oa":29189,"o":"cell_7205","x":[29059,29122,29193,29295]},{"a":29161,"t":"addr","b":[125,113],"oa":29053,"o":"cell_717d"},{"a":29163,"t":"addr","b":[194,113],"oa":29122,"o":"cell_71c2"},{"a":29165,"t":"addr","b":[109,114],"oa":29293,"o":"cell_726d"},{"a":29167,"l":"cell_71e7_items","c":"Item list of cell_71e7: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7204. 1: block, x $40-$130, y $30-$60, height $50-$70, type $CC. 2: block, x $B0-$C0, y $80-$F0, height $00-$50, type $D0. 3: ramp, x $C0-$110, y $C0-$F0, height $00 at y $C0 rising to $30 at y $F0, type $44.","t":"byte","b":[112,80,64,240,48,48,204,80]},{"a":29175,"t":"byte","b":[0,176,16,128,112,208,48,0]},{"a":29183,"t":"byte","b":[192,80,192,48,68,0]},{"a":29189,"l":"cell_7205","c":"Board cell 6 west and 10 south of the start cell (cell_64ae): record 97 of 129. Links: east cell_72a2, north cell_719b, west cell_71e7, south cell_727d. It holds 4 items (4 blocks), listed at cell_7205_items.","t":"addr","b":[162,114],"oa":29346,"o":"cell_72a2","x":[29089,29159,29311,29350]},{"a":29191,"t":"addr","b":[155,113],"oa":29083,"o":"cell_719b"},{"a":29193,"t":"addr","b":[231,113],"oa":29159,"o":"cell_71e7"},{"a":29195,"t":"addr","b":[125,114],"oa":29309,"o":"cell_727d"},{"a":29197,"l":"cell_7205_items","c":"Item list of cell_7205: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7229. 1: block, x $10-$100, y $00-$20, height $00-$50, type $C0. 2: block, x $10-$20, y $20-$100, height $00-$50, type $DC. 3: block, x $30-$100, y $30-$60, height $50-$70, type $DC. 4: block, x $C0-$D0, y $A0-$130, height $00-$50, type $C0.","t":"byte","b":[80,0,16,240,0,32,192,80]},{"a":29205,"t":"byte","b":[0,16,16,32,224,220,112,80]},{"a":29213,"t":"byte","b":[48,208,48,48,220,80,0,192]},{"a":29221,"t":"byte","b":[16,160,144,192,0]},{"a":29226,"l":"cell_722a","c":"Board cell 9 west and 11 south of the start cell (cell_64ae): record 98 of 129. Links: east cell_724f, north cell_71ab, west none, south cell_72b9. It holds 4 items (3 blocks, 1 spindle), listed at cell_722a_items.","t":"addr","b":[79,114],"oa":29263,"o":"cell_724f","x":[29105,29267,29371]},{"a":29228,"t":"addr","b":[171,113],"oa":29099,"o":"cell_71ab"},{"a":29230,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29232,"t":"addr","b":[185,114],"oa":29369,"o":"cell_72b9"},{"a":29234,"l":"cell_722a_items","c":"Item list of cell_722a: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $724E. 1: block, x $60-$70, y $10-$B0, height $00-$50, type $DC. 2: block, x $00-$70, y $B0-$C0, height $00-$50, type $C0. 3: block, x $F0-$100, y $10-$100, height $00-$50, type $DC. 4: spindle, x $2A-$36, y $80-$8C, top $02.","t":"byte","b":[80,0,96,16,16,160,220,80]},{"a":29242,"t":"byte","b":[0,0,112,176,16,192,80,0]},{"a":29250,"t":"byte","b":[240,16,16,240,220,2,0,42]},{"a":29258,"t":"byte","b":[12,128,12,247,0]},{"a":29263,"l":"cell_724f","c":"Board cell 8 west and 11 south of the start cell (cell_64ae): record 99 of 129. Links: east cell_726d, north cell_71c2, west cell_722a, south cell_72e5. It holds 3 items (3 blocks), listed at cell_724f_items.","t":"addr","b":[109,114],"oa":29293,"o":"cell_726d","x":[29128,29226,29297,29415]},{"a":29265,"t":"addr","b":[194,113],"oa":29122,"o":"cell_71c2"},{"a":29267,"t":"addr","b":[42,114],"oa":29226,"o":"cell_722a"},{"a":29269,"t":"addr","b":[229,114],"oa":29413,"o":"cell_72e5"},{"a":29271,"l":"cell_724f_items","c":"Item list of cell_724f: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $726C. 1: block, x $60-$70, y $20-$110, height $00-$50, type $DC. 2: block, x $D0-$E0, y $10-$90, height $00-$50, type $DC. 3: block, x $D0-$180, y $90-$A0, height $00-$50, type $C0.","t":"byte","b":[80,0,96,16,32,240,220,80]},{"a":29279,"t":"byte","b":[0,208,16,16,128,220,80,0]},{"a":29287,"t":"byte","b":[208,176,144,16,192,0]},{"a":29293,"l":"cell_726d","c":"Board cell 7 west and 11 south of the start cell (cell_64ae): record 100 of 129. Links: east cell_727d, north cell_71e7, west cell_724f, south cell_730a. It holds 1 item (1 block), listed at cell_726d_items.","t":"addr","b":[125,114],"oa":29309,"o":"cell_727d","x":[29165,29263,29313,29452]},{"a":29295,"t":"addr","b":[231,113],"oa":29159,"o":"cell_71e7"},{"a":29297,"t":"addr","b":[79,114],"oa":29263,"o":"cell_724f"},{"a":29299,"t":"addr","b":[10,115],"oa":29450,"o":"cell_730a"},{"a":29301,"l":"cell_726d_items","c":"Item list of cell_726d: 1 item of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $727C. 1: block, x $70-$80, y $90-$170, height $00-$50, type $DC.","t":"byte","b":[80,0,112,16,144,224,220,0]},{"a":29309,"l":"cell_727d","c":"Board cell 6 west and 11 south of the start cell (cell_64ae): record 101 of 129. Links: east none, north cell_7205, west cell_726d, south none. It holds 4 items (2 blocks, 1 ramp, 1 handler record), listed at cell_727d_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[29195,29293]},{"a":29311,"t":"addr","b":[5,114],"oa":29189,"o":"cell_7205"},{"a":29313,"t":"addr","b":[109,114],"oa":29293,"o":"cell_726d"},{"a":29315,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29317,"l":"cell_727d_items","c":"Item list of cell_727d: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $72A1. The list runs on through the handler word at $7297. 1: ramp, x $D0-$100, y $00-$40, height $00 at y $00 rising to $30 at y $40, type $40. 2: block, x $10-$C0, y $00-$30, height $00-$50, type $CC. 3: handler record ($64 $46 $01 $14), its handler word at $7297. 4: block, x $B0-$E0, y $B0-$E0, height $00-$30, type $F4.","t":"byte","b":[48,0,208,48,0,64,64,80]},{"a":29325,"t":"byte","b":[0,16,176,0,48,204,100,70]},{"a":29333,"t":"byte","b":[1,20]},{"a":29335,"l":"cell_727d_handler","c":"Handler word of the record at $7293 in cell_727d: the four parameter bytes $64 $46 $01 $14 come before it and the $F7 tag after it. The tape image holds $BD90 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($729A, a type $F4 block at x $B0-$E0, y $B0-$E0), with HL pointing at the record. $BD90 takes $01 off that item's top each call until it would fall below $14, sets it to $14 and, because the item is type $F4, writes $BE07 here and a random 5 to 36 into the record's first byte. $BE07 counts that byte down by one a call; when it runs out it adds $01 to the top each call up to $46, and once there, if ($8066) is not 0 and ($7C71) is below $0C, it takes one off ($8066), adds a type $F3 object over the middle of the item and writes $BD90 back. The first byte's value in the image, $64, is replaced before $BE07 ever reads it.","t":"addr","b":[144,189],"oa":48528,"o":"lower_item_handler"},{"a":29337,"l":"cell_727d_items_2","c":"Item list of cell_727d, carried on after the handler word at $7297: the $F7 tag that closes the record at $7293, then item 4 and the closing 0 at $72A1. The items are described at cell_727d_items.","t":"byte","b":[247,48,0,176,48,176,48,244]},{"a":29345,"t":"byte","b":[0]},{"a":29346,"l":"cell_72a2","c":"Board cell 5 west and 10 south of the start cell (cell_64ae): record 102 of 129. Links: east none, north none, west cell_7205, south none. It holds 2 items (1 ramp, 1 spindle), listed at cell_72a2_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[29189]},{"a":29348,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29350,"t":"addr","b":[5,114],"oa":29189,"o":"cell_7205"},{"a":29352,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29354,"l":"cell_72a2_items","c":"Item list of cell_72a2: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $72B8. 1: ramp, x $00-$70, y $30-$60, height $70 at x $00 falling to $00 at x $70, type $90. 2: spindle, x $F0-$FC, y $22-$2E, top $02.","t":"byte","b":[112,0,0,112,48,48,144,2]},{"a":29362,"t":"byte","b":[0,240,12,34,12,247,0]},{"a":29369,"l":"cell_72b9","c":"Board cell 9 west and 12 south of the start cell (cell_64ae): record 103 of 129. Links: east cell_72e5, north cell_722a, west none, south none. It holds 5 items (2 blocks, 3 spindles), listed at cell_72b9_items.","t":"addr","b":[229,114],"oa":29413,"o":"cell_72e5","x":[29232,29417]},{"a":29371,"t":"addr","b":[42,114],"oa":29226,"o":"cell_722a"},{"a":29373,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29375,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29377,"l":"cell_72b9_items","c":"Item list of cell_72b9: 5 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $72E4. 1: block, x $F0-$100, y $00-$A0, height $00-$50, type $D0. 2: block, x $00-$F0, y $90-$A0, height $00-$50, type $CC. 3: spindle, x $2A-$36, y $00-$0C, top $01. 4: spindle, x $2A-$36, y $80-$8C, top $02. 5: spindle, x $2A-$36, y $E0-$EC, top $01.","t":"byte","b":[80,0,240,16,0,160,208,80]},{"a":29385,"t":"byte","b":[0,0,240,144,16,204,1,0]},{"a":29393,"t":"byte","b":[42,12,0,12,247,2,0,42]},{"a":29401,"t":"byte","b":[12,128,12,247,1,0,42,12]},{"a":29409,"t":"byte","b":[224,12,247,0]},{"a":29413,"l":"cell_72e5","c":"Board cell 8 west and 12 south of the start cell (cell_64ae): record 104 of 129. Links: east cell_730a, north cell_724f, west cell_72b9, south none. It holds 4 items (2 blocks, 2 spindles), listed at cell_72e5_items.","t":"addr","b":[10,115],"oa":29450,"o":"cell_730a","x":[29269,29369,29454]},{"a":29415,"t":"addr","b":[79,114],"oa":29263,"o":"cell_724f"},{"a":29417,"t":"addr","b":[185,114],"oa":29369,"o":"cell_72b9"},{"a":29419,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29421,"l":"cell_72e5_items","c":"Item list of cell_72e5: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7309. 1: block, x $00-$80, y $90-$A0, height $00-$50, type $D0. 2: block, x $70-$120, y $00-$10, height $00-$50, type $C8. 3: spindle, x $2A-$36, y $E0-$EC, top $02. 4: spindle, x $E0-$EC, y $E0-$EC, top $01.","t":"byte","b":[80,0,0,128,144,16,208,80]},{"a":29429,"t":"byte","b":[0,112,176,0,16,200,2,0]},{"a":29437,"t":"byte","b":[42,12,224,12,247,1,0,224]},{"a":29445,"t":"byte","b":[12,224,12,247,0]},{"a":29450,"l":"cell_730a","c":"Board cell 7 west and 12 south of the start cell (cell_64ae): record 105 of 129. Links: east none, north cell_726d, west cell_72e5, south none. It holds 3 items (2 blocks, 1 spindle), listed at cell_730a_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[29299,29413]},{"a":29452,"t":"addr","b":[109,114],"oa":29293,"o":"cell_726d"},{"a":29454,"t":"addr","b":[229,114],"oa":29413,"o":"cell_72e5"},{"a":29456,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29458,"l":"cell_730a_items","c":"Item list of cell_730a: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7327. 1: block, x $10-$20, y $10-$100, height $00-$50, type $D0. 2: block, x $70-$100, y $60-$70, height $00-$50, type $C0. 3: spindle, x $E0-$EC, y $E0-$EC, top $02.","t":"byte","b":[80,0,16,16,16,240,208,80]},{"a":29466,"t":"byte","b":[0,112,144,96,16,192,2,0]},{"a":29474,"t":"byte","b":[224,12,224,12,247,0]},{"a":29480,"l":"cell_7328","c":"Board cell 6 west and 6 south of the start cell (cell_64ae): record 106 of 129. Links: east none, north cell_6f7d, west none, south cell_711a. It holds 3 items (2 blocks, 1 ramp), listed at cell_7328_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[28547,28956]},{"a":29482,"t":"addr","b":[125,111],"oa":28541,"o":"cell_6f7d"},{"a":29484,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29486,"t":"addr","b":[26,113],"oa":28954,"o":"cell_711a"},{"a":29488,"l":"cell_7328_items","c":"Item list of cell_7328: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7345. 1: ramp, x $00-$50, y $00-$50, height $50 at y $00 falling to $00 at y $50, type $56. 2: block, x $50-$60, y $00-$90, height $00-$50, type $C0. 3: block, x $60-$100, y $80-$90, height $00-$50, type $C8.","t":"byte","b":[80,0,0,80,0,80,86,80]},{"a":29496,"t":"byte","b":[0,80,16,0,144,192,80,0]},{"a":29504,"t":"byte","b":[96,160,128,16,200,0]},{"a":29510,"l":"cell_7346","c":"Board cell 1 west of the start cell (cell_64ae): record 107 of 129. Links: east cell_64ae, north none, west cell_7399, south cell_7364. It holds 3 items (1 block, 1 ramp, 1 spindle), listed at cell_7346_items.","t":"addr","b":[174,100],"oa":25774,"o":"cell_64ae","x":[25622,25672,25778,29542,29593]},{"a":29512,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29514,"t":"addr","b":[153,115],"oa":29593,"o":"cell_7399"},{"a":29516,"t":"addr","b":[100,115],"oa":29540,"o":"cell_7364"},{"a":29518,"l":"cell_7346_items","c":"Item list of cell_7346: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7363. 1: block, x $30-$70, y $30-$70, height $30-$50, type $C2. 2: ramp, x $70-$F0, y $30-$70, height $50 at x $70 falling to $00 at x $F0, type $92. 3: spindle, x $4A-$56, y $4A-$56, top $52.","t":"byte","b":[80,48,48,64,48,64,194,80]},{"a":29526,"t":"byte","b":[0,112,128,48,64,146,82,80]},{"a":29534,"t":"byte","b":[74,12,74,12,247,0]},{"a":29540,"l":"cell_7364","c":"Board cell 1 west and 1 south of the start cell (cell_64ae): record 108 of 129. Links: east cell_6464, north cell_7346, west cell_73cc, south cell_7382. It holds 3 items (3 blocks), listed at cell_7364_items.","t":"addr","b":[100,100],"oa":25700,"o":"cell_6464","x":[25632,25682,25704,29516,29572,29644]},{"a":29542,"t":"addr","b":[70,115],"oa":29510,"o":"cell_7346"},{"a":29544,"t":"addr","b":[204,115],"oa":29644,"o":"cell_73cc"},{"a":29546,"t":"addr","b":[130,115],"oa":29570,"o":"cell_7382"},{"a":29548,"l":"cell_7364_items","c":"Item list of cell_7364: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7381. 1: block, x $80-$100, y $50-$60, height $00-$30, type $E2. 2: block, x $70-$80, y $50-$60, height $00-$90, type $E2. 3: block, x $00-$70, y $50-$60, height $60-$90, type $E2.","t":"byte","b":[48,0,128,128,80,16,226,144]},{"a":29556,"t":"byte","b":[0,112,16,80,16,226,144,96]},{"a":29564,"t":"byte","b":[0,112,80,16,226,0]},{"a":29570,"l":"cell_7382","c":"Board cell 1 west and 2 south of the start cell (cell_64ae): record 109 of 129. Links: east cell_654b, north cell_7364, west cell_73ea, south none. It holds 2 items (1 block, 1 ramp), listed at cell_7382_items.","t":"addr","b":[75,101],"oa":25931,"o":"cell_654b","x":[25640,25642,25692,25935,29546,29674]},{"a":29572,"t":"addr","b":[100,115],"oa":29540,"o":"cell_7364"},{"a":29574,"t":"addr","b":[234,115],"oa":29674,"o":"cell_73ea"},{"a":29576,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29578,"l":"cell_7382_items","c":"Item list of cell_7382: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7398. 1: block, x $00-$80, y $70-$B0, height $20-$40, type $C0. 2: ramp, x $30-$80, y $20-$70, height $00 at y $20 rising to $40 at y $70, type $44.","t":"byte","b":[64,32,0,128,112,64,192,64]},{"a":29586,"t":"byte","b":[0,48,80,32,80,68,0]},{"a":29593,"l":"cell_7399","c":"Board cell 2 west of the start cell (cell_64ae): record 110 of 129. Links: east cell_7346, north none, west cell_740f, south cell_73cc. It holds 6 items (1 block, 2 ramps, 1 wedge, 2 spindles), listed at cell_7399_items.","t":"addr","b":[70,115],"oa":29510,"o":"cell_7346","x":[25620,25670,29514,29646,29711]},{"a":29595,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29597,"t":"addr","b":[15,116],"oa":29711,"o":"cell_740f"},{"a":29599,"t":"addr","b":[204,115],"oa":29644,"o":"cell_73cc"},{"a":29601,"l":"cell_7399_items","c":"Item list of cell_7399: 6 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $73CB. 1: ramp, x $58-$A8, y $00-$30, height $30 at x $58 falling to $00 at x $A8, type $90. 2: ramp, x $22-$58, y $00-$55, height $00 at y $00 rising to $66 at y $55, type $40. 3: block, x $22-$58, y $55-$B5, height $40-$66, type $DC. 4: wedge with its square corner to the north-west, x $22-$58, y $B5-$100, height $40-$66, type $14. 5: spindle, x $37-$43, y $90-$9C, top $67. 6: spindle, x $1E-$2A, y $FA-$106, top $68.","t":"byte","b":[48,0,88,80,0,48,144,102]},{"a":29609,"t":"byte","b":[0,34,54,0,85,64,102,64]},{"a":29617,"t":"byte","b":[34,54,85,96,220,102,64,34]},{"a":29625,"t":"byte","b":[54,181,75,20,103,102,55,12]},{"a":29633,"t":"byte","b":[144,12,247,104,102,30,12,250]},{"a":29641,"t":"byte","b":[12,247,0]},{"a":29644,"l":"cell_73cc","c":"Board cell 2 west and 1 south of the start cell (cell_64ae): record 111 of 129. Links: east cell_7364, north cell_7399, west cell_741f, south cell_73ea. It holds 3 items (3 blocks), listed at cell_73cc_items.","t":"addr","b":[100,115],"oa":29540,"o":"cell_7364","x":[25630,25680,29544,29599,29676,29727]},{"a":29646,"t":"addr","b":[153,115],"oa":29593,"o":"cell_7399"},{"a":29648,"t":"addr","b":[31,116],"oa":29727,"o":"cell_741f"},{"a":29650,"t":"addr","b":[234,115],"oa":29674,"o":"cell_73ea"},{"a":29652,"l":"cell_73cc_items","c":"Item list of cell_73cc: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $73E9. 1: block, x $90-$100, y $50-$60, height $60-$90, type $E2. 2: block, x $80-$90, y $50-$60, height $00-$90, type $E2. 3: block, x $00-$80, y $50-$60, height $00-$30, type $E2.","t":"byte","b":[144,96,144,112,80,16,226,144]},{"a":29660,"t":"byte","b":[0,128,16,80,16,226,48,0]},{"a":29668,"t":"byte","b":[0,128,80,16,226,0]},{"a":29674,"l":"cell_73ea","c":"Board cell 2 west and 2 south of the start cell (cell_64ae): record 112 of 129. Links: east cell_7382, north cell_73cc, west cell_7436, south none. It holds 4 items (3 blocks, 1 ramp), listed at cell_73ea_items.","t":"addr","b":[130,115],"oa":29570,"o":"cell_7382","x":[25690,29574,29650,29750]},{"a":29676,"t":"addr","b":[204,115],"oa":29644,"o":"cell_73cc"},{"a":29678,"t":"addr","b":[54,116],"oa":29750,"o":"cell_7436"},{"a":29680,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29682,"l":"cell_73ea_items","c":"Item list of cell_73ea: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $740E. 1: block, x $40-$100, y $70-$B0, height $20-$40, type $C0. 2: ramp, x $40-$80, y $B0-$100, height $40 at y $B0 falling to $00 at y $100, type $50. 3: block, x $80-$100, y $70-$B0, height $40-$42, type $F5. 4: block, x $80-$100, y $70-$B0, height $60-$80, type $E3.","t":"byte","b":[64,32,64,192,112,64,192,64]},{"a":29690,"t":"byte","b":[0,64,64,176,80,80,66,64]},{"a":29698,"t":"byte","b":[128,128,112,64,245,128,96,128]},{"a":29706,"t":"byte","b":[128,112,64,227,0]},{"a":29711,"l":"cell_740f","c":"Board cell 3 west of the start cell (cell_64ae): record 113 of 129. Links: east cell_7399, north none, west cell_7462, south cell_741f. It holds 1 item (1 ramp), listed at cell_740f_items.","t":"addr","b":[153,115],"oa":29593,"o":"cell_7399","x":[29597,29729,29794]},{"a":29713,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29715,"t":"addr","b":[98,116],"oa":29794,"o":"cell_7462"},{"a":29717,"t":"addr","b":[31,116],"oa":29727,"o":"cell_741f"},{"a":29719,"l":"cell_740f_items","c":"Item list of cell_740f: 1 item of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $741E. 1: ramp, x $D2-$122, y $00-$30, height $00 at x $D2 rising to $66 at x $122, type $80.","t":"byte","b":[102,0,210,80,0,48,128,0]},{"a":29727,"l":"cell_741f","c":"Board cell 3 west and 1 south of the start cell (cell_64ae): record 114 of 129. Links: east cell_73cc, north cell_740f, west cell_7487, south cell_7436. It holds 2 items (2 blocks), listed at cell_741f_items.","t":"addr","b":[204,115],"oa":29644,"o":"cell_73cc","x":[29648,29717,29752,29831]},{"a":29729,"t":"addr","b":[15,116],"oa":29711,"o":"cell_740f"},{"a":29731,"t":"addr","b":[135,116],"oa":29831,"o":"cell_7487"},{"a":29733,"t":"addr","b":[54,116],"oa":29750,"o":"cell_7436"},{"a":29735,"l":"cell_741f_items","c":"Item list of cell_741f: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7435. 1: block, x $F0-$100, y $40-$70, height $00-$70, type $ED. 2: block, x $A0-$F0, y $40-$70, height $00-$33, type $E0.","t":"byte","b":[112,0,240,16,64,48,237,51]},{"a":29743,"t":"byte","b":[0,160,80,64,48,224,0]},{"a":29750,"l":"cell_7436","c":"Board cell 3 west and 2 south of the start cell (cell_64ae): record 115 of 129. Links: east cell_73ea, north cell_741f, west none, south none. It holds 5 items (1 block, 3 spindles, 1 handler record), listed at cell_7436_items.","t":"addr","b":[234,115],"oa":29674,"o":"cell_73ea","x":[29678,29733]},{"a":29752,"t":"addr","b":[31,116],"oa":29727,"o":"cell_741f"},{"a":29754,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29756,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29758,"l":"cell_7436_items","c":"Item list of cell_7436: 5 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7461. The list runs on through the handler word at $7457. 1: spindle, x $10-$1C, y $90-$9C, top $01. 2: spindle, x $10-$1C, y $E4-$F0, top $02. 3: spindle, x $64-$70, y $E4-$F0, top $01. 4: handler record ($64 $46 $01 $14), its handler word at $7457. 5: block, x $6C-$A4, y $6C-$A4, height $00-$30, type $F4.","t":"byte","b":[1,0,16,12,144,12,247,2]},{"a":29766,"t":"byte","b":[0,16,12,228,12,247,1,0]},{"a":29774,"t":"byte","b":[100,12,228,12,247,100,70,1]},{"a":29782,"t":"byte","b":[20]},{"a":29783,"l":"cell_7436_handler","c":"Handler word of the record at $7453 in cell_7436: the four parameter bytes $64 $46 $01 $14 come before it and the $F7 tag after it. The tape image holds $BD90 here. Whenever the nine cells round the worm are listed for drawing (once a frame in play) and this cell is one of them, $AF49 calls the address held here just before it lists the next item ($745A, a type $F4 block at x $6C-$A4, y $6C-$A4), with HL pointing at the record. $BD90 takes $01 off that item's top each call until it would fall below $14, sets it to $14 and, because the item is type $F4, writes $BE07 here and a random 5 to 36 into the record's first byte. $BE07 counts that byte down by one a call; when it runs out it adds $01 to the top each call up to $46, and once there, if ($8066) is not 0 and ($7C71) is below $0C, it takes one off ($8066), adds a type $F3 object over the middle of the item and writes $BD90 back. The first byte's value in the image, $64, is replaced before $BE07 ever reads it.","t":"addr","b":[144,189],"oa":48528,"o":"lower_item_handler"},{"a":29785,"l":"cell_7436_items_2","c":"Item list of cell_7436, carried on after the handler word at $7457: the $F7 tag that closes the record at $7453, then item 5 and the closing 0 at $7461. The items are described at cell_7436_items.","t":"byte","b":[247,48,0,108,56,108,56,244]},{"a":29793,"t":"byte","b":[0]},{"a":29794,"l":"cell_7462","c":"Board cell 4 west of the start cell (cell_64ae): record 116 of 129. Links: east cell_740f, north none, west cell_74bc, south cell_7487. It holds 4 items (2 blocks, 1 ramp, 1 spindle), listed at cell_7462_items.","t":"addr","b":[15,116],"oa":29711,"o":"cell_740f","x":[29715,29833,29884]},{"a":29796,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29798,"t":"addr","b":[188,116],"oa":29884,"o":"cell_74bc"},{"a":29800,"t":"addr","b":[135,116],"oa":29831,"o":"cell_7487"},{"a":29802,"l":"cell_7462_items","c":"Item list of cell_7462: 4 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7486. 1: block, x $90-$A7, y $80-$17F, height $00-$30, type $E2. 2: block, x $00-$90, y $80-$97, height $00-$30, type $E2. 3: ramp, x $A7-$DC, y $E0-$120, height $30 at x $A7 falling to $00 at x $DC, type $90. 4: spindle, x $31-$3D, y $85-$91, top $32.","t":"byte","b":[48,0,144,23,128,255,226,48]},{"a":29810,"t":"byte","b":[0,0,144,128,23,226,48,0]},{"a":29818,"t":"byte","b":[167,53,224,64,144,50,48,49]},{"a":29826,"t":"byte","b":[12,133,12,247,0]},{"a":29831,"l":"cell_7487","c":"Board cell 4 west and 1 south of the start cell (cell_64ae): record 117 of 129. Links: east cell_741f, north cell_7462, west cell_74da, south none. It holds 2 items (1 block, 1 spindle), listed at cell_7487_items.","t":"addr","b":[31,116],"oa":29727,"o":"cell_741f","x":[29731,29800,29914]},{"a":29833,"t":"addr","b":[98,116],"oa":29794,"o":"cell_7462"},{"a":29835,"t":"addr","b":[218,116],"oa":29914,"o":"cell_74da"},{"a":29837,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29839,"l":"cell_7487_items","c":"Item list of cell_7487: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $749D. 1: block, x $00-$90, y $68-$7F, height $00-$30, type $E2. 2: spindle, x $31-$3D, y $6E-$7A, top $31.","t":"byte","b":[48,0,0,144,104,23,226,49]},{"a":29847,"t":"byte","b":[48,49,12,110,12,247,0]},{"a":29854,"l":"cell_749e","c":"Board cell 5 west and 1 north of the start cell (cell_64ae): record 118 of 129. Links: east none, north cell_7516, west cell_755f, south cell_74bc. It holds 3 items (1 block, 2 ramps), listed at cell_749e_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[29886,29980,30047]},{"a":29856,"t":"addr","b":[22,117],"oa":29974,"o":"cell_7516"},{"a":29858,"t":"addr","b":[95,117],"oa":30047,"o":"cell_755f"},{"a":29860,"t":"addr","b":[188,116],"oa":29884,"o":"cell_74bc"},{"a":29862,"l":"cell_749e_items","c":"Item list of cell_749e: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $74BB. 1: ramp, x $30-$60, y $70-$D0, height $33 at y $70 falling to $00 at y $D0, type $53. 2: block, x $30-$C0, y $40-$70, height $20-$33, type $C3. 3: ramp, x $90-$C0, y $68-$101, height $33 at y $68 rising to $60 at y $101, type $42.","t":"byte","b":[51,0,48,48,112,96,83,51]},{"a":29870,"t":"byte","b":[32,48,144,64,48,195,96,51]},{"a":29878,"t":"byte","b":[144,48,104,153,66,0]},{"a":29884,"l":"cell_74bc","c":"Board cell 5 west of the start cell (cell_64ae): record 119 of 129. Links: east cell_7462, north cell_749e, west none, south cell_74da. It holds 3 items (3 blocks), listed at cell_74bc_items.","t":"addr","b":[98,116],"oa":29794,"o":"cell_7462","x":[29798,29860,29916]},{"a":29886,"t":"addr","b":[158,116],"oa":29854,"o":"cell_749e"},{"a":29888,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29890,"t":"addr","b":[218,116],"oa":29914,"o":"cell_74da"},{"a":29892,"l":"cell_74bc_items","c":"Item list of cell_74bc: 3 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $74D9. 1: block, x $90-$C0, y $01-$100, height $55-$60, type $DC. 2: block, x $C0-$D5, y $68-$AF, height $00-$60, type $E8. 3: block, x $D5-$100, y $80-$97, height $00-$30, type $E2.","t":"byte","b":[96,85,144,48,1,255,220,96]},{"a":29900,"t":"byte","b":[0,192,21,104,71,232,48,0]},{"a":29908,"t":"byte","b":[213,43,128,23,226,0]},{"a":29914,"l":"cell_74da","c":"Board cell 5 west and 1 south of the start cell (cell_64ae): record 120 of 129. Links: east cell_7487, north cell_74bc, west none, south cell_7506. It holds 5 items (4 blocks, 1 spindle), listed at cell_74da_items.","t":"addr","b":[135,116],"oa":29831,"o":"cell_7487","x":[29835,29890,29960]},{"a":29916,"t":"addr","b":[188,116],"oa":29884,"o":"cell_74bc"},{"a":29918,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29920,"t":"addr","b":[6,117],"oa":29958,"o":"cell_7506"},{"a":29922,"l":"cell_74da_items","c":"Item list of cell_74da: 5 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7505. 1: block, x $90-$C0, y $00-$C0, height $55-$60, type $DC. 2: block, x $C0-$D5, y $50-$97, height $00-$60, type $EC. 3: block, x $D5-$100, y $68-$7F, height $00-$30, type $E2. 4: block, x $40-$120, y $C0-$100, height $00-$60, type $C0. 5: spindle, x $F0-$FC, y $DA-$E6, top $62.","t":"byte","b":[96,85,144,48,0,192,220,96]},{"a":29930,"t":"byte","b":[0,192,21,80,71,236,48,0]},{"a":29938,"t":"byte","b":[213,43,104,23,226,96,0,64]},{"a":29946,"t":"byte","b":[224,192,64,192,98,96,240,12]},{"a":29954,"t":"byte","b":[218,12,247,0]},{"a":29958,"l":"cell_7506","c":"Board cell 5 west and 2 south of the start cell (cell_64ae): record 121 of 129. Links: east none, north cell_74da, west none, south cell_6fcd. It holds 1 item (1 spindle), listed at cell_7506_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[28623,29920]},{"a":29960,"t":"addr","b":[218,116],"oa":29914,"o":"cell_74da"},{"a":29962,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29964,"t":"addr","b":[205,111],"oa":28621,"o":"cell_6fcd"},{"a":29966,"l":"cell_7506_items","c":"Item list of cell_7506: 1 item of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $7515. 1: spindle, x $10-$1C, y $EA-$F6, top $01.","t":"byte","b":[1,0,16,12,234,12,247,0]},{"a":29974,"l":"cell_7516","c":"Board cell 5 west and 2 north of the start cell (cell_64ae): record 122 of 129. Links: east none, north cell_752d, west none, south cell_749e. It holds 2 items (2 blocks), listed at cell_7516_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[29856,30003]},{"a":29976,"t":"addr","b":[45,117],"oa":29997,"o":"cell_752d"},{"a":29978,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":29980,"t":"addr","b":[158,116],"oa":29854,"o":"cell_749e"},{"a":29982,"l":"cell_7516_items","c":"Item list of cell_7516: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $752C. 1: block, x $40-$C0, y $C0-$F0, height $20-$50, type $E3. 2: block, x $40-$C0, y $C0-$F0, height $00-$01, type $F5.","t":"byte","b":[80,32,64,128,192,48,227,1]},{"a":29990,"t":"byte","b":[0,64,128,192,48,245,0]},{"a":29997,"l":"cell_752d","c":"Board cell 5 west and 3 north of the start cell (cell_64ae): record 123 of 129. Links: east none, north cell_7536, west none, south cell_7516. It holds no items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[29976,30012]},{"a":29999,"t":"addr","b":[54,117],"oa":30006,"o":"cell_7536"},{"a":30001,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":30003,"t":"addr","b":[22,117],"oa":29974,"o":"cell_7516"},{"a":30005,"l":"cell_752d_items","c":"Item list of cell_752d: empty. The single 0 at $7535 ends it: the cell has no items.","t":"byte","b":[0]},{"a":30006,"l":"cell_7536","c":"Board cell 5 west and 4 north of the start cell (cell_64ae): record 124 of 129. Links: east none, north cell_753f, west none, south cell_752d. It holds no items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[29999,30021]},{"a":30008,"t":"addr","b":[63,117],"oa":30015,"o":"cell_753f"},{"a":30010,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":30012,"t":"addr","b":[45,117],"oa":29997,"o":"cell_752d"},{"a":30014,"l":"cell_7536_items","c":"Item list of cell_7536: empty. The single 0 at $753E ends it: the cell has no items.","t":"byte","b":[0]},{"a":30015,"l":"cell_753f","c":"Board cell 5 west and 5 north of the start cell (cell_64ae): record 125 of 129. Links: east none, north cell_7548, west none, south cell_7536. It holds no items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[30008,30030]},{"a":30017,"t":"addr","b":[72,117],"oa":30024,"o":"cell_7548"},{"a":30019,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":30021,"t":"addr","b":[54,117],"oa":30006,"o":"cell_7536"},{"a":30023,"l":"cell_753f_items","c":"Item list of cell_753f: empty. The single 0 at $7547 ends it: the cell has no items.","t":"byte","b":[0]},{"a":30024,"l":"cell_7548","c":"Board cell 5 west and 6 north of the start cell (cell_64ae): record 126 of 129. Links: east none, north none, west none, south cell_753f. It holds 2 items (2 spindles), listed at cell_7548_items.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[30017]},{"a":30026,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":30028,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":30030,"t":"addr","b":[63,117],"oa":30015,"o":"cell_753f"},{"a":30032,"l":"cell_7548_items","c":"Item list of cell_7548: 2 items of 7 bytes (top, bottom, x, x size, y, y size, type; see cell_6464_items) and the 0 that ends the list at $755E. 1: spindle, x $05-$11, y $05-$11, top $01. 2: spindle, x $EF-$FB, y $05-$11, top $02.","t":"byte","b":[1,0,5,12,5,12,247,2]},{"a":30040,"t":"byte","b":[0,239,12,5,12,247,0]},{"a":30047,"l":"cell_755f","c":"Board cell 6 west and 1 north of the start cell (cell_64ae): record 127 of 129. Links: east cell_749e, north none, west cell_7568, south none. It holds no items.","t":"addr","b":[158,116],"oa":29854,"o":"cell_749e","x":[29858,30056]},{"a":30049,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":30051,"t":"addr","b":[104,117],"oa":30056,"o":"cell_7568"},{"a":30053,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":30055,"l":"cell_755f_items","c":"Item list of cell_755f: empty. The single 0 at $7567 ends it: the cell has no items.","t":"byte","b":[0]},{"a":30056,"l":"cell_7568","c":"Board cell 7 west and 1 north of the start cell (cell_64ae): record 128 of 129. Links: east cell_755f, north none, west cell_7571, south none. It holds no items.","t":"addr","b":[95,117],"oa":30047,"o":"cell_755f","x":[30051,30065]},{"a":30058,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":30060,"t":"addr","b":[113,117],"oa":30065,"o":"cell_7571"},{"a":30062,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":30064,"l":"cell_7568_items","c":"Item list of cell_7568: empty. The single 0 at $7570 ends it: the cell has no items.","t":"byte","b":[0]},{"a":30065,"l":"cell_7571","c":"Board cell 8 west and 1 north of the start cell (cell_64ae): record 129 of 129. Links: east cell_7568, north none, west cell_670e, south none. It holds no items. Its west link does not fit a flat map: cell_670e lies 5 east and 3 south of the start cell. The board is joined to itself there.","t":"addr","b":[104,117],"oa":30056,"o":"cell_7568","x":[26382,30060]},{"a":30067,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":30069,"t":"addr","b":[14,103],"oa":26382,"o":"cell_670e"},{"a":30071,"t":"addr","b":[0,0],"oa":0,"o":"$0000"},{"a":30073,"l":"cell_7571_items","c":"Item list of cell_7571: empty. The single 0 at $7579 ends it: the cell has no items.","t":"byte","b":[0]},{"a":30074,"l":"board_end","c":"End of the board, two bytes: $00 and $FF. After the 0 that ends a cell's item list, the game-start loop ($75C7-$75CF) and the mastering loop ($EBE6-$EBEE) step IX on by two and stop if the byte there is $FF; otherwise they add 7 and are at the next cell's first item. After the last cell (cell_7571, list ending at $7579) that byte is the $FF at $757B. Neither loop reads the $00 at $757A, which stands where a further cell's first byte would be. The other walkers do not come here: they take one cell at a time from a cell address.","t":"byte","b":[0,255]},{"a":30076,"l":"unreferenced_jump_to_eb9c","c":"A single `JP $EB9C` between the end of the board data (the `$FF` at `$757B`) and the code that starts a game. No instruction in the image jumps to or calls `$757C`, and the word `$757C` occurs nowhere in the image, so nothing reaches it, and it has not been seen to run. Its target `$EB9C` is also the address the display list starts at in play (`$AB00` and `$AEDC` load it as a list address), so once a game is running the bytes there are no longer the code this jump was written for.","t":"code","b":[195,156,235],"m":"jp","oa":60316,"o":"master_tape"},{"a":30079,"l":"start_new_game","c":"Starts a game. One reference: the `JP NC,$757F` at `$E521`, taken when the menu finds key code `$23` (the 0 key) held. It resets the stack to `$F000`, starts the sound list at `$E4C2` (pointer `$E4AE`, with `$E4B0` and `$E4B1` both 1), fills the 512 attribute bytes of character rows 0 to 15 (`$5800-$59FF`) with `$44` and zeroes the spindle count `$805B`. It then walks every board record from `$646C` in 7-byte steps: a zero first byte ends a cell's list, the next cell's records begin 9 bytes after that zero, and `$FF` two bytes after it ends the board. For each record whose byte 6 is `$F7` and byte 5 is `$0C` it writes byte 0 minus 1 into byte 1. Those records are the spindles: collecting one sets its byte 1 to `$FF` (`$A5B3`), so this puts every collected spindle back. Run against the image, the walk covers 129 cells and 459 records, 58 of them spindles, and stops at `$757B`; it also changes byte 1 in 36 of the 58 as they stand in the image, where some hold a lower value (the record at `$666D` has `$32` and 0). Next it zeroes the score `$8060`, the three bytes `$BD6C-$BD6E` and the frame counter `$8059`, and calls `$BD12` with A, B and C all 0; copies the four 16-byte worm segment records from `$7FA4` to `$7F54`; sets the heading `$8001` to `$83`, the speed `$8003` to `$0A`, the head's x `$7FF5` to 8, y `$7FF7` to 5 and height `$7FFF` to `$10` (each with a zero low byte, and `$8000` = 0); zeroes `$8004`, `$8058` and `$BAAD`; copies the 50-byte cell window from `$6400` to `$6432`; empties the object list (`$7C71` = 1, `$7C72` = `$7C74`); gives the worm `$14` (20) sparkies in `$805D`; builds the display list once (`$AAF3`) and enters the frame loop at `$7638`. It does not touch the hi-score `$8064`, the shown score `$8062` or the budget byte `$8066`.","t":"code","b":[49,0,240],"m":"ld","o":"sp,$F000","x":[58657]},{"a":30082,"t":"code","b":[33,194,228],"m":"ld","o":"hl,$E4C2"},{"a":30085,"t":"code","b":[34,174,228],"m":"ld","oa":58542,"o":"(sound_script_pointer),hl"},{"a":30088,"t":"code","b":[33,1,1],"m":"ld","o":"hl,$0101"},{"a":30091,"t":"code","b":[34,176,228],"m":"ld","oa":58544,"o":"(sound_script_counter),hl"},{"a":30094,"t":"code","b":[33,0,88],"m":"ld","o":"hl,$5800"},{"a":30097,"t":"code","b":[17,1,88],"m":"ld","o":"de,$5801"},{"a":30100,"t":"code","b":[1,255,1],"m":"ld","o":"bc,$01FF"},{"a":30103,"t":"code","b":[54,68],"m":"ld","o":"(hl),$44"},{"a":30105,"t":"code","b":[237,176],"m":"ldir"},{"a":30107,"t":"code","b":[175],"m":"xor","o":"a"},{"a":30108,"t":"code","b":[50,91,128],"m":"ld","oa":32859,"o":"(spindles_collected),a"},{"a":30111,"t":"code","b":[221,33,100,100],"m":"ld","o":"ix,$6464"},{"a":30115,"t":"code","b":[1,7,0],"m":"ld","o":"bc,$0007"},{"a":30118,"t":"code","b":[221,35],"m":"inc","o":"ix"},{"a":30120,"t":"code","b":[221,9],"m":"add","o":"ix,bc","x":[30133,30140,30149,30159]},{"a":30122,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)"},{"a":30125,"t":"code","b":[167],"m":"and","o":"a"},{"a":30126,"t":"code","b":[40,23],"m":"jr","oa":30151,"o":"z,$75C7"},{"a":30128,"t":"code","b":[221,126,6],"m":"ld","o":"a,(ix+$06)"},{"a":30131,"t":"code","b":[254,247],"m":"cp","o":"$F7"},{"a":30133,"t":"code","b":[32,241],"m":"jr","oa":30120,"o":"nz,$75A8"},{"a":30135,"t":"code","b":[221,126,5],"m":"ld","o":"a,(ix+$05)"},{"a":30138,"t":"code","b":[254,12],"m":"cp","o":"$0C"},{"a":30140,"t":"code","b":[32,234],"m":"jr","oa":30120,"o":"nz,$75A8"},{"a":30142,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)"},{"a":30145,"t":"code","b":[61],"m":"dec","o":"a"},{"a":30146,"t":"code","b":[221,119,1],"m":"ld","o":"(ix+$01),a"},{"a":30149,"t":"code","b":[24,225],"m":"jr","oa":30120,"o":"$75A8"},{"a":30151,"t":"code","b":[221,35],"m":"inc","o":"ix","x":[30126]},{"a":30153,"t":"code","b":[221,35],"m":"inc","o":"ix"},{"a":30155,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)"},{"a":30158,"t":"code","b":[60],"m":"inc","o":"a"},{"a":30159,"t":"code","b":[32,215],"m":"jr","oa":30120,"o":"nz,$75A8"},{"a":30161,"t":"code","b":[1,0,0],"m":"ld","o":"bc,$0000"},{"a":30164,"t":"code","b":[237,67,96,128],"m":"ld","oa":32864,"o":"(score),bc"},{"a":30168,"t":"code","b":[237,67,108,189],"m":"ld","oa":48492,"o":"(counter_units),bc"},{"a":30172,"t":"code","b":[237,67,109,189],"m":"ld","oa":48493,"o":"(counter_tens),bc"},{"a":30176,"t":"code","b":[237,67,89,128],"m":"ld","oa":32857,"o":"(frame_counter),bc"},{"a":30180,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":30181,"t":"code","b":[205,18,189],"m":"call","oa":48402,"o":"build_counter_display"},{"a":30184,"t":"code","b":[33,164,127],"m":"ld","o":"hl,$7FA4"},{"a":30187,"t":"code","b":[17,84,127],"m":"ld","o":"de,$7F54"},{"a":30190,"t":"code","b":[1,64,0],"m":"ld","o":"bc,$0040"},{"a":30193,"t":"code","b":[237,176],"m":"ldir"},{"a":30195,"t":"code","b":[33,0,131],"m":"ld","o":"hl,$8300"},{"a":30198,"t":"code","b":[34,0,128],"m":"ld","oa":32768,"o":"(worm_deflected_flag),hl"},{"a":30201,"t":"code","b":[38,10],"m":"ld","o":"h,$0A"},{"a":30203,"t":"code","b":[34,2,128],"m":"ld","oa":32770,"o":"(worm_speed_fraction),hl"},{"a":30206,"t":"code","b":[38,8],"m":"ld","o":"h,$08"},{"a":30208,"t":"code","b":[34,244,127],"m":"ld","oa":32756,"o":"(worm_x),hl"},{"a":30211,"t":"code","b":[38,5],"m":"ld","o":"h,$05"},{"a":30213,"t":"code","b":[34,246,127],"m":"ld","oa":32758,"o":"(worm_y),hl"},{"a":30216,"t":"code","b":[38,16],"m":"ld","o":"h,$10"},{"a":30218,"t":"code","b":[34,254,127],"m":"ld","oa":32766,"o":"(worm_z),hl"},{"a":30221,"t":"code","b":[175],"m":"xor","o":"a"},{"a":30222,"t":"code","b":[50,4,128],"m":"ld","oa":32772,"o":"(worm_fall_speed),a"},{"a":30225,"t":"code","b":[50,88,128],"m":"ld","oa":32856,"o":"(control_lock),a"},{"a":30228,"t":"code","b":[50,173,186],"m":"ld","oa":47789,"o":"(disk_lift_counter),a"},{"a":30231,"t":"code","b":[33,0,100],"m":"ld","o":"hl,$6400"},{"a":30234,"t":"code","b":[17,50,100],"m":"ld","o":"de,$6432"},{"a":30237,"t":"code","b":[1,50,0],"m":"ld","o":"bc,$0032"},{"a":30240,"t":"code","b":[237,176],"m":"ldir"},{"a":30242,"t":"code","b":[62,1],"m":"ld","o":"a,$01"},{"a":30244,"t":"code","b":[50,113,124],"m":"ld","oa":31857,"o":"(object_count_plus_one),a"},{"a":30247,"t":"code","b":[33,116,124],"m":"ld","o":"hl,$7C74"},{"a":30250,"t":"code","b":[34,114,124],"m":"ld","oa":31858,"o":"(object_list_end),hl"},{"a":30253,"t":"code","b":[62,20],"m":"ld","o":"a,$14"},{"a":30255,"t":"code","b":[50,93,128],"m":"ld","oa":32861,"o":"(sparkies),a"},{"a":30258,"t":"code","b":[205,243,170],"m":"call","oa":43763,"o":"build_display_list"},{"a":30261,"t":"code","b":[195,56,118],"m":"jp","oa":30264,"o":"frame_loop"},{"a":30264,"l":"frame_loop","c":"One pass of play; `$7635` enters it and `$779D` jumps back to it. It adds 1 to the 16-bit frame counter `$8059`, cuts the speed `$8003` to `$0A` if it is `$0B` or more, calls `$7925` when the counter's low byte equals `$64` (once in 256 passes) and stores (counter AND 3) + 1 in `$8067`. Then, in order: `$9CF1` moves the worm (its head, then its segments), `$D438` updates the objects, `$AAF3` builds the display list, `$EAA9` clears the frame buffer and draws the floor, `$B2F4` draws the list and `$E9E8` copies the buffer to the screen. After that a non-zero `$8055` is raised by 1 and zeroed once it reaches 5, `$8056` is zeroed, the byte at `$7F43` is copied to the attribute at `$5800`, and four more routines run: `$77A0` (bugs on the worm), `$7C13` (controls into `$8057`), `$CE0A` (the map) and `$7A30` (panel lights and counters). Bit 7 of `$8057` leaves for the menu at `$E508`. If `$8058` is non-zero the controls are discarded (`$8057` = 0) and, unless its bit 7 is set, `$8058` is cleared. If it is zero, bit 0 of `$8057` subtracts `$0C` from the heading `$8001`, bit 1 adds `$0C`, `$8067` is zeroed, bit 2 adds 1 to the speed when the result is below `$0C`, bit 3 subtracts 3 from it with a floor of 0, and `$8058` is cleared. A fire request in `$8053` is then consumed. It is refused when `$805D` minus 1 is negative as a signed byte, which is the case at 0 and also at `$81` or more, and when the object count `$7C71` is `$12` or more. Otherwise it takes one sparky, adds one to the count, sets `$8055` to 2 and writes a 30-byte record at the list end `($7C72)`: byte 0 = `$F1`, bytes 2 and 3 = 2 (the centre cell of the window), bytes 4 to 7 = the head's x and y with 5 taken off each high byte (left alone if that would borrow), bytes 8 and 9 = `$0A`, bytes 10 and 11 = the head's height, bytes 12 and 13 = the same with `$12` added to the high byte, byte 14 = minus the heading, byte 15 = 4 and byte 16 = `$37`. With bit 6 of `$8057` set it instead adds `$80` to the worm's own heading and writes byte 14 = `$A0` and byte 15 = 0. Bytes 1 and 17 to 29 are left as they were, and `$7C72` moves on by 30. Last, if bit 4 of `$8057` is set it re-reads the controls until the bit clears and then calls the halt screen at `$D05E`.","t":"code","b":[42,89,128],"m":"ld","oa":32857,"o":"hl,(frame_counter)","x":[30261,30621]},{"a":30267,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30268,"t":"code","b":[34,89,128],"m":"ld","oa":32857,"o":"(frame_counter),hl"},{"a":30271,"t":"code","b":[58,3,128],"m":"ld","oa":32771,"o":"a,(worm_speed)"},{"a":30274,"t":"code","b":[254,11],"m":"cp","o":"$0B"},{"a":30276,"t":"code","b":[56,5],"m":"jr","oa":30283,"o":"c,$764B"},{"a":30278,"t":"code","b":[62,10],"m":"ld","o":"a,$0A"},{"a":30280,"t":"code","b":[50,3,128],"m":"ld","oa":32771,"o":"(worm_speed),a"},{"a":30283,"t":"code","b":[58,89,128],"m":"ld","oa":32857,"o":"a,(frame_counter)","x":[30276]},{"a":30286,"t":"code","b":[238,100],"m":"xor","o":"$64"},{"a":30288,"t":"code","b":[204,37,121],"m":"call","oa":31013,"o":"z,add_object_wave"},{"a":30291,"t":"code","b":[58,89,128],"m":"ld","oa":32857,"o":"a,(frame_counter)"},{"a":30294,"t":"code","b":[230,3],"m":"and","o":"$03"},{"a":30296,"t":"code","b":[60],"m":"inc","o":"a"},{"a":30297,"t":"code","b":[50,103,128],"m":"ld","oa":32871,"o":"(narrow_segment_countdown),a"},{"a":30300,"t":"code","b":[205,241,156],"m":"call","oa":40177,"o":"move_worm"},{"a":30303,"t":"code","b":[205,56,212],"m":"call","oa":54328,"o":"spawn_objects"},{"a":30306,"t":"code","b":[205,243,170],"m":"call","oa":43763,"o":"build_display_list"},{"a":30309,"t":"code","b":[205,169,234],"m":"call","oa":60073,"o":"clear_buffer_draw_floor"},{"a":30312,"t":"code","b":[205,244,178],"m":"call","oa":45812,"o":"draw_display_list"},{"a":30315,"t":"code","b":[205,232,233],"m":"call","oa":59880,"o":"copy_buffer_to_screen"},{"a":30318,"t":"code","b":[58,85,128],"m":"ld","oa":32853,"o":"a,(copy_click_period)"},{"a":30321,"t":"code","b":[167],"m":"and","o":"a"},{"a":30322,"t":"code","b":[202,126,118],"m":"jp","oa":30334,"o":"z,$767E"},{"a":30325,"t":"code","b":[60],"m":"inc","o":"a"},{"a":30326,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":30328,"t":"code","b":[56,1],"m":"jr","oa":30331,"o":"c,$767B"},{"a":30330,"t":"code","b":[175],"m":"xor","o":"a"},{"a":30331,"t":"code","b":[50,85,128],"m":"ld","oa":32853,"o":"(copy_click_period),a","x":[30328]},{"a":30334,"t":"code","b":[175],"m":"xor","o":"a","x":[30322]},{"a":30335,"t":"code","b":[50,86,128],"m":"ld","oa":32854,"o":"(clear_click_period),a"},{"a":30338,"t":"code","b":[58,67,127],"m":"ld","oa":32579,"o":"a,(top_left_attribute)"},{"a":30341,"t":"code","b":[50,0,88],"m":"ld","oa":22528,"o":"($5800),a"},{"a":30344,"t":"code","b":[205,160,119],"m":"call","oa":30624,"o":"update_bugs_on_worm"},{"a":30347,"t":"code","b":[205,19,124],"m":"call","oa":31763,"o":"read_controls"},{"a":30350,"t":"code","b":[205,10,206],"m":"call","oa":52746,"o":"update_insert_map"},{"a":30353,"t":"code","b":[205,48,122],"m":"call","oa":31280,"o":"update_panel"},{"a":30356,"t":"code","b":[58,87,128],"m":"ld","oa":32855,"o":"a,(controls)"},{"a":30359,"t":"code","b":[203,127],"m":"bit","o":"7,a"},{"a":30361,"t":"code","b":[194,8,229],"m":"jp","oa":58632,"o":"nz,menu"},{"a":30364,"t":"code","b":[58,88,128],"m":"ld","oa":32856,"o":"a,(control_lock)"},{"a":30367,"t":"code","b":[167],"m":"and","o":"a"},{"a":30368,"t":"code","b":[202,174,118],"m":"jp","oa":30382,"o":"z,$76AE"},{"a":30371,"t":"code","b":[62,0],"m":"ld","o":"a,$00"},{"a":30373,"t":"code","b":[50,87,128],"m":"ld","oa":32855,"o":"(controls),a"},{"a":30376,"t":"code","b":[250,250,118],"m":"jp","oa":30458,"o":"m,$76FA"},{"a":30379,"t":"code","b":[194,246,118],"m":"jp","oa":30454,"o":"nz,$76F6"},{"a":30382,"t":"code","b":[58,87,128],"m":"ld","oa":32855,"o":"a,(controls)","x":[30368]},{"a":30385,"t":"code","b":[203,71],"m":"bit","o":"0,a"},{"a":30387,"t":"code","b":[40,8],"m":"jr","oa":30397,"o":"z,$76BD"},{"a":30389,"t":"code","b":[58,1,128],"m":"ld","oa":32769,"o":"a,(worm_heading)"},{"a":30392,"t":"code","b":[214,12],"m":"sub","o":"$0C"},{"a":30394,"t":"code","b":[50,1,128],"m":"ld","oa":32769,"o":"(worm_heading),a"},{"a":30397,"t":"code","b":[58,87,128],"m":"ld","oa":32855,"o":"a,(controls)","x":[30387]},{"a":30400,"t":"code","b":[203,79],"m":"bit","o":"1,a"},{"a":30402,"t":"code","b":[40,8],"m":"jr","oa":30412,"o":"z,$76CC"},{"a":30404,"t":"code","b":[58,1,128],"m":"ld","oa":32769,"o":"a,(worm_heading)"},{"a":30407,"t":"code","b":[198,12],"m":"add","o":"a,$0C"},{"a":30409,"t":"code","b":[50,1,128],"m":"ld","oa":32769,"o":"(worm_heading),a"},{"a":30412,"t":"code","b":[175],"m":"xor","o":"a","x":[30402]},{"a":30413,"t":"code","b":[50,103,128],"m":"ld","oa":32871,"o":"(narrow_segment_countdown),a"},{"a":30416,"t":"code","b":[58,87,128],"m":"ld","oa":32855,"o":"a,(controls)"},{"a":30419,"t":"code","b":[203,87],"m":"bit","o":"2,a"},{"a":30421,"t":"code","b":[40,12],"m":"jr","oa":30435,"o":"z,$76E3"},{"a":30423,"t":"code","b":[58,3,128],"m":"ld","oa":32771,"o":"a,(worm_speed)"},{"a":30426,"t":"code","b":[60],"m":"inc","o":"a"},{"a":30427,"t":"code","b":[254,12],"m":"cp","o":"$0C"},{"a":30429,"t":"code","b":[210,227,118],"m":"jp","oa":30435,"o":"nc,$76E3"},{"a":30432,"t":"code","b":[50,3,128],"m":"ld","oa":32771,"o":"(worm_speed),a"},{"a":30435,"t":"code","b":[58,87,128],"m":"ld","oa":32855,"o":"a,(controls)","x":[30421,30429]},{"a":30438,"t":"code","b":[203,95],"m":"bit","o":"3,a"},{"a":30440,"t":"code","b":[40,12],"m":"jr","oa":30454,"o":"z,$76F6"},{"a":30442,"t":"code","b":[58,3,128],"m":"ld","oa":32771,"o":"a,(worm_speed)"},{"a":30445,"t":"code","b":[214,3],"m":"sub","o":"$03"},{"a":30447,"t":"code","b":[242,243,118],"m":"jp","oa":30451,"o":"p,$76F3"},{"a":30450,"t":"code","b":[175],"m":"xor","o":"a"},{"a":30451,"t":"code","b":[50,3,128],"m":"ld","oa":32771,"o":"(worm_speed),a","x":[30447]},{"a":30454,"t":"code","b":[175],"m":"xor","o":"a","x":[30379,30440]},{"a":30455,"t":"code","b":[50,88,128],"m":"ld","oa":32856,"o":"(control_lock),a"},{"a":30458,"t":"code","b":[58,83,128],"m":"ld","oa":32851,"o":"a,(fire_request)","x":[30376]},{"a":30461,"t":"code","b":[167],"m":"and","o":"a"},{"a":30462,"t":"code","b":[202,137,119],"m":"jp","oa":30601,"o":"z,$7789"},{"a":30465,"t":"code","b":[175],"m":"xor","o":"a"},{"a":30466,"t":"code","b":[50,83,128],"m":"ld","oa":32851,"o":"(fire_request),a"},{"a":30469,"t":"code","b":[58,93,128],"m":"ld","oa":32861,"o":"a,(sparkies)"},{"a":30472,"t":"code","b":[61],"m":"dec","o":"a"},{"a":30473,"t":"code","b":[250,137,119],"m":"jp","oa":30601,"o":"m,$7789"},{"a":30476,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":30477,"t":"code","b":[58,113,124],"m":"ld","oa":31857,"o":"a,(object_count_plus_one)"},{"a":30480,"t":"code","b":[254,18],"m":"cp","o":"$12"},{"a":30482,"t":"code","b":[210,137,119],"m":"jp","oa":30601,"o":"nc,$7789"},{"a":30485,"t":"code","b":[60],"m":"inc","o":"a"},{"a":30486,"t":"code","b":[50,113,124],"m":"ld","oa":31857,"o":"(object_count_plus_one),a"},{"a":30489,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":30490,"t":"code","b":[50,93,128],"m":"ld","oa":32861,"o":"(sparkies),a"},{"a":30493,"t":"code","b":[62,2],"m":"ld","o":"a,$02"},{"a":30495,"t":"code","b":[50,85,128],"m":"ld","oa":32853,"o":"(copy_click_period),a"},{"a":30498,"t":"code","b":[42,114,124],"m":"ld","oa":31858,"o":"hl,(object_list_end)"},{"a":30501,"t":"code","b":[62,241],"m":"ld","o":"a,$F1"},{"a":30503,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":30504,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30505,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30506,"t":"code","b":[62,2],"m":"ld","o":"a,$02"},{"a":30508,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":30509,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30510,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":30511,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30512,"t":"code","b":[237,91,244,127],"m":"ld","oa":32756,"o":"de,(worm_x)"},{"a":30516,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":30517,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30518,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":30519,"t":"code","b":[214,5],"m":"sub","o":"$05"},{"a":30521,"t":"code","b":[48,1],"m":"jr","oa":30524,"o":"nc,$773C"},{"a":30523,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":30524,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[30521]},{"a":30525,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30526,"t":"code","b":[237,91,246,127],"m":"ld","oa":32758,"o":"de,(worm_y)"},{"a":30530,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":30531,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30532,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":30533,"t":"code","b":[214,5],"m":"sub","o":"$05"},{"a":30535,"t":"code","b":[48,1],"m":"jr","oa":30538,"o":"nc,$774A"},{"a":30537,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":30538,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[30535]},{"a":30539,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30540,"t":"code","b":[62,10],"m":"ld","o":"a,$0A"},{"a":30542,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":30543,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30544,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":30545,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30546,"t":"code","b":[237,91,254,127],"m":"ld","oa":32766,"o":"de,(worm_z)"},{"a":30550,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":30551,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30552,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":30553,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30554,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":30555,"t":"code","b":[198,18],"m":"add","o":"a,$12"},{"a":30557,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":30558,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30559,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":30560,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30561,"t":"code","b":[58,1,128],"m":"ld","oa":32769,"o":"a,(worm_heading)"},{"a":30564,"t":"code","b":[237,68],"m":"neg"},{"a":30566,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":30567,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30568,"t":"code","b":[58,87,128],"m":"ld","oa":32855,"o":"a,(controls)"},{"a":30571,"t":"code","b":[203,119],"m":"bit","o":"6,a"},{"a":30573,"t":"code","b":[62,4],"m":"ld","o":"a,$04"},{"a":30575,"t":"code","b":[40,13],"m":"jr","oa":30590,"o":"z,$777E"},{"a":30577,"t":"code","b":[58,1,128],"m":"ld","oa":32769,"o":"a,(worm_heading)"},{"a":30580,"t":"code","b":[198,128],"m":"add","o":"a,$80"},{"a":30582,"t":"code","b":[50,1,128],"m":"ld","oa":32769,"o":"(worm_heading),a"},{"a":30585,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":30586,"t":"code","b":[54,160],"m":"ld","o":"(hl),$A0"},{"a":30588,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30589,"t":"code","b":[175],"m":"xor","o":"a"},{"a":30590,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[30575]},{"a":30591,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":30592,"t":"code","b":[54,55],"m":"ld","o":"(hl),$37"},{"a":30594,"t":"code","b":[17,14,0],"m":"ld","o":"de,$000E"},{"a":30597,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":30598,"t":"code","b":[34,114,124],"m":"ld","oa":31858,"o":"(object_list_end),hl"},{"a":30601,"t":"code","b":[58,87,128],"m":"ld","oa":32855,"o":"a,(controls)","x":[30462,30473,30482]},{"a":30604,"t":"code","b":[203,103],"m":"bit","o":"4,a"},{"a":30606,"t":"code","b":[40,13],"m":"jr","oa":30621,"o":"z,$779D"},{"a":30608,"t":"code","b":[205,19,124],"m":"call","oa":31763,"o":"read_controls","x":[30616]},{"a":30611,"t":"code","b":[58,87,128],"m":"ld","oa":32855,"o":"a,(controls)"},{"a":30614,"t":"code","b":[203,103],"m":"bit","o":"4,a"},{"a":30616,"t":"code","b":[32,246],"m":"jr","oa":30608,"o":"nz,$7790"},{"a":30618,"t":"code","b":[205,94,208],"m":"call","oa":53342,"o":"halt_screen"},{"a":30621,"t":"code","b":[195,56,118],"m":"jp","oa":30264,"o":"frame_loop","x":[30606]},{"a":30624,"l":"update_bugs_on_worm","c":"Called once a pass from `$7688`. The bytes `$7F5A`, `$7F6A`, `$7F7A` and `$7F8A` (byte 6 of the four worm segment records, head first) count the bugs riding each segment. While `$8058` is not negative: if all four counts are 1 or more it starts the sound list at `$E4B7` (`$E4FC`) and sets `$8058` to `$FF`, which begins the worm's death; otherwise it moves bugs towards the tail, one segment a pass. A bug steps from a segment into the next one when that one is empty, and a segment other than the first that then holds 2 or more keeps all but one and hands one back to the segment before it. For example, counts (1,0,0,0) become (0,1,0,0), (2,0,1,0) become (1,1,0,1), and (1,1,1,1) give `$8058` = `$FF` with `$E4AE` = `$E4B7`. While `$8058` is negative it instead subtracts 1 from it each pass and returns as long as the result is still negative and at least one of the four counts is non-zero. When the result reaches `$7F`, or all four counts are zero, it continues into the end sequence at `$783B`.","t":"code","b":[58,88,128],"m":"ld","oa":32856,"o":"a,(control_lock)","x":[30344]},{"a":30627,"t":"code","b":[167],"m":"and","o":"a"},{"a":30628,"t":"code","b":[250,33,120],"m":"jp","oa":30753,"o":"m,$7821"},{"a":30631,"t":"code","b":[14,4],"m":"ld","o":"c,$04"},{"a":30633,"t":"code","b":[58,90,127],"m":"ld","oa":32602,"o":"a,($7F5A)"},{"a":30636,"t":"code","b":[61],"m":"dec","o":"a"},{"a":30637,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":30638,"t":"code","b":[250,178,119],"m":"jp","oa":30642,"o":"m,$77B2"},{"a":30641,"t":"code","b":[13],"m":"dec","o":"c"},{"a":30642,"t":"code","b":[58,106,127],"m":"ld","oa":32618,"o":"a,($7F6A)","x":[30638]},{"a":30645,"t":"code","b":[61],"m":"dec","o":"a"},{"a":30646,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":30647,"t":"code","b":[250,187,119],"m":"jp","oa":30651,"o":"m,$77BB"},{"a":30650,"t":"code","b":[13],"m":"dec","o":"c"},{"a":30651,"t":"code","b":[58,122,127],"m":"ld","oa":32634,"o":"a,($7F7A)","x":[30647]},{"a":30654,"t":"code","b":[61],"m":"dec","o":"a"},{"a":30655,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":30656,"t":"code","b":[250,196,119],"m":"jp","oa":30660,"o":"m,$77C4"},{"a":30659,"t":"code","b":[13],"m":"dec","o":"c"},{"a":30660,"t":"code","b":[58,138,127],"m":"ld","oa":32650,"o":"a,($7F8A)","x":[30656]},{"a":30663,"t":"code","b":[61],"m":"dec","o":"a"},{"a":30664,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":30665,"t":"code","b":[250,208,119],"m":"jp","oa":30672,"o":"m,$77D0"},{"a":30668,"t":"code","b":[13],"m":"dec","o":"c"},{"a":30669,"t":"code","b":[202,21,120],"m":"jp","oa":30741,"o":"z,$7815"},{"a":30672,"t":"code","b":[203,123],"m":"bit","o":"7,e","x":[30665]},{"a":30674,"t":"code","b":[40,6],"m":"jr","oa":30682,"o":"z,$77DA"},{"a":30676,"t":"code","b":[203,122],"m":"bit","o":"7,d"},{"a":30678,"t":"code","b":[32,6],"m":"jr","oa":30686,"o":"nz,$77DE"},{"a":30680,"t":"code","b":[21],"m":"dec","o":"d"},{"a":30681,"t":"code","b":[28],"m":"inc","o":"e"},{"a":30682,"t":"code","b":[203,122],"m":"bit","o":"7,d","x":[30674]},{"a":30684,"t":"code","b":[40,6],"m":"jr","oa":30692,"o":"z,$77E4"},{"a":30686,"t":"code","b":[203,125],"m":"bit","o":"7,l","x":[30678]},{"a":30688,"t":"code","b":[32,6],"m":"jr","oa":30696,"o":"nz,$77E8"},{"a":30690,"t":"code","b":[45],"m":"dec","o":"l"},{"a":30691,"t":"code","b":[20],"m":"inc","o":"d"},{"a":30692,"t":"code","b":[203,125],"m":"bit","o":"7,l","x":[30684]},{"a":30694,"t":"code","b":[40,6],"m":"jr","oa":30702,"o":"z,$77EE"},{"a":30696,"t":"code","b":[203,124],"m":"bit","o":"7,h","x":[30688]},{"a":30698,"t":"code","b":[32,2],"m":"jr","oa":30702,"o":"nz,$77EE"},{"a":30700,"t":"code","b":[37],"m":"dec","o":"h"},{"a":30701,"t":"code","b":[44],"m":"inc","o":"l"},{"a":30702,"t":"code","b":[123],"m":"ld","o":"a,e","x":[30694,30698]},{"a":30703,"t":"code","b":[60],"m":"inc","o":"a"},{"a":30704,"t":"code","b":[254,2],"m":"cp","o":"$02"},{"a":30706,"t":"code","b":[56,2],"m":"jr","oa":30710,"o":"c,$77F6"},{"a":30708,"t":"code","b":[61],"m":"dec","o":"a"},{"a":30709,"t":"code","b":[20],"m":"inc","o":"d"},{"a":30710,"t":"code","b":[50,138,127],"m":"ld","oa":32650,"o":"($7F8A),a","x":[30706]},{"a":30713,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":30714,"t":"code","b":[60],"m":"inc","o":"a"},{"a":30715,"t":"code","b":[254,2],"m":"cp","o":"$02"},{"a":30717,"t":"code","b":[56,2],"m":"jr","oa":30721,"o":"c,$7801"},{"a":30719,"t":"code","b":[61],"m":"dec","o":"a"},{"a":30720,"t":"code","b":[44],"m":"inc","o":"l"},{"a":30721,"t":"code","b":[50,122,127],"m":"ld","oa":32634,"o":"($7F7A),a","x":[30717]},{"a":30724,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":30725,"t":"code","b":[60],"m":"inc","o":"a"},{"a":30726,"t":"code","b":[254,2],"m":"cp","o":"$02"},{"a":30728,"t":"code","b":[56,2],"m":"jr","oa":30732,"o":"c,$780C"},{"a":30730,"t":"code","b":[61],"m":"dec","o":"a"},{"a":30731,"t":"code","b":[36],"m":"inc","o":"h"},{"a":30732,"t":"code","b":[50,106,127],"m":"ld","oa":32618,"o":"($7F6A),a","x":[30728]},{"a":30735,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":30736,"t":"code","b":[60],"m":"inc","o":"a"},{"a":30737,"t":"code","b":[50,90,127],"m":"ld","oa":32602,"o":"($7F5A),a"},{"a":30740,"t":"code","b":[201],"m":"ret"},{"a":30741,"t":"code","b":[17,183,228],"m":"ld","o":"de,$E4B7","x":[30669]},{"a":30744,"t":"code","b":[205,252,228],"m":"call","oa":58620,"o":"start_sound_script"},{"a":30747,"t":"code","b":[62,255],"m":"ld","o":"a,$FF"},{"a":30749,"t":"code","b":[50,88,128],"m":"ld","oa":32856,"o":"(control_lock),a"},{"a":30752,"t":"code","b":[201],"m":"ret"},{"a":30753,"t":"code","b":[61],"m":"dec","o":"a","x":[30628]},{"a":30754,"t":"code","b":[50,88,128],"m":"ld","oa":32856,"o":"(control_lock),a"},{"a":30757,"t":"code","b":[242,59,120],"m":"jp","oa":30779,"o":"p,end_of_game"},{"a":30760,"t":"code","b":[58,90,127],"m":"ld","oa":32602,"o":"a,($7F5A)"},{"a":30763,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":30764,"t":"code","b":[58,106,127],"m":"ld","oa":32618,"o":"a,($7F6A)"},{"a":30767,"t":"code","b":[177],"m":"or","o":"c"},{"a":30768,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":30769,"t":"code","b":[58,122,127],"m":"ld","oa":32634,"o":"a,($7F7A)"},{"a":30772,"t":"code","b":[177],"m":"or","o":"c"},{"a":30773,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":30774,"t":"code","b":[58,138,127],"m":"ld","oa":32650,"o":"a,($7F8A)"},{"a":30777,"t":"code","b":[177],"m":"or","o":"c"},{"a":30778,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":30779,"l":"end_of_game","c":"Entered only from the code above it (`$7825` and the fall-through after `$783A`). It first discards the return address into the frame loop, so play does not resume. It tests bit 7 of the spindle count `$805B`, which `$9E70` sets by writing `$C0` there when the head touches a type `$F6` object, then writes `$E6` to `$EB9B`, `$EBAA`, `$EBB9` and `$EBC8` and `$7900` to `$EB97`, `$EBA6`, `$EBB5` and `$EBC4`. Those are the type byte (+14) and source pointer (+10) of the display-list entries at `$EB9C`, `$EBAB` and `$EBBA`, the first three of the worm's four segments, and the same two offsets of a 15-byte slot at `$EB8D` that the list builder does not use (`$AAF3` and `$AED8` load `$EB8D` and at once overwrite the register). The fourth segment's entry at `$EBC9` is left as it is. Type `$E6` is drawn by `$870F` as the sprite whose address is at source + 15, which with source `$7900` is the word at `$790F`. With bit 7 set it jumps to `$78C9`. Otherwise it starts the sound list at `$E4EE` if none is playing (`$E4F7`) and shows eight passes of explosion through `$7911` and `$7914`: sprite `$C5B3` twice, `$C5EF` twice, `$C5B3`, `$C5EF`, then `$C62B` twice, with `$8056` stepping from 2 to 23 in threes, and continues into `$788F`.","t":"code","b":[225],"m":"pop","o":"hl","x":[30757]},{"a":30780,"t":"code","b":[58,91,128],"m":"ld","oa":32859,"o":"a,(spindles_collected)"},{"a":30783,"t":"code","b":[203,127],"m":"bit","o":"7,a"},{"a":30785,"t":"code","b":[62,230],"m":"ld","o":"a,$E6"},{"a":30787,"t":"code","b":[50,155,235],"m":"ld","oa":60315,"o":"($EB9B),a"},{"a":30790,"t":"code","b":[50,170,235],"m":"ld","oa":60330,"o":"($EBAA),a"},{"a":30793,"t":"code","b":[50,185,235],"m":"ld","oa":60345,"o":"($EBB9),a"},{"a":30796,"t":"code","b":[50,200,235],"m":"ld","oa":60360,"o":"($EBC8),a"},{"a":30799,"t":"code","b":[33,0,121],"m":"ld","o":"hl,$7900"},{"a":30802,"t":"code","b":[34,151,235],"m":"ld","oa":60311,"o":"($EB97),hl"},{"a":30805,"t":"code","b":[34,166,235],"m":"ld","oa":60326,"o":"($EBA6),hl"},{"a":30808,"t":"code","b":[34,181,235],"m":"ld","oa":60341,"o":"($EBB5),hl"},{"a":30811,"t":"code","b":[34,196,235],"m":"ld","oa":60356,"o":"($EBC4),hl"},{"a":30814,"t":"code","b":[32,105],"m":"jr","oa":30921,"o":"nz,drive_reached_sequence"},{"a":30816,"t":"code","b":[17,238,228],"m":"ld","o":"de,$E4EE"},{"a":30819,"t":"code","b":[205,247,228],"m":"call","oa":58615,"o":"start_sound_script_if_idle"},{"a":30822,"t":"code","b":[62,2],"m":"ld","o":"a,$02"},{"a":30824,"t":"code","b":[33,179,197],"m":"ld","o":"hl,$C5B3"},{"a":30827,"t":"code","b":[205,17,121],"m":"call","oa":30993,"o":"set_end_sprite"},{"a":30830,"t":"code","b":[205,20,121],"m":"call","oa":30996,"o":"end_sequence_pass"},{"a":30833,"t":"code","b":[33,239,197],"m":"ld","o":"hl,$C5EF"},{"a":30836,"t":"code","b":[205,17,121],"m":"call","oa":30993,"o":"set_end_sprite"},{"a":30839,"t":"code","b":[205,20,121],"m":"call","oa":30996,"o":"end_sequence_pass"},{"a":30842,"t":"code","b":[33,179,197],"m":"ld","o":"hl,$C5B3"},{"a":30845,"t":"code","b":[205,17,121],"m":"call","oa":30993,"o":"set_end_sprite"},{"a":30848,"t":"code","b":[33,239,197],"m":"ld","o":"hl,$C5EF"},{"a":30851,"t":"code","b":[205,17,121],"m":"call","oa":30993,"o":"set_end_sprite"},{"a":30854,"t":"code","b":[33,43,198],"m":"ld","o":"hl,$C62B"},{"a":30857,"t":"code","b":[205,17,121],"m":"call","oa":30993,"o":"set_end_sprite"},{"a":30860,"t":"code","b":[205,20,121],"m":"call","oa":30996,"o":"end_sequence_pass"},{"a":30863,"l":"keep_hi_score_and_leave","c":"The end of both end-of-game paths: reached by falling through from `$788C` and by the jumps at `$78F8` and `$78FE`. If the hi-score `$8064` is at least the score `$8060` it jumps straight to the menu at `$E508`. Otherwise it copies the score into `$8064`, splits it with `$7B2E` and draws five digits at `$52BB`, `$52BA`, `$52B9`, `$52B8` and `$52B7` (character columns 27 down to 23 of row 21, starting two pixel lines into the cell) before jumping to `$E508`. The last two digits are taken from B after the digit routine has already been called three times, and that routine leaves B = 0, so the thousands and ten-thousands are always drawn as 0. Run on a score of 12345, this code stores 12345 in `$8064` and draws 0, 0, 3, 4, 5; the panel's own score code at `$7ADF` saves BC first and draws 1, 2, 3, 4, 5.","t":"code","b":[42,100,128],"m":"ld","oa":32868,"o":"hl,(hi_score)","x":[30968,30974]},{"a":30866,"t":"code","b":[237,91,96,128],"m":"ld","oa":32864,"o":"de,(score)"},{"a":30870,"t":"code","b":[167],"m":"and","o":"a"},{"a":30871,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":30873,"t":"code","b":[210,8,229],"m":"jp","oa":58632,"o":"nc,menu"},{"a":30876,"t":"code","b":[237,83,100,128],"m":"ld","oa":32868,"o":"(hi_score),de"},{"a":30880,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":30881,"t":"code","b":[205,46,123],"m":"call","oa":31534,"o":"split_decimal"},{"a":30884,"t":"code","b":[33,187,82],"m":"ld","o":"hl,$52BB"},{"a":30887,"t":"code","b":[205,99,123],"m":"call","oa":31587,"o":"draw_digit_low_half"},{"a":30890,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":30891,"t":"code","b":[33,186,82],"m":"ld","o":"hl,$52BA"},{"a":30894,"t":"code","b":[205,99,123],"m":"call","oa":31587,"o":"draw_digit_low_half"},{"a":30897,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":30898,"t":"code","b":[33,185,82],"m":"ld","o":"hl,$52B9"},{"a":30901,"t":"code","b":[205,107,123],"m":"call","oa":31595,"o":"draw_digit_high_half"},{"a":30904,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":30905,"t":"code","b":[33,184,82],"m":"ld","o":"hl,$52B8"},{"a":30908,"t":"code","b":[205,99,123],"m":"call","oa":31587,"o":"draw_digit_low_half"},{"a":30911,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":30912,"t":"code","b":[33,183,82],"m":"ld","o":"hl,$52B7"},{"a":30915,"t":"code","b":[205,107,123],"m":"call","oa":31595,"o":"draw_digit_high_half"},{"a":30918,"t":"code","b":[195,8,229],"m":"jp","oa":58632,"o":"menu"},{"a":30921,"l":"drive_reached_sequence","c":"Reached from `$785E` when bit 7 of `$805B` is set, that is after the head touched a type `$F6` object. It is described here from the code alone and has not been seen to run. First loop: while the head's y high byte `$7FF7` is 2 or more it subtracts 2 from it, calls `$EAA9` (clear and floor), rebuilds the display list (`$AAF3`), writes `$FF` over the type bytes of all four worm-segment entries (`$EBAA`, `$EBB9`, `$EBC8`, `$EBD7`) so that the worm is not drawn, then draws the list (`$B2F4`) and copies it to the screen (`$E9E8`). Second loop: once a pass, with the same three calls but without rebuilding the list, it steps the byte at `$BAAD`, which the type `$F6` drawing code at `$BB06` reads. A value from 0 to `$7F` goes up by 1 and the loop ends when it reaches `$80`; a value of `$80` or more goes down by 3 and the loop ends when it drops below `$80`. Both exits go to `$788F`.","t":"code","b":[58,247,127],"m":"ld","oa":32759,"o":"a,($7FF7)","x":[30814,30957]},{"a":30924,"t":"code","b":[214,2],"m":"sub","o":"$02"},{"a":30926,"t":"code","b":[56,31],"m":"jr","oa":30959,"o":"c,$78EF"},{"a":30928,"t":"code","b":[50,247,127],"m":"ld","oa":32759,"o":"($7FF7),a"},{"a":30931,"t":"code","b":[205,169,234],"m":"call","oa":60073,"o":"clear_buffer_draw_floor"},{"a":30934,"t":"code","b":[205,243,170],"m":"call","oa":43763,"o":"build_display_list"},{"a":30937,"t":"code","b":[62,255],"m":"ld","o":"a,$FF"},{"a":30939,"t":"code","b":[50,215,235],"m":"ld","oa":60375,"o":"($EBD7),a"},{"a":30942,"t":"code","b":[50,170,235],"m":"ld","oa":60330,"o":"($EBAA),a"},{"a":30945,"t":"code","b":[50,185,235],"m":"ld","oa":60345,"o":"($EBB9),a"},{"a":30948,"t":"code","b":[50,200,235],"m":"ld","oa":60360,"o":"($EBC8),a"},{"a":30951,"t":"code","b":[205,244,178],"m":"call","oa":45812,"o":"draw_display_list"},{"a":30954,"t":"code","b":[205,232,233],"m":"call","oa":59880,"o":"copy_buffer_to_screen"},{"a":30957,"t":"code","b":[24,218],"m":"jr","oa":30921,"o":"drive_reached_sequence"},{"a":30959,"t":"code","b":[58,173,186],"m":"ld","oa":47789,"o":"a,(disk_lift_counter)","x":[30926,30989]},{"a":30962,"t":"code","b":[167],"m":"and","o":"a"},{"a":30963,"t":"code","b":[242,253,120],"m":"jp","oa":30973,"o":"p,$78FD"},{"a":30966,"t":"code","b":[214,3],"m":"sub","o":"$03"},{"a":30968,"t":"code","b":[242,143,120],"m":"jp","oa":30863,"o":"p,keep_hi_score_and_leave"},{"a":30971,"t":"code","b":[24,4],"m":"jr","oa":30977,"o":"$7901"},{"a":30973,"t":"code","b":[60],"m":"inc","o":"a","x":[30963]},{"a":30974,"t":"code","b":[250,143,120],"m":"jp","oa":30863,"o":"m,keep_hi_score_and_leave"},{"a":30977,"t":"code","b":[50,173,186],"m":"ld","oa":47789,"o":"(disk_lift_counter),a","x":[30971]},{"a":30980,"t":"code","b":[205,169,234],"m":"call","oa":60073,"o":"clear_buffer_draw_floor"},{"a":30983,"t":"code","b":[205,244,178],"m":"call","oa":45812,"o":"draw_display_list"},{"a":30986,"t":"code","b":[205,232,233],"m":"call","oa":59880,"o":"copy_buffer_to_screen"},{"a":30989,"t":"code","b":[24,224],"m":"jr","oa":30959,"o":"$78EF"},{"a":30991,"l":"end_sprite_address","c":"Two bytes holding the address of the sprite that the end-of-game explosion shows. `$7911` is the only instruction that names it. It is read through IX: `$783B` gives the worm's display-list entries the source pointer `$7900`, and the type `$E6` drawing routine at `$870F` takes the sprite address from source + 15 and + 16, which are these two bytes. The image holds `$C5B3`, the first value the sequence loads.","t":"addr","b":[179,197],"oa":50611,"o":"explosion_picture_1","x":[30993]},{"a":30993,"l":"set_end_sprite","c":"Stores HL in `$790F` and continues into `$7914`. Called five times, from `$786B`, `$7874`, `$787D`, `$7883` and `$7889`, with HL = `$C5B3`, `$C5EF`, `$C5B3`, `$C5EF` and `$C62B`.","t":"code","b":[34,15,121],"m":"ld","oa":30991,"o":"(end_sprite_address),hl","x":[30827,30836,30845,30851,30857]},{"a":30996,"l":"end_sequence_pass","c":"Shows one pass of the end-of-game explosion. It stores A in `$8056` (the click spacing `$EAA9` uses while it clears the frame buffer), calls `$EAA9`, `$B2F4` and `$E9E8` (clear and floor, draw the display list, copy to the screen) without rebuilding the list, and returns with A raised by 3. Called three times directly, from `$786E`, `$7877` and `$788C`, and entered five more times by falling through from `$7911`.","t":"code","b":[50,86,128],"m":"ld","oa":32854,"o":"(clear_click_period),a","x":[30830,30839,30860]},{"a":30999,"t":"code","b":[198,3],"m":"add","o":"a,$03"},{"a":31001,"t":"code","b":[245],"m":"push","o":"af"},{"a":31002,"t":"code","b":[205,169,234],"m":"call","oa":60073,"o":"clear_buffer_draw_floor"},{"a":31005,"t":"code","b":[205,244,178],"m":"call","oa":45812,"o":"draw_display_list"},{"a":31008,"t":"code","b":[205,232,233],"m":"call","oa":59880,"o":"copy_buffer_to_screen"},{"a":31011,"t":"code","b":[241],"m":"pop","o":"af"},{"a":31012,"t":"code","b":[201],"m":"ret"},{"a":31013,"l":"add_object_wave","c":"Called by the frame loop when the frame counter's low byte is `$64`, with HL still holding the counter. It returns at once if bit 0 of the counter's high byte `$805A` is set, so it acts once in 512 passes. If the high byte is a multiple of 4 it sets `$8066` to `$0C`. Then, if the object count `$7C71` is below `$0A`, it adds 6 to the count and copies the 180 bytes at `$7951` (six 30-byte records) to the end of the object list at `($7C72)`, moving that pointer on by 180. One caller, `$7650`.","t":"code","b":[58,90,128],"m":"ld","oa":32858,"o":"a,($805A)","x":[30288]},{"a":31016,"t":"code","b":[203,71],"m":"bit","o":"0,a"},{"a":31018,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":31019,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":31020,"t":"code","b":[230,3],"m":"and","o":"$03"},{"a":31022,"t":"code","b":[32,5],"m":"jr","oa":31029,"o":"nz,$7935"},{"a":31024,"t":"code","b":[62,12],"m":"ld","o":"a,$0C"},{"a":31026,"t":"code","b":[50,102,128],"m":"ld","oa":32870,"o":"(bug_spawn_budget),a"},{"a":31029,"t":"code","b":[58,113,124],"m":"ld","oa":31857,"o":"a,(object_count_plus_one)","x":[31022]},{"a":31032,"t":"code","b":[254,10],"m":"cp","o":"$0A"},{"a":31034,"t":"code","b":[208],"m":"ret","o":"nc"},{"a":31035,"t":"code","b":[198,6],"m":"add","o":"a,$06"},{"a":31037,"t":"code","b":[50,113,124],"m":"ld","oa":31857,"o":"(object_count_plus_one),a"},{"a":31040,"t":"code","b":[33,81,121],"m":"ld","o":"hl,$7951"},{"a":31043,"t":"code","b":[237,91,114,124],"m":"ld","oa":31858,"o":"de,(object_list_end)"},{"a":31047,"t":"code","b":[1,180,0],"m":"ld","o":"bc,$00B4"},{"a":31050,"t":"code","b":[237,176],"m":"ldir"},{"a":31052,"t":"code","b":[237,83,114,124],"m":"ld","oa":31858,"o":"(object_list_end),de"},{"a":31056,"t":"code","b":[201],"m":"ret"},{"a":31057,"l":"object_wave_records","c":"Six ready-made 30-byte object records, 180 bytes (`$7947` loads the length `$B4`), which `$7925` appends to the object list. Their types (byte 0) are `$F0`, `$F1`, `$F1`, `$F0`, `$F1`, `$F1`. All six have bytes 2 and 3 = `$64`, `$64`; a byte 3 of 5 or more makes the pair a cell address, here `$6464`, the first cell of the board data. All six also have bytes 8 and 9 = `$0A`, byte 11 = `$30` and byte 15 = `$FF`. Bytes 5 and 7 (x and y inside the cell) are `$85,$B0`, `$85,$70`, `$A4,$53`, `$85,$10`, `$85,$30` and `$64,$53`; byte 14 (the heading) is `$40`, `$40`, `$00`, `$C0`, `$C0`, `$80`; byte 13 is `$30` in the two `$F0` records and `$3A` in the four `$F1` records. Type `$F1` is the type the firing code gives a sparky and the type the worm collects for one (`$9E19`, `$A626`); type `$F0` is skipped by the display-list builder (`$AE5A`), so those two are never drawn. `$7940` holds the only reference.","t":"byte","b":[240,0,100,100,0,133,0,176]},{"a":31065,"t":"byte","b":[10,10,0,48,0,48,64,255]},{"a":31073,"t":"byte","b":[0,0,0,64,6,3,1,20]},{"a":31081,"t":"byte","b":[1,0,0,0,0,156,241,0]},{"a":31089,"t":"byte","b":[100,100,0,133,0,112,10,10]},{"a":31097,"t":"byte","b":[0,48,0,58,64,255,0,0]},{"a":31105,"t":"byte","b":[0,64,6,3,1,0,0,0]},{"a":31113,"t":"byte","b":[0,0,0,156,241,0,100,100]},{"a":31121,"t":"byte","b":[0,164,0,83,10,10,0,48]},{"a":31129,"t":"byte","b":[0,58,0,255,0,0,0,0]},{"a":31137,"t":"byte","b":[6,3,1,0,0,0,0,0]},{"a":31145,"t":"byte","b":[0,156,240,0,100,100,0,133]},{"a":31153,"t":"byte","b":[0,16,10,10,0,48,0,48]},{"a":31161,"t":"byte","b":[192,255,0,0,0,192,6,3]},{"a":31169,"t":"byte","b":[1,20,1,0,0,0,0,155]},{"a":31177,"t":"byte","b":[241,0,100,100,0,133,0,48]},{"a":31185,"t":"byte","b":[10,10,0,48,0,58,192,255]},{"a":31193,"t":"byte","b":[0,0,0,192,6,3,1,0]},{"a":31201,"t":"byte","b":[0,0,0,0,0,155,241,0]},{"a":31209,"t":"byte","b":[100,100,0,100,0,83,10,10]},{"a":31217,"t":"byte","b":[0,48,0,58,128,255,0,0]},{"a":31225,"t":"byte","b":[0,0,6,3,1,0,0,0]},{"a":31233,"t":"byte","b":[0,0,0,156]},{"a":31237,"l":"panel_light_colours","c":"Sixteen attribute bytes: the colours of the column of lights in the bottom panel, character columns 10 and 11 of rows 16 to 23. Each pass `$7A30` overwrites the entry numbered by the low four bits of `$E470` with a colour from `$7A15`, fills all sixteen with `$41` if the object count `$7C71` is `$12` or more, and copies them to the attribute file: entries 0, 6, 10 and 12 each colour both cells of rows 16, 19, 21 and 22, and the pairs 2-3, 4-5, 8-9 and 14-15 colour the two cells of rows 17, 18, 20 and 23. Entries 1, 7, 11 and 13 are written but never copied to the screen. Three instructions load the address (`$7A3D`, `$7A49`, `$7A56`) and `$7A4C` loads `$7A06` for the fill.","t":"byte","b":[3,0,7,70,4,67,6,0]},{"a":31245,"t":"byte","b":[71,5,68,0,6,0,67,5]},{"a":31253,"l":"light_colour_choices","c":"Sixteen attribute values that the panel lights take their colours from, indexed by a 4-bit number in `$7A25`: `$03 $43 $04 $05 $44 $05 $45 $43 $06 $04 $46 $07 $47 $45 $04 $07`. All have black paper; the ink numbers are 3, 4, 5, 6 and 7, and seven of the sixteen have the BRIGHT bit set. One instruction names it, `$7A2A`.","t":"byte","b":[3,67,4,5,68,5,69,67]},{"a":31261,"t":"byte","b":[6,4,70,7,71,69,4,7]},{"a":31269,"l":"pick_light_colour","c":"Returns A = the byte at `$7A15` + (A AND `$0F`), leaving the index in DE. One caller, `$7A33`. For example A = `$FF` returns `$07`.","t":"code","b":[230,15],"m":"and","o":"$0F","x":[31283]},{"a":31271,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":31272,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":31274,"t":"code","b":[33,21,122],"m":"ld","o":"hl,$7A15"},{"a":31277,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":31278,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":31279,"t":"code","b":[201],"m":"ret"},{"a":31280,"l":"update_panel","c":"Called once a pass from `$7691`. Lights: it takes a random byte from `$E472`, picks a colour with `$7A25` and stores it in the entry of `$7A05` numbered by the low four bits of `$E470`; then, if the object count `$7C71` is `$12` or more, it overwrites all sixteen entries with `$41`; then it copies the table to the attributes at `$5A0A`, `$5A2A` and so on down to `$5AEA`, two cells in each of rows 16 to 23. Counters: when the spindle count `$805B` differs from its copy `$805C` it updates the copy and draws three digits at `$5659-$565B`; when the score `$8060` differs from the shown score `$8062` it moves the shown score towards it, by at most 3 a pass upwards and all at once downwards, and draws five digits at `$5097-$509B`; when the sparky count `$805D` differs from its copy `$805E` it updates the copy and draws three digits at `$5439-$543B`. The digits come from `$7B2E` and are drawn by `$7B63` and `$7B6B`. The two leading digits of the sparky and spindle rows are never drawn here.","t":"code","b":[205,114,228],"m":"call","oa":58482,"o":"random_next","x":[30353]},{"a":31283,"t":"code","b":[205,37,122],"m":"call","oa":31269,"o":"pick_light_colour"},{"a":31286,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":31287,"t":"code","b":[58,112,228],"m":"ld","oa":58480,"o":"a,($E470)"},{"a":31290,"t":"code","b":[230,15],"m":"and","o":"$0F"},{"a":31292,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":31293,"t":"code","b":[33,5,122],"m":"ld","o":"hl,$7A05"},{"a":31296,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":31297,"t":"code","b":[113],"m":"ld","o":"(hl),c"},{"a":31298,"t":"code","b":[58,113,124],"m":"ld","oa":31857,"o":"a,(object_count_plus_one)"},{"a":31301,"t":"code","b":[254,18],"m":"cp","o":"$12"},{"a":31303,"t":"code","b":[56,13],"m":"jr","oa":31318,"o":"c,$7A56"},{"a":31305,"t":"code","b":[33,5,122],"m":"ld","o":"hl,$7A05"},{"a":31308,"t":"code","b":[17,6,122],"m":"ld","o":"de,$7A06"},{"a":31311,"t":"code","b":[1,15,0],"m":"ld","o":"bc,$000F"},{"a":31314,"t":"code","b":[54,65],"m":"ld","o":"(hl),$41"},{"a":31316,"t":"code","b":[237,176],"m":"ldir"},{"a":31318,"t":"code","b":[33,5,122],"m":"ld","o":"hl,$7A05","x":[31303]},{"a":31321,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":31322,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31323,"t":"code","b":[83],"m":"ld","o":"d,e"},{"a":31324,"t":"code","b":[237,83,10,90],"m":"ld","oa":23050,"o":"($5A0A),de"},{"a":31328,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31329,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":31330,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31331,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":31332,"t":"code","b":[237,83,42,90],"m":"ld","oa":23082,"o":"($5A2A),de"},{"a":31336,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31337,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":31338,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31339,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":31340,"t":"code","b":[237,83,74,90],"m":"ld","oa":23114,"o":"($5A4A),de"},{"a":31344,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31345,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":31346,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31347,"t":"code","b":[83],"m":"ld","o":"d,e"},{"a":31348,"t":"code","b":[237,83,106,90],"m":"ld","oa":23146,"o":"($5A6A),de"},{"a":31352,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31353,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":31354,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31355,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":31356,"t":"code","b":[237,83,138,90],"m":"ld","oa":23178,"o":"($5A8A),de"},{"a":31360,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31361,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":31362,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31363,"t":"code","b":[83],"m":"ld","o":"d,e"},{"a":31364,"t":"code","b":[237,83,170,90],"m":"ld","oa":23210,"o":"($5AAA),de"},{"a":31368,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31369,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":31370,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31371,"t":"code","b":[83],"m":"ld","o":"d,e"},{"a":31372,"t":"code","b":[237,83,202,90],"m":"ld","oa":23242,"o":"($5ACA),de"},{"a":31376,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31377,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":31378,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31379,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":31380,"t":"code","b":[237,83,234,90],"m":"ld","oa":23274,"o":"($5AEA),de"},{"a":31384,"t":"code","b":[58,92,128],"m":"ld","oa":32860,"o":"a,(spindles_shown)"},{"a":31387,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":31388,"t":"code","b":[58,91,128],"m":"ld","oa":32859,"o":"a,(spindles_collected)"},{"a":31391,"t":"code","b":[185],"m":"cp","o":"c"},{"a":31392,"t":"code","b":[40,29],"m":"jr","oa":31423,"o":"z,$7ABF"},{"a":31394,"t":"code","b":[50,92,128],"m":"ld","oa":32860,"o":"(spindles_shown),a"},{"a":31397,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":31398,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":31400,"t":"code","b":[205,46,123],"m":"call","oa":31534,"o":"split_decimal"},{"a":31403,"t":"code","b":[33,91,86],"m":"ld","o":"hl,$565B"},{"a":31406,"t":"code","b":[205,99,123],"m":"call","oa":31587,"o":"draw_digit_low_half"},{"a":31409,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":31410,"t":"code","b":[33,90,86],"m":"ld","o":"hl,$565A"},{"a":31413,"t":"code","b":[205,99,123],"m":"call","oa":31587,"o":"draw_digit_low_half"},{"a":31416,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":31417,"t":"code","b":[33,89,86],"m":"ld","o":"hl,$5659"},{"a":31420,"t":"code","b":[205,107,123],"m":"call","oa":31595,"o":"draw_digit_high_half"},{"a":31423,"t":"code","b":[42,96,128],"m":"ld","oa":32864,"o":"hl,(score)","x":[31392]},{"a":31426,"t":"code","b":[237,91,98,128],"m":"ld","oa":32866,"o":"de,(score_shown)"},{"a":31430,"t":"code","b":[167],"m":"and","o":"a"},{"a":31431,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":31433,"t":"code","b":[202,7,123],"m":"jp","oa":31495,"o":"z,$7B07"},{"a":31436,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":31437,"t":"code","b":[250,219,122],"m":"jp","oa":31451,"o":"m,$7ADB"},{"a":31440,"t":"code","b":[167],"m":"and","o":"a"},{"a":31441,"t":"code","b":[32,5],"m":"jr","oa":31448,"o":"nz,$7AD8"},{"a":31443,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":31444,"t":"code","b":[254,3],"m":"cp","o":"$03"},{"a":31446,"t":"code","b":[56,3],"m":"jr","oa":31451,"o":"c,$7ADB"},{"a":31448,"t":"code","b":[33,3,0],"m":"ld","o":"hl,$0003","x":[31441]},{"a":31451,"t":"code","b":[25],"m":"add","o":"hl,de","x":[31437,31446]},{"a":31452,"t":"code","b":[34,98,128],"m":"ld","oa":32866,"o":"(score_shown),hl"},{"a":31455,"t":"code","b":[205,46,123],"m":"call","oa":31534,"o":"split_decimal"},{"a":31458,"t":"code","b":[33,155,80],"m":"ld","o":"hl,$509B"},{"a":31461,"t":"code","b":[197],"m":"push","o":"bc"},{"a":31462,"t":"code","b":[205,99,123],"m":"call","oa":31587,"o":"draw_digit_low_half"},{"a":31465,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":31466,"t":"code","b":[33,154,80],"m":"ld","o":"hl,$509A"},{"a":31469,"t":"code","b":[205,99,123],"m":"call","oa":31587,"o":"draw_digit_low_half"},{"a":31472,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":31473,"t":"code","b":[33,153,80],"m":"ld","o":"hl,$5099"},{"a":31476,"t":"code","b":[205,107,123],"m":"call","oa":31595,"o":"draw_digit_high_half"},{"a":31479,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":31480,"t":"code","b":[72],"m":"ld","o":"c,b"},{"a":31481,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":31482,"t":"code","b":[33,152,80],"m":"ld","o":"hl,$5098"},{"a":31485,"t":"code","b":[205,99,123],"m":"call","oa":31587,"o":"draw_digit_low_half"},{"a":31488,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":31489,"t":"code","b":[33,151,80],"m":"ld","o":"hl,$5097"},{"a":31492,"t":"code","b":[205,107,123],"m":"call","oa":31595,"o":"draw_digit_high_half"},{"a":31495,"t":"code","b":[58,94,128],"m":"ld","oa":32862,"o":"a,(sparkies_shown)","x":[31433]},{"a":31498,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":31499,"t":"code","b":[58,93,128],"m":"ld","oa":32861,"o":"a,(sparkies)"},{"a":31502,"t":"code","b":[185],"m":"cp","o":"c"},{"a":31503,"t":"code","b":[200],"m":"ret","o":"z"},{"a":31504,"t":"code","b":[50,94,128],"m":"ld","oa":32862,"o":"(sparkies_shown),a"},{"a":31507,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":31508,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":31510,"t":"code","b":[205,46,123],"m":"call","oa":31534,"o":"split_decimal"},{"a":31513,"t":"code","b":[33,59,84],"m":"ld","o":"hl,$543B"},{"a":31516,"t":"code","b":[205,99,123],"m":"call","oa":31587,"o":"draw_digit_low_half"},{"a":31519,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":31520,"t":"code","b":[33,58,84],"m":"ld","o":"hl,$543A"},{"a":31523,"t":"code","b":[205,99,123],"m":"call","oa":31587,"o":"draw_digit_low_half"},{"a":31526,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":31527,"t":"code","b":[33,57,84],"m":"ld","o":"hl,$5439"},{"a":31530,"t":"code","b":[205,107,123],"m":"call","oa":31595,"o":"draw_digit_high_half"},{"a":31533,"t":"code","b":[201],"m":"ret"},{"a":31534,"l":"split_decimal","c":"Splits the 16-bit number in HL into five decimal digits by repeated subtraction: it calls `$7B5D` with DE = -10000, -1000, -100 and -10 in turn. Returns B = ten-thousands in the high four bits and thousands in the low four, C = hundreds and tens packed the same way, and A = L = units. For example HL = `$3039` (12345) gives B = `$12`, C = `$34`, A = 5. Four callers: `$78A1`, `$7AA8`, `$7ADF` and `$7B16`. The `INC A` at `$7B5C`, after this routine's `RET`, is the loop step of the routine that follows.","t":"code","b":[17,240,216],"m":"ld","o":"de,$D8F0","x":[30881,31400,31455,31510]},{"a":31537,"t":"code","b":[175],"m":"xor","o":"a"},{"a":31538,"t":"code","b":[205,93,123],"m":"call","oa":31581,"o":"count_power_of_ten"},{"a":31541,"t":"code","b":[203,7],"m":"rlc","o":"a"},{"a":31543,"t":"code","b":[203,7],"m":"rlc","o":"a"},{"a":31545,"t":"code","b":[203,7],"m":"rlc","o":"a"},{"a":31547,"t":"code","b":[203,7],"m":"rlc","o":"a"},{"a":31549,"t":"code","b":[17,24,252],"m":"ld","o":"de,$FC18"},{"a":31552,"t":"code","b":[205,93,123],"m":"call","oa":31581,"o":"count_power_of_ten"},{"a":31555,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":31556,"t":"code","b":[175],"m":"xor","o":"a"},{"a":31557,"t":"code","b":[17,156,255],"m":"ld","o":"de,$FF9C"},{"a":31560,"t":"code","b":[205,93,123],"m":"call","oa":31581,"o":"count_power_of_ten"},{"a":31563,"t":"code","b":[203,7],"m":"rlc","o":"a"},{"a":31565,"t":"code","b":[203,7],"m":"rlc","o":"a"},{"a":31567,"t":"code","b":[203,7],"m":"rlc","o":"a"},{"a":31569,"t":"code","b":[203,7],"m":"rlc","o":"a"},{"a":31571,"t":"code","b":[17,246,255],"m":"ld","o":"de,$FFF6"},{"a":31574,"t":"code","b":[205,93,123],"m":"call","oa":31581,"o":"count_power_of_ten"},{"a":31577,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":31578,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":31579,"t":"code","b":[201],"m":"ret"},{"a":31580,"t":"code","b":[60],"m":"inc","o":"a","x":[31582]},{"a":31581,"l":"count_power_of_ten","c":"Adds DE, a negative power of ten, to HL for as long as the addition carries, adding 1 to A for each such step through the `INC A` at `$7B5C`, then takes the last addition back. On return A has gained one decimal digit and HL holds the remainder. Called four times, all from `$7B2E`. For example HL = `$3039`, DE = `$D8F0`, A = 0 returns A = 1 and HL = `$0929`.","t":"code","b":[25],"m":"add","o":"hl,de","x":[31538,31552,31560,31574]},{"a":31582,"t":"code","b":[56,252],"m":"jr","oa":31580,"o":"c,$7B5C"},{"a":31584,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":31586,"t":"code","b":[201],"m":"ret"},{"a":31587,"l":"draw_digit_low_half","c":"Draws the digit held in the low four bits of A: four `SLA A` move it to the high four bits and execution continues into `$7B6B`. Ten callers: `$78A7`, `$78AE`, `$78BC`, `$7AAE`, `$7AB5`, `$7AE6`, `$7AED`, `$7AFD`, `$7B1C` and `$7B23`.","t":"code","b":[203,39],"m":"sla","o":"a","x":[30887,30894,30908,31406,31413,31462,31469,31485,31516,31523]},{"a":31589,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":31591,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":31593,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":31595,"l":"draw_digit_high_half","c":"Draws the digit held in the high four bits of A at screen address HL: eight bytes from `$CDB6` + 8 times the digit, one per pixel line. It steps H for each line and, when H reaches a multiple of 8, moves to the next character row by setting H to `$50` and adding `$20` to L, which is only right in the bottom third of the screen, where all its callers draw. It returns with B = 0. Six direct callers (`$78B5`, `$78C3`, `$7ABC`, `$7AF4`, `$7B04`, `$7B2A`) and the fall-through from `$7B63`. For example A = `$35`, HL = `$565B` writes the glyph for 3 to `$565B`, `$575B` and then `$507B` to `$557B`.","t":"code","b":[203,63],"m":"srl","o":"a","x":[30901,30915,31420,31476,31492,31530]},{"a":31597,"t":"code","b":[230,120],"m":"and","o":"$78"},{"a":31599,"t":"code","b":[6,8],"m":"ld","o":"b,$08"},{"a":31601,"t":"code","b":[17,182,205],"m":"ld","o":"de,$CDB6"},{"a":31604,"t":"code","b":[131],"m":"add","o":"a,e"},{"a":31605,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":31606,"t":"code","b":[48,1],"m":"jr","oa":31609,"o":"nc,$7B79"},{"a":31608,"t":"code","b":[20],"m":"inc","o":"d"},{"a":31609,"t":"code","b":[26],"m":"ld","o":"a,(de)","x":[31606,31617,31625]},{"a":31610,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":31611,"t":"code","b":[19],"m":"inc","o":"de"},{"a":31612,"t":"code","b":[5],"m":"dec","o":"b"},{"a":31613,"t":"code","b":[200],"m":"ret","o":"z"},{"a":31614,"t":"code","b":[36],"m":"inc","o":"h"},{"a":31615,"t":"code","b":[203,92],"m":"bit","o":"3,h"},{"a":31617,"t":"code","b":[40,246],"m":"jr","oa":31609,"o":"z,$7B79"},{"a":31619,"t":"code","b":[38,80],"m":"ld","o":"h,$50"},{"a":31621,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":31622,"t":"code","b":[198,32],"m":"add","o":"a,$20"},{"a":31624,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":31625,"t":"code","b":[24,238],"m":"jr","oa":31609,"o":"$7B79"},{"a":31627,"l":"wait_for_one_key","c":"Scans the eight keyboard half-rows with `IN A,(C)` at `$7B91` (ports `$FEFE`, `$FDFE`, `$FBFE` and so on to `$7FFE`) and returns only when exactly one key is down, with its code in A. The code is 8 times (4 minus the key's bit number in the half-row) plus the row number, where the row runs from 7 for `$FE` down to 0 for `$7F`: B is 0, SPACE is `$20` and CAPS SHIFT is `$27`. If two half-rows show a key, or one half-row shows two keys, or no key is down, it starts the scan again. One caller, the key redefiner at `$E593`. Run against a model of the keyboard matrix, each of the 40 keys returns the code whose entry in `$7BB0` is that key, and two keys held together never return.","t":"code","b":[17,47,255],"m":"ld","o":"de,$FF2F","x":[31641,31651,31661,58771]},{"a":31630,"t":"code","b":[1,254,254],"m":"ld","o":"bc,$FEFE"},{"a":31633,"t":"code","b":[237,120],"m":"in","o":"a,(c)","x":[31657]},{"a":31635,"t":"code","b":[47],"m":"cpl"},{"a":31636,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":31638,"t":"code","b":[40,14],"m":"jr","oa":31654,"o":"z,$7BA6"},{"a":31640,"t":"code","b":[20],"m":"inc","o":"d"},{"a":31641,"t":"code","b":[32,240],"m":"jr","oa":31627,"o":"nz,wait_for_one_key"},{"a":31643,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":31644,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":31645,"t":"code","b":[214,8],"m":"sub","o":"$08","x":[31649]},{"a":31647,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":31649,"t":"code","b":[48,250],"m":"jr","oa":31645,"o":"nc,$7B9D"},{"a":31651,"t":"code","b":[32,230],"m":"jr","oa":31627,"o":"nz,wait_for_one_key"},{"a":31653,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":31654,"t":"code","b":[29],"m":"dec","o":"e","x":[31638]},{"a":31655,"t":"code","b":[203,0],"m":"rlc","o":"b"},{"a":31657,"t":"code","b":[56,230],"m":"jr","oa":31633,"o":"c,$7B91"},{"a":31659,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":31660,"t":"code","b":[20],"m":"inc","o":"d"},{"a":31661,"t":"code","b":[40,220],"m":"jr","oa":31627,"o":"z,wait_for_one_key"},{"a":31663,"t":"code","b":[201],"m":"ret"},{"a":31664,"l":"key_name_codes","c":"Forty bytes, one for each key code that `$7B8B` returns: the character the key redefiner shows for that key. Codes 0 to 7 are `B H Y 6 5 T G V`, 8 to 15 `N J U 7 4 R F C`, 16 to 23 `M K I 8 3 E D X`, 24 to 31 `$82 L O 9 2 W S Z` and 32 to 39 `$81 $84 P 0 1 Q A $83`. The four bytes `$81` to `$84` are message numbers for the text printer at `$E95D`, whose table at `$E795` gives `<SPACE>`, `<SYM SHIFT>`, `<CAPS SHIFT>` and `<ENTER>` for them. One instruction names the table, `$E5A8`.","t":"byte","b":[66,72,89,54,53,84,71,86]},{"a":31672,"t":"byte","b":[78,74,85,55,52,82,70,67]},{"a":31680,"t":"byte","b":[77,75,73,56,51,69,68,88]},{"a":31688,"t":"byte","b":[130,76,79,57,50,87,83,90]},{"a":31696,"t":"byte","b":[129,132,80,48,49,81,65,131]},{"a":31704,"l":"redefiner_row_slots","c":"Eight bytes, one for each key row of the redefiner in screen order (BLASTER, BURPER, FASTER, SLOWER, RIGHTER, LEFTER, BOUNCER, ABORTER): the index in `$7BE0` at which that row's key code is stored. The values are 2, 1, 5, 4, 7, 6, 3, 0. One instruction names it, `$E59D`, which indexes it with the row number in `$8034`; the ninth row, EXIT, leaves at `$E57F` before the lookup.","t":"byte","b":[2,1,5,4,7,6,3,0]},{"a":31712,"l":"control_key_codes","c":"Eight key codes, in the numbering of `$7B8B` and `$7BE8`, one for each control. `$7C13` tests them in order; the first sets bit 7 of the control byte `$8057` and the last bit 0. As loaded: `$06` G (bit 7, leave the game), `$24` 1 (bit 6, lay a burper), `$20` SPACE (bit 5, fire), `$01` H (bit 4, halt), `$26` A (bit 3, slower), `$25` Q (bit 2, faster), `$1A` O (bit 1, heading plus `$0C`) and `$22` P (bit 0, heading minus `$0C`). The redefiner stores a new code into one entry at `$E5A6`. Two instructions load the address, `$7C16` and `$E5A2`.","t":"byte","b":[6,36,32,1,38,37,26,34]},{"a":31720,"l":"test_key","c":"Tests one key. A is a key code: its low three bits select the half-row (0 for `$7F`, 1 for `$BF`, up to 7 for `$FE`; the routine rotates `$FE` right that many times plus one to make the high byte of the port address) and the next three bits select the key in it (0 for bit 4, up to 4 for bit 0; it rotates the byte it read right 5 minus that many times). It reads the half-row with `IN A,($FE)` at `$7BFC` and returns carry clear when the key is down and carry set when it is up. Six callers: `$7C1D` in the control reader and `$E51E`, `$E526`, `$E52E`, `$E55C` and `$E575` in the menu and the redefiner. Run against a model of the keyboard matrix it agrees with `$7B8B` for all 40 codes.","t":"code","b":[79],"m":"ld","o":"c,a","x":[31773,58654,58662,58670,58716,58741]},{"a":31721,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":31723,"t":"code","b":[60],"m":"inc","o":"a"},{"a":31724,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":31725,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":31727,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":31729,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":31731,"t":"code","b":[62,5],"m":"ld","o":"a,$05"},{"a":31733,"t":"code","b":[145],"m":"sub","o":"c"},{"a":31734,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":31735,"t":"code","b":[62,254],"m":"ld","o":"a,$FE"},{"a":31737,"t":"code","b":[15],"m":"rrca","x":[31738]},{"a":31738,"t":"code","b":[16,253],"m":"djnz","oa":31737,"o":"$7BF9"},{"a":31740,"t":"code","b":[219,254],"m":"in","o":"a,($FE)"},{"a":31742,"t":"code","b":[31],"m":"rra","x":[31744]},{"a":31743,"t":"code","b":[13],"m":"dec","o":"c"},{"a":31744,"t":"code","b":[32,252],"m":"jr","oa":31742,"o":"nz,$7BFE"},{"a":31746,"t":"code","b":[201],"m":"ret"},{"a":31747,"l":"kempston_bit_map","c":"Sixteen bytes indexed by the low four bits read from port `$1F`: the control bits those four joystick lines set. Port bits 0 and 1 map to control bits 0 and 1, port bit 2 sets control bit 3 and port bit 3 sets control bit 2, so the table reads `00 01 02 03 08 09 0A 0B 04 05 06 07 0C 0D 0E 0F`. One instruction names it, `$7C35`.","t":"byte","b":[0,1,2,3,8,9,10,11]},{"a":31755,"t":"byte","b":[4,5,6,7,12,13,14,15]},{"a":31763,"l":"read_controls","c":"Builds the control byte `$8057`; HL, DE and BC are saved and restored. It tests the eight key codes at `$7BE0` in order with `$7BE8`, shifting a 1 into E for each key that is down, so the first code ends in bit 7 and the eighth in bit 0. If `$E868` holds `$0E` (the menu flips that byte between `$0D` and `$0E` at `$E533`) it also reads the joystick with `IN A,($1F)`: the low four bits go through the table at `$7C03` and are ORed in, and bit 4 of the port adds `$20`, or `$40` when bit 2 of the port is set as well. Then the fire latch: when either of bits 5 and 6 is set and `$8054` is 0 it sets `$8054` and `$8053` to `$FF`; when neither bit is set it zeroes `$8054`. `$8053` is therefore raised once for each press. Two callers: `$768B` in the frame loop and `$7790`, where the loop waits for the halt key to be released. With the keys as loaded, G, 1, SPACE, H, A, Q, O and P give `$80`, `$40`, `$20`, `$10`, `$08`, `$04`, `$02` and `$01`, and port values `$04`, `$08`, `$10` and `$14` give `$08`, `$04`, `$20` and `$48`.","t":"code","b":[229],"m":"push","o":"hl","x":[30347,30608]},{"a":31764,"t":"code","b":[213],"m":"push","o":"de"},{"a":31765,"t":"code","b":[197],"m":"push","o":"bc"},{"a":31766,"t":"code","b":[33,224,123],"m":"ld","o":"hl,$7BE0"},{"a":31769,"t":"code","b":[30,1],"m":"ld","o":"e,$01"},{"a":31771,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[31779]},{"a":31772,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31773,"t":"code","b":[205,232,123],"m":"call","oa":31720,"o":"test_key"},{"a":31776,"t":"code","b":[63],"m":"ccf"},{"a":31777,"t":"code","b":[203,19],"m":"rl","o":"e"},{"a":31779,"t":"code","b":[48,246],"m":"jr","oa":31771,"o":"nc,$7C1B"},{"a":31781,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":31782,"t":"code","b":[50,87,128],"m":"ld","oa":32855,"o":"(controls),a"},{"a":31785,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":31786,"t":"code","b":[58,104,232],"m":"ld","oa":59496,"o":"a,(kempston_flag)"},{"a":31789,"t":"code","b":[254,14],"m":"cp","o":"$0E"},{"a":31791,"t":"code","b":[32,33],"m":"jr","oa":31826,"o":"nz,$7C52"},{"a":31793,"t":"code","b":[175],"m":"xor","o":"a"},{"a":31794,"t":"code","b":[219,31],"m":"in","o":"a,($1F)"},{"a":31796,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":31797,"t":"code","b":[33,3,124],"m":"ld","o":"hl,$7C03"},{"a":31800,"t":"code","b":[230,15],"m":"and","o":"$0F"},{"a":31802,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":31803,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":31805,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":31806,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":31807,"t":"code","b":[177],"m":"or","o":"c"},{"a":31808,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":31809,"t":"code","b":[175],"m":"xor","o":"a"},{"a":31810,"t":"code","b":[203,96],"m":"bit","o":"4,b"},{"a":31812,"t":"code","b":[40,8],"m":"jr","oa":31822,"o":"z,$7C4E"},{"a":31814,"t":"code","b":[62,32],"m":"ld","o":"a,$20"},{"a":31816,"t":"code","b":[203,80],"m":"bit","o":"2,b"},{"a":31818,"t":"code","b":[40,2],"m":"jr","oa":31822,"o":"z,$7C4E"},{"a":31820,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":31822,"t":"code","b":[177],"m":"or","o":"c","x":[31812,31818]},{"a":31823,"t":"code","b":[50,87,128],"m":"ld","oa":32855,"o":"(controls),a"},{"a":31826,"t":"code","b":[58,87,128],"m":"ld","oa":32855,"o":"a,(controls)","x":[31791]},{"a":31829,"t":"code","b":[230,96],"m":"and","o":"$60"},{"a":31831,"t":"code","b":[40,16],"m":"jr","oa":31849,"o":"z,$7C69"},{"a":31833,"t":"code","b":[58,84,128],"m":"ld","oa":32852,"o":"a,(fire_held)"},{"a":31836,"t":"code","b":[167],"m":"and","o":"a"},{"a":31837,"t":"code","b":[32,14],"m":"jr","oa":31853,"o":"nz,$7C6D"},{"a":31839,"t":"code","b":[61],"m":"dec","o":"a"},{"a":31840,"t":"code","b":[50,84,128],"m":"ld","oa":32852,"o":"(fire_held),a"},{"a":31843,"t":"code","b":[50,83,128],"m":"ld","oa":32851,"o":"(fire_request),a"},{"a":31846,"t":"code","b":[195,109,124],"m":"jp","oa":31853,"o":"$7C6D"},{"a":31849,"t":"code","b":[175],"m":"xor","o":"a","x":[31831]},{"a":31850,"t":"code","b":[50,84,128],"m":"ld","oa":32852,"o":"(fire_held),a"},{"a":31853,"t":"code","b":[193],"m":"pop","o":"bc","x":[31837,31846]},{"a":31854,"t":"code","b":[209],"m":"pop","o":"de"},{"a":31855,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":31856,"t":"code","b":[201],"m":"ret"},{"a":31857,"l":"object_count_plus_one","c":"One byte: the number of 30-byte records in the object list plus 1, counting records that have been promised but not yet written. A new game sets it to 1 with the list empty. 32 instructions name it, 17 reads and 15 writes. The adders test it first: firing needs it below `$12` (`$770D`), `$7925` below `$0A` before adding 6, `$BE2A` below `$0C`, `$D450` below `$0D` before adding 2 (one marker record and the record that marker writes later at `$DE5A`), `$D494` below 9 and `$D53E` below `$0B` before adding up to 5. Eight removals subtract 1 (`$9E4E`, `$9E98`, `$A60E`, `$A658`, `$D885`, `$DBFA`, `$DD57`, `$DEEA`). `$7A42` turns the panel lights to `$41` when it is `$12` or more. The image holds 2, which matches the one record at `$7C74`.","t":"byte","b":[2],"x":[30244,30477,30486,31029,31037,31298,40522,40526,40596,40600,42506,42510,42580,42584,48682,48689,54352,54362,54420,54563,54567,54590,54799,54803,55425,55429,56310,56314,56659,56663,57062,57066]},{"a":31858,"l":"object_list_end","c":"The address of the first free byte after the last record of the object list at `$7C74`. A new game sets it to `$7C74`. Each record written moves it on by 30 (`$7786`, `$BEC4`, `$D48E`, `$D520`, `$D681`, `$DEAF`) and the wave at `$794C` by 180; each removal takes 30 off and copies the record it then points at over the one removed (`$9E5A`, `$9EA4`, `$A61A`, `$A664`, `$D891`, `$DC06`, `$DD71`, `$DEF6`). Loops over the list start from this address and step down by 30 until they pass `$7C74` (`$9FEC`, `$A09A`, `$A226`, `$A2C6`, `$AE3E`, `$D691`, `$E119`). 39 instructions name it, 23 reads and 16 writes. The image holds `$7C92`, one record.","t":"addr","b":[146,124],"oa":31890,"o":"show_forgery_warning","x":[30250,30498,30598,31043,31052,40529,40538,40603,40612,40940,41114,41510,41670,42513,42522,42587,42596,44606,48697,48836,54370,54414,54439,54560,54774,54830,54913,54929,55432,55441,56317,56326,56676,56689,56922,57007,57069,57078,57625]},{"a":31860,"l":"object_list","c":"The object list: 30-byte records for the things that move on the board apart from the worm, packed from `$7C74` up to the address in `$7C72`. The count byte `$7C71` never passes `$12`, so at most 17 records exist and the list ends by `$7E71`; from its second record on it lies over the code and text of the first screen (`$7C92-$7F2F`), which has finished by then. Layout, as the firing code at `$7722` and the display-list builder at `$AE57` use it: byte 0 is the type (`$F1` a sparky, `$F3` a bug that can climb onto the worm, and `$F0`, `$E3`, `$E5`, `$E6` and `$FB`, each with its own branch in the dispatcher at `$D6A0`; `$F0` and `$E3` are not drawn). Bytes 2 and 3 are the cell: a column and row from 0 to 4 in the 5 by 5 window at `$6432` when byte 3 is below 5, the cell's address otherwise (`$A192` converts). Bytes 4-5 and 6-7 are x and y inside the cell, low byte first, with the position in the high byte; bytes 8 and 9 are width and depth; bytes 10-11 and 12-13 are the heights of its bottom and top; the meaning of bytes 14 onward depends on the type. Eight instructions load the address `$7C74`. The 30 bytes in the image are one type `$F3` record, with `$7C71` = 2 and `$7C72` = `$7C92` to match: a state left in memory when the image was saved, which a new game discards.","t":"byte","b":[243,0,2,2,0,16,0,16]},{"a":31868,"t":"byte","b":[10,10,0,85,0,101,30,0]},{"a":31876,"t":"byte","b":[0,0,3,3,0,0,0,0]},{"a":31884,"t":"byte","b":[0,0,0,0,0,0]},{"a":31890,"l":"show_forgery_warning","c":"The first code the game runs after the entry stub: `JP $7C92` at `$EFF6` is its only reference. If the byte at `$FC00` is zero it goes straight to `$7F30`; the tape image holds `$FF` there, so a load from tape shows the warning, and what the test was for is not established. Otherwise it prints the text at `$7CE0` one byte at a time through `$7CB3` until a zero byte, waits until any key is down (`IN A,($FE)` at `$7CA9` with A = 0, which selects all eight half-rows) and jumps to `$7F30`. Nothing comes back here afterwards, and in play the object list, from its second record on, is written over this code and its text.","t":"code","b":[58,0,252],"m":"ld","oa":64512,"o":"a,($FC00)","x":[31858,61430]},{"a":31893,"t":"code","b":[167],"m":"and","o":"a"},{"a":31894,"t":"code","b":[202,48,127],"m":"jp","oa":32560,"o":"z,copy_panel_to_screen"},{"a":31897,"t":"code","b":[33,224,124],"m":"ld","o":"hl,$7CE0"},{"a":31900,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[31910]},{"a":31901,"t":"code","b":[167],"m":"and","o":"a"},{"a":31902,"t":"code","b":[40,8],"m":"jr","oa":31912,"o":"z,$7CA8"},{"a":31904,"t":"code","b":[229],"m":"push","o":"hl"},{"a":31905,"t":"code","b":[205,179,124],"m":"call","oa":31923,"o":"print_warning_char"},{"a":31908,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":31909,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31910,"t":"code","b":[24,244],"m":"jr","oa":31900,"o":"$7C9C"},{"a":31912,"t":"code","b":[175],"m":"xor","o":"a","x":[31902,31918]},{"a":31913,"t":"code","b":[219,254],"m":"in","o":"a,($FE)"},{"a":31915,"t":"code","b":[47],"m":"cpl"},{"a":31916,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":31918,"t":"code","b":[40,248],"m":"jr","oa":31912,"o":"z,$7CA8"},{"a":31920,"t":"code","b":[195,48,127],"m":"jp","oa":32560,"o":"copy_panel_to_screen"},{"a":31923,"l":"print_warning_char","c":"Prints one byte of the warning text. Code 1 is a line break: it sets the low five bits of the cursor's low byte, so the step that follows moves to the start of the next line. Any other code is drawn as the eight bytes at `$3C00` + 8 times the code, the ROM's character set, down the eight pixel lines of the cell. The cursor is the operand of the `LD DE,nn` at `$7CCA` (bytes `$7CCB` and `$7CCC`), a screen address that the routine advances itself: by 1 after each character, and by `$0800`, one third of the screen, when the low byte wraps to zero. The tape image holds `$4000` there; following the routine through the 592-byte text leaves `$50F7`. One caller, `$7CA1`.","t":"code","b":[111],"m":"ld","o":"l,a","x":[31905]},{"a":31924,"t":"code","b":[61],"m":"dec","o":"a"},{"a":31925,"t":"code","b":[32,10],"m":"jr","oa":31937,"o":"nz,$7CC1"},{"a":31927,"t":"code","b":[58,203,124],"m":"ld","oa":31947,"o":"a,($7CCB)"},{"a":31930,"t":"code","b":[246,31],"m":"or","o":"$1F"},{"a":31932,"t":"code","b":[50,203,124],"m":"ld","oa":31947,"o":"($7CCB),a"},{"a":31935,"t":"code","b":[24,20],"m":"jr","oa":31957,"o":"$7CD5"},{"a":31937,"t":"code","b":[38,0],"m":"ld","o":"h,$00","x":[31925]},{"a":31939,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":31940,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":31941,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":31942,"t":"code","b":[17,0,60],"m":"ld","o":"de,$3C00"},{"a":31945,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":31946,"t":"code","b":[17,247,80],"m":"ld","o":"de,$50F7"},{"a":31949,"t":"code","b":[6,8],"m":"ld","o":"b,$08"},{"a":31951,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[31955]},{"a":31952,"t":"code","b":[18],"m":"ld","o":"(de),a"},{"a":31953,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31954,"t":"code","b":[20],"m":"inc","o":"d"},{"a":31955,"t":"code","b":[16,250],"m":"djnz","oa":31951,"o":"$7CCF"},{"a":31957,"t":"code","b":[33,203,124],"m":"ld","o":"hl,$7CCB","x":[31935]},{"a":31960,"t":"code","b":[52],"m":"inc","o":"(hl)"},{"a":31961,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":31962,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":31963,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":31964,"t":"code","b":[198,8],"m":"add","o":"a,$08"},{"a":31966,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":31967,"t":"code","b":[201],"m":"ret"},{"a":31968,"l":"forgery_warning_text","c":"The text of the first screen, 592 bytes: character codes for `$7CB3`, with code 1 as a line break (11 of them) and a zero byte at `$7F2F` to end it. It is a notice headed `\u00a3100 REWARD` (`$60` is the pound sign in the Spectrum character set) that describes a genuine cassette, asks for suspected forgeries to be sent to Durell Software's address in Taunton and promises a replacement and the reward. Lines that fill all 32 columns run on without a break, which is why some words are joined in the bytes. Two references: `$7C99` loads the address, and the tenth word of the message table at `$E795` (`$E7A7`) also holds it, as message `$89`, though no `LD A,$89` exists in the image and no message text embeds that code. In play the object list can grow over the first part of the text, up to `$7E71`.","t":"text","b":[32,32,32,32,32,32,32,32,32,32,96,49,48,48,32,82,69,87,65,82,68,1,32,32,32,32,32,32,32,32,32,32],"d":"          \u00a3100 REWARD.          ","enc":"zx","x":[59303]},{"a":32000,"t":"text","b":[42,42,42,42,42,42,42,42,42,42,42,1,32,32,73,102,32,121,111,117,114,32,99,111,112,121,32,111,102,32,70,65],"d":"***********.  If your copy of FA","enc":"zx"},{"a":32032,"t":"text","b":[84,32,87,79,82,77,32,66,76,79,87,83,65,32,83,80,65,82,75,89,32,32,100,111,101,115,32,110,111,116,32,32],"d":"T WORM BLOWSA SPARKY  does not  ","enc":"zx"},{"a":32064,"t":"text","b":[104,97,118,101,32,32,97,32,98,108,117,101,112,108,97,115,116,105,99,32,32,99,97,115,115,101,116,116,101,32,32,98],"d":"have  a blueplastic  cassette  b","enc":"zx"},{"a":32096,"t":"text","b":[111,100,121,32,119,105,116,104,32,116,104,101,119,111,114,100,32,39,68,85,82,69,76,76,39,32,101,109,98,111,115,115],"d":"ody with theword 'DURELL' emboss","enc":"zx"},{"a":32128,"t":"text","b":[101,100,32,111,110,32,105,116,32,97,110,100,111,110,32,116,104,101,32,108,101,97,100,45,105,110,45,115,116,114,105,112],"d":"ed on it andon the lead-in-strip","enc":"zx"},{"a":32160,"t":"text","b":[44,32,116,104,101,110,32,105,116,32,105,115,97,32,102,111,114,103,101,114,121,46,1,1,32,32,32,32,32,80,108,101],"d":", then it isa forgery...     Ple","enc":"zx"},{"a":32192,"t":"text","b":[97,115,101,32,115,101,110,100,32,32,97,110,121,32,32,115,117,115,112,101,99,116,101,100,102,111,114,103,101,114,105,101],"d":"ase send  any  suspectedforgerie","enc":"zx"},{"a":32224,"t":"text","b":[115,32,116,111,58,1,32,32,32,32,68,85,82,69,76,76,32,83,79,70,84,87,65,82,69,32,76,84,68,44,1,32],"d":"s to:.    DURELL SOFTWARE LTD,. ","enc":"zx"},{"a":32256,"t":"text","b":[32,32,32,32,67,65,83,84,76,69,32,76,79,68,71,69,44,1,32,32,32,32,32,32,67,65,83,84,76,69,32,71],"d":"    CASTLE LODGE,.      CASTLE G","enc":"zx"},{"a":32288,"t":"text","b":[82,69,69,78,44,1,32,32,32,32,32,32,32,84,65,85,78,84,79,78,44,1,32,32,32,32,32,32,32,32,84,65],"d":"REEN,.       TAUNTON,.        TA","enc":"zx"},{"a":32320,"t":"text","b":[49,32,52,65,66,1,32,32,32,32,32,32,32,32,32,69,78,71,76,65,78,68,46,1,119,105,116,104,32,116,104,101],"d":"1 4AB.         ENGLAND..with the","enc":"zx"},{"a":32352,"t":"text","b":[32,110,97,109,101,32,97,110,100,32,97,100,100,114,101,115,115,32,111,102,32,116,104,101,112,101,114,115,111,110,32,119],"d":" name and address of theperson w","enc":"zx"},{"a":32384,"t":"text","b":[104,111,32,115,117,112,112,108,105,101,100,32,121,111,117,32,119,105,116,104,32,116,104,101,102,111,114,103,101,114,121,46],"d":"ho supplied you with theforgery.","enc":"zx"},{"a":32416,"t":"text","b":[32,32,89,111,117,32,32,119,105,108,108,32,32,98,101,32,32,115,101,110,116,32,32,97,103,101,110,117,105,110,101,32],"d":"  You  will  be  sent  agenuine ","enc":"zx"},{"a":32448,"t":"text","b":[114,101,112,108,97,99,101,109,101,110,116,32,99,111,112,121,32,32,97,110,100,32,32,97,114,101,119,97,114,100,32,32],"d":"replacement copy  and  areward  ","enc":"zx"},{"a":32480,"t":"text","b":[32,111,102,32,32,32,32,96,49,48,48,32,32,32,32,105,102,32,32,32,121,111,117,114,105,110,102,111,114,109,97,116],"d":" of    \u00a3100    if   yourinformat","enc":"zx"},{"a":32512,"t":"text","b":[105,111,110,32,32,32,32,32,108,101,97,100,115,32,32,32,32,116,111,32,32,32,32,97,115,117,99,99,101,115,115,102],"d":"ion     leads    to    asuccessf","enc":"zx"},{"a":32544,"t":"text","b":[117,108,32,112,114,111,115,101,99,117,116,105,111,110,46,0],"d":"ul prosecution..","enc":"zx"},{"a":32560,"l":"copy_panel_to_screen","c":"Copies the bottom-panel picture to the screen from the memory that later becomes the frame buffer: 2,048 bytes from `$F000` to the pixel lines of the bottom third (`$5000-$57FF`), then 256 bytes from `$F800` to the attributes of character rows 16 to 23 (`$5A00-$5AFF`). It then jumps to the menu at `$E508`. Reached only from the first screen, by `$7C96` and `$7CB0`, so it runs once after each load.","t":"code","b":[33,0,240],"m":"ld","o":"hl,$F000","x":[31894,31920]},{"a":32563,"t":"code","b":[17,0,80],"m":"ld","o":"de,$5000"},{"a":32566,"t":"code","b":[1,0,8],"m":"ld","o":"bc,$0800"},{"a":32569,"t":"code","b":[237,176],"m":"ldir"},{"a":32571,"t":"code","b":[22,90],"m":"ld","o":"d,$5A"},{"a":32573,"t":"code","b":[4],"m":"inc","o":"b"},{"a":32574,"t":"code","b":[237,176],"m":"ldir"},{"a":32576,"t":"code","b":[195,8,229],"m":"jp","oa":58632,"o":"menu"},{"a":32579,"l":"top_left_attribute","c":"One byte, `$44` in the image. The frame loop copies it to the attribute of the top-left character cell (`$5800`) once a pass at `$7682`, the only instruction that names it, and nothing writes it. `$44` is bright green ink on black paper, the value a new game fills rows 0 to 15 with. Why that one cell is rewritten every pass is not established.","t":"byte","b":[68],"x":[30338]},{"a":32580,"l":"unused_7f44","c":"Eight zero bytes with no reference found: no instruction names any of them, none of the indexed accesses to the worm records that follow reaches this far down, and none has been seen read or written in play.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":32588,"l":"worm_nose_points","c":"Eight bytes, all `$80`, standing where a record before the first worm segment record would end. Each segment record ends with four screen points (x, then y plus `$40`), and the routine that draws a segment, `$851C`, joins two points of the record before it to two of its own, reading the earlier pair at IX-8, IX-7, IX-4 and IX-3. For the first segment those offsets land here, on `$7F4C`, `$7F4D`, `$7F50` and `$7F51`, and give the point (`$80`, `$40`): the centre of the 256 by 128 view, where the worm's head is. Nothing writes these bytes, and `$7F4E`, `$7F4F`, `$7F52` and `$7F53` are never read.","t":"byte","b":[128,128,128,128,128,128,128,128]},{"a":32596,"l":"worm_segment_1","c":"The first of four 16-byte worm segment records (`$7F54`, `$7F64`, `$7F74`, `$7F84`), head first; `$809F` holds the count. Layout: bytes 0-1, 2-3 and 4-5 are signed 16-bit x, y and height offsets, in units of 1/256, from the previous point (for this record, the head) to the end of the segment; byte 6 is the number of bugs riding the segment; byte 7 is the height of the segment's end, written at `$A550`; bytes 8 to 15 are four screen points (x, y plus `$40`) for the end of the segment, written by the display-list builder at `$ACEA-$ADB9`, of which the drawing routine `$851C` reads the first and third. A new game copies all four records from `$7FA4`. The head update subtracts the head's step from this record's three offsets (`$9F78`, `$A1BC`, `$A3B7`), which is what makes the body trail behind. `$A3E9` then walks the four records through IX: a segment whose three offsets, taken as magnitudes, add up to 11 units or more hands a quarter of its x and y offsets, and a quarter or an eighth of its height offset, to the next record, its end is dropped or raised to the surface that the probe at `$9A89` finds, and things it touches are collected (`$A5A4-$A66D`). `$AB1C` walks them through HL to build the display list. Byte 6 of this record is `$7F5A`: `$9E81` adds 1 to it when the head touches a type `$F3` object, and `$77A0` passes bugs on down the worm. Five instructions name `$7F54` and five name `$7F5A`.","t":"byte","b":[0,7,0,0,0,5,0,0],"x":[40824,40829]},{"a":32604,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":32612,"l":"worm_segment_2","c":"The second worm segment record, in the layout given at `$7F54`; its offsets run from the end of the first segment. Its bug count is `$7F6A`, which three instructions name, all in `$77A0` (`$77B2`, `$780C`, `$782C`). The rest of the record is reached only through IX (`$A405` onward, and `$851C` when it is drawn) and through HL in the display-list builder.","t":"byte","b":[0,7,0,0,0,5,0,0]},{"a":32620,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":32628,"l":"worm_segment_3","c":"The third worm segment record, in the layout given at `$7F54`. Its bug count is `$7F7A`, named by `$77BB`, `$7801` and `$7831` in `$77A0`; a bug arriving from the second segment is stored here and moved on to the fourth on the next pass if that one is empty.","t":"byte","b":[0,7,0,0,0,5,0,0]},{"a":32636,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":32644,"l":"worm_segment_4","c":"The fourth and last worm segment record, the tail, in the layout given at `$7F54`. Its bug count is `$7F8A`, named by `$77C4`, `$77F6` and `$7836` in `$77A0`: bugs collect here first, and when this count and the other three are all non-zero the worm dies. The segment loop's hand-on for this record (IX+`$10` to IX+`$15`) falls in the slot at `$7F94`.","t":"byte","b":[0,7,0,0,0,5,0,0]},{"a":32652,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":32660,"l":"worm_segment_overflow","c":"A fifth 16-byte slot after the four segment records. The segment loop at `$A489-$A50B` adds the fourth segment's hand-on to the first six bytes here, reading and writing them as IX+`$10` to IX+`$15` with IX = `$7F84`, but the loop stops after four records, so nothing consumes those offsets and nothing draws this slot. The image holds `$0700`, 0 and `$0500` there, the same starting offsets as the records at `$7FA4`; a new game does not rewrite them, since its copy to `$7F54` is `$40` bytes long. The ten bytes from `$7F9A` have no reference.","t":"byte","b":[0,7,0,0,0,5,0,0]},{"a":32668,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":32676,"l":"worm_segments_at_start","c":"The starting state of the four worm segment records: 64 bytes that a new game copies to `$7F54` (`$75E8-$75F1`, the only reference). Each 16-byte record holds an x offset of `$0700`, a y offset of 0, a height offset of `$0500` and ten zero bytes, so the worm starts as a straight line of four segments, each ending 7 units further along x and 5 units higher than the one before.","t":"byte","b":[0,7,0,0,0,5,0,0]},{"a":32684,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":32692,"t":"byte","b":[0,7,0,0,0,5,0,0]},{"a":32700,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":32708,"t":"byte","b":[0,7,0,0,0,5,0,0]},{"a":32716,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":32724,"t":"byte","b":[0,7,0,0,0,5,0,0]},{"a":32732,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":32740,"l":"worm_segments_at_start_spare","c":"Sixteen more bytes in the pattern of the records before them (`$0700`, 0, `$0500`, then zeros). The copy at `$75EE` moves `$40` bytes, which stops just short of these, and no instruction names them.","t":"byte","b":[0,7,0,0,0,5,0,0]},{"a":32748,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":32756,"l":"worm_x","c":"The x position of the worm's head on the board, 16 bits: the high byte `$7FF5` is the position inside the current cell, a cell being 256 units across, and the low byte is the fraction. A new game sets `$0800`. `$9F80-$9F84` adds the pass's x step `$7FF8` to it, and a carry or borrow out of the high byte scrolls the 5 by 5 cell window at `$6432` (`$9F92`, `$A035`). The firing code copies it into the new sparky (`$7730`), and `$9DA8` adds its low byte to the step to find how many whole units the head moves. `$7FF5` on its own is read five times (`$AF02`, `$AF85`, `$D472`, `$D947`, `$DC76`) to place cells and objects relative to the head. Ten instructions name the two bytes: two writes and eight reads.","t":"word","b":[0,8],"d":[2048],"x":[30208,30512,40360,40832,40836]},{"a":32758,"l":"worm_y","c":"The y position of the worm's head, in the same form as `$7FF4`; a new game sets `$0500`. `$A1C5-$A1C9` adds the y step `$7FFA` to it and a carry or borrow scrolls the cell window the other way (`$A1D7`, `$A275`). The high byte `$7FF7` is read at `$AF18`, `$AFB8`, `$D478`, `$D965` and `$DCC3`, and the sequence at `$78C9` counts it down in twos. Twelve instructions name the two bytes: three writes and nine reads.","t":"word","b":[0,5],"d":[1280],"x":[30213,30526,40376,41413,41417]},{"a":32760,"l":"worm_step_x","c":"The head's x movement for the current pass of the frame loop, signed 16 bits in units of 1/256: half of the x component `$803D` that `$A926` works out from the heading and speed (`$9D05-$9D0C`). `$9DA4` and `$9DAC` read its two bytes to find the whole units moved, `$9F74` uses it to move the head and to pull the first segment the other way, and `$A3F3` takes it as the starting x for the segment loop. Five instructions name the two bytes: one write and four reads.","t":"word","b":[0,0],"d":[0],"x":[40204,40356,40820,41971]},{"a":32762,"l":"worm_step_y","c":"The head's y movement for the current pass, half of the y component `$803F` from `$A926` (`$9D0F-$9D16`). Read at `$9DB4` and `$9DBC` for the whole units moved, at `$A1B8` to move the head and the first segment's y offset, and at `$A3F9` as the starting y for the segment loop. Five instructions name the two bytes.","t":"word","b":[0,0],"d":[0],"x":[40214,40372,41400,41977]},{"a":32764,"l":"worm_step_z","c":"The head's change of height for the current pass, signed 16 bits. `$9D19-$9D35` sets it to half of (the height component `$803B` from `$A926`, minus 256 times the fall speed `$8004`). `$9DE8` replaces it with minus the height when the head would go below zero. When the head lands on or climbs a surface, `$9F59-$9F6B` sets the high byte `$7FFD` to the rise and the low byte to 0. `$9DC7` adds it to the height and `$A3B3` subtracts it from the first segment's height offset. Six instructions name the two bytes: four writes and two reads.","t":"word","b":[0,0],"d":[0],"x":[40245,40391,40424,40811,41907]},{"a":32766,"l":"worm_z","c":"The height of the worm's head above the board, 16 bits with the whole part in `$7FFF`; a new game sets `$1000`. While the head is in the air `$9E04` stores the height plus the pass's change; when it lands on or climbs a surface `$9F67` sets the high byte to the surface height the probe found. Read by the firing code (`$7752`), as the starting height for the segment loop (`$A3FF`) and the display-list builder (`$AB16`), and by the bug code at `$D729` and `$D804`, which compares the worm's height with a bug's. Eleven instructions name the two bytes: three writes and eight reads.","t":"word","b":[0,10],"d":[2560],"x":[30218,30546,40388,40413,40452,41983,43798]},{"a":32768,"l":"worm_deflected_flag","c":"Zeroed at the start of each head update (`$9CF2`) and set to `$0C` when an obstacle turns the head aside (`$9ECD`). `$9EC4` tests it: after one deflection in a pass the update is run again from `$9CF5` with the new heading, and if the head is blocked a second time the worm is stopped at `$9F4C` and not turned again. A new game writes 0 here as the low byte of the word it stores at `$8000`. Four instructions name it.","t":"byte","b":[0],"x":[30198,40178,40644,40653]},{"a":32769,"l":"worm_heading","c":"The worm's heading, one byte, 256 steps to a full turn; a new game sets `$83`. On flat ground `$00` moves the head towards higher x, `$40` towards lower y, `$80` towards lower x and `$C0` towards higher y. 17 instructions name it, 9 reads and 8 writes. The frame loop subtracts or adds `$0C` for the two turn controls (`$76B5-$76C9`) and adds `$80` when a burper is laid (`$7771`). `$9CFC` passes it with the speed to `$A926`, which turns the pair into the pass's x and y steps. Collecting a sparky adds a random amount from -15 to +16 (`$9E2E`, `$A638`); an obstacle replaces it with one of eight headings 3 steps either side of `$00`, `$40`, `$80` and `$C0` (`$9EF6-$9F31`) or reverses it (`$9F3A`); running off the board adds `$80` (`$A3C6`). The firing code stores its negative in the new sparky's byte 14 (`$7761`).","t":"byte","b":[0],"x":[30389,30394,30404,30409,30561,30577,30582,40188,40494,40498,40640,40753,40762,41926,41931,42552,42556]},{"a":32770,"l":"worm_speed_fraction","c":"The low byte of the 16-bit speed whose high byte is `$8003`. Seven instructions name it, all as the pair: a new game sets the pair to `$0A00`; while the head is not falling fast (`$8004` below 3), `$9D4A-$9DA1` adds or subtracts an amount worked out from the height component `$803B`, so the worm slows going up and gains going down; a bounce off an obstacle divides the pair by 4 (`$9F3D-$9F48`); a stop zeroes it (`$9F52`). The clamp at `$9D98`, for a result whose high byte is `$0C` or more, has not been seen to run.","t":"byte","b":[0],"x":[30203,40280,40332,40353,40765,40776,40786]},{"a":32771,"l":"worm_speed","c":"The worm's speed in whole units, 0 to `$0B`; a new game sets `$0A`. The frame loop cuts it to `$0A` when it is `$0B` or more (`$763F`), adds 1 for the faster control while the result stays below `$0C` and subtracts 3 for the slower one down to 0. `$9CF8` passes it to `$A926` as the length of the pass's step. `$9DFE` sets bit 0 while the head is in the air, collecting a sparky sets bits 0 and 1 (`$9E3A`, `$A644`), the death throes count it down (`$A442`), and `$AC55` adds it to the width index of one segment each pass, which draws that segment narrower, a different one each pass. 16 instructions name it, 9 reads and 7 writes, besides the four 16-bit writes through `$8002`.","t":"byte","b":[16],"x":[30271,30280,30423,30432,30442,30451,40184,40441,40446,40501,40506,42050,42057,42559,42564,44117]},{"a":32772,"l":"worm_fall_speed","c":"The downward speed of the head, built up while nothing holds it. `$9D19-$9D35` takes 256 times this value off the pass's change of height; `$9D38-$9D43` then adds 2 to it unless that change is already below -9 units; landing (`$9E0B`), stopping (`$9F4F`) and a new game zero it. At 5 or more, `$9D22-$9D2B` sets bit 0 of `$8058`, which makes the frame loop ignore the controls for that pass, and at 3 or more the slope adjustment of the speed is skipped (`$9D46`). Six instructions name it.","t":"byte","b":[0],"x":[30222,40220,40251,40259,40459,40783]},{"a":32773,"l":"ground_slope","c":"The slope of the surface the head last landed on or climbed: a copy of the probe's result word `$8039`, stored at `$9F71`. The low byte is the gradient as 256 times the smaller of rise and run over the larger (`$9CCC`). The high byte carries the probe's flags from `$8040`: bit 1 for a ramp that runs along y (`$9C66`), bit 0 when the probe swapped the ramp's two heights (`$9C19`, `$9C7F`) and bit 7 when the rise is larger than the run (`$9CD4`). `$9CF5` loads it into HL for `$A926`, which uses it to produce the height component `$803B` of the step. Two instructions name it; on flat ground it is zero.","t":"word","b":[0,0],"d":[0],"x":[40181,40817]},{"a":32775,"l":"unused_8007","c":"Four zero bytes between the slope word and the projection workspace. No instruction names them and none has been seen read or written in play.","t":"byte","b":[0,0,0,0]},{"a":32779,"l":"base_rect_x1","c":"Screen x of the left edge of the current object's bottom rectangle, a signed 16-bit value. For each display-list entry, `$81DB` takes the entry's four extents relative to the head (`$802B-$8031`) and scales them once for the height of its bottom and once for the height of its top (`$80EB`), giving two rectangles: the bottom one here and in `$800D`, `$800F` and `$8011` (x1, x2, y1, y2) and the top one in `$8013-$8019`. It then adds `$80` to every x and `$40` to every y, which puts the head at the centre of the view. When the bottom height is 0, or the type is `$E5`, the bottom rectangle is the extents unscaled. 30 instructions name this word: 3 writes, all in `$81DB` (`$81EA`, `$8207`, `$8236`), and 27 reads by the face routines at `$82B0-$8310` and the drawing code for the various types up to `$8DBF`.","t":"word","b":[0,0],"d":[0],"x":[33258,33287,33330,33334,33462,33506,33526,33612,33624,33756,33802,34258,34270,34434,34928,34985,35034,35107,35128,35467,35566,35595,35691,35720,35752,35797,35870,35887,35948,36017,36123,36229,36287]},{"a":32781,"l":"base_rect_x2","c":"Screen x of the right edge of the bottom rectangle described at `$800B`. 27 instructions name it: the three writes in `$81DB` (`$81F0`, `$820D`, `$823D`) and 24 reads.","t":"word","b":[0,0],"d":[0],"x":[33264,33293,33337,33341,33469,33513,33570,33615,33627,33769,33808,34274,34286,34437,34925,35047,35482,35570,35599,35639,35695,35724,35835,35874,35925,35952,36041,36099,36205,36311]},{"a":32783,"l":"base_rect_y1","c":"Screen y of the upper edge of the bottom rectangle described at `$800B`. 26 instructions name it: three writes in `$81DB` (`$81F6`, `$8213`, `$8255`) and 23 reads.","t":"word","b":[0,0],"d":[0],"x":[33270,33299,33361,33365,33466,33529,33573,33630,33642,33786,33814,34294,34306,34451,35164,35497,35603,35642,35728,35755,35800,35838,35890,35928,35945,36023,36105,36211,36293]},{"a":32785,"l":"base_rect_y2","c":"Screen y of the lower edge of the bottom rectangle described at `$800B`. 22 instructions name it: three writes in `$81DB` (`$81FC`, `$8219`, `$825C`) and 19 reads.","t":"word","b":[0,0],"d":[0],"x":[33276,33305,33368,33372,33510,33533,33577,33633,33645,34454,35228,35574,35646,35699,35759,35804,35842,35867,35894,35932,36047,36129,36235,36317]},{"a":32787,"l":"top_rect_x1","c":"Screen x of the left edge of the current object's top rectangle: the entry's left extent scaled for the height of its top by `$80EB` (`$80F7`), plus `$80` (`$8228`). The type `$E1` routine at `$8482` replaces both x values with their mean (`$848E`) and does the same to the y values, which shrinks the top to a point. 52 instructions name it, 3 writes and 49 reads; six of the reads are in the type `$F6` drawing code at `$BB65-$BC4F`.","t":"word","b":[0,0],"d":[0],"x":[33015,33284,33316,33320,33429,33474,33494,33538,33594,33648,33679,33759,33922,33934,34035,34261,34359,34395,34485,34501,34597,34663,34724,34795,34892,35001,35059,35135,35157,35470,35554,35607,35611,35627,35809,35858,35899,35960,36005,36065,36069,36077,36135,36171,36217,36253,36265,36269,36299,36347,47973,48016,48047,48163,48187,48207]},{"a":32789,"l":"top_rect_x2","c":"Screen x of the right edge of the top rectangle: written by `$80EB` at `$8100`, offset at `$822F` and averaged with x1 at `$8491`. 48 instructions name it, 3 writes and 45 reads.","t":"word","b":[0,0],"d":[0],"x":[33024,33290,33323,33327,33435,33481,33501,33558,33600,33651,33684,33772,33925,33937,34038,34277,34488,34498,34600,34669,34730,34839,34889,35066,35485,35679,35683,35732,35736,35764,35823,35862,35913,35964,36029,36081,36111,36159,36163,36175,36193,36257,36323,36351,36359,36363,47979,48022,48055,48175,48199,48210]},{"a":32791,"l":"top_rect_y1","c":"Screen y of the upper edge of the top rectangle: written by `$80EB` at `$8109`, offset by `$40` at `$8247` and averaged with y2 at `$84A0`. The type `$F6` drawing code also rewrites it (`$BB41`, `$BB55`), in code that has not been seen to run. 51 instructions name it, 5 writes and 46 reads.","t":"word","b":[0,0],"d":[0],"x":[33033,33296,33347,33351,33441,33478,33541,33561,33606,33687,33718,33789,33940,33952,34054,34297,34356,34392,34472,34614,34688,34770,34814,35170,35207,35500,35615,35630,35740,35767,35812,35816,35826,35830,35855,36011,36062,36117,36156,36199,36250,36305,36344,47899,47933,47937,47953,47957,47987,48028,48076,48159,48171,48227,48295]},{"a":32793,"l":"top_rect_y2","c":"Screen y of the lower edge of the top rectangle: written by `$80EB` at `$8112`, offset at `$824E`, averaged at `$84A3` and rewritten by the type `$F6` drawing code at `$BB4C` and `$BB5C`. 44 instructions name it, 5 writes and 39 reads.","t":"word","b":[0,0],"d":[0],"x":[33042,33302,33354,33358,33447,33498,33545,33565,33690,33723,33943,33955,34057,34475,34617,34749,34776,34820,35213,35222,35562,35634,35687,35771,35902,35906,35916,35920,35957,36035,36074,36141,36168,36223,36262,36329,36356,47941,47948,47960,47964,48036,48063,48183,48195,48230]},{"a":32795,"l":"shape_x0","c":"The first of eight 16-bit words, `$801B` to `$802A`, that carry the coordinates of whatever shape is being drawn or tested: four x, y pairs for the four-cornered fill at `$9819`. This word is the first x. It is the left edge for the rectangle fill at `$8E13`, the left end of the first edge for the trapezoid fill at `$8FF5`, and the x of the first upright edge for `$9579`. The object code reuses it for an object's left edge with the cell overflow in the high byte (`$DF59`; tested at `$E1FF`, `$E272`, `$E2CC` and `$E3F0`) and copies its low byte back as the object's new x (`$D752`, `$DA50`). The halt screen writes single bytes here (`$D2A3`), having zeroed the high bytes it needs at `$D0A3-$D0B2`. 73 instructions name it, 30 writes and 43 reads.","t":"byte","b":[0],"x":[33432,33805,33897,33901,34097,34193,34666,34743,34798,34854,34988,35044,35117,35179,35186,36008,36102,36196,36290,36376,36868,36895,38277,38293,38326,38387,38437,38495,38522,38567,38600,38634,38654,38688,38782,38816,38883,38909,38956,38966,39268,39319,39328,39369,39407,39525,42967,43054,43061,43114,43138,45938,45949,46138,46211,47696,47729,47976,48019,48052,48095,48101,53923,55122,55888,56145,57177,57855,57970,58060,58352,60207,60269]},{"a":32796,"l":"shape_x0_high","c":"The high byte of `$801B`, named on its own twice: the halt screen zeroes it at `$D0A3`, so that its 8-bit writes to `$801B` make valid words, and the object probe reads it at `$E19D` as the object's cell overflow in x.","t":"byte","b":[0],"x":[53411,57757]},{"a":32797,"l":"shape_y0","c":"The first y of the shape workspace: the top row for the rectangle fill (`$8E24`), the row of the first edge for the trapezoid fill (`$9001`, `$9014`), and the upper end of the first upright edge for `$9579` (`$9588`). The object code stores an object's near edge in y here with the cell overflow in the high byte (`$DF7D`) and copies the low byte back as the object's new y (`$D75E`, `$DA5C`). 69 instructions name it, 31 writes and 38 reads.","t":"byte","b":[0],"x":[33444,33817,33912,33916,34104,34223,34691,34764,34773,34833,35167,35210,35225,36014,36108,36202,36296,36388,36865,36884,38280,38304,38361,38582,38650,38770,38792,38860,38905,38937,38970,38980,39242,39280,39290,39313,39340,39363,39383,39401,39421,39536,42970,43068,43075,43142,43166,45964,46183,46216,47702,47723,47992,48033,48070,48079,48116,48140,53935,55134,55900,56167,57213,57886,57964,58170,58380,60220,60274]},{"a":32798,"l":"shape_y0_high","c":"The high byte of `$801D`, named on its own twice: zeroed by the halt screen at `$D0AF` and read by the object probe at `$E1A3` as the object's cell overflow in y.","t":"byte","b":[0],"x":[53423,57763]},{"a":32799,"l":"shape_x1","c":"The second x of the shape workspace: the right edge for the rectangle fill (`$8E1E`), the right end of the first edge for the trapezoid fill (`$9008`, `$9027`), and the x of the second upright edge for `$9579`. The object code stores an object's right edge, left edge plus width, here (`$DF65`). 66 instructions name it, 29 writes and 37 reads.","t":"byte","b":[0],"x":[33438,33811,33904,33909,34111,34196,34673,34746,34808,34842,34998,35050,35132,35193,35203,35558,36020,36114,36208,36302,36382,36872,36903,38265,38296,38332,38403,38453,38479,38538,38551,38603,38637,38712,38738,38779,38813,38833,38875,38959,38963,39236,39265,39325,39413,39475,42976,43082,43089,43131,43135,45935,47708,47742,47984,48025,48060,48104,48110,53929,57189,57834,57981,58067,58333,60212]},{"a":32800,"l":"shape_x1_high","c":"The high byte of `$801F`, named on its own twice: zeroed by the halt screen at `$D0A6`, and read by the object probe at `$DFE8` to tell whether the object's right edge has crossed into the next cell.","t":"byte","b":[0],"x":[53414,57320]},{"a":32801,"l":"shape_y1","c":"The second y of the shape workspace: the upper end of the second upright edge for `$9579` (`$957C`) and the second corner's y for `$9819`. The rectangle and trapezoid fills do not use it. `$8444` stores byte 8 of a bug's record (its width) here and `$B39D` tests it for 7 to choose between the two ways of drawing a bug; `$DF9B` stores an object's cell (its bytes 2 and 3) here for `$DFDF`. 36 instructions name it, 14 writes and 22 reads.","t":"byte","b":[0,0],"x":[33860,34118,34226,34789,34817,36026,36120,36214,36308,38268,38307,38364,38591,38613,38681,38726,38761,38829,38940,38973,38977,39230,39276,39336,39424,39486,42979,43096,43103,43159,43163,45981,47714,47736,57243,57311]},{"a":32803,"l":"shape_x2","c":"The third x of the shape workspace: the left end of the second edge for the trapezoid fill (`$8FF8`, `$902F`) and the third corner's x for `$9819`. `$842C` stores byte 14 of a bug's record, its heading, here, and the bug drawing code reads it seven times (`$B411-$B580`) to turn the body and legs. `$DF92` stores an object's bottom and top heights in this byte and the next for the probe (`$DFD3`). The halt screen keeps the left end of the band it is drawing here. 63 instructions name it, 30 writes and 33 reads.","t":"byte","b":[0],"x":[33836,33883,33887,34125,34201,34682,34727,35004,35063,35145,35182,35190,36032,36126,36220,36314,36856,36911,38610,38670,38696,38789,38849,38867,38984,38994,39307,39357,39378,39469,39507,39528,43001,43057,43065,43124,43127,43170,43177,46097,46144,46226,46343,46379,46428,46464,47664,47678,47699,47775,47914,48352,53679,53715,53781,53819,53920,53943,55049,55511,57234,57299,57558]},{"a":32804,"l":"shape_x2_high","c":"The high byte of `$8023`, used on its own by three pieces of code. `$8432` copies byte 15 of a bug's record here, and `$B3A5` and `$B3B4` take its low and high halves as the angles of one pair of legs. `$DFD8` stores an object's height, top minus bottom, here, and the probe adds it to a surface height at `$E3AE` and `$E446`. The halt screen zeroes it at `$D0A9`. Seven instructions name it.","t":"byte","b":[0],"x":[33842,45989,46004,53417,57304,58286,58438]},{"a":32805,"l":"shape_y2","c":"The third y of the shape workspace: the bottom row for the rectangle fill (`$8E2A`), the row of the second edge for the trapezoid fill (`$8FF5`, `$9011`), the lower end of the first upright edge for `$9579` (`$958C`) and the third corner's y for `$9819`. `$8438` stores byte 16 of a bug's record here for a second pair of legs (`$B3C9`, `$B3D8`); `$DF89` stores an object's far edge in y, near edge plus depth; the halt screen keeps the row of the band it is drawing here. 73 instructions name it, 35 writes and 38 reads.","t":"byte","b":[0],"x":[33450,33848,34132,34231,34718,34752,34780,34836,35173,35216,35231,36038,36132,36226,36320,36394,36853,36881,38284,38338,38376,38434,38510,38579,38616,38647,38684,38804,38902,38998,39008,39293,39333,39351,39390,39441,39463,39483,39501,39540,43004,43071,43079,43152,43155,43184,43191,46025,46040,47649,47661,47705,47754,47896,47998,48041,48066,48083,48113,48123,48135,48147,48357,53688,53828,53932,53939,57225,57865,57957,58177,58360,60225]},{"a":32806,"l":"shape_y2_high","c":"The high byte of `$8025`, named on its own six times: `$843E` copies byte 17 of a bug's record here for the third pair of legs (`$B3ED`, `$B3FC`); the object probe reads it at `$DFEE` and `$E020` to tell whether the object's far edge has crossed into the next cell in y; the halt screen zeroes it at `$D0B2`.","t":"byte","b":[0],"x":[33854,46061,46076,53426,57326,57376]},{"a":32807,"l":"shape_x3","c":"The fourth x of the shape workspace: the right end of the second edge for the trapezoid fill (`$8FFC`, `$9037`) and the fourth corner's x for `$9819`. The map routine at `$CE0A` keeps the screen column of the map cell it is drawing here (`$CE41-$CE5B`, read at `$CEC2` and `$CFF6`). The object probe stores the address of the cell an object stands in here (`$DFE5`, `$E1B3`, `$E1CA`), and the object code turns it back into a window position at `$D764` and `$DA62`. The halt screen keeps the right end of a band here. 54 instructions name it, 30 writes and 24 reads.","t":"byte","b":[0],"x":[34139,34206,34685,34734,35012,35069,35161,35196,35200,36044,36138,36232,36326,36860,36919,38644,38704,38730,38823,38891,38925,38987,38991,39259,39375,39416,39457,39478,39519,43026,43085,43093,43117,43121,43173,43181,47690,47711,52801,52822,52827,52930,53238,53682,53720,53785,53822,53926,53947,55140,55906,57317,57779,57802]},{"a":32808,"l":"shape_x3_high","c":"The high byte of `$8027`, named on its own ten times. The map routine keeps the screen row of the map cell it is drawing here: it starts from `$C8`, steps down by `$10` and stops below `$78` (`$CE2B-$CE3C`, read at `$CF4B` and `$D003`). After the object probe it is the high byte of the object's cell address, and four places test it for zero, meaning no cell there (`$D6FA`, `$DA21`, `$DB6D`, `$DD3E`). The halt screen zeroes it at `$D0AC`.","t":"byte","b":[0],"x":[52779,52788,52793,53067,53251,53420,55034,55841,56173,56638]},{"a":32809,"l":"shape_y3","c":"The fourth y of the shape workspace: the lower end of the second upright edge for `$9579` (`$9580`) and the fourth corner's y for `$9819`. The map routine keeps its pointer into the cell window here (`$CE31`, `$CE44`, `$CE4D`). The object step code stores the new low byte of an object's x here (`$DF5C`), which the object code reads back at `$D74C` and `$DA4A`. 45 instructions name it, 17 writes and 28 reads.","t":"byte","b":[0],"x":[34146,34236,34792,34824,36050,36144,36238,36332,38272,38341,38416,38465,38507,38625,38723,38758,38795,38826,38863,39001,39005,39245,39273,39386,39428,39438,39451,39490,39513,39533,43029,43099,43107,43145,43149,43187,43195,47684,47717,52785,52804,52813,55116,55882,57180]},{"a":32810,"l":"shape_y3_high","c":"The high byte of `$8029`, named on its own three times: the object step code stores the new low byte of an object's y here (`$DF80`) and the object code reads it back at `$D758` and `$DA56`.","t":"byte","b":[0],"x":[55128,55894,57216]},{"a":32811,"l":"extent_x1","c":"The first of four 16-bit words, `$802B`, `$802D`, `$802F` and `$8031`, with two main uses. The draw loop at `$B2F4` loads them with a display-list entry's x1, x2, y1 and y2 relative to the head (`$B320-$B33B`) for `$81DB` to project. The fill routines then reuse them as working copies for clipping: x1, x2, y1, y2 for the rectangle fill (`$8E1B-$8E2D`), and for the trapezoid fill at `$90F9` the left and right x on the first row (`$802B`, `$802D`) and on the last row (`$802F`, `$8031`). This word has two more uses: the display-list builder keeps the previous point's position in whole units here while it boxes a worm segment (x at `$AB39` and `$AB5C`, then y at `$AB9F` and `$ABC2`), and the bug drawing code keeps the x of the bug's centre here (`$B389`). 45 instructions name it, 26 writes and 19 reads.","t":"byte","b":[0],"x":[33009,33255,33732,35479,36379,36404,36899,37193,37203,37274,37323,37361,37368,37413,37428,37493,37686,38329,38391,38441,38483,38526,38571,38658,38692,38734,38837,38871,38913,39117,39164,39202,43833,43868,43935,43970,45856,45961,46255,46329,46373,46458,48219,48275,48305,48319,48326]},{"a":32812,"l":"extent_x1_high","c":"The high byte of `$802B`, named on its own four times: the trapezoid fill tests it at `$9062` and `$9327` to see whether the first row's left x is off the screen, and the display-list builder stores the third byte of the worm's running position here (`$AB53`, `$ABB9`) so that `$802B` reads as a signed 16-bit number of whole units.","t":"byte","b":[0],"x":[36962,37671,43859,43961]},{"a":32813,"l":"extent_x2","c":"The second extent word: the entry's x2 for `$81DB` (`$B329`), the right edge for the rectangle fill and the right x on the first row for the trapezoid fill. The bug drawing code keeps the y of the bug's centre here (`$B390`). 41 instructions name it, 24 writes and 17 reads.","t":"byte","b":[0],"x":[33018,33261,33738,35494,36385,36415,36907,37208,37218,37289,37338,37375,37382,37431,37446,37584,37721,37735,38335,38399,38457,38487,38542,38555,38662,38700,38742,38841,38879,38929,39125,39168,39210,45865,45968,46288,46323,46410,46492,48239,48267,48302,48330]},{"a":32814,"l":"extent_x2_high","c":"The high byte of `$802D`, read on its own twice, at `$9042` and `$9349`, where the trapezoid fill tests whether the first row's right x is off the screen.","t":"byte","b":[0],"x":[36930,37705]},{"a":32815,"l":"extent_y1","c":"The third extent word: the entry's y1 for `$81DB` (`$B332`), the top row for the rectangle fill and the left x on the last row for the trapezoid fill. The bug drawing code stores the bug's width here as one byte (`$B37A`) and reads it nine times to size the body and legs. 41 instructions name it, 23 writes and 18 reads.","t":"byte","b":[0],"x":[33027,33267,33744,35509,36391,36426,36915,37196,37277,37284,37326,37333,37364,37372,37416,37453,37490,38322,38395,38445,38499,38530,38559,38666,38708,38746,38853,38887,38917,39133,39176,39218,45874,45946,45952,45971,46106,46127,46151,46172,46189,46198,46299]},{"a":32816,"l":"extent_y1_high","c":"The high byte of `$802F`, named on its own six times: the trapezoid fill's clip test reads it at `$9069`, `$9073` and `$907A`, and the bug drawing code stores one and a half times the bug's width here (`$B39A`) as the reach of its legs (`$B49A`, `$B4BB`).","t":"byte","b":[0],"x":[36969,36979,36986,45978,46234,46267]},{"a":32817,"l":"extent_y2","c":"The fourth extent word: the entry's y2 for `$81DB` (`$B33B`), the bottom row for the rectangle fill and the right x on the last row for the trapezoid fill. 31 instructions name it, 22 writes and 9 reads.","t":"byte","b":[0],"x":[33036,33273,36397,36439,36923,37211,37292,37299,37341,37348,37378,37386,37434,37456,37581,38354,38407,38449,38491,38534,38563,38674,38716,38750,38845,38895,38921,39141,39184,39222,45883]},{"a":32818,"l":"extent_y2_high","c":"The high byte of `$8031`, read on its own three times by the trapezoid fill's clip test (`$9049`, `$9052`, `$905A`).","t":"byte","b":[0],"x":[36937,36946,36954]},{"a":32819,"l":"probe_x","c":"The first byte of a 20-byte block, `$8033` to `$8046`, that several routines use as parameters and scratch; the worm's probe at `$9A89` addresses it through IY. For that probe this byte is the x of the point to test, in whole units from the head: the head update stores it at `$9DB1` and the segment loop at `$A51C`, `$A6BC` and `$A7A0`, and the probe reads it as IY+0. Its other uses, each as the 16-bit word `$8033-$8034`: the y of the highest corner in the four-cornered fill (`$9941`, read at `$9889` and `$98F4`); a partial product in `$A926`, which returns the word in HL (`$AAEF`); in the display-list builder a worm segment's x offset (`$AB40`) and then one component of its half-width (`$AC7A`); in the object code an object's x step for the pass (`$DF41`, `$DCB4`), zeroed at `$D8BF` and `$D9B5`. 33 instructions name it: 17 writes, 15 reads and the `LD IY,$8033` at `$9A89`.","t":"byte","b":[0],"x":[39049,39156,39233,40369,42268,42684,42912,43447,43512,43522,43539,43547,43588,43599,43619,43629,43636,43690,43759,43840,44073,44154,44179,44234,44300,44364,44431,55487,55733,56500,57153,57169]},{"a":32820,"l":"probe_y","c":"For the worm's probe, the y of the point to test in whole units from the head (stored at `$9DC1`, `$A52D`, `$A6C8` and `$A7A6`; read as IY+1). As the high byte of the word at `$8033` it is also the sign that `$AA9C` and `$AC6C` test and the whole part of an object's x step (`$DF49`). The key redefiner borrows it for the number of the row the cursor is on, 0 to 8 (`$E54D`, read at `$E561`, `$E569`, `$E57A` and `$E597`). Twelve instructions name it on its own.","t":"byte","b":[0],"x":[40385,42285,42696,42918,43676,44140,57161,58701,58721,58729,58746,58775]},{"a":32821,"l":"probe_z","c":"For the worm's probe, the height of the point to test (stored at `$9DD0`, `$9DDA`, `$A553` and `$A7AC`; read at `$9AAC` and `$9B6C`). As a word it is the y of the second corner in the four-cornered fill (`$9957`, `$99EC`), a partial product in `$A926`, a worm segment's y offset and then the other component of its half-width in the display-list builder (`$ABA6`, `$AC90`), and an object's y step (`$DF21`, `$DD29`). After the object probe at `$DFB8` the byte holds the type of the board record or object that the moving object met (`$E3A0`, `$E3D3`, `$E43A`, `$E46B`), which the object code tests ten times, for instance for `$F1` at `$D848`. 50 instructions name it, 22 writes and 28 reads.","t":"byte","b":[0],"x":[39046,39060,39109,39153,39255,39404,39596,39788,40400,40410,42323,42924,43467,43528,43533,43553,43560,43576,43596,43606,43626,43696,43942,44089,44176,44182,44216,44285,44346,44412,55365,55490,55736,55924,56107,56187,56201,56270,56292,56338,56617,56652,56799,57121,57205,57287,58272,58323,58426,58475]},{"a":32822,"l":"probe_surface","c":"The height of the surface at the probed point. The worm's probe starts it at the probe height (`$9AAF`) and replaces it with the top of whatever stands in the way (`$9B61`); the head update compares it with the head's height to choose between climbing and being blocked (`$9EB0`) and climbs to it (`$9F5D`, `$9F64`); the segment loop does the same for each segment (`$A674`, `$A686`). The object probe uses it the same way for a moving object (`$DFDC`, `$E3C3`, `$E45B`, read six times by the object code). As the high byte of the word at `$8035` it is also a sign byte (`$AADA`, `$AC82`) and the whole part of an object's y step (`$DF6D`). 25 instructions name it on its own, 6 writes and 19 reads.","t":"byte","b":[0],"x":[39599,39753,39777,40624,40797,40804,42612,42630,43738,44162,55075,55460,55935,56042,56219,56416,56701,57197,57308,58232,58282,58307,58388,58434,58459]},{"a":32823,"l":"probe_hit","c":"A 16-bit address: what the probe found. The worm's probe zeroes it (`$9A90`) and stores the address of the display-list entry that the point touches or rests on (`$9B3C`, `$9B76`); the head update loads it into IX to read the entry's type (`$9E0E`) and the segment loop into IY (`$A599`). The object probe stores the address of a board record or an object record here instead (`$E393`, `$E3C6`, `$E42D`, `$E45E`), and the object code reads it eight times, for example to remove a sparky that a bug ran into (`$D894`). Other uses: the y of the third corner in the four-cornered fill; a partial product in `$A926`; a word the display-list builder sets to 0 at `$AC21` and adds into each segment corner; the sign byte of an object's x step (`$DF3E`, `$DCC0`, read at `$DF4D`). 46 instructions name it, 19 writes and 27 reads.","t":"byte","b":[0],"x":[39057,39071,39106,39194,39303,39366,39466,39516,39568,39740,39798,40462,42393,43473,43525,43550,43579,43609,44065,44219,44237,44282,44303,44349,44367,44415,44428,55398,55444,55493,55739,56114,56300,56329,56357,56512,56679,56806,57124,57150,57165,57290,58259,58310,58413,58462]},{"a":32824,"l":"probe_hit_high","c":"The high byte of `$8037`. Four instructions test it for zero to see whether the worm's probe found anything (`$9E12`, `$9EB9`, `$A59D`, `$A6CB`); the object step code uses it as the sign byte of an object's y step (`$DD35`, read at `$DF71`).","t":"byte","b":[0],"x":[40466,40633,42397,42699,56629,57201]},{"a":32825,"l":"probe_slope","c":"A 16-bit result of the probe: the slope of the surface found, a gradient in the low byte and flags in the high byte, copied from `$803F` (`$9B43`, `$9B7D`). The head update copies it to `$8005` when the head lands or climbs (`$9F6E`). The object probe writes it five times and nothing reads it there. Other uses: the y of the lowest corner in the four-cornered fill; a partial product in `$A926`; the height of a worm segment's end in the display-list builder (`$ACA3`, read at `$ACDC` and `$AD5E`). 23 instructions name it, 14 writes and 9 reads.","t":"byte","b":[0,0],"x":[39068,39191,39316,39354,39454,39504,39571,39747,39805,40814,43494,43515,43542,43591,43616,44195,44252,44382,57293,58266,58317,58420,58469]},{"a":32827,"l":"probe_floor","c":"The probe's verdict, in the low byte: `$FF` when the point is on or inside something, otherwise the height of the highest surface below it. The worm's probe zeroes it (`$9A96`), sets `$FF` at once when the probe height is 0 (`$9ABA`) and updates it as it tests entries (`$9B39`, `$9B5B`); the head update and the segment loop compare it with `$FF` (`$9DF2`, `$A573`). The object probe keeps the same convention (`$E0DD`, `$E390`, `$E3BD`, `$E42A`, `$E455`) and the object code reads it seven times. As a word it is also the height component of the worm's step returned by `$A926` (`$A9AF`, `$AAE8`; read at `$9D19` and `$9D4A`), the x of the highest corner in the four-cornered fill, and a corner's x before scaling in the display-list builder. 36 instructions name it, 18 writes and 18 reads.","t":"byte","b":[0,0],"x":[39160,39239,39574,39610,39737,39771,40217,40266,40434,42355,43439,43752,44231,44256,44297,44320,44361,44386,44425,44450,55040,55072,55085,55502,55768,55848,56179,56644,57296,57565,58242,58256,58301,58398,58410,58453]},{"a":32829,"l":"probe_top","c":"For both probes, the height of the top of the thing under test at the probed point (`$9BF4`, and through IY+`$0A` at `$9C44` and `$9CAA`; `$E293`, `$E2F4`, `$E362`). As a word it is the x component of the worm's step from `$A926` (`$A95A`, halved into `$7FF8` at `$9D05`), the left x on the second corner's row in the four-cornered fill, a corner's y before scaling in the display-list builder, and a bug's x distance to the head (`$D950`). 33 instructions name it, 15 writes and 18 reads.","t":"byte","b":[0],"x":[39015,39025,39082,39113,39172,39287,39410,39717,39725,39734,39774,39780,39924,40197,43354,44249,44269,44313,44333,44379,44399,44443,44463,55632,58003,58087,58100,58197,58210,58236,58246,58253,58304]},{"a":32830,"l":"probe_bottom","c":"For both probes, the height of the bottom of the thing under test (`$9BFA`, `$9C41`, `$9CA7`; `$E299`, `$E2F0`, `$E35E`); the object probe compares it with the surface height plus the object's own height at `$E3A6`. As the high byte of the word at `$803D` it is the sign of a bug's x distance to the head, read at `$D81C`. Ten instructions name it on its own.","t":"byte","b":[0],"x":[39930,40001,40103,55324,58009,58081,58096,58191,58206,58278]},{"a":32831,"l":"probe_ramp","c":"The slope of the thing under test: zeroed for each one (`$9B86`, `$E233`) and, for a ramp, set from the divide at `$9CCC` (`$9C61`, `$9CC7`, `$E307`, `$E375`), with the gradient in this byte and the flags in `$8040`. The probes copy it to `$8039` when the thing becomes the one found. As a word it is also the y component of the worm's step from `$A926` (`$A992`, halved into `$7FFA` at `$9D0F`), the right x on the second corner's row in the four-cornered fill, the height of a segment's end in the display-list builder (`$ACB5`), and a bug's y distance to the head (`$D96E`). 23 instructions name it, 12 writes and 11 reads.","t":"byte","b":[0],"x":[39018,39022,39079,39121,39180,39262,39435,39744,39802,39814,40033,40135,40207,43410,44213,44316,44446,55662,57907,58119,58229,58263,58314]},{"a":32832,"l":"probe_ramp_flags","c":"The high byte of `$803F`. The worm's probe sets bit 0 here through IY+`$0D` when a ramp's high end is the other one (`$9C19`, `$9C7F`) and bit 1 for a ramp that runs along y (`$9C66`), then passes the byte in A to the divide at `$9CCC`, which adds bit 7 when the rise is larger than the run (`$9C5B`, `$9CC1`). The object probe does the same with direct stores (`$E2B6`, `$E30F`, `$E324`). `$D820` reads it as the sign of a bug's y distance to the head. Ten instructions name it on its own.","t":"byte","b":[0],"x":[40027,40129,55328,58033,58038,58113,58127,58143,58148,58223]},{"a":32833,"l":"probe_x_sign","c":"For the worm's probe, two sign bytes written together at `$9AA9`: `$8041` is 0 or `$FF` to extend the probe's x (`$8033`) to 16 bits and `$8042` does the same for its y; the probe reads them as IY+`$0E` and IY+`$0F`. As a word it is the left x on the third corner's row in the four-cornered fill (`$99B3`, `$99CC`, `$9A30`, `$9A7B`). Ten instructions name it, 6 writes and 4 reads.","t":"byte","b":[0,0],"x":[39029,39039,39093,39129,39198,39347,39372,39472,39547,39593]},{"a":32835,"l":"quad_row3_right_x","c":"The right x on the third corner's row in the four-cornered fill at `$9819`, which splits the shape into three trapezoids at its corners' rows. Nine instructions name it, all in that routine: 5 writes and 4 reads.","t":"byte","b":[0,0],"x":[39032,39036,39090,39137,39206,39310,39397,39497,39522]},{"a":32837,"l":"quad_lowest_x","c":"The x of the lowest corner in the four-cornered fill, where its third trapezoid ends in a point. Five instructions name it, all in that routine: four writes (`$999A`, `$99C0`, `$9A24`, `$9A56`) and one read (`$992E`). The byte after it, `$8046`, is its high byte.","t":"byte","b":[0,0],"x":[39214,39322,39360,39460,39510]},{"a":32839,"l":"display_list_free","c":"The address of the next free 15-byte entry in the display list. `$AAF3` sets it to `$EB9C` (`$AB03`), stores it again after the four worm-segment entries (`$ADCA`), and `$B003` moves it on by 15 each time a board record or an object is accepted. `$AB25`, `$AE9C` and `$AF69` load it into IX to fill the entry. Six instructions name it.","t":"byte","b":[0,0],"x":[43779,43813,44490,44700,44905,45059]},{"a":32841,"l":"cell_offset_x","c":"A signed count of cells in x. While the display-list builder projects a board record or an object, it is the x offset of that thing's cell from the cell under the head: `$AEF9` stores -1, 0 or 1 for each of the nine visible cells (`$AEFA`), `$AE74` stores an object's window column minus 2, `$AF06` and `$AF80` use it as the high byte of an x coordinate, and the record handler at `$BE40` adds 2 to it to give a new object its window column. Earlier in the same routine it is the third byte of the worm's running x (`$AB07`, `$AB50`, `$AB57`). The object probe stores the offset of the cell it is testing here (`$E1D2`, `$E3D9`, as the low byte of BC). 14 instructions name it.","t":"byte","b":[0],"x":[43783,43856,43863,44660,44794,44806,44928,48704,57810,57840,57921,58045,58329,58339]},{"a":32842,"l":"cell_offset_y","c":"The y counterpart of `$8049`: the y offset in cells of the board record or object being projected (`$AEFE`, `$AE6C`; read at `$AF1C`, `$AFB4` and by the handler at `$BE47`), the third byte of the worm's running y (`$AB0A`, `$ABB6`, `$ABBD`), and the y offset of the cell under test in the object probe, which writes it as the high byte of the word at `$8049` and reads it at `$E20F`, `$E256`, `$E32B` and `$E3FE`. Twelve instructions name it on its own.","t":"byte","b":[0],"x":[43786,43958,43965,44652,44798,44828,44980,48711,57871,57942,58155,58366]},{"a":32843,"l":"draw_entry","c":"The address of the display-list entry being drawn. The draw loop at `$B2F4` starts it at the list head `$EB7E` (`$B303`) and replaces it with each entry's link in turn (`$B310`) until the link's high byte is 0. Six drawing routines reload IX from it to reach the entry and its source record (`$841C`, `$851C`, `$860A`, `$863F`, `$8667`, `$870F`). Eleven instructions name it.","t":"byte","b":[0,0],"x":[33820,34076,34314,34367,34407,34575,45827,45830,45840,45843,45898]},{"a":32845,"l":"insert_after","c":"Used by the list insert at `$B008`: the address of the entry after which the new entry will be linked (`$B00C`), read back at `$B02B` once the place is found. Two instructions name it.","t":"byte","b":[0],"x":[45068,45099]},{"a":32846,"l":"entry_added_flag","c":"The high byte of `$804D`, used on its own as a flag. Before the display-list builder projects an object it zeroes this byte (`$AEA7`); if the object is accepted, the insert at `$B008` stores an entry address at `$804D`, which makes this byte non-zero; `$AEB2` then tests it. For an object that was not accepted the builder goes on to `$AEB9`, where a type `$FB` object has its byte 1 counted down.","t":"byte","b":[0],"x":[44711,44722]},{"a":32847,"l":"draw_type","c":"The type byte of the entry being drawn, stored by `$81DB` at `$81DC`. Its low two bits choose one of the four pattern sets at `$80CB` (`$825F`) and its top two bits choose the drawing routine (`$8278`); the routines read it again to tell the types apart (`$89B8`, `$8A12`, and nine reads between `$8ABC` and `$8C84`). 14 instructions name it, 1 write and 13 reads.","t":"byte","b":[0],"x":[33244,33375,33400,35256,35346,35516,35529,35539,35580,35654,35664,35705,35779,35972]},{"a":32848,"l":"fill_right_edge_count","c":"A counter in the trapezoid fill for its right-hand edge, the one that runs from `$802D` on the first row to `$8031` on the last. `$9323` sets it to the low byte of the x distance between those two, plus 1; the code that walks an edge which moves more than a pixel a row loads it (`$9452`, `$949E`), takes 1 off for each pixel stepped and stores it back (`$9475`, `$94C2`). Five instructions name it.","t":"byte","b":[0],"x":[37667,37970,38005,38046,38082]},{"a":32849,"l":"fill_left_edge_count","c":"The same counter for the trapezoid fill's left-hand edge, from `$802B` on the first row to `$802F` on the last: set at `$92C8`, loaded at `$94F6` and `$953A`, stored back at `$951A` and `$955D`. Five instructions name it.","t":"byte","b":[0],"x":[37576,38134,38170,38202,38237]},{"a":32850,"l":"fill_rows_left","c":"The number of rows the trapezoid fill has still to draw in the current run. The row loop at `$93E1` takes 1 off at `$956D-$9571` and repeats until it is zero; `$9397`, `$93A5`, `$93C2` and `$93DE` set it for a first row, the rows between and a last row. Six instructions name it.","t":"byte","b":[0],"x":[37783,37797,37826,37854,38253,38257]},{"a":32851,"l":"fire_request","c":"Set to `$FF` by `$7C13` on the pass in which a fire control is first found down (`$7C63`), and read and zeroed by the frame loop (`$76FA`, `$7702`), which then tries to fire one sparky. Three instructions name it.","t":"byte","b":[0],"x":[30458,30466,31843]},{"a":32852,"l":"fire_held","c":"The latch behind `$8053`: `$FF` while either fire control has been down since it was last seen up (`$7C60`), 0 otherwise (`$7C6A`). `$7C59` tests it so that holding the control does not fire again. Three instructions name it, all in `$7C13`.","t":"byte","b":[0],"x":[31833,31840,31850]},{"a":32853,"l":"copy_click_period","c":"Sound for the pass. While `$E9E8` copies the frame buffer to the screen it flips bits 3 to 7 of the byte it writes to port `$FE`, of which bits 3 and 4 are the MIC and speaker lines, once every `$8055` pixel rows (`$EA19`), so a small value gives a buzz and 0 gives silence, since the 128 rows end before the counter comes round. That routine first steps the sound list at `($E4AE)`, when one is playing, and stores the list's current byte here (`$E9F6`). After the copy the frame loop adds 1 to a non-zero value and zeroes it once it reaches 5 (`$766E-$767B`). Other writers: firing (2, `$771F`), a deflection (`$0C`, `$9ED0`), a collected spindle (8, `$A5B7`), an explosion (8, `$DE35`), a type `$FB` marker counting down (`$21`, `$DE54`) and the halt screen (`$D0EC`, `$D10F`, `$D127`, `$D33A`). 13 instructions name it, 11 writes and 2 reads.","t":"byte","b":[1],"x":[30318,30331,30495,40656,42423,53484,53519,53543,54074,56885,56916,59894,59929]},{"a":32854,"l":"clear_click_period","c":"The same kind of value for the other long loop of a pass: while `$EAA9` fills the frame buffer with `$FF` it flips the same bits of port `$FE` once every `$8056` rows (`$EAB3`). The frame loop zeroes it after every pass (`$767F`). Writers: the end-of-game explosion (`$7914`), a sparky collected by the head (`$10`, `$9E23`) or by a segment (`$11`, `$A62D`), running off the board (9, `$A3E6`), a collected spindle (8, `$A5BA`), a type `$E5` object within 20 units of the head in x and y (2, `$DCE6`) and an explosion (8, `$DE38`). The two writes made while a bug is drawn (`$B36C`, `$B4E2`) come after the frame loop's clear and are zeroed at `$767F` before its next one. 11 instructions name it, 10 writes and 1 read.","t":"byte","b":[0],"x":[30335,30996,40483,41958,42426,42541,45932,46306,56550,56888,60083]},{"a":32855,"l":"controls","c":"The control byte built by `$7C13`: bit 7 leave the game, bit 6 lay a burper, bit 5 fire, bit 4 halt, bit 3 slower, bit 2 faster, bit 1 heading plus `$0C`, bit 0 heading minus `$0C`. The frame loop reads it eight times (`$7694` to `$7793`) and zeroes it for the pass when `$8058` is non-zero (`$76A5`). 12 instructions name it, 3 writes and 9 reads, all in the frame loop and `$7C13`.","t":"byte","b":[0],"x":[30356,30373,30382,30397,30416,30435,30568,30601,30611,31782,31823,31826]},{"a":32856,"l":"control_lock","c":"Zero in normal play. Bits 0 and 1 make the frame loop ignore the controls for one pass and are then cleared (`$769C-$76F7`): bit 0 is set while the head falls fast (`$9D2B`), bit 1 when the head is over no cell (`$A3D3`) or a segment's height offset is 20 units or more (`$A565`). A value with bit 7 set means the worm is dying or the game is won: `$77A0` writes `$FF` when all four segments carry a bug (`$781D`), `$9E6D` writes `$C0` when the head touches a type `$F6` object, and `$7822` then counts the byte down each pass until it is positive, while the segment loop slows the worm and jitters its segments (`$A43B-$A469`). A new game zeroes it. 14 instructions name it, 8 writes and 6 reads.","t":"byte","b":[0],"x":[30225,30364,30455,30624,30749,30754,40230,40235,40557,41934,41939,42043,42336,42341]},{"a":32857,"l":"frame_counter","c":"A 16-bit count of passes of the frame loop: zeroed by a new game and incremented at `$7638-$763C`. The low byte paces things: `$764B` calls `$7925` when it equals `$64`, `$7653` takes its low two bits for `$8067`, and drawing code uses single bits of it to animate (`$84A6`, `$860E`, `$8833`, `$B4E8`, and `$8786` and `$BC77`, which have not been seen to run). `$DE91` copies it into a new bug as its heading, and two record handlers read it (`$BDD4`, `$BE73`, neither seen to run). The high byte `$805A` is read on its own twice: `$7925` tests its bit 0, and the record handler at `$BE6C` compares it with `$11` before choosing a new bug's size. 16 instructions name the two bytes.","t":"word","b":[0,0],"d":[0],"x":[30176,30264,30268,30283,30291,33958,34318,34694,34867,46312,48247,48596,48755,56977]},{"a":32859,"l":"spindles_collected","c":"The number of spindles collected in this game; a new game zeroes it (`$759C`) and `$A5C5-$A5C9` adds 1 for each spindle a segment touches. `$7A9C` shows it on the panel, `$BED5` compares it with `$32` (50), and the map routine reads it together with `$805C` (`$CE0D`) to see when to redraw. `$9E70` writes `$C0` here when the head touches a type `$F6` object, and `$783C` tests bit 7 to choose the end sequence. Eight instructions name it; the three at `$9E70`, `$A5C5` and `$A5C9` and the one at `$BED5` have not been seen to run.","t":"byte","b":[0],"x":[30108,30780,31388,40560,42437,42441,48853,52749]},{"a":32860,"l":"spindles_shown","c":"The spindle count as last drawn on the panel. `$7A98-$7AA2` compares it with `$805B` and redraws the three digits when they differ. Two instructions name it; the map routine also reads it as the high byte of the word at `$805B`.","t":"byte","b":[1],"x":[31384,31394]},{"a":32861,"l":"sparkies","c":"The number of sparkies the worm holds. A new game sets `$14` (20). Firing takes 1 (`$7705-$771A`), and is refused at 0 and at `$81` or more because the test is a signed one. The head or a segment touching a type `$F1` object adds 1 (`$9E3D`, `$A647`), a collected spindle adds 5 (`$A5BD`), and each pass the head spends over no cell takes 1 off, stopping at 0 (`$A3D6-$A3E2`). `$7B0B` shows it on the panel. Twelve instructions name it, 6 reads and 6 writes.","t":"byte","b":[20],"x":[30255,30469,30490,31499,40509,40513,41942,41947,42429,42434,42567,42571]},{"a":32862,"l":"sparkies_shown","c":"The sparky count as last drawn on the panel. `$7B07-$7B10` compares it with `$805D` and redraws the three digits when they differ. Two instructions name it. The byte after it, `$805F`, has no reference.","t":"byte","b":[0,0],"x":[31495,31504]},{"a":32864,"l":"score","c":"The score, 16 bits. A new game zeroes it. `$A5CC-$A5D3` adds the new spindle count for each spindle, so the first is worth 1 and the fiftieth 50; `$D84D` adds `$14` (20) when a sparky hits a bug; `$DD5A` adds `$23` (35) when a type `$E5` object meets a sparky. `$7ABF` moves the shown score towards it and `$7892` compares it with the hi-score at the end of a game. Nine instructions name it, 4 writes and 5 reads.","t":"word","b":[0,0],"d":[0],"x":[30164,30866,31423,42444,42451,55373,55380,56666,56673]},{"a":32866,"l":"score_shown","c":"The score as drawn on the panel. `$7AC2-$7ADC` moves it towards `$8060` by at most 3 a pass when the score is higher, or sets it equal at once when the score is lower, and redraws the five digits. Two instructions name it; a new game does not reset it, so the opening pass of a game brings it down to 0.","t":"word","b":[1,0],"d":[1],"x":[31426,31452]},{"a":32868,"l":"hi_score","c":"The best score since the game was loaded. `$788F-$789C` replaces it with the score at the end of a game when the score is higher. Two instructions name it and nothing else writes it, so it lasts until the game is loaded again.","t":"word","b":[0,0],"d":[0],"x":[30863,30876]},{"a":32870,"l":"bug_spawn_budget","c":"The number of bugs that the record handler at `$BE07` may still create: it does nothing when this is 0 (`$BE24`) and takes 1 off for each type `$F3` object it adds (`$BE36`). `$7932` sets it to `$0C` once in 1,024 passes, the first time on pass `$0064` of a game, `$D77A-$D77E` gives 1 back when a bug that has spent 40 passes outside the cell window is removed, and `$DB00-$DB06` adds byte 22 of an expiring type `$E3` object. A new game does not reset it; the image holds `$0C`. Seven instructions name it, 4 writes and 3 reads.","t":"byte","b":[12],"x":[31026,48676,48694,55162,55166,56064,56070]},{"a":32871,"l":"narrow_segment_countdown","c":"Chooses which worm segment is drawn narrower in the current pass. The frame loop stores (frame counter AND 3) + 1 here before the display list is built (`$7659`); the builder takes 1 off for each of the four segments and, for the one that brings it to 0, adds the speed `$8003` to the index into the table at `$E48C` that sets a segment's width (`$AC4C-$AC59`). The table's entries fall as the index rises (`$FF`, `$E6`, `$D2`, `$C5` and so on downward), so the chosen segment's two side points are placed closer together. The frame loop also zeroes it at `$76CD` on passes when the controls are read; that write is overwritten at `$7659` before the builder next runs. Four instructions name it.","t":"byte","b":[0],"x":[30297,30413,44108,44112]},{"a":32872,"l":"entries_added","c":"A count of the board records and objects that the display-list builder accepted in the current pass: zeroed at `$ADCF` and incremented at `$AFF4-$AFF8`. `$D43B` reads it on the next pass: only when it is 0 does the code at `$D442` count down towards adding a type `$FB` marker at the head's position. Four instructions name it.","t":"byte","b":[0],"x":[44495,45044,45048,54331]},{"a":32873,"l":"visible_cells","c":"Nine 6-byte entries, 54 bytes, one for each cell of the 3 by 3 block around the cell under the head. An entry is three words: the screen x of the cell's origin (256 times the cell's x offset, minus the head's x inside its cell `$7FF5`, plus `$80`), the screen y of its origin (the same with the y offset, `$7FF7` and `$40`), and the cell's address from the window at `$6432`, or 0 where there is no cell. In address order the entries are the cells at offsets (-1,-1) `$8069`, (0,-1) `$806F`, (1,-1) `$8075`, (-1,0) `$807B`, (0,0) `$8081`, (1,0) `$8087`, (-1,1) `$808D`, (0,1) `$8093` and (1,1) `$8099`. The display-list builder fills each through `$AEF9` (nine calls, `$ADD8-$AE3B`), and `$EAA9` hands each to `$EB2B` (nine calls, `$EAF4-$EB27`), which draws that cell's 256-unit square of floor: filled with the rectangle fill when the address is 0, and otherwise marked with 7 to 14 single pixels (`$B9F2`) at positions produced by applying `$B350` (HL times 1509 plus 41) again and again to the cell's address. Each entry's address is loaded by exactly those two instructions; the other bytes are reached through DE and HL.","t":"word","b":[0,0,0,0,0,0,0,0],"d":[0,0,0,0]},{"a":32881,"t":"word","b":[0,0,0,0,0,0,0,0],"d":[0,0,0,0]},{"a":32889,"t":"word","b":[0,0,0,0,0,0,0,0],"d":[0,0,0,0]},{"a":32897,"t":"word","b":[0,0,0,0,0,0,0,0],"d":[0,0,0,0]},{"a":32905,"t":"word","b":[0,0,0,0,0,0,0,0],"d":[0,0,0,0]},{"a":32913,"t":"word","b":[0,0,0,0,0,0,0,0],"d":[0,0,0,0]},{"a":32921,"t":"word","b":[0,0,0,0,0,0],"d":[0,0,0]},{"a":32927,"l":"worm_segment_count","c":"The number of worm segment records, 4. Nothing writes it; `$A3ED` and `$AB1F` copy it to the loop counter `$80A0` before walking the records at `$7F54`.","t":"byte","b":[4],"x":[41965,43807]},{"a":32928,"l":"segment_loop_counter","c":"The count of worm segments still to process, loaded from `$809F` and counted down to 0 by the two loops over the segment records: the segment update (`$A3F0`, `$A7CA-$A7CE`) and the display-list builder (`$AB22`, `$ADC0-$ADC4`). Six instructions name it.","t":"byte","b":[0],"x":[41968,42954,42958,43810,44480,44484]},{"a":32929,"l":"running_x","c":"A 16-bit running value with three uses. In the head update it is the head's new height (`$9DCC`, `$9DE3`; copied to `$7FFE` at `$9E01`). In the segment update it is the x of the current segment's end relative to the head: it starts from the head's step `$7FF8` (`$A3F6`) and each record's x offset is added in turn (`$A518`), with corrections when a segment is pushed back (`$A73D`, `$A762`). The display-list builder uses it the same way starting from 0 (`$AB10`, `$AB4C`) and reads it for each corner of a segment. 18 instructions name it, 8 writes and 10 reads.","t":"byte","b":[0],"x":[40396,40419,40449,41974,42254,42264,42675,42809,42813,42844,42850,43792,43828,43852,44225,44292,44356,44420]},{"a":32930,"l":"running_x_high","c":"The high byte of `$80A1`, read on its own twice: at `$9DEE` as the whole part of the head's new height, and at `$A79D` to give the probe back the segment's x in whole units after a collision has been resolved.","t":"byte","b":[0],"x":[40430,42909]},{"a":32931,"l":"running_y","c":"The y of the current worm segment's end relative to the head, 16 bits: the segment update starts it from the head's step `$7FFA` (`$A3FC`) and adds each record's y offset (`$A529`), with corrections at `$A70B` and `$A794`; the display-list builder starts it from 0 (`$AB13`, `$ABB2`). 15 instructions name it, 6 writes and 9 reads.","t":"byte","b":[0],"x":[41980,42271,42281,42687,42757,42763,42896,42900,43795,43930,43954,44244,44308,44373,44438]},{"a":32932,"l":"running_y_high","c":"The high byte of `$80A3`, read on its own once, at `$A7A3`, to give the probe back the segment's y in whole units.","t":"byte","b":[0],"x":[42915]},{"a":32933,"l":"running_z","c":"The height of the current worm segment's end, 16 bits: both loops start it from the head's height `$7FFE` (`$A402`, `$AB19`) and add each record's height offset (`$A54C`, `$AC0A`); the segment update also puts back the height it had handed on to the next record when the segment's end is blocked (`$A68E`). 11 instructions name it, 5 writes and 6 reads.","t":"byte","b":[0],"x":[41986,42288,42313,42316,42626,42638,43801,44032,44042,44191,44198]},{"a":32934,"l":"running_z_high","c":"The high byte of `$80A5`, the height in whole units, named on its own five times in the segment update: `$A56F` and `$A670` compare it with what the probe found, `$A588-$A58C` add the amount the segment's end falls or climbs in the current pass, and `$A7A9` gives it back to the probe.","t":"byte","b":[0],"x":[42351,42376,42380,42608,42921]},{"a":32935,"l":"unused_80a7","c":"Two zero bytes with no reference: no instruction names them and none has been seen read or written in play.","t":"byte","b":[0,0]},{"a":32937,"l":"probe_cell_diagonal","c":"The first of four cell addresses, `$80A9`, `$80AB`, `$80AD` and `$80AF`, that the object probe at `$DFB8` collects before it tests a moving object against the board: the 2 by 2 block of cells that the object's footprint can touch. `$80AF` is the cell holding the footprint's far corner, `$80AD` the cell next to that one towards lower x, `$80AB` the cell next to it towards lower y, and this word the cell diagonal to it. A word is 0 where there is no cell. The probe zeroes all four (`$DFBB-$DFC4`), stores the object's own cell in one of them according to which way the footprint overlaps the next cells (`$DFF4`, `$E00A`, `$E026`, `$E038`) and fills the others by following the link words in the cells' headers (`$DFFA`, `$E010`, `$E04A-$E0D1`). Eight instructions name this word.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[57275,57332,57432,57448,57453,57503,57600,57677]},{"a":32939,"l":"probe_cell_low_y","c":"The second of the object probe's four cell addresses: the cell next to `$80AF` towards lower y. It is reached from `$80A9` through that cell's link word 0 (`$E077`) or from `$80AF` through its link word 2 (`$E087`), and tested with the y offset reduced by 1 (`$E0F5`). Nine instructions name it.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[57278,57338,57382,57418,57463,57479,57536,57589,57697]},{"a":32941,"l":"probe_cell_low_x","c":"The third of the object probe's four cell addresses: the cell next to `$80AF` towards lower x. It is reached from `$80AF` through that cell's link word 4 (`$E09A`) or from `$80A9` through its link word 6 (`$E0AC`), and tested with the x offset reduced by 1 (`$E0EA`). Eight instructions name it.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[57281,57354,57437,57498,57516,57521,57578,57716]},{"a":32943,"l":"probe_cell_far","c":"The fourth of the object probe's four cell addresses: the cell that holds the far corner of the object's footprint, tested first (`$E0E0`). When the object has moved, `$E1AC-$E1CA` picks the object's new cell from the four by stepping back from this word's address, 2 bytes for x and 4 for y, and stores it in `$8027`. Eleven instructions name it.","t":"addr","b":[0,0],"oa":0,"o":"$0000","x":[57284,57360,57400,57468,57484,57531,57549,57568,57735,57775]},{"a":32945,"l":"probe_far_cell_offset","c":"Two bytes set together at `$E0D2`: how many cells the far-corner cell `$80AF` lies from the object's own cell, in x (`$80B1`) and in y (`$80B2`), each 0 or 1. The probe loads the pair into BC before each of its four cell tests and before each test against another object (nine reads, `$E0E3-$E199`), reducing one or both by 1 for the other three cells. Ten instructions name it.","t":"word","b":[0,0],"d":[0],"x":[57554,57571,57581,57592,57603,57685,57705,57724,57743,57753]},{"a":32947,"l":"fill_scratch","c":"A scratch byte of the trapezoid fill at `$90F9`. It holds the first row's number (`$921C`), from which `$9372` works out the address in the frame buffer; it keeps a copy of `$80B4` while a one-row shape is passed to the rectangle fill (`$9256`, `$9261`); and it holds the row count while the first row is drawn (`$9392`, `$93A1`). Seven instructions name it.","t":"byte","b":[0],"x":[37404,37449,37462,37473,37746,37778,37793]},{"a":32948,"l":"fill_outline_flag","c":"Tells the fill routines how to treat a shape's first and last rows. With bit 7 set they are drawn solid, which gives the shape an outline; with 0 every row takes the pattern (`$8EE5`, `$8FB1`, `$938B`). The rectangle fill and the trapezoid entry at `$8FF5` store `$81` (`$8E15`, `$900E`), the upright-edge fill at `$9579` stores 0 (`$9592`), the four-cornered fill stores `$81` for the middle one of its three trapezoids, which it draws first, and 0 for the other two (`$98BF`, `$98EE`), and the floor stores 0 (`$EB4C`). 13 instructions name it, 9 writes and 4 reads. The byte after it, `$80B5`, has no reference.","t":"byte","b":[0,0],"x":[36373,36581,36785,36878,37459,37467,37476,37771,38290,38431,39103,39150,60236]},{"a":32950,"l":"face_pattern_y_sides","c":"The first of four pattern words that `$81DB` copies from the table at `$80CB` for each object it draws, 8 bytes chosen by the low two bits of the object's type (`$826D-$8276`). Each word is a pattern byte and a toggle byte, in the form `$80BE` and `$80BF` take. This word is the pattern for the two side faces that join the upper and lower edges of the top and bottom rectangles (`$82B0`, `$82D0`). Type-specific code overrides it: `$84CB` stores `$FFAA`, `$89AF` stores `$AADD`, and `$84AD-$84B8` swaps it with `$80BA` on passes when bit 2 of the frame counter is clear. 11 instructions name it.","t":"word","b":[0,0],"d":[0],"x":[33456,33488,33965,33972,33995,35247,35548,35589,35673,35714]},{"a":32952,"l":"face_pattern_top","c":"The second pattern word: the pattern for the top face, the rectangle that `$828F` fills. Besides the copy from `$80CB`, it is written at `$84CE`, `$8890`, `$89A9` and in code that has not been seen to run (`$875B`, `$8797`), and the ramp drawing code reads it eight times between `$8B25` and `$8DF2`. 18 instructions name it.","t":"word","b":[0,0],"d":[0],"x":[33423,33998,34651,34711,34755,34801,34845,34960,34979,35241,35621,35746,35849,35939,36056,36150,36244,36338]},{"a":32954,"l":"face_pattern_x_sides","c":"The third pattern word: the pattern for the two side faces that join the left and right edges of the top and bottom rectangles (`$82F0`, `$8310`). Written by the copy from `$80CB` and at `$84B8`, `$84D1`, `$889D`, `$8915` and `$89B2`. Eight instructions name it.","t":"word","b":[0,0],"d":[0],"x":[33520,33552,33968,33976,34001,34973,35093,35250]},{"a":32956,"l":"face_pattern_unread","c":"The fourth word of the 8 bytes that `$8276` copies from `$80CB`. No instruction reads it: the copy is its only access, so the last two bytes of each pattern set are never used.","t":"word","b":[0,0],"d":[0]},{"a":32958,"l":"fill_pattern","c":"The pattern byte for the fill routines. Its complement is what a fill writes to the frame buffer on rows of one parity (`$8E30`, `$8F9E`, `$93AB`, `$93CB`), so a set bit here becomes a cleared pixel in a buffer that starts each pass as all `$FF`. Almost every writer stores it together with `$80BF` as one word: the five face routines at `$828F-$8313` copy one of the words at `$80B6-$80BA` here, and other code loads constants such as `$AAAA` (`$8568`), `$FF55` (`$857C`) and `$00FF` (`$EB52`). 44 instructions name it, 36 writes and 8 reads.","t":"byte","b":[0],"x":[33426,33459,33491,33523,33555,33749,34152,34172,34660,34885,34957,34982,35027,35031,35075,35100,35104,35464,35551,35592,35624,35676,35717,35749,35852,35942,36059,36153,36247,36341,36400,36766,37803,37835,47881,48004,48013,48092,48129,48153,48363,53576,53593,53671,53917,60242]},{"a":32959,"l":"fill_pattern_toggle","c":"The byte the fills XOR into the pattern from one row to the next (`$8FA7`, `$8FD8`, `$93B6`, `$93D6`, `$9567`), so that `$FF` alternates a pattern with its complement, and a toggle equal to the pattern leaves every other row untouched. When it is 0 the rectangle fill takes a shorter path that writes the same byte on every row (`$8ECE`). The halt screen complements it for each band it draws (`$D150-$D154`, `$D294-$D298`). 12 instructions name it on its own, 9 reads and 3 writes, besides the word stores through `$80BE`.","t":"byte","b":[0],"x":[36558,36775,36824,37814,37846,38247,53584,53588,53662,53805,53908,53912]},{"a":32960,"l":"unused_80c0","c":"Six zero bytes with no reference: no instruction names them and none has been seen read or written in play.","t":"byte","b":[0,0,0,0,0,0]},{"a":32966,"l":"unread_word_80c6","c":"A word that the draw loop sets to `$0040` at the start of every pass (`$B2F7`) and nothing reads. The image already holds `$0040`. `$40` is the y of the view's centre that `$81DB` adds as a constant, so this may be a left-over setting; what it was for is not established.","t":"word","b":[64,0],"d":[64],"x":[45815]},{"a":32968,"l":"unread_word_80c8","c":"A word that the draw loop sets to `$FFC0` (-`$40`) at the start of every pass (`$B2FD`) and nothing reads; the image already holds that value.","t":"word","b":[192,255],"d":[65472],"x":[45821]},{"a":32970,"l":"unused_80ca","c":"One zero byte between the two unread words and the pattern table, with no reference.","t":"byte","b":[0]},{"a":32971,"l":"face_pattern_sets","c":"Four sets of fill patterns, 8 bytes each, 32 bytes in all. `$81DB` picks a set with the low two bits of the object's type (`$825F-$8270`) and copies it to `$80B6-$80BD`. A set is four pairs of a pattern byte and a toggle byte: the first pair for the two faces drawn by `$82B0` and `$82D0`, the second for the top, the third for the two faces drawn by `$82F0` and `$8310`, and a fourth that is never read. Set 0 is `55 FF`, `AA FF`, `88 AA`, `AA AA`; set 1 is `FF 00`, `CC FF`, `00 00`, `AA FF`; set 2 is `44 EE`, `AA 55`, `AA AA`, `00 00`; set 3 is `EE 55`, `11 55`, `20 22`, `0A 0F`. One instruction names the table, `$826D`.","t":"byte","b":[85,255,170,255,136,170,170,170]},{"a":32979,"t":"byte","b":[255,0,204,255,0,0,170,255]},{"a":32987,"t":"byte","b":[68,238,170,85,170,170,0,0]},{"a":32995,"t":"byte","b":[238,85,17,85,32,34,10,15]},{"a":33003,"l":"scale_extent_for_height","c":"Scales an object's four extent words for one height. A is a height byte: the routine reads the byte at $6300 + A/2, one of the 128 entries of the perspective curve, into B, then passes each of the words at $802B, $802D, $802F and $8031 through the multiply at $811E and stores the results at $8013, $8015, $8017 and $8019. Each word in range comes back multiplied by (128+B)/128, so the greater the height, the further the point is pushed from the view centre. Called twice, both times from $81DB: at $8201 with the base height and at $821E with the top height.","t":"code","b":[38,99],"m":"ld","o":"h,$63","x":[33281,33310]},{"a":33005,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":33006,"t":"code","b":[203,61],"m":"srl","o":"l"},{"a":33008,"t":"code","b":[70],"m":"ld","o":"b,(hl)"},{"a":33009,"t":"code","b":[42,43,128],"m":"ld","oa":32811,"o":"hl,(extent_x1)"},{"a":33012,"t":"code","b":[205,30,129],"m":"call","oa":33054,"o":"scale_coordinate"},{"a":33015,"t":"code","b":[34,19,128],"m":"ld","oa":32787,"o":"(top_rect_x1),hl"},{"a":33018,"t":"code","b":[42,45,128],"m":"ld","oa":32813,"o":"hl,(extent_x2)"},{"a":33021,"t":"code","b":[205,30,129],"m":"call","oa":33054,"o":"scale_coordinate"},{"a":33024,"t":"code","b":[34,21,128],"m":"ld","oa":32789,"o":"(top_rect_x2),hl"},{"a":33027,"t":"code","b":[42,47,128],"m":"ld","oa":32815,"o":"hl,(extent_y1)"},{"a":33030,"t":"code","b":[205,30,129],"m":"call","oa":33054,"o":"scale_coordinate"},{"a":33033,"t":"code","b":[34,23,128],"m":"ld","oa":32791,"o":"(top_rect_y1),hl"},{"a":33036,"t":"code","b":[42,49,128],"m":"ld","oa":32817,"o":"hl,(extent_y2)"},{"a":33039,"t":"code","b":[205,30,129],"m":"call","oa":33054,"o":"scale_coordinate"},{"a":33042,"t":"code","b":[34,25,128],"m":"ld","oa":32793,"o":"(top_rect_y2),hl"},{"a":33045,"t":"code","b":[201],"m":"ret"},{"a":33046,"l":"scale_high_byte","c":"Second entry to the multiply at $811E, for callers whose value is in the high byte of HL: it replaces HL by that byte sign-extended to 16 bits (-128 to 127) and falls into $811E, which multiplies it by (128+B)/128. Called eight times, at $ACE3, $ACF0, $AD23, $AD30, $AD65, $AD72, $ADA5 and $ADB2, all in the loop at $AB29 that builds the type $FA records of the display list. Each call there takes B from the high byte of a word, not from the curve at $6300, and stores the low byte of the result plus $80.","t":"code","b":[108],"m":"ld","o":"l,h","x":[44259,44272,44323,44336,44389,44402,44453,44466]},{"a":33047,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":33049,"t":"code","b":[203,125],"m":"bit","o":"7,l"},{"a":33051,"t":"code","b":[40,1],"m":"jr","oa":33054,"o":"z,scale_coordinate"},{"a":33053,"t":"code","b":[37],"m":"dec","o":"h"},{"a":33054,"l":"scale_coordinate","c":"Multiplies the signed word in HL by (128+B)/128, the magnification for one height, and returns the result in HL. Only values from -192 to 191 are scaled: a positive value whose high byte is not zero or whose low byte is $C0 or more, and a negative value below $FF40, come back unchanged. A value in range is multiplied by twice B with eight shift-and-add steps (C takes a copy of B and is used up, B is kept), 256 times the value is added, and the sum is divided by 256, which drops the fraction. The negative path at $817A negates the value, does the same eight steps and negates the result, so negative results are rounded toward zero as well. The running sum is kept in 16 bits, so when the magnitude times B reaches 32768 one carry is lost and the result is 256 too small in magnitude. That takes a B of 171 or more, which the curve holds for height bytes of $DC and up, and with the values in the curve the shortened result is never below 133, still outside the 256 by 128 view. Six references: the four calls in $80EB, the JR at $811B inside $8116, which also falls through into it, and the call at $858D.","t":"code","b":[72],"m":"ld","o":"c,b","x":[33012,33021,33030,33039,33051,34189]},{"a":33055,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":33056,"t":"code","b":[167],"m":"and","o":"a"},{"a":33057,"t":"code","b":[250,122,129],"m":"jp","oa":33146,"o":"m,$817A"},{"a":33060,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":33061,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":33062,"t":"code","b":[198,64],"m":"add","o":"a,$40"},{"a":33064,"t":"code","b":[216],"m":"ret","o":"c"},{"a":33065,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":33066,"t":"code","b":[175],"m":"xor","o":"a"},{"a":33067,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":33068,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":33069,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":33071,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":33073,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":33075,"t":"code","b":[48,1],"m":"jr","oa":33078,"o":"nc,$8136"},{"a":33077,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33078,"t":"code","b":[203,35],"m":"sla","o":"e","x":[33075]},{"a":33080,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":33082,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":33084,"t":"code","b":[48,1],"m":"jr","oa":33087,"o":"nc,$813F"},{"a":33086,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33087,"t":"code","b":[203,35],"m":"sla","o":"e","x":[33084]},{"a":33089,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":33091,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":33093,"t":"code","b":[48,1],"m":"jr","oa":33096,"o":"nc,$8148"},{"a":33095,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33096,"t":"code","b":[203,35],"m":"sla","o":"e","x":[33093]},{"a":33098,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":33100,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":33102,"t":"code","b":[48,1],"m":"jr","oa":33105,"o":"nc,$8151"},{"a":33104,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33105,"t":"code","b":[203,35],"m":"sla","o":"e","x":[33102]},{"a":33107,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":33109,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":33111,"t":"code","b":[48,1],"m":"jr","oa":33114,"o":"nc,$815A"},{"a":33113,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33114,"t":"code","b":[203,35],"m":"sla","o":"e","x":[33111]},{"a":33116,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":33118,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":33120,"t":"code","b":[48,1],"m":"jr","oa":33123,"o":"nc,$8163"},{"a":33122,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33123,"t":"code","b":[203,35],"m":"sla","o":"e","x":[33120]},{"a":33125,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":33127,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":33129,"t":"code","b":[48,1],"m":"jr","oa":33132,"o":"nc,$816C"},{"a":33131,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33132,"t":"code","b":[203,35],"m":"sla","o":"e","x":[33129]},{"a":33134,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":33136,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":33138,"t":"code","b":[48,1],"m":"jr","oa":33141,"o":"nc,$8175"},{"a":33140,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33141,"t":"code","b":[25],"m":"add","o":"hl,de","x":[33138]},{"a":33142,"t":"code","b":[143],"m":"adc","o":"a,a"},{"a":33143,"t":"code","b":[108],"m":"ld","o":"l,h"},{"a":33144,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":33145,"t":"code","b":[201],"m":"ret"},{"a":33146,"t":"code","b":[60],"m":"inc","o":"a","x":[33057]},{"a":33147,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":33148,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":33149,"t":"code","b":[198,192],"m":"add","o":"a,$C0"},{"a":33151,"t":"code","b":[208],"m":"ret","o":"nc"},{"a":33152,"t":"code","b":[175],"m":"xor","o":"a"},{"a":33153,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":33154,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":33155,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":33156,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":33158,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":33159,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":33160,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":33161,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":33163,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":33165,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":33167,"t":"code","b":[48,1],"m":"jr","oa":33170,"o":"nc,$8192"},{"a":33169,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33170,"t":"code","b":[203,35],"m":"sla","o":"e","x":[33167]},{"a":33172,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":33174,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":33176,"t":"code","b":[48,1],"m":"jr","oa":33179,"o":"nc,$819B"},{"a":33178,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33179,"t":"code","b":[203,35],"m":"sla","o":"e","x":[33176]},{"a":33181,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":33183,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":33185,"t":"code","b":[48,1],"m":"jr","oa":33188,"o":"nc,$81A4"},{"a":33187,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33188,"t":"code","b":[203,35],"m":"sla","o":"e","x":[33185]},{"a":33190,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":33192,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":33194,"t":"code","b":[48,1],"m":"jr","oa":33197,"o":"nc,$81AD"},{"a":33196,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33197,"t":"code","b":[203,35],"m":"sla","o":"e","x":[33194]},{"a":33199,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":33201,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":33203,"t":"code","b":[48,1],"m":"jr","oa":33206,"o":"nc,$81B6"},{"a":33205,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33206,"t":"code","b":[203,35],"m":"sla","o":"e","x":[33203]},{"a":33208,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":33210,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":33212,"t":"code","b":[48,1],"m":"jr","oa":33215,"o":"nc,$81BF"},{"a":33214,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33215,"t":"code","b":[203,35],"m":"sla","o":"e","x":[33212]},{"a":33217,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":33219,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":33221,"t":"code","b":[48,1],"m":"jr","oa":33224,"o":"nc,$81C8"},{"a":33223,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33224,"t":"code","b":[203,35],"m":"sla","o":"e","x":[33221]},{"a":33226,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":33228,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":33230,"t":"code","b":[48,1],"m":"jr","oa":33233,"o":"nc,$81D1"},{"a":33232,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33233,"t":"code","b":[25],"m":"add","o":"hl,de","x":[33230]},{"a":33234,"t":"code","b":[143],"m":"adc","o":"a,a"},{"a":33235,"t":"code","b":[92],"m":"ld","o":"e,h"},{"a":33236,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":33237,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":33240,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":33242,"t":"code","b":[201],"m":"ret"},{"a":33243,"l":"draw_object","c":"Draws one record of the display list. The walker at $B2F4 has copied the record's x1 (+2), x2 (+6), y1 (+4) and y2 (+8) to $802B, $802D, $802F and $8031, signed distances from the view centre, and passes the type (+$0E) in A, the base height (+$0D) in B and the top height (+$0C) in C. The routine stores the type at $804F and makes two copies of the extent: the base copy at $800B (x1), $800D (x2), $800F (y1) and $8011 (y2), scaled for height B by $80EB, or copied unscaled when B is zero or the type is $E5; and the top copy at $8013, $8015, $8017 and $8019, scaled for height C. It adds $0080 to all four x words and $0040 to all four y words, which puts the view centre at pixel (128, 64) of the frame buffer, then copies the eight bytes at $80CB + 8 * (type AND 3) to $80B6-$80BD: the pattern words for the y walls ($80B6), the top ($80B8) and the x walls ($80BA), and a fourth word at $80BC that no instruction reads. In each word the low byte is the pattern and the high byte the row toggle. Last it jumps on bits 7 and 6 of the type: both set to $89B8 (boxes and the special types), bit 7 alone to $8ABC (wedges sloping along x), bit 6 alone to $8BC3 (wedges sloping along y) and neither to $8C84 (boxes cut along a diagonal). Called from one place, $B347.","t":"code","b":[197],"m":"push","o":"bc","x":[45895]},{"a":33244,"t":"code","b":[50,79,128],"m":"ld","oa":32847,"o":"(draw_type),a"},{"a":33247,"t":"code","b":[254,229],"m":"cp","o":"$E5"},{"a":33249,"t":"code","b":[40,4],"m":"jr","oa":33255,"o":"z,$81E7"},{"a":33251,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":33252,"t":"code","b":[167],"m":"and","o":"a"},{"a":33253,"t":"code","b":[32,26],"m":"jr","oa":33281,"o":"nz,$8201"},{"a":33255,"t":"code","b":[42,43,128],"m":"ld","oa":32811,"o":"hl,(extent_x1)","x":[33249]},{"a":33258,"t":"code","b":[34,11,128],"m":"ld","oa":32779,"o":"(base_rect_x1),hl"},{"a":33261,"t":"code","b":[42,45,128],"m":"ld","oa":32813,"o":"hl,(extent_x2)"},{"a":33264,"t":"code","b":[34,13,128],"m":"ld","oa":32781,"o":"(base_rect_x2),hl"},{"a":33267,"t":"code","b":[42,47,128],"m":"ld","oa":32815,"o":"hl,(extent_y1)"},{"a":33270,"t":"code","b":[34,15,128],"m":"ld","oa":32783,"o":"(base_rect_y1),hl"},{"a":33273,"t":"code","b":[42,49,128],"m":"ld","oa":32817,"o":"hl,(extent_y2)"},{"a":33276,"t":"code","b":[34,17,128],"m":"ld","oa":32785,"o":"(base_rect_y2),hl"},{"a":33279,"t":"code","b":[24,27],"m":"jr","oa":33308,"o":"$821C"},{"a":33281,"t":"code","b":[205,235,128],"m":"call","oa":33003,"o":"scale_extent_for_height","x":[33253]},{"a":33284,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":33287,"t":"code","b":[34,11,128],"m":"ld","oa":32779,"o":"(base_rect_x1),hl"},{"a":33290,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":33293,"t":"code","b":[34,13,128],"m":"ld","oa":32781,"o":"(base_rect_x2),hl"},{"a":33296,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":33299,"t":"code","b":[34,15,128],"m":"ld","oa":32783,"o":"(base_rect_y1),hl"},{"a":33302,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":33305,"t":"code","b":[34,17,128],"m":"ld","oa":32785,"o":"(base_rect_y2),hl"},{"a":33308,"t":"code","b":[193],"m":"pop","o":"bc","x":[33279]},{"a":33309,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":33310,"t":"code","b":[205,235,128],"m":"call","oa":33003,"o":"scale_extent_for_height"},{"a":33313,"t":"code","b":[17,128,0],"m":"ld","o":"de,$0080"},{"a":33316,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":33319,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33320,"t":"code","b":[34,19,128],"m":"ld","oa":32787,"o":"(top_rect_x1),hl"},{"a":33323,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":33326,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33327,"t":"code","b":[34,21,128],"m":"ld","oa":32789,"o":"(top_rect_x2),hl"},{"a":33330,"t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)"},{"a":33333,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33334,"t":"code","b":[34,11,128],"m":"ld","oa":32779,"o":"(base_rect_x1),hl"},{"a":33337,"t":"code","b":[42,13,128],"m":"ld","oa":32781,"o":"hl,(base_rect_x2)"},{"a":33340,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33341,"t":"code","b":[34,13,128],"m":"ld","oa":32781,"o":"(base_rect_x2),hl"},{"a":33344,"t":"code","b":[17,64,0],"m":"ld","o":"de,$0040"},{"a":33347,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":33350,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33351,"t":"code","b":[34,23,128],"m":"ld","oa":32791,"o":"(top_rect_y1),hl"},{"a":33354,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":33357,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33358,"t":"code","b":[34,25,128],"m":"ld","oa":32793,"o":"(top_rect_y2),hl"},{"a":33361,"t":"code","b":[42,15,128],"m":"ld","oa":32783,"o":"hl,(base_rect_y1)"},{"a":33364,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33365,"t":"code","b":[34,15,128],"m":"ld","oa":32783,"o":"(base_rect_y1),hl"},{"a":33368,"t":"code","b":[42,17,128],"m":"ld","oa":32785,"o":"hl,(base_rect_y2)"},{"a":33371,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33372,"t":"code","b":[34,17,128],"m":"ld","oa":32785,"o":"(base_rect_y2),hl"},{"a":33375,"t":"code","b":[58,79,128],"m":"ld","oa":32847,"o":"a,(draw_type)"},{"a":33378,"t":"code","b":[230,3],"m":"and","o":"$03"},{"a":33380,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":33382,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":33384,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":33386,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":33387,"t":"code","b":[6,0],"m":"ld","o":"b,$00"},{"a":33389,"t":"code","b":[33,203,128],"m":"ld","o":"hl,$80CB"},{"a":33392,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":33393,"t":"code","b":[14,8],"m":"ld","o":"c,$08"},{"a":33395,"t":"code","b":[17,182,128],"m":"ld","o":"de,$80B6"},{"a":33398,"t":"code","b":[237,176],"m":"ldir"},{"a":33400,"t":"code","b":[58,79,128],"m":"ld","oa":32847,"o":"a,(draw_type)"},{"a":33403,"t":"code","b":[230,192],"m":"and","o":"$C0"},{"a":33405,"t":"code","b":[254,192],"m":"cp","o":"$C0"},{"a":33407,"t":"code","b":[202,184,137],"m":"jp","oa":35256,"o":"z,dispatch_special_types"},{"a":33410,"t":"code","b":[254,128],"m":"cp","o":"$80"},{"a":33412,"t":"code","b":[202,188,138],"m":"jp","oa":35516,"o":"z,draw_wedge_x"},{"a":33415,"t":"code","b":[254,64],"m":"cp","o":"$40"},{"a":33417,"t":"code","b":[202,195,139],"m":"jp","oa":35779,"o":"z,draw_wedge_y"},{"a":33420,"t":"code","b":[195,132,140],"m":"jp","oa":35972,"o":"draw_half_box"},{"a":33423,"l":"draw_top_face","c":"Draws an object's top face: the rectangle from (x1, y1) to (x2, y2) of the top copy at $8013-$8019, outlined and filled with the pattern word at $80B8. It copies $80B8 to the working pattern at $80BE, puts x1, x2, y1 and y2 in $801B, $801F, $801D and $8025 and jumps to the rectangle routine at $8E13. Ten callers: $84E0, $84E4, $875E and the seven face lists of $8A12 at $8A25, $8A36, $8A47, $8A51, $8A62, $8A6C and $8A76.","t":"code","b":[42,184,128],"m":"ld","oa":32952,"o":"hl,(face_pattern_top)","x":[34016,34020,34654,35365,35382,35399,35409,35426,35436,35446]},{"a":33426,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":33429,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":33432,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":33435,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":33438,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":33441,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":33444,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":33447,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":33450,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":33453,"t":"code","b":[195,19,142],"m":"jp","oa":36371,"o":"draw_rectangle"},{"a":33456,"l":"draw_wall_y1","c":"Draws the side wall that hangs from the y1 edge of an object, in the pattern word at $80B6. The wall is the trapezoid between two horizontal edges: the base copy's, at y1 ($800F) from x1 ($800B) to x2 ($800D), and the top copy's, at $8017 from $8013 to $8015. Both edges are passed in the two register sets to $8FF5, which returns without drawing unless the first edge is higher on screen than the second. So this wall shows only when the top copy's y1 lies below the base copy's, which is when that edge is below the view centre and the wall faces the viewer. Twelve callers: $84BB, $84D4, $84E7, $874C, $8A28, $8A39, $8A54, $8A65, $8A79, $8BD2, $8D5E and $8DB7.","t":"code","b":[42,182,128],"m":"ld","oa":32950,"o":"hl,(face_pattern_y_sides)","x":[33979,34004,34023,34636,35368,35385,35412,35429,35449,35794,36190,36279]},{"a":33459,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":33462,"t":"code","b":[237,91,11,128],"m":"ld","oa":32779,"o":"de,(base_rect_x1)"},{"a":33466,"t":"code","b":[42,15,128],"m":"ld","oa":32783,"o":"hl,(base_rect_y1)"},{"a":33469,"t":"code","b":[237,75,13,128],"m":"ld","oa":32781,"o":"bc,(base_rect_x2)"},{"a":33473,"t":"code","b":[217],"m":"exx"},{"a":33474,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":33478,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":33481,"t":"code","b":[237,75,21,128],"m":"ld","oa":32789,"o":"bc,(top_rect_x2)"},{"a":33485,"t":"code","b":[195,245,143],"m":"jp","oa":36853,"o":"fill_outlined_trapezoid_regs"},{"a":33488,"l":"draw_wall_y2","c":"Draws the side wall that hangs from the y2 edge of an object, in the pattern word at $80B6: the trapezoid between the top copy's edge at y2 ($8019, from $8013 to $8015) and the base copy's ($8011, from $800B to $800D), through $8FF5. Here the top edge is passed first, so the wall is drawn only when the top copy's y2 is higher on screen than the base copy's, which is when the edge is above the view centre. Eleven callers: $84BE, $84D7, $84EA, $874F, $8A2B, $8A3C, $8A68, $8A7C, $8C2C, $8CA2 and $8D00.","t":"code","b":[42,182,128],"m":"ld","oa":32950,"o":"hl,(face_pattern_y_sides)","x":[33982,34007,34026,34639,35371,35388,35432,35452,35884,36002,36096]},{"a":33491,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":33494,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":33498,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":33501,"t":"code","b":[237,75,21,128],"m":"ld","oa":32789,"o":"bc,(top_rect_x2)"},{"a":33505,"t":"code","b":[217],"m":"exx"},{"a":33506,"t":"code","b":[237,91,11,128],"m":"ld","oa":32779,"o":"de,(base_rect_x1)"},{"a":33510,"t":"code","b":[42,17,128],"m":"ld","oa":32785,"o":"hl,(base_rect_y2)"},{"a":33513,"t":"code","b":[237,75,13,128],"m":"ld","oa":32781,"o":"bc,(base_rect_x2)"},{"a":33517,"t":"code","b":[195,245,143],"m":"jp","oa":36853,"o":"fill_outlined_trapezoid_regs"},{"a":33520,"l":"draw_wall_x1","c":"Draws the side wall that hangs from the x1 edge of an object, in the pattern word at $80BA. The wall is the trapezoid between two vertical edges: the base copy's, at x1 ($800B) from y1 ($800F) to y2 ($8011), and the top copy's, at $8013 from $8017 to $8019. They go in the two register sets to $9579, which returns without drawing unless the first edge is left of the second, so the wall shows only when the top copy's x1 is right of the base copy's: the edge is right of the view centre. Twelve callers: $84C4, $84DD, $84F0, $8755, $88A0, $8A3F, $8A57, $8A72, $8A7F, $8AD0, $8C9D and $8D59.","t":"code","b":[42,186,128],"m":"ld","oa":32954,"o":"hl,(face_pattern_x_sides)","x":[33988,34013,34032,34645,34976,35391,35415,35442,35455,35536,35997,36185]},{"a":33523,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":33526,"t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)"},{"a":33529,"t":"code","b":[237,91,15,128],"m":"ld","oa":32783,"o":"de,(base_rect_y1)"},{"a":33533,"t":"code","b":[237,75,17,128],"m":"ld","oa":32785,"o":"bc,(base_rect_y2)"},{"a":33537,"t":"code","b":[217],"m":"exx"},{"a":33538,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":33541,"t":"code","b":[237,91,23,128],"m":"ld","oa":32791,"o":"de,(top_rect_y1)"},{"a":33545,"t":"code","b":[237,75,25,128],"m":"ld","oa":32793,"o":"bc,(top_rect_y2)"},{"a":33549,"t":"code","b":[195,121,149],"m":"jp","oa":38265,"o":"fill_upright_quad_regs"},{"a":33552,"l":"draw_wall_x2","c":"Draws the side wall that hangs from the x2 edge of an object, in the pattern word at $80BA: the trapezoid between the top copy's vertical edge at x2 ($8015, from $8017 to $8019) and the base copy's ($800D, from $800F to $8011), through $9579. The top edge is passed first, so the wall is drawn only when the top copy's x2 is left of the base copy's, which is when the edge is left of the view centre. Twelve callers: $84C1, $84DA, $84ED, $8752, $8918, $8A2E, $8A5A, $8A6F, $8A82, $8B4D, $8CFB and $8DBC.","t":"code","b":[42,186,128],"m":"ld","oa":32954,"o":"hl,(face_pattern_x_sides)","x":[33985,34010,34029,34642,35096,35374,35418,35439,35458,35661,36091,36284]},{"a":33555,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":33558,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":33561,"t":"code","b":[237,91,23,128],"m":"ld","oa":32791,"o":"de,(top_rect_y1)"},{"a":33565,"t":"code","b":[237,75,25,128],"m":"ld","oa":32793,"o":"bc,(top_rect_y2)"},{"a":33569,"t":"code","b":[217],"m":"exx"},{"a":33570,"t":"code","b":[42,13,128],"m":"ld","oa":32781,"o":"hl,(base_rect_x2)"},{"a":33573,"t":"code","b":[237,91,15,128],"m":"ld","oa":32783,"o":"de,(base_rect_y1)"},{"a":33577,"t":"code","b":[237,75,17,128],"m":"ld","oa":32785,"o":"bc,(base_rect_y2)"},{"a":33581,"t":"code","b":[195,121,149],"m":"jp","oa":38265,"o":"fill_upright_quad_regs"},{"a":33584,"l":"unused_empty_routine","c":"Two RET instructions. The first is a routine that does nothing; the only CALLs to it are at $83D8 and $8AB8, both inside routines that nothing reaches, and the address occurs nowhere else in the image. The RET at $8331 has no reference of any kind.","t":"code","b":[201],"m":"ret","x":[33752,35512]},{"a":33585,"t":"code","b":[201],"m":"ret"},{"a":33586,"l":"unused_extent_save","c":"Four words of storage between routines. The unreached routine at $833A saves the top copy's x1, x2 and y1 at $8332, $8334 and $8336 and reads them back from $83C1 on; $8338 has no reference. Nothing else in the image names these addresses, and all eight bytes are zero in the loaded image.","t":"word","b":[0,0,0,0,0,0,0,0],"d":[0,0,0,0],"x":[33597,33729]},{"a":33594,"l":"unused_tapered_box","c":"A drawing routine that nothing reaches: no instruction and no word in the image refers to $833A, and the bytes before it are a RET and the save area at $8332. It saves the top copy's x1, x2 and y1 at $8332-$8337, replaces both base x words by their mean and both base y words by their mean so that the base shrinks to its centre point, moves each side of the top copy a quarter of the top's width or depth toward the middle so that the top halves in size, and draws the result through the face-code box routine at $8A12. Then it copies the three saved words to $802B, $802D and $802F, clears $80BE and calls the empty routine at $8330. The top copy itself is not put back. What the routine was for is not established.","t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":33597,"t":"code","b":[34,50,131],"m":"ld","oa":33586,"o":"(unused_extent_save),hl"},{"a":33600,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":33603,"t":"code","b":[34,52,131],"m":"ld","oa":33588,"o":"($8334),hl"},{"a":33606,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":33609,"t":"code","b":[34,54,131],"m":"ld","oa":33590,"o":"($8336),hl"},{"a":33612,"t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)"},{"a":33615,"t":"code","b":[237,91,13,128],"m":"ld","oa":32781,"o":"de,(base_rect_x2)"},{"a":33619,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33620,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":33622,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":33624,"t":"code","b":[34,11,128],"m":"ld","oa":32779,"o":"(base_rect_x1),hl"},{"a":33627,"t":"code","b":[34,13,128],"m":"ld","oa":32781,"o":"(base_rect_x2),hl"},{"a":33630,"t":"code","b":[42,15,128],"m":"ld","oa":32783,"o":"hl,(base_rect_y1)"},{"a":33633,"t":"code","b":[237,91,17,128],"m":"ld","oa":32785,"o":"de,(base_rect_y2)"},{"a":33637,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33638,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":33640,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":33642,"t":"code","b":[34,15,128],"m":"ld","oa":32783,"o":"(base_rect_y1),hl"},{"a":33645,"t":"code","b":[34,17,128],"m":"ld","oa":32785,"o":"(base_rect_y2),hl"},{"a":33648,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":33651,"t":"code","b":[237,91,21,128],"m":"ld","oa":32789,"o":"de,(top_rect_x2)"},{"a":33655,"t":"code","b":[77],"m":"ld","o":"c,l"},{"a":33656,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":33657,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33658,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":33660,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":33662,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":33663,"t":"code","b":[167],"m":"and","o":"a"},{"a":33664,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":33666,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":33667,"t":"code","b":[203,58],"m":"srl","o":"d"},{"a":33669,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":33671,"t":"code","b":[203,58],"m":"srl","o":"d"},{"a":33673,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":33675,"t":"code","b":[229],"m":"push","o":"hl"},{"a":33676,"t":"code","b":[167],"m":"and","o":"a"},{"a":33677,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":33679,"t":"code","b":[34,19,128],"m":"ld","oa":32787,"o":"(top_rect_x1),hl"},{"a":33682,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":33683,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33684,"t":"code","b":[34,21,128],"m":"ld","oa":32789,"o":"(top_rect_x2),hl"},{"a":33687,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":33690,"t":"code","b":[237,91,25,128],"m":"ld","oa":32793,"o":"de,(top_rect_y2)"},{"a":33694,"t":"code","b":[77],"m":"ld","o":"c,l"},{"a":33695,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":33696,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33697,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":33699,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":33701,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":33702,"t":"code","b":[167],"m":"and","o":"a"},{"a":33703,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":33705,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":33706,"t":"code","b":[203,58],"m":"srl","o":"d"},{"a":33708,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":33710,"t":"code","b":[203,58],"m":"srl","o":"d"},{"a":33712,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":33714,"t":"code","b":[229],"m":"push","o":"hl"},{"a":33715,"t":"code","b":[167],"m":"and","o":"a"},{"a":33716,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":33718,"t":"code","b":[34,23,128],"m":"ld","oa":32791,"o":"(top_rect_y1),hl"},{"a":33721,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":33722,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33723,"t":"code","b":[34,25,128],"m":"ld","oa":32793,"o":"(top_rect_y2),hl"},{"a":33726,"t":"code","b":[205,18,138],"m":"call","oa":35346,"o":"draw_box_by_face_code"},{"a":33729,"t":"code","b":[42,50,131],"m":"ld","oa":33586,"o":"hl,(unused_extent_save)"},{"a":33732,"t":"code","b":[34,43,128],"m":"ld","oa":32811,"o":"(extent_x1),hl"},{"a":33735,"t":"code","b":[42,52,131],"m":"ld","oa":33588,"o":"hl,($8334)"},{"a":33738,"t":"code","b":[34,45,128],"m":"ld","oa":32813,"o":"(extent_x2),hl"},{"a":33741,"t":"code","b":[42,54,131],"m":"ld","oa":33590,"o":"hl,($8336)"},{"a":33744,"t":"code","b":[34,47,128],"m":"ld","oa":32815,"o":"(extent_y1),hl"},{"a":33747,"t":"code","b":[62,0],"m":"ld","o":"a,$00"},{"a":33749,"t":"code","b":[50,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),a"},{"a":33752,"t":"code","b":[205,48,131],"m":"call","oa":33584,"o":"unused_empty_routine"},{"a":33755,"t":"code","b":[201],"m":"ret"},{"a":33756,"l":"draw_sparky","c":"Draws an object of type $F1 as one sprite whose size follows the object's size on screen. Its corner is the mean of the base and top copies' x1 ($800B, $8013) and the mean of their y1 ($800F, $8017); its size is the low byte of the mean x2 less the mean x1. The routine jumps to $B797 with x in DE, y in HL and the size in B; that picks a sprite address from the table at $BF27, whose sprites are spiky bursts of growing size, and draws it. Reached only by the jump at $89D3.","t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)","x":[35283]},{"a":33759,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":33763,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33764,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":33766,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":33768,"t":"code","b":[229],"m":"push","o":"hl"},{"a":33769,"t":"code","b":[42,13,128],"m":"ld","oa":32781,"o":"hl,(base_rect_x2)"},{"a":33772,"t":"code","b":[237,91,21,128],"m":"ld","oa":32789,"o":"de,(top_rect_x2)"},{"a":33776,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33777,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":33779,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":33781,"t":"code","b":[209],"m":"pop","o":"de"},{"a":33782,"t":"code","b":[167],"m":"and","o":"a"},{"a":33783,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":33785,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":33786,"t":"code","b":[42,15,128],"m":"ld","oa":32783,"o":"hl,(base_rect_y1)"},{"a":33789,"t":"code","b":[237,75,23,128],"m":"ld","oa":32791,"o":"bc,(top_rect_y1)"},{"a":33793,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":33794,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":33796,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":33798,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":33799,"t":"code","b":[195,151,183],"m":"jp","oa":46999,"o":"plot_spark"},{"a":33802,"l":"draw_crawly","c":"Sets up an object of type $F3 and passes it to the figure routine at $B36A. It copies the base copy's x1, x2 and y1 to $801B, $801F and $801D, takes the list record's address from $804B, follows the pointer at +$0A to the entity record, and copies entity bytes +$0E, +$0F, +$10 and +$11 to $8023, $8024, $8025 and $8026 and byte +$08 to $8021. If entity byte +$12 is zero or positive it jumps straight to $B36A. If it is negative, with n its magnitude, the figure is first made smaller and turned: n/4 is added to x1 and to y1 and subtracted from x2 (one more is subtracted when the addition to x1 carries, because the SBC at $8473 takes that carry), and (n AND 3) * 64 is added to the byte at $8023, which $B36A passes to the lookup at $A8C4 as an angle of 256 to the turn. $B36A takes the figure's size from the low byte of x2 - x1. Reached only by the jump at $89CE.","t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)","x":[35278]},{"a":33805,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":33808,"t":"code","b":[42,13,128],"m":"ld","oa":32781,"o":"hl,(base_rect_x2)"},{"a":33811,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":33814,"t":"code","b":[42,15,128],"m":"ld","oa":32783,"o":"hl,(base_rect_y1)"},{"a":33817,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":33820,"t":"code","b":[221,42,75,128],"m":"ld","oa":32843,"o":"ix,(draw_entry)"},{"a":33824,"t":"code","b":[221,110,10],"m":"ld","o":"l,(ix+$0A)"},{"a":33827,"t":"code","b":[221,102,11],"m":"ld","o":"h,(ix+$0B)"},{"a":33830,"t":"code","b":[229],"m":"push","o":"hl"},{"a":33831,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":33833,"t":"code","b":[221,126,14],"m":"ld","o":"a,(ix+$0E)"},{"a":33836,"t":"code","b":[50,35,128],"m":"ld","oa":32803,"o":"(shape_x2),a"},{"a":33839,"t":"code","b":[221,126,15],"m":"ld","o":"a,(ix+$0F)"},{"a":33842,"t":"code","b":[50,36,128],"m":"ld","oa":32804,"o":"(shape_x2_high),a"},{"a":33845,"t":"code","b":[221,126,16],"m":"ld","o":"a,(ix+$10)"},{"a":33848,"t":"code","b":[50,37,128],"m":"ld","oa":32805,"o":"(shape_y2),a"},{"a":33851,"t":"code","b":[221,126,17],"m":"ld","o":"a,(ix+$11)"},{"a":33854,"t":"code","b":[50,38,128],"m":"ld","oa":32806,"o":"(shape_y2_high),a"},{"a":33857,"t":"code","b":[221,126,8],"m":"ld","o":"a,(ix+$08)"},{"a":33860,"t":"code","b":[50,33,128],"m":"ld","oa":32801,"o":"(shape_y1),a"},{"a":33863,"t":"code","b":[221,126,18],"m":"ld","o":"a,(ix+$12)"},{"a":33866,"t":"code","b":[167],"m":"and","o":"a"},{"a":33867,"t":"code","b":[242,106,179],"m":"jp","oa":45930,"o":"p,draw_legged_creature"},{"a":33870,"t":"code","b":[237,68],"m":"neg"},{"a":33872,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":33873,"t":"code","b":[30,0],"m":"ld","o":"e,$00"},{"a":33875,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":33877,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":33879,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":33881,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":33883,"t":"code","b":[58,35,128],"m":"ld","oa":32803,"o":"a,(shape_x2)"},{"a":33886,"t":"code","b":[131],"m":"add","o":"a,e"},{"a":33887,"t":"code","b":[50,35,128],"m":"ld","oa":32803,"o":"(shape_x2),a"},{"a":33890,"t":"code","b":[90],"m":"ld","o":"e,d"},{"a":33891,"t":"code","b":[203,59],"m":"srl","o":"e"},{"a":33893,"t":"code","b":[203,59],"m":"srl","o":"e"},{"a":33895,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":33897,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":33900,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33901,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":33904,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":33907,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":33909,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":33912,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":33915,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33916,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":33919,"t":"code","b":[195,106,179],"m":"jp","oa":45930,"o":"draw_legged_creature"},{"a":33922,"l":"draw_type_e1_pyramid","c":"Draws an object of type $E1 as a pyramid. Both x words of the top copy are replaced by their mean and both y words by their mean, so the top shrinks to its centre point and the four walls become triangles that meet there. When bit 2 of the frame counter's low byte ($8059) is clear, the wall pattern words at $80B6 and $80BA are exchanged first, so the two pairs of faces trade patterns every four frames. The walls are then drawn in the order y1, y2, x2, x1 ($82B0, $82D0, $8310, $82F0); there is no top face. Reached only by the jump at $89E2. One board record has this type.","t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)","x":[35298]},{"a":33925,"t":"code","b":[237,91,21,128],"m":"ld","oa":32789,"o":"de,(top_rect_x2)"},{"a":33929,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33930,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":33932,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":33934,"t":"code","b":[34,19,128],"m":"ld","oa":32787,"o":"(top_rect_x1),hl"},{"a":33937,"t":"code","b":[34,21,128],"m":"ld","oa":32789,"o":"(top_rect_x2),hl"},{"a":33940,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":33943,"t":"code","b":[237,91,25,128],"m":"ld","oa":32793,"o":"de,(top_rect_y2)"},{"a":33947,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":33948,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":33950,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":33952,"t":"code","b":[34,23,128],"m":"ld","oa":32791,"o":"(top_rect_y1),hl"},{"a":33955,"t":"code","b":[34,25,128],"m":"ld","oa":32793,"o":"(top_rect_y2),hl"},{"a":33958,"t":"code","b":[58,89,128],"m":"ld","oa":32857,"o":"a,(frame_counter)"},{"a":33961,"t":"code","b":[203,87],"m":"bit","o":"2,a"},{"a":33963,"t":"code","b":[32,14],"m":"jr","oa":33979,"o":"nz,$84BB"},{"a":33965,"t":"code","b":[42,182,128],"m":"ld","oa":32950,"o":"hl,(face_pattern_y_sides)"},{"a":33968,"t":"code","b":[237,91,186,128],"m":"ld","oa":32954,"o":"de,(face_pattern_x_sides)"},{"a":33972,"t":"code","b":[237,83,182,128],"m":"ld","oa":32950,"o":"(face_pattern_y_sides),de"},{"a":33976,"t":"code","b":[34,186,128],"m":"ld","oa":32954,"o":"(face_pattern_x_sides),hl"},{"a":33979,"t":"code","b":[205,176,130],"m":"call","oa":33456,"o":"draw_wall_y1","x":[33963]},{"a":33982,"t":"code","b":[205,208,130],"m":"call","oa":33488,"o":"draw_wall_y2"},{"a":33985,"t":"code","b":[205,16,131],"m":"call","oa":33552,"o":"draw_wall_x2"},{"a":33988,"t":"code","b":[205,240,130],"m":"call","oa":33520,"o":"draw_wall_x1"},{"a":33991,"t":"code","b":[201],"m":"ret"},{"a":33992,"l":"draw_types_e8_ef_halftone_box","c":"Draws an object of type $E8 to $EF as a box with every face in the same half-tone. It sets all three pattern words, $80B6, $80B8 and $80BA, to $FFAA (pattern byte $AA with a row toggle of $FF, a one-pixel chequer), then draws the y1, y2, x2 and x1 walls and the top face last. Reached only by the jump at $8A0F, which follows the test (type AND $F8) = $E8. Thirty-six board records have these types.","t":"code","b":[33,170,255],"m":"ld","o":"hl,$FFAA","x":[35343]},{"a":33995,"t":"code","b":[34,182,128],"m":"ld","oa":32950,"o":"(face_pattern_y_sides),hl"},{"a":33998,"t":"code","b":[34,184,128],"m":"ld","oa":32952,"o":"(face_pattern_top),hl"},{"a":34001,"t":"code","b":[34,186,128],"m":"ld","oa":32954,"o":"(face_pattern_x_sides),hl"},{"a":34004,"t":"code","b":[205,176,130],"m":"call","oa":33456,"o":"draw_wall_y1"},{"a":34007,"t":"code","b":[205,208,130],"m":"call","oa":33488,"o":"draw_wall_y2"},{"a":34010,"t":"code","b":[205,16,131],"m":"call","oa":33552,"o":"draw_wall_x2"},{"a":34013,"t":"code","b":[205,240,130],"m":"call","oa":33520,"o":"draw_wall_x1"},{"a":34016,"t":"code","b":[205,143,130],"m":"call","oa":33423,"o":"draw_top_face"},{"a":34019,"t":"code","b":[201],"m":"ret"},{"a":34020,"l":"draw_type_e0_box_with_readout","c":"Draws an object of type $E0: a box with all five faces (top, then the y1, y2, x2 and x1 walls) and, on the middle of its top, the 48 by 16 pixel picture that $BCF5 draws from the two 24-pixel halves at $CC0B and $CC6B. The picture's corner is the mean of the top copy's x1 and x2 less $18, in DE, and the mean of its y1 and y2 less 8, in HL. In play the picture shows three seven-segment digits. Reached only by the jump at $89DD. Six board records have this type.","t":"code","b":[205,143,130],"m":"call","oa":33423,"o":"draw_top_face","x":[35293]},{"a":34023,"t":"code","b":[205,176,130],"m":"call","oa":33456,"o":"draw_wall_y1"},{"a":34026,"t":"code","b":[205,208,130],"m":"call","oa":33488,"o":"draw_wall_y2"},{"a":34029,"t":"code","b":[205,16,131],"m":"call","oa":33552,"o":"draw_wall_x2"},{"a":34032,"t":"code","b":[205,240,130],"m":"call","oa":33520,"o":"draw_wall_x1"},{"a":34035,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":34038,"t":"code","b":[237,91,21,128],"m":"ld","oa":32789,"o":"de,(top_rect_x2)"},{"a":34042,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":34043,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34045,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34047,"t":"code","b":[17,24,0],"m":"ld","o":"de,$0018"},{"a":34050,"t":"code","b":[167],"m":"and","o":"a"},{"a":34051,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":34053,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":34054,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":34057,"t":"code","b":[237,75,25,128],"m":"ld","oa":32793,"o":"bc,(top_rect_y2)"},{"a":34061,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34062,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34064,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34066,"t":"code","b":[1,8,0],"m":"ld","o":"bc,$0008"},{"a":34069,"t":"code","b":[167],"m":"and","o":"a"},{"a":34070,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":34072,"t":"code","b":[205,245,188],"m":"call","oa":48373,"o":"draw_counter_display"},{"a":34075,"t":"code","b":[201],"m":"ret"},{"a":34076,"l":"draw_worm_section","c":"Draws an object of type $FA, the type the list builder gives at $AB2F to the records it makes from the 16-byte entries of the table at $7F54. It makes four of them, the count held at $809F, and together they draw the worm's body. The record's pointer (+$0A) addresses one entry, and the section is a quadrilateral through four points held as (x, y) byte pairs: the pair at -$04, which belongs to the previous entry, this entry's pairs at +$0C and +$08, and the pair at -$08, again the previous entry's, with $40 taken from each y. They are written to $801B-$8029 and $A7D5 fills the shape. When entry byte +$06 is zero the fill is the pattern word $AAAA and nothing more is drawn. Otherwise the fill is $FF55 and a mottled disc is drawn over the middle of the section: its size is 10 times (128+B)/128, worked out by $811E with B taken from the curve at $6300 at an index of half of entry byte +$07, its corner is the mean of the four points less half the size, and $B7B6 draws it from the sized sprites listed at $BF59. Reached only by the jump at $89C4.","t":"code","b":[221,42,75,128],"m":"ld","oa":32843,"o":"ix,(draw_entry)","x":[35268]},{"a":34080,"t":"code","b":[221,110,10],"m":"ld","o":"l,(ix+$0A)"},{"a":34083,"t":"code","b":[221,102,11],"m":"ld","o":"h,(ix+$0B)"},{"a":34086,"t":"code","b":[229],"m":"push","o":"hl"},{"a":34087,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":34089,"t":"code","b":[175],"m":"xor","o":"a"},{"a":34090,"t":"code","b":[1,192,255],"m":"ld","o":"bc,$FFC0"},{"a":34093,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":34094,"t":"code","b":[221,110,252],"m":"ld","o":"l,(ix-$04)"},{"a":34097,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":34100,"t":"code","b":[221,110,253],"m":"ld","o":"l,(ix-$03)"},{"a":34103,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34104,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":34107,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":34108,"t":"code","b":[221,110,12],"m":"ld","o":"l,(ix+$0C)"},{"a":34111,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":34114,"t":"code","b":[221,110,13],"m":"ld","o":"l,(ix+$0D)"},{"a":34117,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34118,"t":"code","b":[34,33,128],"m":"ld","oa":32801,"o":"(shape_y1),hl"},{"a":34121,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":34122,"t":"code","b":[221,110,8],"m":"ld","o":"l,(ix+$08)"},{"a":34125,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":34128,"t":"code","b":[221,110,9],"m":"ld","o":"l,(ix+$09)"},{"a":34131,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34132,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":34135,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":34136,"t":"code","b":[221,110,248],"m":"ld","o":"l,(ix-$08)"},{"a":34139,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":34142,"t":"code","b":[221,110,249],"m":"ld","o":"l,(ix-$07)"},{"a":34145,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34146,"t":"code","b":[34,41,128],"m":"ld","oa":32809,"o":"(shape_y3),hl"},{"a":34149,"t":"code","b":[33,170,170],"m":"ld","o":"hl,$AAAA"},{"a":34152,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":34155,"t":"code","b":[221,78,6],"m":"ld","o":"c,(ix+$06)"},{"a":34158,"t":"code","b":[221,70,7],"m":"ld","o":"b,(ix+$07)"},{"a":34161,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":34162,"t":"code","b":[167],"m":"and","o":"a"},{"a":34163,"t":"code","b":[32,4],"m":"jr","oa":34169,"o":"nz,$8579"},{"a":34165,"t":"code","b":[205,213,167],"m":"call","oa":42965,"o":"order_quad_corners"},{"a":34168,"t":"code","b":[201],"m":"ret"},{"a":34169,"t":"code","b":[33,85,255],"m":"ld","o":"hl,$FF55","x":[34163]},{"a":34172,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":34175,"t":"code","b":[197],"m":"push","o":"bc"},{"a":34176,"t":"code","b":[205,213,167],"m":"call","oa":42965,"o":"order_quad_corners"},{"a":34179,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":34180,"t":"code","b":[38,99],"m":"ld","o":"h,$63"},{"a":34182,"t":"code","b":[104],"m":"ld","o":"l,b"},{"a":34183,"t":"code","b":[203,61],"m":"srl","o":"l"},{"a":34185,"t":"code","b":[70],"m":"ld","o":"b,(hl)"},{"a":34186,"t":"code","b":[33,10,0],"m":"ld","o":"hl,$000A"},{"a":34189,"t":"code","b":[205,30,129],"m":"call","oa":33054,"o":"scale_coordinate"},{"a":34192,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":34193,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":34196,"t":"code","b":[237,75,31,128],"m":"ld","oa":32799,"o":"bc,(shape_x1)"},{"a":34200,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34201,"t":"code","b":[237,75,35,128],"m":"ld","oa":32803,"o":"bc,(shape_x2)"},{"a":34205,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34206,"t":"code","b":[237,75,39,128],"m":"ld","oa":32807,"o":"bc,(shape_x3)"},{"a":34210,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34211,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34213,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34215,"t":"code","b":[167],"m":"and","o":"a"},{"a":34216,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":34218,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34220,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34222,"t":"code","b":[229],"m":"push","o":"hl"},{"a":34223,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":34226,"t":"code","b":[237,75,33,128],"m":"ld","oa":32801,"o":"bc,(shape_y1)"},{"a":34230,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34231,"t":"code","b":[237,75,37,128],"m":"ld","oa":32805,"o":"bc,(shape_y2)"},{"a":34235,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34236,"t":"code","b":[237,75,41,128],"m":"ld","oa":32809,"o":"bc,(shape_y3)"},{"a":34240,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34241,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34243,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34245,"t":"code","b":[167],"m":"and","o":"a"},{"a":34246,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":34248,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34250,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34252,"t":"code","b":[67],"m":"ld","o":"b,e"},{"a":34253,"t":"code","b":[209],"m":"pop","o":"de"},{"a":34254,"t":"code","b":[205,182,183],"m":"call","oa":47030,"o":"plot_disc"},{"a":34257,"t":"code","b":[201],"m":"ret"},{"a":34258,"l":"draw_type_f2_sized_sprite","c":"Draws an object of type $F2 as one sized sprite through $B7B6, with the base copy's x1 ($800B) in DE, its y1 ($800F) in HL and the low byte of its width, x2 - x1, in B. On the way it works out three means of base and top words and overwrites each at once, a leftover with no effect, and the RET at $8609 after the final jump is never reached. Reached only by the jump at $89C9. No record in the board data has type $F2 and the compare at $89C7 is the only instruction with $F2 as an immediate operand, but types are also stored from registers, so whether any object ever has this type is not established.","t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)","x":[35273]},{"a":34261,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":34265,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":34266,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34268,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34270,"t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)"},{"a":34273,"t":"code","b":[229],"m":"push","o":"hl"},{"a":34274,"t":"code","b":[42,13,128],"m":"ld","oa":32781,"o":"hl,(base_rect_x2)"},{"a":34277,"t":"code","b":[237,91,21,128],"m":"ld","oa":32789,"o":"de,(top_rect_x2)"},{"a":34281,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":34282,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34284,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34286,"t":"code","b":[42,13,128],"m":"ld","oa":32781,"o":"hl,(base_rect_x2)"},{"a":34289,"t":"code","b":[209],"m":"pop","o":"de"},{"a":34290,"t":"code","b":[167],"m":"and","o":"a"},{"a":34291,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":34293,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":34294,"t":"code","b":[42,15,128],"m":"ld","oa":32783,"o":"hl,(base_rect_y1)"},{"a":34297,"t":"code","b":[237,75,23,128],"m":"ld","oa":32791,"o":"bc,(top_rect_y1)"},{"a":34301,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34302,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34304,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34306,"t":"code","b":[42,15,128],"m":"ld","oa":32783,"o":"hl,(base_rect_y1)"},{"a":34309,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":34310,"t":"code","b":[195,182,183],"m":"jp","oa":47030,"o":"plot_disc"},{"a":34313,"t":"code","b":[201],"m":"ret"},{"a":34314,"l":"draw_spindle","c":"Draws an object of type $F7 as a 16 by 12 pixel sprite that turns. The picture is one of four at $CB4B, $CB7B, $CBAB and $CBDB, a rounded three-lobed shape in four positions, chosen by the low two bits of the frame counter at $8059, or of the counter negated when bit 0 of the list record's byte +$0C (its top height) is clear, so those objects turn the other way. The sprite's corner is the top copy's x1 and y1 ($8013, $8017) and $B7E3 draws it. Reached only by the jump at $89E7. The list builder lets a board record of type $F7 through only when its sixth byte is $0C ($AFE9); 58 board records are of that kind.","t":"code","b":[221,42,75,128],"m":"ld","oa":32843,"o":"ix,(draw_entry)","x":[35303]},{"a":34318,"t":"code","b":[58,89,128],"m":"ld","oa":32857,"o":"a,(frame_counter)"},{"a":34321,"t":"code","b":[221,203,12,70],"m":"bit","o":"0,(ix+$0C)"},{"a":34325,"t":"code","b":[32,4],"m":"jr","oa":34331,"o":"nz,$861B"},{"a":34327,"t":"code","b":[237,68],"m":"neg"},{"a":34329,"t":"code","b":[230,3],"m":"and","o":"$03"},{"a":34331,"t":"code","b":[79],"m":"ld","o":"c,a","x":[34325]},{"a":34332,"t":"code","b":[175],"m":"xor","o":"a"},{"a":34333,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":34334,"t":"code","b":[203,65],"m":"bit","o":"0,c"},{"a":34336,"t":"code","b":[40,2],"m":"jr","oa":34340,"o":"z,$8624"},{"a":34338,"t":"code","b":[62,48],"m":"ld","o":"a,$30"},{"a":34340,"t":"code","b":[203,73],"m":"bit","o":"1,c","x":[34336]},{"a":34342,"t":"code","b":[40,2],"m":"jr","oa":34346,"o":"z,$862A"},{"a":34344,"t":"code","b":[198,96],"m":"add","o":"a,$60"},{"a":34346,"t":"code","b":[111],"m":"ld","o":"l,a","x":[34342]},{"a":34347,"t":"code","b":[17,75,203],"m":"ld","o":"de,$CB4B"},{"a":34350,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":34351,"t":"code","b":[217],"m":"exx"},{"a":34352,"t":"code","b":[175],"m":"xor","o":"a"},{"a":34353,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":34354,"t":"code","b":[6,12],"m":"ld","o":"b,$0C"},{"a":34356,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":34359,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":34363,"t":"code","b":[205,227,183],"m":"call","oa":47075,"o":"plot_shape"},{"a":34366,"t":"code","b":[201],"m":"ret"},{"a":34367,"l":"draw_type_fb_burst","c":"Draws an object of type $FB as a 16 by 16 pixel sprite with its corner at the top copy's x1 and y1. The byte at +1 of the entity record that the list record points to selects the picture: 9 or more draws nothing, 1 to 8 draws the sprite at $CA6F, a thin scatter of sparks, and 0 draws the one at $CAAF, a fuller burst. Reached only by the jump at $89F1.","t":"code","b":[221,42,75,128],"m":"ld","oa":32843,"o":"ix,(draw_entry)","x":[35313]},{"a":34371,"t":"code","b":[221,110,10],"m":"ld","o":"l,(ix+$0A)"},{"a":34374,"t":"code","b":[221,102,11],"m":"ld","o":"h,(ix+$0B)"},{"a":34377,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":34378,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":34379,"t":"code","b":[254,9],"m":"cp","o":"$09"},{"a":34381,"t":"code","b":[208],"m":"ret","o":"nc"},{"a":34382,"t":"code","b":[33,111,202],"m":"ld","o":"hl,$CA6F"},{"a":34385,"t":"code","b":[167],"m":"and","o":"a"},{"a":34386,"t":"code","b":[32,3],"m":"jr","oa":34391,"o":"nz,$8657"},{"a":34388,"t":"code","b":[33,175,202],"m":"ld","o":"hl,$CAAF"},{"a":34391,"t":"code","b":[217],"m":"exx","x":[34386]},{"a":34392,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":34395,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":34399,"t":"code","b":[6,16],"m":"ld","o":"b,$10"},{"a":34401,"t":"code","b":[175],"m":"xor","o":"a"},{"a":34402,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":34403,"t":"code","b":[205,227,183],"m":"call","oa":47075,"o":"plot_shape"},{"a":34406,"t":"code","b":[201],"m":"ret"},{"a":34407,"l":"draw_sputnik","c":"Draws an object of type $E5 as a shadow on the board and a body above it. $81DB leaves the base copy of this type unscaled, so the base is the spot on the board beneath the object. While byte +$1B of the entity record is below $11, the 13-row sprite at $C8DF, a dithered cross, is drawn at the base copy's centre less 7 across and 6 down. The body is drawn over the top copy's centre. Its size is the low byte of the top copy's width, x2 - x1, or entity byte +$1C if that is smaller, and the value used is written back to +$1C: under $0D selects the 12-row sprite at $CA3F, under $10 the 15-row one at $CA03, under $14 the 18-row one at $C997 and anything larger the 22-row one at $C913, the last two 24 pixels wide. Its corner is the centre less half the row count in x and in y. All four sprites show a ball with four diagonal spikes. Reached only by the jump at $89EC.","t":"code","b":[221,42,75,128],"m":"ld","oa":32843,"o":"ix,(draw_entry)","x":[35308]},{"a":34411,"t":"code","b":[221,110,10],"m":"ld","o":"l,(ix+$0A)"},{"a":34414,"t":"code","b":[221,102,11],"m":"ld","o":"h,(ix+$0B)"},{"a":34417,"t":"code","b":[229],"m":"push","o":"hl"},{"a":34418,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":34420,"t":"code","b":[221,126,27],"m":"ld","o":"a,(ix+$1B)"},{"a":34423,"t":"code","b":[254,17],"m":"cp","o":"$11"},{"a":34425,"t":"code","b":[210,168,134],"m":"jp","oa":34472,"o":"nc,$86A8"},{"a":34428,"t":"code","b":[33,223,200],"m":"ld","o":"hl,$C8DF"},{"a":34431,"t":"code","b":[175],"m":"xor","o":"a"},{"a":34432,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":34433,"t":"code","b":[217],"m":"exx"},{"a":34434,"t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)"},{"a":34437,"t":"code","b":[237,75,13,128],"m":"ld","oa":32781,"o":"bc,(base_rect_x2)"},{"a":34441,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34442,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34444,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34446,"t":"code","b":[1,249,255],"m":"ld","o":"bc,$FFF9"},{"a":34449,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34450,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":34451,"t":"code","b":[42,15,128],"m":"ld","oa":32783,"o":"hl,(base_rect_y1)"},{"a":34454,"t":"code","b":[237,75,17,128],"m":"ld","oa":32785,"o":"bc,(base_rect_y2)"},{"a":34458,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34459,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34461,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34463,"t":"code","b":[1,250,255],"m":"ld","o":"bc,$FFFA"},{"a":34466,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34467,"t":"code","b":[6,13],"m":"ld","o":"b,$0D"},{"a":34469,"t":"code","b":[205,227,183],"m":"call","oa":47075,"o":"plot_shape"},{"a":34472,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)","x":[34425]},{"a":34475,"t":"code","b":[237,75,25,128],"m":"ld","oa":32793,"o":"bc,(top_rect_y2)"},{"a":34479,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34480,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34482,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34484,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":34485,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":34488,"t":"code","b":[237,75,21,128],"m":"ld","oa":32789,"o":"bc,(top_rect_x2)"},{"a":34492,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34493,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34495,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34497,"t":"code","b":[217],"m":"exx"},{"a":34498,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":34501,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":34505,"t":"code","b":[167],"m":"and","o":"a"},{"a":34506,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":34508,"t":"code","b":[175],"m":"xor","o":"a"},{"a":34509,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":34510,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":34511,"t":"code","b":[221,78,28],"m":"ld","o":"c,(ix+$1C)"},{"a":34514,"t":"code","b":[185],"m":"cp","o":"c"},{"a":34515,"t":"code","b":[56,1],"m":"jr","oa":34518,"o":"c,$86D6"},{"a":34517,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":34518,"t":"code","b":[221,119,28],"m":"ld","o":"(ix+$1C),a","x":[34515]},{"a":34521,"t":"code","b":[33,63,202],"m":"ld","o":"hl,$CA3F"},{"a":34524,"t":"code","b":[6,12],"m":"ld","o":"b,$0C"},{"a":34526,"t":"code","b":[254,13],"m":"cp","o":"$0D"},{"a":34528,"t":"code","b":[56,26],"m":"jr","oa":34556,"o":"c,$86FC"},{"a":34530,"t":"code","b":[33,3,202],"m":"ld","o":"hl,$CA03"},{"a":34533,"t":"code","b":[6,15],"m":"ld","o":"b,$0F"},{"a":34535,"t":"code","b":[254,16],"m":"cp","o":"$10"},{"a":34537,"t":"code","b":[56,17],"m":"jr","oa":34556,"o":"c,$86FC"},{"a":34539,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":34540,"t":"code","b":[60],"m":"inc","o":"a"},{"a":34541,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":34542,"t":"code","b":[33,151,201],"m":"ld","o":"hl,$C997"},{"a":34545,"t":"code","b":[6,18],"m":"ld","o":"b,$12"},{"a":34547,"t":"code","b":[254,20],"m":"cp","o":"$14"},{"a":34549,"t":"code","b":[56,5],"m":"jr","oa":34556,"o":"c,$86FC"},{"a":34551,"t":"code","b":[33,19,201],"m":"ld","o":"hl,$C913"},{"a":34554,"t":"code","b":[6,22],"m":"ld","o":"b,$16"},{"a":34556,"t":"code","b":[120],"m":"ld","o":"a,b","x":[34528,34537,34549]},{"a":34557,"t":"code","b":[217],"m":"exx"},{"a":34558,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":34559,"t":"code","b":[6,0],"m":"ld","o":"b,$00"},{"a":34561,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":34563,"t":"code","b":[167],"m":"and","o":"a"},{"a":34564,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":34566,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":34567,"t":"code","b":[167],"m":"and","o":"a"},{"a":34568,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":34570,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":34571,"t":"code","b":[205,227,183],"m":"call","oa":47075,"o":"plot_shape"},{"a":34574,"t":"code","b":[201],"m":"ret"},{"a":34575,"l":"draw_type_e6_sprite","c":"Draws an object of type $E6 as a 16 by 15 pixel sprite whose address is the word at +$0F of the entity record, so the entity's own code chooses the picture. The sprite's corner is the top copy's centre less 8 in x and in y, and $B7E3 draws it. Reached only by the jump at $8A05.","t":"code","b":[221,42,75,128],"m":"ld","oa":32843,"o":"ix,(draw_entry)","x":[35333]},{"a":34579,"t":"code","b":[221,110,10],"m":"ld","o":"l,(ix+$0A)"},{"a":34582,"t":"code","b":[221,102,11],"m":"ld","o":"h,(ix+$0B)"},{"a":34585,"t":"code","b":[229],"m":"push","o":"hl"},{"a":34586,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":34588,"t":"code","b":[221,110,15],"m":"ld","o":"l,(ix+$0F)"},{"a":34591,"t":"code","b":[221,102,16],"m":"ld","o":"h,(ix+$10)"},{"a":34594,"t":"code","b":[217],"m":"exx"},{"a":34595,"t":"code","b":[175],"m":"xor","o":"a"},{"a":34596,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":34597,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":34600,"t":"code","b":[237,75,21,128],"m":"ld","oa":32789,"o":"bc,(top_rect_x2)"},{"a":34604,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34605,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34607,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34609,"t":"code","b":[1,248,255],"m":"ld","o":"bc,$FFF8"},{"a":34612,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34613,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":34614,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":34617,"t":"code","b":[237,75,25,128],"m":"ld","oa":32793,"o":"bc,(top_rect_y2)"},{"a":34621,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34622,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34624,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34626,"t":"code","b":[1,248,255],"m":"ld","o":"bc,$FFF8"},{"a":34629,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":34630,"t":"code","b":[6,15],"m":"ld","o":"b,$0F"},{"a":34632,"t":"code","b":[205,227,183],"m":"call","oa":47075,"o":"plot_shape"},{"a":34635,"t":"code","b":[201],"m":"ret"},{"a":34636,"l":"draw_type_f4_pulsing_block","c":"Draws an object of type $F4: a box whose top is solid paper with four triangles of ink that grow and shrink. The walls come first (y1, y2, x2, x1, in the patterns $81DB set), then the top face with the pattern word $00FF. A size is taken from the frame counter at $8059: its low four bits, or 15 minus them when bit 4 is set, plus 5, so it runs from 5 up to 20 and back over 32 frames; it is kept in the low byte of $80B8. Four triangles are then filled with the pattern word $0000, one on each edge of the top with its apex that many pixels in toward the middle: on the y1 and y2 edges through $900C and on the x1 and x2 edges through $9590. Reached only by the jump at $89F6. Seven board records have this type.","t":"code","b":[205,176,130],"m":"call","oa":33456,"o":"draw_wall_y1","x":[35318]},{"a":34639,"t":"code","b":[205,208,130],"m":"call","oa":33488,"o":"draw_wall_y2"},{"a":34642,"t":"code","b":[205,16,131],"m":"call","oa":33552,"o":"draw_wall_x2"},{"a":34645,"t":"code","b":[205,240,130],"m":"call","oa":33520,"o":"draw_wall_x1"},{"a":34648,"t":"code","b":[33,255,0],"m":"ld","o":"hl,$00FF"},{"a":34651,"t":"code","b":[34,184,128],"m":"ld","oa":32952,"o":"(face_pattern_top),hl"},{"a":34654,"t":"code","b":[205,143,130],"m":"call","oa":33423,"o":"draw_top_face"},{"a":34657,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":34660,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":34663,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":34666,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":34669,"t":"code","b":[237,91,21,128],"m":"ld","oa":32789,"o":"de,(top_rect_x2)"},{"a":34673,"t":"code","b":[237,83,31,128],"m":"ld","oa":32799,"o":"(shape_x1),de"},{"a":34677,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":34678,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34680,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34682,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":34685,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":34688,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":34691,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":34694,"t":"code","b":[58,89,128],"m":"ld","oa":32857,"o":"a,(frame_counter)"},{"a":34697,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":34699,"t":"code","b":[203,103],"m":"bit","o":"4,a"},{"a":34701,"t":"code","b":[40,6],"m":"jr","oa":34709,"o":"z,$8795"},{"a":34703,"t":"code","b":[203,167],"m":"res","o":"4,a"},{"a":34705,"t":"code","b":[237,68],"m":"neg"},{"a":34707,"t":"code","b":[198,15],"m":"add","o":"a,$0F"},{"a":34709,"t":"code","b":[198,5],"m":"add","o":"a,$05","x":[34701]},{"a":34711,"t":"code","b":[50,184,128],"m":"ld","oa":32952,"o":"(face_pattern_top),a"},{"a":34714,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":34715,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":34717,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":34718,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":34721,"t":"code","b":[205,12,144],"m":"call","oa":36876,"o":"fill_outlined_trapezoid"},{"a":34724,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":34727,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":34730,"t":"code","b":[237,91,21,128],"m":"ld","oa":32789,"o":"de,(top_rect_x2)"},{"a":34734,"t":"code","b":[237,83,39,128],"m":"ld","oa":32807,"o":"(shape_x3),de"},{"a":34738,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":34739,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34741,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34743,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":34746,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":34749,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":34752,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":34755,"t":"code","b":[58,184,128],"m":"ld","oa":32952,"o":"a,(face_pattern_top)"},{"a":34758,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":34759,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":34761,"t":"code","b":[167],"m":"and","o":"a"},{"a":34762,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":34764,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":34767,"t":"code","b":[205,12,144],"m":"call","oa":36876,"o":"fill_outlined_trapezoid"},{"a":34770,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":34773,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":34776,"t":"code","b":[237,91,25,128],"m":"ld","oa":32793,"o":"de,(top_rect_y2)"},{"a":34780,"t":"code","b":[237,83,37,128],"m":"ld","oa":32805,"o":"(shape_y2),de"},{"a":34784,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":34785,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34787,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34789,"t":"code","b":[34,33,128],"m":"ld","oa":32801,"o":"(shape_y1),hl"},{"a":34792,"t":"code","b":[34,41,128],"m":"ld","oa":32809,"o":"(shape_y3),hl"},{"a":34795,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":34798,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":34801,"t":"code","b":[58,184,128],"m":"ld","oa":32952,"o":"a,(face_pattern_top)"},{"a":34804,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":34805,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":34807,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":34808,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":34811,"t":"code","b":[205,144,149],"m":"call","oa":38288,"o":"fill_upright_quad"},{"a":34814,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":34817,"t":"code","b":[34,33,128],"m":"ld","oa":32801,"o":"(shape_y1),hl"},{"a":34820,"t":"code","b":[237,91,25,128],"m":"ld","oa":32793,"o":"de,(top_rect_y2)"},{"a":34824,"t":"code","b":[237,83,41,128],"m":"ld","oa":32809,"o":"(shape_y3),de"},{"a":34828,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":34829,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":34831,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":34833,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":34836,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":34839,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":34842,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":34845,"t":"code","b":[58,184,128],"m":"ld","oa":32952,"o":"a,(face_pattern_top)"},{"a":34848,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":34849,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":34851,"t":"code","b":[167],"m":"and","o":"a"},{"a":34852,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":34854,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":34857,"t":"code","b":[205,144,149],"m":"call","oa":38288,"o":"fill_upright_quad"},{"a":34860,"t":"code","b":[201],"m":"ret"},{"a":34861,"l":"stripe_top_offset","c":"Distance in pixels from the top copy's x1 to the stripe boundary that $8833 is working on. Set at $8862 to phase * width / 1024, where the phase is 16 times the low four bits of the frame counter and the width is the top copy's x2 - x1, and advanced by the step at $882E on each call of $891C ($8951). Read at $88BF, $88ED, $8906 and $8942.","t":"byte","b":[0],"x":[34914,35007,35053,35078,35138,35153]},{"a":34862,"l":"stripe_top_step","c":"Width of one full stripe on the top copy: a quarter of the low byte of the top copy's width. Written at $886A and read at $894C, by the striped block routine and its helper only.","t":"byte","b":[0],"x":[34922,35148]},{"a":34863,"l":"stripe_base_offset","c":"The running stripe boundary for the base copy, measured from its x1: set at $8882 to phase * base width / 1024 and advanced by the step at $8830 at $8934. Read at $8893, $88AF, $88DD and $8926.","t":"byte","b":[0],"x":[34946,34963,34991,35037,35110,35124]},{"a":34864,"l":"stripe_base_step","c":"Width of one full stripe on the base copy: a quarter of the low byte of the base copy's width, x2 - x1. Written at $888A and read at $8930.","t":"byte","b":[0],"x":[34954,35120]},{"a":34865,"l":"stripe_top_width","c":"The top copy's width, x2 - x1, stored by $8833 at $8854. Only the low byte is read back, at $890A, to find how much of the top is left beyond the last stripe boundary.","t":"word","b":[0,0],"d":[0],"x":[34900,35082]},{"a":34867,"l":"draw_debugger_block","c":"Draws an object of type $E3: a box wrapped in five bands, alternately solid paper and solid ink, that travel from its x1 side to its x2 side. A band's pattern word is $00FF for paper or $0000 for ink. Bit 4 of the frame counter at $8059 decides which of them the first band gets, and the low four bits times 16 are the phase. For the top copy and for the base copy the first boundary lies at phase * width / 1024 from x1 and a full band is a quarter of the width; these four values are kept at $882D-$8830. The x1 wall is drawn first, in the first band's pattern or in $FFAA when the base offset is under 5. Then come the first, partial band ($8959), three full bands ($891C, which complements the pattern byte each time), and a last band that runs up to x2. The x2 wall is drawn in the last band's pattern, or in $FFAA when fewer than 6 pixels of the top lie beyond the last boundary. The phase wraps every 16 frames, exactly as bit 4 flips, so the bands advance a quarter of the width every 16 frames without a jump. Reached only by the jump at $8A00. Four board records have this type.","t":"code","b":[58,89,128],"m":"ld","oa":32857,"o":"a,(frame_counter)","x":[35328]},{"a":34870,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":34872,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":34874,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":34876,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":34878,"t":"code","b":[1,255,0],"m":"ld","o":"bc,$00FF"},{"a":34881,"t":"code","b":[56,2],"m":"jr","oa":34885,"o":"c,$8845"},{"a":34883,"t":"code","b":[14,0],"m":"ld","o":"c,$00"},{"a":34885,"t":"code","b":[237,67,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),bc","x":[34881]},{"a":34889,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":34892,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":34896,"t":"code","b":[167],"m":"and","o":"a"},{"a":34897,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":34899,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":34900,"t":"code","b":[237,83,49,136],"m":"ld","oa":34865,"o":"(stripe_top_width),de"},{"a":34904,"t":"code","b":[67],"m":"ld","o":"b,e"},{"a":34905,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":34906,"t":"code","b":[205,32,211],"m":"call","oa":54048,"o":"multiply_a_by_de"},{"a":34909,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":34910,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":34912,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":34914,"t":"code","b":[50,45,136],"m":"ld","oa":34861,"o":"(stripe_top_offset),a"},{"a":34917,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":34918,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":34920,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":34922,"t":"code","b":[50,46,136],"m":"ld","oa":34862,"o":"(stripe_top_step),a"},{"a":34925,"t":"code","b":[42,13,128],"m":"ld","oa":32781,"o":"hl,(base_rect_x2)"},{"a":34928,"t":"code","b":[237,91,11,128],"m":"ld","oa":32779,"o":"de,(base_rect_x1)"},{"a":34932,"t":"code","b":[167],"m":"and","o":"a"},{"a":34933,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":34935,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":34936,"t":"code","b":[67],"m":"ld","o":"b,e"},{"a":34937,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":34938,"t":"code","b":[205,32,211],"m":"call","oa":54048,"o":"multiply_a_by_de"},{"a":34941,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":34942,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":34944,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":34946,"t":"code","b":[50,47,136],"m":"ld","oa":34863,"o":"(stripe_base_offset),a"},{"a":34949,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":34950,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":34952,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":34954,"t":"code","b":[50,48,136],"m":"ld","oa":34864,"o":"(stripe_base_step),a"},{"a":34957,"t":"code","b":[42,190,128],"m":"ld","oa":32958,"o":"hl,(fill_pattern)"},{"a":34960,"t":"code","b":[34,184,128],"m":"ld","oa":32952,"o":"(face_pattern_top),hl"},{"a":34963,"t":"code","b":[58,47,136],"m":"ld","oa":34863,"o":"a,(stripe_base_offset)"},{"a":34966,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":34968,"t":"code","b":[48,3],"m":"jr","oa":34973,"o":"nc,$889D"},{"a":34970,"t":"code","b":[33,170,255],"m":"ld","o":"hl,$FFAA"},{"a":34973,"t":"code","b":[34,186,128],"m":"ld","oa":32954,"o":"(face_pattern_x_sides),hl","x":[34968]},{"a":34976,"t":"code","b":[205,240,130],"m":"call","oa":33520,"o":"draw_wall_x1"},{"a":34979,"t":"code","b":[42,184,128],"m":"ld","oa":32952,"o":"hl,(face_pattern_top)"},{"a":34982,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":34985,"t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)"},{"a":34988,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":34991,"t":"code","b":[58,47,136],"m":"ld","oa":34863,"o":"a,(stripe_base_offset)"},{"a":34994,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":34995,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":34997,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":34998,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":35001,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":35004,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":35007,"t":"code","b":[58,45,136],"m":"ld","oa":34861,"o":"a,(stripe_top_offset)"},{"a":35010,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":35011,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":35012,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":35015,"t":"code","b":[205,89,137],"m":"call","oa":35161,"o":"draw_stripe_band"},{"a":35018,"t":"code","b":[205,28,137],"m":"call","oa":35100,"o":"draw_next_stripe"},{"a":35021,"t":"code","b":[205,28,137],"m":"call","oa":35100,"o":"draw_next_stripe"},{"a":35024,"t":"code","b":[205,28,137],"m":"call","oa":35100,"o":"draw_next_stripe"},{"a":35027,"t":"code","b":[58,190,128],"m":"ld","oa":32958,"o":"a,(fill_pattern)"},{"a":35030,"t":"code","b":[47],"m":"cpl"},{"a":35031,"t":"code","b":[50,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),a"},{"a":35034,"t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)"},{"a":35037,"t":"code","b":[58,47,136],"m":"ld","oa":34863,"o":"a,(stripe_base_offset)"},{"a":35040,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":35041,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":35043,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":35044,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":35047,"t":"code","b":[42,13,128],"m":"ld","oa":32781,"o":"hl,(base_rect_x2)"},{"a":35050,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":35053,"t":"code","b":[58,45,136],"m":"ld","oa":34861,"o":"a,(stripe_top_offset)"},{"a":35056,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":35057,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":35059,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":35062,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":35063,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":35066,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":35069,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":35072,"t":"code","b":[205,89,137],"m":"call","oa":35161,"o":"draw_stripe_band"},{"a":35075,"t":"code","b":[42,190,128],"m":"ld","oa":32958,"o":"hl,(fill_pattern)"},{"a":35078,"t":"code","b":[58,45,136],"m":"ld","oa":34861,"o":"a,(stripe_top_offset)"},{"a":35081,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":35082,"t":"code","b":[58,49,136],"m":"ld","oa":34865,"o":"a,(stripe_top_width)"},{"a":35085,"t":"code","b":[145],"m":"sub","o":"c"},{"a":35086,"t":"code","b":[254,6],"m":"cp","o":"$06"},{"a":35088,"t":"code","b":[48,3],"m":"jr","oa":35093,"o":"nc,$8915"},{"a":35090,"t":"code","b":[33,170,255],"m":"ld","o":"hl,$FFAA"},{"a":35093,"t":"code","b":[34,186,128],"m":"ld","oa":32954,"o":"(face_pattern_x_sides),hl","x":[35088]},{"a":35096,"t":"code","b":[205,16,131],"m":"call","oa":33552,"o":"draw_wall_x2"},{"a":35099,"t":"code","b":[201],"m":"ret"},{"a":35100,"l":"draw_next_stripe","c":"Moves on to the next band of the striped block and draws it. It complements the pattern byte at $80BE, sets the band's base limits to the base copy's x1 plus the offset at $882F and x1 plus that offset advanced by the step at $8830 (the new offset is stored), sets its top limits the same way from $882D and $882E, and falls into $8959. Called three times by $8833, at $88CA, $88CD and $88D0.","t":"code","b":[58,190,128],"m":"ld","oa":32958,"o":"a,(fill_pattern)","x":[35018,35021,35024]},{"a":35103,"t":"code","b":[47],"m":"cpl"},{"a":35104,"t":"code","b":[50,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),a"},{"a":35107,"t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)"},{"a":35110,"t":"code","b":[58,47,136],"m":"ld","oa":34863,"o":"a,(stripe_base_offset)"},{"a":35113,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":35114,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":35116,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":35117,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":35120,"t":"code","b":[58,48,136],"m":"ld","oa":34864,"o":"a,(stripe_base_step)"},{"a":35123,"t":"code","b":[131],"m":"add","o":"a,e"},{"a":35124,"t":"code","b":[50,47,136],"m":"ld","oa":34863,"o":"(stripe_base_offset),a"},{"a":35127,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":35128,"t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)"},{"a":35131,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":35132,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":35135,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":35138,"t":"code","b":[58,45,136],"m":"ld","oa":34861,"o":"a,(stripe_top_offset)"},{"a":35141,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":35142,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":35144,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":35145,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":35148,"t":"code","b":[58,46,136],"m":"ld","oa":34862,"o":"a,(stripe_top_step)"},{"a":35151,"t":"code","b":[131],"m":"add","o":"a,e"},{"a":35152,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":35153,"t":"code","b":[50,45,136],"m":"ld","oa":34861,"o":"(stripe_top_offset),a"},{"a":35156,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":35157,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":35160,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":35161,"l":"draw_stripe_band","c":"Draws one band of the striped block across three faces. The caller has put the band's x limits on the base copy in $801B and $801F and its limits on the top copy in $8023 and HL, which is stored to $8027 here. First the strip of the y1 wall is drawn through $900C, between the base copy's y1 edge and the top copy's. The two pairs of limits are then exchanged and the strip of the top face is drawn as a rectangle through $8E13 from the top copy's y1 to its y2, followed by the strip of the y2 wall through $900C, between the top copy's y2 edge and the base copy's. All three use the pattern at $80BE, and each wall strip appears only when $900C finds its first edge higher on screen than its second. Called from $88C7 and $8900 and entered by falling through from $891C.","t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl","x":[35015,35072]},{"a":35164,"t":"code","b":[42,15,128],"m":"ld","oa":32783,"o":"hl,(base_rect_y1)"},{"a":35167,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":35170,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":35173,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":35176,"t":"code","b":[205,12,144],"m":"call","oa":36876,"o":"fill_outlined_trapezoid"},{"a":35179,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":35182,"t":"code","b":[237,91,35,128],"m":"ld","oa":32803,"o":"de,(shape_x2)"},{"a":35186,"t":"code","b":[237,83,27,128],"m":"ld","oa":32795,"o":"(shape_x0),de"},{"a":35190,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":35193,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":35196,"t":"code","b":[237,91,39,128],"m":"ld","oa":32807,"o":"de,(shape_x3)"},{"a":35200,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":35203,"t":"code","b":[237,83,31,128],"m":"ld","oa":32799,"o":"(shape_x1),de"},{"a":35207,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":35210,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":35213,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":35216,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":35219,"t":"code","b":[205,19,142],"m":"call","oa":36371,"o":"draw_rectangle"},{"a":35222,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":35225,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":35228,"t":"code","b":[42,17,128],"m":"ld","oa":32785,"o":"hl,(base_rect_y2)"},{"a":35231,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":35234,"t":"code","b":[205,12,144],"m":"call","oa":36876,"o":"fill_outlined_trapezoid"},{"a":35237,"t":"code","b":[201],"m":"ret"},{"a":35238,"l":"draw_type_e2_dark_box","c":"Draws an object of type $E2, the commonest type in the board data with 102 records, as a box with a solid paper top and walls of sparse ink dots. It sets the top pattern word at $80B8 to $00FF and both wall pattern words, $80B6 and $80BA, to $AADD, then jumps to the face-code routine at $8A12, where type $E2 selects all five faces. Reached only by the jump at $89D8.","t":"code","b":[33,255,0],"m":"ld","o":"hl,$00FF","x":[35288]},{"a":35241,"t":"code","b":[34,184,128],"m":"ld","oa":32952,"o":"(face_pattern_top),hl"},{"a":35244,"t":"code","b":[33,221,170],"m":"ld","o":"hl,$AADD"},{"a":35247,"t":"code","b":[34,182,128],"m":"ld","oa":32950,"o":"(face_pattern_y_sides),hl"},{"a":35250,"t":"code","b":[34,186,128],"m":"ld","oa":32954,"o":"(face_pattern_x_sides),hl"},{"a":35253,"t":"code","b":[195,18,138],"m":"jp","oa":35346,"o":"draw_box_by_face_code"},{"a":35256,"l":"dispatch_special_types","c":"Chooses the drawing routine for a type with bits 7 and 6 both set ($C0-$FF), read from $804F. With bit 5 clear ($C0-$DF) it goes to the face-code box at $8A12. Otherwise it compares in this order: $FF returns at once with nothing drawn, $FA goes to $851C, $F2 to $85D2, $F3 to $840A, $F1 to $83DC, $E2 to $89A6, $E0 to $84E4, $E1 to $8482, $F7 to $860A, $E5 to $8667, $FB to $863F, $F4 to $874C, $F6 to $BB06, $E3 to $8833 and $E6 to $870F, and $F5 returns. Of the types left, $E8-$EF go to $84C8 and the other eight ($E4, $E7, $F0, $F8, $F9, $FC, $FD, $FE) fall into $8A12. Reached only by the jump at $827F.","t":"code","b":[58,79,128],"m":"ld","oa":32847,"o":"a,(draw_type)","x":[33407]},{"a":35259,"t":"code","b":[203,111],"m":"bit","o":"5,a"},{"a":35261,"t":"code","b":[40,83],"m":"jr","oa":35346,"o":"z,draw_box_by_face_code"},{"a":35263,"t":"code","b":[254,255],"m":"cp","o":"$FF"},{"a":35265,"t":"code","b":[200],"m":"ret","o":"z"},{"a":35266,"t":"code","b":[254,250],"m":"cp","o":"$FA"},{"a":35268,"t":"code","b":[202,28,133],"m":"jp","oa":34076,"o":"z,draw_worm_section"},{"a":35271,"t":"code","b":[254,242],"m":"cp","o":"$F2"},{"a":35273,"t":"code","b":[202,210,133],"m":"jp","oa":34258,"o":"z,draw_type_f2_sized_sprite"},{"a":35276,"t":"code","b":[254,243],"m":"cp","o":"$F3"},{"a":35278,"t":"code","b":[202,10,132],"m":"jp","oa":33802,"o":"z,draw_crawly"},{"a":35281,"t":"code","b":[254,241],"m":"cp","o":"$F1"},{"a":35283,"t":"code","b":[202,220,131],"m":"jp","oa":33756,"o":"z,draw_sparky"},{"a":35286,"t":"code","b":[254,226],"m":"cp","o":"$E2"},{"a":35288,"t":"code","b":[202,166,137],"m":"jp","oa":35238,"o":"z,draw_type_e2_dark_box"},{"a":35291,"t":"code","b":[254,224],"m":"cp","o":"$E0"},{"a":35293,"t":"code","b":[202,228,132],"m":"jp","oa":34020,"o":"z,draw_type_e0_box_with_readout"},{"a":35296,"t":"code","b":[254,225],"m":"cp","o":"$E1"},{"a":35298,"t":"code","b":[202,130,132],"m":"jp","oa":33922,"o":"z,draw_type_e1_pyramid"},{"a":35301,"t":"code","b":[254,247],"m":"cp","o":"$F7"},{"a":35303,"t":"code","b":[202,10,134],"m":"jp","oa":34314,"o":"z,draw_spindle"},{"a":35306,"t":"code","b":[254,229],"m":"cp","o":"$E5"},{"a":35308,"t":"code","b":[202,103,134],"m":"jp","oa":34407,"o":"z,draw_sputnik"},{"a":35311,"t":"code","b":[254,251],"m":"cp","o":"$FB"},{"a":35313,"t":"code","b":[202,63,134],"m":"jp","oa":34367,"o":"z,draw_type_fb_burst"},{"a":35316,"t":"code","b":[254,244],"m":"cp","o":"$F4"},{"a":35318,"t":"code","b":[202,76,135],"m":"jp","oa":34636,"o":"z,draw_type_f4_pulsing_block"},{"a":35321,"t":"code","b":[254,246],"m":"cp","o":"$F6"},{"a":35323,"t":"code","b":[202,6,187],"m":"jp","oa":47878,"o":"z,draw_floppy_disk"},{"a":35326,"t":"code","b":[254,227],"m":"cp","o":"$E3"},{"a":35328,"t":"code","b":[202,51,136],"m":"jp","oa":34867,"o":"z,draw_debugger_block"},{"a":35331,"t":"code","b":[254,230],"m":"cp","o":"$E6"},{"a":35333,"t":"code","b":[202,15,135],"m":"jp","oa":34575,"o":"z,draw_type_e6_sprite"},{"a":35336,"t":"code","b":[254,245],"m":"cp","o":"$F5"},{"a":35338,"t":"code","b":[200],"m":"ret","o":"z"},{"a":35339,"t":"code","b":[230,248],"m":"and","o":"$F8"},{"a":35341,"t":"code","b":[254,232],"m":"cp","o":"$E8"},{"a":35343,"t":"code","b":[202,200,132],"m":"jp","oa":33992,"o":"z,draw_types_e8_ef_halftone_box"},{"a":35346,"l":"draw_box_by_face_code","c":"Draws a box, leaving out the faces its type marks as not needed. Bits 4 to 2 of the type at $804F form a code: 0 draws the top and all four walls; 1 the four walls without the top; 2 the top and the y1, y2 and x2 walls; 3 the top and the y1, y2 and x1 walls; 4 the top and the y2, x1 and x2 walls; 5 the top and the y1, x1 and x2 walls; 6 the top and the two y walls; 7 the top and the two x walls. The top is $828F and the walls are $82B0 (y1), $82D0 (y2), $82F0 (x1) and $8310 (x2), each of which still draws nothing when its wall faces away from the view centre. Entered by the jump at $89B5 for type $E2, by the jump at $89BD for types $C0-$DF and by falling through from $8A0F; the unreached routine at $833A also calls it. The board data uses all eight codes.","t":"code","b":[58,79,128],"m":"ld","oa":32847,"o":"a,(draw_type)","x":[33726,35253,35261]},{"a":35349,"t":"code","b":[230,28],"m":"and","o":"$1C"},{"a":35351,"t":"code","b":[202,118,138],"m":"jp","oa":35446,"o":"z,$8A76"},{"a":35354,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":35356,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":35358,"t":"code","b":[61],"m":"dec","o":"a"},{"a":35359,"t":"code","b":[40,88],"m":"jr","oa":35449,"o":"z,$8A79"},{"a":35361,"t":"code","b":[61],"m":"dec","o":"a"},{"a":35362,"t":"code","b":[194,50,138],"m":"jp","oa":35378,"o":"nz,$8A32"},{"a":35365,"t":"code","b":[205,143,130],"m":"call","oa":33423,"o":"draw_top_face"},{"a":35368,"t":"code","b":[205,176,130],"m":"call","oa":33456,"o":"draw_wall_y1"},{"a":35371,"t":"code","b":[205,208,130],"m":"call","oa":33488,"o":"draw_wall_y2"},{"a":35374,"t":"code","b":[205,16,131],"m":"call","oa":33552,"o":"draw_wall_x2"},{"a":35377,"t":"code","b":[201],"m":"ret"},{"a":35378,"t":"code","b":[61],"m":"dec","o":"a","x":[35362]},{"a":35379,"t":"code","b":[194,67,138],"m":"jp","oa":35395,"o":"nz,$8A43"},{"a":35382,"t":"code","b":[205,143,130],"m":"call","oa":33423,"o":"draw_top_face"},{"a":35385,"t":"code","b":[205,176,130],"m":"call","oa":33456,"o":"draw_wall_y1"},{"a":35388,"t":"code","b":[205,208,130],"m":"call","oa":33488,"o":"draw_wall_y2"},{"a":35391,"t":"code","b":[205,240,130],"m":"call","oa":33520,"o":"draw_wall_x1"},{"a":35394,"t":"code","b":[201],"m":"ret"},{"a":35395,"t":"code","b":[61],"m":"dec","o":"a","x":[35379]},{"a":35396,"t":"code","b":[194,77,138],"m":"jp","oa":35405,"o":"nz,$8A4D"},{"a":35399,"t":"code","b":[205,143,130],"m":"call","oa":33423,"o":"draw_top_face"},{"a":35402,"t":"code","b":[195,124,138],"m":"jp","oa":35452,"o":"$8A7C"},{"a":35405,"t":"code","b":[61],"m":"dec","o":"a","x":[35396]},{"a":35406,"t":"code","b":[194,94,138],"m":"jp","oa":35422,"o":"nz,$8A5E"},{"a":35409,"t":"code","b":[205,143,130],"m":"call","oa":33423,"o":"draw_top_face"},{"a":35412,"t":"code","b":[205,176,130],"m":"call","oa":33456,"o":"draw_wall_y1"},{"a":35415,"t":"code","b":[205,240,130],"m":"call","oa":33520,"o":"draw_wall_x1"},{"a":35418,"t":"code","b":[205,16,131],"m":"call","oa":33552,"o":"draw_wall_x2"},{"a":35421,"t":"code","b":[201],"m":"ret"},{"a":35422,"t":"code","b":[61],"m":"dec","o":"a","x":[35406]},{"a":35423,"t":"code","b":[194,108,138],"m":"jp","oa":35436,"o":"nz,$8A6C"},{"a":35426,"t":"code","b":[205,143,130],"m":"call","oa":33423,"o":"draw_top_face"},{"a":35429,"t":"code","b":[205,176,130],"m":"call","oa":33456,"o":"draw_wall_y1"},{"a":35432,"t":"code","b":[205,208,130],"m":"call","oa":33488,"o":"draw_wall_y2"},{"a":35435,"t":"code","b":[201],"m":"ret"},{"a":35436,"t":"code","b":[205,143,130],"m":"call","oa":33423,"o":"draw_top_face","x":[35423]},{"a":35439,"t":"code","b":[205,16,131],"m":"call","oa":33552,"o":"draw_wall_x2"},{"a":35442,"t":"code","b":[205,240,130],"m":"call","oa":33520,"o":"draw_wall_x1"},{"a":35445,"t":"code","b":[201],"m":"ret"},{"a":35446,"t":"code","b":[205,143,130],"m":"call","oa":33423,"o":"draw_top_face","x":[35351]},{"a":35449,"t":"code","b":[205,176,130],"m":"call","oa":33456,"o":"draw_wall_y1","x":[35359]},{"a":35452,"t":"code","b":[205,208,130],"m":"call","oa":33488,"o":"draw_wall_y2","x":[35402]},{"a":35455,"t":"code","b":[205,240,130],"m":"call","oa":33520,"o":"draw_wall_x1"},{"a":35458,"t":"code","b":[205,16,131],"m":"call","oa":33552,"o":"draw_wall_x2"},{"a":35461,"t":"code","b":[201],"m":"ret"},{"a":35462,"l":"unused_midpoint_routine","c":"A routine that nothing reaches: no instruction and no word in the image refers to $8A86, and the byte before it is the RET that ends $8A12. It clears $80BE, stores the means of the base and top copies' x1, x2 and y1 at $802B, $802D and $802F, and calls the empty routine at $8330. What it was for is not established.","t":"code","b":[62,0],"m":"ld","o":"a,$00"},{"a":35464,"t":"code","b":[50,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),a"},{"a":35467,"t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)"},{"a":35470,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":35474,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":35475,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":35477,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":35479,"t":"code","b":[34,43,128],"m":"ld","oa":32811,"o":"(extent_x1),hl"},{"a":35482,"t":"code","b":[42,13,128],"m":"ld","oa":32781,"o":"hl,(base_rect_x2)"},{"a":35485,"t":"code","b":[237,91,21,128],"m":"ld","oa":32789,"o":"de,(top_rect_x2)"},{"a":35489,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":35490,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":35492,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":35494,"t":"code","b":[34,45,128],"m":"ld","oa":32813,"o":"(extent_x2),hl"},{"a":35497,"t":"code","b":[42,15,128],"m":"ld","oa":32783,"o":"hl,(base_rect_y1)"},{"a":35500,"t":"code","b":[237,91,23,128],"m":"ld","oa":32791,"o":"de,(top_rect_y1)"},{"a":35504,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":35505,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":35507,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":35509,"t":"code","b":[34,47,128],"m":"ld","oa":32815,"o":"(extent_y1),hl"},{"a":35512,"t":"code","b":[205,48,131],"m":"call","oa":33584,"o":"unused_empty_routine"},{"a":35515,"t":"code","b":[201],"m":"ret"},{"a":35516,"l":"draw_wedge_x","c":"Entry for types $80-$BF, wedges whose top slopes along x: one side wall has the full height and the top runs from that wall's upper edge down to the base at the opposite side. When (type AND $30) is $10 the high side is x1 and the routine goes on to $8AC9; for the other three values it is x2 and it jumps to $8B46. Reached only by the jump at $8284.","t":"code","b":[58,79,128],"m":"ld","oa":32847,"o":"a,(draw_type)","x":[33412]},{"a":35519,"t":"code","b":[230,48],"m":"and","o":"$30"},{"a":35521,"t":"code","b":[254,16],"m":"cp","o":"$10"},{"a":35523,"t":"code","b":[202,201,138],"m":"jp","oa":35529,"o":"z,draw_wedge_high_x1"},{"a":35526,"t":"code","b":[195,70,139],"m":"jp","oa":35654,"o":"draw_wedge_high_x2"},{"a":35529,"l":"draw_wedge_high_x1","c":"Draws a wedge that has its full height at x1 and slopes down to the base at x2. Unless type bit 3 is set, the x1 wall is drawn by $82F0. Unless (type AND 6) is 4, the triangular side under the y2 edge is drawn through $8FF5, with its apex at the top copy's (x1, y2) and its long edge along the base copy's y2; unless (type AND 6) is 6, the triangular side under the y1 edge is drawn the same way. Both use the pattern word at $80B6. Last comes the sloping face through $9579, in the pattern at $80B8, between the top copy's x1 edge and the base copy's x2 edge. The first triangle's apex is passed as the pair $8013 and $801F, and $801F equals the top copy's x1 only because $82F0 has just stored it there; with type bit 3 set it would be whatever an earlier shape left. Reached only by the jump at $8AC3. The board data holds only types $90, $92 and $94 for this routine, ten records, all with bit 3 clear.","t":"code","b":[58,79,128],"m":"ld","oa":32847,"o":"a,(draw_type)","x":[35523]},{"a":35532,"t":"code","b":[203,95],"m":"bit","o":"3,a"},{"a":35534,"t":"code","b":[32,3],"m":"jr","oa":35539,"o":"nz,$8AD3"},{"a":35536,"t":"code","b":[205,240,130],"m":"call","oa":33520,"o":"draw_wall_x1"},{"a":35539,"t":"code","b":[58,79,128],"m":"ld","oa":32847,"o":"a,(draw_type)","x":[35534]},{"a":35542,"t":"code","b":[230,6],"m":"and","o":"$06"},{"a":35544,"t":"code","b":[238,4],"m":"xor","o":"$04"},{"a":35546,"t":"code","b":[40,32],"m":"jr","oa":35580,"o":"z,$8AFC"},{"a":35548,"t":"code","b":[42,182,128],"m":"ld","oa":32950,"o":"hl,(face_pattern_y_sides)"},{"a":35551,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":35554,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":35558,"t":"code","b":[237,75,31,128],"m":"ld","oa":32799,"o":"bc,(shape_x1)"},{"a":35562,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":35565,"t":"code","b":[217],"m":"exx"},{"a":35566,"t":"code","b":[237,91,11,128],"m":"ld","oa":32779,"o":"de,(base_rect_x1)"},{"a":35570,"t":"code","b":[237,75,13,128],"m":"ld","oa":32781,"o":"bc,(base_rect_x2)"},{"a":35574,"t":"code","b":[42,17,128],"m":"ld","oa":32785,"o":"hl,(base_rect_y2)"},{"a":35577,"t":"code","b":[205,245,143],"m":"call","oa":36853,"o":"fill_outlined_trapezoid_regs"},{"a":35580,"t":"code","b":[58,79,128],"m":"ld","oa":32847,"o":"a,(draw_type)","x":[35546]},{"a":35583,"t":"code","b":[230,6],"m":"and","o":"$06"},{"a":35585,"t":"code","b":[238,6],"m":"xor","o":"$06"},{"a":35587,"t":"code","b":[40,32],"m":"jr","oa":35621,"o":"z,$8B25"},{"a":35589,"t":"code","b":[42,182,128],"m":"ld","oa":32950,"o":"hl,(face_pattern_y_sides)"},{"a":35592,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":35595,"t":"code","b":[237,91,11,128],"m":"ld","oa":32779,"o":"de,(base_rect_x1)"},{"a":35599,"t":"code","b":[237,75,13,128],"m":"ld","oa":32781,"o":"bc,(base_rect_x2)"},{"a":35603,"t":"code","b":[42,15,128],"m":"ld","oa":32783,"o":"hl,(base_rect_y1)"},{"a":35606,"t":"code","b":[217],"m":"exx"},{"a":35607,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":35611,"t":"code","b":[237,75,19,128],"m":"ld","oa":32787,"o":"bc,(top_rect_x1)"},{"a":35615,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":35618,"t":"code","b":[205,245,143],"m":"call","oa":36853,"o":"fill_outlined_trapezoid_regs"},{"a":35621,"t":"code","b":[42,184,128],"m":"ld","oa":32952,"o":"hl,(face_pattern_top)","x":[35587]},{"a":35624,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":35627,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":35630,"t":"code","b":[237,91,23,128],"m":"ld","oa":32791,"o":"de,(top_rect_y1)"},{"a":35634,"t":"code","b":[237,75,25,128],"m":"ld","oa":32793,"o":"bc,(top_rect_y2)"},{"a":35638,"t":"code","b":[217],"m":"exx"},{"a":35639,"t":"code","b":[42,13,128],"m":"ld","oa":32781,"o":"hl,(base_rect_x2)"},{"a":35642,"t":"code","b":[237,91,15,128],"m":"ld","oa":32783,"o":"de,(base_rect_y1)"},{"a":35646,"t":"code","b":[237,75,17,128],"m":"ld","oa":32785,"o":"bc,(base_rect_y2)"},{"a":35650,"t":"code","b":[205,121,149],"m":"call","oa":38265,"o":"fill_upright_quad_regs"},{"a":35653,"t":"code","b":[201],"m":"ret"},{"a":35654,"l":"draw_wedge_high_x2","c":"Draws a wedge that has its full height at x2 and slopes down to the base at x1: the x2 wall through $8310 unless type bit 3 is set, the triangular side under the y2 edge unless (type AND 6) is 4 and the one under the y1 edge unless (type AND 6) is 6, both through $8FF5 in the pattern at $80B6 with their apex at the top copy's x2, and then the sloping face through $9579, in the pattern at $80B8, between the base copy's x1 edge and the top copy's x2 edge. Reached only by the jump at $8AC6, for a type whose bits 5 and 4 are anything but $10. Four board records come here (types $80, $82 and $84).","t":"code","b":[58,79,128],"m":"ld","oa":32847,"o":"a,(draw_type)","x":[35526]},{"a":35657,"t":"code","b":[203,95],"m":"bit","o":"3,a"},{"a":35659,"t":"code","b":[32,3],"m":"jr","oa":35664,"o":"nz,$8B50"},{"a":35661,"t":"code","b":[205,16,131],"m":"call","oa":33552,"o":"draw_wall_x2"},{"a":35664,"t":"code","b":[58,79,128],"m":"ld","oa":32847,"o":"a,(draw_type)","x":[35659]},{"a":35667,"t":"code","b":[230,6],"m":"and","o":"$06"},{"a":35669,"t":"code","b":[238,4],"m":"xor","o":"$04"},{"a":35671,"t":"code","b":[40,32],"m":"jr","oa":35705,"o":"z,$8B79"},{"a":35673,"t":"code","b":[42,182,128],"m":"ld","oa":32950,"o":"hl,(face_pattern_y_sides)"},{"a":35676,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":35679,"t":"code","b":[237,91,21,128],"m":"ld","oa":32789,"o":"de,(top_rect_x2)"},{"a":35683,"t":"code","b":[237,75,21,128],"m":"ld","oa":32789,"o":"bc,(top_rect_x2)"},{"a":35687,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":35690,"t":"code","b":[217],"m":"exx"},{"a":35691,"t":"code","b":[237,91,11,128],"m":"ld","oa":32779,"o":"de,(base_rect_x1)"},{"a":35695,"t":"code","b":[237,75,13,128],"m":"ld","oa":32781,"o":"bc,(base_rect_x2)"},{"a":35699,"t":"code","b":[42,17,128],"m":"ld","oa":32785,"o":"hl,(base_rect_y2)"},{"a":35702,"t":"code","b":[205,245,143],"m":"call","oa":36853,"o":"fill_outlined_trapezoid_regs"},{"a":35705,"t":"code","b":[58,79,128],"m":"ld","oa":32847,"o":"a,(draw_type)","x":[35671]},{"a":35708,"t":"code","b":[230,6],"m":"and","o":"$06"},{"a":35710,"t":"code","b":[238,6],"m":"xor","o":"$06"},{"a":35712,"t":"code","b":[40,32],"m":"jr","oa":35746,"o":"z,$8BA2"},{"a":35714,"t":"code","b":[42,182,128],"m":"ld","oa":32950,"o":"hl,(face_pattern_y_sides)"},{"a":35717,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":35720,"t":"code","b":[237,91,11,128],"m":"ld","oa":32779,"o":"de,(base_rect_x1)"},{"a":35724,"t":"code","b":[237,75,13,128],"m":"ld","oa":32781,"o":"bc,(base_rect_x2)"},{"a":35728,"t":"code","b":[42,15,128],"m":"ld","oa":32783,"o":"hl,(base_rect_y1)"},{"a":35731,"t":"code","b":[217],"m":"exx"},{"a":35732,"t":"code","b":[237,91,21,128],"m":"ld","oa":32789,"o":"de,(top_rect_x2)"},{"a":35736,"t":"code","b":[237,75,21,128],"m":"ld","oa":32789,"o":"bc,(top_rect_x2)"},{"a":35740,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":35743,"t":"code","b":[205,245,143],"m":"call","oa":36853,"o":"fill_outlined_trapezoid_regs"},{"a":35746,"t":"code","b":[42,184,128],"m":"ld","oa":32952,"o":"hl,(face_pattern_top)","x":[35712]},{"a":35749,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":35752,"t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)"},{"a":35755,"t":"code","b":[237,91,15,128],"m":"ld","oa":32783,"o":"de,(base_rect_y1)"},{"a":35759,"t":"code","b":[237,75,17,128],"m":"ld","oa":32785,"o":"bc,(base_rect_y2)"},{"a":35763,"t":"code","b":[217],"m":"exx"},{"a":35764,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":35767,"t":"code","b":[237,91,23,128],"m":"ld","oa":32791,"o":"de,(top_rect_y1)"},{"a":35771,"t":"code","b":[237,75,25,128],"m":"ld","oa":32793,"o":"bc,(top_rect_y2)"},{"a":35775,"t":"code","b":[205,121,149],"m":"call","oa":38265,"o":"fill_upright_quad_regs"},{"a":35778,"t":"code","b":[201],"m":"ret"},{"a":35779,"l":"draw_wedge_y","c":"Entry for types $40-$7F, wedges whose top slopes along y. When (type AND $30) is $10 the high side is y1 and it goes to $8BD0; otherwise the high side is y2 and it goes to $8C2A. Unlike the x wedges, no other type bit is tested, so every face is attempted. Reached only by the jump at $8289.","t":"code","b":[58,79,128],"m":"ld","oa":32847,"o":"a,(draw_type)","x":[33417]},{"a":35782,"t":"code","b":[230,48],"m":"and","o":"$30"},{"a":35784,"t":"code","b":[254,16],"m":"cp","o":"$10"},{"a":35786,"t":"code","b":[202,208,139],"m":"jp","oa":35792,"o":"z,draw_wedge_high_y1"},{"a":35789,"t":"code","b":[195,42,140],"m":"jp","oa":35882,"o":"draw_wedge_high_y2"},{"a":35792,"l":"draw_wedge_high_y1","c":"Draws a wedge that has its full height at y1 and slopes down to the base at y2: the y1 wall through $82B0, the two triangular sides through $9579, under the x1 edge and under the x2 edge with their apex at the top copy's y1, and then the sloping face through $8FF5, in the pattern at $80B8, between the top copy's y1 edge and the base copy's y2 edge. The triangles are drawn in whatever $82B0 left at $80BE, which is the word from $80B6. The LD A,$F0 at the start has no effect, because $82B0 does not read A. Reached only by the jump at $8BCA. Seven board records come here (types $50, $52, $53, $56 and $58).","t":"code","b":[62,240],"m":"ld","o":"a,$F0","x":[35786]},{"a":35794,"t":"code","b":[205,176,130],"m":"call","oa":33456,"o":"draw_wall_y1"},{"a":35797,"t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)"},{"a":35800,"t":"code","b":[237,91,15,128],"m":"ld","oa":32783,"o":"de,(base_rect_y1)"},{"a":35804,"t":"code","b":[237,75,17,128],"m":"ld","oa":32785,"o":"bc,(base_rect_y2)"},{"a":35808,"t":"code","b":[217],"m":"exx"},{"a":35809,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":35812,"t":"code","b":[237,91,23,128],"m":"ld","oa":32791,"o":"de,(top_rect_y1)"},{"a":35816,"t":"code","b":[237,75,23,128],"m":"ld","oa":32791,"o":"bc,(top_rect_y1)"},{"a":35820,"t":"code","b":[205,121,149],"m":"call","oa":38265,"o":"fill_upright_quad_regs"},{"a":35823,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":35826,"t":"code","b":[237,91,23,128],"m":"ld","oa":32791,"o":"de,(top_rect_y1)"},{"a":35830,"t":"code","b":[237,75,23,128],"m":"ld","oa":32791,"o":"bc,(top_rect_y1)"},{"a":35834,"t":"code","b":[217],"m":"exx"},{"a":35835,"t":"code","b":[42,13,128],"m":"ld","oa":32781,"o":"hl,(base_rect_x2)"},{"a":35838,"t":"code","b":[237,91,15,128],"m":"ld","oa":32783,"o":"de,(base_rect_y1)"},{"a":35842,"t":"code","b":[237,75,17,128],"m":"ld","oa":32785,"o":"bc,(base_rect_y2)"},{"a":35846,"t":"code","b":[205,121,149],"m":"call","oa":38265,"o":"fill_upright_quad_regs"},{"a":35849,"t":"code","b":[42,184,128],"m":"ld","oa":32952,"o":"hl,(face_pattern_top)"},{"a":35852,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":35855,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":35858,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":35862,"t":"code","b":[237,75,21,128],"m":"ld","oa":32789,"o":"bc,(top_rect_x2)"},{"a":35866,"t":"code","b":[217],"m":"exx"},{"a":35867,"t":"code","b":[42,17,128],"m":"ld","oa":32785,"o":"hl,(base_rect_y2)"},{"a":35870,"t":"code","b":[237,91,11,128],"m":"ld","oa":32779,"o":"de,(base_rect_x1)"},{"a":35874,"t":"code","b":[237,75,13,128],"m":"ld","oa":32781,"o":"bc,(base_rect_x2)"},{"a":35878,"t":"code","b":[205,245,143],"m":"call","oa":36853,"o":"fill_outlined_trapezoid_regs"},{"a":35881,"t":"code","b":[201],"m":"ret"},{"a":35882,"l":"draw_wedge_high_y2","c":"Draws a wedge that has its full height at y2 and slopes down to the base at y1: the y2 wall through $82D0, the two triangular sides through $9579 with their apex at the top copy's y2, drawn in the pattern from $80B6 that $82D0 left at $80BE, and then the sloping face through $8FF5, in the pattern at $80B8, between the base copy's y1 edge and the top copy's y2 edge. The LD A,$F0 at the start is not read by anything. Reached only by the jump at $8BCD. Thirteen board records come here (types $40, $41, $42 and $44).","t":"code","b":[62,240],"m":"ld","o":"a,$F0","x":[35789]},{"a":35884,"t":"code","b":[205,208,130],"m":"call","oa":33488,"o":"draw_wall_y2"},{"a":35887,"t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)"},{"a":35890,"t":"code","b":[237,91,15,128],"m":"ld","oa":32783,"o":"de,(base_rect_y1)"},{"a":35894,"t":"code","b":[237,75,17,128],"m":"ld","oa":32785,"o":"bc,(base_rect_y2)"},{"a":35898,"t":"code","b":[217],"m":"exx"},{"a":35899,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":35902,"t":"code","b":[237,91,25,128],"m":"ld","oa":32793,"o":"de,(top_rect_y2)"},{"a":35906,"t":"code","b":[237,75,25,128],"m":"ld","oa":32793,"o":"bc,(top_rect_y2)"},{"a":35910,"t":"code","b":[205,121,149],"m":"call","oa":38265,"o":"fill_upright_quad_regs"},{"a":35913,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":35916,"t":"code","b":[237,91,25,128],"m":"ld","oa":32793,"o":"de,(top_rect_y2)"},{"a":35920,"t":"code","b":[237,75,25,128],"m":"ld","oa":32793,"o":"bc,(top_rect_y2)"},{"a":35924,"t":"code","b":[217],"m":"exx"},{"a":35925,"t":"code","b":[42,13,128],"m":"ld","oa":32781,"o":"hl,(base_rect_x2)"},{"a":35928,"t":"code","b":[237,91,15,128],"m":"ld","oa":32783,"o":"de,(base_rect_y1)"},{"a":35932,"t":"code","b":[237,75,17,128],"m":"ld","oa":32785,"o":"bc,(base_rect_y2)"},{"a":35936,"t":"code","b":[205,121,149],"m":"call","oa":38265,"o":"fill_upright_quad_regs"},{"a":35939,"t":"code","b":[42,184,128],"m":"ld","oa":32952,"o":"hl,(face_pattern_top)"},{"a":35942,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":35945,"t":"code","b":[42,15,128],"m":"ld","oa":32783,"o":"hl,(base_rect_y1)"},{"a":35948,"t":"code","b":[237,91,11,128],"m":"ld","oa":32779,"o":"de,(base_rect_x1)"},{"a":35952,"t":"code","b":[237,75,13,128],"m":"ld","oa":32781,"o":"bc,(base_rect_x2)"},{"a":35956,"t":"code","b":[217],"m":"exx"},{"a":35957,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":35960,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":35964,"t":"code","b":[237,75,21,128],"m":"ld","oa":32789,"o":"bc,(top_rect_x2)"},{"a":35968,"t":"code","b":[205,245,143],"m":"call","oa":36853,"o":"fill_outlined_trapezoid_regs"},{"a":35971,"t":"code","b":[201],"m":"ret"},{"a":35972,"l":"draw_half_box","c":"Entry for types $00-$3F, boxes cut in half along a diagonal of their plan. Seen from above each is a right-angled triangle with two full walls at the right angle and a third, slanting wall along the cut. Bits 5 and 4 of the type say which corner keeps the right angle: $30 the corner (x1, y2) at $8C9B, $20 the corner (x2, y2) at $8CF9, $10 the corner (x1, y1) at $8D57 and $00 the corner (x2, y1) at $8DB5. Reached only by the jump at $828C.","t":"code","b":[58,79,128],"m":"ld","oa":32847,"o":"a,(draw_type)","x":[33420]},{"a":35975,"t":"code","b":[230,48],"m":"and","o":"$30"},{"a":35977,"t":"code","b":[254,48],"m":"cp","o":"$30"},{"a":35979,"t":"code","b":[202,155,140],"m":"jp","oa":35995,"o":"z,draw_half_box_corner_x1_y2"},{"a":35982,"t":"code","b":[254,32],"m":"cp","o":"$20"},{"a":35984,"t":"code","b":[202,249,140],"m":"jp","oa":36089,"o":"z,draw_half_box_corner_x2_y2"},{"a":35987,"t":"code","b":[254,16],"m":"cp","o":"$10"},{"a":35989,"t":"code","b":[202,87,141],"m":"jp","oa":36183,"o":"z,draw_half_box_corner_x1_y1"},{"a":35992,"t":"code","b":[195,181,141],"m":"jp","oa":36277,"o":"draw_half_box_corner_x2_y1"},{"a":35995,"l":"draw_half_box_corner_x1_y2","c":"Draws the half box whose right angle is at (x1, y2). The x1 wall ($82F0) and the y2 wall ($82D0) come first. The slanting wall is the four-sided shape between the top copy's diagonal, from (x1, y1) to (x2, y2), and the base copy's; its four corners go to $801B-$8029 for the four-point fill at $9819, in the pattern that the last wall call left at $80BE, the word from $80B6. The triangular top, with corners (x1, y1), (x1, y2) and (x2, y2) of the top copy, is drawn last through $8FF5 in the pattern at $80B8. The two LD A,$F0 instructions do nothing, since the wall routines do not read A. Reached only by the jump at $8C8B. Three board records come here (types $30, $31 and $33).","t":"code","b":[62,240],"m":"ld","o":"a,$F0","x":[35979]},{"a":35997,"t":"code","b":[205,240,130],"m":"call","oa":33520,"o":"draw_wall_x1"},{"a":36000,"t":"code","b":[62,240],"m":"ld","o":"a,$F0"},{"a":36002,"t":"code","b":[205,208,130],"m":"call","oa":33488,"o":"draw_wall_y2"},{"a":36005,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":36008,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":36011,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":36014,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":36017,"t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)"},{"a":36020,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":36023,"t":"code","b":[42,15,128],"m":"ld","oa":32783,"o":"hl,(base_rect_y1)"},{"a":36026,"t":"code","b":[34,33,128],"m":"ld","oa":32801,"o":"(shape_y1),hl"},{"a":36029,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":36032,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":36035,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":36038,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":36041,"t":"code","b":[42,13,128],"m":"ld","oa":32781,"o":"hl,(base_rect_x2)"},{"a":36044,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":36047,"t":"code","b":[42,17,128],"m":"ld","oa":32785,"o":"hl,(base_rect_y2)"},{"a":36050,"t":"code","b":[34,41,128],"m":"ld","oa":32809,"o":"(shape_y3),hl"},{"a":36053,"t":"code","b":[205,25,152],"m":"call","oa":38937,"o":"fill_quad"},{"a":36056,"t":"code","b":[42,184,128],"m":"ld","oa":32952,"o":"hl,(face_pattern_top)"},{"a":36059,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":36062,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":36065,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":36069,"t":"code","b":[237,75,19,128],"m":"ld","oa":32787,"o":"bc,(top_rect_x1)"},{"a":36073,"t":"code","b":[217],"m":"exx"},{"a":36074,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":36077,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":36081,"t":"code","b":[237,75,21,128],"m":"ld","oa":32789,"o":"bc,(top_rect_x2)"},{"a":36085,"t":"code","b":[205,245,143],"m":"call","oa":36853,"o":"fill_outlined_trapezoid_regs"},{"a":36088,"t":"code","b":[201],"m":"ret"},{"a":36089,"l":"draw_half_box_corner_x2_y2","c":"Draws the half box whose right angle is at (x2, y2): the x2 wall ($8310) and the y2 wall ($82D0), the slanting wall through $9819 between the diagonal from (x2, y1) to (x1, y2) on the base copy and the same diagonal on the top copy, in the pattern from $80B6, and then the triangular top through $8FF5 in the pattern at $80B8, with corners (x2, y1), (x1, y2) and (x2, y2) of the top copy. Reached only by the jump at $8C90. One board record, of type $20, comes here.","t":"code","b":[62,240],"m":"ld","o":"a,$F0","x":[35984]},{"a":36091,"t":"code","b":[205,16,131],"m":"call","oa":33552,"o":"draw_wall_x2"},{"a":36094,"t":"code","b":[62,240],"m":"ld","o":"a,$F0"},{"a":36096,"t":"code","b":[205,208,130],"m":"call","oa":33488,"o":"draw_wall_y2"},{"a":36099,"t":"code","b":[42,13,128],"m":"ld","oa":32781,"o":"hl,(base_rect_x2)"},{"a":36102,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":36105,"t":"code","b":[42,15,128],"m":"ld","oa":32783,"o":"hl,(base_rect_y1)"},{"a":36108,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":36111,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":36114,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":36117,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":36120,"t":"code","b":[34,33,128],"m":"ld","oa":32801,"o":"(shape_y1),hl"},{"a":36123,"t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)"},{"a":36126,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":36129,"t":"code","b":[42,17,128],"m":"ld","oa":32785,"o":"hl,(base_rect_y2)"},{"a":36132,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":36135,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":36138,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":36141,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":36144,"t":"code","b":[34,41,128],"m":"ld","oa":32809,"o":"(shape_y3),hl"},{"a":36147,"t":"code","b":[205,25,152],"m":"call","oa":38937,"o":"fill_quad"},{"a":36150,"t":"code","b":[42,184,128],"m":"ld","oa":32952,"o":"hl,(face_pattern_top)"},{"a":36153,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":36156,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":36159,"t":"code","b":[237,91,21,128],"m":"ld","oa":32789,"o":"de,(top_rect_x2)"},{"a":36163,"t":"code","b":[237,75,21,128],"m":"ld","oa":32789,"o":"bc,(top_rect_x2)"},{"a":36167,"t":"code","b":[217],"m":"exx"},{"a":36168,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":36171,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":36175,"t":"code","b":[237,75,21,128],"m":"ld","oa":32789,"o":"bc,(top_rect_x2)"},{"a":36179,"t":"code","b":[205,245,143],"m":"call","oa":36853,"o":"fill_outlined_trapezoid_regs"},{"a":36182,"t":"code","b":[201],"m":"ret"},{"a":36183,"l":"draw_half_box_corner_x1_y1","c":"Draws the half box whose right angle is at (x1, y1): the x1 wall ($82F0) and the y1 wall ($82B0), the slanting wall through $9819 between the diagonal from (x2, y1) to (x1, y2) on the top copy and the same diagonal on the base copy, in the pattern from $80B6, and then the triangular top through $8FF5 in the pattern at $80B8, with corners (x1, y1), (x2, y1) and (x1, y2) of the top copy. Reached only by the jump at $8C95. One board record, of type $14, comes here.","t":"code","b":[62,240],"m":"ld","o":"a,$F0","x":[35989]},{"a":36185,"t":"code","b":[205,240,130],"m":"call","oa":33520,"o":"draw_wall_x1"},{"a":36188,"t":"code","b":[62,240],"m":"ld","o":"a,$F0"},{"a":36190,"t":"code","b":[205,176,130],"m":"call","oa":33456,"o":"draw_wall_y1"},{"a":36193,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":36196,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":36199,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":36202,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":36205,"t":"code","b":[42,13,128],"m":"ld","oa":32781,"o":"hl,(base_rect_x2)"},{"a":36208,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":36211,"t":"code","b":[42,15,128],"m":"ld","oa":32783,"o":"hl,(base_rect_y1)"},{"a":36214,"t":"code","b":[34,33,128],"m":"ld","oa":32801,"o":"(shape_y1),hl"},{"a":36217,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":36220,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":36223,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":36226,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":36229,"t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)"},{"a":36232,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":36235,"t":"code","b":[42,17,128],"m":"ld","oa":32785,"o":"hl,(base_rect_y2)"},{"a":36238,"t":"code","b":[34,41,128],"m":"ld","oa":32809,"o":"(shape_y3),hl"},{"a":36241,"t":"code","b":[205,25,152],"m":"call","oa":38937,"o":"fill_quad"},{"a":36244,"t":"code","b":[42,184,128],"m":"ld","oa":32952,"o":"hl,(face_pattern_top)"},{"a":36247,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":36250,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":36253,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":36257,"t":"code","b":[237,75,21,128],"m":"ld","oa":32789,"o":"bc,(top_rect_x2)"},{"a":36261,"t":"code","b":[217],"m":"exx"},{"a":36262,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":36265,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":36269,"t":"code","b":[237,75,19,128],"m":"ld","oa":32787,"o":"bc,(top_rect_x1)"},{"a":36273,"t":"code","b":[205,245,143],"m":"call","oa":36853,"o":"fill_outlined_trapezoid_regs"},{"a":36276,"t":"code","b":[201],"m":"ret"},{"a":36277,"l":"draw_half_box_corner_x2_y1","c":"Draws the half box whose right angle is at (x2, y1): the y1 wall ($82B0) and the x2 wall ($8310), the slanting wall through $9819 between the diagonal from (x1, y1) to (x2, y2) on the base copy and the same diagonal on the top copy, and then the triangular top through $8FF5 in the pattern at $80B8, with corners (x1, y1), (x2, y1) and (x2, y2) of the top copy. Because the x2 wall is the last one called here, the slanting wall takes the pattern from $80BA where the other three corners take $80B6. Reached only by the jump at $8C98. Two board records come here (types $01 and $06).","t":"code","b":[62,240],"m":"ld","o":"a,$F0","x":[35992]},{"a":36279,"t":"code","b":[205,176,130],"m":"call","oa":33456,"o":"draw_wall_y1"},{"a":36282,"t":"code","b":[62,240],"m":"ld","o":"a,$F0"},{"a":36284,"t":"code","b":[205,16,131],"m":"call","oa":33552,"o":"draw_wall_x2"},{"a":36287,"t":"code","b":[42,11,128],"m":"ld","oa":32779,"o":"hl,(base_rect_x1)"},{"a":36290,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":36293,"t":"code","b":[42,15,128],"m":"ld","oa":32783,"o":"hl,(base_rect_y1)"},{"a":36296,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":36299,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":36302,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":36305,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":36308,"t":"code","b":[34,33,128],"m":"ld","oa":32801,"o":"(shape_y1),hl"},{"a":36311,"t":"code","b":[42,13,128],"m":"ld","oa":32781,"o":"hl,(base_rect_x2)"},{"a":36314,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":36317,"t":"code","b":[42,17,128],"m":"ld","oa":32785,"o":"hl,(base_rect_y2)"},{"a":36320,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":36323,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":36326,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":36329,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":36332,"t":"code","b":[34,41,128],"m":"ld","oa":32809,"o":"(shape_y3),hl"},{"a":36335,"t":"code","b":[205,25,152],"m":"call","oa":38937,"o":"fill_quad"},{"a":36338,"t":"code","b":[42,184,128],"m":"ld","oa":32952,"o":"hl,(face_pattern_top)"},{"a":36341,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":36344,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":36347,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":36351,"t":"code","b":[237,75,21,128],"m":"ld","oa":32789,"o":"bc,(top_rect_x2)"},{"a":36355,"t":"code","b":[217],"m":"exx"},{"a":36356,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":36359,"t":"code","b":[237,91,21,128],"m":"ld","oa":32789,"o":"de,(top_rect_x2)"},{"a":36363,"t":"code","b":[237,75,21,128],"m":"ld","oa":32789,"o":"bc,(top_rect_x2)"},{"a":36367,"t":"code","b":[205,245,143],"m":"call","oa":36853,"o":"fill_outlined_trapezoid_regs"},{"a":36370,"t":"code","b":[201],"m":"ret"},{"a":36371,"l":"draw_rectangle","c":"Draws an outlined, filled rectangle from the four words at $801B (x1), $801F (x2), $801D (y1) and $8025 (y2), in the pattern at $80BE. It sets $80B4 to $81, which asks the fill for cleared rows at the top and bottom, copies the words to $802B, $802D, $802F and $8031 and runs on into the clipping at $8E30. Nine references: the top face at $82AD, the stripe band at $8993, six calls in the type $F6 routine ($BB87, $BBAC, $BBC9, $BBD6, $BC04 and $BC1C) and $EB55.","t":"code","b":[62,129],"m":"ld","o":"a,$81","x":[33453,35219,48007,48044,48073,48086,48132,48156,60245]},{"a":36373,"t":"code","b":[50,180,128],"m":"ld","oa":32948,"o":"(fill_outline_flag),a"},{"a":36376,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":36379,"t":"code","b":[34,43,128],"m":"ld","oa":32811,"o":"(extent_x1),hl"},{"a":36382,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":36385,"t":"code","b":[34,45,128],"m":"ld","oa":32813,"o":"(extent_x2),hl"},{"a":36388,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":36391,"t":"code","b":[34,47,128],"m":"ld","oa":32815,"o":"(extent_y1),hl"},{"a":36394,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":36397,"t":"code","b":[34,49,128],"m":"ld","oa":32817,"o":"(extent_y2),hl"},{"a":36400,"l":"clip_rectangle","c":"Clips the rectangle whose corners are the signed words at $802B (x1), $802D (x2), $802F (y1) and $8031 (y2) to the frame buffer and fills it. The pattern byte at $80BE is put in A' first. The routine returns with nothing drawn if x1 is over 255, x2 is negative, y1 is over 127 or y2 is negative. Otherwise a negative x1 becomes 0, an x2 over 255 becomes 255, a negative y1 becomes 0 and a y2 over 127 becomes 127, and the fill at $8E67 is entered with x1 in B, x2 in D, y1 in C and y2 in E. A side that was clipped is therefore still outlined, along the edge of the buffer. Entered from $8E13 and called from two places in the polygon code, $925E and $95D6.","t":"code","b":[58,190,128],"m":"ld","oa":32958,"o":"a,(fill_pattern)","x":[37470,38358]},{"a":36403,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":36404,"t":"code","b":[42,43,128],"m":"ld","oa":32811,"o":"hl,(extent_x1)"},{"a":36407,"t":"code","b":[69],"m":"ld","o":"b,l"},{"a":36408,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":36409,"t":"code","b":[167],"m":"and","o":"a"},{"a":36410,"t":"code","b":[40,3],"m":"jr","oa":36415,"o":"z,$8E3F"},{"a":36412,"t":"code","b":[240],"m":"ret","o":"p"},{"a":36413,"t":"code","b":[6,0],"m":"ld","o":"b,$00"},{"a":36415,"t":"code","b":[42,45,128],"m":"ld","oa":32813,"o":"hl,(extent_x2)","x":[36410]},{"a":36418,"t":"code","b":[85],"m":"ld","o":"d,l"},{"a":36419,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":36420,"t":"code","b":[167],"m":"and","o":"a"},{"a":36421,"t":"code","b":[40,3],"m":"jr","oa":36426,"o":"z,$8E4A"},{"a":36423,"t":"code","b":[248],"m":"ret","o":"m"},{"a":36424,"t":"code","b":[22,255],"m":"ld","o":"d,$FF"},{"a":36426,"t":"code","b":[42,47,128],"m":"ld","oa":32815,"o":"hl,(extent_y1)","x":[36421]},{"a":36429,"t":"code","b":[77],"m":"ld","o":"c,l"},{"a":36430,"t":"code","b":[203,37],"m":"sla","o":"l"},{"a":36432,"t":"code","b":[203,20],"m":"rl","o":"h"},{"a":36434,"t":"code","b":[40,3],"m":"jr","oa":36439,"o":"z,$8E57"},{"a":36436,"t":"code","b":[240],"m":"ret","o":"p"},{"a":36437,"t":"code","b":[14,0],"m":"ld","o":"c,$00"},{"a":36439,"t":"code","b":[42,49,128],"m":"ld","oa":32817,"o":"hl,(extent_y2)","x":[36434]},{"a":36442,"t":"code","b":[93],"m":"ld","o":"e,l"},{"a":36443,"t":"code","b":[203,37],"m":"sla","o":"l"},{"a":36445,"t":"code","b":[203,20],"m":"rl","o":"h"},{"a":36447,"t":"code","b":[40,3],"m":"jr","oa":36452,"o":"z,$8E64"},{"a":36449,"t":"code","b":[248],"m":"ret","o":"m"},{"a":36450,"t":"code","b":[30,127],"m":"ld","o":"e,$7F"},{"a":36452,"t":"code","b":[195,103,142],"m":"jp","oa":36455,"o":"fill_rectangle","x":[36447]},{"a":36455,"l":"fill_rectangle","c":"Fills the rectangle from column B to column D and row C to row E of the frame buffer; it returns at once when D is less than B or E is less than C. A cleared bit shows as paper and a set bit as ink, which are black and bright green once the new-game code at $758E has filled the play area's attributes with $44. On every row the pixels at columns B and D are cleared, which draws the left and right outline, and when bit 7 of $80B4 is set the whole first and last rows are cleared as well. Everything between is written a byte at a time with the complement of the pattern byte in A', so pattern $FF gives solid paper and $00 solid ink, and a pattern stays lined up with the byte columns of the screen. The routine takes keep and set masks for the two end bytes from the table at $8F00, indexed by x AND 7, works out the buffer address $F000 + 32 * row + column / 8, and stores the entry point of the row code in the operand of the JP at $8F87: $8F75 when both ends fall in one byte, otherwise $8F76 less two for each further byte column, which lands in the run of INC L and LD (HL),A pairs that ends at $8F74. With the row toggle at $80BF zero it draws the rows itself through $8F7E and $8F8A; with any other toggle it jumps to $8F9B, which exclusive-ORs the pattern with the toggle on alternate rows. Reached only by the jump at $8E64, from the instruction just before it.","t":"code","b":[122],"m":"ld","o":"a,d","x":[36452]},{"a":36456,"t":"code","b":[184],"m":"cp","o":"b"},{"a":36457,"t":"code","b":[216],"m":"ret","o":"c"},{"a":36458,"t":"code","b":[96],"m":"ld","o":"h,b"},{"a":36459,"t":"code","b":[106],"m":"ld","o":"l,d"},{"a":36460,"t":"code","b":[229],"m":"push","o":"hl"},{"a":36461,"t":"code","b":[217],"m":"exx"},{"a":36462,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":36463,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":36464,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":36466,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":36467,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":36468,"t":"code","b":[38,143],"m":"ld","o":"h,$8F"},{"a":36470,"t":"code","b":[70],"m":"ld","o":"b,(hl)"},{"a":36471,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":36473,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":36474,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":36475,"t":"code","b":[47],"m":"cpl"},{"a":36476,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":36477,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":36479,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":36480,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":36481,"t":"code","b":[47],"m":"cpl"},{"a":36482,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":36483,"t":"code","b":[203,34],"m":"sla","o":"d"},{"a":36485,"t":"code","b":[217],"m":"exx"},{"a":36486,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":36487,"t":"code","b":[230,248],"m":"and","o":"$F8"},{"a":36489,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":36490,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":36491,"t":"code","b":[230,248],"m":"and","o":"$F8"},{"a":36493,"t":"code","b":[149],"m":"sub","o":"l"},{"a":36494,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":36495,"t":"code","b":[32,14],"m":"jr","oa":36511,"o":"nz,$8E9F"},{"a":36497,"t":"code","b":[217],"m":"exx"},{"a":36498,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":36499,"t":"code","b":[178],"m":"or","o":"d"},{"a":36500,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":36501,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":36502,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":36503,"t":"code","b":[163],"m":"and","o":"e"},{"a":36504,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":36505,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":36506,"t":"code","b":[33,117,143],"m":"ld","o":"hl,$8F75"},{"a":36509,"t":"code","b":[24,15],"m":"jr","oa":36526,"o":"$8EAE"},{"a":36511,"t":"code","b":[203,60],"m":"srl","o":"h","x":[36495]},{"a":36513,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":36515,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":36516,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":36518,"t":"code","b":[217],"m":"exx"},{"a":36519,"t":"code","b":[33,118,143],"m":"ld","o":"hl,$8F76"},{"a":36522,"t":"code","b":[237,68],"m":"neg"},{"a":36524,"t":"code","b":[133],"m":"add","o":"a,l"},{"a":36525,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":36526,"t":"code","b":[34,136,143],"m":"ld","oa":36744,"o":"($8F88),hl","x":[36509]},{"a":36529,"t":"code","b":[217],"m":"exx"},{"a":36530,"t":"code","b":[104],"m":"ld","o":"l,b"},{"a":36531,"t":"code","b":[67],"m":"ld","o":"b,e"},{"a":36532,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":36533,"t":"code","b":[237,68],"m":"neg"},{"a":36535,"t":"code","b":[198,32],"m":"add","o":"a,$20"},{"a":36537,"t":"code","b":[248],"m":"ret","o":"m"},{"a":36538,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":36539,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":36541,"t":"code","b":[97],"m":"ld","o":"h,c"},{"a":36542,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":36544,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":36546,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":36548,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":36550,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":36552,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":36554,"t":"code","b":[62,240],"m":"ld","o":"a,$F0"},{"a":36556,"t":"code","b":[180],"m":"or","o":"h"},{"a":36557,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":36558,"t":"code","b":[58,191,128],"m":"ld","oa":32959,"o":"a,(fill_pattern_toggle)"},{"a":36561,"t":"code","b":[167],"m":"and","o":"a"},{"a":36562,"t":"code","b":[194,155,143],"m":"jp","oa":36763,"o":"nz,rect_dithered_start"},{"a":36565,"t":"code","b":[217],"m":"exx"},{"a":36566,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":36567,"t":"code","b":[47],"m":"cpl"},{"a":36568,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":36569,"t":"code","b":[161],"m":"and","o":"c"},{"a":36570,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":36571,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":36572,"t":"code","b":[163],"m":"and","o":"e"},{"a":36573,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":36574,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":36575,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":36576,"t":"code","b":[217],"m":"exx"},{"a":36577,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":36578,"t":"code","b":[145],"m":"sub","o":"c"},{"a":36579,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":36580,"t":"code","b":[216],"m":"ret","o":"c"},{"a":36581,"t":"code","b":[58,180,128],"m":"ld","oa":32948,"o":"a,(fill_outline_flag)"},{"a":36584,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":36586,"t":"code","b":[48,14],"m":"jr","oa":36602,"o":"nc,$8EFA"},{"a":36588,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":36589,"t":"code","b":[167],"m":"and","o":"a"},{"a":36590,"t":"code","b":[202,138,143],"m":"jp","oa":36746,"o":"z,rect_border_row"},{"a":36593,"t":"code","b":[205,138,143],"m":"call","oa":36746,"o":"rect_border_row"},{"a":36596,"t":"code","b":[205,126,143],"m":"call","oa":36734,"o":"rect_plain_rows"},{"a":36599,"t":"code","b":[195,138,143],"m":"jp","oa":36746,"o":"rect_border_row"},{"a":36602,"t":"code","b":[12],"m":"inc","o":"c","x":[36586]},{"a":36603,"t":"code","b":[12],"m":"inc","o":"c"},{"a":36604,"t":"code","b":[195,126,143],"m":"jp","oa":36734,"o":"rect_plain_rows"},{"a":36607,"l":"unused_byte_8eff","c":"One zero byte between the last instruction of the rectangle filler (the JP at $8EFC) and the mask tables, which start on the page boundary at $8F00. No instruction in the game names it, the word $8EFF occurs nowhere in the image, and it was neither read nor written in the recorded sessions. Purpose not established.","t":"byte","b":[0]},{"a":36608,"l":"mask_pixels_to_right","c":"Eight masks, one for each pixel position within a byte, counted 0 to 7 from the left (bit 7): entry n holds the bits to the right of pixel n, $7F, $3F, $1F, $0F, $07, $03, $01, $00. The rectangle filler at $8E30 reads it twice, at $8E76 with the rectangle's right x and at $8E7F with its left x, forming the address from H = $8F (loaded at $8E74) and L = x AND 7, which is why the table starts a page and why it has eight entries. Of the five instructions in the game that load $8F as the high byte of a table address, this is the only one whose low byte can be 0 to 7. For the right end the entry itself is the set of bits to keep and its complement shifted left once the bits to fill; for the left end the entry is the set of bits to fill and its complement shifted left once the bits to keep. The shift leaves the pixel at x out of both sets, so the filler clears it.","t":"byte","b":[127,63,31,15,7,3,1,0]},{"a":36616,"l":"mask_clear_pixel","c":"Eight masks with one zero bit: entry n is $FF with the bit of pixel n cleared, $7F, $BF, $DF, $EF, $F7, $FB, $FD, $FE, so that ANDing a buffer byte with it clears that pixel. Every reader forms the address as $8F00 + ((x AND 7) OR 8), so there are eight entries. Five instructions read it: $9347 and $9364 in the trapezoid set-up, for the left and right edge pixels; $BA15, which clears a single pixel; and $CF05 and $CF10, which turn two entries into masks for the ends of a run of pixels.","t":"byte","b":[127,191,223,239,247,251,253,254]},{"a":36624,"l":"mask_set_pixel","c":"Eight single-bit masks, $80 shifted right n times for pixel n: $80, $40, $20, $10, $08, $04, $02, $01. Nothing was found that reads them. Five instructions in the game load $8F as the high byte of a table address ($8E74, $9340, $9362, $BA13, $CEFB); each builds the low byte as x AND 7 or as (x AND 7) OR 8, which reaches $8F00-$8F0F and no further, no instruction names an address in $8F10-$8F17, and the recorded sessions did not read these bytes.","t":"byte","b":[128,64,32,16,8,4,2,1]},{"a":36632,"l":"unused_zeros_8f18","c":"Twenty-eight zero bytes between the mask tables and the fill chain that starts at $8F34. No instruction names an address in $8F18-$8F33, the table readers cannot index this far (see $8F10), and the bytes were neither read nor written in the recorded sessions. Purpose not established.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":36640,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":36648,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":36656,"t":"byte","b":[0,0,0,0]},{"a":36660,"l":"row_fill_chain","c":"The unrolled inner loop that fills the whole bytes of one row of the frame buffer: 32 pairs of INC L and LD (HL),A at $8F34-$8F73, a last INC L at $8F74 and RET C at $8F75. It is entered only through the JP at $8F87, whose operand is rewritten so that execution lands part of the way down: for a row whose left-end and right-end bytes are n columns apart the target is $8F76 - 2n, which runs n INC Ls and n - 1 stores, so the n - 1 bytes between the ends are set to A and HL finishes on the right-end byte. In a 32-byte row n is at most 31, so the lowest target is $8F38 and the two pairs at $8F34-$8F37 are never reached; with both ends in one byte the target is the RET C itself. With carry set the RET C returns to the caller of $8F87; with carry clear execution runs on into $8F76, which is how the plain rectangle loop at $8F7E uses the chain. Each byte filled costs 11 T-states (simulated: a rectangle one byte wider takes 11 more per row). $8F76-$8F7D is the end of the plain rectangle row: the fill byte goes back to A', the right-end byte becomes (old AND B') OR C', and DE is added to HL to reach the left end of the next row.","t":"code","b":[44],"m":"inc","o":"l"},{"a":36661,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36662,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36663,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36664,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36665,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36666,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36667,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36668,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36669,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36670,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36671,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36672,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36673,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36674,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36675,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36676,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36677,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36678,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36679,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36680,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36681,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36682,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36683,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36684,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36685,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36686,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36687,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36688,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36689,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36690,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36691,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36692,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36693,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36694,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36695,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36696,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36697,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36698,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36699,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36700,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36701,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36702,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36703,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36704,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36705,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36706,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36707,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36708,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36709,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36710,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36711,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36712,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36713,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36714,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36715,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36716,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36717,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36718,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36719,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36720,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36721,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36722,"t":"code","b":[44],"m":"inc","o":"l"},{"a":36723,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36724,"t":"code","b":[44],"m":"inc","o":"l","x":[36743]},{"a":36725,"t":"code","b":[216],"m":"ret","o":"c"},{"a":36726,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":36727,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":36728,"t":"code","b":[217],"m":"exx"},{"a":36729,"t":"code","b":[160],"m":"and","o":"b"},{"a":36730,"t":"code","b":[177],"m":"or","o":"c"},{"a":36731,"t":"code","b":[217],"m":"exx"},{"a":36732,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36733,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":36734,"l":"rect_plain_rows","c":"Row loop of the rectangle filler at $8E30 when there is one fill byte for every row, which is when ($80BF) is zero. On entry HL is the left-end byte of the first row, C the number of rows to draw plus one, DE is 32 less the number of byte columns between the two end bytes, and A' the fill byte, the complement of ($80BE). The alternate register set holds the end masks: D' the bits to keep in the left-end byte and E' the bits to write there, B' and C' the same for the right-end byte, the bits to write already ANDed with the fill byte. Each pass decrements C and returns at zero, writes the left-end byte as (old AND D') OR E', takes the fill byte into A, and goes through the JP at $8F87 with carry clear, so the chain fills the bytes between and runs on into $8F76 for the right-end byte and the step to the next row. Two references, both in $8E30: the CALL at $8EF4 for the rows between two border rows and the JP at $8EFC for a rectangle without them.","t":"code","b":[13],"m":"dec","o":"c","x":[36596,36604]},{"a":36735,"t":"code","b":[200],"m":"ret","o":"z"},{"a":36736,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":36737,"t":"code","b":[217],"m":"exx"},{"a":36738,"t":"code","b":[162],"m":"and","o":"d"},{"a":36739,"t":"code","b":[179],"m":"or","o":"e"},{"a":36740,"t":"code","b":[217],"m":"exx"},{"a":36741,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36742,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":36743,"l":"row_fill_jump","c":"The JP that enters the chain at $8F34 at a computed point; its operand at $8F88-$8F89 is rewritten once for every rectangle and once for every trapezoid row whose ends are in different bytes. Two instructions write it. $8EAE in the rectangle filler stores both bytes: $8F75 when the row's two ends share a byte, otherwise $8F76 less twice the number of byte columns between them, $8F74 down to $8F38. $9412 in the trapezoid row stores only the low byte, $76 less twice that number, for 1 to 31 columns, and relies on the high byte still being $8F. Every value is the address of an INC L in the chain or of the RET C at $8F75 (simulated for all 32 widths from $8EAE and all 31 from $9412). As assembled the operand is $8F74. It is reached by falling in from $8F86 with carry clear and by three CALLs with carry set, from $8F91, $8FEF and $9418; A is the byte to store and HL the byte before the first one to fill.","t":"code","b":[195,116,143],"m":"jp","oa":36724,"o":"$8F74","x":[36753,36847,37912]},{"a":36746,"l":"rect_border_row","c":"Draws one row of cleared pixels from the rectangle's left x to its right x, then steps HL to the next row. The left-end byte keeps only the bits in D', the bytes between are set to zero by calling $8F87 with A = 0 and carry set, the right-end byte keeps only the bits in B', and DE is added to HL. This is the top line and the bottom line of a rectangle drawn with bit 7 of ($80B4) set, and the whole of such a rectangle when it is one row high. Six references, all from the rectangle filler: $8EEE, $8EF1 and $8EF7 on its plain path and $8FBA, $8FBD and $8FC3 on its dithered path.","t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[36590,36593,36599,36794,36797,36803]},{"a":36747,"t":"code","b":[217],"m":"exx"},{"a":36748,"t":"code","b":[162],"m":"and","o":"d"},{"a":36749,"t":"code","b":[217],"m":"exx"},{"a":36750,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36751,"t":"code","b":[175],"m":"xor","o":"a"},{"a":36752,"t":"code","b":[55],"m":"scf"},{"a":36753,"t":"code","b":[205,135,143],"m":"call","oa":36743,"o":"row_fill_jump"},{"a":36756,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":36757,"t":"code","b":[217],"m":"exx"},{"a":36758,"t":"code","b":[160],"m":"and","o":"b"},{"a":36759,"t":"code","b":[217],"m":"exx"},{"a":36760,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36761,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":36762,"t":"code","b":[201],"m":"ret"},{"a":36763,"l":"rect_dithered_start","c":"The rectangle filler's path for a fill that alternates between two bytes row by row, entered by the JP NZ at $8ED2 when ($80BF) is not zero, with HL already the address of the first row's left-end byte. It chooses the first row's fill byte and leaves it in A': the complement of ($80BE) if bit 5 of the address's low byte is set, which is an odd row, otherwise that value XOR ($80BF). It then forms B - C, the number of rows less one, returning if it is negative, and does what the plain path does: with bit 7 of ($80B4) set a border row, the rows between through $8FDF and a second border row (one border row alone when the rectangle is one row high), otherwise all rows through $8FDF. In the bordered case the border row uses the first row but not its fill byte, so the fill that follows is one row out of phase with an unbordered rectangle and with the trapezoid filler: simulated with ($80BE) = $33 and ($80BF) = $FF, a bordered rectangle put $33 on odd rows and $CC on even rows, an unbordered one $CC on odd rows and $33 on even rows.","t":"code","b":[125],"m":"ld","o":"a,l","x":[36562]},{"a":36764,"t":"code","b":[217],"m":"exx"},{"a":36765,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":36766,"t":"code","b":[58,190,128],"m":"ld","oa":32958,"o":"a,(fill_pattern)"},{"a":36769,"t":"code","b":[47],"m":"cpl"},{"a":36770,"t":"code","b":[203,108],"m":"bit","o":"5,h"},{"a":36772,"t":"code","b":[32,5],"m":"jr","oa":36779,"o":"nz,$8FAB"},{"a":36774,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":36775,"t":"code","b":[58,191,128],"m":"ld","oa":32959,"o":"a,(fill_pattern_toggle)"},{"a":36778,"t":"code","b":[172],"m":"xor","o":"h"},{"a":36779,"t":"code","b":[8],"m":"ex","o":"af,af'","x":[36772]},{"a":36780,"t":"code","b":[217],"m":"exx"},{"a":36781,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":36782,"t":"code","b":[145],"m":"sub","o":"c"},{"a":36783,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":36784,"t":"code","b":[216],"m":"ret","o":"c"},{"a":36785,"t":"code","b":[58,180,128],"m":"ld","oa":32948,"o":"a,(fill_outline_flag)"},{"a":36788,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":36790,"t":"code","b":[48,14],"m":"jr","oa":36806,"o":"nc,$8FC6"},{"a":36792,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":36793,"t":"code","b":[167],"m":"and","o":"a"},{"a":36794,"t":"code","b":[202,138,143],"m":"jp","oa":36746,"o":"z,rect_border_row"},{"a":36797,"t":"code","b":[205,138,143],"m":"call","oa":36746,"o":"rect_border_row"},{"a":36800,"t":"code","b":[205,223,143],"m":"call","oa":36831,"o":"rect_dithered_rows"},{"a":36803,"t":"code","b":[195,138,143],"m":"jp","oa":36746,"o":"rect_border_row"},{"a":36806,"t":"code","b":[12],"m":"inc","o":"c","x":[36790]},{"a":36807,"t":"code","b":[12],"m":"inc","o":"c"},{"a":36808,"t":"code","b":[195,223,143],"m":"jp","oa":36831,"o":"rect_dithered_rows"},{"a":36811,"l":"rect_dithered_row_end","c":"Second half of a dithered rectangle row, reached by the JP at $8FF2 once the bytes between the ends are filled. Writes the right-end byte as (old AND B') OR (fill byte AND C'), XORs the fill byte in A' with ($80BF) ready for the next row, adds DE to HL and falls into the loop head at $8FDF. H' and L' serve as scratch here, and H is borrowed for the XOR and put back.","t":"code","b":[8],"m":"ex","o":"af,af'","x":[36850]},{"a":36812,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":36813,"t":"code","b":[217],"m":"exx"},{"a":36814,"t":"code","b":[160],"m":"and","o":"b"},{"a":36815,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":36816,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":36817,"t":"code","b":[161],"m":"and","o":"c"},{"a":36818,"t":"code","b":[180],"m":"or","o":"h"},{"a":36819,"t":"code","b":[217],"m":"exx"},{"a":36820,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36821,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":36822,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":36823,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":36824,"t":"code","b":[58,191,128],"m":"ld","oa":32959,"o":"a,(fill_pattern_toggle)"},{"a":36827,"t":"code","b":[172],"m":"xor","o":"h"},{"a":36828,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":36829,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":36830,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":36831,"l":"rect_dithered_rows","c":"Row loop of the dithered rectangle, with the same registers as $8F7E except that the bits to write in E' and C' have not been ANDed with a fill byte. Decrements C and returns at zero, writes the left-end byte as (old AND D') OR (fill byte AND E'), fills the bytes between with the fill byte by calling $8F87 with carry set, and jumps to $8FCB for the right end. Two references: the CALL at $8FC0 for the rows between two border rows and the JP at $8FC8 for a rectangle without them.","t":"code","b":[13],"m":"dec","o":"c","x":[36800,36808]},{"a":36832,"t":"code","b":[200],"m":"ret","o":"z"},{"a":36833,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":36834,"t":"code","b":[217],"m":"exx"},{"a":36835,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":36836,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":36837,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":36838,"t":"code","b":[162],"m":"and","o":"d"},{"a":36839,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":36840,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":36841,"t":"code","b":[163],"m":"and","o":"e"},{"a":36842,"t":"code","b":[180],"m":"or","o":"h"},{"a":36843,"t":"code","b":[217],"m":"exx"},{"a":36844,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":36845,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":36846,"t":"code","b":[55],"m":"scf"},{"a":36847,"t":"code","b":[205,135,143],"m":"call","oa":36743,"o":"row_fill_jump"},{"a":36850,"t":"code","b":[195,203,143],"m":"jp","oa":36811,"o":"rect_dithered_row_end"},{"a":36853,"l":"fill_outlined_trapezoid_regs","c":"Register entry of the fill for a face whose top and bottom edges are horizontal. The caller passes the bottom edge in the active register set, HL = y, DE = left x, BC = right x, and the top edge in the alternate set, HL' = y, DE' = left x, BC' = right x. They are stored in ($8025), ($8023), ($8027) and ($801D), ($801B), ($801F), and execution falls into $900C. Twelve references: the JPs at $82CD and $82ED, each the last instruction of a face stub, and CALLs from $8AF9, $8B22, $8B76, $8B9F, $8C26, $8C80, $8CF5, $8D53, $8DB1 and $8E0F. The four at $8C26, $8CF5, $8D53 and $8E0F were not executed in the recorded sessions.","t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl","x":[33485,33517,35577,35618,35702,35743,35878,35968,36085,36179,36273,36367]},{"a":36856,"t":"code","b":[237,83,35,128],"m":"ld","oa":32803,"o":"(shape_x2),de"},{"a":36860,"t":"code","b":[237,67,39,128],"m":"ld","oa":32807,"o":"(shape_x3),bc"},{"a":36864,"t":"code","b":[217],"m":"exx"},{"a":36865,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":36868,"t":"code","b":[237,83,27,128],"m":"ld","oa":32795,"o":"(shape_x0),de"},{"a":36872,"t":"code","b":[237,67,31,128],"m":"ld","oa":32799,"o":"(shape_x1),bc"},{"a":36876,"l":"fill_outlined_trapezoid","c":"Fills the trapezoid described by six variables: top edge on row ($801D) from x = ($801B) to x = ($801F), bottom edge on row ($8025) from x = ($8023) to x = ($8027). It sets the mode byte ($80B4) to $81, which makes $90F9 draw the first and last rows as lines of cleared pixels, and returns without drawing unless the top row is above the bottom row, so a caller that passes the edges in the other vertical order draws nothing. The four x values are copied to ($802B), ($802D), ($802F) and ($8031) and it jumps to $90F9 with HL = the bottom row and DE = the top row. Five references besides the fall-through from $8FF5: CALLs from $87A1, $87CF, $8968 and $89A2 and the JP at $D2BE. The two at $87A1 and $87CF were not executed in the recorded sessions.","t":"code","b":[62,129],"m":"ld","o":"a,$81","x":[34721,34767,35176,35234,53950]},{"a":36878,"t":"code","b":[50,180,128],"m":"ld","oa":32948,"o":"(fill_outline_flag),a"},{"a":36881,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":36884,"t":"code","b":[237,91,29,128],"m":"ld","oa":32797,"o":"de,(shape_y0)"},{"a":36888,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":36889,"t":"code","b":[167],"m":"and","o":"a"},{"a":36890,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":36892,"t":"code","b":[240],"m":"ret","o":"p"},{"a":36893,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":36894,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":36895,"t":"code","b":[237,75,27,128],"m":"ld","oa":32795,"o":"bc,(shape_x0)"},{"a":36899,"t":"code","b":[237,67,43,128],"m":"ld","oa":32811,"o":"(extent_x1),bc"},{"a":36903,"t":"code","b":[237,75,31,128],"m":"ld","oa":32799,"o":"bc,(shape_x1)"},{"a":36907,"t":"code","b":[237,67,45,128],"m":"ld","oa":32813,"o":"(extent_x2),bc"},{"a":36911,"t":"code","b":[237,75,35,128],"m":"ld","oa":32803,"o":"bc,(shape_x2)"},{"a":36915,"t":"code","b":[237,67,47,128],"m":"ld","oa":32815,"o":"(extent_y1),bc"},{"a":36919,"t":"code","b":[237,75,39,128],"m":"ld","oa":32807,"o":"bc,(shape_x3)"},{"a":36923,"t":"code","b":[237,67,49,128],"m":"ld","oa":32817,"o":"(extent_y2),bc"},{"a":36927,"t":"code","b":[195,249,144],"m":"jp","oa":37113,"o":"fill_trapezoid"},{"a":36930,"l":"classify_edge_ends","c":"Decides which end of a trapezoid the fill at $90F9 can start from, looking only at the high bytes of the four x values: ($802D) and ($8031), the right edge at the start and end rows, then ($802B) and ($802F), the left edge. A high byte of zero means the x is inside the buffer's 256 pixels. It returns A = $80 when an edge starts inside and ends outside (start from the start row), $81 when an edge starts outside and ends inside (start from the end row), as it also does for a right edge that starts negative and ends at 256 or more, and $82 when neither edge settles it. The right edge is tested first and its answer stands; the left edge is consulted only when the right edge is inside at both ends or starts at 256 or more and ends outside. In two cases it returns a coordinate's high byte in A instead, which matches none of the three values and makes the callers draw nothing: both right x values negative ($904D), and a left x that starts at 256 or more and ends outside ($9077). Three calls, from $9114, $912D and $917E. All 81 combinations of negative, inside and 256-or-more were simulated against this reading.","t":"code","b":[58,46,128],"m":"ld","oa":32814,"o":"a,(extent_x2_high)","x":[37140,37165,37246]},{"a":36933,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":36935,"t":"code","b":[48,7],"m":"jr","oa":36944,"o":"nc,$9050"},{"a":36937,"t":"code","b":[58,50,128],"m":"ld","oa":32818,"o":"a,(extent_y2_high)"},{"a":36940,"t":"code","b":[167],"m":"and","o":"a"},{"a":36941,"t":"code","b":[248],"m":"ret","o":"m"},{"a":36942,"t":"code","b":[24,53],"m":"jr","oa":36997,"o":"$9085"},{"a":36944,"t":"code","b":[40,8],"m":"jr","oa":36954,"o":"z,$905A","x":[36935]},{"a":36946,"t":"code","b":[58,50,128],"m":"ld","oa":32818,"o":"a,(extent_y2_high)"},{"a":36949,"t":"code","b":[167],"m":"and","o":"a"},{"a":36950,"t":"code","b":[32,10],"m":"jr","oa":36962,"o":"nz,$9062"},{"a":36952,"t":"code","b":[24,43],"m":"jr","oa":36997,"o":"$9085"},{"a":36954,"t":"code","b":[58,50,128],"m":"ld","oa":32818,"o":"a,(extent_y2_high)","x":[36944]},{"a":36957,"t":"code","b":[167],"m":"and","o":"a"},{"a":36958,"t":"code","b":[32,34],"m":"jr","oa":36994,"o":"nz,$9082"},{"a":36960,"t":"code","b":[24,0],"m":"jr","oa":36962,"o":"$9062"},{"a":36962,"t":"code","b":[58,44,128],"m":"ld","oa":32812,"o":"a,(extent_x1_high)","x":[36950,36960]},{"a":36965,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":36967,"t":"code","b":[48,8],"m":"jr","oa":36977,"o":"nc,$9071"},{"a":36969,"t":"code","b":[58,48,128],"m":"ld","oa":32816,"o":"a,(extent_y1_high)"},{"a":36972,"t":"code","b":[167],"m":"and","o":"a"},{"a":36973,"t":"code","b":[40,22],"m":"jr","oa":36997,"o":"z,$9085"},{"a":36975,"t":"code","b":[24,23],"m":"jr","oa":37000,"o":"$9088"},{"a":36977,"t":"code","b":[40,7],"m":"jr","oa":36986,"o":"z,$907A","x":[36967]},{"a":36979,"t":"code","b":[58,48,128],"m":"ld","oa":32816,"o":"a,(extent_y1_high)"},{"a":36982,"t":"code","b":[167],"m":"and","o":"a"},{"a":36983,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":36984,"t":"code","b":[24,11],"m":"jr","oa":36997,"o":"$9085"},{"a":36986,"t":"code","b":[58,48,128],"m":"ld","oa":32816,"o":"a,(extent_y1_high)","x":[36977]},{"a":36989,"t":"code","b":[167],"m":"and","o":"a"},{"a":36990,"t":"code","b":[32,2],"m":"jr","oa":36994,"o":"nz,$9082"},{"a":36992,"t":"code","b":[24,6],"m":"jr","oa":37000,"o":"$9088"},{"a":36994,"t":"code","b":[62,128],"m":"ld","o":"a,$80","x":[36958,36990]},{"a":36996,"t":"code","b":[201],"m":"ret"},{"a":36997,"t":"code","b":[62,129],"m":"ld","o":"a,$81","x":[36942,36952,36973,36984]},{"a":36999,"t":"code","b":[201],"m":"ret"},{"a":37000,"t":"code","b":[62,130],"m":"ld","o":"a,$82","x":[36975,36992]},{"a":37002,"t":"code","b":[201],"m":"ret"},{"a":37003,"l":"edge_x_at_row","c":"Finds the x at which an edge crosses a given row. The active register set holds three y values, HL = the row wanted, BC = the y of the edge's first end, DE = the y of its second end; the alternate set holds the x values, HL' at the first end and DE' at the second. If HL - BC or DE - BC is negative, or DE - BC is zero, it switches sets and returns the first end's x unchanged. Otherwise it leaves the low byte of HL - BC in A' and DE - BC in BC, switches sets and falls into $909E, which returns HL = x1 + (x2 - x1) * (row - y1) / (y2 - y1). Twelve calls: six from the quad splitter at $993E ($9974, $99B0, $99E2, $9A08, $9A46, $9A78), three from $9BBD, $9C31 and $9C97, and three from $E26F, $E2D6 and $E344. $90F7, the early exit, is EXX and RET.","t":"code","b":[167],"m":"and","o":"a","x":[39284,39344,39394,39432,39494,39544,39869,39985,40087,57967,58070,58180]},{"a":37004,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":37006,"t":"code","b":[250,247,144],"m":"jp","oa":37111,"o":"m,$90F7"},{"a":37009,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":37010,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37011,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":37012,"t":"code","b":[167],"m":"and","o":"a"},{"a":37013,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":37015,"t":"code","b":[250,247,144],"m":"jp","oa":37111,"o":"m,$90F7"},{"a":37018,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":37019,"t":"code","b":[77],"m":"ld","o":"c,l"},{"a":37020,"t":"code","b":[217],"m":"exx"},{"a":37021,"t":"code","b":[200],"m":"ret","o":"z"},{"a":37022,"l":"interpolate","c":"Linear interpolation: returns HL + (DE - HL) * A' / BC', where BC' is BC of the alternate register set. It takes the absolute difference of HL and DE, multiplies it by A' in eight shift-and-add steps ($90B0-$90BB), divides the 16-bit product by BC' with a restoring division ($90C1-$90E4) that first shifts the divisor up to the top of the word, and adds the quotient to the original HL or subtracts it, by the sign saved at $90A2. The quotient is rounded toward zero and is one byte: simulated on 1,500 random inputs the result was always HL plus or minus min(255, ((|DE - HL| * A') mod 65536) div BC'), so a step of more than 255 comes back as 255. Ten calls besides the fall-through from $908B: $9150, $915F, $91A1, $91B0, $91D2 and $91E1 where the trapezoid is clipped to the buffer's rows, and $96CF, $96F1, $9782 and $97A4 in the upright quad.","t":"code","b":[175],"m":"xor","o":"a","x":[37200,37215,37281,37296,37330,37345,38607,38641,38786,38820]},{"a":37023,"t":"code","b":[229],"m":"push","o":"hl"},{"a":37024,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":37026,"t":"code","b":[245],"m":"push","o":"af"},{"a":37027,"t":"code","b":[242,172,144],"m":"jp","oa":37036,"o":"p,$90AC"},{"a":37030,"t":"code","b":[175],"m":"xor","o":"a"},{"a":37031,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":37032,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":37033,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":37034,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":37036,"t":"code","b":[235],"m":"ex","o":"de,hl","x":[37027]},{"a":37037,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":37038,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":37039,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37040,"t":"code","b":[6,8],"m":"ld","o":"b,$08"},{"a":37042,"t":"code","b":[203,63],"m":"srl","o":"a","x":[37051]},{"a":37044,"t":"code","b":[48,1],"m":"jr","oa":37047,"o":"nc,$90B7"},{"a":37046,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":37047,"t":"code","b":[203,35],"m":"sla","o":"e","x":[37044]},{"a":37049,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":37051,"t":"code","b":[16,245],"m":"djnz","oa":37042,"o":"$90B2"},{"a":37053,"t":"code","b":[217],"m":"exx"},{"a":37054,"t":"code","b":[197],"m":"push","o":"bc"},{"a":37055,"t":"code","b":[217],"m":"exx"},{"a":37056,"t":"code","b":[209],"m":"pop","o":"de"},{"a":37057,"t":"code","b":[14,1],"m":"ld","o":"c,$01"},{"a":37059,"t":"code","b":[203,35],"m":"sla","o":"e","x":[37067]},{"a":37061,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":37063,"t":"code","b":[56,23],"m":"jr","oa":37088,"o":"c,$90E0"},{"a":37065,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":37067,"t":"code","b":[48,246],"m":"jr","oa":37059,"o":"nc,$90C3"},{"a":37069,"t":"code","b":[203,25],"m":"rr","o":"c"},{"a":37071,"t":"code","b":[24,15],"m":"jr","oa":37088,"o":"$90E0"},{"a":37073,"t":"code","b":[167],"m":"and","o":"a","x":[37092]},{"a":37074,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":37076,"t":"code","b":[56,5],"m":"jr","oa":37083,"o":"c,$90DB"},{"a":37078,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":37079,"t":"code","b":[176],"m":"or","o":"b"},{"a":37080,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":37081,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":37083,"t":"code","b":[25],"m":"add","o":"hl,de","x":[37076]},{"a":37084,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":37086,"t":"code","b":[56,6],"m":"jr","oa":37094,"o":"c,$90E6"},{"a":37088,"t":"code","b":[203,26],"m":"rr","o":"d","x":[37063,37071]},{"a":37090,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":37092,"t":"code","b":[24,235],"m":"jr","oa":37073,"o":"$90D1"},{"a":37094,"t":"code","b":[72],"m":"ld","o":"c,b","x":[37086]},{"a":37095,"t":"code","b":[6,0],"m":"ld","o":"b,$00"},{"a":37097,"t":"code","b":[241],"m":"pop","o":"af"},{"a":37098,"t":"code","b":[250,244,144],"m":"jp","oa":37108,"o":"m,$90F4"},{"a":37101,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":37102,"t":"code","b":[237,68],"m":"neg"},{"a":37104,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":37105,"t":"code","b":[40,1],"m":"jr","oa":37108,"o":"z,$90F4"},{"a":37107,"t":"code","b":[5],"m":"dec","o":"b"},{"a":37108,"t":"code","b":[225],"m":"pop","o":"hl","x":[37098,37105]},{"a":37109,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":37110,"t":"code","b":[201],"m":"ret"},{"a":37111,"t":"code","b":[217],"m":"exx","x":[37006,37015]},{"a":37112,"t":"code","b":[201],"m":"ret"},{"a":37113,"l":"fill_trapezoid","c":"Fills a trapezoid with horizontal top and bottom into the frame buffer at $F000, clipped to its 256 by 128 pixels. Rows count from 0 at $F000 to 127, and above and below in these comments mean smaller and larger row numbers. HL = the y of the end row and DE = the y of the start row, which must be the smaller; ($802B) and ($802D) are the left and right x on the start row and ($802F) and ($8031) on the end row, all signed 16-bit. It first puts the row step back to +32 by storing $0020 in the operand of the LD BC at $9561. It returns if the end row is above the buffer or the start row below it. With both rows inside it asks $9042 where to start: $80 or $82 goes to $9219 to walk down from the start row, $81 goes to $91F0 to walk up from the end row, anything else returns. A start row above the buffer is handled at $9127 and an end row below it at $916E. Each row drawn has the pixels between its two edges set to the fill pattern and the two edge pixels cleared, so the sloping sides come out as lines of cleared pixels; sideways clipping happens as the edges are walked. Fifteen references, all between $903F and $993A: the JPs at $903F and $963D and thirteen CALLs from the two quad fillers.","t":"code","b":[1,32,0],"m":"ld","o":"bc,$0020","x":[36927,38411,38461,38504,38546,38575,38678,38720,38754,38857,38899,38933,39145,39188,39226]},{"a":37116,"t":"code","b":[237,67,98,149],"m":"ld","oa":38242,"o":"($9562),bc"},{"a":37120,"t":"code","b":[69],"m":"ld","o":"b,l"},{"a":37121,"t":"code","b":[75],"m":"ld","o":"c,e"},{"a":37122,"t":"code","b":[203,37],"m":"sla","o":"l"},{"a":37124,"t":"code","b":[203,20],"m":"rl","o":"h"},{"a":37126,"t":"code","b":[216],"m":"ret","o":"c"},{"a":37127,"t":"code","b":[32,101],"m":"jr","oa":37230,"o":"nz,trapezoid_clip_bottom"},{"a":37129,"t":"code","b":[203,61],"m":"srl","o":"l"},{"a":37131,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":37133,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":37135,"t":"code","b":[56,22],"m":"jr","oa":37159,"o":"c,trapezoid_clip_top"},{"a":37137,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":37138,"t":"code","b":[203,59],"m":"srl","o":"e"},{"a":37140,"t":"code","b":[205,66,144],"m":"call","oa":36930,"o":"classify_edge_ends","x":[37227,37308]},{"a":37143,"t":"code","b":[254,128],"m":"cp","o":"$80"},{"a":37145,"t":"code","b":[202,25,146],"m":"jp","oa":37401,"o":"z,trapezoid_walk_down"},{"a":37148,"t":"code","b":[254,129],"m":"cp","o":"$81"},{"a":37150,"t":"code","b":[202,240,145],"m":"jp","oa":37360,"o":"z,trapezoid_walk_up"},{"a":37153,"t":"code","b":[254,130],"m":"cp","o":"$82"},{"a":37155,"t":"code","b":[202,25,146],"m":"jp","oa":37401,"o":"z,trapezoid_walk_down"},{"a":37158,"t":"code","b":[201],"m":"ret"},{"a":37159,"l":"trapezoid_clip_top","c":"Trapezoid whose start row is above the buffer. DE, doubled at $910B to test it, is put back, and C, the first row to draw, becomes 0. When $9042 answers $81 or $82 the fill walks up from the end row through $91F0 and stops at row 0, with nothing to compute. When it answers $80 the walk has to begin at row 0, so the two x values there are interpolated by $909E as x_start + (x_end - x_start) * (-y_start) / (y_end - y_start) and stored back in ($802B) and ($802D), DE becomes 0 and control returns to $9114 to classify again. Any other answer returns. $912B, two instructions in, is also where the JP at $91ED arrives.","t":"code","b":[203,26],"m":"rr","o":"d","x":[37135]},{"a":37161,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":37163,"t":"code","b":[14,0],"m":"ld","o":"c,$00","x":[37357]},{"a":37165,"t":"code","b":[205,66,144],"m":"call","oa":36930,"o":"classify_edge_ends"},{"a":37168,"t":"code","b":[254,129],"m":"cp","o":"$81"},{"a":37170,"t":"code","b":[202,240,145],"m":"jp","oa":37360,"o":"z,trapezoid_walk_up"},{"a":37173,"t":"code","b":[254,130],"m":"cp","o":"$82"},{"a":37175,"t":"code","b":[202,240,145],"m":"jp","oa":37360,"o":"z,trapezoid_walk_up"},{"a":37178,"t":"code","b":[254,128],"m":"cp","o":"$80"},{"a":37180,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":37181,"t":"code","b":[167],"m":"and","o":"a"},{"a":37182,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":37184,"t":"code","b":[77],"m":"ld","o":"c,l"},{"a":37185,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":37186,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":37187,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":37188,"t":"code","b":[237,68],"m":"neg"},{"a":37190,"t":"code","b":[245],"m":"push","o":"af"},{"a":37191,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37192,"t":"code","b":[217],"m":"exx"},{"a":37193,"t":"code","b":[42,43,128],"m":"ld","oa":32811,"o":"hl,(extent_x1)"},{"a":37196,"t":"code","b":[237,91,47,128],"m":"ld","oa":32815,"o":"de,(extent_y1)"},{"a":37200,"t":"code","b":[205,158,144],"m":"call","oa":37022,"o":"interpolate"},{"a":37203,"t":"code","b":[34,43,128],"m":"ld","oa":32811,"o":"(extent_x1),hl"},{"a":37206,"t":"code","b":[241],"m":"pop","o":"af"},{"a":37207,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37208,"t":"code","b":[42,45,128],"m":"ld","oa":32813,"o":"hl,(extent_x2)"},{"a":37211,"t":"code","b":[237,91,49,128],"m":"ld","oa":32817,"o":"de,(extent_y2)"},{"a":37215,"t":"code","b":[205,158,144],"m":"call","oa":37022,"o":"interpolate"},{"a":37218,"t":"code","b":[34,45,128],"m":"ld","oa":32813,"o":"(extent_x2),hl"},{"a":37221,"t":"code","b":[217],"m":"exx"},{"a":37222,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":37225,"t":"code","b":[75],"m":"ld","o":"c,e"},{"a":37226,"t":"code","b":[69],"m":"ld","o":"b,l"},{"a":37227,"t":"code","b":[195,20,145],"m":"jp","oa":37140,"o":"$9114"},{"a":37230,"l":"trapezoid_clip_bottom","c":"Trapezoid whose end row is below the buffer (128 or more). HL, doubled at $9102 to test it, is put back and B, the last row to draw, becomes 127. A start row that is negative as well goes to $91BF, and one that is itself 128 or more returns. When $9042 answers $80 or $82 the fill walks down from the start row through $9219 and stops at row 127. When it answers $81 the walk has to begin at the bottom, so the code from $918E interpolates the two x values with the factor (128 - y_start) / (y_end - y_start), which is their position on row 128, stores them in ($802F) and ($8031) as the values for row 127, sets HL to 127 and returns to $9114.","t":"code","b":[203,60],"m":"srl","o":"h","x":[37127]},{"a":37232,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":37234,"t":"code","b":[6,127],"m":"ld","o":"b,$7F"},{"a":37236,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":37238,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":37240,"t":"code","b":[218,191,145],"m":"jp","oa":37311,"o":"c,trapezoid_clip_both"},{"a":37243,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":37244,"t":"code","b":[203,59],"m":"srl","o":"e"},{"a":37246,"t":"code","b":[205,66,144],"m":"call","oa":36930,"o":"classify_edge_ends"},{"a":37249,"t":"code","b":[254,128],"m":"cp","o":"$80"},{"a":37251,"t":"code","b":[202,25,146],"m":"jp","oa":37401,"o":"z,trapezoid_walk_down"},{"a":37254,"t":"code","b":[254,130],"m":"cp","o":"$82"},{"a":37256,"t":"code","b":[202,25,146],"m":"jp","oa":37401,"o":"z,trapezoid_walk_down"},{"a":37259,"t":"code","b":[254,129],"m":"cp","o":"$81"},{"a":37261,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":37262,"t":"code","b":[167],"m":"and","o":"a"},{"a":37263,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":37265,"t":"code","b":[77],"m":"ld","o":"c,l"},{"a":37266,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":37267,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":37268,"t":"code","b":[62,128],"m":"ld","o":"a,$80"},{"a":37270,"t":"code","b":[147],"m":"sub","o":"e"},{"a":37271,"t":"code","b":[245],"m":"push","o":"af"},{"a":37272,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37273,"t":"code","b":[217],"m":"exx"},{"a":37274,"t":"code","b":[42,43,128],"m":"ld","oa":32811,"o":"hl,(extent_x1)"},{"a":37277,"t":"code","b":[237,91,47,128],"m":"ld","oa":32815,"o":"de,(extent_y1)"},{"a":37281,"t":"code","b":[205,158,144],"m":"call","oa":37022,"o":"interpolate"},{"a":37284,"t":"code","b":[34,47,128],"m":"ld","oa":32815,"o":"(extent_y1),hl"},{"a":37287,"t":"code","b":[241],"m":"pop","o":"af"},{"a":37288,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37289,"t":"code","b":[42,45,128],"m":"ld","oa":32813,"o":"hl,(extent_x2)"},{"a":37292,"t":"code","b":[237,91,49,128],"m":"ld","oa":32817,"o":"de,(extent_y2)"},{"a":37296,"t":"code","b":[205,158,144],"m":"call","oa":37022,"o":"interpolate"},{"a":37299,"t":"code","b":[34,49,128],"m":"ld","oa":32817,"o":"(extent_y2),hl"},{"a":37302,"t":"code","b":[217],"m":"exx"},{"a":37303,"t":"code","b":[33,127,0],"m":"ld","o":"hl,$007F"},{"a":37306,"t":"code","b":[75],"m":"ld","o":"c,e"},{"a":37307,"t":"code","b":[69],"m":"ld","o":"b,l"},{"a":37308,"t":"code","b":[195,20,145],"m":"jp","oa":37140,"o":"$9114"},{"a":37311,"l":"trapezoid_clip_both","c":"Trapezoid whose start row is above the buffer and whose end row is below it. The code repeats $918E-$91BC and ends with JP $912B, so the bottom ends are interpolated first and the top-clip code finishes the job. Unlike $9127 it does not undo the doubling of DE done at $9174-$9176, so the height it divides by is y_end - 2 * y_start, the factor is 128 - 2 * y_start, and the doubled DE later also reaches $9270 as part of the row count the slopes are computed from. Simulated with a trapezoid from y = -20 to y = 147, the sides came out several pixels from their true positions on row 0. Reached only by the JP C at $9178, and not executed in the recorded sessions.","t":"code","b":[167],"m":"and","o":"a","x":[37240]},{"a":37312,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":37314,"t":"code","b":[77],"m":"ld","o":"c,l"},{"a":37315,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":37316,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":37317,"t":"code","b":[62,128],"m":"ld","o":"a,$80"},{"a":37319,"t":"code","b":[147],"m":"sub","o":"e"},{"a":37320,"t":"code","b":[245],"m":"push","o":"af"},{"a":37321,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37322,"t":"code","b":[217],"m":"exx"},{"a":37323,"t":"code","b":[42,43,128],"m":"ld","oa":32811,"o":"hl,(extent_x1)"},{"a":37326,"t":"code","b":[237,91,47,128],"m":"ld","oa":32815,"o":"de,(extent_y1)"},{"a":37330,"t":"code","b":[205,158,144],"m":"call","oa":37022,"o":"interpolate"},{"a":37333,"t":"code","b":[34,47,128],"m":"ld","oa":32815,"o":"(extent_y1),hl"},{"a":37336,"t":"code","b":[241],"m":"pop","o":"af"},{"a":37337,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37338,"t":"code","b":[42,45,128],"m":"ld","oa":32813,"o":"hl,(extent_x2)"},{"a":37341,"t":"code","b":[237,91,49,128],"m":"ld","oa":32817,"o":"de,(extent_y2)"},{"a":37345,"t":"code","b":[205,158,144],"m":"call","oa":37022,"o":"interpolate"},{"a":37348,"t":"code","b":[34,49,128],"m":"ld","oa":32817,"o":"(extent_y2),hl"},{"a":37351,"t":"code","b":[217],"m":"exx"},{"a":37352,"t":"code","b":[33,127,0],"m":"ld","o":"hl,$007F"},{"a":37355,"t":"code","b":[75],"m":"ld","o":"c,e"},{"a":37356,"t":"code","b":[69],"m":"ld","o":"b,l"},{"a":37357,"t":"code","b":[195,43,145],"m":"jp","oa":37163,"o":"$912B"},{"a":37360,"l":"trapezoid_walk_up","c":"Sets the fill to run upward from the end row. It exchanges ($802B) with ($802F) and ($802D) with ($8031), so the start values are those of the bottom row, stores $FFE0 (-32) in the operand of the LD BC at $9561 as the row step, takes the first row from L, and joins $921B. Three references: the JP Z at $911E when $9042 answered $81, and the JP Zs at $9132 and $9137 when the start row is above the buffer and it answered $81 or $82.","t":"code","b":[217],"m":"exx","x":[37150,37170,37175]},{"a":37361,"t":"code","b":[42,43,128],"m":"ld","oa":32811,"o":"hl,(extent_x1)"},{"a":37364,"t":"code","b":[237,91,47,128],"m":"ld","oa":32815,"o":"de,(extent_y1)"},{"a":37368,"t":"code","b":[237,83,43,128],"m":"ld","oa":32811,"o":"(extent_x1),de"},{"a":37372,"t":"code","b":[34,47,128],"m":"ld","oa":32815,"o":"(extent_y1),hl"},{"a":37375,"t":"code","b":[42,45,128],"m":"ld","oa":32813,"o":"hl,(extent_x2)"},{"a":37378,"t":"code","b":[237,91,49,128],"m":"ld","oa":32817,"o":"de,(extent_y2)"},{"a":37382,"t":"code","b":[237,83,45,128],"m":"ld","oa":32813,"o":"(extent_x2),de"},{"a":37386,"t":"code","b":[34,49,128],"m":"ld","oa":32817,"o":"(extent_y2),hl"},{"a":37389,"t":"code","b":[1,224,255],"m":"ld","o":"bc,$FFE0"},{"a":37392,"t":"code","b":[237,67,98,149],"m":"ld","oa":38242,"o":"($9562),bc"},{"a":37396,"t":"code","b":[217],"m":"exx"},{"a":37397,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":37398,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37399,"t":"code","b":[24,2],"m":"jr","oa":37403,"o":"$921B"},{"a":37401,"l":"trapezoid_walk_down","c":"Common end of the entry code. The first row to draw, E on this path and L on the path from $91F0, is saved in ($80B3), and y_start - y_end is formed in HL. If that is zero the trapezoid is a single row: the smaller of the two left x values and the larger of the two right x values are taken and a line of cleared pixels is drawn between them by the rectangle filler at $8E30, with ($80B4) set to $81 for the call and put back after it. The row is stored for $8E30 as a word whose high byte is whatever is left in H, the high byte of the larger right x, so a one-row trapezoid whose right x is 256 or more draws nothing (simulated). If the difference is positive the routine returns. Otherwise, at $9268, A' is given B - C, the number of rows to draw less one, and $9270 is called. Four references to $9219, from $9119, $9123, $9183 and $9188.","t":"code","b":[123],"m":"ld","o":"a,e","x":[37145,37155,37251,37256]},{"a":37402,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37403,"t":"code","b":[8],"m":"ex","o":"af,af'","x":[37399]},{"a":37404,"t":"code","b":[50,179,128],"m":"ld","oa":32947,"o":"(fill_scratch),a"},{"a":37407,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":37408,"t":"code","b":[167],"m":"and","o":"a"},{"a":37409,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":37411,"t":"code","b":[32,67],"m":"jr","oa":37480,"o":"nz,$9268"},{"a":37413,"t":"code","b":[42,43,128],"m":"ld","oa":32811,"o":"hl,(extent_x1)"},{"a":37416,"t":"code","b":[237,91,47,128],"m":"ld","oa":32815,"o":"de,(extent_y1)"},{"a":37420,"t":"code","b":[167],"m":"and","o":"a"},{"a":37421,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":37423,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":37424,"t":"code","b":[242,52,146],"m":"jp","oa":37428,"o":"p,$9234"},{"a":37427,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":37428,"t":"code","b":[34,43,128],"m":"ld","oa":32811,"o":"(extent_x1),hl","x":[37424]},{"a":37431,"t":"code","b":[42,45,128],"m":"ld","oa":32813,"o":"hl,(extent_x2)"},{"a":37434,"t":"code","b":[237,91,49,128],"m":"ld","oa":32817,"o":"de,(extent_y2)"},{"a":37438,"t":"code","b":[167],"m":"and","o":"a"},{"a":37439,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":37441,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":37442,"t":"code","b":[250,70,146],"m":"jp","oa":37446,"o":"m,$9246"},{"a":37445,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":37446,"t":"code","b":[34,45,128],"m":"ld","oa":32813,"o":"(extent_x2),hl","x":[37442]},{"a":37449,"t":"code","b":[58,179,128],"m":"ld","oa":32947,"o":"a,(fill_scratch)"},{"a":37452,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":37453,"t":"code","b":[34,47,128],"m":"ld","oa":32815,"o":"(extent_y1),hl"},{"a":37456,"t":"code","b":[34,49,128],"m":"ld","oa":32817,"o":"(extent_y2),hl"},{"a":37459,"t":"code","b":[58,180,128],"m":"ld","oa":32948,"o":"a,(fill_outline_flag)"},{"a":37462,"t":"code","b":[50,179,128],"m":"ld","oa":32947,"o":"(fill_scratch),a"},{"a":37465,"t":"code","b":[62,129],"m":"ld","o":"a,$81"},{"a":37467,"t":"code","b":[50,180,128],"m":"ld","oa":32948,"o":"(fill_outline_flag),a"},{"a":37470,"t":"code","b":[205,48,142],"m":"call","oa":36400,"o":"clip_rectangle"},{"a":37473,"t":"code","b":[58,179,128],"m":"ld","oa":32947,"o":"a,(fill_scratch)"},{"a":37476,"t":"code","b":[50,180,128],"m":"ld","oa":32948,"o":"(fill_outline_flag),a"},{"a":37479,"t":"code","b":[201],"m":"ret"},{"a":37480,"t":"code","b":[240],"m":"ret","o":"p","x":[37411]},{"a":37481,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":37482,"t":"code","b":[145],"m":"sub","o":"c"},{"a":37483,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37484,"t":"code","b":[205,112,146],"m":"call","oa":37488,"o":"trapezoid_setup"},{"a":37487,"t":"code","b":[201],"m":"ret"},{"a":37488,"l":"trapezoid_setup","c":"Prepares the row loop and runs it. On entry HL = y_start - y_end, that is minus the number of row steps n between the two ends, A' = the number of rows to draw less one, and ($80B3) = the first row. For the left edge it forms dx = ($802F) - ($802B) and picks the loop body by writing the displacement of the JR at $94C8: 0 when dx is zero, $06 or $2C when it is negative, $55 or $70 when it is positive, the second of each pair when |dx| is n or more, an edge that moves a pixel a row or more. IX gets the error term, -n / 2 for the slower edges and |dx| / 2 for the faster. The right edge is treated the same way from ($8031) - ($802D), with the JR at $942D (0, $06, $23, $4B, $6F) and IY. The low bytes of |dx| + 1 go to ($8051) and ($8050) as pixel counts for the faster bodies, so the counts are wrong for an edge 256 or more pixels wide. The register set that is the alternate one during the loop is left holding BC = |dx| of the left edge, DE = |dx| of the right edge and HL = -n. Then the masks and the address: a start x whose high byte is not zero is replaced by column 0 with mask $7F on the left, or column 31 with mask $FE on the right, and that edge is made vertical by storing 0 in its JR; otherwise D and E get the one-zero-bit masks from $8F08. B is the right byte column less the left one and HL is $F000 + 32 * row + left column. With ($80B4) not zero the first row is drawn with $FF in A', which clears everything between the edges, the rows between with the pattern, and the last row with $FF again, stopping as soon as $93E1 returns carry clear; with ($80B4) zero every row gets the pattern. The pattern put in A' is ($80BE) on odd rows and ($80BE) XOR ($80BF) on even rows, by bit 5 of L. One call, from $926C.","t":"code","b":[229],"m":"push","o":"hl","x":[37484]},{"a":37489,"t":"code","b":[217],"m":"exx"},{"a":37490,"t":"code","b":[42,47,128],"m":"ld","oa":32815,"o":"hl,(extent_y1)"},{"a":37493,"t":"code","b":[237,91,43,128],"m":"ld","oa":32811,"o":"de,(extent_x1)"},{"a":37497,"t":"code","b":[175],"m":"xor","o":"a"},{"a":37498,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":37500,"t":"code","b":[40,67],"m":"jr","oa":37569,"o":"z,$92C1"},{"a":37502,"t":"code","b":[242,165,146],"m":"jp","oa":37541,"o":"p,$92A5"},{"a":37505,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":37506,"t":"code","b":[175],"m":"xor","o":"a"},{"a":37507,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":37508,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":37509,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":37511,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":37512,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":37513,"t":"code","b":[213],"m":"push","o":"de"},{"a":37514,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":37515,"t":"code","b":[48,11],"m":"jr","oa":37528,"o":"nc,$9298"},{"a":37517,"t":"code","b":[203,58],"m":"srl","o":"d"},{"a":37519,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":37521,"t":"code","b":[213],"m":"push","o":"de"},{"a":37522,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":37524,"t":"code","b":[62,44],"m":"ld","o":"a,$2C"},{"a":37526,"t":"code","b":[24,41],"m":"jr","oa":37569,"o":"$92C1"},{"a":37528,"t":"code","b":[237,82],"m":"sbc","o":"hl,de","x":[37515]},{"a":37530,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":37532,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":37534,"t":"code","b":[229],"m":"push","o":"hl"},{"a":37535,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":37537,"t":"code","b":[62,6],"m":"ld","o":"a,$06"},{"a":37539,"t":"code","b":[24,28],"m":"jr","oa":37569,"o":"$92C1"},{"a":37541,"t":"code","b":[235],"m":"ex","o":"de,hl","x":[37502]},{"a":37542,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":37543,"t":"code","b":[213],"m":"push","o":"de"},{"a":37544,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":37545,"t":"code","b":[48,11],"m":"jr","oa":37558,"o":"nc,$92B6"},{"a":37547,"t":"code","b":[203,58],"m":"srl","o":"d"},{"a":37549,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":37551,"t":"code","b":[213],"m":"push","o":"de"},{"a":37552,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":37554,"t":"code","b":[62,112],"m":"ld","o":"a,$70"},{"a":37556,"t":"code","b":[24,11],"m":"jr","oa":37569,"o":"$92C1"},{"a":37558,"t":"code","b":[237,82],"m":"sbc","o":"hl,de","x":[37545]},{"a":37560,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":37562,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":37564,"t":"code","b":[229],"m":"push","o":"hl"},{"a":37565,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":37567,"t":"code","b":[62,85],"m":"ld","o":"a,$55"},{"a":37569,"t":"code","b":[50,201,148],"m":"ld","oa":38089,"o":"($94C9),a","x":[37500,37526,37539,37556]},{"a":37572,"t":"code","b":[217],"m":"exx"},{"a":37573,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":37574,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":37575,"t":"code","b":[60],"m":"inc","o":"a"},{"a":37576,"t":"code","b":[50,81,128],"m":"ld","oa":32849,"o":"(fill_left_edge_count),a"},{"a":37579,"t":"code","b":[229],"m":"push","o":"hl"},{"a":37580,"t":"code","b":[217],"m":"exx"},{"a":37581,"t":"code","b":[42,49,128],"m":"ld","oa":32817,"o":"hl,(extent_y2)"},{"a":37584,"t":"code","b":[237,91,45,128],"m":"ld","oa":32813,"o":"de,(extent_x2)"},{"a":37588,"t":"code","b":[175],"m":"xor","o":"a"},{"a":37589,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":37591,"t":"code","b":[40,67],"m":"jr","oa":37660,"o":"z,$931C"},{"a":37593,"t":"code","b":[242,0,147],"m":"jp","oa":37632,"o":"p,$9300"},{"a":37596,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":37597,"t":"code","b":[175],"m":"xor","o":"a"},{"a":37598,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":37599,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":37600,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":37602,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":37603,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":37604,"t":"code","b":[213],"m":"push","o":"de"},{"a":37605,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":37606,"t":"code","b":[48,11],"m":"jr","oa":37619,"o":"nc,$92F3"},{"a":37608,"t":"code","b":[203,58],"m":"srl","o":"d"},{"a":37610,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":37612,"t":"code","b":[213],"m":"push","o":"de"},{"a":37613,"t":"code","b":[253,225],"m":"pop","o":"iy"},{"a":37615,"t":"code","b":[62,35],"m":"ld","o":"a,$23"},{"a":37617,"t":"code","b":[24,41],"m":"jr","oa":37660,"o":"$931C"},{"a":37619,"t":"code","b":[237,82],"m":"sbc","o":"hl,de","x":[37606]},{"a":37621,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":37623,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":37625,"t":"code","b":[229],"m":"push","o":"hl"},{"a":37626,"t":"code","b":[253,225],"m":"pop","o":"iy"},{"a":37628,"t":"code","b":[62,6],"m":"ld","o":"a,$06"},{"a":37630,"t":"code","b":[24,28],"m":"jr","oa":37660,"o":"$931C"},{"a":37632,"t":"code","b":[235],"m":"ex","o":"de,hl","x":[37593]},{"a":37633,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":37634,"t":"code","b":[213],"m":"push","o":"de"},{"a":37635,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":37636,"t":"code","b":[48,11],"m":"jr","oa":37649,"o":"nc,$9311"},{"a":37638,"t":"code","b":[203,58],"m":"srl","o":"d"},{"a":37640,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":37642,"t":"code","b":[213],"m":"push","o":"de"},{"a":37643,"t":"code","b":[253,225],"m":"pop","o":"iy"},{"a":37645,"t":"code","b":[62,111],"m":"ld","o":"a,$6F"},{"a":37647,"t":"code","b":[24,11],"m":"jr","oa":37660,"o":"$931C"},{"a":37649,"t":"code","b":[237,82],"m":"sbc","o":"hl,de","x":[37636]},{"a":37651,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":37653,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":37655,"t":"code","b":[229],"m":"push","o":"hl"},{"a":37656,"t":"code","b":[253,225],"m":"pop","o":"iy"},{"a":37658,"t":"code","b":[62,75],"m":"ld","o":"a,$4B"},{"a":37660,"t":"code","b":[50,46,148],"m":"ld","oa":37934,"o":"($942E),a","x":[37591,37617,37630,37647]},{"a":37663,"t":"code","b":[217],"m":"exx"},{"a":37664,"t":"code","b":[209],"m":"pop","o":"de"},{"a":37665,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":37666,"t":"code","b":[60],"m":"inc","o":"a"},{"a":37667,"t":"code","b":[50,80,128],"m":"ld","oa":32848,"o":"(fill_right_edge_count),a"},{"a":37670,"t":"code","b":[217],"m":"exx"},{"a":37671,"t":"code","b":[58,44,128],"m":"ld","oa":32812,"o":"a,(extent_x1_high)"},{"a":37674,"t":"code","b":[167],"m":"and","o":"a"},{"a":37675,"t":"code","b":[40,9],"m":"jr","oa":37686,"o":"z,$9336"},{"a":37677,"t":"code","b":[22,127],"m":"ld","o":"d,$7F"},{"a":37679,"t":"code","b":[175],"m":"xor","o":"a"},{"a":37680,"t":"code","b":[50,201,148],"m":"ld","oa":38089,"o":"($94C9),a"},{"a":37683,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":37684,"t":"code","b":[24,19],"m":"jr","oa":37705,"o":"$9349"},{"a":37686,"t":"code","b":[58,43,128],"m":"ld","oa":32811,"o":"a,(extent_x1)","x":[37675]},{"a":37689,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":37690,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":37692,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":37694,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":37696,"t":"code","b":[22,143],"m":"ld","o":"d,$8F"},{"a":37698,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":37700,"t":"code","b":[203,223],"m":"set","o":"3,a"},{"a":37702,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":37703,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":37704,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":37705,"t":"code","b":[58,46,128],"m":"ld","oa":32814,"o":"a,(extent_x2_high)","x":[37684]},{"a":37708,"t":"code","b":[167],"m":"and","o":"a"},{"a":37709,"t":"code","b":[40,10],"m":"jr","oa":37721,"o":"z,$9359"},{"a":37711,"t":"code","b":[175],"m":"xor","o":"a"},{"a":37712,"t":"code","b":[50,46,148],"m":"ld","oa":37934,"o":"($942E),a"},{"a":37715,"t":"code","b":[30,254],"m":"ld","o":"e,$FE"},{"a":37717,"t":"code","b":[62,31],"m":"ld","o":"a,$1F"},{"a":37719,"t":"code","b":[24,23],"m":"jr","oa":37744,"o":"$9370"},{"a":37721,"t":"code","b":[58,45,128],"m":"ld","oa":32813,"o":"a,(extent_x2)","x":[37709]},{"a":37724,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":37726,"t":"code","b":[203,223],"m":"set","o":"3,a"},{"a":37728,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":37729,"t":"code","b":[66],"m":"ld","o":"b,d"},{"a":37730,"t":"code","b":[22,143],"m":"ld","o":"d,$8F"},{"a":37732,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":37733,"t":"code","b":[80],"m":"ld","o":"d,b"},{"a":37734,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":37735,"t":"code","b":[58,45,128],"m":"ld","oa":32813,"o":"a,(extent_x2)"},{"a":37738,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":37740,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":37742,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":37744,"t":"code","b":[145],"m":"sub","o":"c","x":[37719]},{"a":37745,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":37746,"t":"code","b":[58,179,128],"m":"ld","oa":32947,"o":"a,(fill_scratch)"},{"a":37749,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":37750,"t":"code","b":[175],"m":"xor","o":"a"},{"a":37751,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":37753,"t":"code","b":[203,31],"m":"rr","o":"a"},{"a":37755,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":37757,"t":"code","b":[203,31],"m":"rr","o":"a"},{"a":37759,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":37761,"t":"code","b":[203,31],"m":"rr","o":"a"},{"a":37763,"t":"code","b":[177],"m":"or","o":"c"},{"a":37764,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":37765,"t":"code","b":[62,240],"m":"ld","o":"a,$F0"},{"a":37767,"t":"code","b":[180],"m":"or","o":"h"},{"a":37768,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":37769,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37770,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":37771,"t":"code","b":[58,180,128],"m":"ld","oa":32948,"o":"a,(fill_outline_flag)"},{"a":37774,"t":"code","b":[167],"m":"and","o":"a"},{"a":37775,"t":"code","b":[40,58],"m":"jr","oa":37835,"o":"z,$93CB"},{"a":37777,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":37778,"t":"code","b":[50,179,128],"m":"ld","oa":32947,"o":"(fill_scratch),a"},{"a":37781,"t":"code","b":[62,1],"m":"ld","o":"a,$01"},{"a":37783,"t":"code","b":[50,82,128],"m":"ld","oa":32850,"o":"(fill_rows_left),a"},{"a":37786,"t":"code","b":[62,255],"m":"ld","o":"a,$FF"},{"a":37788,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37789,"t":"code","b":[205,225,147],"m":"call","oa":37857,"o":"trapezoid_rows"},{"a":37792,"t":"code","b":[208],"m":"ret","o":"nc"},{"a":37793,"t":"code","b":[58,179,128],"m":"ld","oa":32947,"o":"a,(fill_scratch)"},{"a":37796,"t":"code","b":[61],"m":"dec","o":"a"},{"a":37797,"t":"code","b":[50,82,128],"m":"ld","oa":32850,"o":"(fill_rows_left),a"},{"a":37800,"t":"code","b":[248],"m":"ret","o":"m"},{"a":37801,"t":"code","b":[40,21],"m":"jr","oa":37824,"o":"z,$93C0"},{"a":37803,"t":"code","b":[58,190,128],"m":"ld","oa":32958,"o":"a,(fill_pattern)"},{"a":37806,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37807,"t":"code","b":[203,109],"m":"bit","o":"5,l"},{"a":37809,"t":"code","b":[32,9],"m":"jr","oa":37820,"o":"nz,$93BC"},{"a":37811,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":37812,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37813,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":37814,"t":"code","b":[58,191,128],"m":"ld","oa":32959,"o":"a,(fill_pattern_toggle)"},{"a":37817,"t":"code","b":[172],"m":"xor","o":"h"},{"a":37818,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37819,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":37820,"t":"code","b":[205,225,147],"m":"call","oa":37857,"o":"trapezoid_rows","x":[37809]},{"a":37823,"t":"code","b":[208],"m":"ret","o":"nc"},{"a":37824,"t":"code","b":[62,1],"m":"ld","o":"a,$01","x":[37801]},{"a":37826,"t":"code","b":[50,82,128],"m":"ld","oa":32850,"o":"(fill_rows_left),a"},{"a":37829,"t":"code","b":[62,255],"m":"ld","o":"a,$FF"},{"a":37831,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37832,"t":"code","b":[195,225,147],"m":"jp","oa":37857,"o":"trapezoid_rows"},{"a":37835,"t":"code","b":[58,190,128],"m":"ld","oa":32958,"o":"a,(fill_pattern)","x":[37775]},{"a":37838,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37839,"t":"code","b":[203,109],"m":"bit","o":"5,l"},{"a":37841,"t":"code","b":[32,9],"m":"jr","oa":37852,"o":"nz,$93DC"},{"a":37843,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":37844,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37845,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":37846,"t":"code","b":[58,191,128],"m":"ld","oa":32959,"o":"a,(fill_pattern_toggle)"},{"a":37849,"t":"code","b":[172],"m":"xor","o":"h"},{"a":37850,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37851,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":37852,"t":"code","b":[12],"m":"inc","o":"c","x":[37841]},{"a":37853,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":37854,"t":"code","b":[50,82,128],"m":"ld","oa":32850,"o":"(fill_rows_left),a"},{"a":37857,"l":"trapezoid_rows","c":"Draws ($8052) rows of a trapezoid. For each row HL is the left-end byte, B the number of byte columns from it to the right-end byte, D and E the masks whose single zero bit marks the left and right edge pixels, and A' the pattern. The pixels strictly between the two edge pixels are set to the complement of the pattern: in one byte when B is 0 ($93E8), otherwise the part of the left-end byte to the right of the edge pixel, the bytes between through the chain at $8F34 after the low byte of the JP operand at $8F88 has been set to $76 - 2 * B, and the part of the right-end byte to the left of the edge pixel. The JR at $942D then runs the right edge's body with HL on the right-end byte, $94C5 moves HL back and runs the left edge's body, and $9560 steps to the next row. It returns with carry set when the rows are done and with carry clear when a body finds its edge leaving the buffer on the far side. A negative B is not handled: the RET M at $93E5 comes after the two PUSH BC and so takes the pushed BC as its return address (simulated: with the left edge three byte columns to the right of the right edge, PC went to $FD1E, inside the frame buffer). Of 668,199 random shapes with their edges the right way round and no sloping edge spanning 256 pixels or more across, none got there; shapes with wider edges can, through the one-byte pixel counts and the one-byte quotient of $909E. A full-width row with vertical edges takes 816 T-states (simulated). Four references besides the fall-through from $93DE: $939D, $93BC, $93C8 and $9574.","t":"code","b":[197],"m":"push","o":"bc","x":[37789,37820,37832,38260]},{"a":37858,"t":"code","b":[197],"m":"push","o":"bc"},{"a":37859,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":37860,"t":"code","b":[167],"m":"and","o":"a"},{"a":37861,"t":"code","b":[248],"m":"ret","o":"m"},{"a":37862,"t":"code","b":[32,23],"m":"jr","oa":37887,"o":"nz,$93FF"},{"a":37864,"t":"code","b":[62,254],"m":"ld","o":"a,$FE"},{"a":37866,"t":"code","b":[146],"m":"sub","o":"d"},{"a":37867,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":37868,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":37869,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":37871,"t":"code","b":[214,254],"m":"sub","o":"$FE"},{"a":37873,"t":"code","b":[161],"m":"and","o":"c"},{"a":37874,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":37875,"t":"code","b":[182],"m":"or","o":"(hl)"},{"a":37876,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":37877,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":37878,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37879,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":37880,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37881,"t":"code","b":[161],"m":"and","o":"c"},{"a":37882,"t":"code","b":[168],"m":"xor","o":"b"},{"a":37883,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":37884,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":37885,"t":"code","b":[24,45],"m":"jr","oa":37932,"o":"$942C"},{"a":37887,"t":"code","b":[62,254],"m":"ld","o":"a,$FE","x":[37862]},{"a":37889,"t":"code","b":[146],"m":"sub","o":"d"},{"a":37890,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":37891,"t":"code","b":[182],"m":"or","o":"(hl)"},{"a":37892,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":37893,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":37894,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37895,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":37896,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37897,"t":"code","b":[161],"m":"and","o":"c"},{"a":37898,"t":"code","b":[168],"m":"xor","o":"b"},{"a":37899,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":37900,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":37901,"t":"code","b":[203,32],"m":"sla","o":"b"},{"a":37903,"t":"code","b":[62,118],"m":"ld","o":"a,$76"},{"a":37905,"t":"code","b":[144],"m":"sub","o":"b"},{"a":37906,"t":"code","b":[50,136,143],"m":"ld","oa":36744,"o":"($8F88),a"},{"a":37909,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37910,"t":"code","b":[47],"m":"cpl"},{"a":37911,"t":"code","b":[55],"m":"scf"},{"a":37912,"t":"code","b":[205,135,143],"m":"call","oa":36743,"o":"row_fill_jump"},{"a":37915,"t":"code","b":[47],"m":"cpl"},{"a":37916,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37917,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":37918,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":37920,"t":"code","b":[214,254],"m":"sub","o":"$FE"},{"a":37922,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":37923,"t":"code","b":[182],"m":"or","o":"(hl)"},{"a":37924,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":37925,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":37926,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37927,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":37928,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":37929,"t":"code","b":[161],"m":"and","o":"c"},{"a":37930,"t":"code","b":[168],"m":"xor","o":"b"},{"a":37931,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":37932,"t":"code","b":[193],"m":"pop","o":"bc","x":[37885]},{"a":37933,"l":"right_edge_select","c":"The JR whose displacement selects the loop body for the right edge. $931C writes it once for each trapezoid, from the edge's direction and slope; $9350 writes 0 when the edge starts outside the buffer and $9499 writes 0 when it runs into the buffer's last column. The five values and where they land: 0 at $942F (vertical), $06 at $9435 (moving left by less than a pixel a row), $23 at $9452 (moving left by a pixel a row or more), $4B at $947A (moving right by less than a pixel a row), $6F at $949E (moving right by a pixel a row or more). Each is the first instruction of a body; all five were reached in simulation, against each of the five left-edge cases. As assembled the byte is $6F.","t":"code","b":[24,111],"m":"jr","oa":38046,"o":"right_edge_shallow_right"},{"a":37935,"l":"right_edge_vertical","c":"Right edge body for an edge that stays in one pixel column: clears the edge pixel in the right-end byte with the mask in E and goes to $94C5. It serves a right edge whose two x values are equal, one whose start x is outside the buffer, and one that has run into the last column.","t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":37936,"t":"code","b":[163],"m":"and","o":"e"},{"a":37937,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":37938,"t":"code","b":[195,197,148],"m":"jp","oa":38085,"o":"left_edge_select"},{"a":37941,"l":"right_edge_steep_left","c":"Right edge body for an edge moving left by less than one pixel a row. It clears the edge pixel, then adds the right edge's |dx| to the error term in IY; when that carries it adds -n and rotates the mask in E one pixel to the left. When the zero bit wraps round the byte, L and the span B step one byte left, and if the byte just left was column 0 the edge has crossed the whole buffer and the routine returns with carry clear, which ends the fill.","t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":37942,"t":"code","b":[163],"m":"and","o":"e"},{"a":37943,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":37944,"t":"code","b":[217],"m":"exx"},{"a":37945,"t":"code","b":[253,25],"m":"add","o":"iy,de"},{"a":37947,"t":"code","b":[217],"m":"exx"},{"a":37948,"t":"code","b":[210,197,148],"m":"jp","oa":38085,"o":"nc,left_edge_select"},{"a":37951,"t":"code","b":[217],"m":"exx"},{"a":37952,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":37953,"t":"code","b":[253,25],"m":"add","o":"iy,de"},{"a":37955,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":37956,"t":"code","b":[217],"m":"exx"},{"a":37957,"t":"code","b":[203,3],"m":"rlc","o":"e"},{"a":37959,"t":"code","b":[218,197,148],"m":"jp","oa":38085,"o":"c,left_edge_select"},{"a":37962,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":37963,"t":"code","b":[45],"m":"dec","o":"l"},{"a":37964,"t":"code","b":[5],"m":"dec","o":"b"},{"a":37965,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":37967,"t":"code","b":[200],"m":"ret","o":"z"},{"a":37968,"t":"code","b":[24,115],"m":"jr","oa":38085,"o":"left_edge_select"},{"a":37970,"l":"right_edge_shallow_left","c":"Right edge body for an edge moving left by one pixel a row or more. With the count from ($8050) in C it clears the edge pixel and moves the mask one pixel left, adding -n to IY each time, until that addition no longer carries; then it adds |dx| back to IY, stores the byte, saves the count and goes to $94C5. The pixels cleared along the way are the edge's line on this row. It stops early, through $94C0, when the count reaches zero, and it returns with carry clear if the step left takes it out of column 0.","t":"code","b":[58,80,128],"m":"ld","oa":32848,"o":"a,(fill_right_edge_count)"},{"a":37973,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":37974,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":37975,"t":"code","b":[163],"m":"and","o":"e","x":[37997]},{"a":37976,"t":"code","b":[13],"m":"dec","o":"c"},{"a":37977,"t":"code","b":[40,101],"m":"jr","oa":38080,"o":"z,$94C0"},{"a":37979,"t":"code","b":[203,3],"m":"rlc","o":"e"},{"a":37981,"t":"code","b":[56,8],"m":"jr","oa":37991,"o":"c,$9467"},{"a":37983,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":37984,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":37985,"t":"code","b":[45],"m":"dec","o":"l"},{"a":37986,"t":"code","b":[5],"m":"dec","o":"b"},{"a":37987,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":37989,"t":"code","b":[200],"m":"ret","o":"z"},{"a":37990,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":37991,"t":"code","b":[217],"m":"exx","x":[37981]},{"a":37992,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":37993,"t":"code","b":[253,25],"m":"add","o":"iy,de"},{"a":37995,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":37996,"t":"code","b":[217],"m":"exx"},{"a":37997,"t":"code","b":[56,232],"m":"jr","oa":37975,"o":"c,$9457"},{"a":37999,"t":"code","b":[217],"m":"exx"},{"a":38000,"t":"code","b":[253,25],"m":"add","o":"iy,de"},{"a":38002,"t":"code","b":[217],"m":"exx"},{"a":38003,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":38004,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":38005,"t":"code","b":[50,80,128],"m":"ld","oa":32848,"o":"(fill_right_edge_count),a"},{"a":38008,"t":"code","b":[24,75],"m":"jr","oa":38085,"o":"left_edge_select"},{"a":38010,"l":"right_edge_steep_right","c":"Right edge body for an edge moving right by less than one pixel a row: the arithmetic of $9435 with the mask rotated right. When the zero bit wraps into the next byte, L and B step one byte right. If that takes L past column 31 the code at $9494 undoes the step, puts the zero bit back on the last pixel of the row and stores 0 at $942E, so that from the next row on the edge is a vertical line down the buffer's right-hand column.","t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":38011,"t":"code","b":[163],"m":"and","o":"e"},{"a":38012,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":38013,"t":"code","b":[217],"m":"exx"},{"a":38014,"t":"code","b":[253,25],"m":"add","o":"iy,de"},{"a":38016,"t":"code","b":[217],"m":"exx"},{"a":38017,"t":"code","b":[48,66],"m":"jr","oa":38085,"o":"nc,left_edge_select"},{"a":38019,"t":"code","b":[217],"m":"exx"},{"a":38020,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":38021,"t":"code","b":[253,25],"m":"add","o":"iy,de"},{"a":38023,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":38024,"t":"code","b":[217],"m":"exx"},{"a":38025,"t":"code","b":[203,11],"m":"rrc","o":"e"},{"a":38027,"t":"code","b":[56,56],"m":"jr","oa":38085,"o":"c,left_edge_select"},{"a":38029,"t":"code","b":[44],"m":"inc","o":"l"},{"a":38030,"t":"code","b":[4],"m":"inc","o":"b"},{"a":38031,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":38032,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":38034,"t":"code","b":[32,49],"m":"jr","oa":38085,"o":"nz,left_edge_select"},{"a":38036,"t":"code","b":[203,3],"m":"rlc","o":"e","x":[38065]},{"a":38038,"t":"code","b":[5],"m":"dec","o":"b"},{"a":38039,"t":"code","b":[45],"m":"dec","o":"l"},{"a":38040,"t":"code","b":[175],"m":"xor","o":"a"},{"a":38041,"t":"code","b":[50,46,148],"m":"ld","oa":37934,"o":"($942E),a"},{"a":38044,"t":"code","b":[24,39],"m":"jr","oa":38085,"o":"left_edge_select"},{"a":38046,"l":"right_edge_shallow_right","c":"Right edge body for an edge moving right by one pixel a row or more: the mirror of $9452, using the same count in ($8050). Stepping past column 31 goes to $9494, which pins the edge to the right-hand column as described at $947A. It ends at $94C0, which stores the byte being worked on and saves the count, and which $9452 also uses when its count runs out.","t":"code","b":[58,80,128],"m":"ld","oa":32848,"o":"a,(fill_right_edge_count)","x":[37933]},{"a":38049,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":38050,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":38051,"t":"code","b":[163],"m":"and","o":"e","x":[38074]},{"a":38052,"t":"code","b":[13],"m":"dec","o":"c"},{"a":38053,"t":"code","b":[40,25],"m":"jr","oa":38080,"o":"z,$94C0"},{"a":38055,"t":"code","b":[203,11],"m":"rrc","o":"e"},{"a":38057,"t":"code","b":[56,9],"m":"jr","oa":38068,"o":"c,$94B4"},{"a":38059,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":38060,"t":"code","b":[44],"m":"inc","o":"l"},{"a":38061,"t":"code","b":[4],"m":"inc","o":"b"},{"a":38062,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":38063,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":38065,"t":"code","b":[40,225],"m":"jr","oa":38036,"o":"z,$9494"},{"a":38067,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":38068,"t":"code","b":[217],"m":"exx","x":[38057]},{"a":38069,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":38070,"t":"code","b":[253,25],"m":"add","o":"iy,de"},{"a":38072,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":38073,"t":"code","b":[217],"m":"exx"},{"a":38074,"t":"code","b":[56,231],"m":"jr","oa":38051,"o":"c,$94A3"},{"a":38076,"t":"code","b":[217],"m":"exx"},{"a":38077,"t":"code","b":[253,25],"m":"add","o":"iy,de"},{"a":38079,"t":"code","b":[217],"m":"exx"},{"a":38080,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[37977,38053]},{"a":38081,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":38082,"t":"code","b":[50,80,128],"m":"ld","oa":32848,"o":"(fill_right_edge_count),a"},{"a":38085,"l":"left_edge_select","c":"Moves HL from the row's right-end byte back to its left-end byte by subtracting the span B from L, then the JR at $94C8 selects the loop body for the left edge. Its displacement at $94C9 is written by $92C1 once for each trapezoid; $9330 writes 0 when the edge starts outside the buffer and $94F1 writes 0 when it runs into the buffer's first column. The five values and where they land: 0 at $94CA (vertical), $06 at $94D0 (moving left by less than a pixel a row), $2C at $94F6 (moving left by a pixel a row or more), $55 at $951F (moving right by less than a pixel a row), $70 at $953A (moving right by a pixel a row or more). As assembled the byte is $70. Nine jumps from the right-edge bodies arrive at $94C5, and $94C0 falls into it.","t":"code","b":[125],"m":"ld","o":"a,l","x":[37938,37948,37959,37968,38008,38017,38027,38034,38044]},{"a":38086,"t":"code","b":[144],"m":"sub","o":"b"},{"a":38087,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":38088,"t":"code","b":[24,112],"m":"jr","oa":38202,"o":"left_edge_shallow_right"},{"a":38090,"l":"left_edge_vertical","c":"Left edge body for an edge that stays in one pixel column: clears the edge pixel in the left-end byte with the mask in D and goes to $9560. It serves a left edge whose two x values are equal, one whose start x is outside the buffer, and one that has run into the first column.","t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":38091,"t":"code","b":[162],"m":"and","o":"d"},{"a":38092,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":38093,"t":"code","b":[195,96,149],"m":"jp","oa":38240,"o":"trapezoid_next_row"},{"a":38096,"l":"left_edge_steep_left","c":"Left edge body for an edge moving left by less than one pixel a row. It clears the edge pixel and adds the left edge's |dx| to the error term in IX; when that carries it adds -n and rotates the mask in D one pixel to the left. When the zero bit wraps round the byte, L steps one byte left and the span B grows by one. If the byte just left was column 0 the code at $94EC undoes the step, puts the zero bit back on the first pixel of the row and stores 0 at $94C9, so that from the next row on the edge is a vertical line down the buffer's left-hand column.","t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":38097,"t":"code","b":[162],"m":"and","o":"d"},{"a":38098,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":38099,"t":"code","b":[217],"m":"exx"},{"a":38100,"t":"code","b":[221,9],"m":"add","o":"ix,bc"},{"a":38102,"t":"code","b":[217],"m":"exx"},{"a":38103,"t":"code","b":[210,96,149],"m":"jp","oa":38240,"o":"nc,trapezoid_next_row"},{"a":38106,"t":"code","b":[217],"m":"exx"},{"a":38107,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":38108,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":38110,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":38111,"t":"code","b":[217],"m":"exx"},{"a":38112,"t":"code","b":[203,2],"m":"rlc","o":"d"},{"a":38114,"t":"code","b":[218,96,149],"m":"jp","oa":38240,"o":"c,trapezoid_next_row"},{"a":38117,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":38118,"t":"code","b":[45],"m":"dec","o":"l"},{"a":38119,"t":"code","b":[4],"m":"inc","o":"b"},{"a":38120,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":38122,"t":"code","b":[32,116],"m":"jr","oa":38240,"o":"nz,trapezoid_next_row"},{"a":38124,"t":"code","b":[5],"m":"dec","o":"b","x":[38153]},{"a":38125,"t":"code","b":[44],"m":"inc","o":"l"},{"a":38126,"t":"code","b":[203,10],"m":"rrc","o":"d"},{"a":38128,"t":"code","b":[175],"m":"xor","o":"a"},{"a":38129,"t":"code","b":[50,201,148],"m":"ld","oa":38089,"o":"($94C9),a"},{"a":38132,"t":"code","b":[24,106],"m":"jr","oa":38240,"o":"trapezoid_next_row"},{"a":38134,"l":"left_edge_shallow_left","c":"Left edge body for an edge moving left by one pixel a row or more. With the count from ($8051) in C it clears the edge pixel and moves the mask one pixel left, adding -n to IX each time, until that addition no longer carries; then it adds |dx| back, stores the byte, saves the count and goes to $9560. Stepping left out of column 0 goes to $94EC, which pins the edge to the left-hand column as described at $94D0. When the count reaches zero it leaves through $955B.","t":"code","b":[58,81,128],"m":"ld","oa":32849,"o":"a,(fill_left_edge_count)"},{"a":38137,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":38138,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":38139,"t":"code","b":[162],"m":"and","o":"d","x":[38162]},{"a":38140,"t":"code","b":[13],"m":"dec","o":"c"},{"a":38141,"t":"code","b":[40,92],"m":"jr","oa":38235,"o":"z,$955B"},{"a":38143,"t":"code","b":[203,2],"m":"rlc","o":"d"},{"a":38145,"t":"code","b":[56,9],"m":"jr","oa":38156,"o":"c,$950C"},{"a":38147,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":38148,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":38149,"t":"code","b":[45],"m":"dec","o":"l"},{"a":38150,"t":"code","b":[4],"m":"inc","o":"b"},{"a":38151,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":38153,"t":"code","b":[40,225],"m":"jr","oa":38124,"o":"z,$94EC"},{"a":38155,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":38156,"t":"code","b":[217],"m":"exx","x":[38145]},{"a":38157,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":38158,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":38160,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":38161,"t":"code","b":[217],"m":"exx"},{"a":38162,"t":"code","b":[56,231],"m":"jr","oa":38139,"o":"c,$94FB"},{"a":38164,"t":"code","b":[217],"m":"exx"},{"a":38165,"t":"code","b":[221,9],"m":"add","o":"ix,bc"},{"a":38167,"t":"code","b":[217],"m":"exx"},{"a":38168,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":38169,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":38170,"t":"code","b":[50,81,128],"m":"ld","oa":32849,"o":"(fill_left_edge_count),a"},{"a":38173,"t":"code","b":[24,65],"m":"jr","oa":38240,"o":"trapezoid_next_row"},{"a":38175,"l":"left_edge_steep_right","c":"Left edge body for an edge moving right by less than one pixel a row: the arithmetic of $94D0 with the mask rotated right. When the zero bit wraps into the next byte, L steps one byte right and B shrinks by one; if that takes L past column 31 the left edge has left the buffer on the right and the routine returns with carry clear, which ends the fill.","t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":38176,"t":"code","b":[162],"m":"and","o":"d"},{"a":38177,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":38178,"t":"code","b":[217],"m":"exx"},{"a":38179,"t":"code","b":[221,9],"m":"add","o":"ix,bc"},{"a":38181,"t":"code","b":[217],"m":"exx"},{"a":38182,"t":"code","b":[48,56],"m":"jr","oa":38240,"o":"nc,trapezoid_next_row"},{"a":38184,"t":"code","b":[217],"m":"exx"},{"a":38185,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":38186,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":38188,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":38189,"t":"code","b":[217],"m":"exx"},{"a":38190,"t":"code","b":[203,10],"m":"rrc","o":"d"},{"a":38192,"t":"code","b":[56,46],"m":"jr","oa":38240,"o":"c,trapezoid_next_row"},{"a":38194,"t":"code","b":[44],"m":"inc","o":"l"},{"a":38195,"t":"code","b":[5],"m":"dec","o":"b"},{"a":38196,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":38197,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":38199,"t":"code","b":[200],"m":"ret","o":"z"},{"a":38200,"t":"code","b":[24,38],"m":"jr","oa":38240,"o":"trapezoid_next_row"},{"a":38202,"l":"left_edge_shallow_right","c":"Left edge body for an edge moving right by one pixel a row or more: the mirror of $94F6, using the same count in ($8051), except that stepping past column 31 returns with carry clear instead of pinning the edge. It ends at $955B, which stores the byte being worked on and saves the count before falling into $9560, and which $94F6 also uses when its count runs out.","t":"code","b":[58,81,128],"m":"ld","oa":32849,"o":"a,(fill_left_edge_count)","x":[38088]},{"a":38205,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":38206,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":38207,"t":"code","b":[162],"m":"and","o":"d","x":[38229]},{"a":38208,"t":"code","b":[13],"m":"dec","o":"c"},{"a":38209,"t":"code","b":[40,24],"m":"jr","oa":38235,"o":"z,$955B"},{"a":38211,"t":"code","b":[203,10],"m":"rrc","o":"d"},{"a":38213,"t":"code","b":[56,8],"m":"jr","oa":38223,"o":"c,$954F"},{"a":38215,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":38216,"t":"code","b":[44],"m":"inc","o":"l"},{"a":38217,"t":"code","b":[5],"m":"dec","o":"b"},{"a":38218,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":38219,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":38221,"t":"code","b":[200],"m":"ret","o":"z"},{"a":38222,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":38223,"t":"code","b":[217],"m":"exx","x":[38213]},{"a":38224,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":38225,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":38227,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":38228,"t":"code","b":[217],"m":"exx"},{"a":38229,"t":"code","b":[56,232],"m":"jr","oa":38207,"o":"c,$953F"},{"a":38231,"t":"code","b":[217],"m":"exx"},{"a":38232,"t":"code","b":[221,9],"m":"add","o":"ix,bc"},{"a":38234,"t":"code","b":[217],"m":"exx"},{"a":38235,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[38141,38209]},{"a":38236,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":38237,"t":"code","b":[50,81,128],"m":"ld","oa":32849,"o":"(fill_left_edge_count),a"},{"a":38240,"l":"trapezoid_next_row","c":"Steps a trapezoid to its next row. Adds the operand of the LD BC at $9561 to HL: $0020, a row down, as stored by $90FC at every entry to $90F9, or $FFE0, a row up, as stored by $9210 when the fill starts from the end row. Both stores are 16-bit and cover exactly the two operand bytes, $9562 and $9563. It then XORs the pattern in A' with ($80BF), decrements the row count in ($8052) and jumps back to $93E1, or returns with carry set when the count reaches zero. Nine jumps from the left-edge bodies arrive here, and $955B falls in.","t":"code","b":[197],"m":"push","o":"bc","x":[38093,38103,38114,38122,38132,38173,38182,38192,38200]},{"a":38241,"t":"code","b":[1,32,0],"m":"ld","o":"bc,$0020"},{"a":38244,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":38245,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":38246,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":38247,"t":"code","b":[58,191,128],"m":"ld","oa":32959,"o":"a,(fill_pattern_toggle)"},{"a":38250,"t":"code","b":[169],"m":"xor","o":"c"},{"a":38251,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":38252,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":38253,"t":"code","b":[58,82,128],"m":"ld","oa":32850,"o":"a,(fill_rows_left)"},{"a":38256,"t":"code","b":[61],"m":"dec","o":"a"},{"a":38257,"t":"code","b":[50,82,128],"m":"ld","oa":32850,"o":"(fill_rows_left),a"},{"a":38260,"t":"code","b":[194,225,147],"m":"jp","oa":37857,"o":"nz,trapezoid_rows"},{"a":38263,"t":"code","b":[55],"m":"scf"},{"a":38264,"t":"code","b":[201],"m":"ret"},{"a":38265,"l":"fill_upright_quad_regs","c":"Register entry of the fill for a face whose left and right edges are vertical. The active register set carries the right side, HL = x, DE = top y, BC = bottom y, stored in ($801F), ($8021) and ($8029); the alternate set carries the left side in the same order, stored in ($801B), ($801D) and ($8025). Execution falls into $9590. Eight references: the JPs at $830D and $832D, each the last instruction of a face stub, and CALLs from $8B42, $8BBF, $8BEC, $8C06, $8C46 and $8C60. The two at $8BEC and $8C06 were not executed in the recorded sessions.","t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl","x":[33549,33581,35650,35775,35820,35846,35910,35936]},{"a":38268,"t":"code","b":[237,83,33,128],"m":"ld","oa":32801,"o":"(shape_y1),de"},{"a":38272,"t":"code","b":[237,67,41,128],"m":"ld","oa":32809,"o":"(shape_y3),bc"},{"a":38276,"t":"code","b":[217],"m":"exx"},{"a":38277,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":38280,"t":"code","b":[237,83,29,128],"m":"ld","oa":32797,"o":"(shape_y0),de"},{"a":38284,"t":"code","b":[237,67,37,128],"m":"ld","oa":32805,"o":"(shape_y2),bc"},{"a":38288,"l":"fill_upright_quad","c":"Fills a quadrilateral with vertical left and right sides: the left side at x = ($801B) from row ($801D) down to row ($8025), the right side at x = ($801F) from row ($8021) down to row ($8029). It sets ($80B4) to 0 and returns unless the left x is less than the right x. Where the two sides overlap in y it fills a rectangle with the rectangle filler at $8E30, from one row below the lower of the two top corners to one row above the higher of the two bottom corners; when those limits are the wrong way round $8E30 draws nothing. The sloping top and bottom are added as triangles by $90F9, whose edge bodies draw the slopes as lines of cleared pixels. The code that follows the rectangle here deals with a left top corner higher than the right one: if the right side's top is above the left side's bottom, a triangle from the point (left x, row ($801D)) widening to the full width on row ($8021), then on to $966B; if it is not, the sides do not overlap and $96B3 takes over. A right top corner level with or above the left one goes to $9640. $9610 deals with two top corners on one row before the rectangle is drawn: the rectangle then starts one row below them, unless the right side has no height, which goes to $961D. Two CALLs, from $87FB and $8829, neither executed in the recorded sessions, besides the fall-through from $9579.","t":"code","b":[62,0],"m":"ld","o":"a,$00","x":[34811,34857]},{"a":38290,"t":"code","b":[50,180,128],"m":"ld","oa":32948,"o":"(fill_outline_flag),a"},{"a":38293,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":38296,"t":"code","b":[237,91,31,128],"m":"ld","oa":32799,"o":"de,(shape_x1)"},{"a":38300,"t":"code","b":[167],"m":"and","o":"a"},{"a":38301,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":38303,"t":"code","b":[240],"m":"ret","o":"p"},{"a":38304,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":38307,"t":"code","b":[237,91,33,128],"m":"ld","oa":32801,"o":"de,(shape_y1)"},{"a":38311,"t":"code","b":[167],"m":"and","o":"a"},{"a":38312,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":38314,"t":"code","b":[250,177,149],"m":"jp","oa":38321,"o":"m,$95B1"},{"a":38317,"t":"code","b":[40,97],"m":"jr","oa":38416,"o":"z,$9610"},{"a":38319,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":38320,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":38321,"t":"code","b":[19],"m":"inc","o":"de","x":[38314,38426]},{"a":38322,"t":"code","b":[237,83,47,128],"m":"ld","oa":32815,"o":"(extent_y1),de"},{"a":38326,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":38329,"t":"code","b":[34,43,128],"m":"ld","oa":32811,"o":"(extent_x1),hl"},{"a":38332,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":38335,"t":"code","b":[34,45,128],"m":"ld","oa":32813,"o":"(extent_x2),hl"},{"a":38338,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":38341,"t":"code","b":[237,91,41,128],"m":"ld","oa":32809,"o":"de,(shape_y3)"},{"a":38345,"t":"code","b":[167],"m":"and","o":"a"},{"a":38346,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":38348,"t":"code","b":[242,209,149],"m":"jp","oa":38353,"o":"p,$95D1"},{"a":38351,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":38352,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":38353,"t":"code","b":[27],"m":"dec","o":"de","x":[38348]},{"a":38354,"t":"code","b":[237,83,49,128],"m":"ld","oa":32817,"o":"(extent_y2),de"},{"a":38358,"t":"code","b":[205,48,142],"m":"call","oa":36400,"o":"clip_rectangle"},{"a":38361,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":38364,"t":"code","b":[237,91,33,128],"m":"ld","oa":32801,"o":"de,(shape_y1)"},{"a":38368,"t":"code","b":[167],"m":"and","o":"a"},{"a":38369,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":38371,"t":"code","b":[242,64,150],"m":"jp","oa":38464,"o":"p,upright_quad_top_right_higher"},{"a":38374,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":38375,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":38376,"t":"code","b":[237,75,37,128],"m":"ld","oa":32805,"o":"bc,(shape_y2)"},{"a":38380,"t":"code","b":[167],"m":"and","o":"a"},{"a":38381,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":38383,"t":"code","b":[242,179,150],"m":"jp","oa":38579,"o":"p,upright_quad_left_above_right"},{"a":38386,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":38387,"t":"code","b":[237,75,27,128],"m":"ld","oa":32795,"o":"bc,(shape_x0)"},{"a":38391,"t":"code","b":[237,67,43,128],"m":"ld","oa":32811,"o":"(extent_x1),bc"},{"a":38395,"t":"code","b":[237,67,47,128],"m":"ld","oa":32815,"o":"(extent_y1),bc"},{"a":38399,"t":"code","b":[237,67,45,128],"m":"ld","oa":32813,"o":"(extent_x2),bc"},{"a":38403,"t":"code","b":[237,75,31,128],"m":"ld","oa":32799,"o":"bc,(shape_x1)"},{"a":38407,"t":"code","b":[237,67,49,128],"m":"ld","oa":32817,"o":"(extent_y2),bc"},{"a":38411,"t":"code","b":[205,249,144],"m":"call","oa":37113,"o":"fill_trapezoid"},{"a":38414,"t":"code","b":[24,91],"m":"jr","oa":38507,"o":"upright_quad_bottom"},{"a":38416,"t":"code","b":[42,41,128],"m":"ld","oa":32809,"o":"hl,(shape_y3)","x":[38317]},{"a":38419,"t":"code","b":[167],"m":"and","o":"a"},{"a":38420,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":38422,"t":"code","b":[40,5],"m":"jr","oa":38429,"o":"z,upright_quad_flat_triangle"},{"a":38424,"t":"code","b":[107],"m":"ld","o":"l,e"},{"a":38425,"t":"code","b":[98],"m":"ld","o":"h,d"},{"a":38426,"t":"code","b":[195,177,149],"m":"jp","oa":38321,"o":"$95B1"},{"a":38429,"l":"upright_quad_flat_triangle","c":"The upright quad when both top corners and the right side's bottom corner are on one row, which leaves a triangle with a flat top from the left x to the right x and its point at (left x, row ($8025)). ($80B4) is set to $81, so the top row is drawn as a line of cleared pixels, and the triangle is passed to $90F9 with a JP; ($80B4) stays at $81 afterwards. Reached only by the JR Z at $9616, and not executed in the recorded sessions.","t":"code","b":[62,129],"m":"ld","o":"a,$81","x":[38422]},{"a":38431,"t":"code","b":[50,180,128],"m":"ld","oa":32948,"o":"(fill_outline_flag),a"},{"a":38434,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":38437,"t":"code","b":[237,75,27,128],"m":"ld","oa":32795,"o":"bc,(shape_x0)"},{"a":38441,"t":"code","b":[237,67,43,128],"m":"ld","oa":32811,"o":"(extent_x1),bc"},{"a":38445,"t":"code","b":[237,67,47,128],"m":"ld","oa":32815,"o":"(extent_y1),bc"},{"a":38449,"t":"code","b":[237,67,49,128],"m":"ld","oa":32817,"o":"(extent_y2),bc"},{"a":38453,"t":"code","b":[237,75,31,128],"m":"ld","oa":32799,"o":"bc,(shape_x1)"},{"a":38457,"t":"code","b":[237,67,45,128],"m":"ld","oa":32813,"o":"(extent_x2),bc"},{"a":38461,"t":"code","b":[195,249,144],"m":"jp","oa":37113,"o":"fill_trapezoid"},{"a":38464,"l":"upright_quad_top_right_higher","c":"Top of the upright quad when the right side's top corner is level with or above the left side's. If the left top is level with or below the right side's bottom corner, the sides do not overlap in y and $9766 takes over. Otherwise it fills the triangle from the point (right x, row ($8021)) widening leftward to the full width on row ($801D), and falls into $966B. When the two top corners are on one row the triangle is a single row, which $90F9 draws as a line of cleared pixels: the flat top edge. The SBC HL,DE at $964D and the ADD HL,DE at $9667 cancel out and their flags are not used. Reached only by the JP P at $95E3.","t":"code","b":[25],"m":"add","o":"hl,de","x":[38371]},{"a":38465,"t":"code","b":[237,75,41,128],"m":"ld","oa":32809,"o":"bc,(shape_y3)"},{"a":38469,"t":"code","b":[167],"m":"and","o":"a"},{"a":38470,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":38472,"t":"code","b":[242,102,151],"m":"jp","oa":38758,"o":"p,upright_quad_right_above_left"},{"a":38475,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":38476,"t":"code","b":[167],"m":"and","o":"a"},{"a":38477,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":38479,"t":"code","b":[237,75,31,128],"m":"ld","oa":32799,"o":"bc,(shape_x1)"},{"a":38483,"t":"code","b":[237,67,43,128],"m":"ld","oa":32811,"o":"(extent_x1),bc"},{"a":38487,"t":"code","b":[237,67,45,128],"m":"ld","oa":32813,"o":"(extent_x2),bc"},{"a":38491,"t":"code","b":[237,67,49,128],"m":"ld","oa":32817,"o":"(extent_y2),bc"},{"a":38495,"t":"code","b":[237,75,27,128],"m":"ld","oa":32795,"o":"bc,(shape_x0)"},{"a":38499,"t":"code","b":[237,67,47,128],"m":"ld","oa":32815,"o":"(extent_y1),bc"},{"a":38503,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":38504,"t":"code","b":[205,249,144],"m":"call","oa":37113,"o":"fill_trapezoid"},{"a":38507,"l":"upright_quad_bottom","c":"Bottom of the upright quad. If the right side's bottom corner is above the left side's, it fills the triangle from the full width on row ($8029) narrowing to the point (left x, row ($8025)). Otherwise it fills the triangle from the full width on row ($8025) narrowing to the point (right x, row ($8029)); with the two bottom corners on one row that is a single line of cleared pixels, the flat bottom edge. Each path ends with its own RET, back to the caller of $9590. Reached by the JR at $960E and by falling in from $9668.","t":"code","b":[42,41,128],"m":"ld","oa":32809,"o":"hl,(shape_y3)","x":[38414]},{"a":38510,"t":"code","b":[237,91,37,128],"m":"ld","oa":32805,"o":"de,(shape_y2)"},{"a":38514,"t":"code","b":[167],"m":"and","o":"a"},{"a":38515,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":38517,"t":"code","b":[242,150,150],"m":"jp","oa":38550,"o":"p,$9696"},{"a":38520,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":38521,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":38522,"t":"code","b":[237,75,27,128],"m":"ld","oa":32795,"o":"bc,(shape_x0)"},{"a":38526,"t":"code","b":[237,67,43,128],"m":"ld","oa":32811,"o":"(extent_x1),bc"},{"a":38530,"t":"code","b":[237,67,47,128],"m":"ld","oa":32815,"o":"(extent_y1),bc"},{"a":38534,"t":"code","b":[237,67,49,128],"m":"ld","oa":32817,"o":"(extent_y2),bc"},{"a":38538,"t":"code","b":[237,75,31,128],"m":"ld","oa":32799,"o":"bc,(shape_x1)"},{"a":38542,"t":"code","b":[237,67,45,128],"m":"ld","oa":32813,"o":"(extent_x2),bc"},{"a":38546,"t":"code","b":[205,249,144],"m":"call","oa":37113,"o":"fill_trapezoid"},{"a":38549,"t":"code","b":[201],"m":"ret"},{"a":38550,"t":"code","b":[25],"m":"add","o":"hl,de","x":[38517]},{"a":38551,"t":"code","b":[237,75,31,128],"m":"ld","oa":32799,"o":"bc,(shape_x1)"},{"a":38555,"t":"code","b":[237,67,45,128],"m":"ld","oa":32813,"o":"(extent_x2),bc"},{"a":38559,"t":"code","b":[237,67,47,128],"m":"ld","oa":32815,"o":"(extent_y1),bc"},{"a":38563,"t":"code","b":[237,67,49,128],"m":"ld","oa":32817,"o":"(extent_y2),bc"},{"a":38567,"t":"code","b":[237,75,27,128],"m":"ld","oa":32795,"o":"bc,(shape_x0)"},{"a":38571,"t":"code","b":[237,67,43,128],"m":"ld","oa":32811,"o":"(extent_x1),bc"},{"a":38575,"t":"code","b":[205,249,144],"m":"call","oa":37113,"o":"fill_trapezoid"},{"a":38578,"t":"code","b":[201],"m":"ret"},{"a":38579,"l":"upright_quad_left_above_right","c":"Upright quad whose left side lies wholly above its right side, row ($8021) being level with or below row ($8025), so that there is no rectangle and both sloping edges cross the middle. Two calls to $909E find the x at which the top edge reaches the row of the left side's bottom corner, stored in ($8023), and the x at which the bottom edge reaches the row of the right side's top corner, stored in ($8027). Three calls to $90F9 then fill the triangle between the left side and the top edge (rows ($801D) to ($8025)), the band between the two sloping edges (rows ($8025) to ($8021)) and the triangle between the bottom edge and the right side (rows ($8021) to ($8029)). Reached only by the JP P at $95EF.","t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)","x":[38383]},{"a":38582,"t":"code","b":[237,91,29,128],"m":"ld","oa":32797,"o":"de,(shape_y0)"},{"a":38586,"t":"code","b":[167],"m":"and","o":"a"},{"a":38587,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":38589,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":38590,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":38591,"t":"code","b":[42,33,128],"m":"ld","oa":32801,"o":"hl,(shape_y1)"},{"a":38594,"t":"code","b":[167],"m":"and","o":"a"},{"a":38595,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":38597,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":38598,"t":"code","b":[77],"m":"ld","o":"c,l"},{"a":38599,"t":"code","b":[217],"m":"exx"},{"a":38600,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":38603,"t":"code","b":[237,91,31,128],"m":"ld","oa":32799,"o":"de,(shape_x1)"},{"a":38607,"t":"code","b":[205,158,144],"m":"call","oa":37022,"o":"interpolate"},{"a":38610,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":38613,"t":"code","b":[42,33,128],"m":"ld","oa":32801,"o":"hl,(shape_y1)"},{"a":38616,"t":"code","b":[237,91,37,128],"m":"ld","oa":32805,"o":"de,(shape_y2)"},{"a":38620,"t":"code","b":[167],"m":"and","o":"a"},{"a":38621,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":38623,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":38624,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":38625,"t":"code","b":[42,41,128],"m":"ld","oa":32809,"o":"hl,(shape_y3)"},{"a":38628,"t":"code","b":[167],"m":"and","o":"a"},{"a":38629,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":38631,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":38632,"t":"code","b":[77],"m":"ld","o":"c,l"},{"a":38633,"t":"code","b":[217],"m":"exx"},{"a":38634,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":38637,"t":"code","b":[237,91,31,128],"m":"ld","oa":32799,"o":"de,(shape_x1)"},{"a":38641,"t":"code","b":[205,158,144],"m":"call","oa":37022,"o":"interpolate"},{"a":38644,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":38647,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":38650,"t":"code","b":[237,91,29,128],"m":"ld","oa":32797,"o":"de,(shape_y0)"},{"a":38654,"t":"code","b":[237,75,27,128],"m":"ld","oa":32795,"o":"bc,(shape_x0)"},{"a":38658,"t":"code","b":[237,67,43,128],"m":"ld","oa":32811,"o":"(extent_x1),bc"},{"a":38662,"t":"code","b":[237,67,45,128],"m":"ld","oa":32813,"o":"(extent_x2),bc"},{"a":38666,"t":"code","b":[237,67,47,128],"m":"ld","oa":32815,"o":"(extent_y1),bc"},{"a":38670,"t":"code","b":[237,75,35,128],"m":"ld","oa":32803,"o":"bc,(shape_x2)"},{"a":38674,"t":"code","b":[237,67,49,128],"m":"ld","oa":32817,"o":"(extent_y2),bc"},{"a":38678,"t":"code","b":[205,249,144],"m":"call","oa":37113,"o":"fill_trapezoid"},{"a":38681,"t":"code","b":[42,33,128],"m":"ld","oa":32801,"o":"hl,(shape_y1)"},{"a":38684,"t":"code","b":[237,91,37,128],"m":"ld","oa":32805,"o":"de,(shape_y2)"},{"a":38688,"t":"code","b":[237,75,27,128],"m":"ld","oa":32795,"o":"bc,(shape_x0)"},{"a":38692,"t":"code","b":[237,67,43,128],"m":"ld","oa":32811,"o":"(extent_x1),bc"},{"a":38696,"t":"code","b":[237,75,35,128],"m":"ld","oa":32803,"o":"bc,(shape_x2)"},{"a":38700,"t":"code","b":[237,67,45,128],"m":"ld","oa":32813,"o":"(extent_x2),bc"},{"a":38704,"t":"code","b":[237,75,39,128],"m":"ld","oa":32807,"o":"bc,(shape_x3)"},{"a":38708,"t":"code","b":[237,67,47,128],"m":"ld","oa":32815,"o":"(extent_y1),bc"},{"a":38712,"t":"code","b":[237,75,31,128],"m":"ld","oa":32799,"o":"bc,(shape_x1)"},{"a":38716,"t":"code","b":[237,67,49,128],"m":"ld","oa":32817,"o":"(extent_y2),bc"},{"a":38720,"t":"code","b":[205,249,144],"m":"call","oa":37113,"o":"fill_trapezoid"},{"a":38723,"t":"code","b":[42,41,128],"m":"ld","oa":32809,"o":"hl,(shape_y3)"},{"a":38726,"t":"code","b":[237,91,33,128],"m":"ld","oa":32801,"o":"de,(shape_y1)"},{"a":38730,"t":"code","b":[237,75,39,128],"m":"ld","oa":32807,"o":"bc,(shape_x3)"},{"a":38734,"t":"code","b":[237,67,43,128],"m":"ld","oa":32811,"o":"(extent_x1),bc"},{"a":38738,"t":"code","b":[237,75,31,128],"m":"ld","oa":32799,"o":"bc,(shape_x1)"},{"a":38742,"t":"code","b":[237,67,45,128],"m":"ld","oa":32813,"o":"(extent_x2),bc"},{"a":38746,"t":"code","b":[237,67,47,128],"m":"ld","oa":32815,"o":"(extent_y1),bc"},{"a":38750,"t":"code","b":[237,67,49,128],"m":"ld","oa":32817,"o":"(extent_y2),bc"},{"a":38754,"t":"code","b":[205,249,144],"m":"call","oa":37113,"o":"fill_trapezoid"},{"a":38757,"t":"code","b":[201],"m":"ret"},{"a":38758,"l":"upright_quad_right_above_left","c":"Mirror of $96B3 for a right side lying wholly above the left side, row ($801D) being level with or below row ($8029). ($8023) receives the x at which the top edge reaches the row of the right side's bottom corner and ($8027) the x at which the bottom edge reaches the row of the left side's top corner; the three pieces run from row ($8021) to ($8029), from ($8029) to ($801D) and from ($801D) to ($8025). Reached only by the JP P at $9648.","t":"code","b":[42,41,128],"m":"ld","oa":32809,"o":"hl,(shape_y3)","x":[38472]},{"a":38761,"t":"code","b":[237,91,33,128],"m":"ld","oa":32801,"o":"de,(shape_y1)"},{"a":38765,"t":"code","b":[167],"m":"and","o":"a"},{"a":38766,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":38768,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":38769,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":38770,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":38773,"t":"code","b":[167],"m":"and","o":"a"},{"a":38774,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":38776,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":38777,"t":"code","b":[77],"m":"ld","o":"c,l"},{"a":38778,"t":"code","b":[217],"m":"exx"},{"a":38779,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":38782,"t":"code","b":[237,91,27,128],"m":"ld","oa":32795,"o":"de,(shape_x0)"},{"a":38786,"t":"code","b":[205,158,144],"m":"call","oa":37022,"o":"interpolate"},{"a":38789,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":38792,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":38795,"t":"code","b":[237,91,41,128],"m":"ld","oa":32809,"o":"de,(shape_y3)"},{"a":38799,"t":"code","b":[167],"m":"and","o":"a"},{"a":38800,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":38802,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":38803,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":38804,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":38807,"t":"code","b":[167],"m":"and","o":"a"},{"a":38808,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":38810,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":38811,"t":"code","b":[77],"m":"ld","o":"c,l"},{"a":38812,"t":"code","b":[217],"m":"exx"},{"a":38813,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":38816,"t":"code","b":[237,91,27,128],"m":"ld","oa":32795,"o":"de,(shape_x0)"},{"a":38820,"t":"code","b":[205,158,144],"m":"call","oa":37022,"o":"interpolate"},{"a":38823,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":38826,"t":"code","b":[42,41,128],"m":"ld","oa":32809,"o":"hl,(shape_y3)"},{"a":38829,"t":"code","b":[237,91,33,128],"m":"ld","oa":32801,"o":"de,(shape_y1)"},{"a":38833,"t":"code","b":[237,75,31,128],"m":"ld","oa":32799,"o":"bc,(shape_x1)"},{"a":38837,"t":"code","b":[237,67,43,128],"m":"ld","oa":32811,"o":"(extent_x1),bc"},{"a":38841,"t":"code","b":[237,67,45,128],"m":"ld","oa":32813,"o":"(extent_x2),bc"},{"a":38845,"t":"code","b":[237,67,49,128],"m":"ld","oa":32817,"o":"(extent_y2),bc"},{"a":38849,"t":"code","b":[237,75,35,128],"m":"ld","oa":32803,"o":"bc,(shape_x2)"},{"a":38853,"t":"code","b":[237,67,47,128],"m":"ld","oa":32815,"o":"(extent_y1),bc"},{"a":38857,"t":"code","b":[205,249,144],"m":"call","oa":37113,"o":"fill_trapezoid"},{"a":38860,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":38863,"t":"code","b":[237,91,41,128],"m":"ld","oa":32809,"o":"de,(shape_y3)"},{"a":38867,"t":"code","b":[237,75,35,128],"m":"ld","oa":32803,"o":"bc,(shape_x2)"},{"a":38871,"t":"code","b":[237,67,43,128],"m":"ld","oa":32811,"o":"(extent_x1),bc"},{"a":38875,"t":"code","b":[237,75,31,128],"m":"ld","oa":32799,"o":"bc,(shape_x1)"},{"a":38879,"t":"code","b":[237,67,45,128],"m":"ld","oa":32813,"o":"(extent_x2),bc"},{"a":38883,"t":"code","b":[237,75,27,128],"m":"ld","oa":32795,"o":"bc,(shape_x0)"},{"a":38887,"t":"code","b":[237,67,47,128],"m":"ld","oa":32815,"o":"(extent_y1),bc"},{"a":38891,"t":"code","b":[237,75,39,128],"m":"ld","oa":32807,"o":"bc,(shape_x3)"},{"a":38895,"t":"code","b":[237,67,49,128],"m":"ld","oa":32817,"o":"(extent_y2),bc"},{"a":38899,"t":"code","b":[205,249,144],"m":"call","oa":37113,"o":"fill_trapezoid"},{"a":38902,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":38905,"t":"code","b":[237,91,29,128],"m":"ld","oa":32797,"o":"de,(shape_y0)"},{"a":38909,"t":"code","b":[237,75,27,128],"m":"ld","oa":32795,"o":"bc,(shape_x0)"},{"a":38913,"t":"code","b":[237,67,43,128],"m":"ld","oa":32811,"o":"(extent_x1),bc"},{"a":38917,"t":"code","b":[237,67,47,128],"m":"ld","oa":32815,"o":"(extent_y1),bc"},{"a":38921,"t":"code","b":[237,67,49,128],"m":"ld","oa":32817,"o":"(extent_y2),bc"},{"a":38925,"t":"code","b":[237,75,39,128],"m":"ld","oa":32807,"o":"bc,(shape_x3)"},{"a":38929,"t":"code","b":[237,67,45,128],"m":"ld","oa":32813,"o":"(extent_x2),bc"},{"a":38933,"t":"code","b":[205,249,144],"m":"call","oa":37113,"o":"fill_trapezoid"},{"a":38936,"t":"code","b":[201],"m":"ret"},{"a":38937,"l":"fill_quad","c":"Fills a convex quadrilateral given as four corners, V0 = (($801B), ($801D)), V1 = (($801F), ($8021)), V2 = (($8023), ($8025)) and V3 = (($8027), ($8029)), x then y, whose outline runs V0, V1, V3, V2. It wants the higher of V0 and V1 in the V1 slot: if V0 is the higher it exchanges V0 with V1 and V2 with V3 in the variables themselves, calls $993E, and exchanges the left and right x values that come back; otherwise it calls $993E directly. $9886 then draws. The quad appears when its highest corner is V0 or V1 and the outline in that order runs clockwise, taking x to the right and rows downward, and otherwise not, except that a sliver a pixel or two wide can pass wound either way. Of 200,000 random convex quads tested, the 61,805 that met both conditions were all drawn, and of the other 138,195 only twelve such slivers were. Six references: CALLs from $8CD5, $8D33, $8D91, $8DEF and $BA83 and the JP at $A8BE, of which only $8D91 and $A8BE were executed in the recorded sessions.","t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)","x":[36053,36147,36241,36335,43198,47747]},{"a":38940,"t":"code","b":[237,91,33,128],"m":"ld","oa":32801,"o":"de,(shape_y1)"},{"a":38944,"t":"code","b":[167],"m":"and","o":"a"},{"a":38945,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":38947,"t":"code","b":[250,44,152],"m":"jp","oa":38956,"o":"m,$982C"},{"a":38950,"t":"code","b":[205,62,153],"m":"call","oa":39230,"o":"quad_levels"},{"a":38953,"t":"code","b":[195,134,152],"m":"jp","oa":39046,"o":"fill_quad_bands"},{"a":38956,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)","x":[38947]},{"a":38959,"t":"code","b":[237,91,31,128],"m":"ld","oa":32799,"o":"de,(shape_x1)"},{"a":38963,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":38966,"t":"code","b":[237,83,27,128],"m":"ld","oa":32795,"o":"(shape_x0),de"},{"a":38970,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":38973,"t":"code","b":[237,91,33,128],"m":"ld","oa":32801,"o":"de,(shape_y1)"},{"a":38977,"t":"code","b":[34,33,128],"m":"ld","oa":32801,"o":"(shape_y1),hl"},{"a":38980,"t":"code","b":[237,83,29,128],"m":"ld","oa":32797,"o":"(shape_y0),de"},{"a":38984,"t":"code","b":[42,35,128],"m":"ld","oa":32803,"o":"hl,(shape_x2)"},{"a":38987,"t":"code","b":[237,91,39,128],"m":"ld","oa":32807,"o":"de,(shape_x3)"},{"a":38991,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":38994,"t":"code","b":[237,83,35,128],"m":"ld","oa":32803,"o":"(shape_x2),de"},{"a":38998,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":39001,"t":"code","b":[237,91,41,128],"m":"ld","oa":32809,"o":"de,(shape_y3)"},{"a":39005,"t":"code","b":[34,41,128],"m":"ld","oa":32809,"o":"(shape_y3),hl"},{"a":39008,"t":"code","b":[237,83,37,128],"m":"ld","oa":32805,"o":"(shape_y2),de"},{"a":39012,"t":"code","b":[205,62,153],"m":"call","oa":39230,"o":"quad_levels"},{"a":39015,"t":"code","b":[42,61,128],"m":"ld","oa":32829,"o":"hl,(probe_top)"},{"a":39018,"t":"code","b":[237,91,63,128],"m":"ld","oa":32831,"o":"de,(probe_ramp)"},{"a":39022,"t":"code","b":[34,63,128],"m":"ld","oa":32831,"o":"(probe_ramp),hl"},{"a":39025,"t":"code","b":[237,83,61,128],"m":"ld","oa":32829,"o":"(probe_top),de"},{"a":39029,"t":"code","b":[42,65,128],"m":"ld","oa":32833,"o":"hl,(probe_x_sign)"},{"a":39032,"t":"code","b":[237,91,67,128],"m":"ld","oa":32835,"o":"de,(quad_row3_right_x)"},{"a":39036,"t":"code","b":[34,67,128],"m":"ld","oa":32835,"o":"(quad_row3_right_x),hl"},{"a":39039,"t":"code","b":[237,83,65,128],"m":"ld","oa":32833,"o":"(probe_x_sign),de"},{"a":39043,"t":"code","b":[195,134,152],"m":"jp","oa":39046,"o":"fill_quad_bands"},{"a":39046,"l":"fill_quad_bands","c":"Draws the quad from what $993E left: four rows from top to bottom in ($8033), ($8035), ($8037) and ($8039); the top corner's x in ($803B); the left and right x on the second row in ($803D) and ($803F), on the third in ($8041) and ($8043); and the bottom corner's x in ($8045). It returns without drawing if the four rows are not in ascending order or if on either middle row the left x is greater than the right x, which is the test that rejects a quad wound the other way. The band between the two middle rows is filled first with ($80B4) = $81, so with a line of cleared pixels on its first and last rows. Then, with ($80B4) = 0, come the triangle from the top corner down to the second row and the triangle from the third row down to the bottom corner. Each triangle draws its last or first row in pattern over the band's line, so a line survives only where a triangle has no height, and then $90F9 draws it as a single cleared row. Reached by the JPs at $9829 and $9883.","t":"code","b":[42,53,128],"m":"ld","oa":32821,"o":"hl,(probe_z)","x":[38953,39043]},{"a":39049,"t":"code","b":[237,91,51,128],"m":"ld","oa":32819,"o":"de,(probe_x)"},{"a":39053,"t":"code","b":[167],"m":"and","o":"a"},{"a":39054,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":39056,"t":"code","b":[248],"m":"ret","o":"m"},{"a":39057,"t":"code","b":[42,55,128],"m":"ld","oa":32823,"o":"hl,(probe_hit)"},{"a":39060,"t":"code","b":[237,91,53,128],"m":"ld","oa":32821,"o":"de,(probe_z)"},{"a":39064,"t":"code","b":[167],"m":"and","o":"a"},{"a":39065,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":39067,"t":"code","b":[248],"m":"ret","o":"m"},{"a":39068,"t":"code","b":[42,57,128],"m":"ld","oa":32825,"o":"hl,(probe_slope)"},{"a":39071,"t":"code","b":[237,91,55,128],"m":"ld","oa":32823,"o":"de,(probe_hit)"},{"a":39075,"t":"code","b":[167],"m":"and","o":"a"},{"a":39076,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":39078,"t":"code","b":[248],"m":"ret","o":"m"},{"a":39079,"t":"code","b":[42,63,128],"m":"ld","oa":32831,"o":"hl,(probe_ramp)"},{"a":39082,"t":"code","b":[237,91,61,128],"m":"ld","oa":32829,"o":"de,(probe_top)"},{"a":39086,"t":"code","b":[167],"m":"and","o":"a"},{"a":39087,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":39089,"t":"code","b":[248],"m":"ret","o":"m"},{"a":39090,"t":"code","b":[42,67,128],"m":"ld","oa":32835,"o":"hl,(quad_row3_right_x)"},{"a":39093,"t":"code","b":[237,91,65,128],"m":"ld","oa":32833,"o":"de,(probe_x_sign)"},{"a":39097,"t":"code","b":[167],"m":"and","o":"a"},{"a":39098,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":39100,"t":"code","b":[248],"m":"ret","o":"m"},{"a":39101,"t":"code","b":[62,129],"m":"ld","o":"a,$81"},{"a":39103,"t":"code","b":[50,180,128],"m":"ld","oa":32948,"o":"(fill_outline_flag),a"},{"a":39106,"t":"code","b":[42,55,128],"m":"ld","oa":32823,"o":"hl,(probe_hit)"},{"a":39109,"t":"code","b":[237,91,53,128],"m":"ld","oa":32821,"o":"de,(probe_z)"},{"a":39113,"t":"code","b":[237,75,61,128],"m":"ld","oa":32829,"o":"bc,(probe_top)"},{"a":39117,"t":"code","b":[237,67,43,128],"m":"ld","oa":32811,"o":"(extent_x1),bc"},{"a":39121,"t":"code","b":[237,75,63,128],"m":"ld","oa":32831,"o":"bc,(probe_ramp)"},{"a":39125,"t":"code","b":[237,67,45,128],"m":"ld","oa":32813,"o":"(extent_x2),bc"},{"a":39129,"t":"code","b":[237,75,65,128],"m":"ld","oa":32833,"o":"bc,(probe_x_sign)"},{"a":39133,"t":"code","b":[237,67,47,128],"m":"ld","oa":32815,"o":"(extent_y1),bc"},{"a":39137,"t":"code","b":[237,75,67,128],"m":"ld","oa":32835,"o":"bc,(quad_row3_right_x)"},{"a":39141,"t":"code","b":[237,67,49,128],"m":"ld","oa":32817,"o":"(extent_y2),bc"},{"a":39145,"t":"code","b":[205,249,144],"m":"call","oa":37113,"o":"fill_trapezoid"},{"a":39148,"t":"code","b":[62,0],"m":"ld","o":"a,$00"},{"a":39150,"t":"code","b":[50,180,128],"m":"ld","oa":32948,"o":"(fill_outline_flag),a"},{"a":39153,"t":"code","b":[42,53,128],"m":"ld","oa":32821,"o":"hl,(probe_z)"},{"a":39156,"t":"code","b":[237,91,51,128],"m":"ld","oa":32819,"o":"de,(probe_x)"},{"a":39160,"t":"code","b":[237,75,59,128],"m":"ld","oa":32827,"o":"bc,(probe_floor)"},{"a":39164,"t":"code","b":[237,67,43,128],"m":"ld","oa":32811,"o":"(extent_x1),bc"},{"a":39168,"t":"code","b":[237,67,45,128],"m":"ld","oa":32813,"o":"(extent_x2),bc"},{"a":39172,"t":"code","b":[237,75,61,128],"m":"ld","oa":32829,"o":"bc,(probe_top)"},{"a":39176,"t":"code","b":[237,67,47,128],"m":"ld","oa":32815,"o":"(extent_y1),bc"},{"a":39180,"t":"code","b":[237,75,63,128],"m":"ld","oa":32831,"o":"bc,(probe_ramp)"},{"a":39184,"t":"code","b":[237,67,49,128],"m":"ld","oa":32817,"o":"(extent_y2),bc"},{"a":39188,"t":"code","b":[205,249,144],"m":"call","oa":37113,"o":"fill_trapezoid"},{"a":39191,"t":"code","b":[42,57,128],"m":"ld","oa":32825,"o":"hl,(probe_slope)"},{"a":39194,"t":"code","b":[237,91,55,128],"m":"ld","oa":32823,"o":"de,(probe_hit)"},{"a":39198,"t":"code","b":[237,75,65,128],"m":"ld","oa":32833,"o":"bc,(probe_x_sign)"},{"a":39202,"t":"code","b":[237,67,43,128],"m":"ld","oa":32811,"o":"(extent_x1),bc"},{"a":39206,"t":"code","b":[237,75,67,128],"m":"ld","oa":32835,"o":"bc,(quad_row3_right_x)"},{"a":39210,"t":"code","b":[237,67,45,128],"m":"ld","oa":32813,"o":"(extent_x2),bc"},{"a":39214,"t":"code","b":[237,75,69,128],"m":"ld","oa":32837,"o":"bc,(quad_lowest_x)"},{"a":39218,"t":"code","b":[237,67,47,128],"m":"ld","oa":32815,"o":"(extent_y1),bc"},{"a":39222,"t":"code","b":[237,67,49,128],"m":"ld","oa":32817,"o":"(extent_y2),bc"},{"a":39226,"t":"code","b":[205,249,144],"m":"call","oa":37113,"o":"fill_trapezoid"},{"a":39229,"t":"code","b":[201],"m":"ret"},{"a":39230,"l":"quad_levels","c":"Splits a quad into three horizontal bands for $9886. It takes the corner in the V1 slot, (($801F), ($8021)), as the highest, V0 as the next corner down the left side, V3 as the next down the right side and V2 as the corner opposite V1. The top row ($8033) and its x ($803B) are V1's. The two middle rows are those of the two middle corners; on each it stores that corner's x on its own side and, through $908B, the x at which the edge on the other side crosses the row. The bottom row ($8039) and its x ($8045) are the lowest corner's. Three comparisons pick one of four orderings: ($801D) with ($8029) at $9952, then ($801D) with ($8025) at $9982 or ($8029) with ($8025) at $9A16. The code from $9957 covers V3 level with or above V0 and V0 the lowest: second row V3's, with the x of edge V1-V0 on the left and V3's on the right; third row V2's, with the x of edge V1-V0 on the left and V2's on the right; bottom corner V0. Two calls, from $9826 and $9864.","t":"code","b":[42,33,128],"m":"ld","oa":32801,"o":"hl,(shape_y1)","x":[38950,39012]},{"a":39233,"t":"code","b":[34,51,128],"m":"ld","oa":32819,"o":"(probe_x),hl"},{"a":39236,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":39239,"t":"code","b":[34,59,128],"m":"ld","oa":32827,"o":"(probe_floor),hl"},{"a":39242,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":39245,"t":"code","b":[237,91,41,128],"m":"ld","oa":32809,"o":"de,(shape_y3)"},{"a":39249,"t":"code","b":[167],"m":"and","o":"a"},{"a":39250,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":39252,"t":"code","b":[250,233,153],"m":"jp","oa":39401,"o":"m,quad_levels_v0_above_v3"},{"a":39255,"t":"code","b":[237,83,53,128],"m":"ld","oa":32821,"o":"(probe_z),de"},{"a":39259,"t":"code","b":[42,39,128],"m":"ld","oa":32807,"o":"hl,(shape_x3)"},{"a":39262,"t":"code","b":[34,63,128],"m":"ld","oa":32831,"o":"(probe_ramp),hl"},{"a":39265,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":39268,"t":"code","b":[237,91,27,128],"m":"ld","oa":32795,"o":"de,(shape_x0)"},{"a":39272,"t":"code","b":[217],"m":"exx"},{"a":39273,"t":"code","b":[42,41,128],"m":"ld","oa":32809,"o":"hl,(shape_y3)"},{"a":39276,"t":"code","b":[237,75,33,128],"m":"ld","oa":32801,"o":"bc,(shape_y1)"},{"a":39280,"t":"code","b":[237,91,29,128],"m":"ld","oa":32797,"o":"de,(shape_y0)"},{"a":39284,"t":"code","b":[205,139,144],"m":"call","oa":37003,"o":"edge_x_at_row"},{"a":39287,"t":"code","b":[34,61,128],"m":"ld","oa":32829,"o":"(probe_top),hl"},{"a":39290,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":39293,"t":"code","b":[237,91,37,128],"m":"ld","oa":32805,"o":"de,(shape_y2)"},{"a":39297,"t":"code","b":[167],"m":"and","o":"a"},{"a":39298,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":39300,"t":"code","b":[250,183,153],"m":"jp","oa":39351,"o":"m,quad_levels_v2_lowest"},{"a":39303,"t":"code","b":[237,83,55,128],"m":"ld","oa":32823,"o":"(probe_hit),de"},{"a":39307,"t":"code","b":[42,35,128],"m":"ld","oa":32803,"o":"hl,(shape_x2)"},{"a":39310,"t":"code","b":[34,67,128],"m":"ld","oa":32835,"o":"(quad_row3_right_x),hl"},{"a":39313,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":39316,"t":"code","b":[34,57,128],"m":"ld","oa":32825,"o":"(probe_slope),hl"},{"a":39319,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":39322,"t":"code","b":[34,69,128],"m":"ld","oa":32837,"o":"(quad_lowest_x),hl"},{"a":39325,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":39328,"t":"code","b":[237,91,27,128],"m":"ld","oa":32795,"o":"de,(shape_x0)"},{"a":39332,"t":"code","b":[217],"m":"exx"},{"a":39333,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":39336,"t":"code","b":[237,75,33,128],"m":"ld","oa":32801,"o":"bc,(shape_y1)"},{"a":39340,"t":"code","b":[237,91,29,128],"m":"ld","oa":32797,"o":"de,(shape_y0)"},{"a":39344,"t":"code","b":[205,139,144],"m":"call","oa":37003,"o":"edge_x_at_row"},{"a":39347,"t":"code","b":[34,65,128],"m":"ld","oa":32833,"o":"(probe_x_sign),hl"},{"a":39350,"t":"code","b":[201],"m":"ret"},{"a":39351,"l":"quad_levels_v2_lowest","c":"Case of $993E with V3 level with or above V0 and V2 the lowest corner. The third row is V0's, with V0's x on the left and, on the right, the x at which edge V3-V2 crosses that row; the bottom corner is V2. Reached by the JP M at $9984.","t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)","x":[39300]},{"a":39354,"t":"code","b":[34,57,128],"m":"ld","oa":32825,"o":"(probe_slope),hl"},{"a":39357,"t":"code","b":[42,35,128],"m":"ld","oa":32803,"o":"hl,(shape_x2)"},{"a":39360,"t":"code","b":[34,69,128],"m":"ld","oa":32837,"o":"(quad_lowest_x),hl"},{"a":39363,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":39366,"t":"code","b":[34,55,128],"m":"ld","oa":32823,"o":"(probe_hit),hl"},{"a":39369,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":39372,"t":"code","b":[34,65,128],"m":"ld","oa":32833,"o":"(probe_x_sign),hl"},{"a":39375,"t":"code","b":[42,39,128],"m":"ld","oa":32807,"o":"hl,(shape_x3)"},{"a":39378,"t":"code","b":[237,91,35,128],"m":"ld","oa":32803,"o":"de,(shape_x2)"},{"a":39382,"t":"code","b":[217],"m":"exx"},{"a":39383,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":39386,"t":"code","b":[237,75,41,128],"m":"ld","oa":32809,"o":"bc,(shape_y3)"},{"a":39390,"t":"code","b":[237,91,37,128],"m":"ld","oa":32805,"o":"de,(shape_y2)"},{"a":39394,"t":"code","b":[205,139,144],"m":"call","oa":37003,"o":"edge_x_at_row"},{"a":39397,"t":"code","b":[34,67,128],"m":"ld","oa":32835,"o":"(quad_row3_right_x),hl"},{"a":39400,"t":"code","b":[201],"m":"ret"},{"a":39401,"l":"quad_levels_v0_above_v3","c":"Case of $993E with V0 above V3. The second row is V0's, with V0's x on the left and, on the right, the x at which edge V1-V3 crosses that row. If V2 is level with or above V3, the code from $9A1B makes the third row V2's, with V2's x on the left and the x of edge V1-V3 on the right, and the bottom corner V3. Reached by the JP M at $9954.","t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)","x":[39252]},{"a":39404,"t":"code","b":[34,53,128],"m":"ld","oa":32821,"o":"(probe_z),hl"},{"a":39407,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":39410,"t":"code","b":[34,61,128],"m":"ld","oa":32829,"o":"(probe_top),hl"},{"a":39413,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":39416,"t":"code","b":[237,91,39,128],"m":"ld","oa":32807,"o":"de,(shape_x3)"},{"a":39420,"t":"code","b":[217],"m":"exx"},{"a":39421,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":39424,"t":"code","b":[237,75,33,128],"m":"ld","oa":32801,"o":"bc,(shape_y1)"},{"a":39428,"t":"code","b":[237,91,41,128],"m":"ld","oa":32809,"o":"de,(shape_y3)"},{"a":39432,"t":"code","b":[205,139,144],"m":"call","oa":37003,"o":"edge_x_at_row"},{"a":39435,"t":"code","b":[34,63,128],"m":"ld","oa":32831,"o":"(probe_ramp),hl"},{"a":39438,"t":"code","b":[42,41,128],"m":"ld","oa":32809,"o":"hl,(shape_y3)"},{"a":39441,"t":"code","b":[237,91,37,128],"m":"ld","oa":32805,"o":"de,(shape_y2)"},{"a":39445,"t":"code","b":[167],"m":"and","o":"a"},{"a":39446,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":39448,"t":"code","b":[250,77,154],"m":"jp","oa":39501,"o":"m,quad_levels_v3_above_v2"},{"a":39451,"t":"code","b":[42,41,128],"m":"ld","oa":32809,"o":"hl,(shape_y3)"},{"a":39454,"t":"code","b":[34,57,128],"m":"ld","oa":32825,"o":"(probe_slope),hl"},{"a":39457,"t":"code","b":[42,39,128],"m":"ld","oa":32807,"o":"hl,(shape_x3)"},{"a":39460,"t":"code","b":[34,69,128],"m":"ld","oa":32837,"o":"(quad_lowest_x),hl"},{"a":39463,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":39466,"t":"code","b":[34,55,128],"m":"ld","oa":32823,"o":"(probe_hit),hl"},{"a":39469,"t":"code","b":[42,35,128],"m":"ld","oa":32803,"o":"hl,(shape_x2)"},{"a":39472,"t":"code","b":[34,65,128],"m":"ld","oa":32833,"o":"(probe_x_sign),hl"},{"a":39475,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":39478,"t":"code","b":[237,91,39,128],"m":"ld","oa":32807,"o":"de,(shape_x3)"},{"a":39482,"t":"code","b":[217],"m":"exx"},{"a":39483,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":39486,"t":"code","b":[237,75,33,128],"m":"ld","oa":32801,"o":"bc,(shape_y1)"},{"a":39490,"t":"code","b":[237,91,41,128],"m":"ld","oa":32809,"o":"de,(shape_y3)"},{"a":39494,"t":"code","b":[205,139,144],"m":"call","oa":37003,"o":"edge_x_at_row"},{"a":39497,"t":"code","b":[34,67,128],"m":"ld","oa":32835,"o":"(quad_row3_right_x),hl"},{"a":39500,"t":"code","b":[201],"m":"ret"},{"a":39501,"l":"quad_levels_v3_above_v2","c":"Case of $993E with V0 above V3 and V3 above V2. The third row is V3's, with V3's x on the right and, on the left, the x at which edge V0-V2 crosses that row; the bottom corner is V2. Reached by the JP M at $9A18.","t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)","x":[39448]},{"a":39504,"t":"code","b":[34,57,128],"m":"ld","oa":32825,"o":"(probe_slope),hl"},{"a":39507,"t":"code","b":[42,35,128],"m":"ld","oa":32803,"o":"hl,(shape_x2)"},{"a":39510,"t":"code","b":[34,69,128],"m":"ld","oa":32837,"o":"(quad_lowest_x),hl"},{"a":39513,"t":"code","b":[42,41,128],"m":"ld","oa":32809,"o":"hl,(shape_y3)"},{"a":39516,"t":"code","b":[34,55,128],"m":"ld","oa":32823,"o":"(probe_hit),hl"},{"a":39519,"t":"code","b":[42,39,128],"m":"ld","oa":32807,"o":"hl,(shape_x3)"},{"a":39522,"t":"code","b":[34,67,128],"m":"ld","oa":32835,"o":"(quad_row3_right_x),hl"},{"a":39525,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":39528,"t":"code","b":[237,91,35,128],"m":"ld","oa":32803,"o":"de,(shape_x2)"},{"a":39532,"t":"code","b":[217],"m":"exx"},{"a":39533,"t":"code","b":[42,41,128],"m":"ld","oa":32809,"o":"hl,(shape_y3)"},{"a":39536,"t":"code","b":[237,75,29,128],"m":"ld","oa":32797,"o":"bc,(shape_y0)"},{"a":39540,"t":"code","b":[237,91,37,128],"m":"ld","oa":32805,"o":"de,(shape_y2)"},{"a":39544,"t":"code","b":[205,139,144],"m":"call","oa":37003,"o":"edge_x_at_row"},{"a":39547,"t":"code","b":[34,65,128],"m":"ld","oa":32833,"o":"(probe_x_sign),hl"},{"a":39550,"t":"code","b":[201],"m":"ret"},{"a":39551,"l":"link_handover_0","c":"A signed 16-bit amount remembered for the record at IX in the loop at $A405, which walks ($809F) records of 16 bytes from $7F54. $A499 stores here a quarter of the record's first word (IX+0 and IX+1, shifted right twice with the sign kept), and the code after it takes that amount off the word and adds it to the word at IX+$10, the first word of the next record. $A6B6 adds it to ($80A1) to form a position whose high byte goes to ($8033). $A714 reads it again and, when it is not zero, adds it back to the record's word, takes it off the word at IX+$10, adds it to ($80A1), and $A743 sets it to zero. Those four instructions are all that name it. What the records are in the game is not established here.","t":"word","b":[0,0],"d":[0],"x":[42137,42678,42772,42819]},{"a":39553,"l":"link_handover_2","c":"The same for the record's second word: $A4C3 stores a quarter of the word at IX+2, which is then taken off that word and added to the word at IX+$12. $A6C2 adds it to ($80A3) to form a position whose high byte goes to ($8034); $A76B reads it and, when it is not zero, puts it back on IX+2, takes it off IX+$12 and adds it to ($80A3), and $A79A sets it to zero. Four instructions name it: $A4C3, $A6C2, $A76B and $A79A.","t":"word","b":[0,0],"d":[0],"x":[42179,42690,42859,42906]},{"a":39555,"l":"link_handover_4","c":"The same for the record's third word, with a different fraction: $A4F4 stores a quarter of the word at IX+4 when that word is negative and an eighth of it when it is not ($A4E5-$A4F2), and the amount is then taken off that word and added to the word at IX+$14. $A67E reads it and adds it to ($80A5); unless the high byte of the sum equals ($8036) the code keeps the sum, puts the amount back on IX+4, takes it off IX+$14, and $A6B0 sets it to zero. Three instructions name it: $A4F4, $A67E and $A6B0.","t":"word","b":[0,0],"d":[0],"x":[42228,42622,42672]},{"a":39557,"l":"unused_bytes_9a85","c":"Four zero bytes between the three words above and the routine at $9A89. No instruction names an address in $9A85-$9A88, and they were neither read nor written in the recorded sessions. The word $9A87 does occur once in the image, at $F171, inside the picture data that occupies the frame buffer's addresses when the game loads. Purpose not established.","t":"byte","b":[0,0,0,0]},{"a":39561,"l":"find_floor_under_point","c":"Finds what lies under or against one point of the worm. The point is given as signed 8-bit offsets in ($8033) for X and ($8034) for Y, measured from the head's whole-number position when the display list was built, and a height in ($8035). The routine sign-extends the two offsets into ($8041) and ($8042), then walks the display list from the head pointer at ($EB7E), following the link word at the start of each record until it is zero. Records of type $FF and $FA (byte +$0E; $AB2F gives the worm's own records $FA) are skipped, and so is any record whose box (+$02 low X, +$06 high X, +$04 low Y, +$08 high Y, all 16-bit) does not hold the point with one unit to spare on every side. For the rest $9B83 returns the object's surface height in ($803D), its underside in ($803E) and a slope word in ($803F), or carry when the point is outside the object's shape. A surface below the running floor ($8036), which starts as the point's own height, is only remembered: the highest such surface goes to ($803B) with its record in ($8037) and its slope in ($8039), the later record winning a tie. A surface at or above the floor counts as touched unless its underside is more than 10 above the floor (the sum is held at $FF if it overflows), which lets the worm pass beneath; a touch sets ($803B) to $FF, raises ($8036) to the surface, copies the slope word, and stores the record pointer when the point's own height plus 10 reaches the underside. On return ($803B) is $FF if the point touches something, otherwise the height of the highest surface below it, zero when there is none; a point at height 0 starts with $FF, so the board itself counts as touched. Because ($8036) rises as records are processed, the result can depend on their order in the list. Called from $9DEB for the head and from $A56A for each body joint, the only two callers.","t":"code","b":[253,33,51,128],"m":"ld","o":"iy,$8033","x":[40427,42346]},{"a":39565,"t":"code","b":[175],"m":"xor","o":"a"},{"a":39566,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":39567,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":39568,"t":"code","b":[34,55,128],"m":"ld","oa":32823,"o":"(probe_hit),hl"},{"a":39571,"t":"code","b":[34,57,128],"m":"ld","oa":32825,"o":"(probe_slope),hl"},{"a":39574,"t":"code","b":[50,59,128],"m":"ld","oa":32827,"o":"(probe_floor),a"},{"a":39577,"t":"code","b":[253,203,0,126],"m":"bit","o":"7,(iy+$00)"},{"a":39581,"t":"code","b":[242,161,154],"m":"jp","oa":39585,"o":"p,$9AA1"},{"a":39584,"t":"code","b":[45],"m":"dec","o":"l"},{"a":39585,"t":"code","b":[253,203,1,126],"m":"bit","o":"7,(iy+$01)","x":[39581]},{"a":39589,"t":"code","b":[242,169,154],"m":"jp","oa":39593,"o":"p,$9AA9"},{"a":39592,"t":"code","b":[37],"m":"dec","o":"h"},{"a":39593,"t":"code","b":[34,65,128],"m":"ld","oa":32833,"o":"(probe_x_sign),hl","x":[39589]},{"a":39596,"t":"code","b":[58,53,128],"m":"ld","oa":32821,"o":"a,(probe_z)"},{"a":39599,"t":"code","b":[50,54,128],"m":"ld","oa":32822,"o":"(probe_surface),a"},{"a":39602,"t":"code","b":[221,33,126,235],"m":"ld","o":"ix,$EB7E"},{"a":39606,"t":"code","b":[167],"m":"and","o":"a"},{"a":39607,"t":"code","b":[32,4],"m":"jr","oa":39613,"o":"nz,$9ABD"},{"a":39609,"t":"code","b":[61],"m":"dec","o":"a"},{"a":39610,"t":"code","b":[50,59,128],"m":"ld","oa":32827,"o":"(probe_floor),a"},{"a":39613,"t":"code","b":[221,110,0],"m":"ld","o":"l,(ix+$00)","x":[39607,39630,39634,39652,39671,39690,39709,39715,39731,39750,39766,39808]},{"a":39616,"t":"code","b":[221,102,1],"m":"ld","o":"h,(ix+$01)"},{"a":39619,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":39620,"t":"code","b":[180],"m":"or","o":"h"},{"a":39621,"t":"code","b":[200],"m":"ret","o":"z"},{"a":39622,"t":"code","b":[229],"m":"push","o":"hl"},{"a":39623,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":39625,"t":"code","b":[221,126,14],"m":"ld","o":"a,(ix+$0E)"},{"a":39628,"t":"code","b":[254,255],"m":"cp","o":"$FF"},{"a":39630,"t":"code","b":[40,237],"m":"jr","oa":39613,"o":"z,$9ABD"},{"a":39632,"t":"code","b":[254,250],"m":"cp","o":"$FA"},{"a":39634,"t":"code","b":[40,233],"m":"jr","oa":39613,"o":"z,$9ABD"},{"a":39636,"t":"code","b":[253,110,0],"m":"ld","o":"l,(iy+$00)"},{"a":39639,"t":"code","b":[253,102,14],"m":"ld","o":"h,(iy+$0E)"},{"a":39642,"t":"code","b":[221,94,2],"m":"ld","o":"e,(ix+$02)"},{"a":39645,"t":"code","b":[221,86,3],"m":"ld","o":"d,(ix+$03)"},{"a":39648,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":39649,"t":"code","b":[167],"m":"and","o":"a"},{"a":39650,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":39652,"t":"code","b":[250,189,154],"m":"jp","oa":39613,"o":"m,$9ABD"},{"a":39655,"t":"code","b":[253,94,0],"m":"ld","o":"e,(iy+$00)"},{"a":39658,"t":"code","b":[253,86,14],"m":"ld","o":"d,(iy+$0E)"},{"a":39661,"t":"code","b":[221,110,6],"m":"ld","o":"l,(ix+$06)"},{"a":39664,"t":"code","b":[221,102,7],"m":"ld","o":"h,(ix+$07)"},{"a":39667,"t":"code","b":[27],"m":"dec","o":"de"},{"a":39668,"t":"code","b":[167],"m":"and","o":"a"},{"a":39669,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":39671,"t":"code","b":[250,189,154],"m":"jp","oa":39613,"o":"m,$9ABD"},{"a":39674,"t":"code","b":[253,110,1],"m":"ld","o":"l,(iy+$01)"},{"a":39677,"t":"code","b":[253,102,15],"m":"ld","o":"h,(iy+$0F)"},{"a":39680,"t":"code","b":[221,94,4],"m":"ld","o":"e,(ix+$04)"},{"a":39683,"t":"code","b":[221,86,5],"m":"ld","o":"d,(ix+$05)"},{"a":39686,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":39687,"t":"code","b":[167],"m":"and","o":"a"},{"a":39688,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":39690,"t":"code","b":[250,189,154],"m":"jp","oa":39613,"o":"m,$9ABD"},{"a":39693,"t":"code","b":[253,94,1],"m":"ld","o":"e,(iy+$01)"},{"a":39696,"t":"code","b":[253,86,15],"m":"ld","o":"d,(iy+$0F)"},{"a":39699,"t":"code","b":[221,110,8],"m":"ld","o":"l,(ix+$08)"},{"a":39702,"t":"code","b":[221,102,9],"m":"ld","o":"h,(ix+$09)"},{"a":39705,"t":"code","b":[27],"m":"dec","o":"de"},{"a":39706,"t":"code","b":[167],"m":"and","o":"a"},{"a":39707,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":39709,"t":"code","b":[250,189,154],"m":"jp","oa":39613,"o":"m,$9ABD"},{"a":39712,"t":"code","b":[205,131,155],"m":"call","oa":39811,"o":"object_surface_at_point"},{"a":39715,"t":"code","b":[56,152],"m":"jr","oa":39613,"o":"c,$9ABD"},{"a":39717,"t":"code","b":[58,61,128],"m":"ld","oa":32829,"o":"a,(probe_top)"},{"a":39720,"t":"code","b":[253,190,3],"m":"cp","o":"(iy+$03)"},{"a":39723,"t":"code","b":[48,28],"m":"jr","oa":39753,"o":"nc,$9B49"},{"a":39725,"t":"code","b":[58,61,128],"m":"ld","oa":32829,"o":"a,(probe_top)"},{"a":39728,"t":"code","b":[253,190,8],"m":"cp","o":"(iy+$08)"},{"a":39731,"t":"code","b":[218,189,154],"m":"jp","oa":39613,"o":"c,$9ABD"},{"a":39734,"t":"code","b":[58,61,128],"m":"ld","oa":32829,"o":"a,(probe_top)"},{"a":39737,"t":"code","b":[50,59,128],"m":"ld","oa":32827,"o":"(probe_floor),a"},{"a":39740,"t":"code","b":[221,34,55,128],"m":"ld","oa":32823,"o":"(probe_hit),ix"},{"a":39744,"t":"code","b":[42,63,128],"m":"ld","oa":32831,"o":"hl,(probe_ramp)"},{"a":39747,"t":"code","b":[34,57,128],"m":"ld","oa":32825,"o":"(probe_slope),hl"},{"a":39750,"t":"code","b":[195,189,154],"m":"jp","oa":39613,"o":"$9ABD"},{"a":39753,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)","x":[39723]},{"a":39756,"t":"code","b":[198,10],"m":"add","o":"a,$0A"},{"a":39758,"t":"code","b":[210,83,155],"m":"jp","oa":39763,"o":"nc,$9B53"},{"a":39761,"t":"code","b":[62,255],"m":"ld","o":"a,$FF"},{"a":39763,"t":"code","b":[253,190,11],"m":"cp","o":"(iy+$0B)","x":[39758]},{"a":39766,"t":"code","b":[218,189,154],"m":"jp","oa":39613,"o":"c,$9ABD"},{"a":39769,"t":"code","b":[62,255],"m":"ld","o":"a,$FF"},{"a":39771,"t":"code","b":[50,59,128],"m":"ld","oa":32827,"o":"(probe_floor),a"},{"a":39774,"t":"code","b":[58,61,128],"m":"ld","oa":32829,"o":"a,(probe_top)"},{"a":39777,"t":"code","b":[50,54,128],"m":"ld","oa":32822,"o":"(probe_surface),a"},{"a":39780,"t":"code","b":[58,61,128],"m":"ld","oa":32829,"o":"a,(probe_top)"},{"a":39783,"t":"code","b":[253,190,2],"m":"cp","o":"(iy+$02)"},{"a":39786,"t":"code","b":[56,14],"m":"jr","oa":39802,"o":"c,$9B7A"},{"a":39788,"t":"code","b":[58,53,128],"m":"ld","oa":32821,"o":"a,(probe_z)"},{"a":39791,"t":"code","b":[198,10],"m":"add","o":"a,$0A"},{"a":39793,"t":"code","b":[253,190,11],"m":"cp","o":"(iy+$0B)"},{"a":39796,"t":"code","b":[56,4],"m":"jr","oa":39802,"o":"c,$9B7A"},{"a":39798,"t":"code","b":[221,34,55,128],"m":"ld","oa":32823,"o":"(probe_hit),ix"},{"a":39802,"t":"code","b":[42,63,128],"m":"ld","oa":32831,"o":"hl,(probe_ramp)","x":[39786,39796]},{"a":39805,"t":"code","b":[34,57,128],"m":"ld","oa":32825,"o":"(probe_slope),hl"},{"a":39808,"t":"code","b":[195,189,154],"m":"jp","oa":39613,"o":"$9ABD"},{"a":39811,"l":"object_surface_at_point","c":"Tests the query point against one display-list record (IX) for $9A89 and reports the object's height there. It clears the slope word ($803F) and branches on the top two bits of the type byte (+$0E): $C0 goes to $9BD5, $80 to $9BFF, $40 to $9C66. The remaining class, types $00 to $3F, is handled here and has a triangular outline, the box cut along a diagonal. $908B interpolates the X of the diagonal at the point's Y: the diagonal runs from the box's low X at low Y to its high X at high Y when bits 5 and 4 of the type are equal, and from high X at low Y to low X at high Y when they differ. With bit 4 set the solid side is X at or below the diagonal, with bit 4 clear X at or above it. A point on the open side returns with carry set, a miss; otherwise the code joins the flat-top case at $9BDA. One caller, $9B20.","t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000","x":[39712]},{"a":39814,"t":"code","b":[34,63,128],"m":"ld","oa":32831,"o":"(probe_ramp),hl"},{"a":39817,"t":"code","b":[221,126,14],"m":"ld","o":"a,(ix+$0E)"},{"a":39820,"t":"code","b":[230,192],"m":"and","o":"$C0"},{"a":39822,"t":"code","b":[194,213,155],"m":"jp","oa":39893,"o":"nz,flat_object_surface"},{"a":39825,"t":"code","b":[221,110,6],"m":"ld","o":"l,(ix+$06)"},{"a":39828,"t":"code","b":[221,102,7],"m":"ld","o":"h,(ix+$07)"},{"a":39831,"t":"code","b":[221,94,2],"m":"ld","o":"e,(ix+$02)"},{"a":39834,"t":"code","b":[221,86,3],"m":"ld","o":"d,(ix+$03)"},{"a":39837,"t":"code","b":[221,126,14],"m":"ld","o":"a,(ix+$0E)"},{"a":39840,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":39842,"t":"code","b":[221,174,14],"m":"xor","o":"(ix+$0E)"},{"a":39845,"t":"code","b":[203,103],"m":"bit","o":"4,a"},{"a":39847,"t":"code","b":[32,1],"m":"jr","oa":39850,"o":"nz,$9BAA"},{"a":39849,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":39850,"t":"code","b":[217],"m":"exx","x":[39847]},{"a":39851,"t":"code","b":[221,78,4],"m":"ld","o":"c,(ix+$04)"},{"a":39854,"t":"code","b":[221,70,5],"m":"ld","o":"b,(ix+$05)"},{"a":39857,"t":"code","b":[221,94,8],"m":"ld","o":"e,(ix+$08)"},{"a":39860,"t":"code","b":[221,86,9],"m":"ld","o":"d,(ix+$09)"},{"a":39863,"t":"code","b":[253,110,1],"m":"ld","o":"l,(iy+$01)"},{"a":39866,"t":"code","b":[253,102,15],"m":"ld","o":"h,(iy+$0F)"},{"a":39869,"t":"code","b":[205,139,144],"m":"call","oa":37003,"o":"edge_x_at_row"},{"a":39872,"t":"code","b":[253,94,0],"m":"ld","o":"e,(iy+$00)"},{"a":39875,"t":"code","b":[253,86,14],"m":"ld","o":"d,(iy+$0E)"},{"a":39878,"t":"code","b":[221,203,14,102],"m":"bit","o":"4,(ix+$0E)"},{"a":39882,"t":"code","b":[32,1],"m":"jr","oa":39885,"o":"nz,$9BCD"},{"a":39884,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":39885,"t":"code","b":[167],"m":"and","o":"a","x":[39882]},{"a":39886,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":39888,"t":"code","b":[55],"m":"scf"},{"a":39889,"t":"code","b":[248],"m":"ret","o":"m"},{"a":39890,"t":"code","b":[195,218,155],"m":"jp","oa":39898,"o":"$9BDA"},{"a":39893,"l":"flat_object_surface","c":"The flat-top case of $9B83. Class $C0 (types $C0 to $FF) arrives at $9BD5, and the triangular class joins at $9BDA once the point is known to be on its solid side. A record of type $F1, the type the firing code at $7725 gives a sparky, is looked at more closely: the word at +$0A points to the pool record it was built from, and if byte +$10 of that record is not zero the routine returns with carry set, so the sparky is not there for the worm to touch. Otherwise ($803D) takes the record's top (+$0C), ($803E) its underside (+$0D), and carry is clear. A class other than $C0 leaves at $9BD7 for $9BFF.","t":"code","b":[254,192],"m":"cp","o":"$C0","x":[39822]},{"a":39895,"t":"code","b":[194,255,155],"m":"jp","oa":39935,"o":"nz,x_ramp_surface"},{"a":39898,"t":"code","b":[221,126,14],"m":"ld","o":"a,(ix+$0E)","x":[39890]},{"a":39901,"t":"code","b":[254,241],"m":"cp","o":"$F1"},{"a":39903,"t":"code","b":[32,16],"m":"jr","oa":39921,"o":"nz,$9BF1"},{"a":39905,"t":"code","b":[221,110,10],"m":"ld","o":"l,(ix+$0A)"},{"a":39908,"t":"code","b":[221,102,11],"m":"ld","o":"h,(ix+$0B)"},{"a":39911,"t":"code","b":[17,16,0],"m":"ld","o":"de,$0010"},{"a":39914,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":39915,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":39916,"t":"code","b":[167],"m":"and","o":"a"},{"a":39917,"t":"code","b":[40,2],"m":"jr","oa":39921,"o":"z,$9BF1"},{"a":39919,"t":"code","b":[55],"m":"scf"},{"a":39920,"t":"code","b":[201],"m":"ret"},{"a":39921,"t":"code","b":[221,126,12],"m":"ld","o":"a,(ix+$0C)","x":[39903,39917]},{"a":39924,"t":"code","b":[50,61,128],"m":"ld","oa":32829,"o":"(probe_top),a"},{"a":39927,"t":"code","b":[221,126,13],"m":"ld","o":"a,(ix+$0D)"},{"a":39930,"t":"code","b":[50,62,128],"m":"ld","oa":32830,"o":"(probe_bottom),a"},{"a":39933,"t":"code","b":[167],"m":"and","o":"a"},{"a":39934,"t":"code","b":[201],"m":"ret"},{"a":39935,"l":"x_ramp_surface","c":"Class $80 of $9B83 (types $80 to $BF): a wedge whose height changes along X. $908B interpolates between the record's two heights (+$0C and +$0D) as the point's X goes from the box's low X to its high X. When bits 5 and 4 of the type differ the height falls from +$0C at low X to +$0D at high X; when they are equal it rises, and bit 0 of ($8040) is set to record that. With bit 5 clear the interpolated height is the surface, stored in ($803D), and +$0D is the underside in ($803E): a ramp. $9CCC then builds the slope word in ($803F): the low byte is 256 times the smaller of the ramp's X extent (the low byte of +$06 minus that of +$02) and its height (+$0C minus +$0D) divided by the larger, and the high byte carries bit 0 for rising with the coordinate, bit 1 clear for the X axis, and bit 7 when the height is the larger of the two. With bit 5 set the roles are exchanged: the surface is the flat top +$0C and the interpolated height is the underside, an overhang, and no ratio is computed, so the low byte of the slope word stays zero. Carry is clear on every return. A class of $40 leaves at $9C01 for $9C66.","t":"code","b":[254,128],"m":"cp","o":"$80","x":[39895]},{"a":39937,"t":"code","b":[194,102,156],"m":"jp","oa":40038,"o":"nz,y_ramp_surface"},{"a":39940,"t":"code","b":[175],"m":"xor","o":"a"},{"a":39941,"t":"code","b":[221,110,12],"m":"ld","o":"l,(ix+$0C)"},{"a":39944,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":39945,"t":"code","b":[221,94,13],"m":"ld","o":"e,(ix+$0D)"},{"a":39948,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":39949,"t":"code","b":[221,126,14],"m":"ld","o":"a,(ix+$0E)"},{"a":39952,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":39954,"t":"code","b":[221,174,14],"m":"xor","o":"(ix+$0E)"},{"a":39957,"t":"code","b":[203,103],"m":"bit","o":"4,a"},{"a":39959,"t":"code","b":[32,5],"m":"jr","oa":39966,"o":"nz,$9C1E"},{"a":39961,"t":"code","b":[253,203,13,198],"m":"set","o":"0,(iy+$0D)"},{"a":39965,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":39966,"t":"code","b":[217],"m":"exx","x":[39959]},{"a":39967,"t":"code","b":[221,78,2],"m":"ld","o":"c,(ix+$02)"},{"a":39970,"t":"code","b":[221,70,3],"m":"ld","o":"b,(ix+$03)"},{"a":39973,"t":"code","b":[221,94,6],"m":"ld","o":"e,(ix+$06)"},{"a":39976,"t":"code","b":[221,86,7],"m":"ld","o":"d,(ix+$07)"},{"a":39979,"t":"code","b":[253,110,0],"m":"ld","o":"l,(iy+$00)"},{"a":39982,"t":"code","b":[253,102,14],"m":"ld","o":"h,(iy+$0E)"},{"a":39985,"t":"code","b":[205,139,144],"m":"call","oa":37003,"o":"edge_x_at_row"},{"a":39988,"t":"code","b":[221,126,13],"m":"ld","o":"a,(ix+$0D)"},{"a":39991,"t":"code","b":[221,203,14,110],"m":"bit","o":"5,(ix+$0E)"},{"a":39995,"t":"code","b":[40,4],"m":"jr","oa":40001,"o":"z,$9C41"},{"a":39997,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":39998,"t":"code","b":[221,110,12],"m":"ld","o":"l,(ix+$0C)"},{"a":40001,"t":"code","b":[50,62,128],"m":"ld","oa":32830,"o":"(probe_bottom),a","x":[39995]},{"a":40004,"t":"code","b":[253,117,10],"m":"ld","o":"(iy+$0A),l"},{"a":40007,"t":"code","b":[167],"m":"and","o":"a"},{"a":40008,"t":"code","b":[221,203,14,110],"m":"bit","o":"5,(ix+$0E)"},{"a":40012,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":40013,"t":"code","b":[221,126,6],"m":"ld","o":"a,(ix+$06)"},{"a":40016,"t":"code","b":[221,150,2],"m":"sub","o":"(ix+$02)"},{"a":40019,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":40020,"t":"code","b":[221,126,12],"m":"ld","o":"a,(ix+$0C)"},{"a":40023,"t":"code","b":[221,150,13],"m":"sub","o":"(ix+$0D)"},{"a":40026,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":40027,"t":"code","b":[58,64,128],"m":"ld","oa":32832,"o":"a,(probe_ramp_flags)"},{"a":40030,"t":"code","b":[205,204,156],"m":"call","oa":40140,"o":"ratio_smaller_over_larger"},{"a":40033,"t":"code","b":[34,63,128],"m":"ld","oa":32831,"o":"(probe_ramp),hl"},{"a":40036,"t":"code","b":[167],"m":"and","o":"a"},{"a":40037,"t":"code","b":[201],"m":"ret"},{"a":40038,"l":"y_ramp_surface","c":"Class $40 of $9B83 (types $40 to $7F): the wedge of $9BFF turned to run along Y. Bit 1 of ($8040) is set first to mark the axis, the interpolation runs over the point's Y between the box's low Y (+$04) and high Y (+$08), and the extent passed to $9CCC is the low byte of +$08 minus that of +$04. Bits 5 and 4 of the type keep their meanings: equal bits make the height rise with Y and set bit 0 of ($8040), and bit 5 set makes the interpolated height the underside beneath a flat top. Returns at $9CB2 or $9CCB with carry clear.","t":"code","b":[253,203,13,206],"m":"set","o":"1,(iy+$0D)","x":[39937]},{"a":40042,"t":"code","b":[175],"m":"xor","o":"a"},{"a":40043,"t":"code","b":[221,110,12],"m":"ld","o":"l,(ix+$0C)"},{"a":40046,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":40047,"t":"code","b":[221,94,13],"m":"ld","o":"e,(ix+$0D)"},{"a":40050,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":40051,"t":"code","b":[221,126,14],"m":"ld","o":"a,(ix+$0E)"},{"a":40054,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":40056,"t":"code","b":[221,174,14],"m":"xor","o":"(ix+$0E)"},{"a":40059,"t":"code","b":[203,103],"m":"bit","o":"4,a"},{"a":40061,"t":"code","b":[32,5],"m":"jr","oa":40068,"o":"nz,$9C84"},{"a":40063,"t":"code","b":[253,203,13,198],"m":"set","o":"0,(iy+$0D)"},{"a":40067,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":40068,"t":"code","b":[217],"m":"exx","x":[40061]},{"a":40069,"t":"code","b":[221,78,4],"m":"ld","o":"c,(ix+$04)"},{"a":40072,"t":"code","b":[221,70,5],"m":"ld","o":"b,(ix+$05)"},{"a":40075,"t":"code","b":[221,94,8],"m":"ld","o":"e,(ix+$08)"},{"a":40078,"t":"code","b":[221,86,9],"m":"ld","o":"d,(ix+$09)"},{"a":40081,"t":"code","b":[253,110,1],"m":"ld","o":"l,(iy+$01)"},{"a":40084,"t":"code","b":[253,102,15],"m":"ld","o":"h,(iy+$0F)"},{"a":40087,"t":"code","b":[205,139,144],"m":"call","oa":37003,"o":"edge_x_at_row"},{"a":40090,"t":"code","b":[221,126,13],"m":"ld","o":"a,(ix+$0D)"},{"a":40093,"t":"code","b":[221,203,14,110],"m":"bit","o":"5,(ix+$0E)"},{"a":40097,"t":"code","b":[40,4],"m":"jr","oa":40103,"o":"z,$9CA7"},{"a":40099,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":40100,"t":"code","b":[221,110,12],"m":"ld","o":"l,(ix+$0C)"},{"a":40103,"t":"code","b":[50,62,128],"m":"ld","oa":32830,"o":"(probe_bottom),a","x":[40097]},{"a":40106,"t":"code","b":[253,117,10],"m":"ld","o":"(iy+$0A),l"},{"a":40109,"t":"code","b":[167],"m":"and","o":"a"},{"a":40110,"t":"code","b":[221,203,14,110],"m":"bit","o":"5,(ix+$0E)"},{"a":40114,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":40115,"t":"code","b":[221,126,8],"m":"ld","o":"a,(ix+$08)"},{"a":40118,"t":"code","b":[221,150,4],"m":"sub","o":"(ix+$04)"},{"a":40121,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":40122,"t":"code","b":[221,126,12],"m":"ld","o":"a,(ix+$0C)"},{"a":40125,"t":"code","b":[221,150,13],"m":"sub","o":"(ix+$0D)"},{"a":40128,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":40129,"t":"code","b":[58,64,128],"m":"ld","oa":32832,"o":"a,(probe_ramp_flags)"},{"a":40132,"t":"code","b":[205,204,156],"m":"call","oa":40140,"o":"ratio_smaller_over_larger"},{"a":40135,"t":"code","b":[34,63,128],"m":"ld","oa":32831,"o":"(probe_ramp),hl"},{"a":40138,"t":"code","b":[167],"m":"and","o":"a"},{"a":40139,"t":"code","b":[201],"m":"ret"},{"a":40140,"l":"ratio_smaller_over_larger","c":"Divides the smaller of B and C by the larger and returns the quotient as an 8-bit fraction: L is 256 times the smaller over the larger, rounded down, found by eight steps of shift and subtract. Equal inputs, two zeros included, give $FF. H returns the caller's A with bit 7 set when C was the smaller, so the caller can tell which way round the ratio was taken. A', DE and BC are used as working registers and no memory is touched. Four callers: $9C5E and $9CC4, which pass a ramp's extent in C and its height in B to build the slope word, and $E304 and $E372.","t":"code","b":[8],"m":"ex","o":"af,af'","x":[40030,40132,58116,58226]},{"a":40141,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":40142,"t":"code","b":[184],"m":"cp","o":"b"},{"a":40143,"t":"code","b":[48,6],"m":"jr","oa":40151,"o":"nc,$9CD7"},{"a":40145,"t":"code","b":[72],"m":"ld","o":"c,b"},{"a":40146,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":40147,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":40148,"t":"code","b":[203,255],"m":"set","o":"7,a"},{"a":40150,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":40151,"t":"code","b":[96],"m":"ld","o":"h,b","x":[40143]},{"a":40152,"t":"code","b":[81],"m":"ld","o":"d,c"},{"a":40153,"t":"code","b":[6,8],"m":"ld","o":"b,$08"},{"a":40155,"t":"code","b":[175],"m":"xor","o":"a"},{"a":40156,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":40157,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":40158,"t":"code","b":[203,58],"m":"srl","o":"d","x":[40171]},{"a":40160,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":40162,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":40164,"t":"code","b":[48,2],"m":"jr","oa":40168,"o":"nc,$9CE8"},{"a":40166,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":40167,"t":"code","b":[55],"m":"scf"},{"a":40168,"t":"code","b":[63],"m":"ccf","x":[40164]},{"a":40169,"t":"code","b":[203,17],"m":"rl","o":"c"},{"a":40171,"t":"code","b":[16,241],"m":"djnz","oa":40158,"o":"$9CDE"},{"a":40173,"t":"code","b":[105],"m":"ld","o":"l,c"},{"a":40174,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":40175,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":40176,"t":"code","b":[201],"m":"ret"},{"a":40177,"l":"move_worm","c":"The first routine the frame loop at $7638 calls each frame, from $765C, its only caller. It moves the worm's head and then, without returning in between, drags the body after it: the normal exit is the RET at $A7D4, and a bounce or a stop leaves early at $9F4B or $9F55. ($8000), which marks a wall hit within the frame, is cleared, and at $9CF5 (entered again from $9F34 after a deflection) $A926 is called with the heading ($8001) in E, the whole part of the speed ($8003) in D and the slope word of the surface under the head ($8005) in HL. Headings count 256 to the turn: $00 moves toward +X, $40 toward -Y, $80 toward -X and $C0 toward +Y. $A926 leaves velocity components in ($803D), ($803F) and ($803B), and the frame's steps are half of each: ($7FF8) in X, ($7FFA) in Y, and for Z half of the slope component less 256 times the fall counter ($8004), in ($7FFC). All are signed 16-bit values in 256ths of a unit; on the flat at a whole speed of 10 and a heading of $00 the X step is $04FB, just under 5 units. A fall counter of 5 or more sets bit 0 of the status byte ($8058), which makes the frame loop discard that frame's controls. The counter then rises by 2 unless the high byte of the Z step plus 9 is negative; with no slope component that holds it at 20, a fall of 10 units a frame. If the counter is below 3 after this, which means the head was supported at the end of the last frame, the slope changes the speed: the size of the slope component is divided by the speed plus 256 in eight shift-and-subtract steps, the quotient is doubled, and it is taken from the 16-bit speed ($8002) when the component points up and added when it points down. A result whose high byte is 12 or more is replaced by $0E02, or by $0002 if bit 7 is set. The SBC at $9D8A subtracts the constant 0 and changes nothing, so on level ground the speed is left alone.","t":"code","b":[175],"m":"xor","o":"a","x":[30300]},{"a":40178,"t":"code","b":[50,0,128],"m":"ld","oa":32768,"o":"(worm_deflected_flag),a"},{"a":40181,"t":"code","b":[42,5,128],"m":"ld","oa":32773,"o":"hl,(ground_slope)","x":[40756]},{"a":40184,"t":"code","b":[58,3,128],"m":"ld","oa":32771,"o":"a,(worm_speed)"},{"a":40187,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":40188,"t":"code","b":[58,1,128],"m":"ld","oa":32769,"o":"a,(worm_heading)"},{"a":40191,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":40192,"t":"code","b":[14,0],"m":"ld","o":"c,$00"},{"a":40194,"t":"code","b":[205,38,169],"m":"call","oa":43302,"o":"worm_velocity"},{"a":40197,"t":"code","b":[42,61,128],"m":"ld","oa":32829,"o":"hl,(probe_top)"},{"a":40200,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":40202,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":40204,"t":"code","b":[34,248,127],"m":"ld","oa":32760,"o":"(worm_step_x),hl"},{"a":40207,"t":"code","b":[42,63,128],"m":"ld","oa":32831,"o":"hl,(probe_ramp)"},{"a":40210,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":40212,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":40214,"t":"code","b":[34,250,127],"m":"ld","oa":32762,"o":"(worm_step_y),hl"},{"a":40217,"t":"code","b":[42,59,128],"m":"ld","oa":32827,"o":"hl,(probe_floor)"},{"a":40220,"t":"code","b":[58,4,128],"m":"ld","oa":32772,"o":"a,(worm_fall_speed)"},{"a":40223,"t":"code","b":[30,0],"m":"ld","o":"e,$00"},{"a":40225,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":40226,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":40228,"t":"code","b":[56,8],"m":"jr","oa":40238,"o":"c,$9D2E"},{"a":40230,"t":"code","b":[58,88,128],"m":"ld","oa":32856,"o":"a,(control_lock)"},{"a":40233,"t":"code","b":[246,1],"m":"or","o":"$01"},{"a":40235,"t":"code","b":[50,88,128],"m":"ld","oa":32856,"o":"(control_lock),a"},{"a":40238,"t":"code","b":[167],"m":"and","o":"a","x":[40228]},{"a":40239,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":40241,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":40243,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":40245,"t":"code","b":[34,252,127],"m":"ld","oa":32764,"o":"(worm_step_z),hl"},{"a":40248,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":40249,"t":"code","b":[198,9],"m":"add","o":"a,$09"},{"a":40251,"t":"code","b":[58,4,128],"m":"ld","oa":32772,"o":"a,(worm_fall_speed)"},{"a":40254,"t":"code","b":[250,70,157],"m":"jp","oa":40262,"o":"m,$9D46"},{"a":40257,"t":"code","b":[198,2],"m":"add","o":"a,$02"},{"a":40259,"t":"code","b":[50,4,128],"m":"ld","oa":32772,"o":"(worm_fall_speed),a"},{"a":40262,"t":"code","b":[254,3],"m":"cp","o":"$03","x":[40254]},{"a":40264,"t":"code","b":[48,90],"m":"jr","oa":40356,"o":"nc,probe_new_head_position"},{"a":40266,"t":"code","b":[42,59,128],"m":"ld","oa":32827,"o":"hl,(probe_floor)"},{"a":40269,"t":"code","b":[203,124],"m":"bit","o":"7,h"},{"a":40271,"t":"code","b":[40,6],"m":"jr","oa":40279,"o":"z,$9D57"},{"a":40273,"t":"code","b":[175],"m":"xor","o":"a"},{"a":40274,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":40275,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":40276,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":40277,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":40279,"t":"code","b":[8],"m":"ex","o":"af,af'","x":[40271]},{"a":40280,"t":"code","b":[237,91,2,128],"m":"ld","oa":32770,"o":"de,(worm_speed_fraction)"},{"a":40284,"t":"code","b":[20],"m":"inc","o":"d"},{"a":40285,"t":"code","b":[6,8],"m":"ld","o":"b,$08"},{"a":40287,"t":"code","b":[14,0],"m":"ld","o":"c,$00"},{"a":40289,"t":"code","b":[203,58],"m":"srl","o":"d","x":[40303]},{"a":40291,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":40293,"t":"code","b":[167],"m":"and","o":"a"},{"a":40294,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":40296,"t":"code","b":[48,2],"m":"jr","oa":40300,"o":"nc,$9D6C"},{"a":40298,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":40299,"t":"code","b":[55],"m":"scf"},{"a":40300,"t":"code","b":[63],"m":"ccf","x":[40296]},{"a":40301,"t":"code","b":[203,17],"m":"rl","o":"c"},{"a":40303,"t":"code","b":[16,240],"m":"djnz","oa":40289,"o":"$9D61"},{"a":40305,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":40307,"t":"code","b":[105],"m":"ld","o":"l,c"},{"a":40308,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":40309,"t":"code","b":[32,7],"m":"jr","oa":40318,"o":"nz,$9D7E"},{"a":40311,"t":"code","b":[175],"m":"xor","o":"a"},{"a":40312,"t":"code","b":[93],"m":"ld","o":"e,l"},{"a":40313,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":40314,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":40315,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":40316,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":40318,"t":"code","b":[203,37],"m":"sla","o":"l","x":[40309]},{"a":40320,"t":"code","b":[203,20],"m":"rl","o":"h"},{"a":40322,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":40323,"t":"code","b":[167],"m":"and","o":"a"},{"a":40324,"t":"code","b":[32,6],"m":"jr","oa":40332,"o":"nz,$9D8C"},{"a":40326,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":40329,"t":"code","b":[167],"m":"and","o":"a"},{"a":40330,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":40332,"t":"code","b":[237,91,2,128],"m":"ld","oa":32770,"o":"de,(worm_speed_fraction)","x":[40324]},{"a":40336,"t":"code","b":[237,90],"m":"adc","o":"hl,de"},{"a":40338,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":40339,"t":"code","b":[254,12],"m":"cp","o":"$0C"},{"a":40341,"t":"code","b":[218,161,157],"m":"jp","oa":40353,"o":"c,$9DA1"},{"a":40344,"t":"code","b":[33,2,14],"m":"ld","o":"hl,$0E02"},{"a":40347,"t":"code","b":[203,127],"m":"bit","o":"7,a"},{"a":40349,"t":"code","b":[40,2],"m":"jr","oa":40353,"o":"z,$9DA1"},{"a":40351,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":40353,"t":"code","b":[34,2,128],"m":"ld","oa":32770,"o":"(worm_speed_fraction),hl","x":[40341,40349]},{"a":40356,"l":"probe_new_head_position","c":"Works out where the step would put the head and asks $9A89 what is there. The query offsets ($8033) and ($8034) are the high bytes of the X and Y steps plus the carry from adding each step's low byte to the fraction of the position ($7FF4, $7FF6), which makes them the whole units the head moves this frame. The new height is ($7FFE) plus the Z step, kept in ($80A1) with its high byte as the query height ($8035); a downward step that would pass below zero is cut to end at zero, and ($7FFC) is rewritten to match. B is loaded with the whole part of the new height for $9EB0. If $9A89 reports nothing touched (($803B) is not $FF) the head is in the air: bit 0 of the whole speed ($8003) is set, so an airborne worm is never at speed 0, the new height is stored in ($7FFE), and control goes to $9F74 to make the move with the fall counter left running. Otherwise the code continues at $9E0A.","t":"code","b":[58,248,127],"m":"ld","oa":32760,"o":"a,(worm_step_x)","x":[40264]},{"a":40359,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":40360,"t":"code","b":[58,244,127],"m":"ld","oa":32756,"o":"a,(worm_x)"},{"a":40363,"t":"code","b":[131],"m":"add","o":"a,e"},{"a":40364,"t":"code","b":[58,249,127],"m":"ld","oa":32761,"o":"a,($7FF9)"},{"a":40367,"t":"code","b":[206,0],"m":"adc","o":"a,$00"},{"a":40369,"t":"code","b":[50,51,128],"m":"ld","oa":32819,"o":"(probe_x),a"},{"a":40372,"t":"code","b":[58,250,127],"m":"ld","oa":32762,"o":"a,(worm_step_y)"},{"a":40375,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":40376,"t":"code","b":[58,246,127],"m":"ld","oa":32758,"o":"a,(worm_y)"},{"a":40379,"t":"code","b":[131],"m":"add","o":"a,e"},{"a":40380,"t":"code","b":[58,251,127],"m":"ld","oa":32763,"o":"a,($7FFB)"},{"a":40383,"t":"code","b":[206,0],"m":"adc","o":"a,$00"},{"a":40385,"t":"code","b":[50,52,128],"m":"ld","oa":32820,"o":"(probe_y),a"},{"a":40388,"t":"code","b":[42,254,127],"m":"ld","oa":32766,"o":"hl,(worm_z)"},{"a":40391,"t":"code","b":[237,91,252,127],"m":"ld","oa":32764,"o":"de,(worm_step_z)"},{"a":40395,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":40396,"t":"code","b":[34,161,128],"m":"ld","oa":32929,"o":"(running_x),hl"},{"a":40399,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":40400,"t":"code","b":[50,53,128],"m":"ld","oa":32821,"o":"(probe_z),a"},{"a":40403,"t":"code","b":[56,22],"m":"jr","oa":40427,"o":"c,$9DEB"},{"a":40405,"t":"code","b":[203,122],"m":"bit","o":"7,d"},{"a":40407,"t":"code","b":[40,18],"m":"jr","oa":40427,"o":"z,$9DEB"},{"a":40409,"t":"code","b":[175],"m":"xor","o":"a"},{"a":40410,"t":"code","b":[50,53,128],"m":"ld","oa":32821,"o":"(probe_z),a"},{"a":40413,"t":"code","b":[237,91,254,127],"m":"ld","oa":32766,"o":"de,(worm_z)"},{"a":40417,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":40418,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":40419,"t":"code","b":[34,161,128],"m":"ld","oa":32929,"o":"(running_x),hl"},{"a":40422,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":40424,"t":"code","b":[34,252,127],"m":"ld","oa":32764,"o":"(worm_step_z),hl"},{"a":40427,"t":"code","b":[205,137,154],"m":"call","oa":39561,"o":"find_floor_under_point","x":[40403,40407]},{"a":40430,"t":"code","b":[58,162,128],"m":"ld","oa":32930,"o":"a,(running_x_high)"},{"a":40433,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":40434,"t":"code","b":[58,59,128],"m":"ld","oa":32827,"o":"a,(probe_floor)"},{"a":40437,"t":"code","b":[254,255],"m":"cp","o":"$FF"},{"a":40439,"t":"code","b":[40,17],"m":"jr","oa":40458,"o":"z,head_touches_object"},{"a":40441,"t":"code","b":[58,3,128],"m":"ld","oa":32771,"o":"a,(worm_speed)"},{"a":40444,"t":"code","b":[203,199],"m":"set","o":"0,a"},{"a":40446,"t":"code","b":[50,3,128],"m":"ld","oa":32771,"o":"(worm_speed),a"},{"a":40449,"t":"code","b":[42,161,128],"m":"ld","oa":32929,"o":"hl,(running_x)"},{"a":40452,"t":"code","b":[34,254,127],"m":"ld","oa":32766,"o":"(worm_z),hl"},{"a":40455,"t":"code","b":[195,116,159],"m":"jp","oa":40820,"o":"$9F74"},{"a":40458,"l":"head_touches_object","c":"The head's new position touches something. The fall counter ($8004) is cleared and IX is loaded with the display-list record chosen by $9A89; when the high byte of that pointer is zero there is no record and control goes straight to $9EB0. Otherwise the record's type (+$0E) decides. $F1, a sparky that can be picked up (see $9BDA): ($8056), the period of the tone the buffer clear at $EAA9 plays this frame, is set to $10; the heading ($8001) is turned by a random amount from -15 to +16, the low five bits of ($E471) less 15; bits 0 and 1 of the whole speed ($8003) are set; the sparky count ($805D) goes up by one; and the sparky's 30-byte pool record, whose address is at +$0A, is deleted by copying the pool's last record over it, after the count byte ($7C71) is reduced and the end pointer ($7C72) moved back 30 bytes. The list record's type becomes $FF so that nothing else meets it this frame. $F6: ($8058) and ($805B) are both set to $C0; a negative ($8058) is the dying state used at $A43B, and bit 7 of ($805B) later sends the end-of-game code at $783C to the sequence at $78C9. $E5: only the list record's type is set to $FF. $F3, a bug: the count in the first body record ($7F5A) goes up by one, sound script $E4E1 is requested through $E4F7, and the bug's pool record is deleted in the same way. Every case continues at $9EB0.","t":"code","b":[175],"m":"xor","o":"a","x":[40439]},{"a":40459,"t":"code","b":[50,4,128],"m":"ld","oa":32772,"o":"(worm_fall_speed),a"},{"a":40462,"t":"code","b":[221,42,55,128],"m":"ld","oa":32823,"o":"ix,(probe_hit)"},{"a":40466,"t":"code","b":[58,56,128],"m":"ld","oa":32824,"o":"a,(probe_hit_high)"},{"a":40469,"t":"code","b":[167],"m":"and","o":"a"},{"a":40470,"t":"code","b":[202,176,158],"m":"jp","oa":40624,"o":"z,head_step_or_wall"},{"a":40473,"t":"code","b":[221,126,14],"m":"ld","o":"a,(ix+$0E)"},{"a":40476,"t":"code","b":[254,241],"m":"cp","o":"$F1"},{"a":40478,"t":"code","b":[194,102,158],"m":"jp","oa":40550,"o":"nz,$9E66"},{"a":40481,"t":"code","b":[62,16],"m":"ld","o":"a,$10"},{"a":40483,"t":"code","b":[50,86,128],"m":"ld","oa":32854,"o":"(clear_click_period),a"},{"a":40486,"t":"code","b":[58,113,228],"m":"ld","oa":58481,"o":"a,($E471)"},{"a":40489,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":40491,"t":"code","b":[214,15],"m":"sub","o":"$0F"},{"a":40493,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":40494,"t":"code","b":[58,1,128],"m":"ld","oa":32769,"o":"a,(worm_heading)"},{"a":40497,"t":"code","b":[131],"m":"add","o":"a,e"},{"a":40498,"t":"code","b":[50,1,128],"m":"ld","oa":32769,"o":"(worm_heading),a"},{"a":40501,"t":"code","b":[58,3,128],"m":"ld","oa":32771,"o":"a,(worm_speed)"},{"a":40504,"t":"code","b":[246,3],"m":"or","o":"$03"},{"a":40506,"t":"code","b":[50,3,128],"m":"ld","oa":32771,"o":"(worm_speed),a"},{"a":40509,"t":"code","b":[58,93,128],"m":"ld","oa":32861,"o":"a,(sparkies)"},{"a":40512,"t":"code","b":[60],"m":"inc","o":"a"},{"a":40513,"t":"code","b":[50,93,128],"m":"ld","oa":32861,"o":"(sparkies),a"},{"a":40516,"t":"code","b":[221,94,10],"m":"ld","o":"e,(ix+$0A)"},{"a":40519,"t":"code","b":[221,86,11],"m":"ld","o":"d,(ix+$0B)"},{"a":40522,"t":"code","b":[58,113,124],"m":"ld","oa":31857,"o":"a,(object_count_plus_one)"},{"a":40525,"t":"code","b":[61],"m":"dec","o":"a"},{"a":40526,"t":"code","b":[50,113,124],"m":"ld","oa":31857,"o":"(object_count_plus_one),a"},{"a":40529,"t":"code","b":[42,114,124],"m":"ld","oa":31858,"o":"hl,(object_list_end)"},{"a":40532,"t":"code","b":[1,30,0],"m":"ld","o":"bc,$001E"},{"a":40535,"t":"code","b":[167],"m":"and","o":"a"},{"a":40536,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":40538,"t":"code","b":[34,114,124],"m":"ld","oa":31858,"o":"(object_list_end),hl"},{"a":40541,"t":"code","b":[237,176],"m":"ldir"},{"a":40543,"t":"code","b":[221,54,14,255],"m":"ld","o":"(ix+$0E),$FF"},{"a":40547,"t":"code","b":[195,176,158],"m":"jp","oa":40624,"o":"head_step_or_wall"},{"a":40550,"t":"code","b":[254,246],"m":"cp","o":"$F6","x":[40478]},{"a":40552,"t":"code","b":[194,115,158],"m":"jp","oa":40563,"o":"nz,$9E73"},{"a":40555,"t":"code","b":[62,192],"m":"ld","o":"a,$C0"},{"a":40557,"t":"code","b":[50,88,128],"m":"ld","oa":32856,"o":"(control_lock),a"},{"a":40560,"t":"code","b":[50,91,128],"m":"ld","oa":32859,"o":"(spindles_collected),a"},{"a":40563,"t":"code","b":[254,229],"m":"cp","o":"$E5","x":[40552]},{"a":40565,"t":"code","b":[194,124,158],"m":"jp","oa":40572,"o":"nz,$9E7C"},{"a":40568,"t":"code","b":[221,54,14,255],"m":"ld","o":"(ix+$0E),$FF"},{"a":40572,"t":"code","b":[254,243],"m":"cp","o":"$F3","x":[40565]},{"a":40574,"t":"code","b":[194,176,158],"m":"jp","oa":40624,"o":"nz,head_step_or_wall"},{"a":40577,"t":"code","b":[58,90,127],"m":"ld","oa":32602,"o":"a,($7F5A)"},{"a":40580,"t":"code","b":[60],"m":"inc","o":"a"},{"a":40581,"t":"code","b":[50,90,127],"m":"ld","oa":32602,"o":"($7F5A),a"},{"a":40584,"t":"code","b":[17,225,228],"m":"ld","o":"de,$E4E1"},{"a":40587,"t":"code","b":[205,247,228],"m":"call","oa":58615,"o":"start_sound_script_if_idle"},{"a":40590,"t":"code","b":[221,94,10],"m":"ld","o":"e,(ix+$0A)"},{"a":40593,"t":"code","b":[221,86,11],"m":"ld","o":"d,(ix+$0B)"},{"a":40596,"t":"code","b":[58,113,124],"m":"ld","oa":31857,"o":"a,(object_count_plus_one)"},{"a":40599,"t":"code","b":[61],"m":"dec","o":"a"},{"a":40600,"t":"code","b":[50,113,124],"m":"ld","oa":31857,"o":"(object_count_plus_one),a"},{"a":40603,"t":"code","b":[42,114,124],"m":"ld","oa":31858,"o":"hl,(object_list_end)"},{"a":40606,"t":"code","b":[1,30,0],"m":"ld","o":"bc,$001E"},{"a":40609,"t":"code","b":[167],"m":"and","o":"a"},{"a":40610,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":40612,"t":"code","b":[34,114,124],"m":"ld","oa":31858,"o":"(object_list_end),hl"},{"a":40615,"t":"code","b":[237,176],"m":"ldir"},{"a":40617,"t":"code","b":[221,54,14,255],"m":"ld","o":"(ix+$0E),$FF"},{"a":40621,"t":"code","b":[195,176,158],"m":"jp","oa":40624,"o":"head_step_or_wall"},{"a":40624,"l":"head_step_or_wall","c":"Decides whether the head can mount what it has met. B holds the whole part of the head's new height from $9DF1, though after a deletion at $9E5D or $9EA7 the LDIR has left it zero and the rise is measured from height 0. If the floor ($8036) is less than 11 above B the head steps onto it at $9F59. Anything higher is a wall; that includes a sparky the head has just eaten, since the firing code at $775B makes one 18 units tall. With no record for the surface the worm is stopped at $9F4C, and so it is when ($8000) shows that this frame has already been deflected once. Otherwise ($8000) and ($8055), the period of the tone played while the frame is copied to the screen at $E9E8, are set to $0C, and the side of the wall is read from the signs of the object's box, whose coordinates are relative to the head before the move: high Y negative (the object lies wholly toward -Y), then low Y not negative, low X not negative, high X negative, tested in that order. If none holds the head is inside the box's outline and the worm is stopped. Each side has a window of 32 heading values centred on the direction straight into the wall: $30 to $4F, $B0 to $CF, $F0 to $0F and $70 to $8F. Inside the window the worm bounces at $9F37. Outside it the heading is replaced by one that runs along the wall, turned three steps away from it: $FD or $83 for an object toward -Y and $7D or $03 for one toward +Y, chosen by bit 6 of the old heading, and $43 or $BD for one toward +X and $3D or $C3 for one toward -X, chosen by bit 7. The new heading is stored at $9F31 and the frame's move is worked out again from $9CF5, this time with ($8000) set.","t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)","x":[40470,40547,40574,40621]},{"a":40627,"t":"code","b":[144],"m":"sub","o":"b"},{"a":40628,"t":"code","b":[254,11],"m":"cp","o":"$0B"},{"a":40630,"t":"code","b":[218,89,159],"m":"jp","oa":40793,"o":"c,commit_head_move"},{"a":40633,"t":"code","b":[58,56,128],"m":"ld","oa":32824,"o":"a,(probe_hit_high)"},{"a":40636,"t":"code","b":[167],"m":"and","o":"a"},{"a":40637,"t":"code","b":[202,76,159],"m":"jp","oa":40780,"o":"z,stop_worm"},{"a":40640,"t":"code","b":[58,1,128],"m":"ld","oa":32769,"o":"a,(worm_heading)"},{"a":40643,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":40644,"t":"code","b":[58,0,128],"m":"ld","oa":32768,"o":"a,(worm_deflected_flag)"},{"a":40647,"t":"code","b":[167],"m":"and","o":"a"},{"a":40648,"t":"code","b":[194,76,159],"m":"jp","oa":40780,"o":"nz,stop_worm"},{"a":40651,"t":"code","b":[62,12],"m":"ld","o":"a,$0C"},{"a":40653,"t":"code","b":[50,0,128],"m":"ld","oa":32768,"o":"(worm_deflected_flag),a"},{"a":40656,"t":"code","b":[50,85,128],"m":"ld","oa":32853,"o":"(copy_click_period),a"},{"a":40659,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":40660,"t":"code","b":[221,203,9,126],"m":"bit","o":"7,(ix+$09)"},{"a":40664,"t":"code","b":[32,22],"m":"jr","oa":40688,"o":"nz,$9EF0"},{"a":40666,"t":"code","b":[221,203,5,126],"m":"bit","o":"7,(ix+$05)"},{"a":40670,"t":"code","b":[40,33],"m":"jr","oa":40705,"o":"z,$9F01"},{"a":40672,"t":"code","b":[221,203,3,126],"m":"bit","o":"7,(ix+$03)"},{"a":40676,"t":"code","b":[40,44],"m":"jr","oa":40722,"o":"z,$9F12"},{"a":40678,"t":"code","b":[221,203,7,126],"m":"bit","o":"7,(ix+$07)"},{"a":40682,"t":"code","b":[194,35,159],"m":"jp","oa":40739,"o":"nz,$9F23"},{"a":40685,"t":"code","b":[195,76,159],"m":"jp","oa":40780,"o":"stop_worm"},{"a":40688,"t":"code","b":[214,48],"m":"sub","o":"$30","x":[40664]},{"a":40690,"t":"code","b":[254,32],"m":"cp","o":"$20"},{"a":40692,"t":"code","b":[56,65],"m":"jr","oa":40759,"o":"c,bounce_off_wall"},{"a":40694,"t":"code","b":[62,253],"m":"ld","o":"a,$FD"},{"a":40696,"t":"code","b":[203,115],"m":"bit","o":"6,e"},{"a":40698,"t":"code","b":[40,53],"m":"jr","oa":40753,"o":"z,$9F31"},{"a":40700,"t":"code","b":[62,131],"m":"ld","o":"a,$83"},{"a":40702,"t":"code","b":[195,49,159],"m":"jp","oa":40753,"o":"$9F31"},{"a":40705,"t":"code","b":[198,80],"m":"add","o":"a,$50","x":[40670]},{"a":40707,"t":"code","b":[254,32],"m":"cp","o":"$20"},{"a":40709,"t":"code","b":[56,48],"m":"jr","oa":40759,"o":"c,bounce_off_wall"},{"a":40711,"t":"code","b":[62,125],"m":"ld","o":"a,$7D"},{"a":40713,"t":"code","b":[203,115],"m":"bit","o":"6,e"},{"a":40715,"t":"code","b":[40,36],"m":"jr","oa":40753,"o":"z,$9F31"},{"a":40717,"t":"code","b":[62,3],"m":"ld","o":"a,$03"},{"a":40719,"t":"code","b":[195,49,159],"m":"jp","oa":40753,"o":"$9F31"},{"a":40722,"t":"code","b":[198,16],"m":"add","o":"a,$10","x":[40676]},{"a":40724,"t":"code","b":[254,32],"m":"cp","o":"$20"},{"a":40726,"t":"code","b":[56,31],"m":"jr","oa":40759,"o":"c,bounce_off_wall"},{"a":40728,"t":"code","b":[62,67],"m":"ld","o":"a,$43"},{"a":40730,"t":"code","b":[203,123],"m":"bit","o":"7,e"},{"a":40732,"t":"code","b":[40,19],"m":"jr","oa":40753,"o":"z,$9F31"},{"a":40734,"t":"code","b":[62,189],"m":"ld","o":"a,$BD"},{"a":40736,"t":"code","b":[195,49,159],"m":"jp","oa":40753,"o":"$9F31"},{"a":40739,"t":"code","b":[214,112],"m":"sub","o":"$70","x":[40682]},{"a":40741,"t":"code","b":[254,32],"m":"cp","o":"$20"},{"a":40743,"t":"code","b":[56,14],"m":"jr","oa":40759,"o":"c,bounce_off_wall"},{"a":40745,"t":"code","b":[62,61],"m":"ld","o":"a,$3D"},{"a":40747,"t":"code","b":[203,123],"m":"bit","o":"7,e"},{"a":40749,"t":"code","b":[40,2],"m":"jr","oa":40753,"o":"z,$9F31"},{"a":40751,"t":"code","b":[62,195],"m":"ld","o":"a,$C3"},{"a":40753,"t":"code","b":[50,1,128],"m":"ld","oa":32769,"o":"(worm_heading),a","x":[40698,40702,40715,40719,40732,40736,40749]},{"a":40756,"t":"code","b":[195,245,156],"m":"jp","oa":40181,"o":"$9CF5"},{"a":40759,"l":"bounce_off_wall","c":"The head has run straight at a wall: the heading ($8001) is turned half a circle with XOR $80, the 16-bit speed ($8002) is divided by four, and the routine returns to the frame loop without moving the head or the body this frame. Reached from the four window tests at $9EF4, $9F05, $9F16 and $9F27.","t":"code","b":[123],"m":"ld","o":"a,e","x":[40692,40709,40726,40743]},{"a":40760,"t":"code","b":[238,128],"m":"xor","o":"$80"},{"a":40762,"t":"code","b":[50,1,128],"m":"ld","oa":32769,"o":"(worm_heading),a"},{"a":40765,"t":"code","b":[42,2,128],"m":"ld","oa":32770,"o":"hl,(worm_speed_fraction)"},{"a":40768,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":40770,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":40772,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":40774,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":40776,"t":"code","b":[34,2,128],"m":"ld","oa":32770,"o":"(worm_speed_fraction),hl"},{"a":40779,"t":"code","b":[201],"m":"ret"},{"a":40780,"l":"stop_worm","c":"Stops the worm dead: the fall counter ($8004) and the 16-bit speed ($8002) are zeroed and the routine returns to the frame loop without moving anything. Three jumps lead here: $9EBD (a wall with no object record), $9EC8 (a second wall in the same frame) and $9EED (the head inside an object's outline).","t":"code","b":[175],"m":"xor","o":"a","x":[40637,40648,40685]},{"a":40781,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":40782,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":40783,"t":"code","b":[50,4,128],"m":"ld","oa":32772,"o":"(worm_fall_speed),a"},{"a":40786,"t":"code","b":[34,2,128],"m":"ld","oa":32770,"o":"(worm_speed_fraction),hl"},{"a":40789,"t":"code","b":[201],"m":"ret"},{"a":40790,"l":"unused_jump_to_edge_test","c":"Three bytes, $C3 $C0 $A3, which would decode as JP $A3C0, the start of the board-edge test further down. They follow the RET at $9F55, no instruction names $9F56, and the address occurs nowhere in the image as a word, so they are never executed. Why they were left here is not established.","t":"byte","b":[195,192,163]},{"a":40793,"l":"commit_head_move","c":"Makes the head's move once it is known to be possible. Entered at $9F59 when the head rests on a surface or steps up to one: the change in whole height goes to ($7FFD), the whole part of the height ($7FFF) becomes the floor ($8036), the low byte of the Z step is cleared, and the slope word of the surface ($8039) is kept in ($8005) for the next frame's velocity. Entered at $9F74 from $9E07 when the head is in the air, which skips all of that. Then the X step ($7FF8) is taken from the first body record's X offset ($7F54), so that the first joint stays where it was, and added to the 16-bit X position ($7FF4). The high byte of the position is the place within a board cell, 256 units across, so a carry in the direction of travel means the head has entered the next cell: toward +X the code falls into $9F92, toward -X it goes to $A035, and with no crossing to $A1B8. The SBC at $9F7B has no AND A before it. Coming from $9F59 the carry is clear, but coming from $9E07 it is still set from the CP $FF at $9DF5, so in every airborne frame the offset loses one extra 256th of a unit.","t":"code","b":[58,255,127],"m":"ld","oa":32767,"o":"a,($7FFF)","x":[40630]},{"a":40796,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":40797,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)"},{"a":40800,"t":"code","b":[147],"m":"sub","o":"e"},{"a":40801,"t":"code","b":[50,253,127],"m":"ld","oa":32765,"o":"($7FFD),a"},{"a":40804,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)"},{"a":40807,"t":"code","b":[50,255,127],"m":"ld","oa":32767,"o":"($7FFF),a"},{"a":40810,"t":"code","b":[175],"m":"xor","o":"a"},{"a":40811,"t":"code","b":[50,252,127],"m":"ld","oa":32764,"o":"(worm_step_z),a"},{"a":40814,"t":"code","b":[42,57,128],"m":"ld","oa":32825,"o":"hl,(probe_slope)"},{"a":40817,"t":"code","b":[34,5,128],"m":"ld","oa":32773,"o":"(ground_slope),hl"},{"a":40820,"t":"code","b":[237,91,248,127],"m":"ld","oa":32760,"o":"de,(worm_step_x)","x":[40455]},{"a":40824,"t":"code","b":[42,84,127],"m":"ld","oa":32596,"o":"hl,(worm_segment_1)"},{"a":40827,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":40829,"t":"code","b":[34,84,127],"m":"ld","oa":32596,"o":"(worm_segment_1),hl"},{"a":40832,"t":"code","b":[42,244,127],"m":"ld","oa":32756,"o":"hl,(worm_x)"},{"a":40835,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":40836,"t":"code","b":[34,244,127],"m":"ld","oa":32756,"o":"(worm_x),hl"},{"a":40839,"t":"code","b":[203,122],"m":"bit","o":"7,d"},{"a":40841,"t":"code","b":[32,1],"m":"jr","oa":40844,"o":"nz,$9F8C"},{"a":40843,"t":"code","b":[63],"m":"ccf"},{"a":40844,"t":"code","b":[218,184,161],"m":"jp","oa":41400,"o":"c,commit_head_move_y","x":[40841]},{"a":40847,"t":"code","b":[194,53,160],"m":"jp","oa":41013,"o":"nz,scroll_cell_window_minus_x"},{"a":40850,"l":"scroll_cell_window_plus_x","c":"The head has crossed into the next board cell toward +X, so the window of cell pointers at $6432 moves one column. The window is five rows of five words, row for Y and column for X, with the head's cell in the middle at $644A. The first word of each row is saved in the five words at $AECE, the table is moved down two bytes with LDIR, and each row's last word is refilled from the cell now in column 3: a cell begins with four link words, and the word at +0 is its neighbour toward +X. A null pointer is replaced by $A8C1, which holds a zero word, so its neighbour is null too. $A0EB then completes column 4 and $A313 rows 0 and 4. From $9FEC every 30-byte pool record is visited, from the last ($7C72 less 30) back to the first at $7C74, to correct its cell reference: bytes +2 and +3 are the record's column and row in the window, or, when +3 is 5 or more, the address of a cell outside it. An address is looked up with $A192 and becomes a column and row again if its cell is now in the window; a column is reduced by one, and a record that leaves through column 0 is given the saved address of the cell it was in. The constants added to IX are $FFE2, minus 30, and $838C, minus $7C74, whose carry tells whether the record is still at or above the start of the pool; $7C74 is then added back. The walk ends with a jump to $A1B8.","t":"code","b":[42,50,100],"m":"ld","oa":25650,"o":"hl,(cell_grid)"},{"a":40853,"t":"code","b":[34,206,174],"m":"ld","oa":44750,"o":"(scratch_record),hl"},{"a":40856,"t":"code","b":[42,60,100],"m":"ld","oa":25660,"o":"hl,($643C)"},{"a":40859,"t":"code","b":[34,208,174],"m":"ld","oa":44752,"o":"($AED0),hl"},{"a":40862,"t":"code","b":[42,70,100],"m":"ld","oa":25670,"o":"hl,($6446)"},{"a":40865,"t":"code","b":[34,210,174],"m":"ld","oa":44754,"o":"($AED2),hl"},{"a":40868,"t":"code","b":[42,80,100],"m":"ld","oa":25680,"o":"hl,($6450)"},{"a":40871,"t":"code","b":[34,212,174],"m":"ld","oa":44756,"o":"($AED4),hl"},{"a":40874,"t":"code","b":[42,90,100],"m":"ld","oa":25690,"o":"hl,($645A)"},{"a":40877,"t":"code","b":[34,214,174],"m":"ld","oa":44758,"o":"($AED6),hl"},{"a":40880,"t":"code","b":[17,50,100],"m":"ld","o":"de,$6432"},{"a":40883,"t":"code","b":[33,52,100],"m":"ld","o":"hl,$6434"},{"a":40886,"t":"code","b":[1,48,0],"m":"ld","o":"bc,$0030"},{"a":40889,"t":"code","b":[237,176],"m":"ldir"},{"a":40891,"t":"code","b":[33,56,100],"m":"ld","o":"hl,$6438"},{"a":40894,"t":"code","b":[6,5],"m":"ld","o":"b,$05"},{"a":40896,"t":"code","b":[94],"m":"ld","o":"e,(hl)","x":[40917]},{"a":40897,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":40898,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":40899,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":40900,"t":"code","b":[179],"m":"or","o":"e"},{"a":40901,"t":"code","b":[32,3],"m":"jr","oa":40906,"o":"nz,$9FCA"},{"a":40903,"t":"code","b":[17,193,168],"m":"ld","o":"de,$A8C1"},{"a":40906,"t":"code","b":[35],"m":"inc","o":"hl","x":[40901]},{"a":40907,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":40908,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":40909,"t":"code","b":[19],"m":"inc","o":"de"},{"a":40910,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":40911,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":40912,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":40913,"t":"code","b":[17,7,0],"m":"ld","o":"de,$0007"},{"a":40916,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":40917,"t":"code","b":[16,233],"m":"djnz","oa":40896,"o":"$9FC0"},{"a":40919,"t":"code","b":[253,33,58,100],"m":"ld","o":"iy,$643A"},{"a":40923,"t":"code","b":[205,235,160],"m":"call","oa":41195,"o":"fill_window_column"},{"a":40926,"t":"code","b":[253,33,50,100],"m":"ld","o":"iy,$6432"},{"a":40930,"t":"code","b":[205,19,163],"m":"call","oa":41747,"o":"fill_window_row"},{"a":40933,"t":"code","b":[253,33,90,100],"m":"ld","o":"iy,$645A"},{"a":40937,"t":"code","b":[205,19,163],"m":"call","oa":41747,"o":"fill_window_row"},{"a":40940,"t":"code","b":[221,42,114,124],"m":"ld","oa":31858,"o":"ix,(object_list_end)"},{"a":40944,"t":"code","b":[17,226,255],"m":"ld","o":"de,$FFE2","x":[41010]},{"a":40947,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":40949,"t":"code","b":[17,140,131],"m":"ld","o":"de,$838C"},{"a":40952,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":40954,"t":"code","b":[210,184,161],"m":"jp","oa":41400,"o":"nc,commit_head_move_y"},{"a":40957,"t":"code","b":[17,116,124],"m":"ld","o":"de,$7C74"},{"a":40960,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":40962,"t":"code","b":[221,126,3],"m":"ld","o":"a,(ix+$03)"},{"a":40965,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":40967,"t":"code","b":[218,26,160],"m":"jp","oa":40986,"o":"c,$A01A"},{"a":40970,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":40971,"t":"code","b":[221,110,2],"m":"ld","o":"l,(ix+$02)"},{"a":40974,"t":"code","b":[205,146,161],"m":"call","oa":41362,"o":"find_cell_in_window"},{"a":40977,"t":"code","b":[221,117,2],"m":"ld","o":"(ix+$02),l"},{"a":40980,"t":"code","b":[221,116,3],"m":"ld","o":"(ix+$03),h"},{"a":40983,"t":"code","b":[195,50,160],"m":"jp","oa":41010,"o":"$A032"},{"a":40986,"t":"code","b":[221,53,2],"m":"dec","o":"(ix+$02)","x":[40967]},{"a":40989,"t":"code","b":[242,50,160],"m":"jp","oa":41010,"o":"p,$A032"},{"a":40992,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":40994,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":40995,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":40997,"t":"code","b":[33,206,174],"m":"ld","o":"hl,$AECE"},{"a":41000,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":41001,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41002,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41003,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41004,"t":"code","b":[221,115,2],"m":"ld","o":"(ix+$02),e"},{"a":41007,"t":"code","b":[221,114,3],"m":"ld","o":"(ix+$03),d"},{"a":41010,"t":"code","b":[195,240,159],"m":"jp","oa":40944,"o":"$9FF0","x":[40983,40989]},{"a":41013,"l":"scroll_cell_window_minus_x","c":"The mirror of $9F92 for a crossing toward -X. The last word of each row is saved at $AECE, the table is moved up two bytes with LDDR, and each row's first word is refilled from the cell now in column 1 through its link word at +4, the neighbour toward -X. The base $A8BD stands in for a null pointer because $A8BD plus 4 is the zero word at $A8C1. $A0EB completes column 0 and $A313 rows 0 and 4. The pool walk from $A09A adds one to each record's column, and a record whose column reaches 5 is given the saved address of the cell it was in. The walk ends with a jump to $A1B8.","t":"code","b":[42,58,100],"m":"ld","oa":25658,"o":"hl,($643A)","x":[40847]},{"a":41016,"t":"code","b":[34,206,174],"m":"ld","oa":44750,"o":"(scratch_record),hl"},{"a":41019,"t":"code","b":[42,68,100],"m":"ld","oa":25668,"o":"hl,($6444)"},{"a":41022,"t":"code","b":[34,208,174],"m":"ld","oa":44752,"o":"($AED0),hl"},{"a":41025,"t":"code","b":[42,78,100],"m":"ld","oa":25678,"o":"hl,($644E)"},{"a":41028,"t":"code","b":[34,210,174],"m":"ld","oa":44754,"o":"($AED2),hl"},{"a":41031,"t":"code","b":[42,88,100],"m":"ld","oa":25688,"o":"hl,($6458)"},{"a":41034,"t":"code","b":[34,212,174],"m":"ld","oa":44756,"o":"($AED4),hl"},{"a":41037,"t":"code","b":[42,98,100],"m":"ld","oa":25698,"o":"hl,($6462)"},{"a":41040,"t":"code","b":[34,214,174],"m":"ld","oa":44758,"o":"($AED6),hl"},{"a":41043,"t":"code","b":[33,97,100],"m":"ld","o":"hl,$6461"},{"a":41046,"t":"code","b":[17,99,100],"m":"ld","o":"de,$6463"},{"a":41049,"t":"code","b":[1,48,0],"m":"ld","o":"bc,$0030"},{"a":41052,"t":"code","b":[237,184],"m":"lddr"},{"a":41054,"t":"code","b":[221,33,50,100],"m":"ld","o":"ix,$6432"},{"a":41058,"t":"code","b":[1,4,5],"m":"ld","o":"bc,$0504"},{"a":41061,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":41063,"t":"code","b":[221,110,2],"m":"ld","o":"l,(ix+$02)","x":[41091]},{"a":41066,"t":"code","b":[221,102,3],"m":"ld","o":"h,(ix+$03)"},{"a":41069,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":41070,"t":"code","b":[181],"m":"or","o":"l"},{"a":41071,"t":"code","b":[32,3],"m":"jr","oa":41076,"o":"nz,$A074"},{"a":41073,"t":"code","b":[33,189,168],"m":"ld","o":"hl,$A8BD"},{"a":41076,"t":"code","b":[89],"m":"ld","o":"e,c","x":[41071]},{"a":41077,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":41078,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":41079,"t":"code","b":[221,119,0],"m":"ld","o":"(ix+$00),a"},{"a":41082,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41083,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":41084,"t":"code","b":[221,119,1],"m":"ld","o":"(ix+$01),a"},{"a":41087,"t":"code","b":[30,10],"m":"ld","o":"e,$0A"},{"a":41089,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":41091,"t":"code","b":[16,226],"m":"djnz","oa":41063,"o":"$A067"},{"a":41093,"t":"code","b":[253,33,50,100],"m":"ld","o":"iy,$6432"},{"a":41097,"t":"code","b":[205,235,160],"m":"call","oa":41195,"o":"fill_window_column"},{"a":41100,"t":"code","b":[253,33,50,100],"m":"ld","o":"iy,$6432"},{"a":41104,"t":"code","b":[205,19,163],"m":"call","oa":41747,"o":"fill_window_row"},{"a":41107,"t":"code","b":[253,33,90,100],"m":"ld","o":"iy,$645A"},{"a":41111,"t":"code","b":[205,19,163],"m":"call","oa":41747,"o":"fill_window_row"},{"a":41114,"t":"code","b":[221,42,114,124],"m":"ld","oa":31858,"o":"ix,(object_list_end)"},{"a":41118,"t":"code","b":[17,226,255],"m":"ld","o":"de,$FFE2","x":[41192]},{"a":41121,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":41123,"t":"code","b":[17,140,131],"m":"ld","o":"de,$838C"},{"a":41126,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":41128,"t":"code","b":[210,184,161],"m":"jp","oa":41400,"o":"nc,commit_head_move_y"},{"a":41131,"t":"code","b":[17,116,124],"m":"ld","o":"de,$7C74"},{"a":41134,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":41136,"t":"code","b":[221,126,3],"m":"ld","o":"a,(ix+$03)"},{"a":41139,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":41141,"t":"code","b":[218,200,160],"m":"jp","oa":41160,"o":"c,$A0C8"},{"a":41144,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":41145,"t":"code","b":[221,110,2],"m":"ld","o":"l,(ix+$02)"},{"a":41148,"t":"code","b":[205,146,161],"m":"call","oa":41362,"o":"find_cell_in_window"},{"a":41151,"t":"code","b":[221,117,2],"m":"ld","o":"(ix+$02),l"},{"a":41154,"t":"code","b":[221,116,3],"m":"ld","o":"(ix+$03),h"},{"a":41157,"t":"code","b":[195,232,160],"m":"jp","oa":41192,"o":"$A0E8"},{"a":41160,"t":"code","b":[221,52,2],"m":"inc","o":"(ix+$02)","x":[41141]},{"a":41163,"t":"code","b":[221,126,2],"m":"ld","o":"a,(ix+$02)"},{"a":41166,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":41168,"t":"code","b":[218,232,160],"m":"jp","oa":41192,"o":"c,$A0E8"},{"a":41171,"t":"code","b":[221,126,3],"m":"ld","o":"a,(ix+$03)"},{"a":41174,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":41176,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":41177,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":41179,"t":"code","b":[33,206,174],"m":"ld","o":"hl,$AECE"},{"a":41182,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":41183,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41184,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41185,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41186,"t":"code","b":[221,115,2],"m":"ld","o":"(ix+$02),e"},{"a":41189,"t":"code","b":[221,114,3],"m":"ld","o":"(ix+$03),d"},{"a":41192,"t":"code","b":[195,158,160],"m":"jp","oa":41118,"o":"$A09E","x":[41157,41168]},{"a":41195,"l":"fill_window_column","c":"Completes one column of the cell window from the cells already in it. IY points at the column's word in row 0 ($6432 for column 0, $643A for column 4). Going down, each non-null cell's link word at +6, its neighbour toward +Y, is written to the row below; then, coming back up from row 4, each non-null cell's link word at +2, its neighbour toward -Y, is written to the row above. A null entry leaves the next one as it was. Called six times, all from the four window scrolls: $9FDB, $A089, $A21C, $A223, $A2BC and $A2C3.","t":"code","b":[1,6,0],"m":"ld","o":"bc,$0006","x":[40923,41097,41500,41507,41660,41667]},{"a":41198,"t":"code","b":[253,110,0],"m":"ld","o":"l,(iy+$00)"},{"a":41201,"t":"code","b":[253,102,1],"m":"ld","o":"h,(iy+$01)"},{"a":41204,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":41205,"t":"code","b":[180],"m":"or","o":"h"},{"a":41206,"t":"code","b":[40,10],"m":"jr","oa":41218,"o":"z,$A102"},{"a":41208,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":41209,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41210,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41211,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41212,"t":"code","b":[253,115,10],"m":"ld","o":"(iy+$0A),e"},{"a":41215,"t":"code","b":[253,114,11],"m":"ld","o":"(iy+$0B),d"},{"a":41218,"t":"code","b":[253,110,10],"m":"ld","o":"l,(iy+$0A)","x":[41206]},{"a":41221,"t":"code","b":[253,102,11],"m":"ld","o":"h,(iy+$0B)"},{"a":41224,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":41225,"t":"code","b":[180],"m":"or","o":"h"},{"a":41226,"t":"code","b":[40,10],"m":"jr","oa":41238,"o":"z,$A116"},{"a":41228,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":41229,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41230,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41231,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41232,"t":"code","b":[253,115,20],"m":"ld","o":"(iy+$14),e"},{"a":41235,"t":"code","b":[253,114,21],"m":"ld","o":"(iy+$15),d"},{"a":41238,"t":"code","b":[253,110,20],"m":"ld","o":"l,(iy+$14)","x":[41226]},{"a":41241,"t":"code","b":[253,102,21],"m":"ld","o":"h,(iy+$15)"},{"a":41244,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":41245,"t":"code","b":[180],"m":"or","o":"h"},{"a":41246,"t":"code","b":[40,10],"m":"jr","oa":41258,"o":"z,$A12A"},{"a":41248,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":41249,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41250,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41251,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41252,"t":"code","b":[253,115,30],"m":"ld","o":"(iy+$1E),e"},{"a":41255,"t":"code","b":[253,114,31],"m":"ld","o":"(iy+$1F),d"},{"a":41258,"t":"code","b":[253,110,30],"m":"ld","o":"l,(iy+$1E)","x":[41246]},{"a":41261,"t":"code","b":[253,102,31],"m":"ld","o":"h,(iy+$1F)"},{"a":41264,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":41265,"t":"code","b":[180],"m":"or","o":"h"},{"a":41266,"t":"code","b":[40,10],"m":"jr","oa":41278,"o":"z,$A13E"},{"a":41268,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":41269,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41270,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41271,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41272,"t":"code","b":[253,115,40],"m":"ld","o":"(iy+$28),e"},{"a":41275,"t":"code","b":[253,114,41],"m":"ld","o":"(iy+$29),d"},{"a":41278,"t":"code","b":[1,2,0],"m":"ld","o":"bc,$0002","x":[41266]},{"a":41281,"t":"code","b":[253,110,40],"m":"ld","o":"l,(iy+$28)"},{"a":41284,"t":"code","b":[253,102,41],"m":"ld","o":"h,(iy+$29)"},{"a":41287,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":41288,"t":"code","b":[180],"m":"or","o":"h"},{"a":41289,"t":"code","b":[40,10],"m":"jr","oa":41301,"o":"z,$A155"},{"a":41291,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":41292,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41293,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41294,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41295,"t":"code","b":[253,115,30],"m":"ld","o":"(iy+$1E),e"},{"a":41298,"t":"code","b":[253,114,31],"m":"ld","o":"(iy+$1F),d"},{"a":41301,"t":"code","b":[253,110,30],"m":"ld","o":"l,(iy+$1E)","x":[41289]},{"a":41304,"t":"code","b":[253,102,31],"m":"ld","o":"h,(iy+$1F)"},{"a":41307,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":41308,"t":"code","b":[180],"m":"or","o":"h"},{"a":41309,"t":"code","b":[40,10],"m":"jr","oa":41321,"o":"z,$A169"},{"a":41311,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":41312,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41313,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41314,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41315,"t":"code","b":[253,115,20],"m":"ld","o":"(iy+$14),e"},{"a":41318,"t":"code","b":[253,114,21],"m":"ld","o":"(iy+$15),d"},{"a":41321,"t":"code","b":[253,110,20],"m":"ld","o":"l,(iy+$14)","x":[41309]},{"a":41324,"t":"code","b":[253,102,21],"m":"ld","o":"h,(iy+$15)"},{"a":41327,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":41328,"t":"code","b":[180],"m":"or","o":"h"},{"a":41329,"t":"code","b":[40,10],"m":"jr","oa":41341,"o":"z,$A17D"},{"a":41331,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":41332,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41333,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41334,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41335,"t":"code","b":[253,115,10],"m":"ld","o":"(iy+$0A),e"},{"a":41338,"t":"code","b":[253,114,11],"m":"ld","o":"(iy+$0B),d"},{"a":41341,"t":"code","b":[253,110,10],"m":"ld","o":"l,(iy+$0A)","x":[41329]},{"a":41344,"t":"code","b":[253,102,11],"m":"ld","o":"h,(iy+$0B)"},{"a":41347,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":41348,"t":"code","b":[180],"m":"or","o":"h"},{"a":41349,"t":"code","b":[40,10],"m":"jr","oa":41361,"o":"z,$A191"},{"a":41351,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":41352,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41353,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41354,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41355,"t":"code","b":[253,115,0],"m":"ld","o":"(iy+$00),e"},{"a":41358,"t":"code","b":[253,114,1],"m":"ld","o":"(iy+$01),d"},{"a":41361,"t":"code","b":[201],"m":"ret","x":[41349]},{"a":41362,"l":"find_cell_in_window","c":"Searches the 25 words of the cell window at $6432 for the cell address in HL. If it is there the routine returns its column in L and its row in H, both 0 to 4; if not it returns with HL unchanged and A at 5. The pool walks use it to turn the address a record carries into window coordinates once its cell has scrolled into view; a record whose cell is still outside keeps the address. Six callers: $A00E, $A0BC, $A248 and $A2E8 in the window scrolls, and $D767 and $DA65.","t":"code","b":[175],"m":"xor","o":"a","x":[40974,41148,41544,41704,55143,55909]},{"a":41363,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":41364,"t":"code","b":[175],"m":"xor","o":"a"},{"a":41365,"t":"code","b":[17,50,100],"m":"ld","o":"de,$6432"},{"a":41368,"t":"code","b":[235],"m":"ex","o":"de,hl","x":[41383,41393]},{"a":41369,"t":"code","b":[78],"m":"ld","o":"c,(hl)"},{"a":41370,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41371,"t":"code","b":[70],"m":"ld","o":"b,(hl)"},{"a":41372,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41373,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":41374,"t":"code","b":[167],"m":"and","o":"a"},{"a":41375,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":41377,"t":"code","b":[40,17],"m":"jr","oa":41396,"o":"z,$A1B4"},{"a":41379,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":41380,"t":"code","b":[60],"m":"inc","o":"a"},{"a":41381,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":41383,"t":"code","b":[218,152,161],"m":"jp","oa":41368,"o":"c,$A198"},{"a":41386,"t":"code","b":[175],"m":"xor","o":"a"},{"a":41387,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":41388,"t":"code","b":[60],"m":"inc","o":"a"},{"a":41389,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":41391,"t":"code","b":[208],"m":"ret","o":"nc"},{"a":41392,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":41393,"t":"code","b":[195,152,161],"m":"jp","oa":41368,"o":"$A198"},{"a":41396,"t":"code","b":[111],"m":"ld","o":"l,a","x":[41377]},{"a":41397,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":41398,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":41399,"t":"code","b":[201],"m":"ret"},{"a":41400,"l":"commit_head_move_y","c":"The Y part of the head's move, reached from $9F8C when no cell edge was crossed in X and from the two X scrolls when their pool walks finish. The Y step ($7FFA) is taken from the first body record's Y offset ($7F56) and added to the 16-bit Y position ($7FF6). With no cell crossing control goes to $A3B3, and for a crossing toward +Y to $A275; a crossing toward -Y falls into $A1D7.","t":"code","b":[237,91,250,127],"m":"ld","oa":32762,"o":"de,(worm_step_y)","x":[40844,40954,41128]},{"a":41404,"t":"code","b":[42,86,127],"m":"ld","oa":32598,"o":"hl,($7F56)"},{"a":41407,"t":"code","b":[167],"m":"and","o":"a"},{"a":41408,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":41410,"t":"code","b":[34,86,127],"m":"ld","oa":32598,"o":"($7F56),hl"},{"a":41413,"t":"code","b":[42,246,127],"m":"ld","oa":32758,"o":"hl,(worm_y)"},{"a":41416,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":41417,"t":"code","b":[34,246,127],"m":"ld","oa":32758,"o":"(worm_y),hl"},{"a":41420,"t":"code","b":[203,122],"m":"bit","o":"7,d"},{"a":41422,"t":"code","b":[32,1],"m":"jr","oa":41425,"o":"nz,$A1D1"},{"a":41424,"t":"code","b":[63],"m":"ccf"},{"a":41425,"t":"code","b":[218,179,163],"m":"jp","oa":41907,"o":"c,commit_head_move_z","x":[41422]},{"a":41428,"t":"code","b":[202,117,162],"m":"jp","oa":41589,"o":"z,scroll_cell_window_plus_y"},{"a":41431,"l":"scroll_cell_window_minus_y","c":"The head has crossed into the next cell toward -Y. The window's last row is saved at $AECE (ten bytes), rows 0 to 3 are moved down one row with LDDR, and each word of row 0 is refilled from the cell now below it in row 1 through its link word at +2, the neighbour toward -Y; $A8BF plus 2 is the zero word at $A8C1, for a null. $A313 completes row 0 and $A0EB columns 0 and 4. The pool walk from $A226 adds one to each record's row (+3), and a record whose row reaches 5 is given the saved address from $AECE indexed by its column. The walk ends with a jump to $A3B3.","t":"code","b":[33,90,100],"m":"ld","o":"hl,$645A"},{"a":41434,"t":"code","b":[17,206,174],"m":"ld","o":"de,$AECE"},{"a":41437,"t":"code","b":[1,10,0],"m":"ld","o":"bc,$000A"},{"a":41440,"t":"code","b":[237,176],"m":"ldir"},{"a":41442,"t":"code","b":[33,89,100],"m":"ld","o":"hl,$6459"},{"a":41445,"t":"code","b":[17,99,100],"m":"ld","o":"de,$6463"},{"a":41448,"t":"code","b":[1,40,0],"m":"ld","o":"bc,$0028"},{"a":41451,"t":"code","b":[237,184],"m":"lddr"},{"a":41453,"t":"code","b":[6,5],"m":"ld","o":"b,$05"},{"a":41455,"t":"code","b":[221,33,50,100],"m":"ld","o":"ix,$6432"},{"a":41459,"t":"code","b":[17,2,0],"m":"ld","o":"de,$0002"},{"a":41462,"t":"code","b":[221,110,10],"m":"ld","o":"l,(ix+$0A)","x":[41487]},{"a":41465,"t":"code","b":[221,102,11],"m":"ld","o":"h,(ix+$0B)"},{"a":41468,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":41469,"t":"code","b":[181],"m":"or","o":"l"},{"a":41470,"t":"code","b":[32,3],"m":"jr","oa":41475,"o":"nz,$A203"},{"a":41472,"t":"code","b":[33,191,168],"m":"ld","o":"hl,$A8BF"},{"a":41475,"t":"code","b":[25],"m":"add","o":"hl,de","x":[41470]},{"a":41476,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":41477,"t":"code","b":[221,119,0],"m":"ld","o":"(ix+$00),a"},{"a":41480,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41481,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":41482,"t":"code","b":[221,119,1],"m":"ld","o":"(ix+$01),a"},{"a":41485,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":41487,"t":"code","b":[16,229],"m":"djnz","oa":41462,"o":"$A1F6"},{"a":41489,"t":"code","b":[253,33,50,100],"m":"ld","o":"iy,$6432"},{"a":41493,"t":"code","b":[205,19,163],"m":"call","oa":41747,"o":"fill_window_row"},{"a":41496,"t":"code","b":[253,33,50,100],"m":"ld","o":"iy,$6432"},{"a":41500,"t":"code","b":[205,235,160],"m":"call","oa":41195,"o":"fill_window_column"},{"a":41503,"t":"code","b":[253,33,58,100],"m":"ld","o":"iy,$643A"},{"a":41507,"t":"code","b":[205,235,160],"m":"call","oa":41195,"o":"fill_window_column"},{"a":41510,"t":"code","b":[221,42,114,124],"m":"ld","oa":31858,"o":"ix,(object_list_end)"},{"a":41514,"t":"code","b":[17,226,255],"m":"ld","o":"de,$FFE2","x":[41586]},{"a":41517,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":41519,"t":"code","b":[17,140,131],"m":"ld","o":"de,$838C"},{"a":41522,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":41524,"t":"code","b":[210,179,163],"m":"jp","oa":41907,"o":"nc,commit_head_move_z"},{"a":41527,"t":"code","b":[17,116,124],"m":"ld","o":"de,$7C74"},{"a":41530,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":41532,"t":"code","b":[221,126,3],"m":"ld","o":"a,(ix+$03)"},{"a":41535,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":41537,"t":"code","b":[218,84,162],"m":"jp","oa":41556,"o":"c,$A254"},{"a":41540,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":41541,"t":"code","b":[221,110,2],"m":"ld","o":"l,(ix+$02)"},{"a":41544,"t":"code","b":[205,146,161],"m":"call","oa":41362,"o":"find_cell_in_window"},{"a":41547,"t":"code","b":[221,117,2],"m":"ld","o":"(ix+$02),l"},{"a":41550,"t":"code","b":[221,116,3],"m":"ld","o":"(ix+$03),h"},{"a":41553,"t":"code","b":[195,114,162],"m":"jp","oa":41586,"o":"$A272"},{"a":41556,"t":"code","b":[60],"m":"inc","o":"a","x":[41537]},{"a":41557,"t":"code","b":[221,119,3],"m":"ld","o":"(ix+$03),a"},{"a":41560,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":41562,"t":"code","b":[218,114,162],"m":"jp","oa":41586,"o":"c,$A272"},{"a":41565,"t":"code","b":[221,126,2],"m":"ld","o":"a,(ix+$02)"},{"a":41568,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":41570,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":41571,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":41573,"t":"code","b":[33,206,174],"m":"ld","o":"hl,$AECE"},{"a":41576,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":41577,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41578,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41579,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41580,"t":"code","b":[221,115,2],"m":"ld","o":"(ix+$02),e"},{"a":41583,"t":"code","b":[221,114,3],"m":"ld","o":"(ix+$03),d"},{"a":41586,"t":"code","b":[195,42,162],"m":"jp","oa":41514,"o":"$A22A","x":[41553,41562]},{"a":41589,"l":"scroll_cell_window_plus_y","c":"The crossing toward +Y. Row 0 is saved at $AECE, rows 1 to 4 are moved up one row with LDIR, and each word of row 4 is refilled from the cell now above it in row 3 through its link word at +6, the neighbour toward +Y; $A8BB plus 6 is the zero word at $A8C1, for a null. $A313 completes row 4 and $A0EB columns 0 and 4. The pool walk from $A2C6 takes one from each record's row, and a record whose row passes below 0 is given the saved address indexed by its column. The walk ends with a jump to $A3B3. The operands $A8BB, $A8BD and $A8BF used by the scrolls are addresses inside the last two instructions of $A7D5; they serve only as bases for this arithmetic and nothing is read from them.","t":"code","b":[33,50,100],"m":"ld","o":"hl,$6432","x":[41428]},{"a":41592,"t":"code","b":[17,206,174],"m":"ld","o":"de,$AECE"},{"a":41595,"t":"code","b":[1,10,0],"m":"ld","o":"bc,$000A"},{"a":41598,"t":"code","b":[237,176],"m":"ldir"},{"a":41600,"t":"code","b":[33,60,100],"m":"ld","o":"hl,$643C"},{"a":41603,"t":"code","b":[17,50,100],"m":"ld","o":"de,$6432"},{"a":41606,"t":"code","b":[1,40,0],"m":"ld","o":"bc,$0028"},{"a":41609,"t":"code","b":[237,176],"m":"ldir"},{"a":41611,"t":"code","b":[6,5],"m":"ld","o":"b,$05"},{"a":41613,"t":"code","b":[221,33,50,100],"m":"ld","o":"ix,$6432"},{"a":41617,"t":"code","b":[17,6,0],"m":"ld","o":"de,$0006"},{"a":41620,"t":"code","b":[221,110,30],"m":"ld","o":"l,(ix+$1E)","x":[41647]},{"a":41623,"t":"code","b":[221,102,31],"m":"ld","o":"h,(ix+$1F)"},{"a":41626,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":41627,"t":"code","b":[181],"m":"or","o":"l"},{"a":41628,"t":"code","b":[32,3],"m":"jr","oa":41633,"o":"nz,$A2A1"},{"a":41630,"t":"code","b":[33,187,168],"m":"ld","o":"hl,$A8BB"},{"a":41633,"t":"code","b":[25],"m":"add","o":"hl,de","x":[41628]},{"a":41634,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":41635,"t":"code","b":[221,119,40],"m":"ld","o":"(ix+$28),a"},{"a":41638,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41639,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":41640,"t":"code","b":[221,119,41],"m":"ld","o":"(ix+$29),a"},{"a":41643,"t":"code","b":[221,35],"m":"inc","o":"ix"},{"a":41645,"t":"code","b":[221,35],"m":"inc","o":"ix"},{"a":41647,"t":"code","b":[16,227],"m":"djnz","oa":41620,"o":"$A294"},{"a":41649,"t":"code","b":[253,33,90,100],"m":"ld","o":"iy,$645A"},{"a":41653,"t":"code","b":[205,19,163],"m":"call","oa":41747,"o":"fill_window_row"},{"a":41656,"t":"code","b":[253,33,50,100],"m":"ld","o":"iy,$6432"},{"a":41660,"t":"code","b":[205,235,160],"m":"call","oa":41195,"o":"fill_window_column"},{"a":41663,"t":"code","b":[253,33,58,100],"m":"ld","o":"iy,$643A"},{"a":41667,"t":"code","b":[205,235,160],"m":"call","oa":41195,"o":"fill_window_column"},{"a":41670,"t":"code","b":[221,42,114,124],"m":"ld","oa":31858,"o":"ix,(object_list_end)"},{"a":41674,"t":"code","b":[17,226,255],"m":"ld","o":"de,$FFE2","x":[41744]},{"a":41677,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":41679,"t":"code","b":[17,140,131],"m":"ld","o":"de,$838C"},{"a":41682,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":41684,"t":"code","b":[210,179,163],"m":"jp","oa":41907,"o":"nc,commit_head_move_z"},{"a":41687,"t":"code","b":[17,116,124],"m":"ld","o":"de,$7C74"},{"a":41690,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":41692,"t":"code","b":[221,126,3],"m":"ld","o":"a,(ix+$03)"},{"a":41695,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":41697,"t":"code","b":[218,244,162],"m":"jp","oa":41716,"o":"c,$A2F4"},{"a":41700,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":41701,"t":"code","b":[221,110,2],"m":"ld","o":"l,(ix+$02)"},{"a":41704,"t":"code","b":[205,146,161],"m":"call","oa":41362,"o":"find_cell_in_window"},{"a":41707,"t":"code","b":[221,117,2],"m":"ld","o":"(ix+$02),l"},{"a":41710,"t":"code","b":[221,116,3],"m":"ld","o":"(ix+$03),h"},{"a":41713,"t":"code","b":[195,16,163],"m":"jp","oa":41744,"o":"$A310"},{"a":41716,"t":"code","b":[61],"m":"dec","o":"a","x":[41697]},{"a":41717,"t":"code","b":[221,119,3],"m":"ld","o":"(ix+$03),a"},{"a":41720,"t":"code","b":[242,16,163],"m":"jp","oa":41744,"o":"p,$A310"},{"a":41723,"t":"code","b":[221,126,2],"m":"ld","o":"a,(ix+$02)"},{"a":41726,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":41728,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":41729,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":41731,"t":"code","b":[33,206,174],"m":"ld","o":"hl,$AECE"},{"a":41734,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":41735,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41736,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41737,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41738,"t":"code","b":[221,115,2],"m":"ld","o":"(ix+$02),e"},{"a":41741,"t":"code","b":[221,114,3],"m":"ld","o":"(ix+$03),d"},{"a":41744,"t":"code","b":[195,202,162],"m":"jp","oa":41674,"o":"$A2CA","x":[41713,41720]},{"a":41747,"l":"fill_window_row","c":"Completes one row of the cell window, the counterpart of $A0EB. IY points at the row's first word ($6432 for row 0, $645A for row 4). Going along the row, each non-null cell's link word at +0, its neighbour toward +X, is written to the next column; then, coming back from column 4, each non-null cell's link word at +4, its neighbour toward -X, is written to the column before. A null entry leaves the next one as it was. Called six times, all from the four window scrolls: $9FE2, $9FE9, $A090, $A097, $A215 and $A2B5.","t":"code","b":[253,110,0],"m":"ld","o":"l,(iy+$00)","x":[40930,40937,41104,41111,41493,41653]},{"a":41750,"t":"code","b":[253,102,1],"m":"ld","o":"h,(iy+$01)"},{"a":41753,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":41754,"t":"code","b":[180],"m":"or","o":"h"},{"a":41755,"t":"code","b":[40,9],"m":"jr","oa":41766,"o":"z,$A326"},{"a":41757,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41758,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41759,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41760,"t":"code","b":[253,115,2],"m":"ld","o":"(iy+$02),e"},{"a":41763,"t":"code","b":[253,114,3],"m":"ld","o":"(iy+$03),d"},{"a":41766,"t":"code","b":[253,110,2],"m":"ld","o":"l,(iy+$02)","x":[41755]},{"a":41769,"t":"code","b":[253,102,3],"m":"ld","o":"h,(iy+$03)"},{"a":41772,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":41773,"t":"code","b":[180],"m":"or","o":"h"},{"a":41774,"t":"code","b":[40,9],"m":"jr","oa":41785,"o":"z,$A339"},{"a":41776,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41777,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41778,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41779,"t":"code","b":[253,115,4],"m":"ld","o":"(iy+$04),e"},{"a":41782,"t":"code","b":[253,114,5],"m":"ld","o":"(iy+$05),d"},{"a":41785,"t":"code","b":[253,110,4],"m":"ld","o":"l,(iy+$04)","x":[41774]},{"a":41788,"t":"code","b":[253,102,5],"m":"ld","o":"h,(iy+$05)"},{"a":41791,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":41792,"t":"code","b":[180],"m":"or","o":"h"},{"a":41793,"t":"code","b":[40,9],"m":"jr","oa":41804,"o":"z,$A34C"},{"a":41795,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41796,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41797,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41798,"t":"code","b":[253,115,6],"m":"ld","o":"(iy+$06),e"},{"a":41801,"t":"code","b":[253,114,7],"m":"ld","o":"(iy+$07),d"},{"a":41804,"t":"code","b":[253,110,6],"m":"ld","o":"l,(iy+$06)","x":[41793]},{"a":41807,"t":"code","b":[253,102,7],"m":"ld","o":"h,(iy+$07)"},{"a":41810,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":41811,"t":"code","b":[180],"m":"or","o":"h"},{"a":41812,"t":"code","b":[40,9],"m":"jr","oa":41823,"o":"z,$A35F"},{"a":41814,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41815,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41816,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41817,"t":"code","b":[253,115,8],"m":"ld","o":"(iy+$08),e"},{"a":41820,"t":"code","b":[253,114,9],"m":"ld","o":"(iy+$09),d"},{"a":41823,"t":"code","b":[1,4,0],"m":"ld","o":"bc,$0004","x":[41812]},{"a":41826,"t":"code","b":[253,110,8],"m":"ld","o":"l,(iy+$08)"},{"a":41829,"t":"code","b":[253,102,9],"m":"ld","o":"h,(iy+$09)"},{"a":41832,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":41833,"t":"code","b":[180],"m":"or","o":"h"},{"a":41834,"t":"code","b":[40,10],"m":"jr","oa":41846,"o":"z,$A376"},{"a":41836,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":41837,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41838,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41839,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41840,"t":"code","b":[253,115,6],"m":"ld","o":"(iy+$06),e"},{"a":41843,"t":"code","b":[253,114,7],"m":"ld","o":"(iy+$07),d"},{"a":41846,"t":"code","b":[253,110,6],"m":"ld","o":"l,(iy+$06)","x":[41834]},{"a":41849,"t":"code","b":[253,102,7],"m":"ld","o":"h,(iy+$07)"},{"a":41852,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":41853,"t":"code","b":[180],"m":"or","o":"h"},{"a":41854,"t":"code","b":[40,10],"m":"jr","oa":41866,"o":"z,$A38A"},{"a":41856,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":41857,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41858,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41859,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41860,"t":"code","b":[253,115,4],"m":"ld","o":"(iy+$04),e"},{"a":41863,"t":"code","b":[253,114,5],"m":"ld","o":"(iy+$05),d"},{"a":41866,"t":"code","b":[253,110,4],"m":"ld","o":"l,(iy+$04)","x":[41854]},{"a":41869,"t":"code","b":[253,102,5],"m":"ld","o":"h,(iy+$05)"},{"a":41872,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":41873,"t":"code","b":[180],"m":"or","o":"h"},{"a":41874,"t":"code","b":[40,10],"m":"jr","oa":41886,"o":"z,$A39E"},{"a":41876,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":41877,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41878,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41879,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41880,"t":"code","b":[253,115,2],"m":"ld","o":"(iy+$02),e"},{"a":41883,"t":"code","b":[253,114,3],"m":"ld","o":"(iy+$03),d"},{"a":41886,"t":"code","b":[253,110,2],"m":"ld","o":"l,(iy+$02)","x":[41874]},{"a":41889,"t":"code","b":[253,102,3],"m":"ld","o":"h,(iy+$03)"},{"a":41892,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":41893,"t":"code","b":[180],"m":"or","o":"h"},{"a":41894,"t":"code","b":[40,10],"m":"jr","oa":41906,"o":"z,$A3B2"},{"a":41896,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":41897,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":41898,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":41899,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":41900,"t":"code","b":[253,115,0],"m":"ld","o":"(iy+$00),e"},{"a":41903,"t":"code","b":[253,114,1],"m":"ld","o":"(iy+$01),d"},{"a":41906,"t":"code","b":[201],"m":"ret","x":[41894]},{"a":41907,"l":"commit_head_move_z","c":"The Z step ($7FFC) is taken from the first body record's Z offset ($7F58), the last of the three subtractions that leave the first joint in place while the head moves. Reached from $A1D1 when no cell edge was crossed in Y and from the ends of the two Y scrolls at $A234 and $A2D4.","t":"code","b":[237,91,252,127],"m":"ld","oa":32764,"o":"de,(worm_step_z)","x":[41425,41524,41684]},{"a":41911,"t":"code","b":[42,88,127],"m":"ld","oa":32600,"o":"hl,($7F58)"},{"a":41914,"t":"code","b":[167],"m":"and","o":"a"},{"a":41915,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":41917,"t":"code","b":[34,88,127],"m":"ld","oa":32600,"o":"($7F58),hl"},{"a":41920,"l":"turn_back_at_board_edge","c":"Tests whether the head is still on the board: the high byte of the window's centre word, at $644B, is zero when the cell the head has entered does not exist. In that case the heading ($8001) is turned half a circle, bit 1 of the status byte ($8058) is set so that the frame loop discards this frame's controls, one sparky is taken from ($805D), and ($8056) is set to 9. The loop at $A3DB stores 0 in place of any result of $F0 or more, which catches the borrow from an empty count. The move itself is not undone, so the head is left inside the missing cell.","t":"code","b":[58,75,100],"m":"ld","oa":25675,"o":"a,($644B)"},{"a":41923,"t":"code","b":[167],"m":"and","o":"a"},{"a":41924,"t":"code","b":[32,35],"m":"jr","oa":41961,"o":"nz,begin_body_pass"},{"a":41926,"t":"code","b":[58,1,128],"m":"ld","oa":32769,"o":"a,(worm_heading)"},{"a":41929,"t":"code","b":[198,128],"m":"add","o":"a,$80"},{"a":41931,"t":"code","b":[50,1,128],"m":"ld","oa":32769,"o":"(worm_heading),a"},{"a":41934,"t":"code","b":[58,88,128],"m":"ld","oa":32856,"o":"a,(control_lock)"},{"a":41937,"t":"code","b":[246,2],"m":"or","o":"$02"},{"a":41939,"t":"code","b":[50,88,128],"m":"ld","oa":32856,"o":"(control_lock),a"},{"a":41942,"t":"code","b":[58,93,128],"m":"ld","oa":32861,"o":"a,(sparkies)"},{"a":41945,"t":"code","b":[214,1],"m":"sub","o":"$01"},{"a":41947,"t":"code","b":[50,93,128],"m":"ld","oa":32861,"o":"(sparkies),a","x":[41954]},{"a":41950,"t":"code","b":[254,240],"m":"cp","o":"$F0"},{"a":41952,"t":"code","b":[62,0],"m":"ld","o":"a,$00"},{"a":41954,"t":"code","b":[48,247],"m":"jr","oa":41947,"o":"nc,$A3DB"},{"a":41956,"t":"code","b":[62,9],"m":"ld","o":"a,$09"},{"a":41958,"t":"code","b":[50,86,128],"m":"ld","oa":32854,"o":"(clear_click_period),a"},{"a":41961,"l":"begin_body_pass","c":"Sets up the pass over the body. IX points at the first of the 16-byte body records at $7F54, the loop counter ($80A0) is loaded from ($809F), which holds 4 and which no instruction naming it writes, and the running position of the joint being placed is started from the head: ($80A1) and ($80A3) take the frame's X and Y steps, so they are measured from where the head was, and ($80A5) takes the head's height ($7FFE).","t":"code","b":[221,33,84,127],"m":"ld","o":"ix,$7F54","x":[41924]},{"a":41965,"t":"code","b":[58,159,128],"m":"ld","oa":32927,"o":"a,(worm_segment_count)"},{"a":41968,"t":"code","b":[50,160,128],"m":"ld","oa":32928,"o":"(segment_loop_counter),a"},{"a":41971,"t":"code","b":[42,248,127],"m":"ld","oa":32760,"o":"hl,(worm_step_x)"},{"a":41974,"t":"code","b":[34,161,128],"m":"ld","oa":32929,"o":"(running_x),hl"},{"a":41977,"t":"code","b":[42,250,127],"m":"ld","oa":32762,"o":"hl,(worm_step_y)"},{"a":41980,"t":"code","b":[34,163,128],"m":"ld","oa":32931,"o":"(running_y),hl"},{"a":41983,"t":"code","b":[42,254,127],"m":"ld","oa":32766,"o":"hl,(worm_z)"},{"a":41986,"t":"code","b":[34,165,128],"m":"ld","oa":32933,"o":"(running_z),hl"},{"a":41989,"l":"pull_body_link","c":"One pass of the body loop, for the record at IX. A record holds the signed 16-bit offset of a joint from the one in front of it (+0 X, +2 Y, +4 Z, in 256ths of a unit), a bug count at +6 and the whole part of the joint's height at +7. The link's length is taken as the sum of the three absolute offsets. While that sum is under 11 units the link is slack and nothing is pulled. Otherwise a quarter of each offset is moved out of this record and into the next (+$10, +$12, +$14), which draws the joint a quarter of the way toward the one in front and leaves its follower where it was; for Z the share is a quarter when the joint is below its leader and an eighth when it is above. The shares are kept at $9A7F, $9A81 and $9A83 so that the wall code at $A670 can return them. If the X and Y offsets alone add up to 45 units or more the high bytes of all three offsets are zeroed first, which collapses the link. From $A50E the offsets are added to the running position to give the joint's place: the high bytes become the query point ($8033), ($8034) and ($8035), the height is also written to +7, and a Z offset that would put the joint below zero is zeroed instead. A joint 20 units or more above its leader sets bit 1 of the status byte ($8058), which like bit 0 makes the frame loop discard the frame's controls. When bit 7 of ($8058) is set the worm is dying: each pass takes one from the whole speed ($8003) until it is zero, a link 2 units or longer has the high bytes of its X and Y offsets moved by +1 or -1 according to bit 1 of ($E46F) and of ($E470), a shorter link has its bug count cleared, and the pull is always applied, so the body shakes and draws together. The fourth record's shares collect in the six bytes at $7F94, past the last record.","t":"code","b":[221,110,0],"m":"ld","o":"l,(ix+$00)","x":[42961]},{"a":41992,"t":"code","b":[221,102,1],"m":"ld","o":"h,(ix+$01)"},{"a":41995,"t":"code","b":[203,124],"m":"bit","o":"7,h"},{"a":41997,"t":"code","b":[40,6],"m":"jr","oa":42005,"o":"z,$A415"},{"a":41999,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":42000,"t":"code","b":[175],"m":"xor","o":"a"},{"a":42001,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":42002,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":42003,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":42005,"t":"code","b":[77],"m":"ld","o":"c,l","x":[41997]},{"a":42006,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":42007,"t":"code","b":[221,110,2],"m":"ld","o":"l,(ix+$02)"},{"a":42010,"t":"code","b":[221,102,3],"m":"ld","o":"h,(ix+$03)"},{"a":42013,"t":"code","b":[203,124],"m":"bit","o":"7,h"},{"a":42015,"t":"code","b":[40,6],"m":"jr","oa":42023,"o":"z,$A427"},{"a":42017,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":42018,"t":"code","b":[175],"m":"xor","o":"a"},{"a":42019,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":42020,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":42021,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":42023,"t":"code","b":[9],"m":"add","o":"hl,bc","x":[42015]},{"a":42024,"t":"code","b":[77],"m":"ld","o":"c,l"},{"a":42025,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":42026,"t":"code","b":[221,110,4],"m":"ld","o":"l,(ix+$04)"},{"a":42029,"t":"code","b":[221,102,5],"m":"ld","o":"h,(ix+$05)"},{"a":42032,"t":"code","b":[203,124],"m":"bit","o":"7,h"},{"a":42034,"t":"code","b":[40,6],"m":"jr","oa":42042,"o":"z,$A43A"},{"a":42036,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":42037,"t":"code","b":[175],"m":"xor","o":"a"},{"a":42038,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":42039,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":42040,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":42042,"t":"code","b":[9],"m":"add","o":"hl,bc","x":[42034]},{"a":42043,"t":"code","b":[58,88,128],"m":"ld","oa":32856,"o":"a,(control_lock)"},{"a":42046,"t":"code","b":[167],"m":"and","o":"a"},{"a":42047,"t":"code","b":[242,115,164],"m":"jp","oa":42099,"o":"p,$A473"},{"a":42050,"t":"code","b":[58,3,128],"m":"ld","oa":32771,"o":"a,(worm_speed)"},{"a":42053,"t":"code","b":[61],"m":"dec","o":"a"},{"a":42054,"t":"code","b":[250,76,164],"m":"jp","oa":42060,"o":"m,$A44C"},{"a":42057,"t":"code","b":[50,3,128],"m":"ld","oa":32771,"o":"(worm_speed),a"},{"a":42060,"t":"code","b":[124],"m":"ld","o":"a,h","x":[42054]},{"a":42061,"t":"code","b":[230,254],"m":"and","o":"$FE"},{"a":42063,"t":"code","b":[40,27],"m":"jr","oa":42092,"o":"z,$A46C"},{"a":42065,"t":"code","b":[58,111,228],"m":"ld","oa":58479,"o":"a,(random_state)"},{"a":42068,"t":"code","b":[230,2],"m":"and","o":"$02"},{"a":42070,"t":"code","b":[61],"m":"dec","o":"a"},{"a":42071,"t":"code","b":[221,134,1],"m":"add","o":"a,(ix+$01)"},{"a":42074,"t":"code","b":[221,119,1],"m":"ld","o":"(ix+$01),a"},{"a":42077,"t":"code","b":[58,112,228],"m":"ld","oa":58480,"o":"a,($E470)"},{"a":42080,"t":"code","b":[230,2],"m":"and","o":"$02"},{"a":42082,"t":"code","b":[61],"m":"dec","o":"a"},{"a":42083,"t":"code","b":[221,134,3],"m":"add","o":"a,(ix+$03)"},{"a":42086,"t":"code","b":[221,119,3],"m":"ld","o":"(ix+$03),a"},{"a":42089,"t":"code","b":[195,112,164],"m":"jp","oa":42096,"o":"$A470"},{"a":42092,"t":"code","b":[221,54,6,0],"m":"ld","o":"(ix+$06),$00","x":[42063]},{"a":42096,"t":"code","b":[38,11],"m":"ld","o":"h,$0B","x":[42089]},{"a":42098,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":42099,"t":"code","b":[124],"m":"ld","o":"a,h","x":[42047]},{"a":42100,"t":"code","b":[254,11],"m":"cp","o":"$0B"},{"a":42102,"t":"code","b":[218,14,165],"m":"jp","oa":42254,"o":"c,$A50E"},{"a":42105,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":42106,"t":"code","b":[254,45],"m":"cp","o":"$2D"},{"a":42108,"t":"code","b":[218,137,164],"m":"jp","oa":42121,"o":"c,$A489"},{"a":42111,"t":"code","b":[175],"m":"xor","o":"a"},{"a":42112,"t":"code","b":[221,119,1],"m":"ld","o":"(ix+$01),a"},{"a":42115,"t":"code","b":[221,119,3],"m":"ld","o":"(ix+$03),a"},{"a":42118,"t":"code","b":[221,119,5],"m":"ld","o":"(ix+$05),a"},{"a":42121,"t":"code","b":[221,94,0],"m":"ld","o":"e,(ix+$00)","x":[42108]},{"a":42124,"t":"code","b":[221,86,1],"m":"ld","o":"d,(ix+$01)"},{"a":42127,"t":"code","b":[107],"m":"ld","o":"l,e"},{"a":42128,"t":"code","b":[98],"m":"ld","o":"h,d"},{"a":42129,"t":"code","b":[203,42],"m":"sra","o":"d"},{"a":42131,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":42133,"t":"code","b":[203,42],"m":"sra","o":"d"},{"a":42135,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":42137,"t":"code","b":[237,83,127,154],"m":"ld","oa":39551,"o":"(link_handover_0),de"},{"a":42141,"t":"code","b":[167],"m":"and","o":"a"},{"a":42142,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":42144,"t":"code","b":[221,117,0],"m":"ld","o":"(ix+$00),l"},{"a":42147,"t":"code","b":[221,116,1],"m":"ld","o":"(ix+$01),h"},{"a":42150,"t":"code","b":[221,110,16],"m":"ld","o":"l,(ix+$10)"},{"a":42153,"t":"code","b":[221,102,17],"m":"ld","o":"h,(ix+$11)"},{"a":42156,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42157,"t":"code","b":[221,117,16],"m":"ld","o":"(ix+$10),l"},{"a":42160,"t":"code","b":[221,116,17],"m":"ld","o":"(ix+$11),h"},{"a":42163,"t":"code","b":[221,94,2],"m":"ld","o":"e,(ix+$02)"},{"a":42166,"t":"code","b":[221,86,3],"m":"ld","o":"d,(ix+$03)"},{"a":42169,"t":"code","b":[107],"m":"ld","o":"l,e"},{"a":42170,"t":"code","b":[98],"m":"ld","o":"h,d"},{"a":42171,"t":"code","b":[203,42],"m":"sra","o":"d"},{"a":42173,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":42175,"t":"code","b":[203,42],"m":"sra","o":"d"},{"a":42177,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":42179,"t":"code","b":[237,83,129,154],"m":"ld","oa":39553,"o":"(link_handover_2),de"},{"a":42183,"t":"code","b":[167],"m":"and","o":"a"},{"a":42184,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":42186,"t":"code","b":[221,117,2],"m":"ld","o":"(ix+$02),l"},{"a":42189,"t":"code","b":[221,116,3],"m":"ld","o":"(ix+$03),h"},{"a":42192,"t":"code","b":[221,110,18],"m":"ld","o":"l,(ix+$12)"},{"a":42195,"t":"code","b":[221,102,19],"m":"ld","o":"h,(ix+$13)"},{"a":42198,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42199,"t":"code","b":[221,117,18],"m":"ld","o":"(ix+$12),l"},{"a":42202,"t":"code","b":[221,116,19],"m":"ld","o":"(ix+$13),h"},{"a":42205,"t":"code","b":[221,94,4],"m":"ld","o":"e,(ix+$04)"},{"a":42208,"t":"code","b":[221,86,5],"m":"ld","o":"d,(ix+$05)"},{"a":42211,"t":"code","b":[107],"m":"ld","o":"l,e"},{"a":42212,"t":"code","b":[98],"m":"ld","o":"h,d"},{"a":42213,"t":"code","b":[203,42],"m":"sra","o":"d"},{"a":42215,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":42217,"t":"code","b":[203,42],"m":"sra","o":"d"},{"a":42219,"t":"code","b":[250,242,164],"m":"jp","oa":42226,"o":"m,$A4F2"},{"a":42222,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":42224,"t":"code","b":[203,42],"m":"sra","o":"d"},{"a":42226,"t":"code","b":[203,27],"m":"rr","o":"e","x":[42219]},{"a":42228,"t":"code","b":[237,83,131,154],"m":"ld","oa":39555,"o":"(link_handover_4),de"},{"a":42232,"t":"code","b":[167],"m":"and","o":"a"},{"a":42233,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":42235,"t":"code","b":[221,117,4],"m":"ld","o":"(ix+$04),l"},{"a":42238,"t":"code","b":[221,116,5],"m":"ld","o":"(ix+$05),h"},{"a":42241,"t":"code","b":[221,110,20],"m":"ld","o":"l,(ix+$14)"},{"a":42244,"t":"code","b":[221,102,21],"m":"ld","o":"h,(ix+$15)"},{"a":42247,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42248,"t":"code","b":[221,117,20],"m":"ld","o":"(ix+$14),l"},{"a":42251,"t":"code","b":[221,116,21],"m":"ld","o":"(ix+$15),h"},{"a":42254,"t":"code","b":[42,161,128],"m":"ld","oa":32929,"o":"hl,(running_x)","x":[42102]},{"a":42257,"t":"code","b":[221,94,0],"m":"ld","o":"e,(ix+$00)"},{"a":42260,"t":"code","b":[221,86,1],"m":"ld","o":"d,(ix+$01)"},{"a":42263,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42264,"t":"code","b":[34,161,128],"m":"ld","oa":32929,"o":"(running_x),hl"},{"a":42267,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":42268,"t":"code","b":[50,51,128],"m":"ld","oa":32819,"o":"(probe_x),a"},{"a":42271,"t":"code","b":[42,163,128],"m":"ld","oa":32931,"o":"hl,(running_y)"},{"a":42274,"t":"code","b":[221,94,2],"m":"ld","o":"e,(ix+$02)"},{"a":42277,"t":"code","b":[221,86,3],"m":"ld","o":"d,(ix+$03)"},{"a":42280,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42281,"t":"code","b":[34,163,128],"m":"ld","oa":32931,"o":"(running_y),hl"},{"a":42284,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":42285,"t":"code","b":[50,52,128],"m":"ld","oa":32820,"o":"(probe_y),a"},{"a":42288,"t":"code","b":[42,165,128],"m":"ld","oa":32933,"o":"hl,(running_z)"},{"a":42291,"t":"code","b":[221,94,4],"m":"ld","o":"e,(ix+$04)"},{"a":42294,"t":"code","b":[221,86,5],"m":"ld","o":"d,(ix+$05)"},{"a":42297,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42298,"t":"code","b":[56,16],"m":"jr","oa":42316,"o":"c,$A54C"},{"a":42300,"t":"code","b":[203,122],"m":"bit","o":"7,d"},{"a":42302,"t":"code","b":[40,12],"m":"jr","oa":42316,"o":"z,$A54C"},{"a":42304,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":42307,"t":"code","b":[221,115,4],"m":"ld","o":"(ix+$04),e"},{"a":42310,"t":"code","b":[221,114,5],"m":"ld","o":"(ix+$05),d"},{"a":42313,"t":"code","b":[42,165,128],"m":"ld","oa":32933,"o":"hl,(running_z)"},{"a":42316,"t":"code","b":[34,165,128],"m":"ld","oa":32933,"o":"(running_z),hl","x":[42298,42302]},{"a":42319,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":42320,"t":"code","b":[221,119,7],"m":"ld","o":"(ix+$07),a"},{"a":42323,"t":"code","b":[50,53,128],"m":"ld","oa":32821,"o":"(probe_z),a"},{"a":42326,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":42327,"t":"code","b":[167],"m":"and","o":"a"},{"a":42328,"t":"code","b":[250,104,165],"m":"jp","oa":42344,"o":"m,settle_body_joint"},{"a":42331,"t":"code","b":[254,20],"m":"cp","o":"$14"},{"a":42333,"t":"code","b":[218,104,165],"m":"jp","oa":42344,"o":"c,settle_body_joint"},{"a":42336,"t":"code","b":[58,88,128],"m":"ld","oa":32856,"o":"a,(control_lock)"},{"a":42339,"t":"code","b":[246,2],"m":"or","o":"$02"},{"a":42341,"t":"code","b":[50,88,128],"m":"ld","oa":32856,"o":"(control_lock),a"},{"a":42344,"l":"settle_body_joint","c":"Finds the ground for the joint just placed, and is entered again each time a pick-up or the wall code has changed things. $9A89 is asked about the query point. If nothing is touched the joint drops toward the highest surface below it, by at most 5 units a frame: at $A581 the change is added to the high byte of this record's Z offset and to the running height ($80A6), taken from the next record's Z offset, and the loop moves on at $A7C5. If something is touched and it has a display-list record, IY is pointed at the record and its type (+$0E) is compared with $F7, $F5, $F3 and $F1 in turn, the four cases that follow. Any other type, and a touch with no record, is treated as plain ground at $A670.","t":"code","b":[221,229],"m":"push","o":"ix","x":[42328,42333,42458,42531,42605,42927]},{"a":42346,"t":"code","b":[205,137,154],"m":"call","oa":39561,"o":"find_floor_under_point"},{"a":42349,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":42351,"t":"code","b":[58,166,128],"m":"ld","oa":32934,"o":"a,(running_z_high)"},{"a":42354,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":42355,"t":"code","b":[58,59,128],"m":"ld","oa":32827,"o":"a,(probe_floor)"},{"a":42358,"t":"code","b":[254,255],"m":"cp","o":"$FF"},{"a":42360,"t":"code","b":[40,31],"m":"jr","oa":42393,"o":"z,$A599"},{"a":42362,"t":"code","b":[147],"m":"sub","o":"e"},{"a":42363,"t":"code","b":[254,251],"m":"cp","o":"$FB"},{"a":42365,"t":"code","b":[48,2],"m":"jr","oa":42369,"o":"nc,$A581"},{"a":42367,"t":"code","b":[62,251],"m":"ld","o":"a,$FB"},{"a":42369,"t":"code","b":[95],"m":"ld","o":"e,a","x":[42365,42618,42635,42935]},{"a":42370,"t":"code","b":[221,134,5],"m":"add","o":"a,(ix+$05)"},{"a":42373,"t":"code","b":[221,119,5],"m":"ld","o":"(ix+$05),a"},{"a":42376,"t":"code","b":[58,166,128],"m":"ld","oa":32934,"o":"a,(running_z_high)"},{"a":42379,"t":"code","b":[131],"m":"add","o":"a,e"},{"a":42380,"t":"code","b":[50,166,128],"m":"ld","oa":32934,"o":"(running_z_high),a"},{"a":42383,"t":"code","b":[221,126,21],"m":"ld","o":"a,(ix+$15)"},{"a":42386,"t":"code","b":[147],"m":"sub","o":"e"},{"a":42387,"t":"code","b":[221,119,21],"m":"ld","o":"(ix+$15),a"},{"a":42390,"t":"code","b":[195,197,167],"m":"jp","oa":42949,"o":"next_body_link"},{"a":42393,"t":"code","b":[253,42,55,128],"m":"ld","oa":32823,"o":"iy,(probe_hit)","x":[42360]},{"a":42397,"t":"code","b":[58,56,128],"m":"ld","oa":32824,"o":"a,(probe_hit_high)"},{"a":42400,"t":"code","b":[167],"m":"and","o":"a"},{"a":42401,"t":"code","b":[202,112,166],"m":"jp","oa":42608,"o":"z,joint_step_or_wall"},{"a":42404,"t":"code","b":[253,126,14],"m":"ld","o":"a,(iy+$0E)"},{"a":42407,"t":"code","b":[254,247],"m":"cp","o":"$F7"},{"a":42409,"t":"code","b":[194,221,165],"m":"jp","oa":42461,"o":"nz,joint_on_debugger"},{"a":42412,"l":"joint_collects_spindle","c":"A body joint touches an object of type $F7, a spindle; the display list only carries the $F7 records whose byte +5 is $0C (see $AFE9). Byte +1 of the board record the object came from is set to $FF, which keeps it out of the display list until the new-game code at $75BE restores it. ($8055) and ($8056) are set to 8, five sparkies are added to ($805D), the spindle count ($805B) goes up by one, and its new value is added to the 16-bit score at ($8060), so each spindle is worth one point more than the last. The list record's type becomes $FF and the joint is settled again from $A568. The head has no such case at $9E19: only a body joint collects a spindle.","t":"code","b":[253,110,10],"m":"ld","o":"l,(iy+$0A)"},{"a":42415,"t":"code","b":[253,102,11],"m":"ld","o":"h,(iy+$0B)"},{"a":42418,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":42419,"t":"code","b":[54,255],"m":"ld","o":"(hl),$FF"},{"a":42421,"t":"code","b":[62,8],"m":"ld","o":"a,$08"},{"a":42423,"t":"code","b":[50,85,128],"m":"ld","oa":32853,"o":"(copy_click_period),a"},{"a":42426,"t":"code","b":[50,86,128],"m":"ld","oa":32854,"o":"(clear_click_period),a"},{"a":42429,"t":"code","b":[58,93,128],"m":"ld","oa":32861,"o":"a,(sparkies)"},{"a":42432,"t":"code","b":[198,5],"m":"add","o":"a,$05"},{"a":42434,"t":"code","b":[50,93,128],"m":"ld","oa":32861,"o":"(sparkies),a"},{"a":42437,"t":"code","b":[58,91,128],"m":"ld","oa":32859,"o":"a,(spindles_collected)"},{"a":42440,"t":"code","b":[60],"m":"inc","o":"a"},{"a":42441,"t":"code","b":[50,91,128],"m":"ld","oa":32859,"o":"(spindles_collected),a"},{"a":42444,"t":"code","b":[42,96,128],"m":"ld","oa":32864,"o":"hl,(score)"},{"a":42447,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":42448,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":42450,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42451,"t":"code","b":[34,96,128],"m":"ld","oa":32864,"o":"(score),hl"},{"a":42454,"t":"code","b":[253,54,14,255],"m":"ld","o":"(iy+$0E),$FF"},{"a":42458,"t":"code","b":[195,104,165],"m":"jp","oa":42344,"o":"settle_body_joint"},{"a":42461,"l":"joint_on_debugger","c":"A body joint touches an object of type $F5, the de-bugger. If this record's bug count (+6) is not zero it is cleared and sound script $E4E1 is requested through $E4F7. Either way the object is then treated as ground at $A670. Each record is cleaned as its own joint reaches the object, and the head's contact with it has no effect on the counts. A type other than $F5 goes on to $A5F6.","t":"code","b":[254,245],"m":"cp","o":"$F5","x":[42409]},{"a":42463,"t":"code","b":[194,246,165],"m":"jp","oa":42486,"o":"nz,joint_catches_bug"},{"a":42466,"t":"code","b":[221,126,6],"m":"ld","o":"a,(ix+$06)"},{"a":42469,"t":"code","b":[167],"m":"and","o":"a"},{"a":42470,"t":"code","b":[202,112,166],"m":"jp","oa":42608,"o":"z,joint_step_or_wall"},{"a":42473,"t":"code","b":[221,54,6,0],"m":"ld","o":"(ix+$06),$00"},{"a":42477,"t":"code","b":[17,225,228],"m":"ld","o":"de,$E4E1"},{"a":42480,"t":"code","b":[205,247,228],"m":"call","oa":58615,"o":"start_sound_script_if_idle"},{"a":42483,"t":"code","b":[195,112,166],"m":"jp","oa":42608,"o":"joint_step_or_wall"},{"a":42486,"l":"joint_catches_bug","c":"A body joint touches an object of type $F3, a bug. The bug count of this record (+6) goes up by one, sound script $E4E1 is requested, and the bug's 30-byte pool record is deleted as at $9E8E: the count byte ($7C71) is reduced, the end pointer ($7C72) moved back 30 bytes and the pool's last record copied over the bug's with LDIR. The list record's type becomes $FF and the joint is settled again from $A568. These counts are what $77A0 examines each frame: when all four records hold at least one bug it sets ($8058) to $FF and the worm dies. A type other than $F3 goes on to $A626.","t":"code","b":[254,243],"m":"cp","o":"$F3","x":[42463]},{"a":42488,"t":"code","b":[194,38,166],"m":"jp","oa":42534,"o":"nz,joint_eats_sparky"},{"a":42491,"t":"code","b":[221,52,6],"m":"inc","o":"(ix+$06)"},{"a":42494,"t":"code","b":[17,225,228],"m":"ld","o":"de,$E4E1"},{"a":42497,"t":"code","b":[205,247,228],"m":"call","oa":58615,"o":"start_sound_script_if_idle"},{"a":42500,"t":"code","b":[253,94,10],"m":"ld","o":"e,(iy+$0A)"},{"a":42503,"t":"code","b":[253,86,11],"m":"ld","o":"d,(iy+$0B)"},{"a":42506,"t":"code","b":[58,113,124],"m":"ld","oa":31857,"o":"a,(object_count_plus_one)"},{"a":42509,"t":"code","b":[61],"m":"dec","o":"a"},{"a":42510,"t":"code","b":[50,113,124],"m":"ld","oa":31857,"o":"(object_count_plus_one),a"},{"a":42513,"t":"code","b":[42,114,124],"m":"ld","oa":31858,"o":"hl,(object_list_end)"},{"a":42516,"t":"code","b":[1,30,0],"m":"ld","o":"bc,$001E"},{"a":42519,"t":"code","b":[167],"m":"and","o":"a"},{"a":42520,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":42522,"t":"code","b":[34,114,124],"m":"ld","oa":31858,"o":"(object_list_end),hl"},{"a":42525,"t":"code","b":[237,176],"m":"ldir"},{"a":42527,"t":"code","b":[253,54,14,255],"m":"ld","o":"(iy+$0E),$FF"},{"a":42531,"t":"code","b":[195,104,165],"m":"jp","oa":42344,"o":"settle_body_joint"},{"a":42534,"l":"joint_eats_sparky","c":"A body joint touches a sparky that can be picked up (type $F1): the same reward as for the head at $9E21, except that ($8056) is set to $11. The heading ($8001) is turned by -15 to +16 from ($E471), bits 0 and 1 of the whole speed ($8003) are set, ($805D) goes up by one, the pool record is deleted, the list record's type becomes $FF, and the joint is settled again from $A568. Any other type leaves the test at $A628 for $A670.","t":"code","b":[254,241],"m":"cp","o":"$F1","x":[42488]},{"a":42536,"t":"code","b":[194,112,166],"m":"jp","oa":42608,"o":"nz,joint_step_or_wall"},{"a":42539,"t":"code","b":[62,17],"m":"ld","o":"a,$11"},{"a":42541,"t":"code","b":[50,86,128],"m":"ld","oa":32854,"o":"(clear_click_period),a"},{"a":42544,"t":"code","b":[58,113,228],"m":"ld","oa":58481,"o":"a,($E471)"},{"a":42547,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":42549,"t":"code","b":[214,15],"m":"sub","o":"$0F"},{"a":42551,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":42552,"t":"code","b":[58,1,128],"m":"ld","oa":32769,"o":"a,(worm_heading)"},{"a":42555,"t":"code","b":[131],"m":"add","o":"a,e"},{"a":42556,"t":"code","b":[50,1,128],"m":"ld","oa":32769,"o":"(worm_heading),a"},{"a":42559,"t":"code","b":[58,3,128],"m":"ld","oa":32771,"o":"a,(worm_speed)"},{"a":42562,"t":"code","b":[246,3],"m":"or","o":"$03"},{"a":42564,"t":"code","b":[50,3,128],"m":"ld","oa":32771,"o":"(worm_speed),a"},{"a":42567,"t":"code","b":[58,93,128],"m":"ld","oa":32861,"o":"a,(sparkies)"},{"a":42570,"t":"code","b":[60],"m":"inc","o":"a"},{"a":42571,"t":"code","b":[50,93,128],"m":"ld","oa":32861,"o":"(sparkies),a"},{"a":42574,"t":"code","b":[253,94,10],"m":"ld","o":"e,(iy+$0A)"},{"a":42577,"t":"code","b":[253,86,11],"m":"ld","o":"d,(iy+$0B)"},{"a":42580,"t":"code","b":[58,113,124],"m":"ld","oa":31857,"o":"a,(object_count_plus_one)"},{"a":42583,"t":"code","b":[61],"m":"dec","o":"a"},{"a":42584,"t":"code","b":[50,113,124],"m":"ld","oa":31857,"o":"(object_count_plus_one),a"},{"a":42587,"t":"code","b":[42,114,124],"m":"ld","oa":31858,"o":"hl,(object_list_end)"},{"a":42590,"t":"code","b":[1,30,0],"m":"ld","o":"bc,$001E"},{"a":42593,"t":"code","b":[167],"m":"and","o":"a"},{"a":42594,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":42596,"t":"code","b":[34,114,124],"m":"ld","oa":31858,"o":"(object_list_end),hl"},{"a":42599,"t":"code","b":[237,176],"m":"ldir"},{"a":42601,"t":"code","b":[253,54,14,255],"m":"ld","o":"(iy+$0E),$FF"},{"a":42605,"t":"code","b":[195,104,165],"m":"jp","oa":42344,"o":"settle_body_joint"},{"a":42608,"l":"joint_step_or_wall","c":"The joint is touching the board or an object that is not picked up. If the floor ($8036) is less than 23 above the joint, the joint is raised to it at $A581, which also covers a joint already resting there. A greater rise is a wall, and the pull that brought the joint there is taken back. First the Z share at $9A83 is considered: if returning it would put the joint level with the floor, the joint is raised to the floor and the pass ends; otherwise the share is returned to this record and taken from the next. Then the place the joint had before the pull is compared with the object's box. When its Y lies strictly between the box's low and high Y (+$04, +$08) the joint's whole Y offset is passed to the next record, which lines the joint up in Y with the one in front, and its X share is returned; otherwise the whole X offset is passed on and the Y share returned. The query point is reset from the running position and the joint is settled again at $A568. If there is no object record, or the share to be returned is already zero, the code at $A7B2 instead cancels the high byte of the Z offset, which brings the joint to its leader's height.","t":"code","b":[58,166,128],"m":"ld","oa":32934,"o":"a,(running_z_high)","x":[42401,42470,42483,42536]},{"a":42611,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":42612,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)"},{"a":42615,"t":"code","b":[147],"m":"sub","o":"e"},{"a":42616,"t":"code","b":[254,23],"m":"cp","o":"$17"},{"a":42618,"t":"code","b":[218,129,165],"m":"jp","oa":42369,"o":"c,$A581"},{"a":42621,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":42622,"t":"code","b":[237,91,131,154],"m":"ld","oa":39555,"o":"de,(link_handover_4)"},{"a":42626,"t":"code","b":[42,165,128],"m":"ld","oa":32933,"o":"hl,(running_z)"},{"a":42629,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42630,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)"},{"a":42633,"t":"code","b":[188],"m":"cp","o":"h"},{"a":42634,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":42635,"t":"code","b":[202,129,165],"m":"jp","oa":42369,"o":"z,$A581"},{"a":42638,"t":"code","b":[34,165,128],"m":"ld","oa":32933,"o":"(running_z),hl"},{"a":42641,"t":"code","b":[221,110,4],"m":"ld","o":"l,(ix+$04)"},{"a":42644,"t":"code","b":[221,102,5],"m":"ld","o":"h,(ix+$05)"},{"a":42647,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42648,"t":"code","b":[221,117,4],"m":"ld","o":"(ix+$04),l"},{"a":42651,"t":"code","b":[221,116,5],"m":"ld","o":"(ix+$05),h"},{"a":42654,"t":"code","b":[221,110,20],"m":"ld","o":"l,(ix+$14)"},{"a":42657,"t":"code","b":[221,102,21],"m":"ld","o":"h,(ix+$15)"},{"a":42660,"t":"code","b":[167],"m":"and","o":"a"},{"a":42661,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":42663,"t":"code","b":[221,117,20],"m":"ld","o":"(ix+$14),l"},{"a":42666,"t":"code","b":[221,116,21],"m":"ld","o":"(ix+$15),h"},{"a":42669,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":42672,"t":"code","b":[34,131,154],"m":"ld","oa":39555,"o":"(link_handover_4),hl"},{"a":42675,"t":"code","b":[42,161,128],"m":"ld","oa":32929,"o":"hl,(running_x)"},{"a":42678,"t":"code","b":[237,91,127,154],"m":"ld","oa":39551,"o":"de,(link_handover_0)"},{"a":42682,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42683,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":42684,"t":"code","b":[50,51,128],"m":"ld","oa":32819,"o":"(probe_x),a"},{"a":42687,"t":"code","b":[42,163,128],"m":"ld","oa":32931,"o":"hl,(running_y)"},{"a":42690,"t":"code","b":[237,91,129,154],"m":"ld","oa":39553,"o":"de,(link_handover_2)"},{"a":42694,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42695,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":42696,"t":"code","b":[50,52,128],"m":"ld","oa":32820,"o":"(probe_y),a"},{"a":42699,"t":"code","b":[58,56,128],"m":"ld","oa":32824,"o":"a,(probe_hit_high)"},{"a":42702,"t":"code","b":[167],"m":"and","o":"a"},{"a":42703,"t":"code","b":[202,178,167],"m":"jp","oa":42930,"o":"z,$A7B2"},{"a":42706,"t":"code","b":[92],"m":"ld","o":"e,h"},{"a":42707,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":42709,"t":"code","b":[203,123],"m":"bit","o":"7,e"},{"a":42711,"t":"code","b":[40,1],"m":"jr","oa":42714,"o":"z,$A6DA"},{"a":42713,"t":"code","b":[21],"m":"dec","o":"d"},{"a":42714,"t":"code","b":[253,110,4],"m":"ld","o":"l,(iy+$04)","x":[42711]},{"a":42717,"t":"code","b":[253,102,5],"m":"ld","o":"h,(iy+$05)"},{"a":42720,"t":"code","b":[167],"m":"and","o":"a"},{"a":42721,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":42723,"t":"code","b":[242,73,167],"m":"jp","oa":42825,"o":"p,$A749"},{"a":42726,"t":"code","b":[253,110,8],"m":"ld","o":"l,(iy+$08)"},{"a":42729,"t":"code","b":[253,102,9],"m":"ld","o":"h,(iy+$09)"},{"a":42732,"t":"code","b":[55],"m":"scf"},{"a":42733,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":42735,"t":"code","b":[250,73,167],"m":"jp","oa":42825,"o":"m,$A749"},{"a":42738,"t":"code","b":[221,94,2],"m":"ld","o":"e,(ix+$02)"},{"a":42741,"t":"code","b":[221,86,3],"m":"ld","o":"d,(ix+$03)"},{"a":42744,"t":"code","b":[221,110,18],"m":"ld","o":"l,(ix+$12)"},{"a":42747,"t":"code","b":[221,102,19],"m":"ld","o":"h,(ix+$13)"},{"a":42750,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42751,"t":"code","b":[221,117,18],"m":"ld","o":"(ix+$12),l"},{"a":42754,"t":"code","b":[221,116,19],"m":"ld","o":"(ix+$13),h"},{"a":42757,"t":"code","b":[42,163,128],"m":"ld","oa":32931,"o":"hl,(running_y)"},{"a":42760,"t":"code","b":[175],"m":"xor","o":"a"},{"a":42761,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":42763,"t":"code","b":[34,163,128],"m":"ld","oa":32931,"o":"(running_y),hl"},{"a":42766,"t":"code","b":[221,119,2],"m":"ld","o":"(ix+$02),a"},{"a":42769,"t":"code","b":[221,119,3],"m":"ld","o":"(ix+$03),a"},{"a":42772,"t":"code","b":[237,91,127,154],"m":"ld","oa":39551,"o":"de,(link_handover_0)"},{"a":42776,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":42777,"t":"code","b":[178],"m":"or","o":"d"},{"a":42778,"t":"code","b":[202,178,167],"m":"jp","oa":42930,"o":"z,$A7B2"},{"a":42781,"t":"code","b":[221,110,0],"m":"ld","o":"l,(ix+$00)"},{"a":42784,"t":"code","b":[221,102,1],"m":"ld","o":"h,(ix+$01)"},{"a":42787,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42788,"t":"code","b":[221,117,0],"m":"ld","o":"(ix+$00),l"},{"a":42791,"t":"code","b":[221,116,1],"m":"ld","o":"(ix+$01),h"},{"a":42794,"t":"code","b":[221,110,16],"m":"ld","o":"l,(ix+$10)"},{"a":42797,"t":"code","b":[221,102,17],"m":"ld","o":"h,(ix+$11)"},{"a":42800,"t":"code","b":[167],"m":"and","o":"a"},{"a":42801,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":42803,"t":"code","b":[221,117,16],"m":"ld","o":"(ix+$10),l"},{"a":42806,"t":"code","b":[221,116,17],"m":"ld","o":"(ix+$11),h"},{"a":42809,"t":"code","b":[42,161,128],"m":"ld","oa":32929,"o":"hl,(running_x)"},{"a":42812,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42813,"t":"code","b":[34,161,128],"m":"ld","oa":32929,"o":"(running_x),hl"},{"a":42816,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":42819,"t":"code","b":[34,127,154],"m":"ld","oa":39551,"o":"(link_handover_0),hl"},{"a":42822,"t":"code","b":[195,157,167],"m":"jp","oa":42909,"o":"$A79D"},{"a":42825,"t":"code","b":[221,94,0],"m":"ld","o":"e,(ix+$00)","x":[42723,42735]},{"a":42828,"t":"code","b":[221,86,1],"m":"ld","o":"d,(ix+$01)"},{"a":42831,"t":"code","b":[221,110,16],"m":"ld","o":"l,(ix+$10)"},{"a":42834,"t":"code","b":[221,102,17],"m":"ld","o":"h,(ix+$11)"},{"a":42837,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42838,"t":"code","b":[221,117,16],"m":"ld","o":"(ix+$10),l"},{"a":42841,"t":"code","b":[221,116,17],"m":"ld","o":"(ix+$11),h"},{"a":42844,"t":"code","b":[42,161,128],"m":"ld","oa":32929,"o":"hl,(running_x)"},{"a":42847,"t":"code","b":[175],"m":"xor","o":"a"},{"a":42848,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":42850,"t":"code","b":[34,161,128],"m":"ld","oa":32929,"o":"(running_x),hl"},{"a":42853,"t":"code","b":[221,119,0],"m":"ld","o":"(ix+$00),a"},{"a":42856,"t":"code","b":[221,119,1],"m":"ld","o":"(ix+$01),a"},{"a":42859,"t":"code","b":[237,91,129,154],"m":"ld","oa":39553,"o":"de,(link_handover_2)"},{"a":42863,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":42864,"t":"code","b":[178],"m":"or","o":"d"},{"a":42865,"t":"code","b":[202,178,167],"m":"jp","oa":42930,"o":"z,$A7B2"},{"a":42868,"t":"code","b":[221,110,2],"m":"ld","o":"l,(ix+$02)"},{"a":42871,"t":"code","b":[221,102,3],"m":"ld","o":"h,(ix+$03)"},{"a":42874,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42875,"t":"code","b":[221,117,2],"m":"ld","o":"(ix+$02),l"},{"a":42878,"t":"code","b":[221,116,3],"m":"ld","o":"(ix+$03),h"},{"a":42881,"t":"code","b":[221,110,18],"m":"ld","o":"l,(ix+$12)"},{"a":42884,"t":"code","b":[221,102,19],"m":"ld","o":"h,(ix+$13)"},{"a":42887,"t":"code","b":[167],"m":"and","o":"a"},{"a":42888,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":42890,"t":"code","b":[221,117,18],"m":"ld","o":"(ix+$12),l"},{"a":42893,"t":"code","b":[221,116,19],"m":"ld","o":"(ix+$13),h"},{"a":42896,"t":"code","b":[42,163,128],"m":"ld","oa":32931,"o":"hl,(running_y)"},{"a":42899,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42900,"t":"code","b":[34,163,128],"m":"ld","oa":32931,"o":"(running_y),hl"},{"a":42903,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":42906,"t":"code","b":[34,129,154],"m":"ld","oa":39553,"o":"(link_handover_2),hl"},{"a":42909,"t":"code","b":[58,162,128],"m":"ld","oa":32930,"o":"a,(running_x_high)","x":[42822]},{"a":42912,"t":"code","b":[50,51,128],"m":"ld","oa":32819,"o":"(probe_x),a"},{"a":42915,"t":"code","b":[58,164,128],"m":"ld","oa":32932,"o":"a,(running_y_high)"},{"a":42918,"t":"code","b":[50,52,128],"m":"ld","oa":32820,"o":"(probe_y),a"},{"a":42921,"t":"code","b":[58,166,128],"m":"ld","oa":32934,"o":"a,(running_z_high)"},{"a":42924,"t":"code","b":[50,53,128],"m":"ld","oa":32821,"o":"(probe_z),a"},{"a":42927,"t":"code","b":[195,104,165],"m":"jp","oa":42344,"o":"settle_body_joint"},{"a":42930,"t":"code","b":[221,126,5],"m":"ld","o":"a,(ix+$05)","x":[42703,42778,42865]},{"a":42933,"t":"code","b":[237,68],"m":"neg"},{"a":42935,"t":"code","b":[195,129,165],"m":"jp","oa":42369,"o":"$A581"},{"a":42938,"l":"unused_joint_step_fragment","c":"Eleven bytes that would decode as LD A,($80A6); LD E,A; LD A,($8036); SUB E; JP $A581: the opening of $A670 without its comparison with 23, which would raise a joint to the floor whatever the height. They follow the unconditional JP at $A7B7 and no instruction names them, so they are never executed. Why they remain is not established.","t":"byte","b":[58,166,128,95,58,54,128,147]},{"a":42946,"t":"byte","b":[195,129,165]},{"a":42949,"l":"next_body_link","c":"The end of one pass of the body loop. IX moves on 16 bytes to the next record, the counter at ($80A0) is reduced, and the loop repeats from $A405 until it reaches zero. The RET at $A7D4 is the normal end of the routine that began at $9CF1 and returns to the frame loop.","t":"code","b":[17,16,0],"m":"ld","o":"de,$0010","x":[42390]},{"a":42952,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":42954,"t":"code","b":[58,160,128],"m":"ld","oa":32928,"o":"a,(segment_loop_counter)"},{"a":42957,"t":"code","b":[61],"m":"dec","o":"a"},{"a":42958,"t":"code","b":[50,160,128],"m":"ld","oa":32928,"o":"(segment_loop_counter),a"},{"a":42961,"t":"code","b":[194,5,164],"m":"jp","oa":41989,"o":"nz,pull_body_link"},{"a":42964,"t":"code","b":[201],"m":"ret"},{"a":42965,"l":"order_quad_corners","c":"Puts the four corners of a quadrilateral into the order the filler at $9819 expects, then jumps to it. The corners are four pairs of 16-bit X and Y at $801B, $801F, $8023 and $8027, taken as being in order round the outline. The routine finds the corner with the smallest X plus Y, the first one winning a tie, rotates the list so that this corner comes first, and then exchanges the last two, which leaves the smallest, the corner after it, the corner before it and the opposite corner. A carries the working index: bits 3 and 2 end as the number of the smallest corner, bit 3 causing an exchange of corners 0 with 2 and 1 with 3, and bit 2 a rotation by one place. Two callers, $8575 and $8580.","t":"code","b":[62,1],"m":"ld","o":"a,$01","x":[34165,34176]},{"a":42967,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":42970,"t":"code","b":[237,75,29,128],"m":"ld","oa":32797,"o":"bc,(shape_y0)"},{"a":42974,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":42975,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":42976,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":42979,"t":"code","b":[237,75,33,128],"m":"ld","oa":32801,"o":"bc,(shape_y1)"},{"a":42983,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":42984,"t":"code","b":[167],"m":"and","o":"a"},{"a":42985,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":42987,"t":"code","b":[242,248,167],"m":"jp","oa":43000,"o":"p,$A7F8"},{"a":42990,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":42991,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":42992,"t":"code","b":[230,3],"m":"and","o":"$03"},{"a":42994,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":42995,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":42997,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":42999,"t":"code","b":[181],"m":"or","o":"l"},{"a":43000,"t":"code","b":[60],"m":"inc","o":"a","x":[42987]},{"a":43001,"t":"code","b":[42,35,128],"m":"ld","oa":32803,"o":"hl,(shape_x2)"},{"a":43004,"t":"code","b":[237,75,37,128],"m":"ld","oa":32805,"o":"bc,(shape_y2)"},{"a":43008,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":43009,"t":"code","b":[167],"m":"and","o":"a"},{"a":43010,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":43012,"t":"code","b":[242,17,168],"m":"jp","oa":43025,"o":"p,$A811"},{"a":43015,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43016,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":43017,"t":"code","b":[230,3],"m":"and","o":"$03"},{"a":43019,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":43020,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":43022,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":43024,"t":"code","b":[181],"m":"or","o":"l"},{"a":43025,"t":"code","b":[60],"m":"inc","o":"a","x":[43012]},{"a":43026,"t":"code","b":[42,39,128],"m":"ld","oa":32807,"o":"hl,(shape_x3)"},{"a":43029,"t":"code","b":[237,75,41,128],"m":"ld","oa":32809,"o":"bc,(shape_y3)"},{"a":43033,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":43034,"t":"code","b":[167],"m":"and","o":"a"},{"a":43035,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":43037,"t":"code","b":[242,42,168],"m":"jp","oa":43050,"o":"p,$A82A"},{"a":43040,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43041,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":43042,"t":"code","b":[230,3],"m":"and","o":"$03"},{"a":43044,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":43045,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":43047,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":43049,"t":"code","b":[181],"m":"or","o":"l"},{"a":43050,"t":"code","b":[203,95],"m":"bit","o":"3,a","x":[43037]},{"a":43052,"t":"code","b":[40,56],"m":"jr","oa":43110,"o":"z,$A866"},{"a":43054,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":43057,"t":"code","b":[237,91,35,128],"m":"ld","oa":32803,"o":"de,(shape_x2)"},{"a":43061,"t":"code","b":[237,83,27,128],"m":"ld","oa":32795,"o":"(shape_x0),de"},{"a":43065,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":43068,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":43071,"t":"code","b":[237,91,37,128],"m":"ld","oa":32805,"o":"de,(shape_y2)"},{"a":43075,"t":"code","b":[237,83,29,128],"m":"ld","oa":32797,"o":"(shape_y0),de"},{"a":43079,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":43082,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":43085,"t":"code","b":[237,91,39,128],"m":"ld","oa":32807,"o":"de,(shape_x3)"},{"a":43089,"t":"code","b":[237,83,31,128],"m":"ld","oa":32799,"o":"(shape_x1),de"},{"a":43093,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":43096,"t":"code","b":[42,33,128],"m":"ld","oa":32801,"o":"hl,(shape_y1)"},{"a":43099,"t":"code","b":[237,91,41,128],"m":"ld","oa":32809,"o":"de,(shape_y3)"},{"a":43103,"t":"code","b":[237,83,33,128],"m":"ld","oa":32801,"o":"(shape_y1),de"},{"a":43107,"t":"code","b":[34,41,128],"m":"ld","oa":32809,"o":"(shape_y3),hl"},{"a":43110,"t":"code","b":[203,87],"m":"bit","o":"2,a","x":[43052]},{"a":43112,"t":"code","b":[40,56],"m":"jr","oa":43170,"o":"z,$A8A2"},{"a":43114,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":43117,"t":"code","b":[237,91,39,128],"m":"ld","oa":32807,"o":"de,(shape_x3)"},{"a":43121,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":43124,"t":"code","b":[42,35,128],"m":"ld","oa":32803,"o":"hl,(shape_x2)"},{"a":43127,"t":"code","b":[237,83,35,128],"m":"ld","oa":32803,"o":"(shape_x2),de"},{"a":43131,"t":"code","b":[237,91,31,128],"m":"ld","oa":32799,"o":"de,(shape_x1)"},{"a":43135,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":43138,"t":"code","b":[237,83,27,128],"m":"ld","oa":32795,"o":"(shape_x0),de"},{"a":43142,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":43145,"t":"code","b":[237,91,41,128],"m":"ld","oa":32809,"o":"de,(shape_y3)"},{"a":43149,"t":"code","b":[34,41,128],"m":"ld","oa":32809,"o":"(shape_y3),hl"},{"a":43152,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":43155,"t":"code","b":[237,83,37,128],"m":"ld","oa":32805,"o":"(shape_y2),de"},{"a":43159,"t":"code","b":[237,91,33,128],"m":"ld","oa":32801,"o":"de,(shape_y1)"},{"a":43163,"t":"code","b":[34,33,128],"m":"ld","oa":32801,"o":"(shape_y1),hl"},{"a":43166,"t":"code","b":[237,83,29,128],"m":"ld","oa":32797,"o":"(shape_y0),de"},{"a":43170,"t":"code","b":[42,35,128],"m":"ld","oa":32803,"o":"hl,(shape_x2)","x":[43112]},{"a":43173,"t":"code","b":[237,91,39,128],"m":"ld","oa":32807,"o":"de,(shape_x3)"},{"a":43177,"t":"code","b":[237,83,35,128],"m":"ld","oa":32803,"o":"(shape_x2),de"},{"a":43181,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":43184,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":43187,"t":"code","b":[237,91,41,128],"m":"ld","oa":32809,"o":"de,(shape_y3)"},{"a":43191,"t":"code","b":[237,83,37,128],"m":"ld","oa":32805,"o":"(shape_y2),de"},{"a":43195,"t":"code","b":[34,41,128],"m":"ld","oa":32809,"o":"(shape_y3),hl"},{"a":43198,"t":"code","b":[195,25,152],"m":"jp","oa":38937,"o":"fill_quad"},{"a":43201,"l":"null_cell_neighbours","c":"A zero word that stands for the neighbour pointers of a missing cell, followed by one byte that nothing uses. When the 5 by 5 grid of cell pointers at $6432 is shifted and the cell it has to step from is null, the shift code substitutes an address chosen so that adding the neighbour's offset in a cell header lands here: $9FC7 loads $A8C1 for offset 0, $A200 loads $A8BF for offset 2, $A071 loads $A8BD for offset 4 and $A29E loads $A8BB for offset 6. All four then read $A8C1 and $A8C2, so a missing cell has a null neighbour in every direction. The addresses $A8BB, $A8BD and $A8BF lie inside the instructions before this word and are never read themselves. The third byte, $A8C3, holds $C9; the four loads above are the only references to these bytes and none reaches it.","t":"byte","b":[0,0,201]},{"a":43204,"l":"sine_lookup","c":"Returns the size of the sine of the angle in A, where 256 steps make a full turn. The low six bits of the angle index the 64-byte quarter wave at $63C0-$63FF, counted back from 63 when bit 6 of the angle is set, so the result in A rises from 0 to $FF and falls again over each half turn: $00 gives 0, $3F and $40 give $FF, $7F and $80 give 0. The sign is left for the caller in the alternate flags: the routine shifts the angle left and then executes EX AF,AF', so on return A' holds the angle and the carry in F' is the angle's bit 7, set for $80-$FF where the sine is negative. Callers multiply the size first, then execute EX AF,AF' and negate the product on carry. HL returns the table address that was read, and whatever AF' held on entry is lost. Sixteen call sites: $A92A and $A963 (the worm's movement), $B416, $B443, $B496, $B4B7, $B50C, $B530, $B561 and $B583 (creature drawing), $BDF1, $D2C5, $D2E4, $D303, $DF07 and $DF2A.","t":"code","b":[38,99],"m":"ld","o":"h,$63","x":[43306,43363,46102,46147,46230,46263,46348,46384,46433,46467,48625,53957,53988,54019,57095,57130]},{"a":43206,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":43207,"t":"code","b":[203,37],"m":"sla","o":"l"},{"a":43209,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":43210,"t":"code","b":[203,125],"m":"bit","o":"7,l"},{"a":43212,"t":"code","b":[40,3],"m":"jr","oa":43217,"o":"z,$A8D1"},{"a":43214,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":43215,"t":"code","b":[47],"m":"cpl"},{"a":43216,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":43217,"t":"code","b":[203,253],"m":"set","o":"7,l","x":[43212]},{"a":43219,"t":"code","b":[55],"m":"scf"},{"a":43220,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":43222,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":43223,"t":"code","b":[201],"m":"ret"},{"a":43224,"l":"multiply_e_by_a","c":"Unsigned multiply giving the full 16-bit product: HL = E x A. These two instructions move E into D and clear E, so that DE holds E x 256, and fall into the eight shift-and-add steps at $A8DB, which add E x 128, E x 64 and so on down to E x 1 for each set bit of A from bit 7 down. A returns 0 and DE returns the original E. AF' is not touched, which lets a caller keep the sign left there by the sine lookup at $A8C4 across the multiply. Eleven call sites: $B41D, $B44A, $B49D, $B4BE, $B512, $B536, $B567, $B589, $BDF7, $DF0D and $DF30.","t":"code","b":[83],"m":"ld","o":"d,e","x":[46109,46154,46237,46270,46354,46390,46439,46473,48631,57101,57136]},{"a":43225,"t":"code","b":[30,0],"m":"ld","o":"e,$00"},{"a":43227,"l":"multiply_de_by_a_fraction","c":"Multiplies a 16-bit value by an 8-bit fraction: HL = DE x A / 256. It is eight unrolled steps, each halving DE and adding it to HL when the next bit of A, taken from bit 7 down, is set. Every halving drops the bit shifted out, so the result can be up to 7 below the exact quotient: DE = $FFFF and A = $FF give $FEF8 where the exact figure is $FEFF. A returns 0. Called directly from $AC69 and $AC7F, where a step of the worm's body is scaled into a half width, and entered from $A8D8 with DE = E x 256, which makes the result the whole product E x A.","t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000","x":[44137,44159]},{"a":43230,"t":"code","b":[203,58],"m":"srl","o":"d"},{"a":43232,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":43234,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":43236,"t":"code","b":[48,1],"m":"jr","oa":43239,"o":"nc,$A8E7"},{"a":43238,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43239,"t":"code","b":[203,58],"m":"srl","o":"d","x":[43236]},{"a":43241,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":43243,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":43245,"t":"code","b":[48,1],"m":"jr","oa":43248,"o":"nc,$A8F0"},{"a":43247,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43248,"t":"code","b":[203,58],"m":"srl","o":"d","x":[43245]},{"a":43250,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":43252,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":43254,"t":"code","b":[48,1],"m":"jr","oa":43257,"o":"nc,$A8F9"},{"a":43256,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43257,"t":"code","b":[203,58],"m":"srl","o":"d","x":[43254]},{"a":43259,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":43261,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":43263,"t":"code","b":[48,1],"m":"jr","oa":43266,"o":"nc,$A902"},{"a":43265,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43266,"t":"code","b":[203,58],"m":"srl","o":"d","x":[43263]},{"a":43268,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":43270,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":43272,"t":"code","b":[48,1],"m":"jr","oa":43275,"o":"nc,$A90B"},{"a":43274,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43275,"t":"code","b":[203,58],"m":"srl","o":"d","x":[43272]},{"a":43277,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":43279,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":43281,"t":"code","b":[48,1],"m":"jr","oa":43284,"o":"nc,$A914"},{"a":43283,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43284,"t":"code","b":[203,58],"m":"srl","o":"d","x":[43281]},{"a":43286,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":43288,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":43290,"t":"code","b":[48,1],"m":"jr","oa":43293,"o":"nc,$A91D"},{"a":43292,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43293,"t":"code","b":[203,58],"m":"srl","o":"d","x":[43290]},{"a":43295,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":43297,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":43299,"t":"code","b":[208],"m":"ret","o":"nc"},{"a":43300,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43301,"t":"code","b":[201],"m":"ret"},{"a":43302,"l":"worm_velocity","c":"Turns the worm's heading and speed into its movement for the frame. In: E = heading (256 to a turn; $00 moves right and $40 moves up the screen), D = speed, HL = the slope word for the surface under the worm, C = a value handed on to the slope routine. It takes the sine of heading + $40 through $A8C4 and multiplies its size by the speed, then does the same with the heading itself, and stores speed x cosine in ($803D) and minus speed x sine in ($803F) as signed 16-bit numbers: at speed 10 a heading of $00 gives 2550 and 0, and $40 gives 0 and -2550. Bit 1 of the slope word's high byte chooses which of the two the slope applies to: when it is clear the x product goes through $A9A2 before it is signed, and when it is set the y product goes through $A99A. The arithmetic is done in the alternate register set. On return L and H hold the high bytes of the x and y results. The one caller, $9D02, passes the heading ($8001), the speed ($8003), the slope word ($8005) and C = 0, and halves the two results into ($7FF8) and ($7FFA).","t":"code","b":[123],"m":"ld","o":"a,e","x":[40194]},{"a":43303,"t":"code","b":[217],"m":"exx"},{"a":43304,"t":"code","b":[198,64],"m":"add","o":"a,$40"},{"a":43306,"t":"code","b":[205,196,168],"m":"call","oa":43204,"o":"sine_lookup"},{"a":43309,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":43310,"t":"code","b":[217],"m":"exx"},{"a":43311,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":43312,"t":"code","b":[217],"m":"exx"},{"a":43313,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":43314,"t":"code","b":[175],"m":"xor","o":"a"},{"a":43315,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":43316,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":43317,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":43318,"t":"code","b":[6,8],"m":"ld","o":"b,$08"},{"a":43320,"t":"code","b":[203,57],"m":"srl","o":"c","x":[43329]},{"a":43322,"t":"code","b":[48,1],"m":"jr","oa":43325,"o":"nc,$A93D"},{"a":43324,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43325,"t":"code","b":[203,35],"m":"sla","o":"e","x":[43322]},{"a":43327,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":43329,"t":"code","b":[16,245],"m":"djnz","oa":43320,"o":"$A938"},{"a":43331,"t":"code","b":[217],"m":"exx"},{"a":43332,"t":"code","b":[229],"m":"push","o":"hl"},{"a":43333,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":43334,"t":"code","b":[217],"m":"exx"},{"a":43335,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":43336,"t":"code","b":[203,72],"m":"bit","o":"1,b"},{"a":43338,"t":"code","b":[204,162,169],"m":"call","oa":43426,"o":"z,slope_adjust"},{"a":43341,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":43342,"t":"code","b":[48,9],"m":"jr","oa":43353,"o":"nc,$A959"},{"a":43344,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":43345,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":43348,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":43349,"t":"code","b":[167],"m":"and","o":"a"},{"a":43350,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":43352,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":43353,"t":"code","b":[8],"m":"ex","o":"af,af'","x":[43342]},{"a":43354,"t":"code","b":[34,61,128],"m":"ld","oa":32829,"o":"(probe_top),hl"},{"a":43357,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":43358,"t":"code","b":[217],"m":"exx"},{"a":43359,"t":"code","b":[229],"m":"push","o":"hl"},{"a":43360,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":43361,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":43362,"t":"code","b":[217],"m":"exx"},{"a":43363,"t":"code","b":[205,196,168],"m":"call","oa":43204,"o":"sine_lookup"},{"a":43366,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":43367,"t":"code","b":[217],"m":"exx"},{"a":43368,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":43369,"t":"code","b":[217],"m":"exx"},{"a":43370,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":43371,"t":"code","b":[175],"m":"xor","o":"a"},{"a":43372,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":43373,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":43374,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":43375,"t":"code","b":[6,8],"m":"ld","o":"b,$08"},{"a":43377,"t":"code","b":[203,57],"m":"srl","o":"c","x":[43386]},{"a":43379,"t":"code","b":[48,1],"m":"jr","oa":43382,"o":"nc,$A976"},{"a":43381,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43382,"t":"code","b":[203,35],"m":"sla","o":"e","x":[43379]},{"a":43384,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":43386,"t":"code","b":[16,245],"m":"djnz","oa":43377,"o":"$A971"},{"a":43388,"t":"code","b":[217],"m":"exx"},{"a":43389,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":43390,"t":"code","b":[217],"m":"exx"},{"a":43391,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":43392,"t":"code","b":[203,72],"m":"bit","o":"1,b"},{"a":43394,"t":"code","b":[196,154,169],"m":"call","oa":43418,"o":"nz,slope_adjust_y"},{"a":43397,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":43398,"t":"code","b":[56,9],"m":"jr","oa":43409,"o":"c,$A991"},{"a":43400,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":43401,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":43404,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":43405,"t":"code","b":[167],"m":"and","o":"a"},{"a":43406,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":43408,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":43409,"t":"code","b":[8],"m":"ex","o":"af,af'","x":[43398]},{"a":43410,"t":"code","b":[34,63,128],"m":"ld","oa":32831,"o":"(probe_ramp),hl"},{"a":43413,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":43414,"t":"code","b":[217],"m":"exx"},{"a":43415,"t":"code","b":[108],"m":"ld","o":"l,h"},{"a":43416,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":43417,"t":"code","b":[201],"m":"ret"},{"a":43418,"l":"slope_adjust_y","c":"Entry to the slope routine at $A9A2 for the y part of the worm's movement: it inverts bit 0 of B, the direction bit of the slope flags, and falls through. The y result is stored with its sign reversed by the caller ($A986-$A992), and turning the bit over makes it mean the same on both axes: with bit 0 clear the climb comes out negative when the worm moves toward larger x or toward larger y. Called from $A982 only, when bit 1 of the slope flags is set.","t":"code","b":[203,64],"m":"bit","o":"0,b","x":[43394]},{"a":43420,"t":"code","b":[203,128],"m":"res","o":"0,b"},{"a":43422,"t":"code","b":[32,2],"m":"jr","oa":43426,"o":"nz,slope_adjust"},{"a":43424,"t":"code","b":[203,192],"m":"set","o":"0,b"},{"a":43426,"l":"slope_adjust","c":"Applies the slope of the surface to one part of the worm's movement. It runs in the alternate register set with HL = the part's size (speed x sine size), B = slope flags, C = gradient, A = the value the caller of $A926 passed in C (0 in the game) and A' = the angle the sine was taken of. With a gradient of 0 it stores A x 256 in ($803B), copies A to the main B and returns with HL unchanged. Otherwise it forms the travel along the ground and the climb: with flag bit 7 clear the travel is the part itself and the climb is part x gradient / 256, and with bit 7 set the two are exchanged, for a surface that rises faster than it runs. The travel is then multiplied by the byte at $6380 + gradient / 4 and divided by 256; that 64-byte table falls from $FF to $B6 and is within 1 of 255 / sqrt(1 + (gradient / 256) squared), so the worm keeps its speed along the slope. The climb keeps only its high byte before it is multiplied by the same table byte. The travel returns in HL and ($8033); the climb goes to ($803B) with its high byte copied to the main B, and it is negative when flag bit 0 equals the sign bit of the angle in A'. ($8035), ($8037) and ($8039) are work words, the last two always 0 when A is 0. Called from $A94A for the x part and entered from $A99A for the y part.","t":"code","b":[197],"m":"push","o":"bc","x":[43338,43422]},{"a":43427,"t":"code","b":[197],"m":"push","o":"bc"},{"a":43428,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":43429,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":43430,"t":"code","b":[167],"m":"and","o":"a"},{"a":43431,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":43432,"t":"code","b":[32,12],"m":"jr","oa":43446,"o":"nz,$A9B6"},{"a":43434,"t":"code","b":[217],"m":"exx"},{"a":43435,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":43436,"t":"code","b":[217],"m":"exx"},{"a":43437,"t":"code","b":[14,0],"m":"ld","o":"c,$00"},{"a":43439,"t":"code","b":[237,67,59,128],"m":"ld","oa":32827,"o":"(probe_floor),bc"},{"a":43443,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":43444,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":43445,"t":"code","b":[201],"m":"ret"},{"a":43446,"t":"code","b":[235],"m":"ex","o":"de,hl","x":[43432]},{"a":43447,"t":"code","b":[237,83,51,128],"m":"ld","oa":32819,"o":"(probe_x),de"},{"a":43451,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":43454,"t":"code","b":[6,8],"m":"ld","o":"b,$08"},{"a":43456,"t":"code","b":[203,58],"m":"srl","o":"d","x":[43465]},{"a":43458,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":43460,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":43462,"t":"code","b":[48,1],"m":"jr","oa":43465,"o":"nc,$A9C9"},{"a":43464,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43465,"t":"code","b":[16,245],"m":"djnz","oa":43456,"o":"$A9C0","x":[43462]},{"a":43467,"t":"code","b":[34,53,128],"m":"ld","oa":32821,"o":"(probe_z),hl"},{"a":43470,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":43471,"t":"code","b":[30,0],"m":"ld","o":"e,$00"},{"a":43473,"t":"code","b":[237,83,55,128],"m":"ld","oa":32823,"o":"(probe_hit),de"},{"a":43477,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":43478,"t":"code","b":[6,8],"m":"ld","o":"b,$08"},{"a":43480,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":43483,"t":"code","b":[203,58],"m":"srl","o":"d","x":[43492]},{"a":43485,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":43487,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":43489,"t":"code","b":[48,1],"m":"jr","oa":43492,"o":"nc,$A9E4"},{"a":43491,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43492,"t":"code","b":[16,245],"m":"djnz","oa":43483,"o":"$A9DB","x":[43489]},{"a":43494,"t":"code","b":[34,57,128],"m":"ld","oa":32825,"o":"(probe_slope),hl"},{"a":43497,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":43498,"t":"code","b":[203,120],"m":"bit","o":"7,b"},{"a":43500,"t":"code","b":[32,64],"m":"jr","oa":43566,"o":"nz,$AA2E"},{"a":43502,"t":"code","b":[203,8],"m":"rrc","o":"b"},{"a":43504,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":43505,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":43506,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":43507,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":43508,"t":"code","b":[168],"m":"xor","o":"b"},{"a":43509,"t":"code","b":[242,19,170],"m":"jp","oa":43539,"o":"p,$AA13"},{"a":43512,"t":"code","b":[42,51,128],"m":"ld","oa":32819,"o":"hl,(probe_x)"},{"a":43515,"t":"code","b":[237,91,57,128],"m":"ld","oa":32825,"o":"de,(probe_slope)"},{"a":43519,"t":"code","b":[167],"m":"and","o":"a"},{"a":43520,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":43522,"t":"code","b":[34,51,128],"m":"ld","oa":32819,"o":"(probe_x),hl"},{"a":43525,"t":"code","b":[42,55,128],"m":"ld","oa":32823,"o":"hl,(probe_hit)"},{"a":43528,"t":"code","b":[237,91,53,128],"m":"ld","oa":32821,"o":"de,(probe_z)"},{"a":43532,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43533,"t":"code","b":[34,53,128],"m":"ld","oa":32821,"o":"(probe_z),hl"},{"a":43536,"t":"code","b":[195,113,170],"m":"jp","oa":43633,"o":"$AA71"},{"a":43539,"t":"code","b":[42,51,128],"m":"ld","oa":32819,"o":"hl,(probe_x)","x":[43509]},{"a":43542,"t":"code","b":[237,91,57,128],"m":"ld","oa":32825,"o":"de,(probe_slope)"},{"a":43546,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43547,"t":"code","b":[34,51,128],"m":"ld","oa":32819,"o":"(probe_x),hl"},{"a":43550,"t":"code","b":[42,55,128],"m":"ld","oa":32823,"o":"hl,(probe_hit)"},{"a":43553,"t":"code","b":[237,91,53,128],"m":"ld","oa":32821,"o":"de,(probe_z)"},{"a":43557,"t":"code","b":[167],"m":"and","o":"a"},{"a":43558,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":43560,"t":"code","b":[34,53,128],"m":"ld","oa":32821,"o":"(probe_z),hl"},{"a":43563,"t":"code","b":[195,113,170],"m":"jp","oa":43633,"o":"$AA71"},{"a":43566,"t":"code","b":[203,8],"m":"rrc","o":"b","x":[43500]},{"a":43568,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":43569,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":43570,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":43571,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":43572,"t":"code","b":[168],"m":"xor","o":"b"},{"a":43573,"t":"code","b":[242,86,170],"m":"jp","oa":43606,"o":"p,$AA56"},{"a":43576,"t":"code","b":[42,53,128],"m":"ld","oa":32821,"o":"hl,(probe_z)"},{"a":43579,"t":"code","b":[237,91,55,128],"m":"ld","oa":32823,"o":"de,(probe_hit)"},{"a":43583,"t":"code","b":[167],"m":"and","o":"a"},{"a":43584,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":43586,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":43587,"t":"code","b":[77],"m":"ld","o":"c,l"},{"a":43588,"t":"code","b":[42,51,128],"m":"ld","oa":32819,"o":"hl,(probe_x)"},{"a":43591,"t":"code","b":[237,91,57,128],"m":"ld","oa":32825,"o":"de,(probe_slope)"},{"a":43595,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43596,"t":"code","b":[34,53,128],"m":"ld","oa":32821,"o":"(probe_z),hl"},{"a":43599,"t":"code","b":[237,67,51,128],"m":"ld","oa":32819,"o":"(probe_x),bc"},{"a":43603,"t":"code","b":[195,113,170],"m":"jp","oa":43633,"o":"$AA71"},{"a":43606,"t":"code","b":[42,53,128],"m":"ld","oa":32821,"o":"hl,(probe_z)","x":[43573]},{"a":43609,"t":"code","b":[237,91,55,128],"m":"ld","oa":32823,"o":"de,(probe_hit)"},{"a":43613,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43614,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":43615,"t":"code","b":[77],"m":"ld","o":"c,l"},{"a":43616,"t":"code","b":[42,57,128],"m":"ld","oa":32825,"o":"hl,(probe_slope)"},{"a":43619,"t":"code","b":[237,91,51,128],"m":"ld","oa":32819,"o":"de,(probe_x)"},{"a":43623,"t":"code","b":[167],"m":"and","o":"a"},{"a":43624,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":43626,"t":"code","b":[34,53,128],"m":"ld","oa":32821,"o":"(probe_z),hl"},{"a":43629,"t":"code","b":[237,67,51,128],"m":"ld","oa":32819,"o":"(probe_x),bc"},{"a":43633,"t":"code","b":[217],"m":"exx","x":[43536,43563,43603]},{"a":43634,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":43635,"t":"code","b":[217],"m":"exx"},{"a":43636,"t":"code","b":[42,51,128],"m":"ld","oa":32819,"o":"hl,(probe_x)"},{"a":43639,"t":"code","b":[203,124],"m":"bit","o":"7,h"},{"a":43641,"t":"code","b":[40,7],"m":"jr","oa":43650,"o":"z,$AA82"},{"a":43643,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":43646,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":43647,"t":"code","b":[167],"m":"and","o":"a"},{"a":43648,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":43650,"t":"code","b":[235],"m":"ex","o":"de,hl","x":[43641]},{"a":43651,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":43652,"t":"code","b":[203,61],"m":"srl","o":"l"},{"a":43654,"t":"code","b":[55],"m":"scf"},{"a":43655,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":43657,"t":"code","b":[38,99],"m":"ld","o":"h,$63"},{"a":43659,"t":"code","b":[78],"m":"ld","o":"c,(hl)"},{"a":43660,"t":"code","b":[175],"m":"xor","o":"a"},{"a":43661,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":43662,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":43663,"t":"code","b":[6,8],"m":"ld","o":"b,$08"},{"a":43665,"t":"code","b":[203,58],"m":"srl","o":"d","x":[43674]},{"a":43667,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":43669,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":43671,"t":"code","b":[48,1],"m":"jr","oa":43674,"o":"nc,$AA9A"},{"a":43673,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43674,"t":"code","b":[16,245],"m":"djnz","oa":43665,"o":"$AA91","x":[43671]},{"a":43676,"t":"code","b":[58,52,128],"m":"ld","oa":32820,"o":"a,(probe_y)"},{"a":43679,"t":"code","b":[203,127],"m":"bit","o":"7,a"},{"a":43681,"t":"code","b":[40,7],"m":"jr","oa":43690,"o":"z,$AAAA"},{"a":43683,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":43686,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":43687,"t":"code","b":[167],"m":"and","o":"a"},{"a":43688,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":43690,"t":"code","b":[34,51,128],"m":"ld","oa":32819,"o":"(probe_x),hl","x":[43681]},{"a":43693,"t":"code","b":[217],"m":"exx"},{"a":43694,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":43695,"t":"code","b":[217],"m":"exx"},{"a":43696,"t":"code","b":[42,53,128],"m":"ld","oa":32821,"o":"hl,(probe_z)"},{"a":43699,"t":"code","b":[203,124],"m":"bit","o":"7,h"},{"a":43701,"t":"code","b":[40,7],"m":"jr","oa":43710,"o":"z,$AABE"},{"a":43703,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":43706,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":43707,"t":"code","b":[167],"m":"and","o":"a"},{"a":43708,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":43710,"t":"code","b":[235],"m":"ex","o":"de,hl","x":[43701]},{"a":43711,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":43712,"t":"code","b":[203,61],"m":"srl","o":"l"},{"a":43714,"t":"code","b":[55],"m":"scf"},{"a":43715,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":43717,"t":"code","b":[38,99],"m":"ld","o":"h,$63"},{"a":43719,"t":"code","b":[78],"m":"ld","o":"c,(hl)"},{"a":43720,"t":"code","b":[175],"m":"xor","o":"a"},{"a":43721,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":43722,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":43723,"t":"code","b":[6,8],"m":"ld","o":"b,$08"},{"a":43725,"t":"code","b":[90],"m":"ld","o":"e,d"},{"a":43726,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":43727,"t":"code","b":[203,57],"m":"srl","o":"c","x":[43736]},{"a":43729,"t":"code","b":[48,1],"m":"jr","oa":43732,"o":"nc,$AAD4"},{"a":43731,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":43732,"t":"code","b":[203,35],"m":"sla","o":"e","x":[43729]},{"a":43734,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":43736,"t":"code","b":[16,245],"m":"djnz","oa":43727,"o":"$AACF"},{"a":43738,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)"},{"a":43741,"t":"code","b":[203,127],"m":"bit","o":"7,a"},{"a":43743,"t":"code","b":[40,7],"m":"jr","oa":43752,"o":"z,$AAE8"},{"a":43745,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":43748,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":43749,"t":"code","b":[167],"m":"and","o":"a"},{"a":43750,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":43752,"t":"code","b":[34,59,128],"m":"ld","oa":32827,"o":"(probe_floor),hl","x":[43743]},{"a":43755,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":43756,"t":"code","b":[217],"m":"exx"},{"a":43757,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":43758,"t":"code","b":[217],"m":"exx"},{"a":43759,"t":"code","b":[42,51,128],"m":"ld","oa":32819,"o":"hl,(probe_x)"},{"a":43762,"t":"code","b":[201],"m":"ret"},{"a":43763,"l":"build_display_list","c":"Builds the frame's display list: a linked list of 15-byte records, one for each thing to be drawn, kept in drawing order. A record holds a link to the next record (+0), its left, upper, right and lower edges as signed words measured from the worm (+2, +4, +6, +8), the address of what it was made from (+$0A), its top and bottom heights (+$0C, +$0D) and its type (+$0E). The routine begins by storing 0 in the head pointer at $EB7E, which empties the list; the LD HL,$EB8D before that is overwritten at once and does nothing, and the two zero bytes written next go through HL = 0 to $0000 and $0001, which are ROM, so they change nothing either. Records are filled from $EB9C upward, with ($8047) pointing at the next free one, and nothing checks how far they reach. The first four are the worm's body, made by the loop at $AB29, which runs four times, the count read from ($809F), over the 16-byte entries at $7F54. Each entry holds a step in x, y and height from the joint before it. The steps are added into running totals in ($80A1), ($80A3) and ($80A5), the last starting from the worm's height ($7FFE). Each record gets the span between the old and the new whole-number position on each axis, widened by 3 either way when the two are fewer than 7 apart, a bottom height equal to the joint's height, a top height 10 above it, the entry's address and type $FA. The loop also writes the joint's two edge points into the last eight bytes of the entry, each point twice: the step is scaled by a byte from the table at $E48C, chosen by the high byte of the sum of the sizes of its x and y parts (30 at most), turned a quarter turn either way, added to the joint and magnified by (128 + height) / 128 through $8116. ($8067) is decremented for each joint, and the joint at which it reaches 0 has the worm's speed ($8003) added to its table index, which narrows it; the frame loop sets ($8067) to 1-4 from the frame counter at $7659, so the narrow joint moves along the body from frame to frame. The four records are filled here and inserted last, at $AED8; the code that follows lists the board and then the objects. Called from $7632 (new game), $7662 (the frame loop) and $78D6 (the loop at $78C9 in the end-of-game sequence).","t":"code","b":[33,141,235],"m":"ld","o":"hl,$EB8D","x":[30258,30306,30934]},{"a":43766,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":43769,"t":"code","b":[34,126,235],"m":"ld","oa":60286,"o":"(display_list_head),hl"},{"a":43772,"t":"code","b":[175],"m":"xor","o":"a"},{"a":43773,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":43774,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":43775,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":43776,"t":"code","b":[33,156,235],"m":"ld","o":"hl,$EB9C"},{"a":43779,"t":"code","b":[34,71,128],"m":"ld","oa":32839,"o":"(display_list_free),hl"},{"a":43782,"t":"code","b":[175],"m":"xor","o":"a"},{"a":43783,"t":"code","b":[50,73,128],"m":"ld","oa":32841,"o":"(cell_offset_x),a"},{"a":43786,"t":"code","b":[50,74,128],"m":"ld","oa":32842,"o":"(cell_offset_y),a"},{"a":43789,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":43792,"t":"code","b":[34,161,128],"m":"ld","oa":32929,"o":"(running_x),hl"},{"a":43795,"t":"code","b":[34,163,128],"m":"ld","oa":32931,"o":"(running_y),hl"},{"a":43798,"t":"code","b":[42,254,127],"m":"ld","oa":32766,"o":"hl,(worm_z)"},{"a":43801,"t":"code","b":[34,165,128],"m":"ld","oa":32933,"o":"(running_z),hl"},{"a":43804,"t":"code","b":[33,84,127],"m":"ld","o":"hl,$7F54"},{"a":43807,"t":"code","b":[58,159,128],"m":"ld","oa":32927,"o":"a,(worm_segment_count)"},{"a":43810,"t":"code","b":[50,160,128],"m":"ld","oa":32928,"o":"(segment_loop_counter),a"},{"a":43813,"t":"code","b":[221,42,71,128],"m":"ld","oa":32839,"o":"ix,(display_list_free)"},{"a":43817,"t":"code","b":[221,117,10],"m":"ld","o":"(ix+$0A),l","x":[44487]},{"a":43820,"t":"code","b":[221,116,11],"m":"ld","o":"(ix+$0B),h"},{"a":43823,"t":"code","b":[62,250],"m":"ld","o":"a,$FA"},{"a":43825,"t":"code","b":[221,119,14],"m":"ld","o":"(ix+$0E),a"},{"a":43828,"t":"code","b":[237,91,161,128],"m":"ld","oa":32929,"o":"de,(running_x)"},{"a":43832,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":43833,"t":"code","b":[50,43,128],"m":"ld","oa":32811,"o":"(extent_x1),a"},{"a":43836,"t":"code","b":[78],"m":"ld","o":"c,(hl)"},{"a":43837,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":43838,"t":"code","b":[70],"m":"ld","o":"b,(hl)"},{"a":43839,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":43840,"t":"code","b":[237,67,51,128],"m":"ld","oa":32819,"o":"(probe_x),bc"},{"a":43844,"t":"code","b":[175],"m":"xor","o":"a"},{"a":43845,"t":"code","b":[203,120],"m":"bit","o":"7,b"},{"a":43847,"t":"code","b":[40,1],"m":"jr","oa":43850,"o":"z,$AB4A"},{"a":43849,"t":"code","b":[61],"m":"dec","o":"a"},{"a":43850,"t":"code","b":[235],"m":"ex","o":"de,hl","x":[43847]},{"a":43851,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":43852,"t":"code","b":[34,161,128],"m":"ld","oa":32929,"o":"(running_x),hl"},{"a":43855,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":43856,"t":"code","b":[58,73,128],"m":"ld","oa":32841,"o":"a,(cell_offset_x)"},{"a":43859,"t":"code","b":[50,44,128],"m":"ld","oa":32812,"o":"(extent_x1_high),a"},{"a":43862,"t":"code","b":[137],"m":"adc","o":"a,c"},{"a":43863,"t":"code","b":[50,73,128],"m":"ld","oa":32841,"o":"(cell_offset_x),a"},{"a":43866,"t":"code","b":[108],"m":"ld","o":"l,h"},{"a":43867,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":43868,"t":"code","b":[237,75,43,128],"m":"ld","oa":32811,"o":"bc,(extent_x1)"},{"a":43872,"t":"code","b":[167],"m":"and","o":"a"},{"a":43873,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":43875,"t":"code","b":[250,129,171],"m":"jp","oa":43905,"o":"m,$AB81"},{"a":43878,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":43879,"t":"code","b":[254,7],"m":"cp","o":"$07"},{"a":43881,"t":"code","b":[48,6],"m":"jr","oa":43889,"o":"nc,$AB71"},{"a":43883,"t":"code","b":[11],"m":"dec","o":"bc"},{"a":43884,"t":"code","b":[11],"m":"dec","o":"bc"},{"a":43885,"t":"code","b":[11],"m":"dec","o":"bc"},{"a":43886,"t":"code","b":[198,6],"m":"add","o":"a,$06"},{"a":43888,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":43889,"t":"code","b":[221,113,2],"m":"ld","o":"(ix+$02),c","x":[43881]},{"a":43892,"t":"code","b":[221,112,3],"m":"ld","o":"(ix+$03),b"},{"a":43895,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":43896,"t":"code","b":[221,117,6],"m":"ld","o":"(ix+$06),l"},{"a":43899,"t":"code","b":[221,116,7],"m":"ld","o":"(ix+$07),h"},{"a":43902,"t":"code","b":[195,153,171],"m":"jp","oa":43929,"o":"$AB99"},{"a":43905,"t":"code","b":[125],"m":"ld","o":"a,l","x":[43875]},{"a":43906,"t":"code","b":[254,250],"m":"cp","o":"$FA"},{"a":43908,"t":"code","b":[56,6],"m":"jr","oa":43916,"o":"c,$AB8C"},{"a":43910,"t":"code","b":[3],"m":"inc","o":"bc"},{"a":43911,"t":"code","b":[3],"m":"inc","o":"bc"},{"a":43912,"t":"code","b":[3],"m":"inc","o":"bc"},{"a":43913,"t":"code","b":[214,6],"m":"sub","o":"$06"},{"a":43915,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":43916,"t":"code","b":[9],"m":"add","o":"hl,bc","x":[43908]},{"a":43917,"t":"code","b":[221,117,2],"m":"ld","o":"(ix+$02),l"},{"a":43920,"t":"code","b":[221,116,3],"m":"ld","o":"(ix+$03),h"},{"a":43923,"t":"code","b":[221,113,6],"m":"ld","o":"(ix+$06),c"},{"a":43926,"t":"code","b":[221,112,7],"m":"ld","o":"(ix+$07),b"},{"a":43929,"t":"code","b":[235],"m":"ex","o":"de,hl","x":[43902]},{"a":43930,"t":"code","b":[237,91,163,128],"m":"ld","oa":32931,"o":"de,(running_y)"},{"a":43934,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":43935,"t":"code","b":[50,43,128],"m":"ld","oa":32811,"o":"(extent_x1),a"},{"a":43938,"t":"code","b":[78],"m":"ld","o":"c,(hl)"},{"a":43939,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":43940,"t":"code","b":[70],"m":"ld","o":"b,(hl)"},{"a":43941,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":43942,"t":"code","b":[237,67,53,128],"m":"ld","oa":32821,"o":"(probe_z),bc"},{"a":43946,"t":"code","b":[175],"m":"xor","o":"a"},{"a":43947,"t":"code","b":[203,120],"m":"bit","o":"7,b"},{"a":43949,"t":"code","b":[40,1],"m":"jr","oa":43952,"o":"z,$ABB0"},{"a":43951,"t":"code","b":[61],"m":"dec","o":"a"},{"a":43952,"t":"code","b":[235],"m":"ex","o":"de,hl","x":[43949]},{"a":43953,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":43954,"t":"code","b":[34,163,128],"m":"ld","oa":32931,"o":"(running_y),hl"},{"a":43957,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":43958,"t":"code","b":[58,74,128],"m":"ld","oa":32842,"o":"a,(cell_offset_y)"},{"a":43961,"t":"code","b":[50,44,128],"m":"ld","oa":32812,"o":"(extent_x1_high),a"},{"a":43964,"t":"code","b":[137],"m":"adc","o":"a,c"},{"a":43965,"t":"code","b":[50,74,128],"m":"ld","oa":32842,"o":"(cell_offset_y),a"},{"a":43968,"t":"code","b":[108],"m":"ld","o":"l,h"},{"a":43969,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":43970,"t":"code","b":[237,75,43,128],"m":"ld","oa":32811,"o":"bc,(extent_x1)"},{"a":43974,"t":"code","b":[167],"m":"and","o":"a"},{"a":43975,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":43977,"t":"code","b":[250,231,171],"m":"jp","oa":44007,"o":"m,$ABE7"},{"a":43980,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":43981,"t":"code","b":[254,7],"m":"cp","o":"$07"},{"a":43983,"t":"code","b":[48,6],"m":"jr","oa":43991,"o":"nc,$ABD7"},{"a":43985,"t":"code","b":[11],"m":"dec","o":"bc"},{"a":43986,"t":"code","b":[11],"m":"dec","o":"bc"},{"a":43987,"t":"code","b":[11],"m":"dec","o":"bc"},{"a":43988,"t":"code","b":[198,6],"m":"add","o":"a,$06"},{"a":43990,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":43991,"t":"code","b":[221,113,4],"m":"ld","o":"(ix+$04),c","x":[43983]},{"a":43994,"t":"code","b":[221,112,5],"m":"ld","o":"(ix+$05),b"},{"a":43997,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":43998,"t":"code","b":[221,117,8],"m":"ld","o":"(ix+$08),l"},{"a":44001,"t":"code","b":[221,116,9],"m":"ld","o":"(ix+$09),h"},{"a":44004,"t":"code","b":[195,255,171],"m":"jp","oa":44031,"o":"$ABFF"},{"a":44007,"t":"code","b":[125],"m":"ld","o":"a,l","x":[43977]},{"a":44008,"t":"code","b":[254,250],"m":"cp","o":"$FA"},{"a":44010,"t":"code","b":[56,6],"m":"jr","oa":44018,"o":"c,$ABF2"},{"a":44012,"t":"code","b":[3],"m":"inc","o":"bc"},{"a":44013,"t":"code","b":[3],"m":"inc","o":"bc"},{"a":44014,"t":"code","b":[3],"m":"inc","o":"bc"},{"a":44015,"t":"code","b":[214,6],"m":"sub","o":"$06"},{"a":44017,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":44018,"t":"code","b":[9],"m":"add","o":"hl,bc","x":[44010]},{"a":44019,"t":"code","b":[221,117,4],"m":"ld","o":"(ix+$04),l"},{"a":44022,"t":"code","b":[221,116,5],"m":"ld","o":"(ix+$05),h"},{"a":44025,"t":"code","b":[221,113,8],"m":"ld","o":"(ix+$08),c"},{"a":44028,"t":"code","b":[221,112,9],"m":"ld","o":"(ix+$09),b"},{"a":44031,"t":"code","b":[235],"m":"ex","o":"de,hl","x":[44004]},{"a":44032,"t":"code","b":[237,91,165,128],"m":"ld","oa":32933,"o":"de,(running_z)"},{"a":44036,"t":"code","b":[78],"m":"ld","o":"c,(hl)"},{"a":44037,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":44038,"t":"code","b":[70],"m":"ld","o":"b,(hl)"},{"a":44039,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":44040,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":44041,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":44042,"t":"code","b":[34,165,128],"m":"ld","oa":32933,"o":"(running_z),hl"},{"a":44045,"t":"code","b":[221,116,13],"m":"ld","o":"(ix+$0D),h"},{"a":44048,"t":"code","b":[62,10],"m":"ld","o":"a,$0A"},{"a":44050,"t":"code","b":[132],"m":"add","o":"a,h"},{"a":44051,"t":"code","b":[221,119,12],"m":"ld","o":"(ix+$0C),a"},{"a":44054,"t":"code","b":[1,0,0],"m":"ld","o":"bc,$0000"},{"a":44057,"t":"code","b":[203,40],"m":"sra","o":"b"},{"a":44059,"t":"code","b":[203,25],"m":"rr","o":"c"},{"a":44061,"t":"code","b":[203,40],"m":"sra","o":"b"},{"a":44063,"t":"code","b":[203,25],"m":"rr","o":"c"},{"a":44065,"t":"code","b":[237,67,55,128],"m":"ld","oa":32823,"o":"(probe_hit),bc"},{"a":44069,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":44070,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":44071,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":44072,"t":"code","b":[217],"m":"exx"},{"a":44073,"t":"code","b":[42,51,128],"m":"ld","oa":32819,"o":"hl,(probe_x)"},{"a":44076,"t":"code","b":[203,124],"m":"bit","o":"7,h"},{"a":44078,"t":"code","b":[40,7],"m":"jr","oa":44087,"o":"z,$AC37"},{"a":44080,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":44081,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":44084,"t":"code","b":[167],"m":"and","o":"a"},{"a":44085,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":44087,"t":"code","b":[68],"m":"ld","o":"b,h","x":[44078]},{"a":44088,"t":"code","b":[77],"m":"ld","o":"c,l"},{"a":44089,"t":"code","b":[42,53,128],"m":"ld","oa":32821,"o":"hl,(probe_z)"},{"a":44092,"t":"code","b":[203,124],"m":"bit","o":"7,h"},{"a":44094,"t":"code","b":[40,7],"m":"jr","oa":44103,"o":"z,$AC47"},{"a":44096,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":44097,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":44100,"t":"code","b":[167],"m":"and","o":"a"},{"a":44101,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":44103,"t":"code","b":[229],"m":"push","o":"hl","x":[44094]},{"a":44104,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":44105,"t":"code","b":[92],"m":"ld","o":"e,h"},{"a":44106,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":44108,"t":"code","b":[58,103,128],"m":"ld","oa":32871,"o":"a,(narrow_segment_countdown)"},{"a":44111,"t":"code","b":[61],"m":"dec","o":"a"},{"a":44112,"t":"code","b":[50,103,128],"m":"ld","oa":32871,"o":"(narrow_segment_countdown),a"},{"a":44115,"t":"code","b":[32,5],"m":"jr","oa":44122,"o":"nz,$AC5A"},{"a":44117,"t":"code","b":[58,3,128],"m":"ld","oa":32771,"o":"a,(worm_speed)"},{"a":44120,"t":"code","b":[131],"m":"add","o":"a,e"},{"a":44121,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":44122,"t":"code","b":[123],"m":"ld","o":"a,e","x":[44115]},{"a":44123,"t":"code","b":[254,31],"m":"cp","o":"$1F"},{"a":44125,"t":"code","b":[56,2],"m":"jr","oa":44129,"o":"c,$AC61"},{"a":44127,"t":"code","b":[30,30],"m":"ld","o":"e,$1E"},{"a":44129,"t":"code","b":[33,140,228],"m":"ld","o":"hl,$E48C","x":[44125]},{"a":44132,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":44133,"t":"code","b":[89],"m":"ld","o":"e,c"},{"a":44134,"t":"code","b":[80],"m":"ld","o":"d,b"},{"a":44135,"t":"code","b":[70],"m":"ld","o":"b,(hl)"},{"a":44136,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":44137,"t":"code","b":[205,219,168],"m":"call","oa":43227,"o":"multiply_de_by_a_fraction"},{"a":44140,"t":"code","b":[58,52,128],"m":"ld","oa":32820,"o":"a,(probe_y)"},{"a":44143,"t":"code","b":[203,127],"m":"bit","o":"7,a"},{"a":44145,"t":"code","b":[40,7],"m":"jr","oa":44154,"o":"z,$AC7A"},{"a":44147,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":44148,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":44151,"t":"code","b":[167],"m":"and","o":"a"},{"a":44152,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":44154,"t":"code","b":[34,51,128],"m":"ld","oa":32819,"o":"(probe_x),hl","x":[44145]},{"a":44157,"t":"code","b":[209],"m":"pop","o":"de"},{"a":44158,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":44159,"t":"code","b":[205,219,168],"m":"call","oa":43227,"o":"multiply_de_by_a_fraction"},{"a":44162,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)"},{"a":44165,"t":"code","b":[203,127],"m":"bit","o":"7,a"},{"a":44167,"t":"code","b":[40,7],"m":"jr","oa":44176,"o":"z,$AC90"},{"a":44169,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":44170,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":44173,"t":"code","b":[167],"m":"and","o":"a"},{"a":44174,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":44176,"t":"code","b":[34,53,128],"m":"ld","oa":32821,"o":"(probe_z),hl","x":[44167]},{"a":44179,"t":"code","b":[42,51,128],"m":"ld","oa":32819,"o":"hl,(probe_x)"},{"a":44182,"t":"code","b":[237,91,53,128],"m":"ld","oa":32821,"o":"de,(probe_z)"},{"a":44186,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":44187,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":44188,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":44191,"t":"code","b":[42,165,128],"m":"ld","oa":32933,"o":"hl,(running_z)"},{"a":44194,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":44195,"t":"code","b":[34,57,128],"m":"ld","oa":32825,"o":"(probe_slope),hl"},{"a":44198,"t":"code","b":[42,165,128],"m":"ld","oa":32933,"o":"hl,(running_z)"},{"a":44201,"t":"code","b":[167],"m":"and","o":"a"},{"a":44202,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":44204,"t":"code","b":[48,7],"m":"jr","oa":44213,"o":"nc,$ACB5"},{"a":44206,"t":"code","b":[203,122],"m":"bit","o":"7,d"},{"a":44208,"t":"code","b":[32,3],"m":"jr","oa":44213,"o":"nz,$ACB5"},{"a":44210,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":44213,"t":"code","b":[34,63,128],"m":"ld","oa":32831,"o":"(probe_ramp),hl","x":[44204,44208]},{"a":44216,"t":"code","b":[42,53,128],"m":"ld","oa":32821,"o":"hl,(probe_z)"},{"a":44219,"t":"code","b":[237,91,55,128],"m":"ld","oa":32823,"o":"de,(probe_hit)"},{"a":44223,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":44224,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":44225,"t":"code","b":[42,161,128],"m":"ld","oa":32929,"o":"hl,(running_x)"},{"a":44228,"t":"code","b":[167],"m":"and","o":"a"},{"a":44229,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":44231,"t":"code","b":[34,59,128],"m":"ld","oa":32827,"o":"(probe_floor),hl"},{"a":44234,"t":"code","b":[42,51,128],"m":"ld","oa":32819,"o":"hl,(probe_x)"},{"a":44237,"t":"code","b":[237,91,55,128],"m":"ld","oa":32823,"o":"de,(probe_hit)"},{"a":44241,"t":"code","b":[167],"m":"and","o":"a"},{"a":44242,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":44244,"t":"code","b":[237,91,163,128],"m":"ld","oa":32931,"o":"de,(running_y)"},{"a":44248,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":44249,"t":"code","b":[34,61,128],"m":"ld","oa":32829,"o":"(probe_top),hl"},{"a":44252,"t":"code","b":[42,57,128],"m":"ld","oa":32825,"o":"hl,(probe_slope)"},{"a":44255,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":44256,"t":"code","b":[42,59,128],"m":"ld","oa":32827,"o":"hl,(probe_floor)"},{"a":44259,"t":"code","b":[205,22,129],"m":"call","oa":33046,"o":"scale_high_byte"},{"a":44262,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":44263,"t":"code","b":[198,128],"m":"add","o":"a,$80"},{"a":44265,"t":"code","b":[217],"m":"exx"},{"a":44266,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":44267,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":44268,"t":"code","b":[217],"m":"exx"},{"a":44269,"t":"code","b":[42,61,128],"m":"ld","oa":32829,"o":"hl,(probe_top)"},{"a":44272,"t":"code","b":[205,22,129],"m":"call","oa":33046,"o":"scale_high_byte"},{"a":44275,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":44276,"t":"code","b":[198,128],"m":"add","o":"a,$80"},{"a":44278,"t":"code","b":[217],"m":"exx"},{"a":44279,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":44280,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":44281,"t":"code","b":[217],"m":"exx"},{"a":44282,"t":"code","b":[42,55,128],"m":"ld","oa":32823,"o":"hl,(probe_hit)"},{"a":44285,"t":"code","b":[237,91,53,128],"m":"ld","oa":32821,"o":"de,(probe_z)"},{"a":44289,"t":"code","b":[167],"m":"and","o":"a"},{"a":44290,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":44292,"t":"code","b":[237,91,161,128],"m":"ld","oa":32929,"o":"de,(running_x)"},{"a":44296,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":44297,"t":"code","b":[34,59,128],"m":"ld","oa":32827,"o":"(probe_floor),hl"},{"a":44300,"t":"code","b":[42,51,128],"m":"ld","oa":32819,"o":"hl,(probe_x)"},{"a":44303,"t":"code","b":[237,91,55,128],"m":"ld","oa":32823,"o":"de,(probe_hit)"},{"a":44307,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":44308,"t":"code","b":[237,91,163,128],"m":"ld","oa":32931,"o":"de,(running_y)"},{"a":44312,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":44313,"t":"code","b":[34,61,128],"m":"ld","oa":32829,"o":"(probe_top),hl"},{"a":44316,"t":"code","b":[42,63,128],"m":"ld","oa":32831,"o":"hl,(probe_ramp)"},{"a":44319,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":44320,"t":"code","b":[42,59,128],"m":"ld","oa":32827,"o":"hl,(probe_floor)"},{"a":44323,"t":"code","b":[205,22,129],"m":"call","oa":33046,"o":"scale_high_byte"},{"a":44326,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":44327,"t":"code","b":[198,128],"m":"add","o":"a,$80"},{"a":44329,"t":"code","b":[217],"m":"exx"},{"a":44330,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":44331,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":44332,"t":"code","b":[217],"m":"exx"},{"a":44333,"t":"code","b":[42,61,128],"m":"ld","oa":32829,"o":"hl,(probe_top)"},{"a":44336,"t":"code","b":[205,22,129],"m":"call","oa":33046,"o":"scale_high_byte"},{"a":44339,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":44340,"t":"code","b":[198,128],"m":"add","o":"a,$80"},{"a":44342,"t":"code","b":[217],"m":"exx"},{"a":44343,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":44344,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":44345,"t":"code","b":[217],"m":"exx"},{"a":44346,"t":"code","b":[42,53,128],"m":"ld","oa":32821,"o":"hl,(probe_z)"},{"a":44349,"t":"code","b":[237,91,55,128],"m":"ld","oa":32823,"o":"de,(probe_hit)"},{"a":44353,"t":"code","b":[167],"m":"and","o":"a"},{"a":44354,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":44356,"t":"code","b":[237,91,161,128],"m":"ld","oa":32929,"o":"de,(running_x)"},{"a":44360,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":44361,"t":"code","b":[34,59,128],"m":"ld","oa":32827,"o":"(probe_floor),hl"},{"a":44364,"t":"code","b":[42,51,128],"m":"ld","oa":32819,"o":"hl,(probe_x)"},{"a":44367,"t":"code","b":[237,91,55,128],"m":"ld","oa":32823,"o":"de,(probe_hit)"},{"a":44371,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":44372,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":44373,"t":"code","b":[42,163,128],"m":"ld","oa":32931,"o":"hl,(running_y)"},{"a":44376,"t":"code","b":[167],"m":"and","o":"a"},{"a":44377,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":44379,"t":"code","b":[34,61,128],"m":"ld","oa":32829,"o":"(probe_top),hl"},{"a":44382,"t":"code","b":[42,57,128],"m":"ld","oa":32825,"o":"hl,(probe_slope)"},{"a":44385,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":44386,"t":"code","b":[42,59,128],"m":"ld","oa":32827,"o":"hl,(probe_floor)"},{"a":44389,"t":"code","b":[205,22,129],"m":"call","oa":33046,"o":"scale_high_byte"},{"a":44392,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":44393,"t":"code","b":[198,128],"m":"add","o":"a,$80"},{"a":44395,"t":"code","b":[217],"m":"exx"},{"a":44396,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":44397,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":44398,"t":"code","b":[217],"m":"exx"},{"a":44399,"t":"code","b":[42,61,128],"m":"ld","oa":32829,"o":"hl,(probe_top)"},{"a":44402,"t":"code","b":[205,22,129],"m":"call","oa":33046,"o":"scale_high_byte"},{"a":44405,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":44406,"t":"code","b":[198,128],"m":"add","o":"a,$80"},{"a":44408,"t":"code","b":[217],"m":"exx"},{"a":44409,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":44410,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":44411,"t":"code","b":[217],"m":"exx"},{"a":44412,"t":"code","b":[42,53,128],"m":"ld","oa":32821,"o":"hl,(probe_z)"},{"a":44415,"t":"code","b":[237,91,55,128],"m":"ld","oa":32823,"o":"de,(probe_hit)"},{"a":44419,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":44420,"t":"code","b":[237,91,161,128],"m":"ld","oa":32929,"o":"de,(running_x)"},{"a":44424,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":44425,"t":"code","b":[34,59,128],"m":"ld","oa":32827,"o":"(probe_floor),hl"},{"a":44428,"t":"code","b":[42,55,128],"m":"ld","oa":32823,"o":"hl,(probe_hit)"},{"a":44431,"t":"code","b":[237,91,51,128],"m":"ld","oa":32819,"o":"de,(probe_x)"},{"a":44435,"t":"code","b":[167],"m":"and","o":"a"},{"a":44436,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":44438,"t":"code","b":[237,91,163,128],"m":"ld","oa":32931,"o":"de,(running_y)"},{"a":44442,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":44443,"t":"code","b":[34,61,128],"m":"ld","oa":32829,"o":"(probe_top),hl"},{"a":44446,"t":"code","b":[42,63,128],"m":"ld","oa":32831,"o":"hl,(probe_ramp)"},{"a":44449,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":44450,"t":"code","b":[42,59,128],"m":"ld","oa":32827,"o":"hl,(probe_floor)"},{"a":44453,"t":"code","b":[205,22,129],"m":"call","oa":33046,"o":"scale_high_byte"},{"a":44456,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":44457,"t":"code","b":[198,128],"m":"add","o":"a,$80"},{"a":44459,"t":"code","b":[217],"m":"exx"},{"a":44460,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":44461,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":44462,"t":"code","b":[217],"m":"exx"},{"a":44463,"t":"code","b":[42,61,128],"m":"ld","oa":32829,"o":"hl,(probe_top)"},{"a":44466,"t":"code","b":[205,22,129],"m":"call","oa":33046,"o":"scale_high_byte"},{"a":44469,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":44470,"t":"code","b":[198,128],"m":"add","o":"a,$80"},{"a":44472,"t":"code","b":[217],"m":"exx"},{"a":44473,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":44474,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":44475,"t":"code","b":[17,15,0],"m":"ld","o":"de,$000F"},{"a":44478,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":44480,"t":"code","b":[58,160,128],"m":"ld","oa":32928,"o":"a,(segment_loop_counter)"},{"a":44483,"t":"code","b":[61],"m":"dec","o":"a"},{"a":44484,"t":"code","b":[50,160,128],"m":"ld","oa":32928,"o":"(segment_loop_counter),a"},{"a":44487,"t":"code","b":[194,41,171],"m":"jp","oa":43817,"o":"nz,$AB29"},{"a":44490,"l":"list_nearby_cells","c":"The second part of the display-list build, entered by falling out of the worm loop. It saves the address of the next free record in ($8047), zeroes ($8068), the count of board records and objects listed in the frame, and calls $AEF9 nine times, once for each cell of the 3 by 3 block around the worm. The cell addresses come from the middle of the 5 by 5 grid of cell pointers at $6432, in the order the worm's own cell ($644A), up ($6440), left ($6448), right ($644C), down ($6454), then the corners up-left ($643E), up-right ($6442), down-left ($6452) and down-right ($6456). Each call passes the cell's offset from the worm's cell in B for x and C for y, as $FF, 0 or 1, and in DE one of the nine six-byte slots at $8069-$809E, which are laid out row by row so that the worm's own cell has the fifth, $8081.","t":"code","b":[221,34,71,128],"m":"ld","oa":32839,"o":"(display_list_free),ix"},{"a":44494,"t":"code","b":[175],"m":"xor","o":"a"},{"a":44495,"t":"code","b":[50,104,128],"m":"ld","oa":32872,"o":"(entries_added),a"},{"a":44498,"t":"code","b":[42,74,100],"m":"ld","oa":25674,"o":"hl,(current_cell)"},{"a":44501,"t":"code","b":[1,0,0],"m":"ld","o":"bc,$0000"},{"a":44504,"t":"code","b":[17,129,128],"m":"ld","o":"de,$8081"},{"a":44507,"t":"code","b":[205,249,174],"m":"call","oa":44793,"o":"add_cell_to_list"},{"a":44510,"t":"code","b":[42,64,100],"m":"ld","oa":25664,"o":"hl,($6440)"},{"a":44513,"t":"code","b":[1,255,0],"m":"ld","o":"bc,$00FF"},{"a":44516,"t":"code","b":[17,111,128],"m":"ld","o":"de,$806F"},{"a":44519,"t":"code","b":[205,249,174],"m":"call","oa":44793,"o":"add_cell_to_list"},{"a":44522,"t":"code","b":[42,72,100],"m":"ld","oa":25672,"o":"hl,($6448)"},{"a":44525,"t":"code","b":[1,0,255],"m":"ld","o":"bc,$FF00"},{"a":44528,"t":"code","b":[17,123,128],"m":"ld","o":"de,$807B"},{"a":44531,"t":"code","b":[205,249,174],"m":"call","oa":44793,"o":"add_cell_to_list"},{"a":44534,"t":"code","b":[42,76,100],"m":"ld","oa":25676,"o":"hl,($644C)"},{"a":44537,"t":"code","b":[1,0,1],"m":"ld","o":"bc,$0100"},{"a":44540,"t":"code","b":[17,135,128],"m":"ld","o":"de,$8087"},{"a":44543,"t":"code","b":[205,249,174],"m":"call","oa":44793,"o":"add_cell_to_list"},{"a":44546,"t":"code","b":[42,84,100],"m":"ld","oa":25684,"o":"hl,($6454)"},{"a":44549,"t":"code","b":[1,1,0],"m":"ld","o":"bc,$0001"},{"a":44552,"t":"code","b":[17,147,128],"m":"ld","o":"de,$8093"},{"a":44555,"t":"code","b":[205,249,174],"m":"call","oa":44793,"o":"add_cell_to_list"},{"a":44558,"t":"code","b":[42,62,100],"m":"ld","oa":25662,"o":"hl,($643E)"},{"a":44561,"t":"code","b":[1,255,255],"m":"ld","o":"bc,$FFFF"},{"a":44564,"t":"code","b":[17,105,128],"m":"ld","o":"de,$8069"},{"a":44567,"t":"code","b":[205,249,174],"m":"call","oa":44793,"o":"add_cell_to_list"},{"a":44570,"t":"code","b":[42,66,100],"m":"ld","oa":25666,"o":"hl,($6442)"},{"a":44573,"t":"code","b":[1,255,1],"m":"ld","o":"bc,$01FF"},{"a":44576,"t":"code","b":[17,117,128],"m":"ld","o":"de,$8075"},{"a":44579,"t":"code","b":[205,249,174],"m":"call","oa":44793,"o":"add_cell_to_list"},{"a":44582,"t":"code","b":[42,82,100],"m":"ld","oa":25682,"o":"hl,($6452)"},{"a":44585,"t":"code","b":[1,1,255],"m":"ld","o":"bc,$FF01"},{"a":44588,"t":"code","b":[17,141,128],"m":"ld","o":"de,$808D"},{"a":44591,"t":"code","b":[205,249,174],"m":"call","oa":44793,"o":"add_cell_to_list"},{"a":44594,"t":"code","b":[42,86,100],"m":"ld","oa":25686,"o":"hl,($6456)"},{"a":44597,"t":"code","b":[1,1,1],"m":"ld","o":"bc,$0101"},{"a":44600,"t":"code","b":[17,153,128],"m":"ld","o":"de,$8099"},{"a":44603,"t":"code","b":[205,249,174],"m":"call","oa":44793,"o":"add_cell_to_list"},{"a":44606,"l":"list_objects","c":"The third part of the display-list build: the walk over the object pool. Objects are 30-byte records from $7C74 up to the address in ($7C72), and the loop at $AE45 takes them from the last to the first. Objects of type $F0 or $E3 are skipped, and an object whose grid row at +3 is 5 or more goes straight to the test at $AEB9. For the others the grid column (+2) and row (+3), each less 2, become the cell offsets in ($8049) and ($804A), a seven-byte record in the board's format is assembled at $AECE from the object's top height (+$0D), bottom height (+$0B), x (+5), width (+8), y (+7), depth (+9) and type (+0), the object's address is put at +$0A of the free list record, and $AF73 is called to list it if it is in view. ($804E) is zeroed before the call and is non-zero afterwards only if $AF73 got as far as the insert at $B008. At $AEB9 an object that was not listed and whose type is $FB has its byte +1 reduced by one, stopping at 1. When the walk passes below $7C74 it jumps to $AED8.","t":"code","b":[221,42,114,124],"m":"ld","oa":31858,"o":"ix,(object_list_end)"},{"a":44610,"t":"code","b":[195,69,174],"m":"jp","oa":44613,"o":"$AE45"},{"a":44613,"t":"code","b":[17,226,255],"m":"ld","o":"de,$FFE2","x":[44610,44636,44640,44726,44734,44741,44747]},{"a":44616,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":44618,"t":"code","b":[17,140,131],"m":"ld","o":"de,$838C"},{"a":44621,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":44623,"t":"code","b":[210,216,174],"m":"jp","oa":44760,"o":"nc,insert_worm_segments"},{"a":44626,"t":"code","b":[17,116,124],"m":"ld","o":"de,$7C74"},{"a":44629,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":44631,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)"},{"a":44634,"t":"code","b":[254,240],"m":"cp","o":"$F0"},{"a":44636,"t":"code","b":[40,231],"m":"jr","oa":44613,"o":"z,$AE45"},{"a":44638,"t":"code","b":[254,227],"m":"cp","o":"$E3"},{"a":44640,"t":"code","b":[40,227],"m":"jr","oa":44613,"o":"z,$AE45"},{"a":44642,"t":"code","b":[221,126,3],"m":"ld","o":"a,(ix+$03)"},{"a":44645,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":44647,"t":"code","b":[210,185,174],"m":"jp","oa":44729,"o":"nc,$AEB9"},{"a":44650,"t":"code","b":[214,2],"m":"sub","o":"$02"},{"a":44652,"t":"code","b":[50,74,128],"m":"ld","oa":32842,"o":"(cell_offset_y),a"},{"a":44655,"t":"code","b":[221,126,2],"m":"ld","o":"a,(ix+$02)"},{"a":44658,"t":"code","b":[214,2],"m":"sub","o":"$02"},{"a":44660,"t":"code","b":[50,73,128],"m":"ld","oa":32841,"o":"(cell_offset_x),a"},{"a":44663,"t":"code","b":[221,110,13],"m":"ld","o":"l,(ix+$0D)"},{"a":44666,"t":"code","b":[221,102,11],"m":"ld","o":"h,(ix+$0B)"},{"a":44669,"t":"code","b":[34,206,174],"m":"ld","oa":44750,"o":"(scratch_record),hl"},{"a":44672,"t":"code","b":[221,110,5],"m":"ld","o":"l,(ix+$05)"},{"a":44675,"t":"code","b":[221,102,8],"m":"ld","o":"h,(ix+$08)"},{"a":44678,"t":"code","b":[34,208,174],"m":"ld","oa":44752,"o":"($AED0),hl"},{"a":44681,"t":"code","b":[221,110,7],"m":"ld","o":"l,(ix+$07)"},{"a":44684,"t":"code","b":[221,102,9],"m":"ld","o":"h,(ix+$09)"},{"a":44687,"t":"code","b":[34,210,174],"m":"ld","oa":44754,"o":"($AED2),hl"},{"a":44690,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)"},{"a":44693,"t":"code","b":[50,212,174],"m":"ld","oa":44756,"o":"($AED4),a"},{"a":44696,"t":"code","b":[221,229],"m":"push","o":"ix"},{"a":44698,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":44699,"t":"code","b":[229],"m":"push","o":"hl"},{"a":44700,"t":"code","b":[221,42,71,128],"m":"ld","oa":32839,"o":"ix,(display_list_free)"},{"a":44704,"t":"code","b":[221,117,10],"m":"ld","o":"(ix+$0A),l"},{"a":44707,"t":"code","b":[221,116,11],"m":"ld","o":"(ix+$0B),h"},{"a":44710,"t":"code","b":[175],"m":"xor","o":"a"},{"a":44711,"t":"code","b":[50,78,128],"m":"ld","oa":32846,"o":"(entry_added_flag),a"},{"a":44714,"t":"code","b":[33,206,174],"m":"ld","o":"hl,$AECE"},{"a":44717,"t":"code","b":[205,115,175],"m":"call","oa":44915,"o":"add_record_to_list"},{"a":44720,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":44722,"t":"code","b":[58,78,128],"m":"ld","oa":32846,"o":"a,(entry_added_flag)"},{"a":44725,"t":"code","b":[167],"m":"and","o":"a"},{"a":44726,"t":"code","b":[194,69,174],"m":"jp","oa":44613,"o":"nz,$AE45"},{"a":44729,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)","x":[44647]},{"a":44732,"t":"code","b":[254,251],"m":"cp","o":"$FB"},{"a":44734,"t":"code","b":[194,69,174],"m":"jp","oa":44613,"o":"nz,$AE45"},{"a":44737,"t":"code","b":[221,126,1],"m":"ld","o":"a,(ix+$01)"},{"a":44740,"t":"code","b":[61],"m":"dec","o":"a"},{"a":44741,"t":"code","b":[202,69,174],"m":"jp","oa":44613,"o":"z,$AE45"},{"a":44744,"t":"code","b":[221,119,1],"m":"ld","o":"(ix+$01),a"},{"a":44747,"t":"code","b":[195,69,174],"m":"jp","oa":44613,"o":"$AE45"},{"a":44750,"l":"scratch_record","c":"Ten bytes of scratch shared by two pieces of code. The display-list builder assembles a seven-byte record in the board's format here for each object in the pool ($AE77-$AE95): top height from the object's +$0D, bottom height from +$0B, x from +5, width from +8, y from +7, depth from +9 and type from +0, and gives its address to $AF73. The code that shifts the 5 by 5 grid of cell pointers uses all ten bytes to hold the five pointers of the row or column that is leaving the grid (stored at $9F95-$9FAD, $A038-$A050, $A1DA and $A278) and reads them back two bytes at a time at $A025, $A0DB, $A265 and $A303.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[40853,41016,44669]},{"a":44758,"t":"byte","b":[0,0],"x":[40877,41040]},{"a":44760,"l":"insert_worm_segments","c":"The end of the display-list build, reached by the jump at $AE4F once the object pool is exhausted. It inserts the worm's four records, at $EB9C, $EBAB, $EBBA and $EBC9, into the list through $B008 in that order and returns to the builder's caller. The LD IX,$EB8D at the start is overwritten by the next instruction and does nothing. The worm goes in last, and $B008 steps over records of type $FA without comparing them, so each segment is placed against the board and the objects only; segments that end up at the same place in the list lie in reverse order there, with the segment at the front of the worm drawn last.","t":"code","b":[221,33,141,235],"m":"ld","o":"ix,$EB8D","x":[44623]},{"a":44764,"t":"code","b":[221,33,156,235],"m":"ld","o":"ix,$EB9C"},{"a":44768,"t":"code","b":[205,8,176],"m":"call","oa":45064,"o":"list_insert_ordered"},{"a":44771,"t":"code","b":[221,33,171,235],"m":"ld","o":"ix,$EBAB"},{"a":44775,"t":"code","b":[205,8,176],"m":"call","oa":45064,"o":"list_insert_ordered"},{"a":44778,"t":"code","b":[221,33,186,235],"m":"ld","o":"ix,$EBBA"},{"a":44782,"t":"code","b":[205,8,176],"m":"call","oa":45064,"o":"list_insert_ordered"},{"a":44785,"t":"code","b":[221,33,201,235],"m":"ld","o":"ix,$EBC9"},{"a":44789,"t":"code","b":[205,8,176],"m":"call","oa":45064,"o":"list_insert_ordered"},{"a":44792,"t":"code","b":[201],"m":"ret"},{"a":44793,"l":"add_cell_to_list","c":"Notes where one of the nine cells around the worm lies and lists what is in it. In: HL = the cell's address, or 0 for no cell, B and C = the cell's offset from the worm's cell in x and y (-1, 0 or 1), DE = the cell's six-byte slot in the table at $8069. The offsets are saved in ($8049) and ($804A). Three words go into the slot: x offset x 256 - ($7FF5) + $80 and y offset x 256 - ($7FF7) + $40, which place the cell's corner on the screen given the worm's position inside its own cell, and the cell's address. A null cell ends there. Otherwise the loop at $AF37 walks the cell's records, which start 8 bytes into the cell, after its four neighbour pointers, are 7 bytes each and end at a zero byte; each one is passed to $AF49 with HL = its address. The slots are read back by the floor routine at $EB2B. Called nine times, from $ADDB, $ADE7, $ADF3, $ADFF, $AE0B, $AE17, $AE23, $AE2F and $AE3B.","t":"code","b":[120],"m":"ld","o":"a,b","x":[44507,44519,44531,44543,44555,44567,44579,44591,44603]},{"a":44794,"t":"code","b":[50,73,128],"m":"ld","oa":32841,"o":"(cell_offset_x),a"},{"a":44797,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":44798,"t":"code","b":[50,74,128],"m":"ld","oa":32842,"o":"(cell_offset_y),a"},{"a":44801,"t":"code","b":[229],"m":"push","o":"hl"},{"a":44802,"t":"code","b":[58,245,127],"m":"ld","oa":32757,"o":"a,($7FF5)"},{"a":44805,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":44806,"t":"code","b":[58,73,128],"m":"ld","oa":32841,"o":"a,(cell_offset_x)"},{"a":44809,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":44810,"t":"code","b":[175],"m":"xor","o":"a"},{"a":44811,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":44812,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":44813,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":44815,"t":"code","b":[14,128],"m":"ld","o":"c,$80"},{"a":44817,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":44818,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":44819,"t":"code","b":[18],"m":"ld","o":"(de),a"},{"a":44820,"t":"code","b":[19],"m":"inc","o":"de"},{"a":44821,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":44822,"t":"code","b":[18],"m":"ld","o":"(de),a"},{"a":44823,"t":"code","b":[19],"m":"inc","o":"de"},{"a":44824,"t":"code","b":[58,247,127],"m":"ld","oa":32759,"o":"a,($7FF7)"},{"a":44827,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":44828,"t":"code","b":[58,74,128],"m":"ld","oa":32842,"o":"a,(cell_offset_y)"},{"a":44831,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":44832,"t":"code","b":[175],"m":"xor","o":"a"},{"a":44833,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":44834,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":44835,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":44837,"t":"code","b":[14,64],"m":"ld","o":"c,$40"},{"a":44839,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":44840,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":44841,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":44842,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":44843,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":44844,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":44845,"t":"code","b":[209],"m":"pop","o":"de"},{"a":44846,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":44847,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":44848,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":44849,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":44850,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":44851,"t":"code","b":[180],"m":"or","o":"h"},{"a":44852,"t":"code","b":[32,1],"m":"jr","oa":44855,"o":"nz,$AF37"},{"a":44854,"t":"code","b":[201],"m":"ret"},{"a":44855,"t":"code","b":[1,8,0],"m":"ld","o":"bc,$0008","x":[44852]},{"a":44858,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":44859,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[44871]},{"a":44860,"t":"code","b":[167],"m":"and","o":"a"},{"a":44861,"t":"code","b":[200],"m":"ret","o":"z"},{"a":44862,"t":"code","b":[229],"m":"push","o":"hl"},{"a":44863,"t":"code","b":[205,73,175],"m":"call","oa":44873,"o":"run_record_handler"},{"a":44866,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":44867,"t":"code","b":[1,7,0],"m":"ld","o":"bc,$0007"},{"a":44870,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":44871,"t":"code","b":[24,242],"m":"jr","oa":44859,"o":"$AF3B"},{"a":44873,"l":"run_record_handler","c":"Called for each board record with HL = its address; before the record is listed it looks at the record just before it. If that record's type, the byte at HL - 1, is $F7 and its depth byte at HL - 2 is not $0C, then the two bytes at HL - 3 and HL - 2 are the address of a routine, which is written into the operand of the CALL at $AF63 and called with HL pointing at that earlier record. So a record of type $F7 whose depth is not $0C is a handler that runs once a frame, when the walk reaches the record after it, whether or not either record is in view; a handler placed last in its cell would never run, and none is. The tape image has 23 handler records, using $BD6F (2), $BD90 (7), $BDD1 (13) and $BED1 (1). For the first record of a cell the byte tested is the last byte of the cell's header, the high byte of a cell address, which is never $F7.","t":"code","b":[43],"m":"dec","o":"hl","x":[44863]},{"a":44874,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":44875,"t":"code","b":[254,247],"m":"cp","o":"$F7"},{"a":44877,"t":"code","b":[194,104,175],"m":"jp","oa":44904,"o":"nz,$AF68"},{"a":44880,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":44881,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":44882,"t":"code","b":[254,12],"m":"cp","o":"$0C"},{"a":44884,"t":"code","b":[202,103,175],"m":"jp","oa":44903,"o":"z,$AF67"},{"a":44887,"t":"code","b":[229],"m":"push","o":"hl"},{"a":44888,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":44889,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":44890,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":44891,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":44892,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":44893,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":44894,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":44895,"t":"code","b":[237,83,100,175],"m":"ld","oa":44900,"o":"($AF64),de"},{"a":44899,"l":"record_handler_call","c":"The CALL whose operand is rewritten at $AF5F with the address taken from a handler record; in the tape image it reads CALL $BD6F. The handler is entered with HL = the address of its own record, DE = its own address and BC = 7, and with the cell's offset from the worm's cell still in ($8049) and ($804A). After it returns, HL is restored and stepped forward to the record the walk had reached, and that address is stored at +$0A of the next free list record, ($8047), before control falls into $AF73. The same closing steps are reached from $AF4D and $AF54 when there is no handler to call.","t":"code","b":[205,111,189],"m":"call","oa":48495,"o":"raise_item_handler"},{"a":44902,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":44903,"t":"code","b":[35],"m":"inc","o":"hl","x":[44884]},{"a":44904,"t":"code","b":[35],"m":"inc","o":"hl","x":[44877]},{"a":44905,"t":"code","b":[221,42,71,128],"m":"ld","oa":32839,"o":"ix,(display_list_free)"},{"a":44909,"t":"code","b":[221,117,10],"m":"ld","o":"(ix+$0A),l"},{"a":44912,"t":"code","b":[221,116,11],"m":"ld","o":"(ix+$0B),h"},{"a":44915,"l":"add_record_to_list","c":"Fills the free list record at IX from a seven-byte record at HL and inserts it if it can be in view. The seven bytes are top height, bottom height, x, width, y, depth and type, and ($8049) and ($804A) give the cell the record belongs to as an offset from the worm's cell. Top and bottom are copied to +$0C and +$0D, and a bottom of $FF ends the routine there, which is how a record is switched off: $A5B3 stores $FF in the bottom byte of a type $F7 record that the collision code has found. The left edge is cell offset x 256 + x - ($7FF5), stored at +2, and the right edge adds the width, stored at +6; the upper and lower edges are made the same way from y, ($7FF7) and the depth, stored at +4 and +8. These are 16-bit positions relative to the worm, which sits at the centre of the 256 by 128 picture, and the routine returns early, leaving the record out of the list, as soon as it finds the left edge at 128 or more, the right edge below -128, the upper edge at 64 or more, or the lower edge below -64. A record of type $F7 is listed only when its depth is $0C; the others are handler records. A record that passes gets its type at +$0E, the count in ($8068) goes up by one, $B008 inserts the record, and ($8047) moves on by 15 bytes. Entered by falling in from $AF63 for board records, and called from $AEAD for objects with HL = $AECE.","t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[44717]},{"a":44916,"t":"code","b":[221,119,12],"m":"ld","o":"(ix+$0C),a"},{"a":44919,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":44920,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":44921,"t":"code","b":[221,119,13],"m":"ld","o":"(ix+$0D),a"},{"a":44924,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":44925,"t":"code","b":[60],"m":"inc","o":"a"},{"a":44926,"t":"code","b":[200],"m":"ret","o":"z"},{"a":44927,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":44928,"t":"code","b":[58,73,128],"m":"ld","oa":32841,"o":"a,(cell_offset_x)"},{"a":44931,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":44932,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":44933,"t":"code","b":[58,245,127],"m":"ld","oa":32757,"o":"a,($7FF5)"},{"a":44936,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":44937,"t":"code","b":[175],"m":"xor","o":"a"},{"a":44938,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":44939,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":44941,"t":"code","b":[221,117,2],"m":"ld","o":"(ix+$02),l"},{"a":44944,"t":"code","b":[221,116,3],"m":"ld","o":"(ix+$03),h"},{"a":44947,"t":"code","b":[203,124],"m":"bit","o":"7,h"},{"a":44949,"t":"code","b":[32,7],"m":"jr","oa":44958,"o":"nz,$AF9E"},{"a":44951,"t":"code","b":[203,37],"m":"sla","o":"l"},{"a":44953,"t":"code","b":[203,20],"m":"rl","o":"h"},{"a":44955,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":44956,"t":"code","b":[203,61],"m":"srl","o":"l"},{"a":44958,"t":"code","b":[19],"m":"inc","o":"de","x":[44949]},{"a":44959,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":44960,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":44961,"t":"code","b":[6,0],"m":"ld","o":"b,$00"},{"a":44963,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":44964,"t":"code","b":[221,117,6],"m":"ld","o":"(ix+$06),l"},{"a":44967,"t":"code","b":[221,116,7],"m":"ld","o":"(ix+$07),h"},{"a":44970,"t":"code","b":[203,124],"m":"bit","o":"7,h"},{"a":44972,"t":"code","b":[40,3],"m":"jr","oa":44977,"o":"z,$AFB1"},{"a":44974,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":44975,"t":"code","b":[36],"m":"inc","o":"h"},{"a":44976,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":44977,"t":"code","b":[19],"m":"inc","o":"de","x":[44972]},{"a":44978,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":44979,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":44980,"t":"code","b":[58,74,128],"m":"ld","oa":32842,"o":"a,(cell_offset_y)"},{"a":44983,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":44984,"t":"code","b":[58,247,127],"m":"ld","oa":32759,"o":"a,($7FF7)"},{"a":44987,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":44988,"t":"code","b":[175],"m":"xor","o":"a"},{"a":44989,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":44990,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":44992,"t":"code","b":[221,117,4],"m":"ld","o":"(ix+$04),l"},{"a":44995,"t":"code","b":[221,116,5],"m":"ld","o":"(ix+$05),h"},{"a":44998,"t":"code","b":[203,124],"m":"bit","o":"7,h"},{"a":45000,"t":"code","b":[32,10],"m":"jr","oa":45012,"o":"nz,$AFD4"},{"a":45002,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":45003,"t":"code","b":[203,37],"m":"sla","o":"l"},{"a":45005,"t":"code","b":[203,20],"m":"rl","o":"h"},{"a":45007,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":45008,"t":"code","b":[203,61],"m":"srl","o":"l"},{"a":45010,"t":"code","b":[203,61],"m":"srl","o":"l"},{"a":45012,"t":"code","b":[19],"m":"inc","o":"de","x":[45000]},{"a":45013,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":45014,"t":"code","b":[19],"m":"inc","o":"de"},{"a":45015,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":45016,"t":"code","b":[6,0],"m":"ld","o":"b,$00"},{"a":45018,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":45019,"t":"code","b":[221,117,8],"m":"ld","o":"(ix+$08),l"},{"a":45022,"t":"code","b":[221,116,9],"m":"ld","o":"(ix+$09),h"},{"a":45025,"t":"code","b":[203,124],"m":"bit","o":"7,h"},{"a":45027,"t":"code","b":[40,4],"m":"jr","oa":45033,"o":"z,$AFE9"},{"a":45029,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":45030,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":45031,"t":"code","b":[36],"m":"inc","o":"h"},{"a":45032,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":45033,"t":"code","b":[254,12],"m":"cp","o":"$0C","x":[45027]},{"a":45035,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":45036,"t":"code","b":[40,3],"m":"jr","oa":45041,"o":"z,$AFF1"},{"a":45038,"t":"code","b":[254,247],"m":"cp","o":"$F7"},{"a":45040,"t":"code","b":[200],"m":"ret","o":"z"},{"a":45041,"t":"code","b":[221,119,14],"m":"ld","o":"(ix+$0E),a","x":[45036]},{"a":45044,"t":"code","b":[58,104,128],"m":"ld","oa":32872,"o":"a,(entries_added)"},{"a":45047,"t":"code","b":[60],"m":"inc","o":"a"},{"a":45048,"t":"code","b":[50,104,128],"m":"ld","oa":32872,"o":"(entries_added),a"},{"a":45051,"t":"code","b":[205,8,176],"m":"call","oa":45064,"o":"list_insert_ordered"},{"a":45054,"t":"code","b":[1,15,0],"m":"ld","o":"bc,$000F"},{"a":45057,"t":"code","b":[221,9],"m":"add","o":"ix,bc"},{"a":45059,"t":"code","b":[221,34,71,128],"m":"ld","oa":32839,"o":"(display_list_free),ix"},{"a":45063,"t":"code","b":[201],"m":"ret"},{"a":45064,"l":"list_insert_ordered","c":"Inserts the record at IX into the display list. It walks the list from the head pointer at $EB7E, keeping in ($804D) the record after which the new one will go, which at first is the head itself. Records of type $FA, the worm's segments, are passed over. Every other record is compared with the new one by $B045: a zero result moves on and changes nothing, carry makes that record the insertion point and moves on, and neither flag ends the walk, as does a link whose high byte is 0. The new record is then linked in after the insertion point: that record's link is copied into the new record's first two bytes and replaced by the new record's address. A record therefore goes straight after the last record it has to be drawn after, among those met before the first one it has to be drawn before, and at the front if there is none. The list is in drawing order, first drawn first. The high byte of ($804D), at $804E, is also read by the object walk at $AEB2 to learn whether $AF73 got as far as this routine. Five call sites: $AFFB for board records and objects, and $AEE0, $AEE7, $AEEE and $AEF5 for the worm.","t":"code","b":[253,33,126,235],"m":"ld","o":"iy,$EB7E","x":[44768,44775,44782,44789,45051]},{"a":45068,"t":"code","b":[253,34,77,128],"m":"ld","oa":32845,"o":"(insert_after),iy","x":[45097]},{"a":45072,"t":"code","b":[253,110,0],"m":"ld","o":"l,(iy+$00)","x":[45090,45095]},{"a":45075,"t":"code","b":[253,102,1],"m":"ld","o":"h,(iy+$01)"},{"a":45078,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":45079,"t":"code","b":[167],"m":"and","o":"a"},{"a":45080,"t":"code","b":[40,17],"m":"jr","oa":45099,"o":"z,$B02B"},{"a":45082,"t":"code","b":[229],"m":"push","o":"hl"},{"a":45083,"t":"code","b":[253,225],"m":"pop","o":"iy"},{"a":45085,"t":"code","b":[253,126,14],"m":"ld","o":"a,(iy+$0E)"},{"a":45088,"t":"code","b":[254,250],"m":"cp","o":"$FA"},{"a":45090,"t":"code","b":[40,236],"m":"jr","oa":45072,"o":"z,$B010"},{"a":45092,"t":"code","b":[205,69,176],"m":"call","oa":45125,"o":"compare_records"},{"a":45095,"t":"code","b":[40,231],"m":"jr","oa":45072,"o":"z,$B010"},{"a":45097,"t":"code","b":[56,225],"m":"jr","oa":45068,"o":"c,$B00C"},{"a":45099,"t":"code","b":[253,42,77,128],"m":"ld","oa":32845,"o":"iy,(insert_after)","x":[45080]},{"a":45103,"t":"code","b":[253,110,0],"m":"ld","o":"l,(iy+$00)"},{"a":45106,"t":"code","b":[253,102,1],"m":"ld","o":"h,(iy+$01)"},{"a":45109,"t":"code","b":[221,117,0],"m":"ld","o":"(ix+$00),l"},{"a":45112,"t":"code","b":[221,116,1],"m":"ld","o":"(ix+$01),h"},{"a":45115,"t":"code","b":[221,229],"m":"push","o":"ix"},{"a":45117,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":45118,"t":"code","b":[253,117,0],"m":"ld","o":"(iy+$00),l"},{"a":45121,"t":"code","b":[253,116,1],"m":"ld","o":"(iy+$01),h"},{"a":45124,"t":"code","b":[201],"m":"ret"},{"a":45125,"l":"compare_records","c":"Decides the drawing order of two records, IX the one being inserted and IY one already in the list. It returns Z when there is no order between them, carry without Z when IX has to be drawn after IY, and neither flag when IX has to be drawn before IY. The height ranges are looked at first: if IY's top height (+$0C) is below IX's bottom height (+$0D), or IX's top is below IY's bottom, the two are apart in height. Records whose heights overlap or touch go straight to $B0A5 and its answer is returned as it stands. Records apart in height whose outlines overlap on both axes are settled by height at $B2C8. Records apart in height whose outlines do not overlap are also put to $B0A5, as a call, but only an answer of after is kept: an answer of before is turned into no order by the XOR A at $B0A3. The outline tests are signed 16-bit subtractions of the edges at +2, +4, +6 and +8. Called from $B024 only.","t":"code","b":[253,126,12],"m":"ld","o":"a,(iy+$0C)","x":[45092]},{"a":45128,"t":"code","b":[221,190,13],"m":"cp","o":"(ix+$0D)"},{"a":45131,"t":"code","b":[56,9],"m":"jr","oa":45142,"o":"c,$B056"},{"a":45133,"t":"code","b":[221,126,12],"m":"ld","o":"a,(ix+$0C)"},{"a":45136,"t":"code","b":[253,190,13],"m":"cp","o":"(iy+$0D)"},{"a":45139,"t":"code","b":[210,165,176],"m":"jp","oa":45221,"o":"nc,compare_positions"},{"a":45142,"t":"code","b":[253,110,2],"m":"ld","o":"l,(iy+$02)","x":[45131]},{"a":45145,"t":"code","b":[253,102,3],"m":"ld","o":"h,(iy+$03)"},{"a":45148,"t":"code","b":[221,94,6],"m":"ld","o":"e,(ix+$06)"},{"a":45151,"t":"code","b":[221,86,7],"m":"ld","o":"d,(ix+$07)"},{"a":45154,"t":"code","b":[167],"m":"and","o":"a"},{"a":45155,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45157,"t":"code","b":[242,158,176],"m":"jp","oa":45214,"o":"p,$B09E"},{"a":45160,"t":"code","b":[221,110,2],"m":"ld","o":"l,(ix+$02)"},{"a":45163,"t":"code","b":[221,102,3],"m":"ld","o":"h,(ix+$03)"},{"a":45166,"t":"code","b":[253,94,6],"m":"ld","o":"e,(iy+$06)"},{"a":45169,"t":"code","b":[253,86,7],"m":"ld","o":"d,(iy+$07)"},{"a":45172,"t":"code","b":[167],"m":"and","o":"a"},{"a":45173,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45175,"t":"code","b":[242,158,176],"m":"jp","oa":45214,"o":"p,$B09E"},{"a":45178,"t":"code","b":[253,110,4],"m":"ld","o":"l,(iy+$04)"},{"a":45181,"t":"code","b":[253,102,5],"m":"ld","o":"h,(iy+$05)"},{"a":45184,"t":"code","b":[221,94,8],"m":"ld","o":"e,(ix+$08)"},{"a":45187,"t":"code","b":[221,86,9],"m":"ld","o":"d,(ix+$09)"},{"a":45190,"t":"code","b":[167],"m":"and","o":"a"},{"a":45191,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45193,"t":"code","b":[242,158,176],"m":"jp","oa":45214,"o":"p,$B09E"},{"a":45196,"t":"code","b":[221,110,4],"m":"ld","o":"l,(ix+$04)"},{"a":45199,"t":"code","b":[221,102,5],"m":"ld","o":"h,(ix+$05)"},{"a":45202,"t":"code","b":[253,94,8],"m":"ld","o":"e,(iy+$08)"},{"a":45205,"t":"code","b":[253,86,9],"m":"ld","o":"d,(iy+$09)"},{"a":45208,"t":"code","b":[167],"m":"and","o":"a"},{"a":45209,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45211,"t":"code","b":[250,200,178],"m":"jp","oa":45768,"o":"m,compare_heights"},{"a":45214,"t":"code","b":[205,165,176],"m":"call","oa":45221,"o":"compare_positions","x":[45157,45175,45193]},{"a":45217,"t":"code","b":[200],"m":"ret","o":"z"},{"a":45218,"t":"code","b":[216],"m":"ret","o":"c"},{"a":45219,"t":"code","b":[175],"m":"xor","o":"a"},{"a":45220,"t":"code","b":[201],"m":"ret"},{"a":45221,"l":"compare_positions","c":"Orders two boxes by where they lie around the centre of the picture, which is the origin of the records' coordinates and the point the view looks straight down on. Perspective pushes the top of a box outward from that point, so of two boxes on the same side the one nearer the centre can hide part of the other and has to be drawn later. The routine first picks a side: if either record's right edge (+6) is negative, both left edges (+2) must be negative or the answer is no order, and otherwise the pair is treated as right of centre. Then, if both upper edges (+4) are negative the pair is treated as above centre; otherwise both lower edges (+8) must be zero or more or the answer is no order, and the pair is treated as below centre. Within the quadrant, if the two x ranges do not overlap, the box nearer the centre in x is drawn later, unless the other box lies wholly nearer the centre in y, when there is no order. If the x ranges overlap and the y ranges do not, the box nearer the centre in y is drawn later. If both overlap, the heights decide at $B2C8. Flags are returned as in $B045. One return differs from its three counterparts: at $B243, for the upper left quadrant, the INC A that forces NZ is missing, so when the x ranges overlap and the listed record's upper edge equals the new record's lower edge the answer is no order instead of before. Reached from $B053 by a jump and from $B09E by a call.","t":"code","b":[221,203,7,126],"m":"bit","o":"7,(ix+$07)","x":[45139,45214]},{"a":45225,"t":"code","b":[194,185,177],"m":"jp","oa":45497,"o":"nz,$B1B9"},{"a":45228,"t":"code","b":[253,203,7,126],"m":"bit","o":"7,(iy+$07)"},{"a":45232,"t":"code","b":[194,185,177],"m":"jp","oa":45497,"o":"nz,$B1B9"},{"a":45235,"t":"code","b":[221,203,5,126],"m":"bit","o":"7,(ix+$05)"},{"a":45239,"t":"code","b":[202,55,177],"m":"jp","oa":45367,"o":"z,$B137"},{"a":45242,"t":"code","b":[253,203,5,126],"m":"bit","o":"7,(iy+$05)"},{"a":45246,"t":"code","b":[202,55,177],"m":"jp","oa":45367,"o":"z,$B137"},{"a":45249,"t":"code","b":[253,110,2],"m":"ld","o":"l,(iy+$02)"},{"a":45252,"t":"code","b":[253,102,3],"m":"ld","o":"h,(iy+$03)"},{"a":45255,"t":"code","b":[221,94,6],"m":"ld","o":"e,(ix+$06)"},{"a":45258,"t":"code","b":[221,86,7],"m":"ld","o":"d,(ix+$07)"},{"a":45261,"t":"code","b":[167],"m":"and","o":"a"},{"a":45262,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45264,"t":"code","b":[250,230,176],"m":"jp","oa":45286,"o":"m,$B0E6"},{"a":45267,"t":"code","b":[253,110,4],"m":"ld","o":"l,(iy+$04)"},{"a":45270,"t":"code","b":[253,102,5],"m":"ld","o":"h,(iy+$05)"},{"a":45273,"t":"code","b":[221,94,8],"m":"ld","o":"e,(ix+$08)"},{"a":45276,"t":"code","b":[221,86,9],"m":"ld","o":"d,(ix+$09)"},{"a":45279,"t":"code","b":[167],"m":"and","o":"a"},{"a":45280,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45282,"t":"code","b":[55],"m":"scf"},{"a":45283,"t":"code","b":[248],"m":"ret","o":"m"},{"a":45284,"t":"code","b":[175],"m":"xor","o":"a"},{"a":45285,"t":"code","b":[201],"m":"ret"},{"a":45286,"t":"code","b":[221,110,2],"m":"ld","o":"l,(ix+$02)","x":[45264]},{"a":45289,"t":"code","b":[221,102,3],"m":"ld","o":"h,(ix+$03)"},{"a":45292,"t":"code","b":[253,94,6],"m":"ld","o":"e,(iy+$06)"},{"a":45295,"t":"code","b":[253,86,7],"m":"ld","o":"d,(iy+$07)"},{"a":45298,"t":"code","b":[167],"m":"and","o":"a"},{"a":45299,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45301,"t":"code","b":[250,12,177],"m":"jp","oa":45324,"o":"m,$B10C"},{"a":45304,"t":"code","b":[221,110,4],"m":"ld","o":"l,(ix+$04)"},{"a":45307,"t":"code","b":[221,102,5],"m":"ld","o":"h,(ix+$05)"},{"a":45310,"t":"code","b":[253,94,8],"m":"ld","o":"e,(iy+$08)"},{"a":45313,"t":"code","b":[253,86,9],"m":"ld","o":"d,(iy+$09)"},{"a":45316,"t":"code","b":[167],"m":"and","o":"a"},{"a":45317,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45319,"t":"code","b":[55],"m":"scf"},{"a":45320,"t":"code","b":[63],"m":"ccf"},{"a":45321,"t":"code","b":[248],"m":"ret","o":"m"},{"a":45322,"t":"code","b":[175],"m":"xor","o":"a","x":[45371,45377]},{"a":45323,"t":"code","b":[201],"m":"ret"},{"a":45324,"t":"code","b":[221,110,4],"m":"ld","o":"l,(ix+$04)","x":[45301]},{"a":45327,"t":"code","b":[221,102,5],"m":"ld","o":"h,(ix+$05)"},{"a":45330,"t":"code","b":[253,94,8],"m":"ld","o":"e,(iy+$08)"},{"a":45333,"t":"code","b":[253,86,9],"m":"ld","o":"d,(iy+$09)"},{"a":45336,"t":"code","b":[175],"m":"xor","o":"a"},{"a":45337,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45339,"t":"code","b":[250,33,177],"m":"jp","oa":45345,"o":"m,$B121"},{"a":45342,"t":"code","b":[55],"m":"scf"},{"a":45343,"t":"code","b":[60],"m":"inc","o":"a"},{"a":45344,"t":"code","b":[201],"m":"ret"},{"a":45345,"t":"code","b":[253,110,4],"m":"ld","o":"l,(iy+$04)","x":[45339]},{"a":45348,"t":"code","b":[253,102,5],"m":"ld","o":"h,(iy+$05)"},{"a":45351,"t":"code","b":[221,94,8],"m":"ld","o":"e,(ix+$08)"},{"a":45354,"t":"code","b":[221,86,9],"m":"ld","o":"d,(ix+$09)"},{"a":45357,"t":"code","b":[175],"m":"xor","o":"a"},{"a":45358,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45360,"t":"code","b":[250,200,178],"m":"jp","oa":45768,"o":"m,compare_heights"},{"a":45363,"t":"code","b":[55],"m":"scf"},{"a":45364,"t":"code","b":[63],"m":"ccf"},{"a":45365,"t":"code","b":[60],"m":"inc","o":"a"},{"a":45366,"t":"code","b":[201],"m":"ret"},{"a":45367,"t":"code","b":[221,203,9,126],"m":"bit","o":"7,(ix+$09)","x":[45239,45246]},{"a":45371,"t":"code","b":[32,205],"m":"jr","oa":45322,"o":"nz,$B10A"},{"a":45373,"t":"code","b":[253,203,9,126],"m":"bit","o":"7,(iy+$09)"},{"a":45377,"t":"code","b":[32,199],"m":"jr","oa":45322,"o":"nz,$B10A"},{"a":45379,"t":"code","b":[253,110,2],"m":"ld","o":"l,(iy+$02)"},{"a":45382,"t":"code","b":[253,102,3],"m":"ld","o":"h,(iy+$03)"},{"a":45385,"t":"code","b":[221,94,6],"m":"ld","o":"e,(ix+$06)"},{"a":45388,"t":"code","b":[221,86,7],"m":"ld","o":"d,(ix+$07)"},{"a":45391,"t":"code","b":[167],"m":"and","o":"a"},{"a":45392,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45394,"t":"code","b":[250,104,177],"m":"jp","oa":45416,"o":"m,$B168"},{"a":45397,"t":"code","b":[221,110,4],"m":"ld","o":"l,(ix+$04)"},{"a":45400,"t":"code","b":[221,102,5],"m":"ld","o":"h,(ix+$05)"},{"a":45403,"t":"code","b":[253,94,8],"m":"ld","o":"e,(iy+$08)"},{"a":45406,"t":"code","b":[253,86,9],"m":"ld","o":"d,(iy+$09)"},{"a":45409,"t":"code","b":[167],"m":"and","o":"a"},{"a":45410,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45412,"t":"code","b":[55],"m":"scf"},{"a":45413,"t":"code","b":[248],"m":"ret","o":"m"},{"a":45414,"t":"code","b":[175],"m":"xor","o":"a"},{"a":45415,"t":"code","b":[201],"m":"ret"},{"a":45416,"t":"code","b":[221,110,2],"m":"ld","o":"l,(ix+$02)","x":[45394]},{"a":45419,"t":"code","b":[221,102,3],"m":"ld","o":"h,(ix+$03)"},{"a":45422,"t":"code","b":[253,94,6],"m":"ld","o":"e,(iy+$06)"},{"a":45425,"t":"code","b":[253,86,7],"m":"ld","o":"d,(iy+$07)"},{"a":45428,"t":"code","b":[167],"m":"and","o":"a"},{"a":45429,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45431,"t":"code","b":[250,142,177],"m":"jp","oa":45454,"o":"m,$B18E"},{"a":45434,"t":"code","b":[253,110,4],"m":"ld","o":"l,(iy+$04)"},{"a":45437,"t":"code","b":[253,102,5],"m":"ld","o":"h,(iy+$05)"},{"a":45440,"t":"code","b":[221,94,8],"m":"ld","o":"e,(ix+$08)"},{"a":45443,"t":"code","b":[221,86,9],"m":"ld","o":"d,(ix+$09)"},{"a":45446,"t":"code","b":[167],"m":"and","o":"a"},{"a":45447,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45449,"t":"code","b":[55],"m":"scf"},{"a":45450,"t":"code","b":[63],"m":"ccf"},{"a":45451,"t":"code","b":[248],"m":"ret","o":"m"},{"a":45452,"t":"code","b":[175],"m":"xor","o":"a"},{"a":45453,"t":"code","b":[201],"m":"ret"},{"a":45454,"t":"code","b":[253,110,4],"m":"ld","o":"l,(iy+$04)","x":[45431]},{"a":45457,"t":"code","b":[253,102,5],"m":"ld","o":"h,(iy+$05)"},{"a":45460,"t":"code","b":[221,94,8],"m":"ld","o":"e,(ix+$08)"},{"a":45463,"t":"code","b":[221,86,9],"m":"ld","o":"d,(ix+$09)"},{"a":45466,"t":"code","b":[175],"m":"xor","o":"a"},{"a":45467,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45469,"t":"code","b":[250,163,177],"m":"jp","oa":45475,"o":"m,$B1A3"},{"a":45472,"t":"code","b":[55],"m":"scf"},{"a":45473,"t":"code","b":[60],"m":"inc","o":"a"},{"a":45474,"t":"code","b":[201],"m":"ret"},{"a":45475,"t":"code","b":[221,110,4],"m":"ld","o":"l,(ix+$04)","x":[45469]},{"a":45478,"t":"code","b":[221,102,5],"m":"ld","o":"h,(ix+$05)"},{"a":45481,"t":"code","b":[253,94,8],"m":"ld","o":"e,(iy+$08)"},{"a":45484,"t":"code","b":[253,86,9],"m":"ld","o":"d,(iy+$09)"},{"a":45487,"t":"code","b":[175],"m":"xor","o":"a"},{"a":45488,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45490,"t":"code","b":[250,200,178],"m":"jp","oa":45768,"o":"m,compare_heights"},{"a":45493,"t":"code","b":[55],"m":"scf"},{"a":45494,"t":"code","b":[63],"m":"ccf"},{"a":45495,"t":"code","b":[60],"m":"inc","o":"a"},{"a":45496,"t":"code","b":[201],"m":"ret"},{"a":45497,"t":"code","b":[221,203,3,126],"m":"bit","o":"7,(ix+$03)","x":[45225,45232]},{"a":45501,"t":"code","b":[200],"m":"ret","o":"z"},{"a":45502,"t":"code","b":[253,203,3,126],"m":"bit","o":"7,(iy+$03)"},{"a":45506,"t":"code","b":[200],"m":"ret","o":"z"},{"a":45507,"t":"code","b":[221,203,5,126],"m":"bit","o":"7,(ix+$05)"},{"a":45511,"t":"code","b":[202,70,178],"m":"jp","oa":45638,"o":"z,$B246"},{"a":45514,"t":"code","b":[253,203,5,126],"m":"bit","o":"7,(iy+$05)"},{"a":45518,"t":"code","b":[202,70,178],"m":"jp","oa":45638,"o":"z,$B246"},{"a":45521,"t":"code","b":[221,110,2],"m":"ld","o":"l,(ix+$02)"},{"a":45524,"t":"code","b":[221,102,3],"m":"ld","o":"h,(ix+$03)"},{"a":45527,"t":"code","b":[253,94,6],"m":"ld","o":"e,(iy+$06)"},{"a":45530,"t":"code","b":[253,86,7],"m":"ld","o":"d,(iy+$07)"},{"a":45533,"t":"code","b":[167],"m":"and","o":"a"},{"a":45534,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45536,"t":"code","b":[250,246,177],"m":"jp","oa":45558,"o":"m,$B1F6"},{"a":45539,"t":"code","b":[253,110,4],"m":"ld","o":"l,(iy+$04)"},{"a":45542,"t":"code","b":[253,102,5],"m":"ld","o":"h,(iy+$05)"},{"a":45545,"t":"code","b":[221,94,8],"m":"ld","o":"e,(ix+$08)"},{"a":45548,"t":"code","b":[221,86,9],"m":"ld","o":"d,(ix+$09)"},{"a":45551,"t":"code","b":[167],"m":"and","o":"a"},{"a":45552,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45554,"t":"code","b":[55],"m":"scf"},{"a":45555,"t":"code","b":[248],"m":"ret","o":"m"},{"a":45556,"t":"code","b":[175],"m":"xor","o":"a"},{"a":45557,"t":"code","b":[201],"m":"ret"},{"a":45558,"t":"code","b":[253,110,2],"m":"ld","o":"l,(iy+$02)","x":[45536]},{"a":45561,"t":"code","b":[253,102,3],"m":"ld","o":"h,(iy+$03)"},{"a":45564,"t":"code","b":[221,94,6],"m":"ld","o":"e,(ix+$06)"},{"a":45567,"t":"code","b":[221,86,7],"m":"ld","o":"d,(ix+$07)"},{"a":45570,"t":"code","b":[167],"m":"and","o":"a"},{"a":45571,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45573,"t":"code","b":[250,28,178],"m":"jp","oa":45596,"o":"m,$B21C"},{"a":45576,"t":"code","b":[221,110,4],"m":"ld","o":"l,(ix+$04)"},{"a":45579,"t":"code","b":[221,102,5],"m":"ld","o":"h,(ix+$05)"},{"a":45582,"t":"code","b":[253,94,8],"m":"ld","o":"e,(iy+$08)"},{"a":45585,"t":"code","b":[253,86,9],"m":"ld","o":"d,(iy+$09)"},{"a":45588,"t":"code","b":[167],"m":"and","o":"a"},{"a":45589,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45591,"t":"code","b":[55],"m":"scf"},{"a":45592,"t":"code","b":[63],"m":"ccf"},{"a":45593,"t":"code","b":[248],"m":"ret","o":"m"},{"a":45594,"t":"code","b":[175],"m":"xor","o":"a","x":[45642,45648]},{"a":45595,"t":"code","b":[201],"m":"ret"},{"a":45596,"t":"code","b":[221,110,4],"m":"ld","o":"l,(ix+$04)","x":[45573]},{"a":45599,"t":"code","b":[221,102,5],"m":"ld","o":"h,(ix+$05)"},{"a":45602,"t":"code","b":[253,94,8],"m":"ld","o":"e,(iy+$08)"},{"a":45605,"t":"code","b":[253,86,9],"m":"ld","o":"d,(iy+$09)"},{"a":45608,"t":"code","b":[175],"m":"xor","o":"a"},{"a":45609,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45611,"t":"code","b":[250,49,178],"m":"jp","oa":45617,"o":"m,$B231"},{"a":45614,"t":"code","b":[55],"m":"scf"},{"a":45615,"t":"code","b":[60],"m":"inc","o":"a"},{"a":45616,"t":"code","b":[201],"m":"ret"},{"a":45617,"t":"code","b":[253,110,4],"m":"ld","o":"l,(iy+$04)","x":[45611]},{"a":45620,"t":"code","b":[253,102,5],"m":"ld","o":"h,(iy+$05)"},{"a":45623,"t":"code","b":[221,94,8],"m":"ld","o":"e,(ix+$08)"},{"a":45626,"t":"code","b":[221,86,9],"m":"ld","o":"d,(ix+$09)"},{"a":45629,"t":"code","b":[175],"m":"xor","o":"a"},{"a":45630,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45632,"t":"code","b":[250,200,178],"m":"jp","oa":45768,"o":"m,compare_heights"},{"a":45635,"t":"code","b":[55],"m":"scf"},{"a":45636,"t":"code","b":[63],"m":"ccf"},{"a":45637,"t":"code","b":[201],"m":"ret"},{"a":45638,"t":"code","b":[221,203,9,126],"m":"bit","o":"7,(ix+$09)","x":[45511,45518]},{"a":45642,"t":"code","b":[32,206],"m":"jr","oa":45594,"o":"nz,$B21A"},{"a":45644,"t":"code","b":[253,203,9,126],"m":"bit","o":"7,(iy+$09)"},{"a":45648,"t":"code","b":[32,200],"m":"jr","oa":45594,"o":"nz,$B21A"},{"a":45650,"t":"code","b":[221,110,2],"m":"ld","o":"l,(ix+$02)"},{"a":45653,"t":"code","b":[221,102,3],"m":"ld","o":"h,(ix+$03)"},{"a":45656,"t":"code","b":[253,94,6],"m":"ld","o":"e,(iy+$06)"},{"a":45659,"t":"code","b":[253,86,7],"m":"ld","o":"d,(iy+$07)"},{"a":45662,"t":"code","b":[167],"m":"and","o":"a"},{"a":45663,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45665,"t":"code","b":[250,119,178],"m":"jp","oa":45687,"o":"m,$B277"},{"a":45668,"t":"code","b":[221,110,4],"m":"ld","o":"l,(ix+$04)"},{"a":45671,"t":"code","b":[221,102,5],"m":"ld","o":"h,(ix+$05)"},{"a":45674,"t":"code","b":[253,94,8],"m":"ld","o":"e,(iy+$08)"},{"a":45677,"t":"code","b":[253,86,9],"m":"ld","o":"d,(iy+$09)"},{"a":45680,"t":"code","b":[167],"m":"and","o":"a"},{"a":45681,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45683,"t":"code","b":[55],"m":"scf"},{"a":45684,"t":"code","b":[248],"m":"ret","o":"m"},{"a":45685,"t":"code","b":[175],"m":"xor","o":"a"},{"a":45686,"t":"code","b":[201],"m":"ret"},{"a":45687,"t":"code","b":[253,110,2],"m":"ld","o":"l,(iy+$02)","x":[45665]},{"a":45690,"t":"code","b":[253,102,3],"m":"ld","o":"h,(iy+$03)"},{"a":45693,"t":"code","b":[221,94,6],"m":"ld","o":"e,(ix+$06)"},{"a":45696,"t":"code","b":[221,86,7],"m":"ld","o":"d,(ix+$07)"},{"a":45699,"t":"code","b":[167],"m":"and","o":"a"},{"a":45700,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45702,"t":"code","b":[250,157,178],"m":"jp","oa":45725,"o":"m,$B29D"},{"a":45705,"t":"code","b":[253,110,4],"m":"ld","o":"l,(iy+$04)"},{"a":45708,"t":"code","b":[253,102,5],"m":"ld","o":"h,(iy+$05)"},{"a":45711,"t":"code","b":[221,94,8],"m":"ld","o":"e,(ix+$08)"},{"a":45714,"t":"code","b":[221,86,9],"m":"ld","o":"d,(ix+$09)"},{"a":45717,"t":"code","b":[167],"m":"and","o":"a"},{"a":45718,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45720,"t":"code","b":[55],"m":"scf"},{"a":45721,"t":"code","b":[63],"m":"ccf"},{"a":45722,"t":"code","b":[248],"m":"ret","o":"m"},{"a":45723,"t":"code","b":[175],"m":"xor","o":"a"},{"a":45724,"t":"code","b":[201],"m":"ret"},{"a":45725,"t":"code","b":[253,110,4],"m":"ld","o":"l,(iy+$04)","x":[45702]},{"a":45728,"t":"code","b":[253,102,5],"m":"ld","o":"h,(iy+$05)"},{"a":45731,"t":"code","b":[221,94,8],"m":"ld","o":"e,(ix+$08)"},{"a":45734,"t":"code","b":[221,86,9],"m":"ld","o":"d,(ix+$09)"},{"a":45737,"t":"code","b":[175],"m":"xor","o":"a"},{"a":45738,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45740,"t":"code","b":[250,178,178],"m":"jp","oa":45746,"o":"m,$B2B2"},{"a":45743,"t":"code","b":[55],"m":"scf"},{"a":45744,"t":"code","b":[60],"m":"inc","o":"a"},{"a":45745,"t":"code","b":[201],"m":"ret"},{"a":45746,"t":"code","b":[221,110,4],"m":"ld","o":"l,(ix+$04)","x":[45740]},{"a":45749,"t":"code","b":[221,102,5],"m":"ld","o":"h,(ix+$05)"},{"a":45752,"t":"code","b":[253,94,8],"m":"ld","o":"e,(iy+$08)"},{"a":45755,"t":"code","b":[253,86,9],"m":"ld","o":"d,(iy+$09)"},{"a":45758,"t":"code","b":[175],"m":"xor","o":"a"},{"a":45759,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45761,"t":"code","b":[250,200,178],"m":"jp","oa":45768,"o":"m,compare_heights"},{"a":45764,"t":"code","b":[55],"m":"scf"},{"a":45765,"t":"code","b":[63],"m":"ccf"},{"a":45766,"t":"code","b":[60],"m":"inc","o":"a"},{"a":45767,"t":"code","b":[201],"m":"ret"},{"a":45768,"l":"compare_heights","c":"Orders two records whose outlines overlap, by height, according to the type of the listed record IY. For a type whose top two bits are 00 or 11 the carry is set when IY's bottom height (+$0D) is below IX's bottom height, so the record with the higher base is drawn later. The other two classes, $40-$7F and $80-$BF, are the ones the surface finder at $9BFF and $9C66 treats as slopes, and for them bits 5 and 4 of the type choose: below $20, the carry is set when IY's bottom is below IX's top height (+$0C); from $20 up, when IX's bottom is not below IY's top. The closing DEC E leaves the carry alone and sets Z only when the listed record's type is $01, so that one type always answers no order; one board record, at $6D6F, has it. No record in the board data has a slope type with bits 5 and 4 at $20 or more, and only such a type leads to the five instructions at $B2DB. Reached by JP M from $B09B, $B130, $B1B2, $B240 and $B2C1.","t":"code","b":[253,94,14],"m":"ld","o":"e,(iy+$0E)","x":[45211,45360,45490,45632,45761]},{"a":45771,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":45772,"t":"code","b":[230,192],"m":"and","o":"$C0"},{"a":45774,"t":"code","b":[40,28],"m":"jr","oa":45804,"o":"z,$B2EC"},{"a":45776,"t":"code","b":[254,192],"m":"cp","o":"$C0"},{"a":45778,"t":"code","b":[40,24],"m":"jr","oa":45804,"o":"z,$B2EC"},{"a":45780,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":45781,"t":"code","b":[230,48],"m":"and","o":"$30"},{"a":45783,"t":"code","b":[254,32],"m":"cp","o":"$20"},{"a":45785,"t":"code","b":[56,9],"m":"jr","oa":45796,"o":"c,$B2E4"},{"a":45787,"t":"code","b":[221,126,13],"m":"ld","o":"a,(ix+$0D)"},{"a":45790,"t":"code","b":[253,190,12],"m":"cp","o":"(iy+$0C)"},{"a":45793,"t":"code","b":[63],"m":"ccf"},{"a":45794,"t":"code","b":[29],"m":"dec","o":"e"},{"a":45795,"t":"code","b":[201],"m":"ret"},{"a":45796,"t":"code","b":[253,126,13],"m":"ld","o":"a,(iy+$0D)","x":[45785]},{"a":45799,"t":"code","b":[221,190,12],"m":"cp","o":"(ix+$0C)"},{"a":45802,"t":"code","b":[29],"m":"dec","o":"e"},{"a":45803,"t":"code","b":[201],"m":"ret"},{"a":45804,"t":"code","b":[253,126,13],"m":"ld","o":"a,(iy+$0D)","x":[45774,45778]},{"a":45807,"t":"code","b":[221,190,13],"m":"cp","o":"(ix+$0D)"},{"a":45810,"t":"code","b":[29],"m":"dec","o":"e"},{"a":45811,"t":"code","b":[201],"m":"ret"},{"a":45812,"l":"draw_display_list","c":"Draws the frame from the display list. It follows the links from the head at $EB7E, keeping the address of the record in hand in ($804B), until it meets a link whose high byte is 0. For each record it copies the four edges into the drawing variables, left (+2) to ($802B), right (+6) to ($802D), upper (+4) to ($802F) and lower (+8) to ($8031), loads C with the top height (+$0C), B with the bottom height (+$0D) and A with the type (+$0E), and calls $81DB, which scales the box for each of the two heights and draws the shape the type selects. Records are drawn in list order, so later ones paint over earlier ones. Before the walk it stores $0040 in ($80C6) and $FFC0 in ($80C8); these two stores are the only instructions that refer to either word. Four call sites: $7668 in the frame loop, and $791D, $78E7 and $7907 in the end-of-game sequence (the frame step at $7914 and the loops at $78C9 and $78EF).","t":"code","b":[33,64,0],"m":"ld","o":"hl,$0040","x":[30312,30951,30983,31005]},{"a":45815,"t":"code","b":[34,198,128],"m":"ld","oa":32966,"o":"(unread_word_80c6),hl"},{"a":45818,"t":"code","b":[33,192,255],"m":"ld","o":"hl,$FFC0"},{"a":45821,"t":"code","b":[34,200,128],"m":"ld","oa":32968,"o":"(unread_word_80c8),hl"},{"a":45824,"t":"code","b":[33,126,235],"m":"ld","o":"hl,$EB7E"},{"a":45827,"t":"code","b":[34,75,128],"m":"ld","oa":32843,"o":"(draw_entry),hl"},{"a":45830,"t":"code","b":[221,42,75,128],"m":"ld","oa":32843,"o":"ix,(draw_entry)","x":[45901]},{"a":45834,"t":"code","b":[221,110,0],"m":"ld","o":"l,(ix+$00)"},{"a":45837,"t":"code","b":[221,102,1],"m":"ld","o":"h,(ix+$01)"},{"a":45840,"t":"code","b":[34,75,128],"m":"ld","oa":32843,"o":"(draw_entry),hl"},{"a":45843,"t":"code","b":[221,42,75,128],"m":"ld","oa":32843,"o":"ix,(draw_entry)"},{"a":45847,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":45848,"t":"code","b":[167],"m":"and","o":"a"},{"a":45849,"t":"code","b":[200],"m":"ret","o":"z"},{"a":45850,"t":"code","b":[221,110,2],"m":"ld","o":"l,(ix+$02)"},{"a":45853,"t":"code","b":[221,102,3],"m":"ld","o":"h,(ix+$03)"},{"a":45856,"t":"code","b":[34,43,128],"m":"ld","oa":32811,"o":"(extent_x1),hl"},{"a":45859,"t":"code","b":[221,110,6],"m":"ld","o":"l,(ix+$06)"},{"a":45862,"t":"code","b":[221,102,7],"m":"ld","o":"h,(ix+$07)"},{"a":45865,"t":"code","b":[34,45,128],"m":"ld","oa":32813,"o":"(extent_x2),hl"},{"a":45868,"t":"code","b":[221,110,4],"m":"ld","o":"l,(ix+$04)"},{"a":45871,"t":"code","b":[221,102,5],"m":"ld","o":"h,(ix+$05)"},{"a":45874,"t":"code","b":[34,47,128],"m":"ld","oa":32815,"o":"(extent_y1),hl"},{"a":45877,"t":"code","b":[221,110,8],"m":"ld","o":"l,(ix+$08)"},{"a":45880,"t":"code","b":[221,102,9],"m":"ld","o":"h,(ix+$09)"},{"a":45883,"t":"code","b":[34,49,128],"m":"ld","oa":32817,"o":"(extent_y2),hl"},{"a":45886,"t":"code","b":[221,78,12],"m":"ld","o":"c,(ix+$0C)"},{"a":45889,"t":"code","b":[221,70,13],"m":"ld","o":"b,(ix+$0D)"},{"a":45892,"t":"code","b":[221,126,14],"m":"ld","o":"a,(ix+$0E)"},{"a":45895,"t":"code","b":[205,219,129],"m":"call","oa":33243,"o":"draw_object"},{"a":45898,"t":"code","b":[42,75,128],"m":"ld","oa":32843,"o":"hl,(draw_entry)"},{"a":45901,"t":"code","b":[195,6,179],"m":"jp","oa":45830,"o":"$B306"},{"a":45904,"l":"floor_dot_generator","c":"One step of a multiply-and-add number generator: HL = HL x 1509 + 41, modulo 65536, built from shifts and adds. BC returns the old HL and DE returns $0029. The sequence visits all 65,536 values before it repeats. Its two call sites, $EB5A and $EB64, are both in the floor routine at $EB2B, which seeds it with a cell's address, takes 7 plus the low three bits of the first result as a count, and for each further result plots one dot at x = low byte, y = high byte inside the cell. A cell therefore shows the same 7 to 14 dots every frame, fixed to the board.","t":"code","b":[77],"m":"ld","o":"c,l","x":[60250,60260]},{"a":45905,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":45906,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":45907,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":45908,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":45909,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":45910,"t":"code","b":[93],"m":"ld","o":"e,l"},{"a":45911,"t":"code","b":[84],"m":"ld","o":"d,h"},{"a":45912,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":45913,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":45914,"t":"code","b":[167],"m":"and","o":"a"},{"a":45915,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":45917,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":45918,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":45919,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":45920,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":45921,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":45922,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":45923,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":45924,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":45925,"t":"code","b":[17,41,0],"m":"ld","o":"de,$0029"},{"a":45928,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":45929,"t":"code","b":[201],"m":"ret"},{"a":45930,"l":"draw_legged_creature","c":"Draws a record of type $F3, a creature with six legs. The type's handler at $840A jumps here, from $844B or $847F, after copying the object's fields. In: ($801B) and ($801F) = the box's left and right edges on screen, ($801D) = its upper edge, ($8023) = the creature's heading, ($8024), ($8025) and ($8026) = six leg positions, one per nibble, ($8021) = the object's width byte. It works out the width on screen w = right - left, puts the centre, left + w / 2 and upper + w / 2, in ($802B) and ($802D), and w x 1.5 in ($8030). If the width byte is 7 it jumps to the three-part form at $B4E0. Otherwise it draws six legs, each with $B491 then $B5AF, at heading + $68, $77 and $8B plus a low nibble and at heading + $18, $09 and $F5 minus a high nibble, with bit 7 of C set for the first three. It finishes with two round blobs through $B7B6: a head w / 2 across whose centre is w / 2 from the creature's centre along the heading, and a body three quarters of w across with its corner at left + w / 8, upper + w / 8. The first instructions store $14 in ($8056), the tone divider that $EAA9 reads while it clears the frame buffer. In the frame loop that byte is zeroed at $767F before $EAA9 runs again, and the frame step at $7914 sets it itself, so the value stored here reaches $EAA9 only in the loops at $78C9 and $78EF.","t":"code","b":[62,20],"m":"ld","o":"a,$14","x":[33867,33919]},{"a":45932,"t":"code","b":[50,86,128],"m":"ld","oa":32854,"o":"(clear_click_period),a"},{"a":45935,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":45938,"t":"code","b":[237,91,27,128],"m":"ld","oa":32795,"o":"de,(shape_x0)"},{"a":45942,"t":"code","b":[167],"m":"and","o":"a"},{"a":45943,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":45945,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":45946,"t":"code","b":[50,47,128],"m":"ld","oa":32815,"o":"(extent_y1),a"},{"a":45949,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":45952,"t":"code","b":[58,47,128],"m":"ld","oa":32815,"o":"a,(extent_y1)"},{"a":45955,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":45957,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":45958,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":45960,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":45961,"t":"code","b":[34,43,128],"m":"ld","oa":32811,"o":"(extent_x1),hl"},{"a":45964,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":45967,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":45968,"t":"code","b":[34,45,128],"m":"ld","oa":32813,"o":"(extent_x2),hl"},{"a":45971,"t":"code","b":[58,47,128],"m":"ld","oa":32815,"o":"a,(extent_y1)"},{"a":45974,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":45975,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":45977,"t":"code","b":[129],"m":"add","o":"a,c"},{"a":45978,"t":"code","b":[50,48,128],"m":"ld","oa":32816,"o":"(extent_y1_high),a"},{"a":45981,"t":"code","b":[58,33,128],"m":"ld","oa":32801,"o":"a,(shape_y1)"},{"a":45984,"t":"code","b":[254,7],"m":"cp","o":"$07"},{"a":45986,"t":"code","b":[202,224,180],"m":"jp","oa":46304,"o":"z,draw_small_creature"},{"a":45989,"t":"code","b":[58,36,128],"m":"ld","oa":32804,"o":"a,(shape_x2_high)"},{"a":45992,"t":"code","b":[230,15],"m":"and","o":"$0F"},{"a":45994,"t":"code","b":[198,104],"m":"add","o":"a,$68"},{"a":45996,"t":"code","b":[205,145,180],"m":"call","oa":46225,"o":"leg_end_point"},{"a":45999,"t":"code","b":[203,249],"m":"set","o":"7,c"},{"a":46001,"t":"code","b":[205,175,181],"m":"call","oa":46511,"o":"draw_leg_strip"},{"a":46004,"t":"code","b":[58,36,128],"m":"ld","oa":32804,"o":"a,(shape_x2_high)"},{"a":46007,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":46009,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":46011,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":46013,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":46015,"t":"code","b":[237,68],"m":"neg"},{"a":46017,"t":"code","b":[198,24],"m":"add","o":"a,$18"},{"a":46019,"t":"code","b":[205,145,180],"m":"call","oa":46225,"o":"leg_end_point"},{"a":46022,"t":"code","b":[205,175,181],"m":"call","oa":46511,"o":"draw_leg_strip"},{"a":46025,"t":"code","b":[58,37,128],"m":"ld","oa":32805,"o":"a,(shape_y2)"},{"a":46028,"t":"code","b":[230,15],"m":"and","o":"$0F"},{"a":46030,"t":"code","b":[198,119],"m":"add","o":"a,$77"},{"a":46032,"t":"code","b":[205,145,180],"m":"call","oa":46225,"o":"leg_end_point"},{"a":46035,"t":"code","b":[203,249],"m":"set","o":"7,c"},{"a":46037,"t":"code","b":[205,175,181],"m":"call","oa":46511,"o":"draw_leg_strip"},{"a":46040,"t":"code","b":[58,37,128],"m":"ld","oa":32805,"o":"a,(shape_y2)"},{"a":46043,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":46045,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":46047,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":46049,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":46051,"t":"code","b":[237,68],"m":"neg"},{"a":46053,"t":"code","b":[198,9],"m":"add","o":"a,$09"},{"a":46055,"t":"code","b":[205,145,180],"m":"call","oa":46225,"o":"leg_end_point"},{"a":46058,"t":"code","b":[205,175,181],"m":"call","oa":46511,"o":"draw_leg_strip"},{"a":46061,"t":"code","b":[58,38,128],"m":"ld","oa":32806,"o":"a,(shape_y2_high)"},{"a":46064,"t":"code","b":[230,15],"m":"and","o":"$0F"},{"a":46066,"t":"code","b":[198,139],"m":"add","o":"a,$8B"},{"a":46068,"t":"code","b":[205,145,180],"m":"call","oa":46225,"o":"leg_end_point"},{"a":46071,"t":"code","b":[203,249],"m":"set","o":"7,c"},{"a":46073,"t":"code","b":[205,175,181],"m":"call","oa":46511,"o":"draw_leg_strip"},{"a":46076,"t":"code","b":[58,38,128],"m":"ld","oa":32806,"o":"a,(shape_y2_high)"},{"a":46079,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":46081,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":46083,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":46085,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":46087,"t":"code","b":[237,68],"m":"neg"},{"a":46089,"t":"code","b":[198,245],"m":"add","o":"a,$F5"},{"a":46091,"t":"code","b":[205,145,180],"m":"call","oa":46225,"o":"leg_end_point"},{"a":46094,"t":"code","b":[205,175,181],"m":"call","oa":46511,"o":"draw_leg_strip"},{"a":46097,"t":"code","b":[58,35,128],"m":"ld","oa":32803,"o":"a,(shape_x2)"},{"a":46100,"t":"code","b":[198,64],"m":"add","o":"a,$40"},{"a":46102,"t":"code","b":[205,196,168],"m":"call","oa":43204,"o":"sine_lookup"},{"a":46105,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":46106,"t":"code","b":[58,47,128],"m":"ld","oa":32815,"o":"a,(extent_y1)"},{"a":46109,"t":"code","b":[205,216,168],"m":"call","oa":43224,"o":"multiply_e_by_a"},{"a":46112,"t":"code","b":[108],"m":"ld","o":"l,h"},{"a":46113,"t":"code","b":[203,61],"m":"srl","o":"l"},{"a":46115,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":46117,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46118,"t":"code","b":[48,7],"m":"jr","oa":46127,"o":"nc,$B42F"},{"a":46120,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":46123,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":46124,"t":"code","b":[167],"m":"and","o":"a"},{"a":46125,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":46127,"t":"code","b":[58,47,128],"m":"ld","oa":32815,"o":"a,(extent_y1)","x":[46118]},{"a":46130,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":46131,"t":"code","b":[203,59],"m":"srl","o":"e"},{"a":46133,"t":"code","b":[203,59],"m":"srl","o":"e"},{"a":46135,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":46137,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":46138,"t":"code","b":[237,91,27,128],"m":"ld","oa":32795,"o":"de,(shape_x0)"},{"a":46142,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":46143,"t":"code","b":[229],"m":"push","o":"hl"},{"a":46144,"t":"code","b":[58,35,128],"m":"ld","oa":32803,"o":"a,(shape_x2)"},{"a":46147,"t":"code","b":[205,196,168],"m":"call","oa":43204,"o":"sine_lookup"},{"a":46150,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":46151,"t":"code","b":[58,47,128],"m":"ld","oa":32815,"o":"a,(extent_y1)"},{"a":46154,"t":"code","b":[205,216,168],"m":"call","oa":43224,"o":"multiply_e_by_a"},{"a":46157,"t":"code","b":[108],"m":"ld","o":"l,h"},{"a":46158,"t":"code","b":[203,61],"m":"srl","o":"l"},{"a":46160,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":46162,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46163,"t":"code","b":[48,7],"m":"jr","oa":46172,"o":"nc,$B45C"},{"a":46165,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":46168,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":46169,"t":"code","b":[167],"m":"and","o":"a"},{"a":46170,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":46172,"t":"code","b":[58,47,128],"m":"ld","oa":32815,"o":"a,(extent_y1)","x":[46163]},{"a":46175,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":46176,"t":"code","b":[203,59],"m":"srl","o":"e"},{"a":46178,"t":"code","b":[203,59],"m":"srl","o":"e"},{"a":46180,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":46182,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":46183,"t":"code","b":[237,91,29,128],"m":"ld","oa":32797,"o":"de,(shape_y0)"},{"a":46187,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":46188,"t":"code","b":[209],"m":"pop","o":"de"},{"a":46189,"t":"code","b":[58,47,128],"m":"ld","oa":32815,"o":"a,(extent_y1)"},{"a":46192,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":46194,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":46195,"t":"code","b":[205,182,183],"m":"call","oa":47030,"o":"plot_disc"},{"a":46198,"t":"code","b":[58,47,128],"m":"ld","oa":32815,"o":"a,(extent_y1)"},{"a":46201,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":46202,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":46204,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":46206,"t":"code","b":[145],"m":"sub","o":"c"},{"a":46207,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":46209,"t":"code","b":[6,0],"m":"ld","o":"b,$00"},{"a":46211,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":46214,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":46215,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":46216,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":46219,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":46220,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":46221,"t":"code","b":[205,182,183],"m":"call","oa":47030,"o":"plot_disc"},{"a":46224,"t":"code","b":[201],"m":"ret"},{"a":46225,"l":"leg_end_point","c":"Finds where one leg ends. In: A = the leg's angle relative to the creature's heading. It adds the heading ($8023), takes the sine through $A8C4, multiplies it by ($8030) with $A8D8 and halves the high byte of the product, which comes to at most three quarters of the creature's width, gives it the sine's sign and adds the centre x ($802B). The same steps with the angle less $40 give the y offset, which is added to the centre y ($802D). Returns DE = x, HL = y, C = the angle halved ($00-$7F) and B = the width ($802F). Called six times, from $B3AC, $B3C3, $B3D0, $B3E7, $B3F4 and $B40B.","t":"code","b":[79],"m":"ld","o":"c,a","x":[45996,46019,46032,46055,46068,46091]},{"a":46226,"t":"code","b":[58,35,128],"m":"ld","oa":32803,"o":"a,(shape_x2)"},{"a":46229,"t":"code","b":[129],"m":"add","o":"a,c"},{"a":46230,"t":"code","b":[205,196,168],"m":"call","oa":43204,"o":"sine_lookup"},{"a":46233,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":46234,"t":"code","b":[58,48,128],"m":"ld","oa":32816,"o":"a,(extent_y1_high)"},{"a":46237,"t":"code","b":[205,216,168],"m":"call","oa":43224,"o":"multiply_e_by_a"},{"a":46240,"t":"code","b":[108],"m":"ld","o":"l,h"},{"a":46241,"t":"code","b":[203,61],"m":"srl","o":"l"},{"a":46243,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":46245,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46246,"t":"code","b":[48,7],"m":"jr","oa":46255,"o":"nc,$B4AF"},{"a":46248,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":46249,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":46252,"t":"code","b":[167],"m":"and","o":"a"},{"a":46253,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":46255,"t":"code","b":[237,91,43,128],"m":"ld","oa":32811,"o":"de,(extent_x1)","x":[46246]},{"a":46259,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":46260,"t":"code","b":[229],"m":"push","o":"hl"},{"a":46261,"t":"code","b":[214,64],"m":"sub","o":"$40"},{"a":46263,"t":"code","b":[205,196,168],"m":"call","oa":43204,"o":"sine_lookup"},{"a":46266,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":46267,"t":"code","b":[58,48,128],"m":"ld","oa":32816,"o":"a,(extent_y1_high)"},{"a":46270,"t":"code","b":[205,216,168],"m":"call","oa":43224,"o":"multiply_e_by_a"},{"a":46273,"t":"code","b":[108],"m":"ld","o":"l,h"},{"a":46274,"t":"code","b":[203,61],"m":"srl","o":"l"},{"a":46276,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":46278,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46279,"t":"code","b":[48,7],"m":"jr","oa":46288,"o":"nc,$B4D0"},{"a":46281,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":46282,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":46285,"t":"code","b":[167],"m":"and","o":"a"},{"a":46286,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":46288,"t":"code","b":[237,91,45,128],"m":"ld","oa":32813,"o":"de,(extent_x2)","x":[46279]},{"a":46292,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":46293,"t":"code","b":[209],"m":"pop","o":"de"},{"a":46294,"t":"code","b":[198,64],"m":"add","o":"a,$40"},{"a":46296,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":46298,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":46299,"t":"code","b":[58,47,128],"m":"ld","oa":32815,"o":"a,(extent_y1)"},{"a":46302,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":46303,"t":"code","b":[201],"m":"ret"},{"a":46304,"l":"draw_small_creature","c":"The form drawn for a type $F3 creature whose width byte is 7, reached from $B3A2: three small sprites plotted with $B7E3. The middle one, five rows, goes 3 pixels left of and above the centre and alternates between the data at $CB23, when bit 0 of the frame counter ($8059) is clear, and at $CB37. A seven-row sprite from $CB07 goes 3 left of and 4 above the centre, less 5 x the cosine and sine of the heading, and a six-row sprite from $CAEF goes 3 left of and 3 above the centre, plus the same; each product is taken through $A8C4 and $A8D8 and comes to 4 pixels at most. It stores $11 in ($8056), with the same short life as the store at $B36C. $DE5D-$DE86, in the handling of type $FB objects, create an object of type $F3 with this width.","t":"code","b":[62,17],"m":"ld","o":"a,$11","x":[45986]},{"a":46306,"t":"code","b":[50,86,128],"m":"ld","oa":32854,"o":"(clear_click_period),a"},{"a":46309,"t":"code","b":[33,55,203],"m":"ld","o":"hl,$CB37"},{"a":46312,"t":"code","b":[58,89,128],"m":"ld","oa":32857,"o":"a,(frame_counter)"},{"a":46315,"t":"code","b":[203,71],"m":"bit","o":"0,a"},{"a":46317,"t":"code","b":[32,3],"m":"jr","oa":46322,"o":"nz,$B4F2"},{"a":46319,"t":"code","b":[33,35,203],"m":"ld","o":"hl,$CB23"},{"a":46322,"t":"code","b":[217],"m":"exx","x":[46317]},{"a":46323,"t":"code","b":[42,45,128],"m":"ld","oa":32813,"o":"hl,(extent_x2)"},{"a":46326,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":46327,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":46328,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":46329,"t":"code","b":[237,91,43,128],"m":"ld","oa":32811,"o":"de,(extent_x1)"},{"a":46333,"t":"code","b":[27],"m":"dec","o":"de"},{"a":46334,"t":"code","b":[27],"m":"dec","o":"de"},{"a":46335,"t":"code","b":[27],"m":"dec","o":"de"},{"a":46336,"t":"code","b":[6,5],"m":"ld","o":"b,$05"},{"a":46338,"t":"code","b":[175],"m":"xor","o":"a"},{"a":46339,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46340,"t":"code","b":[205,227,183],"m":"call","oa":47075,"o":"plot_shape"},{"a":46343,"t":"code","b":[58,35,128],"m":"ld","oa":32803,"o":"a,(shape_x2)"},{"a":46346,"t":"code","b":[198,192],"m":"add","o":"a,$C0"},{"a":46348,"t":"code","b":[205,196,168],"m":"call","oa":43204,"o":"sine_lookup"},{"a":46351,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":46352,"t":"code","b":[62,5],"m":"ld","o":"a,$05"},{"a":46354,"t":"code","b":[205,216,168],"m":"call","oa":43224,"o":"multiply_e_by_a"},{"a":46357,"t":"code","b":[108],"m":"ld","o":"l,h"},{"a":46358,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":46360,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46361,"t":"code","b":[48,7],"m":"jr","oa":46370,"o":"nc,$B522"},{"a":46363,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":46366,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":46367,"t":"code","b":[167],"m":"and","o":"a"},{"a":46368,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":46370,"t":"code","b":[43],"m":"dec","o":"hl","x":[46361]},{"a":46371,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":46372,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":46373,"t":"code","b":[237,91,43,128],"m":"ld","oa":32811,"o":"de,(extent_x1)"},{"a":46377,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":46378,"t":"code","b":[229],"m":"push","o":"hl"},{"a":46379,"t":"code","b":[58,35,128],"m":"ld","oa":32803,"o":"a,(shape_x2)"},{"a":46382,"t":"code","b":[198,128],"m":"add","o":"a,$80"},{"a":46384,"t":"code","b":[205,196,168],"m":"call","oa":43204,"o":"sine_lookup"},{"a":46387,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":46388,"t":"code","b":[62,5],"m":"ld","o":"a,$05"},{"a":46390,"t":"code","b":[205,216,168],"m":"call","oa":43224,"o":"multiply_e_by_a"},{"a":46393,"t":"code","b":[108],"m":"ld","o":"l,h"},{"a":46394,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":46396,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46397,"t":"code","b":[48,7],"m":"jr","oa":46406,"o":"nc,$B546"},{"a":46399,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":46402,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":46403,"t":"code","b":[167],"m":"and","o":"a"},{"a":46404,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":46406,"t":"code","b":[43],"m":"dec","o":"hl","x":[46397]},{"a":46407,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":46408,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":46409,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":46410,"t":"code","b":[237,91,45,128],"m":"ld","oa":32813,"o":"de,(extent_x2)"},{"a":46414,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":46415,"t":"code","b":[209],"m":"pop","o":"de"},{"a":46416,"t":"code","b":[6,7],"m":"ld","o":"b,$07"},{"a":46418,"t":"code","b":[217],"m":"exx"},{"a":46419,"t":"code","b":[33,7,203],"m":"ld","o":"hl,$CB07"},{"a":46422,"t":"code","b":[217],"m":"exx"},{"a":46423,"t":"code","b":[175],"m":"xor","o":"a"},{"a":46424,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46425,"t":"code","b":[205,227,183],"m":"call","oa":47075,"o":"plot_shape"},{"a":46428,"t":"code","b":[58,35,128],"m":"ld","oa":32803,"o":"a,(shape_x2)"},{"a":46431,"t":"code","b":[198,64],"m":"add","o":"a,$40"},{"a":46433,"t":"code","b":[205,196,168],"m":"call","oa":43204,"o":"sine_lookup"},{"a":46436,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":46437,"t":"code","b":[62,5],"m":"ld","o":"a,$05"},{"a":46439,"t":"code","b":[205,216,168],"m":"call","oa":43224,"o":"multiply_e_by_a"},{"a":46442,"t":"code","b":[108],"m":"ld","o":"l,h"},{"a":46443,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":46445,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46446,"t":"code","b":[48,7],"m":"jr","oa":46455,"o":"nc,$B577"},{"a":46448,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":46451,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":46452,"t":"code","b":[167],"m":"and","o":"a"},{"a":46453,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":46455,"t":"code","b":[43],"m":"dec","o":"hl","x":[46446]},{"a":46456,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":46457,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":46458,"t":"code","b":[237,91,43,128],"m":"ld","oa":32811,"o":"de,(extent_x1)"},{"a":46462,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":46463,"t":"code","b":[229],"m":"push","o":"hl"},{"a":46464,"t":"code","b":[58,35,128],"m":"ld","oa":32803,"o":"a,(shape_x2)"},{"a":46467,"t":"code","b":[205,196,168],"m":"call","oa":43204,"o":"sine_lookup"},{"a":46470,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":46471,"t":"code","b":[62,5],"m":"ld","o":"a,$05"},{"a":46473,"t":"code","b":[205,216,168],"m":"call","oa":43224,"o":"multiply_e_by_a"},{"a":46476,"t":"code","b":[108],"m":"ld","o":"l,h"},{"a":46477,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":46479,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46480,"t":"code","b":[48,7],"m":"jr","oa":46489,"o":"nc,$B599"},{"a":46482,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":46485,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":46486,"t":"code","b":[167],"m":"and","o":"a"},{"a":46487,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":46489,"t":"code","b":[43],"m":"dec","o":"hl","x":[46480]},{"a":46490,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":46491,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":46492,"t":"code","b":[237,91,45,128],"m":"ld","oa":32813,"o":"de,(extent_x2)"},{"a":46496,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":46497,"t":"code","b":[209],"m":"pop","o":"de"},{"a":46498,"t":"code","b":[6,6],"m":"ld","o":"b,$06"},{"a":46500,"t":"code","b":[217],"m":"exx"},{"a":46501,"t":"code","b":[33,239,202],"m":"ld","o":"hl,$CAEF"},{"a":46504,"t":"code","b":[217],"m":"exx"},{"a":46505,"t":"code","b":[175],"m":"xor","o":"a"},{"a":46506,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46507,"t":"code","b":[205,227,183],"m":"call","oa":47075,"o":"plot_shape"},{"a":46510,"t":"code","b":[201],"m":"ret"},{"a":46511,"l":"draw_leg_strip","c":"Draws one leg as a strip one byte wide. In: DE = x and HL = y of the leg's end from $B491, C = the leg's angle halved, with bit 7 set by the caller for three of the six legs. Bits 5 to 2 of C pick one of the 16 four-byte entries of the table at $C667, counted back from 15 when bit 7 is clear. An entry holds an x offset, a y offset, the strip's place in the data that follows the table at $C6A7, counted in rows, and its height, 2 to 8 rows. The x offset is negated when bit 6 of C is set, and the strip is then drawn mirrored through $B702. The y offset is negated when bits 6 and 7 of C differ, and the strip is then drawn from its last row upward: the row step stored in ($B7B4) is $001F going down and $FFDF going up. Rows that fall outside the 128 rows of the frame buffer are clipped by cutting the row count and skipping strip data. A row of strip data is two bytes; the first is ORed into the buffer and the second is then exclusive-ORed. A strip at a multiple of 8 pixels is written one byte a row by the loop at $B6CE. Any other is split across two buffer bytes with the shift tables in pages $5B-$61 by the loop at $B6DF, whose two stores, at $B6EF and $B6FD, are switched between LD (HL),A and NOP so that a strip crossing the left or right edge writes only the byte that is in view. When the strip starts 1 to 7 pixels left of the buffer, $B6B3-$B6C3 take $20 from L twice, with no borrow into H, where once with a borrow was needed: the half in view is drawn one row too high, or seven rows too low when L was below $40. Called six times, from $B3B1, $B3C6, $B3D5, $B3EA, $B3F9 and $B40E.","t":"code","b":[229],"m":"push","o":"hl","x":[46001,46022,46037,46058,46073,46094]},{"a":46512,"t":"code","b":[213],"m":"push","o":"de"},{"a":46513,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":46514,"t":"code","b":[203,191],"m":"res","o":"7,a"},{"a":46516,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46517,"t":"code","b":[17,103,198],"m":"ld","o":"de,$C667"},{"a":46520,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":46521,"t":"code","b":[230,60],"m":"and","o":"$3C"},{"a":46523,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":46524,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":46526,"t":"code","b":[203,121],"m":"bit","o":"7,c"},{"a":46528,"t":"code","b":[32,4],"m":"jr","oa":46534,"o":"nz,$B5C6"},{"a":46530,"t":"code","b":[62,60],"m":"ld","o":"a,$3C"},{"a":46532,"t":"code","b":[149],"m":"sub","o":"l"},{"a":46533,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":46534,"t":"code","b":[25],"m":"add","o":"hl,de","x":[46528]},{"a":46535,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":46536,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":46537,"t":"code","b":[203,113],"m":"bit","o":"6,c"},{"a":46539,"t":"code","b":[40,2],"m":"jr","oa":46543,"o":"z,$B5CF"},{"a":46541,"t":"code","b":[237,68],"m":"neg"},{"a":46543,"t":"code","b":[71],"m":"ld","o":"b,a","x":[46539]},{"a":46544,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":46545,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":46547,"t":"code","b":[169],"m":"xor","o":"c"},{"a":46548,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":46549,"t":"code","b":[242,222,181],"m":"jp","oa":46558,"o":"p,$B5DE"},{"a":46552,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46553,"t":"code","b":[203,255],"m":"set","o":"7,a"},{"a":46555,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46556,"t":"code","b":[237,68],"m":"neg"},{"a":46558,"t":"code","b":[79],"m":"ld","o":"c,a","x":[46549]},{"a":46559,"t":"code","b":[197],"m":"push","o":"bc"},{"a":46560,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":46561,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":46562,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":46563,"t":"code","b":[70],"m":"ld","o":"b,(hl)"},{"a":46564,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":46566,"t":"code","b":[198,64],"m":"add","o":"a,$40"},{"a":46568,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":46569,"t":"code","b":[62,0],"m":"ld","o":"a,$00"},{"a":46571,"t":"code","b":[143],"m":"adc","o":"a,a"},{"a":46572,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":46573,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":46574,"t":"code","b":[217],"m":"exx"},{"a":46575,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":46576,"t":"code","b":[88],"m":"ld","o":"e,b"},{"a":46577,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":46579,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":46580,"t":"code","b":[203,123],"m":"bit","o":"7,e"},{"a":46582,"t":"code","b":[40,1],"m":"jr","oa":46585,"o":"z,$B5F9"},{"a":46584,"t":"code","b":[21],"m":"dec","o":"d"},{"a":46585,"t":"code","b":[25],"m":"add","o":"hl,de","x":[46582]},{"a":46586,"t":"code","b":[209],"m":"pop","o":"de"},{"a":46587,"t":"code","b":[229],"m":"push","o":"hl"},{"a":46588,"t":"code","b":[105],"m":"ld","o":"l,c"},{"a":46589,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":46591,"t":"code","b":[203,125],"m":"bit","o":"7,l"},{"a":46593,"t":"code","b":[40,1],"m":"jr","oa":46596,"o":"z,$B604"},{"a":46595,"t":"code","b":[37],"m":"dec","o":"h"},{"a":46596,"t":"code","b":[25],"m":"add","o":"hl,de","x":[46593]},{"a":46597,"t":"code","b":[229],"m":"push","o":"hl"},{"a":46598,"t":"code","b":[217],"m":"exx"},{"a":46599,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46600,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":46601,"t":"code","b":[209],"m":"pop","o":"de"},{"a":46602,"t":"code","b":[203,121],"m":"bit","o":"7,c"},{"a":46604,"t":"code","b":[32,53],"m":"jr","oa":46659,"o":"nz,$B643"},{"a":46606,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":46607,"t":"code","b":[167],"m":"and","o":"a"},{"a":46608,"t":"code","b":[202,40,182],"m":"jp","oa":46632,"o":"z,$B628"},{"a":46611,"t":"code","b":[20],"m":"inc","o":"d"},{"a":46612,"t":"code","b":[194,65,182],"m":"jp","oa":46657,"o":"nz,$B641"},{"a":46615,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":46616,"t":"code","b":[128],"m":"add","o":"a,b"},{"a":46617,"t":"code","b":[210,65,182],"m":"jp","oa":46657,"o":"nc,$B641"},{"a":46620,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":46621,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":46622,"t":"code","b":[237,68],"m":"neg"},{"a":46624,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":46625,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":46627,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":46628,"t":"code","b":[90],"m":"ld","o":"e,d"},{"a":46629,"t":"code","b":[195,53,182],"m":"jp","oa":46645,"o":"$B635"},{"a":46632,"t":"code","b":[123],"m":"ld","o":"a,e","x":[46608]},{"a":46633,"t":"code","b":[167],"m":"and","o":"a"},{"a":46634,"t":"code","b":[250,65,182],"m":"jp","oa":46657,"o":"m,$B641"},{"a":46637,"t":"code","b":[128],"m":"add","o":"a,b"},{"a":46638,"t":"code","b":[242,53,182],"m":"jp","oa":46645,"o":"p,$B635"},{"a":46641,"t":"code","b":[62,128],"m":"ld","o":"a,$80"},{"a":46643,"t":"code","b":[147],"m":"sub","o":"e"},{"a":46644,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":46645,"t":"code","b":[62,31],"m":"ld","o":"a,$1F","x":[46629,46638]},{"a":46647,"t":"code","b":[50,180,183],"m":"ld","oa":47028,"o":"(leg_row_step),a"},{"a":46650,"t":"code","b":[175],"m":"xor","o":"a"},{"a":46651,"t":"code","b":[50,181,183],"m":"ld","oa":47029,"o":"($B7B5),a"},{"a":46654,"t":"code","b":[195,107,182],"m":"jp","oa":46699,"o":"$B66B"},{"a":46657,"t":"code","b":[225],"m":"pop","o":"hl","x":[46612,46617,46634,46661,46669]},{"a":46658,"t":"code","b":[201],"m":"ret"},{"a":46659,"t":"code","b":[122],"m":"ld","o":"a,d","x":[46604]},{"a":46660,"t":"code","b":[167],"m":"and","o":"a"},{"a":46661,"t":"code","b":[32,250],"m":"jr","oa":46657,"o":"nz,$B641"},{"a":46663,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":46664,"t":"code","b":[167],"m":"and","o":"a"},{"a":46665,"t":"code","b":[242,93,182],"m":"jp","oa":46685,"o":"p,$B65D"},{"a":46668,"t":"code","b":[144],"m":"sub","o":"b"},{"a":46669,"t":"code","b":[250,65,182],"m":"jp","oa":46657,"o":"m,$B641"},{"a":46672,"t":"code","b":[237,68],"m":"neg"},{"a":46674,"t":"code","b":[198,128],"m":"add","o":"a,$80"},{"a":46676,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":46677,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":46679,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":46680,"t":"code","b":[30,127],"m":"ld","o":"e,$7F"},{"a":46682,"t":"code","b":[195,97,182],"m":"jp","oa":46689,"o":"$B661"},{"a":46685,"t":"code","b":[184],"m":"cp","o":"b","x":[46665]},{"a":46686,"t":"code","b":[48,1],"m":"jr","oa":46689,"o":"nc,$B661"},{"a":46688,"t":"code","b":[67],"m":"ld","o":"b,e"},{"a":46689,"t":"code","b":[62,223],"m":"ld","o":"a,$DF","x":[46682,46686]},{"a":46691,"t":"code","b":[50,180,183],"m":"ld","oa":47028,"o":"(leg_row_step),a"},{"a":46694,"t":"code","b":[62,255],"m":"ld","o":"a,$FF"},{"a":46696,"t":"code","b":[50,181,183],"m":"ld","oa":47029,"o":"($B7B5),a"},{"a":46699,"t":"code","b":[229],"m":"push","o":"hl","x":[46654]},{"a":46700,"t":"code","b":[217],"m":"exx"},{"a":46701,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":46702,"t":"code","b":[217],"m":"exx"},{"a":46703,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":46704,"t":"code","b":[209],"m":"pop","o":"de"},{"a":46705,"t":"code","b":[107],"m":"ld","o":"l,e"},{"a":46706,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":46707,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":46709,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":46711,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":46713,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":46715,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":46717,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":46719,"t":"code","b":[62,240],"m":"ld","o":"a,$F0"},{"a":46721,"t":"code","b":[180],"m":"or","o":"h"},{"a":46722,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":46723,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":46724,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":46725,"t":"code","b":[167],"m":"and","o":"a"},{"a":46726,"t":"code","b":[200],"m":"ret","o":"z"},{"a":46727,"t":"code","b":[203,113],"m":"bit","o":"6,c"},{"a":46729,"t":"code","b":[194,2,183],"m":"jp","oa":46850,"o":"nz,leg_strip_mirrored"},{"a":46732,"t":"code","b":[21],"m":"dec","o":"d"},{"a":46733,"t":"code","b":[240],"m":"ret","o":"p"},{"a":46734,"t":"code","b":[20],"m":"inc","o":"d"},{"a":46735,"t":"code","b":[32,28],"m":"jr","oa":46765,"o":"nz,$B6AD"},{"a":46737,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":46738,"t":"code","b":[254,248],"m":"cp","o":"$F8"},{"a":46740,"t":"code","b":[48,11],"m":"jr","oa":46753,"o":"nc,$B6A1"},{"a":46742,"t":"code","b":[62,119],"m":"ld","o":"a,$77"},{"a":46744,"t":"code","b":[50,239,182],"m":"ld","oa":46831,"o":"(leg_strip_store_left),a"},{"a":46747,"t":"code","b":[50,253,182],"m":"ld","oa":46845,"o":"(leg_strip_store_right),a"},{"a":46750,"t":"code","b":[195,196,182],"m":"jp","oa":46788,"o":"$B6C4"},{"a":46753,"t":"code","b":[62,119],"m":"ld","o":"a,$77","x":[46740]},{"a":46755,"t":"code","b":[50,239,182],"m":"ld","oa":46831,"o":"(leg_strip_store_left),a"},{"a":46758,"t":"code","b":[175],"m":"xor","o":"a"},{"a":46759,"t":"code","b":[50,253,182],"m":"ld","oa":46845,"o":"(leg_strip_store_right),a"},{"a":46762,"t":"code","b":[195,196,182],"m":"jp","oa":46788,"o":"$B6C4"},{"a":46765,"t":"code","b":[20],"m":"inc","o":"d","x":[46735]},{"a":46766,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":46767,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":46768,"t":"code","b":[254,249],"m":"cp","o":"$F9"},{"a":46770,"t":"code","b":[216],"m":"ret","o":"c"},{"a":46771,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":46772,"t":"code","b":[214,32],"m":"sub","o":"$20"},{"a":46774,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":46775,"t":"code","b":[175],"m":"xor","o":"a"},{"a":46776,"t":"code","b":[50,239,182],"m":"ld","oa":46831,"o":"(leg_strip_store_left),a"},{"a":46779,"t":"code","b":[62,119],"m":"ld","o":"a,$77"},{"a":46781,"t":"code","b":[50,253,182],"m":"ld","oa":46845,"o":"(leg_strip_store_right),a"},{"a":46784,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":46785,"t":"code","b":[214,32],"m":"sub","o":"$20"},{"a":46787,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":46788,"t":"code","b":[123],"m":"ld","o":"a,e","x":[46750,46762]},{"a":46789,"t":"code","b":[237,91,180,183],"m":"ld","oa":47028,"o":"de,(leg_row_step)"},{"a":46793,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":46795,"t":"code","b":[32,13],"m":"jr","oa":46810,"o":"nz,$B6DA"},{"a":46797,"t":"code","b":[28],"m":"inc","o":"e"},{"a":46798,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[46807]},{"a":46799,"t":"code","b":[217],"m":"exx"},{"a":46800,"t":"code","b":[182],"m":"or","o":"(hl)"},{"a":46801,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":46802,"t":"code","b":[174],"m":"xor","o":"(hl)"},{"a":46803,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":46804,"t":"code","b":[217],"m":"exx"},{"a":46805,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":46806,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":46807,"t":"code","b":[16,245],"m":"djnz","oa":46798,"o":"$B6CE"},{"a":46809,"t":"code","b":[201],"m":"ret"},{"a":46810,"t":"code","b":[217],"m":"exx","x":[46795]},{"a":46811,"t":"code","b":[198,90],"m":"add","o":"a,$5A"},{"a":46813,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":46814,"t":"code","b":[217],"m":"exx"},{"a":46815,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[46847]},{"a":46816,"t":"code","b":[217],"m":"exx"},{"a":46817,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":46818,"t":"code","b":[67],"m":"ld","o":"b,e"},{"a":46819,"t":"code","b":[203,195],"m":"set","o":"0,e"},{"a":46821,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":46822,"t":"code","b":[78],"m":"ld","o":"c,(hl)"},{"a":46823,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":46824,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":46825,"t":"code","b":[182],"m":"or","o":"(hl)"},{"a":46826,"t":"code","b":[105],"m":"ld","o":"l,c"},{"a":46827,"t":"code","b":[203,197],"m":"set","o":"0,l"},{"a":46829,"t":"code","b":[174],"m":"xor","o":"(hl)"},{"a":46830,"t":"code","b":[217],"m":"exx"},{"a":46831,"l":"leg_strip_store_left","c":"The store of the left-hand buffer byte in the two-byte loop of the leg strip routine. Its opcode is written before each strip: $77, LD (HL),A, by $B698 and $B6A3, or $00, NOP, by $B6B8 when the strip starts left of the buffer and this byte would fall outside it. The instructions that follow step to the next buffer byte and build the right-hand half of the row from the shift table.","t":"code","b":[119],"m":"ld","o":"(hl),a","x":[46744,46755,46776]},{"a":46832,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":46833,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":46834,"t":"code","b":[217],"m":"exx"},{"a":46835,"t":"code","b":[104],"m":"ld","o":"l,b"},{"a":46836,"t":"code","b":[203,37],"m":"sla","o":"l"},{"a":46838,"t":"code","b":[182],"m":"or","o":"(hl)"},{"a":46839,"t":"code","b":[105],"m":"ld","o":"l,c"},{"a":46840,"t":"code","b":[203,37],"m":"sla","o":"l"},{"a":46842,"t":"code","b":[174],"m":"xor","o":"(hl)"},{"a":46843,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":46844,"t":"code","b":[217],"m":"exx"},{"a":46845,"l":"leg_strip_store_right","c":"The store of the right-hand buffer byte in the same loop, written the same way: $77 by $B69B and $B6BD, or $00 by $B6A7 when the strip starts at pixel 248 or beyond and this byte would wrap onto the next row. After it come the step to the next row, the loop back to $B6DF and the return.","t":"code","b":[119],"m":"ld","o":"(hl),a","x":[46747,46759,46781]},{"a":46846,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":46847,"t":"code","b":[16,222],"m":"djnz","oa":46815,"o":"$B6DF"},{"a":46849,"t":"code","b":[201],"m":"ret"},{"a":46850,"l":"leg_strip_mirrored","c":"The start of the mirrored leg strip, reached from $B689 when bit 6 of C is set. In: DE = x, HL = the buffer address for that position, B = rows. A negative x returns at once. An x of 256 or more goes on to $B725. An x of 8 or more sets both stores of the mirrored loop, at $B778 and $B792, to LD (HL),A and jumps to $B738. An x below 8 reaches $B717, which is AND A then RET, so a mirrored strip that starts within 8 pixels of the left edge is not drawn at all.","t":"code","b":[122],"m":"ld","o":"a,d","x":[46729]},{"a":46851,"t":"code","b":[167],"m":"and","o":"a"},{"a":46852,"t":"code","b":[248],"m":"ret","o":"m"},{"a":46853,"t":"code","b":[32,30],"m":"jr","oa":46885,"o":"nz,leg_mirror_right_edge"},{"a":46855,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":46856,"t":"code","b":[254,8],"m":"cp","o":"$08"},{"a":46858,"t":"code","b":[56,11],"m":"jr","oa":46871,"o":"c,$B717"},{"a":46860,"t":"code","b":[62,119],"m":"ld","o":"a,$77"},{"a":46862,"t":"code","b":[50,120,183],"m":"ld","oa":46968,"o":"($B778),a"},{"a":46865,"t":"code","b":[50,146,183],"m":"ld","oa":46994,"o":"($B792),a"},{"a":46868,"t":"code","b":[195,56,183],"m":"jp","oa":46904,"o":"leg_mirror_plot"},{"a":46871,"t":"code","b":[167],"m":"and","o":"a","x":[46858]},{"a":46872,"t":"code","b":[201],"m":"ret"},{"a":46873,"l":"leg_mirror_left_clip_unreached","c":"Five instructions that nothing reaches: XOR A, LD ($B778),A, LD A,$77, LD ($B792),A, JP $B738. They follow the RET at $B718, and no jump, call or stored word in the image names $B719. They are the left-edge case of the mirrored plot that starts at $B702: for a column of 0 to 7 they would switch off the first screen write at $B778, keep the second at $B792 and go on to $B738, the counterpart of what $B6A1 does for the unmirrored shape at the right edge. The test at $B70A branches to the AND A and RET at $B717 instead, so a mirrored shape whose column is 0 to 7 is not drawn at all.","t":"code","b":[175],"m":"xor","o":"a"},{"a":46874,"t":"code","b":[50,120,183],"m":"ld","oa":46968,"o":"($B778),a"},{"a":46877,"t":"code","b":[62,119],"m":"ld","o":"a,$77"},{"a":46879,"t":"code","b":[50,146,183],"m":"ld","oa":46994,"o":"($B792),a"},{"a":46882,"t":"code","b":[195,56,183],"m":"jp","oa":46904,"o":"leg_mirror_plot"},{"a":46885,"l":"leg_mirror_right_edge","c":"Part of the 8-pixel shape plotter entered at $B5AF, reached only from $B705: the shape is being drawn mirrored (bit 6 of its flags in C) and the high byte of its column, in D, is not zero. It returns unless that high byte is 1, adds $20 to L because the buffer address in HL was formed from the low byte of the column alone and is 32 bytes short, and returns again unless the low byte is under 8, so only columns 256 to 263 go on. For those it stores $77 at $B778 and $00 at $B792: of the two bytes each row spans, the left one, which lands in column 31 of the buffer, is written and the right one, which would land in the next row, is not. It then falls into $B738.","t":"code","b":[21],"m":"dec","o":"d","x":[46853]},{"a":46886,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":46887,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":46888,"t":"code","b":[198,32],"m":"add","o":"a,$20"},{"a":46890,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":46891,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":46892,"t":"code","b":[254,8],"m":"cp","o":"$08"},{"a":46894,"t":"code","b":[208],"m":"ret","o":"nc"},{"a":46895,"t":"code","b":[62,119],"m":"ld","o":"a,$77"},{"a":46897,"t":"code","b":[50,120,183],"m":"ld","oa":46968,"o":"($B778),a"},{"a":46900,"t":"code","b":[175],"m":"xor","o":"a"},{"a":46901,"t":"code","b":[50,146,183],"m":"ld","oa":46994,"o":"($B792),a"},{"a":46904,"l":"leg_mirror_plot","c":"The mirrored half of the 8-pixel shape plotter entered at $B5AF, which draws the legs of the six-legged bugs. On entry HL is the frame-buffer address ($F000 plus 32 bytes a row) of the byte holding the shape's column, E the low byte of that column, B the number of rows and the alternate HL the data, two bytes a row: a mask and a pattern. HL steps back one byte first, so the eight pixels drawn are the ones that end just left of the column, and every data byte is passed through the bit-reversal table at $6200, which flips the shape left to right. Each buffer byte becomes (byte OR mask) XOR pattern, and after each row the word at $B7B4 is added to HL. When the column is a multiple of 8 the loop at $B748 writes one byte a row. Otherwise the loop at $B760 splits the reversed mask and pattern over two bytes with the shift tables in pages $5B to $61 (page $5A plus column AND 7; an odd index gives the part shifted right, an even index the part carried into the next byte) and writes them with the instructions at $B778 and $B792, whose opcodes other code replaces: $B70E and $B731 store $77 (LD (HL),A, write the byte) at $B778, $B711 stores $77 at $B792 and $B735 stores $00 there (NOP, leave the buffer byte alone). Between the two bytes the address is stepped with INC L, which does not carry into H: when the first byte is column 31 of a row whose number is 7 more than a multiple of 8, which can only come from $B725, the rows after it are written 256 bytes lower than they should be. Entered by the jump at $B714 and by falling in from $B735.","t":"code","b":[45],"m":"dec","o":"l","x":[46868,46882]},{"a":46905,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":46906,"t":"code","b":[237,91,180,183],"m":"ld","oa":47028,"o":"de,(leg_row_step)"},{"a":46910,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":46912,"t":"code","b":[194,89,183],"m":"jp","oa":46937,"o":"nz,$B759"},{"a":46915,"t":"code","b":[217],"m":"exx"},{"a":46916,"t":"code","b":[22,98],"m":"ld","o":"d,$62"},{"a":46918,"t":"code","b":[217],"m":"exx"},{"a":46919,"t":"code","b":[28],"m":"inc","o":"e"},{"a":46920,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[46934]},{"a":46921,"t":"code","b":[217],"m":"exx"},{"a":46922,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":46923,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":46924,"t":"code","b":[78],"m":"ld","o":"c,(hl)"},{"a":46925,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":46926,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":46927,"t":"code","b":[182],"m":"or","o":"(hl)"},{"a":46928,"t":"code","b":[105],"m":"ld","o":"l,c"},{"a":46929,"t":"code","b":[174],"m":"xor","o":"(hl)"},{"a":46930,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":46931,"t":"code","b":[217],"m":"exx"},{"a":46932,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":46933,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":46934,"t":"code","b":[16,240],"m":"djnz","oa":46920,"o":"$B748"},{"a":46936,"t":"code","b":[201],"m":"ret"},{"a":46937,"t":"code","b":[217],"m":"exx","x":[46912]},{"a":46938,"t":"code","b":[198,90],"m":"add","o":"a,$5A"},{"a":46940,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":46941,"t":"code","b":[22,98],"m":"ld","o":"d,$62"},{"a":46943,"t":"code","b":[217],"m":"exx"},{"a":46944,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[46996]},{"a":46945,"t":"code","b":[217],"m":"exx"},{"a":46946,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46947,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":46948,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":46949,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":46950,"t":"code","b":[203,193],"m":"set","o":"0,c"},{"a":46952,"t":"code","b":[10],"m":"ld","o":"a,(bc)"},{"a":46953,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":46954,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":46955,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":46956,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":46957,"t":"code","b":[78],"m":"ld","o":"c,(hl)"},{"a":46958,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":46959,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":46960,"t":"code","b":[203,193],"m":"set","o":"0,c"},{"a":46962,"t":"code","b":[10],"m":"ld","o":"a,(bc)"},{"a":46963,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":46964,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46965,"t":"code","b":[179],"m":"or","o":"e"},{"a":46966,"t":"code","b":[169],"m":"xor","o":"c"},{"a":46967,"t":"code","b":[217],"m":"exx"},{"a":46968,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[46862,46874,46897]},{"a":46969,"t":"code","b":[44],"m":"inc","o":"l"},{"a":46970,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":46971,"t":"code","b":[217],"m":"exx"},{"a":46972,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46973,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":46974,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":46975,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":46976,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":46978,"t":"code","b":[10],"m":"ld","o":"a,(bc)"},{"a":46979,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":46980,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":46981,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":46982,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":46983,"t":"code","b":[78],"m":"ld","o":"c,(hl)"},{"a":46984,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":46985,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":46986,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":46988,"t":"code","b":[10],"m":"ld","o":"a,(bc)"},{"a":46989,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":46990,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":46991,"t":"code","b":[179],"m":"or","o":"e"},{"a":46992,"t":"code","b":[169],"m":"xor","o":"c"},{"a":46993,"t":"code","b":[217],"m":"exx"},{"a":46994,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[46865,46879,46901]},{"a":46995,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":46996,"t":"code","b":[16,202],"m":"djnz","oa":46944,"o":"$B760"},{"a":46998,"t":"code","b":[201],"m":"ret"},{"a":46999,"l":"plot_spark","c":"Draws a spark picture of the size in B. HL is the row and DE the column of the top left corner, both signed 16-bit. A size under 21 is used as it is; a larger one draws the 20-row picture after adding (B - 21) / 2, rounded down, to both HL and DE, which keeps the picture near the middle of the larger square. The size, doubled, indexes the address table at $BF27, the alternate A is cleared, which sets its zero flag for 16-pixel rows, and the code joins $B7D0, which switches to 24-pixel rows for sizes 17 and over and plots through $B7E3. The LD A,B at $B7A1 has no effect, A being loaded again at $B7AC. One reference: the jump at $8407 that ends the drawer of type-$F1 objects, which passes the mean width of the object's projected base and top as the size.","t":"code","b":[175],"m":"xor","o":"a","x":[33799]},{"a":47000,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":47001,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":47002,"t":"code","b":[254,21],"m":"cp","o":"$15"},{"a":47004,"t":"code","b":[56,15],"m":"jr","oa":47021,"o":"c,$B7AD"},{"a":47006,"t":"code","b":[214,21],"m":"sub","o":"$15"},{"a":47008,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47009,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":47010,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":47012,"t":"code","b":[6,0],"m":"ld","o":"b,$00"},{"a":47014,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":47015,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":47016,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":47017,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":47018,"t":"code","b":[6,20],"m":"ld","o":"b,$14"},{"a":47020,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":47021,"t":"code","b":[217],"m":"exx","x":[47004]},{"a":47022,"t":"code","b":[33,39,191],"m":"ld","o":"hl,$BF27"},{"a":47025,"t":"code","b":[195,208,183],"m":"jp","oa":47056,"o":"$B7D0"},{"a":47028,"l":"leg_row_step","c":"The row step of the 8-pixel shape plotter entered at $B5AF: loaded into DE at $B6C5 and $B73A and added to the frame-buffer address after each row. $B635 stores $001F for a shape drawn top row first and $B661 stores $FFDF for one drawn bottom row first; with the one byte the loops step inside a row these come to 32 and minus 32, one buffer row down or up. The two bytes are written separately, the low at $B637 and $B663 and the high at $B63B and $B668. Six references in all and zero on the tape.","t":"word","b":[0,0],"d":[0],"x":[46647,46691,46789,46906]},{"a":47030,"l":"plot_disc","c":"Draws a speckled disc picture of the size in B, with the same registers and the same rule as $B797 (a size over 20 draws the 20-row picture moved by (B - 21) / 2 in both directions) but with the address table at $BF59. From $B7D0 the code is shared with $B797: the size doubled indexes the table, the picture address goes to the alternate HL, and B picks the row width, 16 pixels up to size 16 and 24 pixels from 17 up, before the plot at $B7E3. Four references: calls at $85CE (in the type-$FA drawer) and at $B473 and $B48D (the two body discs of the bug drawn at $B36A), and the jump at $8606 that ends the type-$F2 drawer.","t":"code","b":[175],"m":"xor","o":"a","x":[34254,34310,46195,46221]},{"a":47031,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":47032,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":47033,"t":"code","b":[254,21],"m":"cp","o":"$15"},{"a":47035,"t":"code","b":[56,15],"m":"jr","oa":47052,"o":"c,$B7CC"},{"a":47037,"t":"code","b":[214,21],"m":"sub","o":"$15"},{"a":47039,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47040,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":47041,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":47043,"t":"code","b":[6,0],"m":"ld","o":"b,$00"},{"a":47045,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":47046,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":47047,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":47048,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":47049,"t":"code","b":[6,20],"m":"ld","o":"b,$14"},{"a":47051,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":47052,"t":"code","b":[217],"m":"exx","x":[47035]},{"a":47053,"t":"code","b":[33,89,191],"m":"ld","o":"hl,$BF59"},{"a":47056,"t":"code","b":[95],"m":"ld","o":"e,a","x":[47025]},{"a":47057,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":47059,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":47061,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":47062,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":47063,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47064,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":47065,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":47066,"t":"code","b":[217],"m":"exx"},{"a":47067,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":47068,"t":"code","b":[254,17],"m":"cp","o":"$11"},{"a":47070,"t":"code","b":[56,3],"m":"jr","oa":47075,"o":"c,plot_shape"},{"a":47072,"l":"plot_shape_24","c":"Entry to the masked shape plotter for data 24 pixels wide: it sets the alternate A to $FF, which leaves the alternate zero flag clear, and falls into $B7E3, which then reads six bytes a row. Called five times: from $BC88, $BCBC and $BCD4 for the floppy disk's hub and the two halves of its label, and from $BCFE and $BD0E for the two halves of the counter display. The sized entries $B797 and $B7B6 run into it for sizes 17 and over.","t":"code","b":[175],"m":"xor","o":"a","x":[48264,48316,48340,48382,48398]},{"a":47073,"t":"code","b":[61],"m":"dec","o":"a"},{"a":47074,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":47075,"l":"plot_shape","c":"Plots a masked picture into the frame buffer at $F000 (256 by 128 pixels, 32 bytes a row). HL is the row and DE the column of its top left corner, both signed 16-bit; B is the number of rows; the alternate HL points at the data; the zero flag in the alternate AF gives the width, set for 16 pixels (four bytes a row) and clear for 24 pixels (six bytes a row). A data row is pairs of a mask byte and a pattern byte from left to right, and each buffer byte becomes (byte OR mask) XOR pattern: mask 1 with pattern 0 sets a pixel, both 1 clears it, pattern 1 alone inverts it and both 0 leaves it. Rows above the top of the buffer are skipped in the data and rows below row 127 are dropped. The routine returns without drawing when no row is left, when the row is below -256 or above 127, when the column is below -256 or above 255, or when a negative column puts the whole width left of the buffer. For a column that is a multiple of 8 the loops at $B89D (three bytes a row) and $B98B (two) write whole bytes; otherwise each mask and pattern byte is split over two buffer bytes with the shift tables in pages $5B to $61 (page $5A plus column AND 7) and the loops at $B8C3 and $B9A8 write four and three bytes a row. Clipping at the left and right edges is done by replacing the opcodes of the write instructions. $B82D-$B836 store $77 (LD (HL),A, write the byte) at $B8D5, $B8F7, $B918 and $B92A, and $B931-$B937 do the same at $B9BA, $B9DB and $B9ED. Then $00 (NOP, leave the buffer byte alone) is stored for each byte that would fall outside the 32 columns: at the right edge at $B92A, then $B918, then $B8F7 ($B84C, $B852, $B858) or at $B9ED, then $B9DB ($B94D, $B953), and at the left edge at $B8D5, then $B8F7, then $B918 ($B873, $B879, $B87F) or at $B9BA, then $B9DB ($B96E, $B974). The whole-byte loops use copies: $B8A4, $B8AD and $B8B6 take the opcodes at $B8D5, $B8F7 and $B918 ($B888-$B897), and $B992 and $B99B take those at $B9BA and $B9DB ($B97C-$B985). Nine calls reach this entry ($863B, $8663, $86A5, $870B, $8748, $B504, $B559, $B5AB, $BCA4) and the branch at $B7DE.","t":"code","b":[124],"m":"ld","o":"a,h","x":[34363,34403,34469,34571,34632,46340,46425,46507,47070,48292]},{"a":47076,"t":"code","b":[167],"m":"and","o":"a"},{"a":47077,"t":"code","b":[40,32],"m":"jr","oa":47111,"o":"z,$B807"},{"a":47079,"t":"code","b":[36],"m":"inc","o":"h"},{"a":47080,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":47081,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":47082,"t":"code","b":[128],"m":"add","o":"a,b"},{"a":47083,"t":"code","b":[208],"m":"ret","o":"nc"},{"a":47084,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":47085,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":47086,"t":"code","b":[217],"m":"exx"},{"a":47087,"t":"code","b":[237,68],"m":"neg"},{"a":47089,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":47091,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":47092,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":47094,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":47095,"t":"code","b":[40,3],"m":"jr","oa":47100,"o":"z,$B7FC"},{"a":47097,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":47098,"t":"code","b":[131],"m":"add","o":"a,e"},{"a":47099,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":47100,"t":"code","b":[8],"m":"ex","o":"af,af'","x":[47095]},{"a":47101,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":47103,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":47104,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":47105,"t":"code","b":[217],"m":"exx"},{"a":47106,"t":"code","b":[46,0],"m":"ld","o":"l,$00"},{"a":47108,"t":"code","b":[195,18,184],"m":"jp","oa":47122,"o":"$B812"},{"a":47111,"t":"code","b":[125],"m":"ld","o":"a,l","x":[47077]},{"a":47112,"t":"code","b":[167],"m":"and","o":"a"},{"a":47113,"t":"code","b":[248],"m":"ret","o":"m"},{"a":47114,"t":"code","b":[128],"m":"add","o":"a,b"},{"a":47115,"t":"code","b":[242,18,184],"m":"jp","oa":47122,"o":"p,$B812"},{"a":47118,"t":"code","b":[62,128],"m":"ld","o":"a,$80"},{"a":47120,"t":"code","b":[149],"m":"sub","o":"l"},{"a":47121,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":47122,"t":"code","b":[120],"m":"ld","o":"a,b","x":[47108,47115]},{"a":47123,"t":"code","b":[167],"m":"and","o":"a"},{"a":47124,"t":"code","b":[200],"m":"ret","o":"z"},{"a":47125,"t":"code","b":[101],"m":"ld","o":"h,l"},{"a":47126,"t":"code","b":[107],"m":"ld","o":"l,e"},{"a":47127,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":47129,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":47131,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":47133,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":47135,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":47137,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":47139,"t":"code","b":[62,240],"m":"ld","o":"a,$F0"},{"a":47141,"t":"code","b":[180],"m":"or","o":"h"},{"a":47142,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":47143,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":47144,"t":"code","b":[202,47,185],"m":"jp","oa":47407,"o":"z,$B92F"},{"a":47147,"t":"code","b":[62,119],"m":"ld","o":"a,$77"},{"a":47149,"t":"code","b":[50,213,184],"m":"ld","oa":47317,"o":"($B8D5),a"},{"a":47152,"t":"code","b":[50,247,184],"m":"ld","oa":47351,"o":"($B8F7),a"},{"a":47155,"t":"code","b":[50,24,185],"m":"ld","oa":47384,"o":"($B918),a"},{"a":47158,"t":"code","b":[50,42,185],"m":"ld","oa":47402,"o":"($B92A),a"},{"a":47161,"t":"code","b":[21],"m":"dec","o":"d"},{"a":47162,"t":"code","b":[240],"m":"ret","o":"p"},{"a":47163,"t":"code","b":[20],"m":"inc","o":"d"},{"a":47164,"t":"code","b":[32,32],"m":"jr","oa":47198,"o":"nz,$B85E"},{"a":47166,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":47167,"t":"code","b":[198,24],"m":"add","o":"a,$18"},{"a":47169,"t":"code","b":[48,63],"m":"jr","oa":47234,"o":"nc,$B882"},{"a":47171,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":47173,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":47175,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":47177,"t":"code","b":[60],"m":"inc","o":"a"},{"a":47178,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47179,"t":"code","b":[175],"m":"xor","o":"a"},{"a":47180,"t":"code","b":[50,42,185],"m":"ld","oa":47402,"o":"($B92A),a"},{"a":47183,"t":"code","b":[13],"m":"dec","o":"c"},{"a":47184,"t":"code","b":[40,48],"m":"jr","oa":47234,"o":"z,$B882"},{"a":47186,"t":"code","b":[50,24,185],"m":"ld","oa":47384,"o":"($B918),a"},{"a":47189,"t":"code","b":[13],"m":"dec","o":"c"},{"a":47190,"t":"code","b":[40,42],"m":"jr","oa":47234,"o":"z,$B882"},{"a":47192,"t":"code","b":[50,247,184],"m":"ld","oa":47351,"o":"($B8F7),a"},{"a":47195,"t":"code","b":[195,130,184],"m":"jp","oa":47234,"o":"$B882"},{"a":47198,"t":"code","b":[20],"m":"inc","o":"d","x":[47164]},{"a":47199,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":47200,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":47201,"t":"code","b":[17,224,255],"m":"ld","o":"de,$FFE0"},{"a":47204,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":47205,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":47206,"t":"code","b":[47],"m":"cpl"},{"a":47207,"t":"code","b":[254,24],"m":"cp","o":"$18"},{"a":47209,"t":"code","b":[208],"m":"ret","o":"nc"},{"a":47210,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":47212,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":47214,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":47216,"t":"code","b":[60],"m":"inc","o":"a"},{"a":47217,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47218,"t":"code","b":[175],"m":"xor","o":"a"},{"a":47219,"t":"code","b":[50,213,184],"m":"ld","oa":47317,"o":"($B8D5),a"},{"a":47222,"t":"code","b":[13],"m":"dec","o":"c"},{"a":47223,"t":"code","b":[40,9],"m":"jr","oa":47234,"o":"z,$B882"},{"a":47225,"t":"code","b":[50,247,184],"m":"ld","oa":47351,"o":"($B8F7),a"},{"a":47228,"t":"code","b":[13],"m":"dec","o":"c"},{"a":47229,"t":"code","b":[40,3],"m":"jr","oa":47234,"o":"z,$B882"},{"a":47231,"t":"code","b":[50,24,185],"m":"ld","oa":47384,"o":"($B918),a"},{"a":47234,"t":"code","b":[123],"m":"ld","o":"a,e","x":[47169,47184,47190,47195,47223,47229]},{"a":47235,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":47237,"t":"code","b":[194,187,184],"m":"jp","oa":47291,"o":"nz,$B8BB"},{"a":47240,"t":"code","b":[58,213,184],"m":"ld","oa":47317,"o":"a,($B8D5)"},{"a":47243,"t":"code","b":[50,164,184],"m":"ld","oa":47268,"o":"($B8A4),a"},{"a":47246,"t":"code","b":[58,247,184],"m":"ld","oa":47351,"o":"a,($B8F7)"},{"a":47249,"t":"code","b":[50,173,184],"m":"ld","oa":47277,"o":"($B8AD),a"},{"a":47252,"t":"code","b":[58,24,185],"m":"ld","oa":47384,"o":"a,($B918)"},{"a":47255,"t":"code","b":[50,182,184],"m":"ld","oa":47286,"o":"($B8B6),a"},{"a":47258,"t":"code","b":[17,30,0],"m":"ld","o":"de,$001E"},{"a":47261,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[47288]},{"a":47262,"t":"code","b":[217],"m":"exx"},{"a":47263,"t":"code","b":[182],"m":"or","o":"(hl)"},{"a":47264,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47265,"t":"code","b":[174],"m":"xor","o":"(hl)"},{"a":47266,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47267,"t":"code","b":[217],"m":"exx"},{"a":47268,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[47243]},{"a":47269,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47270,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":47271,"t":"code","b":[217],"m":"exx"},{"a":47272,"t":"code","b":[182],"m":"or","o":"(hl)"},{"a":47273,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47274,"t":"code","b":[174],"m":"xor","o":"(hl)"},{"a":47275,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47276,"t":"code","b":[217],"m":"exx"},{"a":47277,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[47249]},{"a":47278,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47279,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":47280,"t":"code","b":[217],"m":"exx"},{"a":47281,"t":"code","b":[182],"m":"or","o":"(hl)"},{"a":47282,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47283,"t":"code","b":[174],"m":"xor","o":"(hl)"},{"a":47284,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47285,"t":"code","b":[217],"m":"exx"},{"a":47286,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[47255]},{"a":47287,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":47288,"t":"code","b":[16,227],"m":"djnz","oa":47261,"o":"$B89D"},{"a":47290,"t":"code","b":[201],"m":"ret"},{"a":47291,"t":"code","b":[217],"m":"exx","x":[47237]},{"a":47292,"t":"code","b":[198,90],"m":"add","o":"a,$5A"},{"a":47294,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":47295,"t":"code","b":[217],"m":"exx"},{"a":47296,"t":"code","b":[17,29,0],"m":"ld","o":"de,$001D"},{"a":47299,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[47404]},{"a":47300,"t":"code","b":[217],"m":"exx"},{"a":47301,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47302,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":47303,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47304,"t":"code","b":[67],"m":"ld","o":"b,e"},{"a":47305,"t":"code","b":[203,195],"m":"set","o":"0,e"},{"a":47307,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47308,"t":"code","b":[177],"m":"or","o":"c"},{"a":47309,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47310,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":47311,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47312,"t":"code","b":[203,195],"m":"set","o":"0,e"},{"a":47314,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47315,"t":"code","b":[169],"m":"xor","o":"c"},{"a":47316,"t":"code","b":[217],"m":"exx"},{"a":47317,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[47149,47219,47240]},{"a":47318,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47319,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":47320,"t":"code","b":[217],"m":"exx"},{"a":47321,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47322,"t":"code","b":[88],"m":"ld","o":"e,b"},{"a":47323,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":47325,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47326,"t":"code","b":[177],"m":"or","o":"c"},{"a":47327,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47328,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":47329,"t":"code","b":[67],"m":"ld","o":"b,e"},{"a":47330,"t":"code","b":[203,195],"m":"set","o":"0,e"},{"a":47332,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47333,"t":"code","b":[177],"m":"or","o":"c"},{"a":47334,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47335,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":47336,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":47337,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":47339,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47340,"t":"code","b":[169],"m":"xor","o":"c"},{"a":47341,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47342,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47343,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47344,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":47345,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47346,"t":"code","b":[203,195],"m":"set","o":"0,e"},{"a":47348,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47349,"t":"code","b":[169],"m":"xor","o":"c"},{"a":47350,"t":"code","b":[217],"m":"exx"},{"a":47351,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[47152,47192,47225,47246]},{"a":47352,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47353,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":47354,"t":"code","b":[217],"m":"exx"},{"a":47355,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47356,"t":"code","b":[88],"m":"ld","o":"e,b"},{"a":47357,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":47359,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47360,"t":"code","b":[177],"m":"or","o":"c"},{"a":47361,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47362,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":47363,"t":"code","b":[67],"m":"ld","o":"b,e"},{"a":47364,"t":"code","b":[203,195],"m":"set","o":"0,e"},{"a":47366,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47367,"t":"code","b":[177],"m":"or","o":"c"},{"a":47368,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47369,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":47370,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":47371,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":47373,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47374,"t":"code","b":[169],"m":"xor","o":"c"},{"a":47375,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47376,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47377,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47378,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":47379,"t":"code","b":[203,195],"m":"set","o":"0,e"},{"a":47381,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47382,"t":"code","b":[169],"m":"xor","o":"c"},{"a":47383,"t":"code","b":[217],"m":"exx"},{"a":47384,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[47155,47186,47231,47252]},{"a":47385,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47386,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":47387,"t":"code","b":[217],"m":"exx"},{"a":47388,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47389,"t":"code","b":[88],"m":"ld","o":"e,b"},{"a":47390,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":47392,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47393,"t":"code","b":[177],"m":"or","o":"c"},{"a":47394,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47395,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":47396,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47397,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":47399,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47400,"t":"code","b":[169],"m":"xor","o":"c"},{"a":47401,"t":"code","b":[217],"m":"exx"},{"a":47402,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[47158,47180]},{"a":47403,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":47404,"t":"code","b":[16,149],"m":"djnz","oa":47299,"o":"$B8C3"},{"a":47406,"t":"code","b":[201],"m":"ret"},{"a":47407,"t":"code","b":[62,119],"m":"ld","o":"a,$77","x":[47144]},{"a":47409,"t":"code","b":[50,186,185],"m":"ld","oa":47546,"o":"($B9BA),a"},{"a":47412,"t":"code","b":[50,219,185],"m":"ld","oa":47579,"o":"($B9DB),a"},{"a":47415,"t":"code","b":[50,237,185],"m":"ld","oa":47597,"o":"($B9ED),a"},{"a":47418,"t":"code","b":[21],"m":"dec","o":"d"},{"a":47419,"t":"code","b":[240],"m":"ret","o":"p"},{"a":47420,"t":"code","b":[20],"m":"inc","o":"d"},{"a":47421,"t":"code","b":[32,26],"m":"jr","oa":47449,"o":"nz,$B959"},{"a":47423,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":47424,"t":"code","b":[198,16],"m":"add","o":"a,$10"},{"a":47426,"t":"code","b":[48,51],"m":"jr","oa":47479,"o":"nc,$B977"},{"a":47428,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":47430,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":47432,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":47434,"t":"code","b":[60],"m":"inc","o":"a"},{"a":47435,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47436,"t":"code","b":[175],"m":"xor","o":"a"},{"a":47437,"t":"code","b":[50,237,185],"m":"ld","oa":47597,"o":"($B9ED),a"},{"a":47440,"t":"code","b":[13],"m":"dec","o":"c"},{"a":47441,"t":"code","b":[40,36],"m":"jr","oa":47479,"o":"z,$B977"},{"a":47443,"t":"code","b":[50,219,185],"m":"ld","oa":47579,"o":"($B9DB),a"},{"a":47446,"t":"code","b":[195,119,185],"m":"jp","oa":47479,"o":"$B977"},{"a":47449,"t":"code","b":[20],"m":"inc","o":"d","x":[47421]},{"a":47450,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":47451,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":47452,"t":"code","b":[17,224,255],"m":"ld","o":"de,$FFE0"},{"a":47455,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":47456,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":47457,"t":"code","b":[47],"m":"cpl"},{"a":47458,"t":"code","b":[254,16],"m":"cp","o":"$10"},{"a":47460,"t":"code","b":[208],"m":"ret","o":"nc"},{"a":47461,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":47463,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":47465,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":47467,"t":"code","b":[60],"m":"inc","o":"a"},{"a":47468,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47469,"t":"code","b":[175],"m":"xor","o":"a"},{"a":47470,"t":"code","b":[50,186,185],"m":"ld","oa":47546,"o":"($B9BA),a"},{"a":47473,"t":"code","b":[13],"m":"dec","o":"c"},{"a":47474,"t":"code","b":[40,3],"m":"jr","oa":47479,"o":"z,$B977"},{"a":47476,"t":"code","b":[50,219,185],"m":"ld","oa":47579,"o":"($B9DB),a"},{"a":47479,"t":"code","b":[123],"m":"ld","o":"a,e","x":[47426,47441,47446,47474]},{"a":47480,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":47482,"t":"code","b":[32,36],"m":"jr","oa":47520,"o":"nz,$B9A0"},{"a":47484,"t":"code","b":[58,186,185],"m":"ld","oa":47546,"o":"a,($B9BA)"},{"a":47487,"t":"code","b":[50,146,185],"m":"ld","oa":47506,"o":"($B992),a"},{"a":47490,"t":"code","b":[58,219,185],"m":"ld","oa":47579,"o":"a,($B9DB)"},{"a":47493,"t":"code","b":[50,155,185],"m":"ld","oa":47515,"o":"($B99B),a"},{"a":47496,"t":"code","b":[17,31,0],"m":"ld","o":"de,$001F"},{"a":47499,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[47517]},{"a":47500,"t":"code","b":[217],"m":"exx"},{"a":47501,"t":"code","b":[182],"m":"or","o":"(hl)"},{"a":47502,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47503,"t":"code","b":[174],"m":"xor","o":"(hl)"},{"a":47504,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47505,"t":"code","b":[217],"m":"exx"},{"a":47506,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[47487]},{"a":47507,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47508,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":47509,"t":"code","b":[217],"m":"exx"},{"a":47510,"t":"code","b":[182],"m":"or","o":"(hl)"},{"a":47511,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47512,"t":"code","b":[174],"m":"xor","o":"(hl)"},{"a":47513,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47514,"t":"code","b":[217],"m":"exx"},{"a":47515,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[47493]},{"a":47516,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":47517,"t":"code","b":[16,236],"m":"djnz","oa":47499,"o":"$B98B"},{"a":47519,"t":"code","b":[201],"m":"ret"},{"a":47520,"t":"code","b":[217],"m":"exx","x":[47482]},{"a":47521,"t":"code","b":[198,90],"m":"add","o":"a,$5A"},{"a":47523,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":47524,"t":"code","b":[217],"m":"exx"},{"a":47525,"t":"code","b":[17,30,0],"m":"ld","o":"de,$001E"},{"a":47528,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[47599]},{"a":47529,"t":"code","b":[217],"m":"exx"},{"a":47530,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47531,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":47532,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47533,"t":"code","b":[67],"m":"ld","o":"b,e"},{"a":47534,"t":"code","b":[203,195],"m":"set","o":"0,e"},{"a":47536,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47537,"t":"code","b":[177],"m":"or","o":"c"},{"a":47538,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47539,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":47540,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47541,"t":"code","b":[203,195],"m":"set","o":"0,e"},{"a":47543,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47544,"t":"code","b":[169],"m":"xor","o":"c"},{"a":47545,"t":"code","b":[217],"m":"exx"},{"a":47546,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[47409,47470,47484]},{"a":47547,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47548,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":47549,"t":"code","b":[217],"m":"exx"},{"a":47550,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47551,"t":"code","b":[88],"m":"ld","o":"e,b"},{"a":47552,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":47554,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47555,"t":"code","b":[177],"m":"or","o":"c"},{"a":47556,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47557,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":47558,"t":"code","b":[67],"m":"ld","o":"b,e"},{"a":47559,"t":"code","b":[203,195],"m":"set","o":"0,e"},{"a":47561,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47562,"t":"code","b":[177],"m":"or","o":"c"},{"a":47563,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47564,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":47565,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":47566,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":47568,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47569,"t":"code","b":[169],"m":"xor","o":"c"},{"a":47570,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47571,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47572,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47573,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":47574,"t":"code","b":[203,195],"m":"set","o":"0,e"},{"a":47576,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47577,"t":"code","b":[169],"m":"xor","o":"c"},{"a":47578,"t":"code","b":[217],"m":"exx"},{"a":47579,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[47412,47443,47476,47490]},{"a":47580,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47581,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":47582,"t":"code","b":[217],"m":"exx"},{"a":47583,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47584,"t":"code","b":[88],"m":"ld","o":"e,b"},{"a":47585,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":47587,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47588,"t":"code","b":[177],"m":"or","o":"c"},{"a":47589,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":47590,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":47591,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":47593,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47594,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47595,"t":"code","b":[169],"m":"xor","o":"c"},{"a":47596,"t":"code","b":[217],"m":"exx"},{"a":47597,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[47415,47437]},{"a":47598,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":47599,"t":"code","b":[16,183],"m":"djnz","oa":47528,"o":"$B9A8"},{"a":47601,"t":"code","b":[201],"m":"ret"},{"a":47602,"l":"clear_pixel","c":"Clears one pixel of the frame buffer. HL is the row and DE the column. It returns at once unless D is zero, H is zero and bit 7 of L is clear, which together are the test for a point inside the 256 by 128 buffer. It then forms $F000 + row * 32 + column / 8 and ANDs that byte with the mask at $8F08 + (column AND 7), one of the eight bytes $7F, $BF, $DF, $EF, $F7, $FB, $FD, $FE. Five callers: $EB76, in a loop that scatters 7 to 14 cleared pixels over the square of each cell on the screen, and $BC28, $BC34, $BC40 and $BC4C, which take one pixel out of each corner of the floppy disk.","t":"code","b":[122],"m":"ld","o":"a,d","x":[48168,48180,48192,48204,60278]},{"a":47603,"t":"code","b":[167],"m":"and","o":"a"},{"a":47604,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":47605,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":47606,"t":"code","b":[167],"m":"and","o":"a"},{"a":47607,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":47608,"t":"code","b":[203,125],"m":"bit","o":"7,l"},{"a":47610,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":47611,"t":"code","b":[101],"m":"ld","o":"h,l"},{"a":47612,"t":"code","b":[107],"m":"ld","o":"l,e"},{"a":47613,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":47615,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":47617,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":47619,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":47621,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":47623,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":47625,"t":"code","b":[62,240],"m":"ld","o":"a,$F0"},{"a":47627,"t":"code","b":[180],"m":"or","o":"h"},{"a":47628,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":47629,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":47630,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":47632,"t":"code","b":[203,223],"m":"set","o":"3,a"},{"a":47634,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":47635,"t":"code","b":[22,143],"m":"ld","o":"d,$8F"},{"a":47637,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":47638,"t":"code","b":[166],"m":"and","o":"(hl)"},{"a":47639,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":47640,"t":"code","b":[201],"m":"ret"},{"a":47641,"l":"fill_quad_script","c":"Draws a run of filled quadrilaterals from the script at BC. Each one is handed to $9819, which fills the shape whose corners are the four points at $801B/$801D (call it A), $801F/$8021 (B), $8023/$8025 (the pen) and $8027/$8029 (D), with the pattern word at $80BE. A zero byte ends the script. An even first byte starts a five-byte command: bytes 0 and 1 move the pen down and right by four times their low seven bits read as a signed number (bit 7 is ignored), and three corner bytes then give D, A and B as offsets from the pen. An odd first byte starts a two-byte command that carries the strip on: the pen takes the old A, D takes the old B, and the two bytes give the new A and B. In a corner byte the high nibble is the x offset and the low nibble the y offset, and in each nibble bits 1-3 are the size in steps of 8 pixels, 0 to 56, and bit 0 makes it negative. $9819 exchanges A with B and the pen with D when A is higher on the screen than B, and the next command starts from the points as it left them. Called from $BB62 with the script at $BAAE and jumped to from $BCF2 with the one at $BAF9; the third reference is its own loop at $BA87.","t":"code","b":[10],"m":"ld","o":"a,(bc)","x":[47751,47970,48370]},{"a":47642,"t":"code","b":[167],"m":"and","o":"a"},{"a":47643,"t":"code","b":[200],"m":"ret","o":"z"},{"a":47644,"t":"code","b":[203,71],"m":"bit","o":"0,a"},{"a":47646,"t":"code","b":[32,48],"m":"jr","oa":47696,"o":"nz,$BA50"},{"a":47648,"t":"code","b":[3],"m":"inc","o":"bc"},{"a":47649,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":47652,"t":"code","b":[135],"m":"add","o":"a,a"},{"a":47653,"t":"code","b":[135],"m":"add","o":"a,a"},{"a":47654,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":47655,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":47657,"t":"code","b":[48,1],"m":"jr","oa":47660,"o":"nc,$BA2C"},{"a":47659,"t":"code","b":[21],"m":"dec","o":"d"},{"a":47660,"t":"code","b":[25],"m":"add","o":"hl,de","x":[47657]},{"a":47661,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":47664,"t":"code","b":[42,35,128],"m":"ld","oa":32803,"o":"hl,(shape_x2)"},{"a":47667,"t":"code","b":[10],"m":"ld","o":"a,(bc)"},{"a":47668,"t":"code","b":[3],"m":"inc","o":"bc"},{"a":47669,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":47671,"t":"code","b":[135],"m":"add","o":"a,a"},{"a":47672,"t":"code","b":[135],"m":"add","o":"a,a"},{"a":47673,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":47674,"t":"code","b":[48,1],"m":"jr","oa":47677,"o":"nc,$BA3D"},{"a":47676,"t":"code","b":[21],"m":"dec","o":"d"},{"a":47677,"t":"code","b":[25],"m":"add","o":"hl,de","x":[47674]},{"a":47678,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":47681,"t":"code","b":[205,138,186],"m":"call","oa":47754,"o":"script_corner_y"},{"a":47684,"t":"code","b":[34,41,128],"m":"ld","oa":32809,"o":"(shape_y3),hl"},{"a":47687,"t":"code","b":[205,159,186],"m":"call","oa":47775,"o":"script_corner_x"},{"a":47690,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":47693,"t":"code","b":[3],"m":"inc","o":"bc"},{"a":47694,"t":"code","b":[24,24],"m":"jr","oa":47720,"o":"$BA68"},{"a":47696,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)","x":[47646]},{"a":47699,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":47702,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":47705,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":47708,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":47711,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":47714,"t":"code","b":[42,33,128],"m":"ld","oa":32801,"o":"hl,(shape_y1)"},{"a":47717,"t":"code","b":[34,41,128],"m":"ld","oa":32809,"o":"(shape_y3),hl"},{"a":47720,"t":"code","b":[205,138,186],"m":"call","oa":47754,"o":"script_corner_y","x":[47694]},{"a":47723,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":47726,"t":"code","b":[205,159,186],"m":"call","oa":47775,"o":"script_corner_x"},{"a":47729,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":47732,"t":"code","b":[3],"m":"inc","o":"bc"},{"a":47733,"t":"code","b":[205,138,186],"m":"call","oa":47754,"o":"script_corner_y"},{"a":47736,"t":"code","b":[34,33,128],"m":"ld","oa":32801,"o":"(shape_y1),hl"},{"a":47739,"t":"code","b":[205,159,186],"m":"call","oa":47775,"o":"script_corner_x"},{"a":47742,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":47745,"t":"code","b":[3],"m":"inc","o":"bc"},{"a":47746,"t":"code","b":[197],"m":"push","o":"bc"},{"a":47747,"t":"code","b":[205,25,152],"m":"call","oa":38937,"o":"fill_quad"},{"a":47750,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":47751,"t":"code","b":[195,25,186],"m":"jp","oa":47641,"o":"fill_quad_script"},{"a":47754,"l":"script_corner_y","c":"Returns in HL the pen row at $8025 plus the y offset in the low nibble of the script byte at (BC): bits 1-3 times 8, negated when bit 0 is set. BC is not moved. The decoding from $BA8E on is shared with $BA9F. Called three times by $BA19, from $BA41, $BA68 and $BA75.","t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)","x":[47681,47720,47733]},{"a":47757,"t":"code","b":[10],"m":"ld","o":"a,(bc)"},{"a":47758,"t":"code","b":[87],"m":"ld","o":"d,a","x":[47787]},{"a":47759,"t":"code","b":[230,14],"m":"and","o":"$0E"},{"a":47761,"t":"code","b":[135],"m":"add","o":"a,a"},{"a":47762,"t":"code","b":[135],"m":"add","o":"a,a"},{"a":47763,"t":"code","b":[203,66],"m":"bit","o":"0,d"},{"a":47765,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":47767,"t":"code","b":[40,3],"m":"jr","oa":47772,"o":"z,$BA9C"},{"a":47769,"t":"code","b":[21],"m":"dec","o":"d"},{"a":47770,"t":"code","b":[237,68],"m":"neg"},{"a":47772,"t":"code","b":[95],"m":"ld","o":"e,a","x":[47767]},{"a":47773,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":47774,"t":"code","b":[201],"m":"ret"},{"a":47775,"l":"script_corner_x","c":"Returns in HL the pen column at $8023 plus the x offset in the high nibble of the script byte at (BC): it shifts the byte right four places and jumps into $BA8E to decode it as $BA8A does. Called three times by $BA19, from $BA47, $BA6E and $BA7B.","t":"code","b":[42,35,128],"m":"ld","oa":32803,"o":"hl,(shape_x2)","x":[47687,47726,47739]},{"a":47778,"t":"code","b":[10],"m":"ld","o":"a,(bc)"},{"a":47779,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":47781,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":47783,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":47785,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":47787,"t":"code","b":[24,225],"m":"jr","oa":47758,"o":"$BA8E"},{"a":47789,"l":"disk_lift_counter","c":"Progress of the animation that closes a completed game, in which a hand comes down the screen and carries the floppy disk off. $7614 sets it to zero when a game starts, and while it is zero $BB06 draws the disk with no hand. The loop at $78EF adds 1 a frame while bit 7 is clear and subtracts 3 a frame once bit 7 is set, and leaves when the sum reaches $80 or the difference falls below it. $BB06 uses the low seven bits as the row of the pen for the hand script, sets bit 7 ($BB25) once that row is past the top edge of the disk, and from then on draws the disk 13 rows above the pen row, so it rises with the hand. Seven references: written at $7614, $7901 and $BB25, read at $78EF, $BB0C, $BB30 and $BCD7.","t":"byte","b":[0],"x":[30228,30959,30977,47884,47909,47920,48343]},{"a":47790,"l":"hand_quad_script","c":"The script $BA19 draws the hand from: 54 bytes, eight five-byte commands and seven two-byte ones, and the zero that ends it at $BAE4. They make 15 quadrilaterals: four fingers of three pieces each, pointing down, and three pieces above them for the palm and forearm. With the pen started at column 127 the shape spans columns 71 to 199 and runs from 88 rows above the starting pen row to 40 below it. Read only through the pointer loaded at $BB5F. The 20 zero bytes from $BAE5 to $BAF8 are read by nothing.","t":"byte","b":[2,242,32,5,69,41,103,252]},{"a":47798,"t":"byte","b":[2,66,41,103,14,3,32,7]},{"a":47806,"t":"byte","b":[71,39,103,41,103,12,3,32]},{"a":47814,"t":"byte","b":[5,69,7,71,9,73,6,8]},{"a":47822,"t":"byte","b":[32,53,37,5,69,55,39,250]},{"a":47830,"t":"byte","b":[248,163,15,143,254,246,224,45]},{"a":47838,"t":"byte","b":[173,4,10,160,181,165,0,0]},{"a":47846,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":47854,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":47862,"t":"byte","b":[0,0,0]},{"a":47865,"l":"hand_second_quad_script","c":"A second script for $BA19, 12 bytes and the zero at $BB05: a five-byte command, a two-byte one and another five-byte one. $BB06 draws it last, after the disk, where the script at $BAAE is drawn before it. Of its three quadrilaterals $9819 fills only the first, a slanted one 32 pixels across, columns 103 to 135, from 48 rows to 16 rows above the starting pen row; that puts its lowest row 3 above the top row of the lifted disk, over the lower pieces of the hand. The other two hand $9819 corners in an order it turns down, and it returns without drawing them. Read only through the pointer loaded at $BCEF.","t":"byte","b":[252,254,67,87,41,89,87,252]},{"a":47873,"t":"byte","b":[254,89,9,103,0]},{"a":47878,"l":"draw_floppy_disk","c":"Draws a board item of type $F6, the floppy disk whose touch ends the game: the type dispatch jumps here from $89FB, the only reference. It works from the item's projected top face, left and right columns at $8013 and $8015 and top and bottom rows at $8017 and $8019. Five rectangles go through the fill at $8E13: the body in pattern word $00FF as three pieces that leave two pixels off each corner, a band of pattern $FF55 from 5 columns inside the left edge to 5 inside the right and from row top+1 to top+7, and a label block of pattern $0000 over the same columns from top+9 to top+28. $B9F2 then clears the pixel one step in from each corner. Four pictures follow, placed from the centre of the face (cx, cy) and not scaled: the 17-row hub at (cx-8, cy-4), taken from $C75F or $C7C5 as bit 0 of the frame counter at $8059 is 0 or 1; the 21-row slot from $C82B at (cx-4, cy+18); and the 8-row label halves, $C87F at (cx-24, top+16) and $C8AF at (cx, top+16). When the byte at $BAAD is not zero the routine also draws the hand. It puts the pen for $BA19 at column 127 and the row in the low seven bits of $BAAD, sets bit 7 of $BAAD once that row is past the disk's top row, moves the disk up 13 rows (bit 7 clear) or to 13 rows above the pen row (bit 7 set), draws the script at $BAAE in pattern $AAAA before the disk, fills from the disk's left column to 2 past its right and from 2 rows above it to row 128 with pattern $0000, and draws the script at $BAF9 after the disk. The NOP at $BC7A does nothing.","t":"code","b":[33,170,170],"m":"ld","o":"hl,$AAAA","x":[35323]},{"a":47881,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":47884,"t":"code","b":[58,173,186],"m":"ld","oa":47789,"o":"a,(disk_lift_counter)"},{"a":47887,"t":"code","b":[167],"m":"and","o":"a"},{"a":47888,"t":"code","b":[202,138,187],"m":"jp","oa":48010,"o":"z,$BB8A"},{"a":47891,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":47892,"t":"code","b":[203,189],"m":"res","o":"7,l"},{"a":47894,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":47896,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":47899,"t":"code","b":[58,23,128],"m":"ld","oa":32791,"o":"a,(top_rect_y1)"},{"a":47902,"t":"code","b":[149],"m":"sub","o":"l"},{"a":47903,"t":"code","b":[242,40,187],"m":"jp","oa":47912,"o":"p,$BB28"},{"a":47906,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":47907,"t":"code","b":[203,255],"m":"set","o":"7,a"},{"a":47909,"t":"code","b":[50,173,186],"m":"ld","oa":47789,"o":"(disk_lift_counter),a"},{"a":47912,"t":"code","b":[46,127],"m":"ld","o":"l,$7F","x":[47903]},{"a":47914,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":47917,"t":"code","b":[17,243,255],"m":"ld","o":"de,$FFF3"},{"a":47920,"t":"code","b":[58,173,186],"m":"ld","oa":47789,"o":"a,(disk_lift_counter)"},{"a":47923,"t":"code","b":[203,127],"m":"bit","o":"7,a"},{"a":47925,"t":"code","b":[40,26],"m":"jr","oa":47953,"o":"z,$BB51"},{"a":47927,"t":"code","b":[230,127],"m":"and","o":"$7F"},{"a":47929,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":47930,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":47932,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":47933,"t":"code","b":[237,75,23,128],"m":"ld","oa":32791,"o":"bc,(top_rect_y1)"},{"a":47937,"t":"code","b":[34,23,128],"m":"ld","oa":32791,"o":"(top_rect_y1),hl"},{"a":47940,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":47941,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":47944,"t":"code","b":[167],"m":"and","o":"a"},{"a":47945,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":47947,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":47948,"t":"code","b":[34,25,128],"m":"ld","oa":32793,"o":"(top_rect_y2),hl"},{"a":47951,"t":"code","b":[24,14],"m":"jr","oa":47967,"o":"$BB5F"},{"a":47953,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)","x":[47925]},{"a":47956,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":47957,"t":"code","b":[34,23,128],"m":"ld","oa":32791,"o":"(top_rect_y1),hl"},{"a":47960,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":47963,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":47964,"t":"code","b":[34,25,128],"m":"ld","oa":32793,"o":"(top_rect_y2),hl"},{"a":47967,"t":"code","b":[1,174,186],"m":"ld","o":"bc,$BAAE","x":[47951]},{"a":47970,"t":"code","b":[205,25,186],"m":"call","oa":47641,"o":"fill_quad_script"},{"a":47973,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":47976,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":47979,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":47982,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47983,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":47984,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":47987,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":47990,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":47991,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":47992,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":47995,"t":"code","b":[33,128,0],"m":"ld","o":"hl,$0080"},{"a":47998,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":48001,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":48004,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":48007,"t":"code","b":[205,19,142],"m":"call","oa":36371,"o":"draw_rectangle"},{"a":48010,"t":"code","b":[33,255,0],"m":"ld","o":"hl,$00FF","x":[47888]},{"a":48013,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":48016,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":48019,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":48022,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":48025,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":48028,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":48031,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48032,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48033,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":48036,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":48039,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":48040,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":48041,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":48044,"t":"code","b":[205,19,142],"m":"call","oa":36371,"o":"draw_rectangle"},{"a":48047,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":48050,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48051,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48052,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":48055,"t":"code","b":[42,21,128],"m":"ld","oa":32789,"o":"hl,(top_rect_x2)"},{"a":48058,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":48059,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":48060,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":48063,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":48066,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":48069,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":48070,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":48073,"t":"code","b":[205,19,142],"m":"call","oa":36371,"o":"draw_rectangle"},{"a":48076,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":48079,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":48082,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48083,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":48086,"t":"code","b":[205,19,142],"m":"call","oa":36371,"o":"draw_rectangle"},{"a":48089,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":48092,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":48095,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":48098,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48099,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48100,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48101,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":48104,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":48107,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":48108,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":48109,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":48110,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":48113,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":48116,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":48119,"t":"code","b":[1,6,0],"m":"ld","o":"bc,$0006"},{"a":48122,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":48123,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":48126,"t":"code","b":[33,85,255],"m":"ld","o":"hl,$FF55"},{"a":48129,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":48132,"t":"code","b":[205,19,142],"m":"call","oa":36371,"o":"draw_rectangle"},{"a":48135,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":48138,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48139,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48140,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":48143,"t":"code","b":[1,19,0],"m":"ld","o":"bc,$0013"},{"a":48146,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":48147,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":48150,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":48153,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":48156,"t":"code","b":[205,19,142],"m":"call","oa":36371,"o":"draw_rectangle"},{"a":48159,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":48162,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48163,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":48167,"t":"code","b":[19],"m":"inc","o":"de"},{"a":48168,"t":"code","b":[205,242,185],"m":"call","oa":47602,"o":"clear_pixel"},{"a":48171,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":48174,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48175,"t":"code","b":[237,91,21,128],"m":"ld","oa":32789,"o":"de,(top_rect_x2)"},{"a":48179,"t":"code","b":[27],"m":"dec","o":"de"},{"a":48180,"t":"code","b":[205,242,185],"m":"call","oa":47602,"o":"clear_pixel"},{"a":48183,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":48186,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":48187,"t":"code","b":[237,91,19,128],"m":"ld","oa":32787,"o":"de,(top_rect_x1)"},{"a":48191,"t":"code","b":[19],"m":"inc","o":"de"},{"a":48192,"t":"code","b":[205,242,185],"m":"call","oa":47602,"o":"clear_pixel"},{"a":48195,"t":"code","b":[42,25,128],"m":"ld","oa":32793,"o":"hl,(top_rect_y2)"},{"a":48198,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":48199,"t":"code","b":[237,91,21,128],"m":"ld","oa":32789,"o":"de,(top_rect_x2)"},{"a":48203,"t":"code","b":[27],"m":"dec","o":"de"},{"a":48204,"t":"code","b":[205,242,185],"m":"call","oa":47602,"o":"clear_pixel"},{"a":48207,"t":"code","b":[42,19,128],"m":"ld","oa":32787,"o":"hl,(top_rect_x1)"},{"a":48210,"t":"code","b":[237,75,21,128],"m":"ld","oa":32789,"o":"bc,(top_rect_x2)"},{"a":48214,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":48215,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":48217,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":48219,"t":"code","b":[34,43,128],"m":"ld","oa":32811,"o":"(extent_x1),hl"},{"a":48222,"t":"code","b":[1,248,255],"m":"ld","o":"bc,$FFF8"},{"a":48225,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":48226,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":48227,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":48230,"t":"code","b":[237,75,25,128],"m":"ld","oa":32793,"o":"bc,(top_rect_y2)"},{"a":48234,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":48235,"t":"code","b":[203,44],"m":"sra","o":"h"},{"a":48237,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":48239,"t":"code","b":[34,45,128],"m":"ld","oa":32813,"o":"(extent_x2),hl"},{"a":48242,"t":"code","b":[1,252,255],"m":"ld","o":"bc,$FFFC"},{"a":48245,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":48246,"t":"code","b":[217],"m":"exx"},{"a":48247,"t":"code","b":[58,89,128],"m":"ld","oa":32857,"o":"a,(frame_counter)"},{"a":48250,"t":"code","b":[0],"m":"nop"},{"a":48251,"t":"code","b":[203,71],"m":"bit","o":"0,a"},{"a":48253,"t":"code","b":[33,95,199],"m":"ld","o":"hl,$C75F"},{"a":48256,"t":"code","b":[40,3],"m":"jr","oa":48261,"o":"z,$BC85"},{"a":48258,"t":"code","b":[33,197,199],"m":"ld","o":"hl,$C7C5"},{"a":48261,"t":"code","b":[217],"m":"exx","x":[48256]},{"a":48262,"t":"code","b":[6,17],"m":"ld","o":"b,$11"},{"a":48264,"t":"code","b":[205,224,183],"m":"call","oa":47072,"o":"plot_shape_24"},{"a":48267,"t":"code","b":[42,45,128],"m":"ld","oa":32813,"o":"hl,(extent_x2)"},{"a":48270,"t":"code","b":[1,18,0],"m":"ld","o":"bc,$0012"},{"a":48273,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":48274,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":48275,"t":"code","b":[42,43,128],"m":"ld","oa":32811,"o":"hl,(extent_x1)"},{"a":48278,"t":"code","b":[1,252,255],"m":"ld","o":"bc,$FFFC"},{"a":48281,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":48282,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":48283,"t":"code","b":[217],"m":"exx"},{"a":48284,"t":"code","b":[33,43,200],"m":"ld","o":"hl,$C82B"},{"a":48287,"t":"code","b":[217],"m":"exx"},{"a":48288,"t":"code","b":[6,21],"m":"ld","o":"b,$15"},{"a":48290,"t":"code","b":[175],"m":"xor","o":"a"},{"a":48291,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":48292,"t":"code","b":[205,227,183],"m":"call","oa":47075,"o":"plot_shape"},{"a":48295,"t":"code","b":[42,23,128],"m":"ld","oa":32791,"o":"hl,(top_rect_y1)"},{"a":48298,"t":"code","b":[17,16,0],"m":"ld","o":"de,$0010"},{"a":48301,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":48302,"t":"code","b":[34,45,128],"m":"ld","oa":32813,"o":"(extent_x2),hl"},{"a":48305,"t":"code","b":[237,91,43,128],"m":"ld","oa":32811,"o":"de,(extent_x1)"},{"a":48309,"t":"code","b":[217],"m":"exx"},{"a":48310,"t":"code","b":[33,175,200],"m":"ld","o":"hl,$C8AF"},{"a":48313,"t":"code","b":[217],"m":"exx"},{"a":48314,"t":"code","b":[6,8],"m":"ld","o":"b,$08"},{"a":48316,"t":"code","b":[205,224,183],"m":"call","oa":47072,"o":"plot_shape_24"},{"a":48319,"t":"code","b":[42,43,128],"m":"ld","oa":32811,"o":"hl,(extent_x1)"},{"a":48322,"t":"code","b":[17,232,255],"m":"ld","o":"de,$FFE8"},{"a":48325,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":48326,"t":"code","b":[34,43,128],"m":"ld","oa":32811,"o":"(extent_x1),hl"},{"a":48329,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":48330,"t":"code","b":[42,45,128],"m":"ld","oa":32813,"o":"hl,(extent_x2)"},{"a":48333,"t":"code","b":[217],"m":"exx"},{"a":48334,"t":"code","b":[33,127,200],"m":"ld","o":"hl,$C87F"},{"a":48337,"t":"code","b":[217],"m":"exx"},{"a":48338,"t":"code","b":[6,8],"m":"ld","o":"b,$08"},{"a":48340,"t":"code","b":[205,224,183],"m":"call","oa":47072,"o":"plot_shape_24"},{"a":48343,"t":"code","b":[58,173,186],"m":"ld","oa":47789,"o":"a,(disk_lift_counter)"},{"a":48346,"t":"code","b":[167],"m":"and","o":"a"},{"a":48347,"t":"code","b":[200],"m":"ret","o":"z"},{"a":48348,"t":"code","b":[46,127],"m":"ld","o":"l,$7F"},{"a":48350,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":48352,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":48355,"t":"code","b":[165],"m":"and","o":"l"},{"a":48356,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":48357,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":48360,"t":"code","b":[1,170,170],"m":"ld","o":"bc,$AAAA"},{"a":48363,"t":"code","b":[237,67,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),bc"},{"a":48367,"t":"code","b":[1,249,186],"m":"ld","o":"bc,$BAF9"},{"a":48370,"t":"code","b":[195,25,186],"m":"jp","oa":47641,"o":"fill_quad_script"},{"a":48373,"l":"draw_counter_display","c":"Plots the 48 by 16 pixel counter display that $BD12 keeps built at $CC0B: the left half from $CC0B at row HL and column DE, then the right half from $CC6B at the same row and column DE + 24, each as 16 rows of 24-pixel data through $B7E0. Its one caller, $8518, ends the drawer of type-$E0 items and passes the centre of the item's top face less 24 columns and 8 rows, which puts the three digits in the middle of the block's top. The second half is plotted with the two register sets changed over (the address is loaded before an EXX and the position after it), so the routine returns with the set that was the alternate one on entry selected.","t":"code","b":[229],"m":"push","o":"hl","x":[34072]},{"a":48374,"t":"code","b":[213],"m":"push","o":"de"},{"a":48375,"t":"code","b":[217],"m":"exx"},{"a":48376,"t":"code","b":[33,11,204],"m":"ld","o":"hl,$CC0B"},{"a":48379,"t":"code","b":[217],"m":"exx"},{"a":48380,"t":"code","b":[6,16],"m":"ld","o":"b,$10"},{"a":48382,"t":"code","b":[205,224,183],"m":"call","oa":47072,"o":"plot_shape_24"},{"a":48385,"t":"code","b":[33,107,204],"m":"ld","o":"hl,$CC6B"},{"a":48388,"t":"code","b":[217],"m":"exx"},{"a":48389,"t":"code","b":[209],"m":"pop","o":"de"},{"a":48390,"t":"code","b":[33,24,0],"m":"ld","o":"hl,$0018"},{"a":48393,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":48394,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":48395,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":48396,"t":"code","b":[6,16],"m":"ld","o":"b,$10"},{"a":48398,"t":"code","b":[205,224,183],"m":"call","oa":47072,"o":"plot_shape_24"},{"a":48401,"t":"code","b":[201],"m":"ret"},{"a":48402,"l":"build_counter_display","c":"Rebuilds the picture of the three-digit counter in the 192 bytes at $CC0B. A is the hundreds digit, B the tens and C the units. It fills $CC0B-$CCCA with $FF, which as mask and pattern pairs for the plotter means every pixel cleared, then runs $BD3E three times to XOR the lit segments of each digit into the pattern bytes, which leaves those pixels set: the hundreds digit and then the tens digit from the stream at $CCD5 with base $CC0B, the stream pointer running on from the first digit into the second, and the units digit from the stream at $CD6B with base $CC6D. Two callers: $75E5 with all three digits zero when a game starts, and $DEE3 after the counter at $BD6C-$BD6E has been stepped.","t":"code","b":[197],"m":"push","o":"bc","x":[30181,57059]},{"a":48403,"t":"code","b":[33,11,204],"m":"ld","o":"hl,$CC0B"},{"a":48406,"t":"code","b":[17,12,204],"m":"ld","o":"de,$CC0C"},{"a":48409,"t":"code","b":[1,191,0],"m":"ld","o":"bc,$00BF"},{"a":48412,"t":"code","b":[54,255],"m":"ld","o":"(hl),$FF"},{"a":48414,"t":"code","b":[237,176],"m":"ldir"},{"a":48416,"t":"code","b":[17,11,204],"m":"ld","o":"de,$CC0B"},{"a":48419,"t":"code","b":[217],"m":"exx"},{"a":48420,"t":"code","b":[33,213,204],"m":"ld","o":"hl,$CCD5"},{"a":48423,"t":"code","b":[205,62,189],"m":"call","oa":48446,"o":"xor_digit_segments"},{"a":48426,"t":"code","b":[217],"m":"exx"},{"a":48427,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":48428,"t":"code","b":[197],"m":"push","o":"bc"},{"a":48429,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":48430,"t":"code","b":[17,11,204],"m":"ld","o":"de,$CC0B"},{"a":48433,"t":"code","b":[217],"m":"exx"},{"a":48434,"t":"code","b":[205,62,189],"m":"call","oa":48446,"o":"xor_digit_segments"},{"a":48437,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":48438,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":48439,"t":"code","b":[17,109,204],"m":"ld","o":"de,$CC6D"},{"a":48442,"t":"code","b":[217],"m":"exx"},{"a":48443,"t":"code","b":[33,107,205],"m":"ld","o":"hl,$CD6B"},{"a":48446,"l":"xor_digit_segments","c":"Draws one seven-segment digit into a picture buffer. A is the digit: the byte at $CCCB + A is its mask, one bit a segment from bit 7 down. The alternate HL points into a segment stream and the main DE holds the buffer's base address. For each of the seven segments it reads a count and then, when the segment's mask bit is set, steps over that many two-byte entries, or, when the bit is clear, takes each entry as an offset and a byte and XORs the byte into the buffer at base plus offset. The alternate HL is left just past the seventh segment, which is how $BD12 reads two digits from one stream. Called from $BD27 and $BD32 and entered a third time by falling in from $BD3B.","t":"code","b":[217],"m":"exx","x":[48423,48434]},{"a":48447,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":48448,"t":"code","b":[6,0],"m":"ld","o":"b,$00"},{"a":48450,"t":"code","b":[33,203,204],"m":"ld","o":"hl,$CCCB"},{"a":48453,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":48454,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":48455,"t":"code","b":[217],"m":"exx"},{"a":48456,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":48457,"t":"code","b":[6,7],"m":"ld","o":"b,$07"},{"a":48459,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":48461,"t":"code","b":[94],"m":"ld","o":"e,(hl)","x":[48489]},{"a":48462,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48463,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":48465,"t":"code","b":[56,19],"m":"jr","oa":48486,"o":"c,$BD66"},{"a":48467,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[48484]},{"a":48468,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48469,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":48470,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":48471,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48472,"t":"code","b":[217],"m":"exx"},{"a":48473,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":48474,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":48475,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":48476,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":48478,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":48479,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":48480,"t":"code","b":[169],"m":"xor","o":"c"},{"a":48481,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":48482,"t":"code","b":[217],"m":"exx"},{"a":48483,"t":"code","b":[29],"m":"dec","o":"e"},{"a":48484,"t":"code","b":[32,237],"m":"jr","oa":48467,"o":"nz,$BD53"},{"a":48486,"t":"code","b":[203,35],"m":"sla","o":"e","x":[48465]},{"a":48488,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":48489,"t":"code","b":[16,226],"m":"djnz","oa":48461,"o":"$BD4D"},{"a":48491,"t":"code","b":[201],"m":"ret"},{"a":48492,"l":"counter_units","c":"Units digit, 0 to 9, of a three-digit counter that the type-$E0 blocks show on their tops. The word stores at $75D8 and $75DC, which overlap, zero it and the two bytes after it when a game starts. $DEB8 adds one and on reaching ten carries into $BD6D; $DED9 stores the result, and the word load at $DEDC reads it back as the C that $BD12 draws as the right-hand digit. $DEB8 is reached only from $DBDA, in the code that moves type-$F0 and type-$F1 objects. Four references.","t":"byte","b":[0],"x":[30168,57016,57049,57052]},{"a":48493,"l":"counter_tens","c":"Tens digit of the counter at $BD6C: stepped at $DEC0 when the units wrap, stored at $DED5, and loaded with the units by the word load at $DEDC as the B that $BD12 draws in the middle. Three references by address, $75DC, $DEC0 and $DED5.","t":"byte","b":[0],"x":[30172,57024,57045]},{"a":48494,"l":"counter_hundreds","c":"Hundreds digit of the counter at $BD6C: stepped at $DEC8 when the tens wrap, going from 9 back to 0 at $DED0, stored at $DED1 and passed to $BD12 in A at $DEE0 as the left-hand digit. The only thing that zeroes it at the start of a game is the high byte of the word store at $75DC. Three references by address, $DEC8, $DED1 and $DEE0.","t":"byte","b":[0],"x":[57032,57041,57056]},{"a":48495,"l":"raise_item_handler","c":"Record handler that raises a board item. Like the four after it, it is called through the patched CALL at $AF63 while a cell's items are listed for drawing, once for each handler record, with HL at the record: four parameter bytes, the handler's own address at +4/+5 and the tag $F7 at +6, followed from +7 by the seven bytes of the item it drives (height of the top at +7, height of the base at +8, x at +9, x size at +$0A, y at +$0B, y size at +$0C, type at +$0D). This one adds parameter 0 to the top height, holding at $FF if the sum overflows. While the result is below parameter 1 it is stored; once it reaches parameter 1 the top is set to parameter 1 and $BD90 is written into +4/+5, so the item starts down on the next call. Two records on the tape carry it, at $6AB8 (up 5 a call to $DB) and $6D61 (up 3 a call to $A0), and $BD90 puts it back each time one of those items reaches its floor.","t":"code","b":[229],"m":"push","o":"hl","x":[27324,28005,44899]},{"a":48496,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":48498,"t":"code","b":[221,126,7],"m":"ld","o":"a,(ix+$07)"},{"a":48501,"t":"code","b":[134],"m":"add","o":"a,(hl)"},{"a":48502,"t":"code","b":[48,2],"m":"jr","oa":48506,"o":"nc,$BD7A"},{"a":48504,"t":"code","b":[62,255],"m":"ld","o":"a,$FF"},{"a":48506,"t":"code","b":[35],"m":"inc","o":"hl","x":[48502]},{"a":48507,"t":"code","b":[190],"m":"cp","o":"(hl)"},{"a":48508,"t":"code","b":[48,4],"m":"jr","oa":48514,"o":"nc,$BD82"},{"a":48510,"t":"code","b":[221,119,7],"m":"ld","o":"(ix+$07),a"},{"a":48513,"t":"code","b":[201],"m":"ret"},{"a":48514,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[48508]},{"a":48515,"t":"code","b":[221,119,7],"m":"ld","o":"(ix+$07),a"},{"a":48518,"t":"code","b":[33,144,189],"m":"ld","o":"hl,$BD90"},{"a":48521,"t":"code","b":[221,117,4],"m":"ld","o":"(ix+$04),l"},{"a":48524,"t":"code","b":[221,116,5],"m":"ld","o":"(ix+$05),h"},{"a":48527,"t":"code","b":[201],"m":"ret"},{"a":48528,"l":"lower_item_handler","c":"Record handler that lowers a board item: it subtracts parameter 2 from the item's top height at +7, holding at 0 if the difference goes negative, and stores the result while it is not below parameter 3. Otherwise the top is set to parameter 3 and the handler at +4/+5 is replaced. For an item whose type at +$0D is $F4 the new handler is $BE07, and parameter 0 is set to 5 plus the low five bits of the random byte at $E471, the number of calls that item then waits at the bottom. For any other item it is $BD6F, which sends it up again. Seven records on the tape carry it, each one placed just before one of the board's seven type-$F4 items in its cell's list; $BD6F and $BE07 install it when an item reaches the top.","t":"code","b":[229],"m":"push","o":"hl","x":[26130,27176,27451,27975,28100,29335,29783]},{"a":48529,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":48531,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48532,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48533,"t":"code","b":[221,126,7],"m":"ld","o":"a,(ix+$07)"},{"a":48536,"t":"code","b":[150],"m":"sub","o":"(hl)"},{"a":48537,"t":"code","b":[48,2],"m":"jr","oa":48541,"o":"nc,$BD9D"},{"a":48539,"t":"code","b":[62,0],"m":"ld","o":"a,$00"},{"a":48541,"t":"code","b":[35],"m":"inc","o":"hl","x":[48537]},{"a":48542,"t":"code","b":[190],"m":"cp","o":"(hl)"},{"a":48543,"t":"code","b":[56,4],"m":"jr","oa":48549,"o":"c,$BDA5"},{"a":48545,"t":"code","b":[221,119,7],"m":"ld","o":"(ix+$07),a"},{"a":48548,"t":"code","b":[201],"m":"ret"},{"a":48549,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[48543]},{"a":48550,"t":"code","b":[221,119,7],"m":"ld","o":"(ix+$07),a"},{"a":48553,"t":"code","b":[33,111,189],"m":"ld","o":"hl,$BD6F"},{"a":48556,"t":"code","b":[221,126,13],"m":"ld","o":"a,(ix+$0D)"},{"a":48559,"t":"code","b":[254,244],"m":"cp","o":"$F4"},{"a":48561,"t":"code","b":[40,10],"m":"jr","oa":48573,"o":"z,$BDBD"},{"a":48563,"t":"code","b":[33,111,189],"m":"ld","o":"hl,$BD6F"},{"a":48566,"t":"code","b":[221,117,4],"m":"ld","o":"(ix+$04),l"},{"a":48569,"t":"code","b":[221,116,5],"m":"ld","o":"(ix+$05),h"},{"a":48572,"t":"code","b":[201],"m":"ret"},{"a":48573,"t":"code","b":[33,7,190],"m":"ld","o":"hl,$BE07","x":[48561]},{"a":48576,"t":"code","b":[221,117,4],"m":"ld","o":"(ix+$04),l"},{"a":48579,"t":"code","b":[221,116,5],"m":"ld","o":"(ix+$05),h"},{"a":48582,"t":"code","b":[58,113,228],"m":"ld","oa":58481,"o":"a,($E471)"},{"a":48585,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":48587,"t":"code","b":[198,5],"m":"add","o":"a,$05"},{"a":48589,"t":"code","b":[221,119,0],"m":"ld","o":"(ix+$00),a"},{"a":48592,"t":"code","b":[201],"m":"ret"},{"a":48593,"l":"wave_item_handler","c":"Record handler that moves an item's top height (+7) along a sine wave of the frame counter at $8059. Parameter 0 sets the speed: when positive the counter's low byte is shifted left that many times, when negative the 16-bit counter is shifted right that many times and its low byte taken, when zero the low byte is used as it is. Parameter 1 is added as the phase, $A8C4 looks the angle up in the quarter-wave table at $63C0, $A8D8 multiplies the result by parameter 2, and the high byte of the product, negated in the second half of the cycle, is added to parameter 3. The top therefore swings just under parameter 2 either side of parameter 3. Thirteen records carry it. Twelve have speed 2, swing $32 and centre $50 and differ in phase: each drives one of a row of adjoining blocks in the cells at $6B46, $6BAA and $6BF2, with the phase rising by 10 from block to block in the first two, so each row ripples once every 64 frames. The other, at $6D9B, has 3, 0, $60 and $90.","t":"code","b":[229],"m":"push","o":"hl","x":[27474,27488,27502,27516,27530,27544,27581,27595,27609,27623,27660,27674,28063]},{"a":48594,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":48596,"t":"code","b":[237,91,89,128],"m":"ld","oa":32857,"o":"de,(frame_counter)"},{"a":48600,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":48601,"t":"code","b":[167],"m":"and","o":"a"},{"a":48602,"t":"code","b":[40,18],"m":"jr","oa":48622,"o":"z,$BDEE"},{"a":48604,"t":"code","b":[242,233,189],"m":"jp","oa":48617,"o":"p,$BDE9"},{"a":48607,"t":"code","b":[203,58],"m":"srl","o":"d","x":[48612]},{"a":48609,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":48611,"t":"code","b":[60],"m":"inc","o":"a"},{"a":48612,"t":"code","b":[32,249],"m":"jr","oa":48607,"o":"nz,$BDDF"},{"a":48614,"t":"code","b":[195,238,189],"m":"jp","oa":48622,"o":"$BDEE"},{"a":48617,"t":"code","b":[203,35],"m":"sla","o":"e","x":[48604,48620]},{"a":48619,"t":"code","b":[61],"m":"dec","o":"a"},{"a":48620,"t":"code","b":[32,251],"m":"jr","oa":48617,"o":"nz,$BDE9"},{"a":48622,"t":"code","b":[35],"m":"inc","o":"hl","x":[48602,48614]},{"a":48623,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":48624,"t":"code","b":[131],"m":"add","o":"a,e"},{"a":48625,"t":"code","b":[205,196,168],"m":"call","oa":43204,"o":"sine_lookup"},{"a":48628,"t":"code","b":[221,94,2],"m":"ld","o":"e,(ix+$02)"},{"a":48631,"t":"code","b":[205,216,168],"m":"call","oa":43224,"o":"multiply_e_by_a"},{"a":48634,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":48635,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":48636,"t":"code","b":[48,2],"m":"jr","oa":48640,"o":"nc,$BE00"},{"a":48638,"t":"code","b":[237,68],"m":"neg"},{"a":48640,"t":"code","b":[221,134,3],"m":"add","o":"a,(ix+$03)","x":[48636]},{"a":48643,"t":"code","b":[221,119,7],"m":"ld","o":"(ix+$07),a"},{"a":48646,"t":"code","b":[201],"m":"ret"},{"a":48647,"l":"release_bug_handler","c":"Record handler that $BD90 installs for a type-$F4 item when it reaches its floor; no record on the tape starts with it. It counts parameter 0 down by one a call and returns until that reaches zero; after that parameter 0 is kept at 1 and each call adds parameter 2 to the item's top height (+7) until it reaches parameter 1. On every call at the top it tries to release a bug: when the allowance at $8066 is not zero and the count at $7C71 is below $0C it adds one to $7C71, takes one from $8066 and writes a 30-byte record at the address in $7C72, the end of the object pool that starts at $7C74. The record's type is $F3: $840A draws that type through $B36A as two discs and six legs, and $9E7C takes it out of the pool and adds one to the byte at $7F5A when the worm touches it. Bytes +2 and +3 are the offset of the cell being listed plus 2 ($8049, $804A); +5 and +7 are the middle of the item in x and y less 5, with zero in +4 and +6; +8 and +9, the size, are $0A, or $0E once the high byte of the frame counter has reached $11 and the low byte is a multiple of 8; +$0B is the item's top height and +$0D that plus $12, with zero in +$0A and +$0C; +$0E to +$11 are the random bytes at $E46F, $E46F, $E470 and $E471; +$12 to +$15 are 5, $0F, $28 and 1; +$16 is 7 or $27 by bit 5 of $E471; +$18 is 2. Bytes +1, +$17 and +$19 to +$1D are left as they were. $7C72 then moves on by 30 and the handler becomes $BD90, so the item sinks, waits and rises to release another. If nothing can be released the item stays at the top and tries again on the next call.","t":"code","b":[229],"m":"push","o":"hl"},{"a":48648,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":48650,"t":"code","b":[53],"m":"dec","o":"(hl)"},{"a":48651,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":48652,"t":"code","b":[54,1],"m":"ld","o":"(hl),$01"},{"a":48654,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48655,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48656,"t":"code","b":[221,126,7],"m":"ld","o":"a,(ix+$07)"},{"a":48659,"t":"code","b":[134],"m":"add","o":"a,(hl)"},{"a":48660,"t":"code","b":[48,2],"m":"jr","oa":48664,"o":"nc,$BE18"},{"a":48662,"t":"code","b":[62,255],"m":"ld","o":"a,$FF"},{"a":48664,"t":"code","b":[43],"m":"dec","o":"hl","x":[48660]},{"a":48665,"t":"code","b":[190],"m":"cp","o":"(hl)"},{"a":48666,"t":"code","b":[48,4],"m":"jr","oa":48672,"o":"nc,$BE20"},{"a":48668,"t":"code","b":[221,119,7],"m":"ld","o":"(ix+$07),a"},{"a":48671,"t":"code","b":[201],"m":"ret"},{"a":48672,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[48666]},{"a":48673,"t":"code","b":[221,119,7],"m":"ld","o":"(ix+$07),a"},{"a":48676,"t":"code","b":[58,102,128],"m":"ld","oa":32870,"o":"a,(bug_spawn_budget)"},{"a":48679,"t":"code","b":[167],"m":"and","o":"a"},{"a":48680,"t":"code","b":[200],"m":"ret","o":"z"},{"a":48681,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":48682,"t":"code","b":[58,113,124],"m":"ld","oa":31857,"o":"a,(object_count_plus_one)"},{"a":48685,"t":"code","b":[254,12],"m":"cp","o":"$0C"},{"a":48687,"t":"code","b":[208],"m":"ret","o":"nc"},{"a":48688,"t":"code","b":[60],"m":"inc","o":"a"},{"a":48689,"t":"code","b":[50,113,124],"m":"ld","oa":31857,"o":"(object_count_plus_one),a"},{"a":48692,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":48693,"t":"code","b":[61],"m":"dec","o":"a"},{"a":48694,"t":"code","b":[50,102,128],"m":"ld","oa":32870,"o":"(bug_spawn_budget),a"},{"a":48697,"t":"code","b":[42,114,124],"m":"ld","oa":31858,"o":"hl,(object_list_end)"},{"a":48700,"t":"code","b":[54,243],"m":"ld","o":"(hl),$F3"},{"a":48702,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48703,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48704,"t":"code","b":[58,73,128],"m":"ld","oa":32841,"o":"a,(cell_offset_x)"},{"a":48707,"t":"code","b":[198,2],"m":"add","o":"a,$02"},{"a":48709,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":48710,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48711,"t":"code","b":[58,74,128],"m":"ld","oa":32842,"o":"a,(cell_offset_y)"},{"a":48714,"t":"code","b":[198,2],"m":"add","o":"a,$02"},{"a":48716,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":48717,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48718,"t":"code","b":[221,126,10],"m":"ld","o":"a,(ix+$0A)"},{"a":48721,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":48723,"t":"code","b":[221,134,9],"m":"add","o":"a,(ix+$09)"},{"a":48726,"t":"code","b":[214,5],"m":"sub","o":"$05"},{"a":48728,"t":"code","b":[54,0],"m":"ld","o":"(hl),$00"},{"a":48730,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48731,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":48732,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48733,"t":"code","b":[221,126,12],"m":"ld","o":"a,(ix+$0C)"},{"a":48736,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":48738,"t":"code","b":[221,134,11],"m":"add","o":"a,(ix+$0B)"},{"a":48741,"t":"code","b":[214,5],"m":"sub","o":"$05"},{"a":48743,"t":"code","b":[54,0],"m":"ld","o":"(hl),$00"},{"a":48745,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48746,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":48747,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48748,"t":"code","b":[58,90,128],"m":"ld","oa":32858,"o":"a,($805A)"},{"a":48751,"t":"code","b":[254,17],"m":"cp","o":"$11"},{"a":48753,"t":"code","b":[56,9],"m":"jr","oa":48764,"o":"c,$BE7C"},{"a":48755,"t":"code","b":[58,89,128],"m":"ld","oa":32857,"o":"a,(frame_counter)"},{"a":48758,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":48760,"t":"code","b":[62,14],"m":"ld","o":"a,$0E"},{"a":48762,"t":"code","b":[40,2],"m":"jr","oa":48766,"o":"z,$BE7E"},{"a":48764,"t":"code","b":[62,10],"m":"ld","o":"a,$0A","x":[48753]},{"a":48766,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[48762]},{"a":48767,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48768,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":48769,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48770,"t":"code","b":[221,126,7],"m":"ld","o":"a,(ix+$07)"},{"a":48773,"t":"code","b":[54,0],"m":"ld","o":"(hl),$00"},{"a":48775,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48776,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":48777,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48778,"t":"code","b":[198,18],"m":"add","o":"a,$12"},{"a":48780,"t":"code","b":[54,0],"m":"ld","o":"(hl),$00"},{"a":48782,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48783,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":48784,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48785,"t":"code","b":[58,111,228],"m":"ld","oa":58479,"o":"a,(random_state)"},{"a":48788,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":48789,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48790,"t":"code","b":[58,111,228],"m":"ld","oa":58479,"o":"a,(random_state)"},{"a":48793,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":48794,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48795,"t":"code","b":[58,112,228],"m":"ld","oa":58480,"o":"a,($E470)"},{"a":48798,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":48799,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48800,"t":"code","b":[58,113,228],"m":"ld","oa":58481,"o":"a,($E471)"},{"a":48803,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":48804,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48805,"t":"code","b":[62,5],"m":"ld","o":"a,$05"},{"a":48807,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":48808,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48809,"t":"code","b":[54,15],"m":"ld","o":"(hl),$0F"},{"a":48811,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48812,"t":"code","b":[54,40],"m":"ld","o":"(hl),$28"},{"a":48814,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48815,"t":"code","b":[54,1],"m":"ld","o":"(hl),$01"},{"a":48817,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48818,"t":"code","b":[58,113,228],"m":"ld","oa":58481,"o":"a,($E471)"},{"a":48821,"t":"code","b":[238,6],"m":"xor","o":"$06"},{"a":48823,"t":"code","b":[230,32],"m":"and","o":"$20"},{"a":48825,"t":"code","b":[198,7],"m":"add","o":"a,$07"},{"a":48827,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":48828,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48829,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48830,"t":"code","b":[54,2],"m":"ld","o":"(hl),$02"},{"a":48832,"t":"code","b":[17,6,0],"m":"ld","o":"de,$0006"},{"a":48835,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":48836,"t":"code","b":[34,114,124],"m":"ld","oa":31858,"o":"(object_list_end),hl"},{"a":48839,"t":"code","b":[33,144,189],"m":"ld","o":"hl,$BD90"},{"a":48842,"t":"code","b":[221,117,4],"m":"ld","o":"(ix+$04),l"},{"a":48845,"t":"code","b":[221,116,5],"m":"ld","o":"(ix+$05),h"},{"a":48848,"t":"code","b":[201],"m":"ret"},{"a":48849,"l":"disk_drive_handler","c":"Record handler carried by one record, at $6FFA, in the cell that also holds the floppy disk (the type-$F6 item at $6FF3). It drives the three items after the record. The third, a type-$E0 block, has its top height (+$15) set on every call: $20 while the count of spindles at $805B is below $32 (50), $50 from then on. The first slides along y. Parameter 1 is a pause, counted down by one a call and held at $63 while the byte at $D42B is not zero. When it reaches zero, parameter 2 becomes a new target, $40 plus five bits of the random byte at $E470. On the calls after that the item's y (+$0B) moves a quarter of the remaining distance towards the target, its y size (+$0C) is set to $C0 less the new y, which keeps its far edge at $C0, and the y of the second item (+$12) is set to $0B less than the first's. When the quarter step comes to zero a new pause of 1 to 16 calls is taken from the random byte at $E471. Parameters 0 and 3 are not read.","t":"code","b":[229],"m":"push","o":"hl","x":[28670]},{"a":48850,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":48852,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48853,"t":"code","b":[58,91,128],"m":"ld","oa":32859,"o":"a,(spindles_collected)"},{"a":48856,"t":"code","b":[254,50],"m":"cp","o":"$32"},{"a":48858,"t":"code","b":[62,32],"m":"ld","o":"a,$20"},{"a":48860,"t":"code","b":[56,2],"m":"jr","oa":48864,"o":"c,$BEE0"},{"a":48862,"t":"code","b":[62,80],"m":"ld","o":"a,$50"},{"a":48864,"t":"code","b":[221,119,21],"m":"ld","o":"(ix+$15),a","x":[48860]},{"a":48867,"t":"code","b":[58,43,212],"m":"ld","oa":54315,"o":"a,(train_gap)"},{"a":48870,"t":"code","b":[167],"m":"and","o":"a"},{"a":48871,"t":"code","b":[40,3],"m":"jr","oa":48876,"o":"z,$BEEC"},{"a":48873,"t":"code","b":[54,99],"m":"ld","o":"(hl),$63"},{"a":48875,"t":"code","b":[201],"m":"ret"},{"a":48876,"t":"code","b":[53],"m":"dec","o":"(hl)","x":[48871]},{"a":48877,"t":"code","b":[40,44],"m":"jr","oa":48923,"o":"z,$BF1B"},{"a":48879,"t":"code","b":[240],"m":"ret","o":"p"},{"a":48880,"t":"code","b":[52],"m":"inc","o":"(hl)"},{"a":48881,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":48882,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":48883,"t":"code","b":[221,150,11],"m":"sub","o":"(ix+$0B)"},{"a":48886,"t":"code","b":[203,47],"m":"sra","o":"a"},{"a":48888,"t":"code","b":[203,47],"m":"sra","o":"a"},{"a":48890,"t":"code","b":[40,19],"m":"jr","oa":48911,"o":"z,$BF0F"},{"a":48892,"t":"code","b":[221,134,11],"m":"add","o":"a,(ix+$0B)"},{"a":48895,"t":"code","b":[221,119,11],"m":"ld","o":"(ix+$0B),a"},{"a":48898,"t":"code","b":[214,11],"m":"sub","o":"$0B"},{"a":48900,"t":"code","b":[221,119,18],"m":"ld","o":"(ix+$12),a"},{"a":48903,"t":"code","b":[237,68],"m":"neg"},{"a":48905,"t":"code","b":[198,181],"m":"add","o":"a,$B5"},{"a":48907,"t":"code","b":[221,119,12],"m":"ld","o":"(ix+$0C),a"},{"a":48910,"t":"code","b":[201],"m":"ret"},{"a":48911,"t":"code","b":[58,113,228],"m":"ld","oa":58481,"o":"a,($E471)","x":[48890]},{"a":48914,"t":"code","b":[15],"m":"rrca"},{"a":48915,"t":"code","b":[15],"m":"rrca"},{"a":48916,"t":"code","b":[15],"m":"rrca"},{"a":48917,"t":"code","b":[230,15],"m":"and","o":"$0F"},{"a":48919,"t":"code","b":[60],"m":"inc","o":"a"},{"a":48920,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":48921,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":48922,"t":"code","b":[201],"m":"ret"},{"a":48923,"t":"code","b":[35],"m":"inc","o":"hl","x":[48877]},{"a":48924,"t":"code","b":[58,112,228],"m":"ld","oa":58480,"o":"a,($E470)"},{"a":48927,"t":"code","b":[7],"m":"rlca"},{"a":48928,"t":"code","b":[7],"m":"rlca"},{"a":48929,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":48931,"t":"code","b":[198,64],"m":"add","o":"a,$40"},{"a":48933,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":48934,"t":"code","b":[201],"m":"ret"},{"a":48935,"l":"spark_picture_table","c":"Twenty-five addresses of spark pictures, indexed by size: $B797 doubles a size of at most 20 and reads the word here. Entry n is a picture n rows high, 16 pixels wide (four bytes a row) up to 16 rows and 24 pixels wide (six bytes a row) from 17 to 20. Entries 0 and 1 are both $BFBD. Entry 15 is the 16-row picture without its empty first row, and entry 18 the 19-row picture without its empty first row. Entries 21 to 24 repeat $C279, the 20-row picture, and cannot be read, because the size is cut to 20 before the lookup. One reference, the load at $B7AE.","t":"addr","b":[189,191],"oa":49085,"o":"spark_pictures"},{"a":48937,"t":"addr","b":[189,191],"oa":49085,"o":"spark_pictures"},{"a":48939,"t":"addr","b":[193,191],"oa":49089,"o":"$BFC1"},{"a":48941,"t":"addr","b":[201,191],"oa":49097,"o":"$BFC9"},{"a":48943,"t":"addr","b":[213,191],"oa":49109,"o":"$BFD5"},{"a":48945,"t":"addr","b":[229,191],"oa":49125,"o":"$BFE5"},{"a":48947,"t":"addr","b":[249,191],"oa":49145,"o":"$BFF9"},{"a":48949,"t":"addr","b":[17,192],"oa":49169,"o":"$C011"},{"a":48951,"t":"addr","b":[45,192],"oa":49197,"o":"$C02D"},{"a":48953,"t":"addr","b":[77,192],"oa":49229,"o":"$C04D"},{"a":48955,"t":"addr","b":[113,192],"oa":49265,"o":"$C071"},{"a":48957,"t":"addr","b":[153,192],"oa":49305,"o":"$C099"},{"a":48959,"t":"addr","b":[197,192],"oa":49349,"o":"$C0C5"},{"a":48961,"t":"addr","b":[245,192],"oa":49397,"o":"$C0F5"},{"a":48963,"t":"addr","b":[41,193],"oa":49449,"o":"$C129"},{"a":48965,"t":"addr","b":[101,193],"oa":49509,"o":"$C165"},{"a":48967,"t":"addr","b":[97,193],"oa":49505,"o":"$C161"},{"a":48969,"t":"addr","b":[161,193],"oa":49569,"o":"$C1A1"},{"a":48971,"t":"addr","b":[13,194],"oa":49677,"o":"$C20D"},{"a":48973,"t":"addr","b":[7,194],"oa":49671,"o":"$C207"},{"a":48975,"t":"addr","b":[121,194],"oa":49785,"o":"$C279"},{"a":48977,"t":"addr","b":[121,194],"oa":49785,"o":"$C279"},{"a":48979,"t":"addr","b":[121,194],"oa":49785,"o":"$C279"},{"a":48981,"t":"addr","b":[121,194],"oa":49785,"o":"$C279"},{"a":48983,"t":"addr","b":[121,194],"oa":49785,"o":"$C279"},{"a":48985,"l":"disc_picture_table","c":"Twenty-five addresses of speckled disc pictures, indexed by size as $BF27 is and read by $B7B6. Entries 0 and 1 are both $C2F1. Entry 15 is the 16-row picture without its first row; entries 17 and 18 are the same address, the 18-row picture being the 17-row one with a row more below; entry 19 is the 20-row picture without its first row. Entries 21 to 24 hold $C5B3, the address of the first explosion picture, and cannot be read. One reference, the load at $B7CD.","t":"addr","b":[241,194],"oa":49905,"o":"disc_pictures"},{"a":48987,"t":"addr","b":[241,194],"oa":49905,"o":"disc_pictures"},{"a":48989,"t":"addr","b":[245,194],"oa":49909,"o":"$C2F5"},{"a":48991,"t":"addr","b":[253,194],"oa":49917,"o":"$C2FD"},{"a":48993,"t":"addr","b":[9,195],"oa":49929,"o":"$C309"},{"a":48995,"t":"addr","b":[25,195],"oa":49945,"o":"$C319"},{"a":48997,"t":"addr","b":[45,195],"oa":49965,"o":"$C32D"},{"a":48999,"t":"addr","b":[69,195],"oa":49989,"o":"$C345"},{"a":49001,"t":"addr","b":[97,195],"oa":50017,"o":"$C361"},{"a":49003,"t":"addr","b":[129,195],"oa":50049,"o":"$C381"},{"a":49005,"t":"addr","b":[165,195],"oa":50085,"o":"$C3A5"},{"a":49007,"t":"addr","b":[205,195],"oa":50125,"o":"$C3CD"},{"a":49009,"t":"addr","b":[249,195],"oa":50169,"o":"$C3F9"},{"a":49011,"t":"addr","b":[41,196],"oa":50217,"o":"$C429"},{"a":49013,"t":"addr","b":[93,196],"oa":50269,"o":"$C45D"},{"a":49015,"t":"addr","b":[153,196],"oa":50329,"o":"$C499"},{"a":49017,"t":"addr","b":[149,196],"oa":50325,"o":"$C495"},{"a":49019,"t":"addr","b":[213,196],"oa":50389,"o":"$C4D5"},{"a":49021,"t":"addr","b":[213,196],"oa":50389,"o":"$C4D5"},{"a":49023,"t":"addr","b":[65,197],"oa":50497,"o":"$C541"},{"a":49025,"t":"addr","b":[59,197],"oa":50491,"o":"$C53B"},{"a":49027,"t":"addr","b":[179,197],"oa":50611,"o":"explosion_picture_1"},{"a":49029,"t":"addr","b":[179,197],"oa":50611,"o":"explosion_picture_1"},{"a":49031,"t":"addr","b":[179,197],"oa":50611,"o":"explosion_picture_1"},{"a":49033,"t":"addr","b":[179,197],"oa":50611,"o":"explosion_picture_1"},{"a":49035,"l":"unused_picture_table","c":"A third table of 25 picture addresses that nothing reads: no instruction names $BF8B, the word does not occur anywhere in the image, and the two lookups reach no further than 40 bytes past $BF27 and $BF59. Entries 0 to 17 are those of $BF27. Entries 18 to 20 are $C4D5, $C541 and $C53B, the disc pictures that $BF59 has in the same places, and entries 21 to 24 are $C5B3.","t":"addr","b":[189,191],"oa":49085,"o":"spark_pictures"},{"a":49037,"t":"addr","b":[189,191],"oa":49085,"o":"spark_pictures"},{"a":49039,"t":"addr","b":[193,191],"oa":49089,"o":"$BFC1"},{"a":49041,"t":"addr","b":[201,191],"oa":49097,"o":"$BFC9"},{"a":49043,"t":"addr","b":[213,191],"oa":49109,"o":"$BFD5"},{"a":49045,"t":"addr","b":[229,191],"oa":49125,"o":"$BFE5"},{"a":49047,"t":"addr","b":[249,191],"oa":49145,"o":"$BFF9"},{"a":49049,"t":"addr","b":[17,192],"oa":49169,"o":"$C011"},{"a":49051,"t":"addr","b":[45,192],"oa":49197,"o":"$C02D"},{"a":49053,"t":"addr","b":[77,192],"oa":49229,"o":"$C04D"},{"a":49055,"t":"addr","b":[113,192],"oa":49265,"o":"$C071"},{"a":49057,"t":"addr","b":[153,192],"oa":49305,"o":"$C099"},{"a":49059,"t":"addr","b":[197,192],"oa":49349,"o":"$C0C5"},{"a":49061,"t":"addr","b":[245,192],"oa":49397,"o":"$C0F5"},{"a":49063,"t":"addr","b":[41,193],"oa":49449,"o":"$C129"},{"a":49065,"t":"addr","b":[101,193],"oa":49509,"o":"$C165"},{"a":49067,"t":"addr","b":[97,193],"oa":49505,"o":"$C161"},{"a":49069,"t":"addr","b":[161,193],"oa":49569,"o":"$C1A1"},{"a":49071,"t":"addr","b":[213,196],"oa":50389,"o":"$C4D5"},{"a":49073,"t":"addr","b":[65,197],"oa":50497,"o":"$C541"},{"a":49075,"t":"addr","b":[59,197],"oa":50491,"o":"$C53B"},{"a":49077,"t":"addr","b":[179,197],"oa":50611,"o":"explosion_picture_1"},{"a":49079,"t":"addr","b":[179,197],"oa":50611,"o":"explosion_picture_1"},{"a":49081,"t":"addr","b":[179,197],"oa":50611,"o":"explosion_picture_1"},{"a":49083,"t":"addr","b":[179,197],"oa":50611,"o":"explosion_picture_1"},{"a":49085,"l":"spark_pictures","c":"The spark pictures the table at $BF27 points to, as rows of mask and pattern pairs for $B7E3: a solid middle with short broken rays all round it, one picture for each size from 1 to 20 pixels. The pictures of 1 to 14 rows follow one another from here, n rows of four bytes each, as far as $C160; this symbol covers them up to $BFFF, where the 6-row picture is seven bytes in, and $C000 carries on.","t":"byte","b":[128,128,0,0,192,192,0,0],"x":[48935,48937,49035,49037]},{"a":49093,"t":"byte","b":[192,64,0,0,224,64,0,0]},{"a":49101,"t":"byte","b":[224,160,0,0,224,64,0,0]},{"a":49109,"t":"byte","b":[96,32,0,0,240,192,0,0],"x":[48943,49043]},{"a":49117,"t":"byte","b":[240,48,0,0,96,64,0,0]},{"a":49125,"t":"byte","b":[48,16,0,0,240,160,0,0],"x":[48945,49045]},{"a":49133,"t":"byte","b":[112,80,0,0,120,40,0,0]},{"a":49141,"t":"byte","b":[96,64,0,0,252,172,0,0]},{"a":49149,"t":"byte","b":[248,216,0]},{"a":49152,"l":"spark_pictures_from_c000","c":"The spark pictures of $BFBD continued: the last 17 bytes of the 6-row picture, then the pictures of 7 to 14 rows at four bytes a row ($C011, $C02D, $C04D, $C071, $C099, $C0C5, $C0F5, $C129), the 16-row picture at $C161 (the 15-row entry points one row into it, at $C165), and at six bytes a row the 17-row picture at $C1A1, the 19-row one at $C207 (the 18-row entry points at $C20D) and the 20-row one at $C279, which ends at $C2F0. All are reached only through the table at $BF27.","t":"byte","b":[0,124,100,0,0,248,136,0]},{"a":49160,"t":"byte","b":[0,124,108,0,0,252,212,0]},{"a":49168,"t":"byte","b":[0,166,162,0,0,252,220,0]},{"a":49176,"t":"byte","b":[0,126,98,0,0,124,68,0]},{"a":49184,"t":"byte","b":[0,252,132,0,0,126,126,0]},{"a":49192,"t":"byte","b":[0,202,202,0,0,145,145,0]},{"a":49200,"t":"byte","b":[0,126,86,0,0,126,100,0]},{"a":49208,"t":"byte","b":[0,127,19,0,0,254,192,0]},{"a":49216,"t":"byte","b":[0,126,38,0,0,126,106,0]},{"a":49224,"t":"byte","b":[0,137,137,0,0,136,136,128]},{"a":49232,"t":"byte","b":[128,75,74,0,0,126,102,0]},{"a":49240,"t":"byte","b":[0,62,40,0,0,255,209,128]},{"a":49248,"t":"byte","b":[128,62,2,0,0,63,51,0]},{"a":49256,"t":"byte","b":[0,105,105,0,0,136,136,128]},{"a":49264,"t":"byte","b":[128,8,8,128,128,171,171,0]},{"a":49272,"t":"byte","b":[0,94,70,128,128,127,114,0]},{"a":49280,"t":"byte","b":[0,63,40,192,192,255,193,0]},{"a":49288,"t":"byte","b":[0,63,19,128,128,126,88,128]},{"a":49296,"t":"byte","b":[128,63,53,64,64,68,68,0]},{"a":49304,"t":"byte","b":[0,12,8,0,0,72,72,192]},{"a":49312,"t":"byte","b":[192,95,91,0,0,63,34,128]},{"a":49320,"t":"byte","b":[128,63,56,224,224,191,0,160]},{"a":49328,"t":"byte","b":[0,255,225,128,128,63,40,128]},{"a":49336,"t":"byte","b":[128,31,27,64,64,98,98,64]},{"a":49344,"t":"byte","b":[64,2,6,0,0,3,2,0]},{"a":49352,"t":"byte","b":[0,100,68,32,32,36,36,224]},{"a":49360,"t":"byte","b":[192,47,43,0,0,159,25,128]},{"a":49368,"t":"byte","b":[0,159,148,224,96,127,96,144]},{"a":49376,"t":"byte","b":[144,31,9,128,144,15,12,64]},{"a":49384,"t":"byte","b":[64,114,50,64,64,66,66,32]},{"a":49392,"t":"byte","b":[96,12,4,0,0,1,1,128]},{"a":49400,"t":"byte","b":[0,98,66,16,16,42,42,112]},{"a":49408,"t":"byte","b":[96,47,41,128,128,159,20,224]},{"a":49416,"t":"byte","b":[96,159,144,192,128,127,96,240]},{"a":49424,"t":"byte","b":[48,31,8,72,72,63,49,200]},{"a":49432,"t":"byte","b":[64,15,12,160,160,114,50,160]},{"a":49440,"t":"byte","b":[160,66,66,48,16,12,4,0]},{"a":49448,"t":"byte","b":[0,1,1,128,0,101,69,40]},{"a":49456,"t":"byte","b":[40,50,50,56,48,35,34,192]},{"a":49464,"t":"byte","b":[192,31,20,192,0,159,16,200]},{"a":49472,"t":"byte","b":[72,223,194,240,48,63,49,252]},{"a":49480,"t":"byte","b":[12,79,72,228,32,15,0,224]},{"a":49488,"t":"byte","b":[160,47,45,16,16,113,49,48]},{"a":49496,"t":"byte","b":[48,66,66,152,136,6,2,0]},{"a":49504,"t":"byte","b":[0,0,0,0,0,1,1,128]},{"a":49512,"t":"byte","b":[0,53,37,32,32,34,34,76]},{"a":49520,"t":"byte","b":[36,18,34,52,48,83,82,192]},{"a":49528,"t":"byte","b":[192,47,44,196,68,143,9,248]},{"a":49536,"t":"byte","b":[56,207,194,230,6,63,56,226]},{"a":49544,"t":"byte","b":[32,71,68,232,104,7,6,148]},{"a":49552,"t":"byte","b":[148,88,24,144,144,100,100,136]},{"a":49560,"t":"byte","b":[136,9,9,88,72,3,1,0]},{"a":49568,"t":"byte","b":[0,2,2,96,64,0,0,17]},{"a":49576,"t":"byte","b":[1,64,64,0,0,36,36,134]},{"a":49584,"t":"byte","b":[134,0,0,38,38,153,152,0]},{"a":49592,"t":"byte","b":[0,19,18,240,112,0,0,31]},{"a":49600,"t":"byte","b":[26,246,70,0,0,143,10,252]},{"a":49608,"t":"byte","b":[188,128,128,207,205,249,1,0]},{"a":49616,"t":"byte","b":[0,63,50,254,166,0,0,79]},{"a":49624,"t":"byte","b":[64,249,25,128,128,159,158,248]},{"a":49632,"t":"byte","b":[168,128,0,55,49,252,44,0]},{"a":49640,"t":"byte","b":[0,7,7,228,36,0,0,76]},{"a":49648,"t":"byte","b":[12,178,178,0,0,48,48,146]},{"a":49656,"t":"byte","b":[146,0,0,1,1,68,64,0]},{"a":49664,"t":"byte","b":[0,3,1,32,32,0,0,0]},{"a":49672,"t":"byte","b":[0,0,0,0,0,12,4,152]},{"a":49680,"t":"byte","b":[144,0,0,72,72,145,145,128]},{"a":49688,"t":"byte","b":[128,73,73,38,38,0,0,37]},{"a":49696,"t":"byte","b":[37,56,56,0,0,39,39,225]},{"a":49704,"t":"byte","b":[97,192,128,147,19,246,118,64]},{"a":49712,"t":"byte","b":[64,215,214,252,156,0,0,63]},{"a":49720,"t":"byte","b":[61,255,79,0,0,15,14,252]},{"a":49728,"t":"byte","b":[128,192,192,207,193,252,12,0]},{"a":49736,"t":"byte","b":[0,63,60,255,15,0,0,15]},{"a":49744,"t":"byte","b":[14,250,26,192,192,155,155,242]},{"a":49752,"t":"byte","b":[50,64,0,225,97,249,185,0]},{"a":49760,"t":"byte","b":[0,7,7,41,41,0,0,25]},{"a":49768,"t":"byte","b":[25,36,36,128,128,98,98,68]},{"a":49776,"t":"byte","b":[68,128,128,6,2,76,72,0]},{"a":49784,"t":"byte","b":[0,1,1,176,32,0,0,1]},{"a":49792,"t":"byte","b":[1,67,66,0,0,2,2,68]},{"a":49800,"t":"byte","b":[68,0,0,0,0,140,140,0]},{"a":49808,"t":"byte","b":[0,74,10,145,145,0,0,70]},{"a":49816,"t":"byte","b":[70,242,242,0,0,51,51,255]},{"a":49824,"t":"byte","b":[151,64,64,19,16,252,68,48]},{"a":49832,"t":"byte","b":[48,143,14,255,167,144,128,135]},{"a":49840,"t":"byte","b":[133,254,66,96,96,103,100,254]},{"a":49848,"t":"byte","b":[130,16,16,159,30,255,7,0]},{"a":49856,"t":"byte","b":[0,195,194,252,0,128,128,47]},{"a":49864,"t":"byte","b":[46,252,156,192,192,4,4,246]},{"a":49872,"t":"byte","b":[246,32,32,8,8,149,149,32]},{"a":49880,"t":"byte","b":[0,3,3,16,16,0,0,2]},{"a":49888,"t":"byte","b":[2,36,36,0,0,12,4,40]},{"a":49896,"t":"byte","b":[40,0,0,0,0,88,72,0]},{"a":49904,"t":"byte","b":[0]},{"a":49905,"l":"disc_pictures","c":"The disc pictures the table at $BF59 points to: a round blob with a speckled surface for each size from 1 to 20 pixels, as rows of mask and pattern pairs. The pictures of 1 to 14 rows run from $C2F1 at n rows of four bytes each; the 16-row picture is at $C495 and the 15-row entry points one row into it; at six bytes a row the 17-row and 18-row pictures both start at $C4D5 and the 20-row one at $C53B, with the 19-row entry one row into it at $C541. The last row of the 18-row picture is also the first row of the 20-row one. The block is 706 bytes and ends at $C5B2. Plotted only through $B7B6.","t":"byte","b":[128,128,0,0,192,128,0,0],"x":[48985,48987]},{"a":49913,"t":"byte","b":[192,64,0,0,96,32,0,0]},{"a":49921,"t":"byte","b":[224,128,0,0,96,96,0,0]},{"a":49929,"t":"byte","b":[96,64,0,0,240,160,0,0],"x":[48993]},{"a":49937,"t":"byte","b":[240,176,0,0,96,64,0,0]},{"a":49945,"t":"byte","b":[112,80,0,0,248,168,0,0],"x":[48995]},{"a":49953,"t":"byte","b":[120,48,0,0,248,136,0,0]},{"a":49961,"t":"byte","b":[112,96,0,0,120,88,0,0]},{"a":49969,"t":"byte","b":[248,168,0,0,252,144,0,0]},{"a":49977,"t":"byte","b":[252,4,0,0,248,144,0,0]},{"a":49985,"t":"byte","b":[120,116,0,0,56,56,0,0]},{"a":49993,"t":"byte","b":[124,20,0,0,254,98,0,0]},{"a":50001,"t":"byte","b":[254,148,0,0,254,134,0,0]},{"a":50009,"t":"byte","b":[124,72,0,0,56,40,0,0]},{"a":50017,"t":"byte","b":[60,40,0,0,127,67,0,0],"x":[49001]},{"a":50025,"t":"byte","b":[255,210,0,0,255,27,0,0]},{"a":50033,"t":"byte","b":[255,129,0,0,127,86,0,0]},{"a":50041,"t":"byte","b":[126,10,0,0,60,52,0,0]},{"a":50049,"t":"byte","b":[28,8,0,0,126,98,0,0],"x":[49003]},{"a":50057,"t":"byte","b":[127,9,128,128,127,85,128,0]},{"a":50065,"t":"byte","b":[255,130,128,128,255,152,128,128]},{"a":50073,"t":"byte","b":[127,83,0,0,124,4,0,0]},{"a":50081,"t":"byte","b":[56,48,0,0,30,26,0,0]},{"a":50089,"t":"byte","b":[127,65,0,0,255,138,192,192]},{"a":50097,"t":"byte","b":[255,144,192,64,127,66,192,128]},{"a":50105,"t":"byte","b":[255,148,192,64,127,33,192,64]},{"a":50113,"t":"byte","b":[127,77,128,128,63,40,128,128]},{"a":50121,"t":"byte","b":[31,27,0,0,15,13,0,0]},{"a":50129,"t":"byte","b":[63,42,192,128,127,104,192,64]},{"a":50137,"t":"byte","b":[255,132,192,192,255,217,224,32]},{"a":50145,"t":"byte","b":[255,3,224,32,127,80,192,0]},{"a":50153,"t":"byte","b":[255,205,192,192,127,0,64,64]},{"a":50161,"t":"byte","b":[63,47,0,0,27,24,0,0]},{"a":50169,"t":"byte","b":[15,13,128,128,31,8,192,64],"x":[49009]},{"a":50177,"t":"byte","b":[127,101,224,32,127,82,240,16]},{"a":50185,"t":"byte","b":[255,88,240,176,255,131,240,0]},{"a":50193,"t":"byte","b":[255,176,240,16,127,69,240,80]},{"a":50201,"t":"byte","b":[63,37,224,160,63,52,224,32]},{"a":50209,"t":"byte","b":[63,59,192,128,12,4,128,128]},{"a":50217,"t":"byte","b":[15,13,128,0,31,16,224,96],"x":[49011]},{"a":50225,"t":"byte","b":[63,34,240,16,63,38,240,128]},{"a":50233,"t":"byte","b":[255,208,248,24,255,1,248,72]},{"a":50241,"t":"byte","b":[255,186,240,0,255,136,240,208]},{"a":50249,"t":"byte","b":[255,128,248,24,127,93,224,160]},{"a":50257,"t":"byte","b":[63,32,224,160,31,10,224,96]},{"a":50265,"t":"byte","b":[27,25,128,128,7,3,192,128]},{"a":50273,"t":"byte","b":[15,8,224,160,31,18,248,24]},{"a":50281,"t":"byte","b":[127,102,248,192,127,72,252,12]},{"a":50289,"t":"byte","b":[127,32,252,196,255,218,248,8]},{"a":50297,"t":"byte","b":[255,130,248,40,255,27,252,68]},{"a":50305,"t":"byte","b":[255,160,248,8,95,84,240,32]},{"a":50313,"t":"byte","b":[31,19,208,80,15,12,192,64]},{"a":50321,"t":"byte","b":[5,5,192,192,3,1,192,192]},{"a":50329,"t":"byte","b":[15,6,128,128,31,8,224,96],"x":[49015]},{"a":50337,"t":"byte","b":[63,58,240,80,255,195,240,16]},{"a":50345,"t":"byte","b":[127,96,252,108,63,20,254,4]},{"a":50353,"t":"byte","b":[255,147,254,82,255,160,254,46]},{"a":50361,"t":"byte","b":[255,134,254,130,127,88,252,148]},{"a":50369,"t":"byte","b":[255,200,248,88,127,74,224,32]},{"a":50377,"t":"byte","b":[63,50,240,144,31,12,224,224]},{"a":50385,"t":"byte","b":[7,3,128,0,2,2,224,224]},{"a":50393,"t":"byte","b":[0,0,31,27,248,8,0,0]},{"a":50401,"t":"byte","b":[31,4,254,238,0,0,63,33]},{"a":50409,"t":"byte","b":[255,33,0,0,127,25,255,9]},{"a":50417,"t":"byte","b":[0,0,127,68,255,68,128,128]},{"a":50425,"t":"byte","b":[255,197,255,205,128,128,255,144]},{"a":50433,"t":"byte","b":[255,8,128,128,255,23,255,98]},{"a":50441,"t":"byte","b":[128,0,255,192,255,73,128,128]},{"a":50449,"t":"byte","b":[127,90,255,152,128,0,127,6]},{"a":50457,"t":"byte","b":[255,67,0,0,127,116,255,96]},{"a":50465,"t":"byte","b":[0,0,63,33,254,10,0,0]},{"a":50473,"t":"byte","b":[31,29,254,82,0,0,7,4]},{"a":50481,"t":"byte","b":[252,196,0,0,3,3,120,104]},{"a":50489,"t":"byte","b":[0,0,0,0,48,48,0,0]},{"a":50497,"t":"byte","b":[7,6,196,196,0,0,31,26],"x":[49023,49073]},{"a":50505,"t":"byte","b":[254,50,0,0,15,8,255,11]},{"a":50513,"t":"byte","b":[0,0,63,49,255,72,0,0]},{"a":50521,"t":"byte","b":[127,45,255,81,192,192,255,192]},{"a":50529,"t":"byte","b":[255,156,224,96,255,89,255,1]},{"a":50537,"t":"byte","b":[224,128,255,140,255,34,224,96]},{"a":50545,"t":"byte","b":[255,161,255,139,224,64,127,88]},{"a":50553,"t":"byte","b":[255,48,192,64,127,69,255,132]},{"a":50561,"t":"byte","b":[192,64,255,152,255,109,192,0]},{"a":50569,"t":"byte","b":[255,34,255,3,224,96,255,228]},{"a":50577,"t":"byte","b":[255,184,224,32,255,154,255,164]},{"a":50585,"t":"byte","b":[192,64,127,96,255,161,0,0]},{"a":50593,"t":"byte","b":[31,10,255,8,128,128,15,9]},{"a":50601,"t":"byte","b":[255,181,0,0,7,7,124,76]},{"a":50609,"t":"byte","b":[0,0]},{"a":50611,"l":"explosion_picture_1","c":"First of three explosion pictures, each 15 rows of four bytes (16 pixels wide): a small ragged burst. The drawer of type-$E6 objects at $870F plots 15 rows from the address held at +$0F/+$10 of the object's record. This address is put there when an object turns into an explosion ($D871, $DE2A), and is stored in the pointer at $790F by the end-of-game sequence at $7868 and $787A. Four instructions load it; the same value also fills the unread entries 21 to 24 of the tables at $BF59 and $BF8B.","t":"byte","b":[0,0,0,0,3,0,192,128],"x":[30991,49027,49029,49031,49033,49077,49079,49081,49083]},{"a":50619,"t":"byte","b":[31,16,240,128,31,10,248,136]},{"a":50627,"t":"byte","b":[31,4,248,144,63,2,248,32]},{"a":50635,"t":"byte","b":[63,56,248,64,63,6,252,16]},{"a":50643,"t":"byte","b":[63,56,252,96,63,5,252,28]},{"a":50651,"t":"byte","b":[31,1,248,64,15,2,240,64]},{"a":50659,"t":"byte","b":[7,2,224,32,7,2,0,0]},{"a":50667,"t":"byte","b":[0,0,0,0]},{"a":50671,"l":"explosion_picture_2","c":"Second explosion picture, 15 rows of four bytes: the burst grown to the full 16 pixels, with a small hole in the middle. Loaded at $DE0C when a type-$E6 object's countdown at +$0E reads 2, and at $7871 and $7880 by the end-of-game sequence. Three references.","t":"byte","b":[15,4,252,136,31,18,254,144]},{"a":50679,"t":"byte","b":[63,10,254,164,127,36,254,136]},{"a":50687,"t":"byte","b":[127,2,255,16,126,120,127,38]},{"a":50695,"t":"byte","b":[126,0,127,24,254,28,127,3]},{"a":50703,"t":"byte","b":[255,224,255,56,255,5,255,7]},{"a":50711,"t":"byte","b":[255,73,255,64,127,17,254,32]},{"a":50719,"t":"byte","b":[63,34,248,16,31,10,240,64]},{"a":50727,"t":"byte","b":[7,2,192,64]},{"a":50731,"l":"explosion_picture_3","c":"Third explosion picture, 15 rows of four bytes: a ragged ring with an open middle. Loaded at $DE13 when a type-$E6 object's countdown at +$0E reads 1, the last call before the object is removed, and at $7886 by the end-of-game sequence. Two references.","t":"byte","b":[31,9,248,80,63,37,252,32]},{"a":50739,"t":"byte","b":[63,16,252,4,120,32,28,8]},{"a":50747,"t":"byte","b":[112,0,30,0,112,96,30,6]},{"a":50755,"t":"byte","b":[112,0,14,0,240,0,15,3]},{"a":50763,"t":"byte","b":[240,224,15,0,240,0,15,7]},{"a":50771,"t":"byte","b":[248,64,127,0,127,16,254,32]},{"a":50779,"t":"byte","b":[63,34,248,16,31,10,240,64]},{"a":50787,"t":"byte","b":[7,2,192,64]},{"a":50791,"l":"leg_stroke_records","c":"Sixteen four-byte records, one for each of sixteen directions of a leg stroke, from straight up round by the left to almost straight down, read by the 8-pixel shape plotter at $B5AF. The index is bits 2-5 of the direction byte in C, counted from the far end of the table when bit 7 of C is clear. Byte 0 is a signed x offset added to the column, negated when bit 6 of C is set, which also draws the picture mirrored. Byte 1 is a signed y offset added to the row, negated, with the picture drawn bottom row first, when bits 6 and 7 of C differ. Byte 2 is the number of the picture's first row in the row table at $C6A7 and byte 3 its row count, 2 to 8. One reference, the load at $B5B5.","t":"byte","b":[0,249,0,8,255,249,8,8]},{"a":50799,"t":"byte","b":[254,250,16,7,252,250,23,7]},{"a":50807,"t":"byte","b":[251,250,30,7,250,252,37,5]},{"a":50815,"t":"byte","b":[249,253,42,4,249,254,46,3]},{"a":50823,"t":"byte","b":[249,255,49,2,249,255,51,3]},{"a":50831,"t":"byte","b":[249,0,54,4,249,0,58,5]},{"a":50839,"t":"byte","b":[251,0,63,6,252,0,69,7]},{"a":50847,"t":"byte","b":[253,0,76,8,254,0,84,8]},{"a":50855,"l":"leg_stroke_rows","c":"The pictures of the sixteen leg strokes: 92 rows of two bytes, a mask and a pattern, 8 pixels wide. Each record at $C667 gives its picture's first row and row count, and the sixteen lie end to end with 8, 8, 7, 7, 7, 5, 4, 3, 2, 3, 4, 5, 6, 7, 8 and 8 rows, a short dotted line that turns from upright through level and back to upright. The address itself is never loaded: $B5E4 adds twice the row number plus $40 to $C667.","t":"byte","b":[192,64,192,128,192,64,192,128]},{"a":50863,"t":"byte","b":[192,64,192,128,192,192,128,128]},{"a":50871,"t":"byte","b":[192,64,192,128,192,64,96,32]},{"a":50879,"t":"byte","b":[96,64,96,32,96,96,64,64]},{"a":50887,"t":"byte","b":[192,128,192,64,96,32,96,64]},{"a":50895,"t":"byte","b":[48,32,48,48,32,32,192,128]},{"a":50903,"t":"byte","b":[224,64,96,32,112,16,56,40]},{"a":50911,"t":"byte","b":[16,16,8,8,192,64,224,160]},{"a":50919,"t":"byte","b":[112,80,56,40,28,20,8,8]},{"a":50927,"t":"byte","b":[4,4,192,128,240,80,56,40]},{"a":50935,"t":"byte","b":[28,20,14,14,192,128,240,80]},{"a":50943,"t":"byte","b":[62,10,15,7,224,64,254,170]},{"a":50951,"t":"byte","b":[31,23,254,170,255,87,30,10]},{"a":50959,"t":"byte","b":[255,87,224,160,13,13,62,22]},{"a":50967,"t":"byte","b":[240,168,192,64,5,5,30,22]},{"a":50975,"t":"byte","b":[120,40,240,80,192,128,4,4]},{"a":50983,"t":"byte","b":[28,28,56,40,112,80,224,160]},{"a":50991,"t":"byte","b":[192,64,8,8,24,24,56,40]},{"a":50999,"t":"byte","b":[112,80,96,32,224,64,192,128]},{"a":51007,"t":"byte","b":[16,16,48,48,48,16,96,32]},{"a":51015,"t":"byte","b":[96,64,96,32,192,64,192,128]},{"a":51023,"t":"byte","b":[32,32,96,96,96,32,96,64]},{"a":51031,"t":"byte","b":[96,32,192,64,192,128,192,64]},{"a":51039,"l":"disk_hub_picture_a","c":"The hub of the floppy disk, first of two versions: 17 rows of six bytes (24 pixels, 17 of them used), a ring with a square hole in the middle and marks between the two. $BB06 plots this one when bit 0 of the frame counter is 0 and the one at $C7C5 when it is 1, so the marks change place every frame. One reference, the load at $BC7D.","t":"byte","b":[3,0,224,0,0,0,15,3]},{"a":51047,"t":"byte","b":[248,224,0,0,31,12,252,24]},{"a":51055,"t":"byte","b":[0,0,63,16,254,100,0,0]},{"a":51063,"t":"byte","b":[127,44,255,98,0,0,127,44]},{"a":51071,"t":"byte","b":[255,2,0,0,255,65,255,193]},{"a":51079,"t":"byte","b":[128,0,254,66,63,45,128,0]},{"a":51087,"t":"byte","b":[254,90,63,45,128,0,254,90]},{"a":51095,"t":"byte","b":[63,33,128,0,255,65,255,193]},{"a":51103,"t":"byte","b":[128,0,127,32,255,26,0,0]},{"a":51111,"t":"byte","b":[127,35,255,26,0,0,63,19]},{"a":51119,"t":"byte","b":[254,4,0,0,31,12,252,24]},{"a":51127,"t":"byte","b":[0,0,15,3,248,224,0,0]},{"a":51135,"t":"byte","b":[3,0,224,0,0,0]},{"a":51141,"l":"disk_hub_picture_b","c":"Second version of the floppy disk's hub, 17 rows of six bytes: the same ring and hole as $C75F with the marks in the other positions. Loaded at $BC82 when bit 0 of the frame counter is 1.","t":"byte","b":[3,0,224,0,0,0,15,3]},{"a":51149,"t":"byte","b":[248,224,0,0,31,12,252,24]},{"a":51157,"t":"byte","b":[0,0,63,19,254,4,0,0]},{"a":51165,"t":"byte","b":[127,35,255,26,0,0,127,32]},{"a":51173,"t":"byte","b":[255,26,0,0,255,89,255,193]},{"a":51181,"t":"byte","b":[128,0,254,90,63,33,128,0]},{"a":51189,"t":"byte","b":[254,66,63,33,128,0,254,66]},{"a":51197,"t":"byte","b":[63,45,128,0,255,65,255,205]},{"a":51205,"t":"byte","b":[128,0,127,44,255,2,0,0]},{"a":51213,"t":"byte","b":[127,44,255,98,0,0,63,16]},{"a":51221,"t":"byte","b":[254,100,0,0,31,12,252,24]},{"a":51229,"t":"byte","b":[0,0,15,3,248,224,0,0]},{"a":51237,"t":"byte","b":[3,0,224,0,0,0]},{"a":51243,"l":"disk_slot_picture","c":"The head slot of the floppy disk: 21 rows of four bytes, an upright oval 9 pixels wide with every pixel set. $BB06 plots it below the hub through $B7E3 in the 16-pixel form. One reference, the load at $BC9C.","t":"byte","b":[28,0,0,0,127,0,0,0]},{"a":51251,"t":"byte","b":[127,0,0,0,255,0,128,0]},{"a":51259,"t":"byte","b":[255,0,128,0,255,0,128,0]},{"a":51267,"t":"byte","b":[255,0,128,0,255,0,128,0]},{"a":51275,"t":"byte","b":[255,0,128,0,255,0,128,0]},{"a":51283,"t":"byte","b":[255,0,128,0,255,0,128,0]},{"a":51291,"t":"byte","b":[255,0,128,0,255,0,128,0]},{"a":51299,"t":"byte","b":[255,0,128,0,255,0,128,0]},{"a":51307,"t":"byte","b":[255,0,128,0,255,0,128,0]},{"a":51315,"t":"byte","b":[127,0,0,0,127,0,0,0]},{"a":51323,"t":"byte","b":[28,0,0,0]},{"a":51327,"l":"disk_label_left","c":"Left half of the lettering on the floppy disk's label: 8 rows of six bytes (24 pixels). It clears the pixels of the letters D, U and R and sets a bar three pixels wide down its left edge. Plotted by $BB06 24 columns left of the centre of the disk. One reference, the load at $BCCE.","t":"byte","b":[239,15,153,153,188,188,239,15]},{"a":51335,"t":"byte","b":[217,217,191,191,224,0,217,217]},{"a":51343,"t":"byte","b":[131,131,236,12,217,217,190,190]},{"a":51351,"t":"byte","b":[236,12,217,217,191,191,236,12]},{"a":51359,"t":"byte","b":[217,217,131,131,239,15,223,223]},{"a":51367,"t":"byte","b":[131,131,239,15,143,143,131,131]},{"a":51375,"l":"disk_label_right","c":"Right half of the label lettering, 8 rows of six bytes: the letters E, L and L cleared and a bar three pixels wide set near the right edge. With $C87F it spells DURELL across 48 pixels. One reference, the load at $BCB6.","t":"byte","b":[126,126,195,195,14,0,126,126]},{"a":51383,"t":"byte","b":[195,195,14,0,0,0,195,195]},{"a":51391,"t":"byte","b":[14,0,126,126,195,195,14,0]},{"a":51399,"t":"byte","b":[126,126,195,195,14,0,96,96]},{"a":51407,"t":"byte","b":[195,195,14,0,126,126,251,251]},{"a":51415,"t":"byte","b":[238,224,126,126,251,251,238,224]},{"a":51423,"l":"spiked_ball_shadow","c":"A shadow for the type-$E5 object: 13 rows of four bytes, the outline of a ball with four diagonal spikes drawn as a checkerboard of cleared pixels. The type-$E5 drawer at $8667 plots it first, at the centre of the object's projected base less 7 columns and 6 rows, when the byte at +$1B of the object's record is below $11. One reference, the load at $867C.","t":"byte","b":[32,32,8,8,80,80,20,20]},{"a":51431,"t":"byte","b":[42,42,168,168,21,21,80,80]},{"a":51439,"t":"byte","b":[10,10,160,160,21,21,64,64]},{"a":51447,"t":"byte","b":[10,10,160,160,21,21,64,64]},{"a":51455,"t":"byte","b":[10,10,160,160,21,21,80,80]},{"a":51463,"t":"byte","b":[40,40,40,40,80,80,20,20]},{"a":51471,"t":"byte","b":[32,32,8,8]},{"a":51475,"l":"spiked_ball_picture_22","c":"Largest of four pictures of the type-$E5 object, a ball with four diagonal spikes and a small square in its middle: 22 rows of six bytes (24 pixels wide). The drawer at $8667 chooses by the width of the object's projected top face, never more than the byte at +$1C of its record, which it lowers to that width; this picture serves widths of 20 and over. It is centred on the face. One reference, the load at $86F7.","t":"byte","b":[112,112,0,0,14,14,120,104]},{"a":51483,"t":"byte","b":[0,0,30,30,124,116,60,0]},{"a":51491,"t":"byte","b":[62,58,62,58,255,60,124,116]},{"a":51499,"t":"byte","b":[31,24,255,255,248,8,15,9]},{"a":51507,"t":"byte","b":[255,255,240,144,7,3,255,255]},{"a":51515,"t":"byte","b":[224,192,15,7,255,255,240,224]},{"a":51523,"t":"byte","b":[15,7,255,255,240,224,31,14]},{"a":51531,"t":"byte","b":[255,255,248,112,31,14,231,165]},{"a":51539,"t":"byte","b":[248,112,31,14,231,165,248,112]},{"a":51547,"t":"byte","b":[31,14,255,255,248,112,15,7]},{"a":51555,"t":"byte","b":[255,255,240,224,15,7,255,255]},{"a":51563,"t":"byte","b":[240,224,7,3,255,255,224,192]},{"a":51571,"t":"byte","b":[15,9,255,255,240,144,31,16]},{"a":51579,"t":"byte","b":[255,255,248,24,62,46,255,60]},{"a":51587,"t":"byte","b":[124,92,124,92,60,0,62,46]},{"a":51595,"t":"byte","b":[120,120,0,0,30,22,112,112]},{"a":51603,"t":"byte","b":[0,0,14,14]},{"a":51607,"l":"spiked_ball_picture_18","c":"The spiked ball at 18 rows of six bytes (24 pixels wide), for a top face 16 to 19 pixels wide. Loaded at $86EE, where the alternate A is also made non-zero to select the 24-pixel form of the plotter.","t":"byte","b":[192,192,0,0,192,192,225,160]},{"a":51615,"t":"byte","b":[225,1,192,64,119,81,251,226]},{"a":51623,"t":"byte","b":[128,128,63,39,255,249,0,0]},{"a":51631,"t":"byte","b":[31,15,254,252,0,0,63,31]},{"a":51639,"t":"byte","b":[255,254,0,0,63,31,255,254]},{"a":51647,"t":"byte","b":[0,0,127,55,255,251,128,0]},{"a":51655,"t":"byte","b":[127,45,63,43,128,0,127,45]},{"a":51663,"t":"byte","b":[63,43,128,0,127,55,255,251]},{"a":51671,"t":"byte","b":[128,0,63,31,255,254,0,0]},{"a":51679,"t":"byte","b":[63,31,255,254,0,0,31,15]},{"a":51687,"t":"byte","b":[254,252,0,0,63,39,255,249]},{"a":51695,"t":"byte","b":[0,0,119,81,251,226,128,128]},{"a":51703,"t":"byte","b":[225,160,225,1,192,64,192,192]},{"a":51711,"t":"byte","b":[0,0,192,192]},{"a":51715,"l":"spiked_ball_picture_15","c":"The spiked ball at 15 rows of four bytes (16 pixels wide), for a top face 13 to 15 pixels wide. One reference, the load at $86E2.","t":"byte","b":[192,192,6,6,227,160,142,10]},{"a":51723,"t":"byte","b":[127,83,252,148,63,47,248,232]},{"a":51731,"t":"byte","b":[63,31,248,240,63,31,248,240]},{"a":51739,"t":"byte","b":[127,47,252,232,126,42,252,168]},{"a":51747,"t":"byte","b":[127,47,252,232,63,31,248,240]},{"a":51755,"t":"byte","b":[63,31,248,240,63,47,248,232]},{"a":51763,"t":"byte","b":[127,83,252,148,227,160,142,10]},{"a":51771,"t":"byte","b":[192,192,6,6]},{"a":51775,"l":"spiked_ball_picture_12","c":"The spiked ball at 12 rows of four bytes, the smallest of the four, for a top face under 13 pixels wide. One reference, the load at $86D9.","t":"byte","b":[64,0,0,0,102,64,48,32]},{"a":51783,"t":"byte","b":[63,38,224,64,63,31,192,128]},{"a":51791,"t":"byte","b":[63,31,192,128,127,47,224,64]},{"a":51799,"t":"byte","b":[127,47,224,64,63,31,192,128]},{"a":51807,"t":"byte","b":[63,31,192,128,127,38,192,64]},{"a":51815,"t":"byte","b":[198,64,96,32,0,0,32,0]},{"a":51823,"l":"scatter_picture_a","c":"First of the two pictures of a type-$FB object: 16 rows of four bytes, a loose scatter of single cleared pixels. The drawer at $863F plots nothing while the byte at +1 of the object's record is 9 or more, this picture while it is 8 down to 1, and the one at $CAAF when it is 0. One reference, the load at $864E.","t":"byte","b":[0,0,32,32,0,0,0,0]},{"a":51831,"t":"byte","b":[0,0,32,32,8,8,0,0]},{"a":51839,"t":"byte","b":[2,2,32,32,1,1,64,64]},{"a":51847,"t":"byte","b":[160,160,0,0,10,10,64,64]},{"a":51855,"t":"byte","b":[4,4,0,0,0,0,160,160]},{"a":51863,"t":"byte","b":[4,4,20,20,8,8,2,2]},{"a":51871,"t":"byte","b":[0,0,0,0,8,8,0,0]},{"a":51879,"t":"byte","b":[0,0,0,0,16,16,0,0]},{"a":51887,"l":"scatter_picture_b","c":"Second picture of a type-$FB object, 16 rows of four bytes: more cleared pixels than $CA6F, gathered into a rough ring round the middle. Loaded at $8654 when the byte at +1 of the object's record is 0.","t":"byte","b":[0,0,128,128,0,0,0,0]},{"a":51895,"t":"byte","b":[0,0,128,128,0,0,128,128]},{"a":51903,"t":"byte","b":[2,2,192,192,199,199,192,192]},{"a":51911,"t":"byte","b":[60,60,96,96,25,25,35,35]},{"a":51919,"t":"byte","b":[18,18,28,28,56,56,48,48]},{"a":51927,"t":"byte","b":[172,172,96,96,6,6,224,224]},{"a":51935,"t":"byte","b":[12,12,56,56,8,8,4,4]},{"a":51943,"t":"byte","b":[0,0,1,1,8,8,0,0]},{"a":51951,"l":"small_bug_ring_6","c":"A ring 6 pixels across with a mark inside, 6 rows of four bytes. It is one end of the three-part shape that $B4E0 draws in place of legs and discs for a type-$F3 object whose size byte is 7: plotted at $B5AB, up to 4 pixels from the centre in the direction given by the byte at +$0E of the object's record, then 3 columns left and 3 rows up. One reference, the load at $B5A5.","t":"byte","b":[48,0,0,0,120,48,0,0]},{"a":51959,"t":"byte","b":[252,88,0,0,252,120,0,0]},{"a":51967,"t":"byte","b":[120,48,0,0,48,0,0,0]},{"a":51975,"l":"small_bug_ring_7","c":"A ring 7 pixels across, 7 rows of four bytes: the other end of the three-part shape drawn at $B4E0, plotted at $B559 up to 4 pixels from the centre the opposite way from $CAEF, then 3 columns left and 4 rows up. One reference, the load at $B553.","t":"byte","b":[56,0,0,0,124,56,0,0]},{"a":51983,"t":"byte","b":[254,108,0,0,254,92,0,0]},{"a":51991,"t":"byte","b":[254,124,0,0,124,56,0,0]},{"a":51999,"t":"byte","b":[56,0,0,0]},{"a":52003,"l":"small_bug_middle_a","c":"The middle of the three-part shape drawn at $B4E0, 5 rows of four bytes: a blob 5 pixels across with four set pixels, plotted at $B504 at the centre less 3 in both directions on frames where bit 0 of the frame counter is 0. One reference, the load at $B4EF.","t":"byte","b":[112,80,0,0,248,248,0,0]},{"a":52011,"t":"byte","b":[248,112,0,0,248,248,0,0]},{"a":52019,"t":"byte","b":[112,80,0,0]},{"a":52023,"l":"small_bug_middle_b","c":"The other version of the middle, 5 rows of four bytes: a full 5 by 5 square with eight set pixels round its edge, used on frames where bit 0 of the frame counter is 1. One reference, the load at $B4E5.","t":"byte","b":[248,168,0,0,248,112,0,0]},{"a":52031,"t":"byte","b":[248,248,0,0,248,112,0,0]},{"a":52039,"t":"byte","b":[248,168,0,0]},{"a":52043,"l":"spindle_pictures","c":"Four pictures of a spindle, each 12 rows of four bytes ($30 bytes): a rounded three-cornered shape seen at four angles. The drawer of type-$F7 items at $860A adds $30 times a two-bit number to $CB4B. That number is the low two bits of the frame counter when bit 0 of the item's top height is set and the low two bits of the negated counter when it is clear, so the picture advances a step every frame and spindles at odd and even heights step in opposite orders. One reference, the load at $862B.","t":"byte","b":[3,3,224,224,15,12,240,48]},{"a":52051,"t":"byte","b":[127,96,240,80,255,192,240,144]},{"a":52059,"t":"byte","b":[255,185,240,16,127,70,240,16]},{"a":52067,"t":"byte","b":[127,70,224,32,63,33,224,32]},{"a":52075,"t":"byte","b":[31,17,224,32,15,9,192,64]},{"a":52083,"t":"byte","b":[7,6,192,192,1,1,128,128]},{"a":52091,"t":"byte","b":[124,124,0,0,255,195,128,128]},{"a":52099,"t":"byte","b":[255,160,224,96,255,144,240,48]},{"a":52107,"t":"byte","b":[255,143,240,208,251,138,224,32]},{"a":52115,"t":"byte","b":[127,78,224,32,127,72,192,64]},{"a":52123,"t":"byte","b":[127,72,128,128,63,41,0,0]},{"a":52131,"t":"byte","b":[62,52,0,0,24,24,0,0]},{"a":52139,"t":"byte","b":[24,24,0,0,62,54,0,0]},{"a":52147,"t":"byte","b":[63,41,0,0,127,72,128,128]},{"a":52155,"t":"byte","b":[127,72,192,64,127,94,224,32]},{"a":52163,"t":"byte","b":[243,146,224,32,243,147,240,208]},{"a":52171,"t":"byte","b":[255,158,240,48,255,160,224,96]},{"a":52179,"t":"byte","b":[255,195,128,128,124,124,0,0]},{"a":52187,"t":"byte","b":[1,1,128,128,7,6,192,192]},{"a":52195,"t":"byte","b":[15,9,192,64,31,17,224,32]},{"a":52203,"t":"byte","b":[63,33,224,32,127,71,224,32]},{"a":52211,"t":"byte","b":[125,69,240,16,255,191,240,16]},{"a":52219,"t":"byte","b":[255,192,240,144,127,96,240,80]},{"a":52227,"t":"byte","b":[31,28,240,48,3,3,224,224]},{"a":52235,"l":"counter_display_left","c":"Left half of the built picture of the three-digit counter: 16 rows of six bytes as mask and pattern pairs, holding the hundreds digit and the left part of the tens digit. It is working memory, zero on the tape. $BD12 fills the 192 bytes from here with $FF and XORs the lit segments into pattern bytes, and $BCF5 plots the result. Four instructions load this address ($BCF8, $BD13, $BD20, $BD2E) and $BD16 loads $CC0C as the destination of the fill.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52243,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52251,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52259,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52267,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52275,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52283,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52291,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52299,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52307,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52315,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52323,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52331,"l":"counter_display_right","c":"Right half of the counter picture, 16 rows of six bytes: the rest of the tens digit and the units digit. $BD12 reaches it with offsets of $60 and more from $CC0B for the tens digit and with base $CC6D, one byte pair in, for the units digit ($BD37). $BCF5 plots it from the load at $BD01, 24 columns right of the left half.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52339,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52347,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52355,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52363,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52371,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52379,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52387,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52395,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52403,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52411,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52419,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":52427,"l":"digit_segment_masks","c":"Ten bytes, one for each digit 0 to 9, read by $BD3E at $CCCB plus the digit. Bits 7 down to 1 stand for the seven segments in the order top, upper left, upper right, middle, lower left, lower right, bottom. A set bit leaves the segment dark and a clear bit draws it: 0 is $10 (only the middle dark), 1 is $DA (only the two right-hand segments drawn) and 8 is $00. Bit 0 is not used. One reference, the load at $BD42.","t":"byte","b":[16,218,68,72,138,40,32,90]},{"a":52435,"t":"byte","b":[0,8]},{"a":52437,"l":"segment_stream_two_digits","c":"Segment data for the hundreds and tens digits of the counter picture, 150 bytes that two calls of $BD3E read through once. For each of a digit's seven segments there is a count and then that many pairs of a buffer offset and a byte to XOR in; both digits have groups of 4, 6, 5, 4, 5, 6 and 4 pairs. Every offset is odd, so each falls on a pattern byte of a six-byte row. The second digit's offsets run from $0B to $B5 and so cross from the left buffer at $CC0B into the right one. The pairs of the middle segments, at $CCF7 and $CD42, are stepped over without being read while the digit is 0, 1 or 7. One reference, the load at $BD24.","t":"byte","b":[4,7,3,9,252,13,1,15]},{"a":52445,"t":"byte","b":[248,6,13,4,19,6,25,6]},{"a":52453,"t":"byte","b":[31,6,37,6,43,2,5,15]},{"a":52461,"t":"byte","b":[2,21,6,27,6,33,6,39]},{"a":52469,"t":"byte","b":[2,4,43,1,45,252,49,3]},{"a":52477,"t":"byte","b":[51,248,5,55,4,61,6,67]},{"a":52485,"t":"byte","b":[6,73,6,79,4,6,51,2]},{"a":52493,"t":"byte","b":[57,6,63,6,69,6,75,6]},{"a":52501,"t":"byte","b":[81,2,4,79,1,81,248,85]},{"a":52509,"t":"byte","b":[3,87,252,4,11,15,17,7]},{"a":52517,"t":"byte","b":[103,240,109,224,6,17,16,23]},{"a":52525,"t":"byte","b":[24,29,24,35,24,41,24,47]},{"a":52533,"t":"byte","b":[16,5,109,8,115,24,121,24]},{"a":52541,"t":"byte","b":[127,24,133,8,4,47,7,53]},{"a":52549,"t":"byte","b":[15,139,240,145,224,5,59,16]},{"a":52557,"t":"byte","b":[65,24,71,24,77,24,83,16]},{"a":52565,"t":"byte","b":[6,145,8,151,24,157,24,163]},{"a":52573,"t":"byte","b":[24,169,24,175,8,4,83,7]},{"a":52581,"t":"byte","b":[89,15,175,224,181,240]},{"a":52587,"l":"segment_stream_units_digit","c":"Segment data for the units digit, 75 bytes in the form of $CCD5: seven groups of 4, 6, 5, 4, 5, 6 and 4 pairs. The offsets are the ones the hundreds digit uses, applied from base $CC6D instead of $CC0B, and the XOR bytes are shifted to the digit's place within its bytes. One reference, the load at $BD3B.","t":"byte","b":[4,7,63,9,192,13,31,15]},{"a":52595,"t":"byte","b":[128,6,13,64,19,96,25,96]},{"a":52603,"t":"byte","b":[31,96,37,96,43,32,5,15]},{"a":52611,"t":"byte","b":[32,21,96,27,96,33,96,39]},{"a":52619,"t":"byte","b":[32,4,43,31,45,192,49,63]},{"a":52627,"t":"byte","b":[51,128,5,55,64,61,96,67]},{"a":52635,"t":"byte","b":[96,73,96,79,64,6,51,32]},{"a":52643,"t":"byte","b":[57,96,63,96,69,96,75,96]},{"a":52651,"t":"byte","b":[81,32,4,79,31,81,128,85]},{"a":52659,"t":"byte","b":[63,87,192]},{"a":52662,"l":"digit_glyphs","c":"Ten 8-byte shapes of the digits 0 to 9, a byte for each pixel row, the digit as clear bits on a set background. The routine at $7B63 and $7B6B copies the eight bytes at $CDB6 + 8 * n straight to the screen, n being the low nibble of A when entered at $7B63 and the high nibble at $7B6B. Its 16 call sites, between $78A7 and $7B2A, all follow the decimal conversion at $7B2E, so n is 0 to 9 and nothing past $CE05 is read. One reference, the load at $7B71.","t":"byte","b":[255,135,115,99,83,51,115,135]},{"a":52670,"t":"byte","b":[255,207,143,207,207,207,207,3]},{"a":52678,"t":"byte","b":[255,135,115,243,243,143,127,3]},{"a":52686,"t":"byte","b":[255,135,115,243,199,243,115,135]},{"a":52694,"t":"byte","b":[255,199,167,103,3,231,231,231]},{"a":52702,"t":"byte","b":[255,3,127,7,243,243,115,135]},{"a":52710,"t":"byte","b":[255,135,115,127,7,115,115,135]},{"a":52718,"t":"byte","b":[255,3,115,243,243,231,231,231]},{"a":52726,"t":"byte","b":[255,135,115,115,135,115,115,135]},{"a":52734,"t":"byte","b":[255,135,115,115,131,243,115,135]},{"a":52742,"l":"map_last_cell","c":"The value of the worm's cell pointer at $644A when $CE0A last painted its map of the 25 cells around the worm. Each frame $CE0A compares the two, once the word at $CE08 has been found unchanged, and returns without painting if they match; $CE25 stores the new pointer when they differ. Zero on the tape. Two references, $CE1A and $CE25.","t":"word","b":[0,0],"d":[0],"x":[52762,52773]},{"a":52744,"l":"map_last_spindle_count","c":"The word at $805B as it stood when $CE0A last ran: its low byte is the number of spindles collected and its high byte, $805C, the number last printed in the panel. $CE0A subtracts the new value from the old, stores the new one at $CE14 on every frame, and paints its map of the cells around the worm again when they differ. Zero on the tape. Two references, $CE0A and $CE14.","t":"word","b":[0,0],"d":[0],"x":[52746,52756]},{"a":52746,"l":"update_insert_map","c":"Decides, once per pass of the frame loop, whether the insert map at the bottom left of the panel has to be redrawn. It compares the word at $805B (the spindle count at $805B and the panel's displayed copy of it at $805C) with the copy it keeps at $CE08, and the pointer at $644A (the centre entry of the five by five table of square pointers at $6432, the square the worm is in) with its copy at $CE06. It stores the new values and runs on into the redraw at $CE29 when either differs, otherwise it returns. The panel code at $7AA2, which runs straight after this routine, then copies $805B to $805C, so the word has changed again by the next pass and a change of the spindle count redraws the map on two passes running. Called from the frame loop at $768E, its one caller.","t":"code","b":[42,8,206],"m":"ld","oa":52744,"o":"hl,(map_last_spindle_count)","x":[30350]},{"a":52749,"t":"code","b":[237,91,91,128],"m":"ld","oa":32859,"o":"de,(spindles_collected)"},{"a":52753,"t":"code","b":[167],"m":"and","o":"a"},{"a":52754,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":52756,"t":"code","b":[237,83,8,206],"m":"ld","oa":52744,"o":"(map_last_spindle_count),de"},{"a":52760,"t":"code","b":[32,15],"m":"jr","oa":52777,"o":"nz,draw_insert_map"},{"a":52762,"t":"code","b":[42,6,206],"m":"ld","oa":52742,"o":"hl,(map_last_cell)"},{"a":52765,"t":"code","b":[237,91,74,100],"m":"ld","oa":25674,"o":"de,(current_cell)"},{"a":52769,"t":"code","b":[167],"m":"and","o":"a"},{"a":52770,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":52772,"t":"code","b":[200],"m":"ret","o":"z"},{"a":52773,"t":"code","b":[237,83,6,206],"m":"ld","oa":52742,"o":"(map_last_cell),de"},{"a":52777,"l":"draw_insert_map","c":"Redraws the whole insert map: the 25 board squares around the worm, 16 pixels to a square. It walks the table of square pointers at $6432 backwards from its last entry at $6462, five rows of five, keeping the map position of the current square in $8027 (x, $50 down to $10 in steps of $10) and $8028 (y, $B8 down to $78) and the table pointer in $8029, and calls $CE73 for each entry. After the fifth entry of a row, when that square (table column 0) exists, it takes the pointer at offset 4 of the square's header, the link to the neighbour beyond the left edge, and draws that square too with x = 0, so that a record wide enough to reach into the window still shows. It returns when y drops below $78. Reached from $CE18 when something changed, and called from $D36D when the halt screen ends.","t":"code","b":[62,200],"m":"ld","o":"a,$C8","x":[52760,54125]},{"a":52779,"t":"code","b":[50,40,128],"m":"ld","oa":32808,"o":"(shape_x3_high),a"},{"a":52782,"t":"code","b":[33,98,100],"m":"ld","o":"hl,$6462"},{"a":52785,"t":"code","b":[34,41,128],"m":"ld","oa":32809,"o":"(shape_y3),hl"},{"a":52788,"t":"code","b":[58,40,128],"m":"ld","oa":32808,"o":"a,(shape_x3_high)","x":[52839,52848]},{"a":52791,"t":"code","b":[214,16],"m":"sub","o":"$10"},{"a":52793,"t":"code","b":[50,40,128],"m":"ld","oa":32808,"o":"(shape_x3_high),a"},{"a":52796,"t":"code","b":[254,120],"m":"cp","o":"$78"},{"a":52798,"t":"code","b":[216],"m":"ret","o":"c"},{"a":52799,"t":"code","b":[62,80],"m":"ld","o":"a,$50"},{"a":52801,"t":"code","b":[50,39,128],"m":"ld","oa":32807,"o":"(shape_x3),a"},{"a":52804,"t":"code","b":[42,41,128],"m":"ld","oa":32809,"o":"hl,(shape_y3)","x":[52830]},{"a":52807,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":52808,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":52809,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":52810,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":52811,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":52812,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":52813,"t":"code","b":[34,41,128],"m":"ld","oa":32809,"o":"(shape_y3),hl"},{"a":52816,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":52817,"t":"code","b":[229],"m":"push","o":"hl"},{"a":52818,"t":"code","b":[205,115,206],"m":"call","oa":52851,"o":"draw_map_square"},{"a":52821,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":52822,"t":"code","b":[58,39,128],"m":"ld","oa":32807,"o":"a,(shape_x3)"},{"a":52825,"t":"code","b":[214,16],"m":"sub","o":"$10"},{"a":52827,"t":"code","b":[50,39,128],"m":"ld","oa":32807,"o":"(shape_x3),a"},{"a":52830,"t":"code","b":[194,68,206],"m":"jp","oa":52804,"o":"nz,$CE44"},{"a":52833,"t":"code","b":[17,4,0],"m":"ld","o":"de,$0004"},{"a":52836,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":52837,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":52838,"t":"code","b":[167],"m":"and","o":"a"},{"a":52839,"t":"code","b":[40,203],"m":"jr","oa":52788,"o":"z,$CE34"},{"a":52841,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":52842,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":52843,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":52844,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":52845,"t":"code","b":[205,115,206],"m":"call","oa":52851,"o":"draw_map_square"},{"a":52848,"t":"code","b":[195,52,206],"m":"jp","oa":52788,"o":"$CE34"},{"a":52851,"l":"draw_map_square","c":"Draws one square of the insert map. HL is the square's address, or zero where the board has none. For zero it paints the block black through $CFF5 with A = 0 and returns. Otherwise it paints the block with attribute $20 (black ink on green paper) and steps through the square's 7-byte records, which start 8 bytes in and end at a zero byte, looking at the type byte at offset 6 of each. Type $E2 is plotted with no attribute of its own, so it shows black on the green; types $E8-$EF are plotted with attribute $26 (yellow ink); a type $F7 record whose offset 5 is $0C and whose offset 1 is not $FF is plotted with $27 (white ink); every other record is skipped. The $F7 records with offset 5 = $0C are the spindles: the new-game code at $75A8 picks out the same records to reset their offset 1, and the worm's collision code at $A5AC sets it to $FF when it adds one to the spindle count at $805B, so the white dots are the spindles still to collect. Called from $CE52 and $CE6D.","t":"code","b":[124],"m":"ld","o":"a,h","x":[52818,52845]},{"a":52852,"t":"code","b":[181],"m":"or","o":"l"},{"a":52853,"t":"code","b":[32,6],"m":"jr","oa":52861,"o":"nz,$CE7D"},{"a":52855,"t":"code","b":[62,0],"m":"ld","o":"a,$00"},{"a":52857,"t":"code","b":[205,245,207],"m":"call","oa":53237,"o":"paint_map_block"},{"a":52860,"t":"code","b":[201],"m":"ret"},{"a":52861,"t":"code","b":[229],"m":"push","o":"hl","x":[52853]},{"a":52862,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":52864,"t":"code","b":[62,32],"m":"ld","o":"a,$20"},{"a":52866,"t":"code","b":[205,245,207],"m":"call","oa":53237,"o":"paint_map_block"},{"a":52869,"t":"code","b":[221,35],"m":"inc","o":"ix"},{"a":52871,"t":"code","b":[17,7,0],"m":"ld","o":"de,$0007","x":[52902,52909,52916,52966,52978,53086,53112,53177,53234]},{"a":52874,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":52876,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)"},{"a":52879,"t":"code","b":[167],"m":"and","o":"a"},{"a":52880,"t":"code","b":[200],"m":"ret","o":"z"},{"a":52881,"t":"code","b":[221,126,6],"m":"ld","o":"a,(ix+$06)"},{"a":52884,"t":"code","b":[6,0],"m":"ld","o":"b,$00"},{"a":52886,"t":"code","b":[254,226],"m":"cp","o":"$E2"},{"a":52888,"t":"code","b":[40,38],"m":"jr","oa":52928,"o":"z,plot_map_record"},{"a":52890,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":52891,"t":"code","b":[6,38],"m":"ld","o":"b,$26"},{"a":52893,"t":"code","b":[230,248],"m":"and","o":"$F8"},{"a":52895,"t":"code","b":[254,232],"m":"cp","o":"$E8"},{"a":52897,"t":"code","b":[40,29],"m":"jr","oa":52928,"o":"z,plot_map_record"},{"a":52899,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":52900,"t":"code","b":[254,247],"m":"cp","o":"$F7"},{"a":52902,"t":"code","b":[32,223],"m":"jr","oa":52871,"o":"nz,$CE87"},{"a":52904,"t":"code","b":[221,126,5],"m":"ld","o":"a,(ix+$05)"},{"a":52907,"t":"code","b":[254,12],"m":"cp","o":"$0C"},{"a":52909,"t":"code","b":[32,216],"m":"jr","oa":52871,"o":"nz,$CE87"},{"a":52911,"t":"code","b":[221,126,1],"m":"ld","o":"a,(ix+$01)"},{"a":52914,"t":"code","b":[254,255],"m":"cp","o":"$FF"},{"a":52916,"t":"code","b":[40,209],"m":"jr","oa":52871,"o":"z,$CE87"},{"a":52918,"t":"code","b":[6,39],"m":"ld","o":"b,$27"},{"a":52920,"t":"code","b":[195,192,206],"m":"jp","oa":52928,"o":"plot_map_record"},{"a":52923,"l":"map_mask_first_byte","c":"Pixel mask for the first (leftmost) display byte of the rectangle being plotted on the insert map. When the rectangle fits in one byte this is the whole mask. Written at $CF2A, $CF34 or $CF41 and ORed into the display at $CFA3.","t":"byte","b":[0],"x":[53034,53044,53057,53151]},{"a":52924,"l":"map_mask_second_byte","c":"Pixel mask for the second display byte of the rectangle being plotted on the insert map: the right-hand mask when it spans two bytes, $FF when it spans three, zero when it fits in one. Written together with $CEBB by the word stores at $CF2A and $CF34, or cleared at $CF45. ORed into the display at $CFA7, and tested at $CFD2 to decide whether a second attribute cell is coloured.","t":"byte","b":[0],"x":[53061,53202]},{"a":52925,"l":"map_mask_third_byte","c":"Pixel mask for the third display byte of the rectangle being plotted on the insert map: the right-hand mask when it spans three bytes, otherwise zero. Written at $CF2E, $CF39 or $CF48, ORed into the display at $CFAB and tested at $CFE1 to decide whether a third attribute cell is coloured. The two bytes after it, $CEBE and $CEBF, hold zero and no instruction refers to them.","t":"byte","b":[0,0,0],"x":[53038,53049,53064,53163,53217]},{"a":52928,"l":"plot_map_record","c":"Plots one board record as a filled rectangle on the insert map. IX is the record, B the attribute for its cells (0 for none), and $8027 and $8028 hold the map position of its square. The left edge is the square's x plus the record's x (offset 2) divided by 16, the right edge the square's x plus x plus width (offset 3) divided by 16, and the same for y from offsets 4 and 5. A record wholly outside x $18-$57 or y $88-$B7 is skipped and the rest is clipped to that window, 64 by 48 pixels. The masks for the first and last byte are made from the single-bit table at $8F08 and stored at $CEBB-$CEBD. The rows are then ORed into the bottom third of the display at byte column x/8 - 2, which puts map x $18 at screen pixel 8, and every attribute cell the rectangle touches is given the record's attribute if it still holds $20, so the first coloured record in a cell keeps it. It ends by jumping back to the record loop at $CE87. Reached from the three type tests at $CE98, $CEA1 and $CEB8. The eight bytes at $CFE7 colour a third cell in a row; that takes a coloured record at least 128 units wide, and the widest record of types $E8-$EF on the board is $78.","t":"code","b":[120],"m":"ld","o":"a,b","x":[52888,52897,52920]},{"a":52929,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":52930,"t":"code","b":[58,39,128],"m":"ld","oa":32807,"o":"a,(shape_x3)"},{"a":52933,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":52934,"t":"code","b":[221,126,2],"m":"ld","o":"a,(ix+$02)"},{"a":52937,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":52939,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":52941,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":52943,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":52945,"t":"code","b":[129],"m":"add","o":"a,c"},{"a":52946,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":52947,"t":"code","b":[221,126,2],"m":"ld","o":"a,(ix+$02)"},{"a":52950,"t":"code","b":[221,134,3],"m":"add","o":"a,(ix+$03)"},{"a":52953,"t":"code","b":[203,31],"m":"rr","o":"a"},{"a":52955,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":52957,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":52959,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":52961,"t":"code","b":[129],"m":"add","o":"a,c"},{"a":52962,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":52963,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":52964,"t":"code","b":[254,24],"m":"cp","o":"$18"},{"a":52966,"t":"code","b":[218,135,206],"m":"jp","oa":52871,"o":"c,$CE87"},{"a":52969,"t":"code","b":[254,88],"m":"cp","o":"$58"},{"a":52971,"t":"code","b":[56,2],"m":"jr","oa":52975,"o":"c,$CEEF"},{"a":52973,"t":"code","b":[30,87],"m":"ld","o":"e,$57"},{"a":52975,"t":"code","b":[122],"m":"ld","o":"a,d","x":[52971]},{"a":52976,"t":"code","b":[254,88],"m":"cp","o":"$58"},{"a":52978,"t":"code","b":[210,135,206],"m":"jp","oa":52871,"o":"nc,$CE87"},{"a":52981,"t":"code","b":[254,24],"m":"cp","o":"$18"},{"a":52983,"t":"code","b":[48,2],"m":"jr","oa":52987,"o":"nc,$CEFB"},{"a":52985,"t":"code","b":[22,24],"m":"ld","o":"d,$18"},{"a":52987,"t":"code","b":[38,143],"m":"ld","o":"h,$8F","x":[52983]},{"a":52989,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":52990,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":52992,"t":"code","b":[203,223],"m":"set","o":"3,a"},{"a":52994,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":52995,"t":"code","b":[62,254],"m":"ld","o":"a,$FE"},{"a":52997,"t":"code","b":[150],"m":"sub","o":"(hl)"},{"a":52998,"t":"code","b":[55],"m":"scf"},{"a":52999,"t":"code","b":[203,23],"m":"rl","o":"a"},{"a":53001,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":53002,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":53003,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":53005,"t":"code","b":[203,223],"m":"set","o":"3,a"},{"a":53007,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":53008,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":53009,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":53011,"t":"code","b":[214,254],"m":"sub","o":"$FE"},{"a":53013,"t":"code","b":[55],"m":"scf"},{"a":53014,"t":"code","b":[203,31],"m":"rr","o":"a"},{"a":53016,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":53017,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":53018,"t":"code","b":[230,248],"m":"and","o":"$F8"},{"a":53020,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":53021,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":53022,"t":"code","b":[230,248],"m":"and","o":"$F8"},{"a":53024,"t":"code","b":[149],"m":"sub","o":"l"},{"a":53025,"t":"code","b":[40,28],"m":"jr","oa":53055,"o":"z,$CF3F"},{"a":53027,"t":"code","b":[254,8],"m":"cp","o":"$08"},{"a":53029,"t":"code","b":[40,13],"m":"jr","oa":53044,"o":"z,$CF34"},{"a":53031,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":53032,"t":"code","b":[6,255],"m":"ld","o":"b,$FF"},{"a":53034,"t":"code","b":[237,67,187,206],"m":"ld","oa":52923,"o":"(map_mask_first_byte),bc"},{"a":53038,"t":"code","b":[50,189,206],"m":"ld","oa":52925,"o":"(map_mask_third_byte),a"},{"a":53041,"t":"code","b":[195,75,207],"m":"jp","oa":53067,"o":"$CF4B"},{"a":53044,"t":"code","b":[237,67,187,206],"m":"ld","oa":52923,"o":"(map_mask_first_byte),bc","x":[53029]},{"a":53048,"t":"code","b":[175],"m":"xor","o":"a"},{"a":53049,"t":"code","b":[50,189,206],"m":"ld","oa":52925,"o":"(map_mask_third_byte),a"},{"a":53052,"t":"code","b":[195,75,207],"m":"jp","oa":53067,"o":"$CF4B"},{"a":53055,"t":"code","b":[120],"m":"ld","o":"a,b","x":[53025]},{"a":53056,"t":"code","b":[161],"m":"and","o":"c"},{"a":53057,"t":"code","b":[50,187,206],"m":"ld","oa":52923,"o":"(map_mask_first_byte),a"},{"a":53060,"t":"code","b":[175],"m":"xor","o":"a"},{"a":53061,"t":"code","b":[50,188,206],"m":"ld","oa":52924,"o":"(map_mask_second_byte),a"},{"a":53064,"t":"code","b":[50,189,206],"m":"ld","oa":52925,"o":"(map_mask_third_byte),a"},{"a":53067,"t":"code","b":[58,40,128],"m":"ld","oa":32808,"o":"a,(shape_x3_high)","x":[53041,53052]},{"a":53070,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":53071,"t":"code","b":[221,126,4],"m":"ld","o":"a,(ix+$04)"},{"a":53074,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":53076,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":53078,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":53080,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":53082,"t":"code","b":[133],"m":"add","o":"a,l"},{"a":53083,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":53084,"t":"code","b":[254,184],"m":"cp","o":"$B8"},{"a":53086,"t":"code","b":[210,135,206],"m":"jp","oa":52871,"o":"nc,$CE87"},{"a":53089,"t":"code","b":[254,136],"m":"cp","o":"$88"},{"a":53091,"t":"code","b":[48,2],"m":"jr","oa":53095,"o":"nc,$CF67"},{"a":53093,"t":"code","b":[38,136],"m":"ld","o":"h,$88"},{"a":53095,"t":"code","b":[221,126,4],"m":"ld","o":"a,(ix+$04)","x":[53091]},{"a":53098,"t":"code","b":[221,134,5],"m":"add","o":"a,(ix+$05)"},{"a":53101,"t":"code","b":[203,31],"m":"rr","o":"a"},{"a":53103,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":53105,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":53107,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":53109,"t":"code","b":[133],"m":"add","o":"a,l"},{"a":53110,"t":"code","b":[254,136],"m":"cp","o":"$88"},{"a":53112,"t":"code","b":[218,135,206],"m":"jp","oa":52871,"o":"c,$CE87"},{"a":53115,"t":"code","b":[254,184],"m":"cp","o":"$B8"},{"a":53117,"t":"code","b":[56,2],"m":"jr","oa":53121,"o":"c,$CF81"},{"a":53119,"t":"code","b":[62,183],"m":"ld","o":"a,$B7"},{"a":53121,"t":"code","b":[148],"m":"sub","o":"h","x":[53117]},{"a":53122,"t":"code","b":[60],"m":"inc","o":"a"},{"a":53123,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":53124,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":53125,"t":"code","b":[230,56],"m":"and","o":"$38"},{"a":53127,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":53129,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":53131,"t":"code","b":[203,58],"m":"srl","o":"d"},{"a":53133,"t":"code","b":[203,58],"m":"srl","o":"d"},{"a":53135,"t":"code","b":[203,58],"m":"srl","o":"d"},{"a":53137,"t":"code","b":[21],"m":"dec","o":"d"},{"a":53138,"t":"code","b":[21],"m":"dec","o":"d"},{"a":53139,"t":"code","b":[178],"m":"or","o":"d"},{"a":53140,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":53141,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":53142,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":53144,"t":"code","b":[246,80],"m":"or","o":"$50"},{"a":53146,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":53147,"t":"code","b":[4],"m":"inc","o":"b"},{"a":53148,"t":"code","b":[195,194,207],"m":"jp","oa":53186,"o":"$CFC2"},{"a":53151,"t":"code","b":[237,91,187,206],"m":"ld","oa":52923,"o":"de,(map_mask_first_byte)","x":[53232]},{"a":53155,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":53156,"t":"code","b":[179],"m":"or","o":"e"},{"a":53157,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":53158,"t":"code","b":[44],"m":"inc","o":"l"},{"a":53159,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":53160,"t":"code","b":[178],"m":"or","o":"d"},{"a":53161,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":53162,"t":"code","b":[44],"m":"inc","o":"l"},{"a":53163,"t":"code","b":[58,189,206],"m":"ld","oa":52925,"o":"a,(map_mask_third_byte)"},{"a":53166,"t":"code","b":[182],"m":"or","o":"(hl)"},{"a":53167,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":53168,"t":"code","b":[45],"m":"dec","o":"l"},{"a":53169,"t":"code","b":[45],"m":"dec","o":"l"},{"a":53170,"t":"code","b":[36],"m":"inc","o":"h"},{"a":53171,"t":"code","b":[203,92],"m":"bit","o":"3,h"},{"a":53173,"t":"code","b":[40,57],"m":"jr","oa":53232,"o":"z,$CFF0"},{"a":53175,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":53176,"t":"code","b":[61],"m":"dec","o":"a"},{"a":53177,"t":"code","b":[202,135,206],"m":"jp","oa":52871,"o":"z,$CE87"},{"a":53180,"t":"code","b":[38,80],"m":"ld","o":"h,$50"},{"a":53182,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":53183,"t":"code","b":[198,32],"m":"add","o":"a,$20"},{"a":53185,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":53186,"t":"code","b":[22,90],"m":"ld","o":"d,$5A","x":[53148]},{"a":53188,"t":"code","b":[93],"m":"ld","o":"e,l"},{"a":53189,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":53190,"t":"code","b":[167],"m":"and","o":"a"},{"a":53191,"t":"code","b":[40,38],"m":"jr","oa":53231,"o":"z,$CFEF"},{"a":53193,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":53194,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":53195,"t":"code","b":[254,32],"m":"cp","o":"$20"},{"a":53197,"t":"code","b":[32,3],"m":"jr","oa":53202,"o":"nz,$CFD2"},{"a":53199,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":53200,"t":"code","b":[18],"m":"ld","o":"(de),a"},{"a":53201,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":53202,"t":"code","b":[58,188,206],"m":"ld","oa":52924,"o":"a,(map_mask_second_byte)","x":[53197]},{"a":53205,"t":"code","b":[167],"m":"and","o":"a"},{"a":53206,"t":"code","b":[40,24],"m":"jr","oa":53232,"o":"z,$CFF0"},{"a":53208,"t":"code","b":[28],"m":"inc","o":"e"},{"a":53209,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":53210,"t":"code","b":[254,32],"m":"cp","o":"$20"},{"a":53212,"t":"code","b":[32,3],"m":"jr","oa":53217,"o":"nz,$CFE1"},{"a":53214,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":53215,"t":"code","b":[18],"m":"ld","o":"(de),a"},{"a":53216,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":53217,"t":"code","b":[58,189,206],"m":"ld","oa":52925,"o":"a,(map_mask_third_byte)","x":[53212]},{"a":53220,"t":"code","b":[167],"m":"and","o":"a"},{"a":53221,"t":"code","b":[40,9],"m":"jr","oa":53232,"o":"z,$CFF0"},{"a":53223,"t":"code","b":[28],"m":"inc","o":"e"},{"a":53224,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":53225,"t":"code","b":[254,32],"m":"cp","o":"$20"},{"a":53227,"t":"code","b":[32,3],"m":"jr","oa":53232,"o":"nz,$CFF0"},{"a":53229,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":53230,"t":"code","b":[18],"m":"ld","o":"(de),a"},{"a":53231,"t":"code","b":[8],"m":"ex","o":"af,af'","x":[53191]},{"a":53232,"t":"code","b":[16,173],"m":"djnz","oa":53151,"o":"$CF9F","x":[53173,53206,53221,53227]},{"a":53234,"t":"code","b":[195,135,206],"m":"jp","oa":52871,"o":"$CE87"},{"a":53237,"l":"paint_map_block","c":"Paints the 16 by 16 pixel block of one map square with the attribute in A: the four character cells at column x/8 - 2, row y/8 and the ones to their right and below, where x is $8027 and y is $8028, each through $D027. It returns at once when x/8 is zero, which is the case for the extra square $CE29 draws left of the window. Called from $CE79 with A = 0 (no square) and from $CE82 with A = $20.","t":"code","b":[79],"m":"ld","o":"c,a","x":[52857,52866]},{"a":53238,"t":"code","b":[58,39,128],"m":"ld","oa":32807,"o":"a,(shape_x3)"},{"a":53241,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":53243,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":53245,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":53247,"t":"code","b":[200],"m":"ret","o":"z"},{"a":53248,"t":"code","b":[61],"m":"dec","o":"a"},{"a":53249,"t":"code","b":[61],"m":"dec","o":"a"},{"a":53250,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":53251,"t":"code","b":[58,40,128],"m":"ld","oa":32808,"o":"a,(shape_x3_high)"},{"a":53254,"t":"code","b":[230,248],"m":"and","o":"$F8"},{"a":53256,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":53258,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":53260,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":53262,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":53264,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":53266,"t":"code","b":[179],"m":"or","o":"e"},{"a":53267,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":53268,"t":"code","b":[62,88],"m":"ld","o":"a,$58"},{"a":53270,"t":"code","b":[178],"m":"or","o":"d"},{"a":53271,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":53272,"t":"code","b":[205,39,208],"m":"call","oa":53287,"o":"paint_map_cell"},{"a":53275,"t":"code","b":[28],"m":"inc","o":"e"},{"a":53276,"t":"code","b":[205,39,208],"m":"call","oa":53287,"o":"paint_map_cell"},{"a":53279,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":53280,"t":"code","b":[198,31],"m":"add","o":"a,$1F"},{"a":53282,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":53283,"t":"code","b":[205,39,208],"m":"call","oa":53287,"o":"paint_map_cell"},{"a":53286,"t":"code","b":[28],"m":"inc","o":"e"},{"a":53287,"l":"paint_map_cell","c":"Turns one character cell of the insert map into a blank cell of attribute C. DE is the cell's attribute address. The cell is left alone unless it lies in columns 1-8 of rows 17-22, the window of the map: D must be $5A, the low five bits of E 1 to 8, and the top three bits of E neither 0 nor 7. Inside the window it writes C to the attribute and zeroes the cell's eight pixel bytes at $50xx-$57xx. Called three times from $CFF5, which also falls into it for its fourth cell.","t":"code","b":[123],"m":"ld","o":"a,e","x":[53272,53276,53283]},{"a":53288,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":53290,"t":"code","b":[200],"m":"ret","o":"z"},{"a":53291,"t":"code","b":[254,9],"m":"cp","o":"$09"},{"a":53293,"t":"code","b":[208],"m":"ret","o":"nc"},{"a":53294,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":53295,"t":"code","b":[254,90],"m":"cp","o":"$5A"},{"a":53297,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":53298,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":53299,"t":"code","b":[230,224],"m":"and","o":"$E0"},{"a":53301,"t":"code","b":[200],"m":"ret","o":"z"},{"a":53302,"t":"code","b":[254,224],"m":"cp","o":"$E0"},{"a":53304,"t":"code","b":[200],"m":"ret","o":"z"},{"a":53305,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":53306,"t":"code","b":[18],"m":"ld","o":"(de),a"},{"a":53307,"t":"code","b":[38,80],"m":"ld","o":"h,$50"},{"a":53309,"t":"code","b":[107],"m":"ld","o":"l,e"},{"a":53310,"t":"code","b":[175],"m":"xor","o":"a"},{"a":53311,"t":"code","b":[6,8],"m":"ld","o":"b,$08"},{"a":53313,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[53315]},{"a":53314,"t":"code","b":[36],"m":"inc","o":"h"},{"a":53315,"t":"code","b":[16,252],"m":"djnz","oa":53313,"o":"$D041"},{"a":53317,"t":"code","b":[201],"m":"ret"},{"a":53318,"l":"ball_rotation","c":"Rotation angle of the halt screen's ball, 256 to a turn. $D049 is added to it on every pass at $D136. It is $01 in the loaded image and, like the rest of the ball's state, is not reset when the halt screen is entered, so each halt carries on from the last.","t":"byte","b":[1],"x":[53558,53562]},{"a":53319,"l":"ball_gore_angle","c":"Angle of the gore edge that $D2C2 is asked to compute. Set to the rotation in $D046 with its top two bits forced on ($D13F), then advanced by $20, an eighth of a turn, for each of the eight gores of the ball ($D177).","t":"byte","b":[0],"x":[53567,53618,53623,53954,53985,54016]},{"a":53320,"l":"ball_gores_left","c":"Counts the gores of the ball in one pass: set to 8 at $D14D and decremented at $D16C; the pass ends when it goes below zero.","t":"byte","b":[0],"x":[53581,53608,53612]},{"a":53321,"l":"ball_spin","c":"Amount added to the ball's rotation $D046 on every pass: $0A in the loaded image, set to $F6 (-10) when the ball bounces off the right-hand limit ($D104) and back to $0A when it bounces off the left ($D11C).","t":"byte","b":[10],"x":[53508,53532,53554]},{"a":53322,"l":"ball_x","c":"Horizontal position of the ball's centre in frame-buffer pixels. $D04D is added on every pass and the result is held between $32 and $C7 ($D0F2-$D12C). $C4 in the loaded image. The gore edges at $D051-$D054 are offsets from it.","t":"byte","b":[196],"x":[53494,53548,53674,53698,53788,53816,53893,53978,54009,54040]},{"a":53323,"l":"ball_top_row","c":"Frame-buffer row of the top of the ball. $D04C is added on every pass ($D0C4). $0A in the loaded image; from that state it runs 10, 10, 11, 13, 16, 20, 25, 31, 38, 46, 55 and back again, a bounce every 19 passes.","t":"byte","b":[10],"x":[53433,53445,53454,53685,53825]},{"a":53324,"l":"ball_fall_speed","c":"Vertical speed of the ball in rows per pass. One is added on every pass ($D0C0), so it falls faster and faster. When the top row reaches $37 or more the speed is negated and one is subtracted ($D0E1), which the next pass's added one cancels, so the bounce loses nothing. Zero in the loaded image.","t":"byte","b":[0],"x":[53437,53441,53457,53463,53473,53479]},{"a":53325,"l":"ball_x_speed","c":"Horizontal speed of the ball in pixels per pass: 5 in the loaded image, negated at each side limit ($D10A, $D122). The byte after it, $D04E, holds zero and no instruction refers to it.","t":"byte","b":[5,0],"x":[53490,53514,53538]},{"a":53327,"l":"ball_edge_before_r17","c":"The previous gore edge's x at the radius-17 latitude of the ball (the copy of $D051 made at $D15F before the next edge is computed). Together with $D051 it gives the two ends of the strip edges nearest the poles.","t":"byte","b":[0],"x":[53599,53647,53652,53691,53712,53765,53831,53879]},{"a":53328,"l":"ball_edge_before_r34","c":"The previous gore edge's x at the ball's equator, radius 34 (the copy of $D052 made at $D15F). Compared with $D052 at $D17D to decide whether the gore between the two edges faces the viewer.","t":"byte","b":[0],"x":[53629,53737,53855]},{"a":53329,"l":"ball_edge_r17","c":"The x of the current gore edge at the radius-17 latitude: $D04A plus or minus 17 times the sine of the angle in $D047, written by $D2C2.","t":"byte","b":[0],"x":[53596,53835,53883,53982]},{"a":53330,"l":"ball_edge_r34","c":"The x of the current gore edge at the equator: $D04A plus or minus 34 times the sine of the angle in $D047, written by $D2C2.","t":"byte","b":[0],"x":[53633,53859,54013]},{"a":53331,"l":"ball_edge_before_r29","c":"The previous gore edge's x at the radius-29 latitude (the copy of $D054 made at $D165).","t":"byte","b":[0],"x":[53605,53655,53659,53723,53751,53845,53869]},{"a":53332,"l":"ball_edge_r29","c":"The x of the current gore edge at the radius-29 latitude: $D04A plus or minus 29 times the sine of the angle in $D047, written by $D2C2. The two bytes after it, $D055 and $D056, hold zero and no instruction refers to them.","t":"byte","b":[0,0,0],"x":[53602,54044]},{"a":53335,"l":"ball_strip_heights","c":"Three constants, 5, 13 and 16 ($D057, $D058, $D059): the heights in rows of the strips a gore of the ball is drawn in. Each gore is six strips of 5, 13, 16, 16, 13 and 5 rows, 68 rows in all. Read at $D1C9-$D28A, never written.","t":"byte","b":[5,13,16],"x":[53705,53795,53839,53898]},{"a":53338,"l":"ball_shadow_done","c":"Zero at the start of each pass ($D0B6) and non-zero once the ball's shadow has been drawn, which happens before the first gore that faces the viewer. While the shadow is drawn it also keeps the fill pattern byte $80BF ($D1A1, restored at $D22D). The three bytes after it, $D05B-$D05D, hold zero and no instruction refers to them.","t":"byte","b":[0,0,0,0],"x":[53430,53640,53665,53802,53810]},{"a":53342,"l":"halt_screen","c":"The halt screen: the manual's \"H halts play and runs a bouncing ball routine\". Called from the frame loop at $779A, its one caller, once the halt key (bit 4 of the control byte $8057) has been pressed and released. This first part sets the scene. It fills the attributes of rows 0-16 ($5800-$5A1F) with $55 (bright, cyan ink on red paper) and puts $6D (cyan on cyan) in the first two and last two cells of row 16. It draws a strip of 8-pixel tiles into row 16, the top row of the panel: seven tiles from the table at $D3EA in columns 14, 12 ... 2 and the tile at $D422 in columns 15, 13 ... 3, through $D371. It then builds columns 16-29 of that row as the mirror image of columns 2-15, taking each byte through the bit-reversal table at $6200 and shifting the whole row one pixel left with a set bit entering at the right. Last it zeroes the high bytes of the six trapezoid parameters ($801C, $801E, $8020, $8024, $8026, $8028) and runs on into the pass loop at $D0B5. The ball's own state at $D046-$D05A is not reset.","t":"code","b":[33,0,88],"m":"ld","o":"hl,$5800","x":[30618]},{"a":53345,"t":"code","b":[17,1,88],"m":"ld","o":"de,$5801"},{"a":53348,"t":"code","b":[1,31,2],"m":"ld","o":"bc,$021F"},{"a":53351,"t":"code","b":[54,85],"m":"ld","o":"(hl),$55"},{"a":53353,"t":"code","b":[237,176],"m":"ldir"},{"a":53355,"t":"code","b":[33,109,109],"m":"ld","o":"hl,$6D6D"},{"a":53358,"t":"code","b":[34,0,90],"m":"ld","oa":23040,"o":"($5A00),hl"},{"a":53361,"t":"code","b":[34,30,90],"m":"ld","oa":23070,"o":"($5A1E),hl"},{"a":53364,"t":"code","b":[33,234,211],"m":"ld","o":"hl,$D3EA"},{"a":53367,"t":"code","b":[30,15],"m":"ld","o":"e,$0F"},{"a":53369,"t":"code","b":[229],"m":"push","o":"hl","x":[53382]},{"a":53370,"t":"code","b":[33,34,212],"m":"ld","o":"hl,$D422"},{"a":53373,"t":"code","b":[205,113,211],"m":"call","oa":54129,"o":"draw_strip_tile"},{"a":53376,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":53377,"t":"code","b":[205,113,211],"m":"call","oa":54129,"o":"draw_strip_tile"},{"a":53380,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":53381,"t":"code","b":[61],"m":"dec","o":"a"},{"a":53382,"t":"code","b":[32,241],"m":"jr","oa":53369,"o":"nz,$D079"},{"a":53384,"t":"code","b":[38,80],"m":"ld","o":"h,$50"},{"a":53386,"t":"code","b":[6,98],"m":"ld","o":"b,$62"},{"a":53388,"t":"code","b":[84],"m":"ld","o":"d,h","x":[53408]},{"a":53389,"t":"code","b":[46,2],"m":"ld","o":"l,$02"},{"a":53391,"t":"code","b":[30,29],"m":"ld","o":"e,$1D"},{"a":53393,"t":"code","b":[55],"m":"scf"},{"a":53394,"t":"code","b":[78],"m":"ld","o":"c,(hl)","x":[53403]},{"a":53395,"t":"code","b":[10],"m":"ld","o":"a,(bc)"},{"a":53396,"t":"code","b":[203,23],"m":"rl","o":"a"},{"a":53398,"t":"code","b":[18],"m":"ld","o":"(de),a"},{"a":53399,"t":"code","b":[29],"m":"dec","o":"e"},{"a":53400,"t":"code","b":[44],"m":"inc","o":"l"},{"a":53401,"t":"code","b":[203,101],"m":"bit","o":"4,l"},{"a":53403,"t":"code","b":[40,245],"m":"jr","oa":53394,"o":"z,$D092"},{"a":53405,"t":"code","b":[36],"m":"inc","o":"h"},{"a":53406,"t":"code","b":[203,92],"m":"bit","o":"3,h"},{"a":53408,"t":"code","b":[40,234],"m":"jr","oa":53388,"o":"z,$D08C"},{"a":53410,"t":"code","b":[175],"m":"xor","o":"a"},{"a":53411,"t":"code","b":[50,28,128],"m":"ld","oa":32796,"o":"(shape_x0_high),a"},{"a":53414,"t":"code","b":[50,32,128],"m":"ld","oa":32800,"o":"(shape_x1_high),a"},{"a":53417,"t":"code","b":[50,36,128],"m":"ld","oa":32804,"o":"(shape_x2_high),a"},{"a":53420,"t":"code","b":[50,40,128],"m":"ld","oa":32808,"o":"(shape_x3_high),a"},{"a":53423,"t":"code","b":[50,30,128],"m":"ld","oa":32798,"o":"(shape_y0_high),a"},{"a":53426,"t":"code","b":[50,38,128],"m":"ld","oa":32806,"o":"(shape_y2_high),a"},{"a":53429,"l":"halt_screen_pass","c":"One pass of the halt screen, repeated until a key is down. It moves the ball: the fall speed $D04C grows by one and is added to the top row $D04B, and once the top row is $37 or more the speed is reversed and $8055 is set to 6 for the speaker; the x speed $D04D is added to $D04A, and at $C7 on the right or $32 on the left the ball is put on the limit, the x speed negated, the spin $D049 set to -10 or +10 and $8055 set to 5. It then calls $D37D to redraw the backdrop in the frame buffer, adds the spin to the rotation $D046, computes the first gore edge for that angle with its top two bits set ($D2C2), clears the fill pattern at $80BE/$80BF, sets the gore count to 8 and runs on into $D150. The seven instructions at $D0CC bounce the ball off row 7 at the top; from the loaded state the bounce on the floor loses nothing and the top row is never less than 10, so that test never succeeds.","t":"code","b":[175],"m":"xor","o":"a","x":[54083]},{"a":53430,"t":"code","b":[50,90,208],"m":"ld","oa":53338,"o":"(ball_shadow_done),a"},{"a":53433,"t":"code","b":[58,75,208],"m":"ld","oa":53323,"o":"a,(ball_top_row)"},{"a":53436,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":53437,"t":"code","b":[58,76,208],"m":"ld","oa":53324,"o":"a,(ball_fall_speed)"},{"a":53440,"t":"code","b":[60],"m":"inc","o":"a"},{"a":53441,"t":"code","b":[50,76,208],"m":"ld","oa":53324,"o":"(ball_fall_speed),a"},{"a":53444,"t":"code","b":[129],"m":"add","o":"a,c"},{"a":53445,"t":"code","b":[50,75,208],"m":"ld","oa":53323,"o":"(ball_top_row),a"},{"a":53448,"t":"code","b":[254,7],"m":"cp","o":"$07"},{"a":53450,"t":"code","b":[48,17],"m":"jr","oa":53469,"o":"nc,$D0DD"},{"a":53452,"t":"code","b":[62,7],"m":"ld","o":"a,$07"},{"a":53454,"t":"code","b":[50,75,208],"m":"ld","oa":53323,"o":"(ball_top_row),a"},{"a":53457,"t":"code","b":[58,76,208],"m":"ld","oa":53324,"o":"a,(ball_fall_speed)"},{"a":53460,"t":"code","b":[237,68],"m":"neg"},{"a":53462,"t":"code","b":[60],"m":"inc","o":"a"},{"a":53463,"t":"code","b":[50,76,208],"m":"ld","oa":53324,"o":"(ball_fall_speed),a"},{"a":53466,"t":"code","b":[195,242,208],"m":"jp","oa":53490,"o":"$D0F2"},{"a":53469,"t":"code","b":[254,55],"m":"cp","o":"$37","x":[53450]},{"a":53471,"t":"code","b":[56,17],"m":"jr","oa":53490,"o":"c,$D0F2"},{"a":53473,"t":"code","b":[58,76,208],"m":"ld","oa":53324,"o":"a,(ball_fall_speed)"},{"a":53476,"t":"code","b":[237,68],"m":"neg"},{"a":53478,"t":"code","b":[61],"m":"dec","o":"a"},{"a":53479,"t":"code","b":[50,76,208],"m":"ld","oa":53324,"o":"(ball_fall_speed),a"},{"a":53482,"t":"code","b":[62,6],"m":"ld","o":"a,$06"},{"a":53484,"t":"code","b":[50,85,128],"m":"ld","oa":32853,"o":"(copy_click_period),a"},{"a":53487,"t":"code","b":[195,242,208],"m":"jp","oa":53490,"o":"$D0F2"},{"a":53490,"t":"code","b":[58,77,208],"m":"ld","oa":53325,"o":"a,(ball_x_speed)","x":[53466,53471,53487]},{"a":53493,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":53494,"t":"code","b":[58,74,208],"m":"ld","oa":53322,"o":"a,(ball_x)"},{"a":53497,"t":"code","b":[129],"m":"add","o":"a,c"},{"a":53498,"t":"code","b":[203,121],"m":"bit","o":"7,c"},{"a":53500,"t":"code","b":[32,24],"m":"jr","oa":53526,"o":"nz,$D116"},{"a":53502,"t":"code","b":[254,199],"m":"cp","o":"$C7"},{"a":53504,"t":"code","b":[56,42],"m":"jr","oa":53548,"o":"c,$D12C"},{"a":53506,"t":"code","b":[62,246],"m":"ld","o":"a,$F6"},{"a":53508,"t":"code","b":[50,73,208],"m":"ld","oa":53321,"o":"(ball_spin),a"},{"a":53511,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":53512,"t":"code","b":[237,68],"m":"neg"},{"a":53514,"t":"code","b":[50,77,208],"m":"ld","oa":53325,"o":"(ball_x_speed),a"},{"a":53517,"t":"code","b":[62,5],"m":"ld","o":"a,$05"},{"a":53519,"t":"code","b":[50,85,128],"m":"ld","oa":32853,"o":"(copy_click_period),a"},{"a":53522,"t":"code","b":[62,199],"m":"ld","o":"a,$C7"},{"a":53524,"t":"code","b":[24,22],"m":"jr","oa":53548,"o":"$D12C"},{"a":53526,"t":"code","b":[254,50],"m":"cp","o":"$32","x":[53500]},{"a":53528,"t":"code","b":[48,18],"m":"jr","oa":53548,"o":"nc,$D12C"},{"a":53530,"t":"code","b":[62,10],"m":"ld","o":"a,$0A"},{"a":53532,"t":"code","b":[50,73,208],"m":"ld","oa":53321,"o":"(ball_spin),a"},{"a":53535,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":53536,"t":"code","b":[237,68],"m":"neg"},{"a":53538,"t":"code","b":[50,77,208],"m":"ld","oa":53325,"o":"(ball_x_speed),a"},{"a":53541,"t":"code","b":[62,5],"m":"ld","o":"a,$05"},{"a":53543,"t":"code","b":[50,85,128],"m":"ld","oa":32853,"o":"(copy_click_period),a"},{"a":53546,"t":"code","b":[62,50],"m":"ld","o":"a,$32"},{"a":53548,"t":"code","b":[50,74,208],"m":"ld","oa":53322,"o":"(ball_x),a","x":[53504,53524,53528]},{"a":53551,"t":"code","b":[205,125,211],"m":"call","oa":54141,"o":"draw_halt_backdrop"},{"a":53554,"t":"code","b":[58,73,208],"m":"ld","oa":53321,"o":"a,(ball_spin)"},{"a":53557,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":53558,"t":"code","b":[58,70,208],"m":"ld","oa":53318,"o":"a,(ball_rotation)"},{"a":53561,"t":"code","b":[129],"m":"add","o":"a,c"},{"a":53562,"t":"code","b":[50,70,208],"m":"ld","oa":53318,"o":"(ball_rotation),a"},{"a":53565,"t":"code","b":[246,192],"m":"or","o":"$C0"},{"a":53567,"t":"code","b":[50,71,208],"m":"ld","oa":53319,"o":"(ball_gore_angle),a"},{"a":53570,"t":"code","b":[205,194,210],"m":"call","oa":53954,"o":"ball_gore_edge"},{"a":53573,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":53576,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":53579,"t":"code","b":[62,8],"m":"ld","o":"a,$08"},{"a":53581,"t":"code","b":[50,72,208],"m":"ld","oa":53320,"o":"(ball_gores_left),a"},{"a":53584,"l":"draw_ball_gores","c":"Draws the ball, a sphere of eight gores, as a loop over the gores. For each it complements the fill byte $80BF and stores that AND $AA in $80BE, keeps the last edge ($D051, $D052, $D054 to $D04F, $D050, $D053), counts $D048 down and leaves for $D336 after the eighth, then advances the angle $D047 by $20 and computes the new edge with $D2C2. A gore is drawn only if it faces the viewer, which is when the new equator point $D052 is left of the previous one $D050. Before the first such gore ($D05A still zero) it draws the shadow at $D18F: with the fill bytes set to $FF and $00, six strips through $D2A0 that follow the previous edge moved one pixel right and are 13 pixels wide, the top and bottom strips widened as far as the mirror image of that edge about the ball's centre. The gore itself, from $D238, is six strips through $D293 of 5, 13, 16, 16, 13 and 5 rows from the top row $D04B: a point at the centre $D04A, then the previous and new edges at radius 17, 29, 34, 29 and 17, then the centre again. $D293 flips the fill for every strip, and with the flip per gore that gives the ball its chequered surface.","t":"code","b":[58,191,128],"m":"ld","oa":32959,"o":"a,(fill_pattern_toggle)","x":[53637,53904]},{"a":53587,"t":"code","b":[47],"m":"cpl"},{"a":53588,"t":"code","b":[50,191,128],"m":"ld","oa":32959,"o":"(fill_pattern_toggle),a"},{"a":53591,"t":"code","b":[230,170],"m":"and","o":"$AA"},{"a":53593,"t":"code","b":[50,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),a"},{"a":53596,"t":"code","b":[42,81,208],"m":"ld","oa":53329,"o":"hl,(ball_edge_r17)"},{"a":53599,"t":"code","b":[34,79,208],"m":"ld","oa":53327,"o":"(ball_edge_before_r17),hl"},{"a":53602,"t":"code","b":[58,84,208],"m":"ld","oa":53332,"o":"a,(ball_edge_r29)"},{"a":53605,"t":"code","b":[50,83,208],"m":"ld","oa":53331,"o":"(ball_edge_before_r29),a"},{"a":53608,"t":"code","b":[58,72,208],"m":"ld","oa":53320,"o":"a,(ball_gores_left)"},{"a":53611,"t":"code","b":[61],"m":"dec","o":"a"},{"a":53612,"t":"code","b":[50,72,208],"m":"ld","oa":53320,"o":"(ball_gores_left),a"},{"a":53615,"t":"code","b":[250,54,211],"m":"jp","oa":54070,"o":"m,halt_screen_show"},{"a":53618,"t":"code","b":[58,71,208],"m":"ld","oa":53319,"o":"a,(ball_gore_angle)"},{"a":53621,"t":"code","b":[198,32],"m":"add","o":"a,$20"},{"a":53623,"t":"code","b":[50,71,208],"m":"ld","oa":53319,"o":"(ball_gore_angle),a"},{"a":53626,"t":"code","b":[205,194,210],"m":"call","oa":53954,"o":"ball_gore_edge"},{"a":53629,"t":"code","b":[58,80,208],"m":"ld","oa":53328,"o":"a,(ball_edge_before_r34)"},{"a":53632,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":53633,"t":"code","b":[58,82,208],"m":"ld","oa":53330,"o":"a,(ball_edge_r34)"},{"a":53636,"t":"code","b":[185],"m":"cp","o":"c"},{"a":53637,"t":"code","b":[210,80,209],"m":"jp","oa":53584,"o":"nc,draw_ball_gores"},{"a":53640,"t":"code","b":[58,90,208],"m":"ld","oa":53338,"o":"a,(ball_shadow_done)"},{"a":53643,"t":"code","b":[167],"m":"and","o":"a"},{"a":53644,"t":"code","b":[194,56,210],"m":"jp","oa":53816,"o":"nz,$D238"},{"a":53647,"t":"code","b":[42,79,208],"m":"ld","oa":53327,"o":"hl,(ball_edge_before_r17)"},{"a":53650,"t":"code","b":[44],"m":"inc","o":"l"},{"a":53651,"t":"code","b":[36],"m":"inc","o":"h"},{"a":53652,"t":"code","b":[34,79,208],"m":"ld","oa":53327,"o":"(ball_edge_before_r17),hl"},{"a":53655,"t":"code","b":[58,83,208],"m":"ld","oa":53331,"o":"a,(ball_edge_before_r29)"},{"a":53658,"t":"code","b":[60],"m":"inc","o":"a"},{"a":53659,"t":"code","b":[50,83,208],"m":"ld","oa":53331,"o":"(ball_edge_before_r29),a"},{"a":53662,"t":"code","b":[58,191,128],"m":"ld","oa":32959,"o":"a,(fill_pattern_toggle)"},{"a":53665,"t":"code","b":[50,90,208],"m":"ld","oa":53338,"o":"(ball_shadow_done),a"},{"a":53668,"t":"code","b":[33,255,0],"m":"ld","o":"hl,$00FF"},{"a":53671,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":53674,"t":"code","b":[58,74,208],"m":"ld","oa":53322,"o":"a,(ball_x)"},{"a":53677,"t":"code","b":[198,13],"m":"add","o":"a,$0D"},{"a":53679,"t":"code","b":[50,35,128],"m":"ld","oa":32803,"o":"(shape_x2),a"},{"a":53682,"t":"code","b":[50,39,128],"m":"ld","oa":32807,"o":"(shape_x3),a"},{"a":53685,"t":"code","b":[58,75,208],"m":"ld","oa":53323,"o":"a,(ball_top_row)"},{"a":53688,"t":"code","b":[50,37,128],"m":"ld","oa":32805,"o":"(shape_y2),a"},{"a":53691,"t":"code","b":[58,79,208],"m":"ld","oa":53327,"o":"a,(ball_edge_before_r17)"},{"a":53694,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":53695,"t":"code","b":[198,13],"m":"add","o":"a,$0D"},{"a":53697,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":53698,"t":"code","b":[58,74,208],"m":"ld","oa":53322,"o":"a,(ball_x)"},{"a":53701,"t":"code","b":[135],"m":"add","o":"a,a"},{"a":53702,"t":"code","b":[146],"m":"sub","o":"d"},{"a":53703,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":53704,"t":"code","b":[213],"m":"push","o":"de"},{"a":53705,"t":"code","b":[58,87,208],"m":"ld","oa":53335,"o":"a,(ball_strip_heights)"},{"a":53708,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":53709,"t":"code","b":[205,160,210],"m":"call","oa":53920,"o":"draw_ball_strip"},{"a":53712,"t":"code","b":[58,79,208],"m":"ld","oa":53327,"o":"a,(ball_edge_before_r17)"},{"a":53715,"t":"code","b":[50,35,128],"m":"ld","oa":32803,"o":"(shape_x2),a"},{"a":53718,"t":"code","b":[198,13],"m":"add","o":"a,$0D"},{"a":53720,"t":"code","b":[50,39,128],"m":"ld","oa":32807,"o":"(shape_x3),a"},{"a":53723,"t":"code","b":[58,83,208],"m":"ld","oa":53331,"o":"a,(ball_edge_before_r29)"},{"a":53726,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":53727,"t":"code","b":[198,13],"m":"add","o":"a,$0D"},{"a":53729,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":53730,"t":"code","b":[58,88,208],"m":"ld","oa":53336,"o":"a,($D058)"},{"a":53733,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":53734,"t":"code","b":[205,160,210],"m":"call","oa":53920,"o":"draw_ball_strip"},{"a":53737,"t":"code","b":[58,80,208],"m":"ld","oa":53328,"o":"a,(ball_edge_before_r34)"},{"a":53740,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":53741,"t":"code","b":[198,13],"m":"add","o":"a,$0D"},{"a":53743,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":53744,"t":"code","b":[58,89,208],"m":"ld","oa":53337,"o":"a,($D059)"},{"a":53747,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":53748,"t":"code","b":[205,160,210],"m":"call","oa":53920,"o":"draw_ball_strip"},{"a":53751,"t":"code","b":[58,83,208],"m":"ld","oa":53331,"o":"a,(ball_edge_before_r29)"},{"a":53754,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":53755,"t":"code","b":[198,13],"m":"add","o":"a,$0D"},{"a":53757,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":53758,"t":"code","b":[58,89,208],"m":"ld","oa":53337,"o":"a,($D059)"},{"a":53761,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":53762,"t":"code","b":[205,160,210],"m":"call","oa":53920,"o":"draw_ball_strip"},{"a":53765,"t":"code","b":[58,79,208],"m":"ld","oa":53327,"o":"a,(ball_edge_before_r17)"},{"a":53768,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":53769,"t":"code","b":[198,13],"m":"add","o":"a,$0D"},{"a":53771,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":53772,"t":"code","b":[58,88,208],"m":"ld","oa":53336,"o":"a,($D058)"},{"a":53775,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":53776,"t":"code","b":[205,160,210],"m":"call","oa":53920,"o":"draw_ball_strip"},{"a":53779,"t":"code","b":[209],"m":"pop","o":"de"},{"a":53780,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":53781,"t":"code","b":[50,35,128],"m":"ld","oa":32803,"o":"(shape_x2),a"},{"a":53784,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":53785,"t":"code","b":[50,39,128],"m":"ld","oa":32807,"o":"(shape_x3),a"},{"a":53788,"t":"code","b":[58,74,208],"m":"ld","oa":53322,"o":"a,(ball_x)"},{"a":53791,"t":"code","b":[198,13],"m":"add","o":"a,$0D"},{"a":53793,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":53794,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":53795,"t":"code","b":[58,87,208],"m":"ld","oa":53335,"o":"a,(ball_strip_heights)"},{"a":53798,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":53799,"t":"code","b":[205,160,210],"m":"call","oa":53920,"o":"draw_ball_strip"},{"a":53802,"t":"code","b":[58,90,208],"m":"ld","oa":53338,"o":"a,(ball_shadow_done)"},{"a":53805,"t":"code","b":[50,191,128],"m":"ld","oa":32959,"o":"(fill_pattern_toggle),a"},{"a":53808,"t":"code","b":[203,255],"m":"set","o":"7,a"},{"a":53810,"t":"code","b":[50,90,208],"m":"ld","oa":53338,"o":"(ball_shadow_done),a"},{"a":53813,"t":"code","b":[195,56,210],"m":"jp","oa":53816,"o":"$D238"},{"a":53816,"t":"code","b":[58,74,208],"m":"ld","oa":53322,"o":"a,(ball_x)","x":[53644,53813]},{"a":53819,"t":"code","b":[50,35,128],"m":"ld","oa":32803,"o":"(shape_x2),a"},{"a":53822,"t":"code","b":[50,39,128],"m":"ld","oa":32807,"o":"(shape_x3),a"},{"a":53825,"t":"code","b":[58,75,208],"m":"ld","oa":53323,"o":"a,(ball_top_row)"},{"a":53828,"t":"code","b":[50,37,128],"m":"ld","oa":32805,"o":"(shape_y2),a"},{"a":53831,"t":"code","b":[58,79,208],"m":"ld","oa":53327,"o":"a,(ball_edge_before_r17)"},{"a":53834,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":53835,"t":"code","b":[58,81,208],"m":"ld","oa":53329,"o":"a,(ball_edge_r17)"},{"a":53838,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":53839,"t":"code","b":[58,87,208],"m":"ld","oa":53335,"o":"a,(ball_strip_heights)"},{"a":53842,"t":"code","b":[205,147,210],"m":"call","oa":53907,"o":"draw_ball_strip_flipped"},{"a":53845,"t":"code","b":[237,91,83,208],"m":"ld","oa":53331,"o":"de,(ball_edge_before_r29)"},{"a":53849,"t":"code","b":[58,88,208],"m":"ld","oa":53336,"o":"a,($D058)"},{"a":53852,"t":"code","b":[205,147,210],"m":"call","oa":53907,"o":"draw_ball_strip_flipped"},{"a":53855,"t":"code","b":[58,80,208],"m":"ld","oa":53328,"o":"a,(ball_edge_before_r34)"},{"a":53858,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":53859,"t":"code","b":[58,82,208],"m":"ld","oa":53330,"o":"a,(ball_edge_r34)"},{"a":53862,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":53863,"t":"code","b":[58,89,208],"m":"ld","oa":53337,"o":"a,($D059)"},{"a":53866,"t":"code","b":[205,147,210],"m":"call","oa":53907,"o":"draw_ball_strip_flipped"},{"a":53869,"t":"code","b":[237,91,83,208],"m":"ld","oa":53331,"o":"de,(ball_edge_before_r29)"},{"a":53873,"t":"code","b":[58,89,208],"m":"ld","oa":53337,"o":"a,($D059)"},{"a":53876,"t":"code","b":[205,147,210],"m":"call","oa":53907,"o":"draw_ball_strip_flipped"},{"a":53879,"t":"code","b":[58,79,208],"m":"ld","oa":53327,"o":"a,(ball_edge_before_r17)"},{"a":53882,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":53883,"t":"code","b":[58,81,208],"m":"ld","oa":53329,"o":"a,(ball_edge_r17)"},{"a":53886,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":53887,"t":"code","b":[58,88,208],"m":"ld","oa":53336,"o":"a,($D058)"},{"a":53890,"t":"code","b":[205,147,210],"m":"call","oa":53907,"o":"draw_ball_strip_flipped"},{"a":53893,"t":"code","b":[58,74,208],"m":"ld","oa":53322,"o":"a,(ball_x)"},{"a":53896,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":53897,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":53898,"t":"code","b":[58,87,208],"m":"ld","oa":53335,"o":"a,(ball_strip_heights)"},{"a":53901,"t":"code","b":[205,147,210],"m":"call","oa":53907,"o":"draw_ball_strip_flipped"},{"a":53904,"t":"code","b":[195,80,209],"m":"jp","oa":53584,"o":"draw_ball_gores"},{"a":53907,"l":"draw_ball_strip_flipped","c":"Flips the fill pattern and draws one strip of a gore. A is the strip's height in rows, D and E the x of its two lower corners. It complements $80BF, stores that AND $AA in $80BE, so the pair alternates between $00/$00 and $AA/$FF, and runs on into $D2A0. Called six times, from $D252 to $D28D, once for each strip of a gore.","t":"code","b":[79],"m":"ld","o":"c,a","x":[53842,53852,53866,53876,53890,53901]},{"a":53908,"t":"code","b":[58,191,128],"m":"ld","oa":32959,"o":"a,(fill_pattern_toggle)"},{"a":53911,"t":"code","b":[47],"m":"cpl"},{"a":53912,"t":"code","b":[50,191,128],"m":"ld","oa":32959,"o":"(fill_pattern_toggle),a"},{"a":53915,"t":"code","b":[230,170],"m":"and","o":"$AA"},{"a":53917,"t":"code","b":[50,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),a"},{"a":53920,"l":"draw_ball_strip","c":"Draws one strip of the ball or its shadow as a trapezoid stacked under the last one. The previous lower edge becomes the upper edge ($8023 to $801B, $8027 to $801F, the row $8025 to $801D), the row $8025 is moved down by C, and D and E become the new lower corners in $8023 and $8027. It then jumps to the trapezoid filler at $900C, which draws into the frame buffer with the pattern in $80BE/$80BF only when the lower row is below the upper one. Called six times for the shadow, from $D1CD to $D227, and entered six times per gore from $D293.","t":"code","b":[58,35,128],"m":"ld","oa":32803,"o":"a,(shape_x2)","x":[53709,53734,53748,53762,53776,53799]},{"a":53923,"t":"code","b":[50,27,128],"m":"ld","oa":32795,"o":"(shape_x0),a"},{"a":53926,"t":"code","b":[58,39,128],"m":"ld","oa":32807,"o":"a,(shape_x3)"},{"a":53929,"t":"code","b":[50,31,128],"m":"ld","oa":32799,"o":"(shape_x1),a"},{"a":53932,"t":"code","b":[58,37,128],"m":"ld","oa":32805,"o":"a,(shape_y2)"},{"a":53935,"t":"code","b":[50,29,128],"m":"ld","oa":32797,"o":"(shape_y0),a"},{"a":53938,"t":"code","b":[129],"m":"add","o":"a,c"},{"a":53939,"t":"code","b":[50,37,128],"m":"ld","oa":32805,"o":"(shape_y2),a"},{"a":53942,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":53943,"t":"code","b":[50,35,128],"m":"ld","oa":32803,"o":"(shape_x2),a"},{"a":53946,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":53947,"t":"code","b":[50,39,128],"m":"ld","oa":32807,"o":"(shape_x3),a"},{"a":53950,"t":"code","b":[195,12,144],"m":"jp","oa":36876,"o":"fill_outlined_trapezoid"},{"a":53953,"l":"unreached_ret_after_strip","c":"One byte, $C9, a RET that nothing reaches: the routine before it leaves through its JP to $900C and no instruction refers to this address.","t":"byte","b":[201]},{"a":53954,"l":"ball_gore_edge","c":"Computes where one gore edge of the ball lies at three latitudes. For the angle in $D047 it takes the sine from $A8C4 (a magnitude of 0-255 with the sign returned in the alternate carry flag), multiplies it by 17, 34 and 29 with $D320, keeps the high byte of each product, negates it for angles of $80 and above, and adds it to the ball's centre x $D04A, giving $D051, $D052 and $D054. The largest offsets are 16, 33 and 28 pixels. Called from $D142 for the first edge of a pass and from $D17A for each of the eight that follow.","t":"code","b":[58,71,208],"m":"ld","oa":53319,"o":"a,(ball_gore_angle)","x":[53570,53626]},{"a":53957,"t":"code","b":[205,196,168],"m":"call","oa":43204,"o":"sine_lookup"},{"a":53960,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":53961,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":53963,"t":"code","b":[62,17],"m":"ld","o":"a,$11"},{"a":53965,"t":"code","b":[205,32,211],"m":"call","oa":54048,"o":"multiply_a_by_de"},{"a":53968,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":53969,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":53970,"t":"code","b":[48,4],"m":"jr","oa":53976,"o":"nc,$D2D8"},{"a":53972,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":53973,"t":"code","b":[237,68],"m":"neg"},{"a":53975,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":53976,"t":"code","b":[8],"m":"ex","o":"af,af'","x":[53970]},{"a":53977,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":53978,"t":"code","b":[58,74,208],"m":"ld","oa":53322,"o":"a,(ball_x)"},{"a":53981,"t":"code","b":[129],"m":"add","o":"a,c"},{"a":53982,"t":"code","b":[50,81,208],"m":"ld","oa":53329,"o":"(ball_edge_r17),a"},{"a":53985,"t":"code","b":[58,71,208],"m":"ld","oa":53319,"o":"a,(ball_gore_angle)"},{"a":53988,"t":"code","b":[205,196,168],"m":"call","oa":43204,"o":"sine_lookup"},{"a":53991,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":53992,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":53994,"t":"code","b":[62,34],"m":"ld","o":"a,$22"},{"a":53996,"t":"code","b":[205,32,211],"m":"call","oa":54048,"o":"multiply_a_by_de"},{"a":53999,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":54000,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":54001,"t":"code","b":[48,4],"m":"jr","oa":54007,"o":"nc,$D2F7"},{"a":54003,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":54004,"t":"code","b":[237,68],"m":"neg"},{"a":54006,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":54007,"t":"code","b":[8],"m":"ex","o":"af,af'","x":[54001]},{"a":54008,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":54009,"t":"code","b":[58,74,208],"m":"ld","oa":53322,"o":"a,(ball_x)"},{"a":54012,"t":"code","b":[129],"m":"add","o":"a,c"},{"a":54013,"t":"code","b":[50,82,208],"m":"ld","oa":53330,"o":"(ball_edge_r34),a"},{"a":54016,"t":"code","b":[58,71,208],"m":"ld","oa":53319,"o":"a,(ball_gore_angle)"},{"a":54019,"t":"code","b":[205,196,168],"m":"call","oa":43204,"o":"sine_lookup"},{"a":54022,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":54023,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":54025,"t":"code","b":[62,29],"m":"ld","o":"a,$1D"},{"a":54027,"t":"code","b":[205,32,211],"m":"call","oa":54048,"o":"multiply_a_by_de"},{"a":54030,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":54031,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":54032,"t":"code","b":[48,4],"m":"jr","oa":54038,"o":"nc,$D316"},{"a":54034,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":54035,"t":"code","b":[237,68],"m":"neg"},{"a":54037,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":54038,"t":"code","b":[8],"m":"ex","o":"af,af'","x":[54032]},{"a":54039,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":54040,"t":"code","b":[58,74,208],"m":"ld","oa":53322,"o":"a,(ball_x)"},{"a":54043,"t":"code","b":[129],"m":"add","o":"a,c"},{"a":54044,"t":"code","b":[50,84,208],"m":"ld","oa":53332,"o":"(ball_edge_r29),a"},{"a":54047,"t":"code","b":[201],"m":"ret"},{"a":54048,"l":"multiply_a_by_de","c":"Returns HL = A times DE, the low 16 bits, by shifting A right and DE left and adding DE for every set bit; A = 0 returns 0 at once. A is left zero and DE shifted. Called three times from $D2C2 and from $885A and $887A in the drawing routine at $8833, five callers in all.","t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000","x":[34906,34938,53965,53996,54027]},{"a":54051,"t":"code","b":[167],"m":"and","o":"a"},{"a":54052,"t":"code","b":[200],"m":"ret","o":"z"},{"a":54053,"t":"code","b":[195,45,211],"m":"jp","oa":54061,"o":"$D32D"},{"a":54056,"t":"code","b":[25],"m":"add","o":"hl,de","x":[54065]},{"a":54057,"t":"code","b":[203,35],"m":"sla","o":"e","x":[54063]},{"a":54059,"t":"code","b":[203,18],"m":"rl","o":"d"},{"a":54061,"t":"code","b":[203,63],"m":"srl","o":"a","x":[54053]},{"a":54063,"t":"code","b":[48,248],"m":"jr","oa":54057,"o":"nc,$D329"},{"a":54065,"t":"code","b":[194,40,211],"m":"jp","oa":54056,"o":"nz,$D328"},{"a":54068,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":54069,"t":"code","b":[201],"m":"ret"},{"a":54070,"l":"halt_screen_show","c":"Ends a pass of the halt screen. It calls $E9E8, which copies the frame buffer to the display and drives the speaker from the value in $8055, then zeroes $8055 and reads all eight keyboard half-rows at once (IN from port $FE with the high byte zero). With no key down it jumps back to $D0B5 for another pass, so any key at all ends the halt. That includes the halt key itself, which the frame loop at $7789 then finds still down and answers with another halt once it is released. On a key it puts the game's screen back: attributes of rows 0-15 to $44 (bright green ink on black), the attributes of row 16 copied from row 23, and the pixels of row 16 rebuilt as the bottom row of the panel turned upside down (31 bytes of each of the eight lines, $57E0 to $5000 and so on). It then calls $CE29 to redraw the insert map and returns to the frame loop. Row 16 is the panel's top border and row 23 its bottom one. Rebuilding the one from the other only works where they are mirror images; in the panel as it stands during play they differ in columns 10 to 12, so those cells of the top border come back changed.","t":"code","b":[205,232,233],"m":"call","oa":59880,"o":"copy_buffer_to_screen","x":[53615]},{"a":54073,"t":"code","b":[175],"m":"xor","o":"a"},{"a":54074,"t":"code","b":[50,85,128],"m":"ld","oa":32853,"o":"(copy_click_period),a"},{"a":54077,"t":"code","b":[175],"m":"xor","o":"a"},{"a":54078,"t":"code","b":[219,254],"m":"in","o":"a,($FE)"},{"a":54080,"t":"code","b":[47],"m":"cpl"},{"a":54081,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":54083,"t":"code","b":[202,181,208],"m":"jp","oa":53429,"o":"z,halt_screen_pass"},{"a":54086,"t":"code","b":[33,0,88],"m":"ld","o":"hl,$5800"},{"a":54089,"t":"code","b":[17,1,88],"m":"ld","o":"de,$5801"},{"a":54092,"t":"code","b":[1,255,1],"m":"ld","o":"bc,$01FF"},{"a":54095,"t":"code","b":[54,68],"m":"ld","o":"(hl),$44"},{"a":54097,"t":"code","b":[237,176],"m":"ldir"},{"a":54099,"t":"code","b":[33,224,90],"m":"ld","o":"hl,$5AE0"},{"a":54102,"t":"code","b":[14,32],"m":"ld","o":"c,$20"},{"a":54104,"t":"code","b":[237,176],"m":"ldir"},{"a":54106,"t":"code","b":[38,87],"m":"ld","o":"h,$57"},{"a":54108,"t":"code","b":[22,80],"m":"ld","o":"d,$50"},{"a":54110,"t":"code","b":[6,0],"m":"ld","o":"b,$00"},{"a":54112,"t":"code","b":[88],"m":"ld","o":"e,b","x":[54123]},{"a":54113,"t":"code","b":[46,224],"m":"ld","o":"l,$E0"},{"a":54115,"t":"code","b":[14,31],"m":"ld","o":"c,$1F"},{"a":54117,"t":"code","b":[237,176],"m":"ldir"},{"a":54119,"t":"code","b":[37],"m":"dec","o":"h"},{"a":54120,"t":"code","b":[20],"m":"inc","o":"d"},{"a":54121,"t":"code","b":[203,90],"m":"bit","o":"3,d"},{"a":54123,"t":"code","b":[40,243],"m":"jr","oa":54112,"o":"z,$D360"},{"a":54125,"t":"code","b":[205,41,206],"m":"call","oa":52777,"o":"draw_insert_map"},{"a":54128,"t":"code","b":[201],"m":"ret"},{"a":54129,"l":"draw_strip_tile","c":"Copies the eight bytes at HL into one character cell of row 16: the eight display lines $50xx-$57xx at column E. It leaves HL after the tile and E one column to the left. Called from $D07D and $D081 while the halt screen builds its strip.","t":"code","b":[22,80],"m":"ld","o":"d,$50","x":[53373,53377]},{"a":54131,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[54137]},{"a":54132,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54133,"t":"code","b":[18],"m":"ld","o":"(de),a"},{"a":54134,"t":"code","b":[20],"m":"inc","o":"d"},{"a":54135,"t":"code","b":[203,90],"m":"bit","o":"3,d"},{"a":54137,"t":"code","b":[40,248],"m":"jr","oa":54131,"o":"z,$D373"},{"a":54139,"t":"code","b":[29],"m":"dec","o":"e"},{"a":54140,"t":"code","b":[201],"m":"ret"},{"a":54141,"l":"draw_halt_backdrop","c":"Fills the whole frame buffer, $F000-$FFFF, with the halt screen's backdrop by pushing words with the stack pointer started at $0000, so it writes from $FFFF downwards: 4,096 bytes, 128 rows of 32. The result is 16 blank rows of $FF at the top and below them seven bands of 16 rows. Each band starts with a dotted line across ($FE in byte column 2, then 26 bytes of $AA in columns 3-28), and of the 15 rows under it every second one carries $FE in the even byte columns 2-28: a dotted grid of 13 by 7 cells of 16 pixels, with no line under the last band. The caller's stack pointer is kept in $E9E6 meanwhile. Called from $D12F on every pass, where the game's own passes clear the buffer with $EAA9.","t":"code","b":[237,115,230,233],"m":"ld","oa":59878,"o":"(saved_stack_pointer),sp","x":[53551]},{"a":54145,"t":"code","b":[49,0,0],"m":"ld","o":"sp,$0000"},{"a":54148,"t":"code","b":[17,255,255],"m":"ld","o":"de,$FFFF"},{"a":54151,"t":"code","b":[14,7],"m":"ld","o":"c,$07"},{"a":54153,"t":"code","b":[17,255,255],"m":"ld","o":"de,$FFFF"},{"a":54156,"t":"code","b":[33,254,255],"m":"ld","o":"hl,$FFFE"},{"a":54159,"t":"code","b":[6,7],"m":"ld","o":"b,$07","x":[54235]},{"a":54161,"t":"code","b":[213],"m":"push","o":"de","x":[54193]},{"a":54162,"t":"code","b":[213],"m":"push","o":"de"},{"a":54163,"t":"code","b":[213],"m":"push","o":"de"},{"a":54164,"t":"code","b":[213],"m":"push","o":"de"},{"a":54165,"t":"code","b":[213],"m":"push","o":"de"},{"a":54166,"t":"code","b":[213],"m":"push","o":"de"},{"a":54167,"t":"code","b":[213],"m":"push","o":"de"},{"a":54168,"t":"code","b":[213],"m":"push","o":"de"},{"a":54169,"t":"code","b":[213],"m":"push","o":"de"},{"a":54170,"t":"code","b":[213],"m":"push","o":"de"},{"a":54171,"t":"code","b":[213],"m":"push","o":"de"},{"a":54172,"t":"code","b":[213],"m":"push","o":"de"},{"a":54173,"t":"code","b":[213],"m":"push","o":"de"},{"a":54174,"t":"code","b":[213],"m":"push","o":"de"},{"a":54175,"t":"code","b":[213],"m":"push","o":"de"},{"a":54176,"t":"code","b":[213],"m":"push","o":"de"},{"a":54177,"t":"code","b":[213],"m":"push","o":"de"},{"a":54178,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54179,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54180,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54181,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54182,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54183,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54184,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54185,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54186,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54187,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54188,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54189,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54190,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54191,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54192,"t":"code","b":[213],"m":"push","o":"de"},{"a":54193,"t":"code","b":[16,222],"m":"djnz","oa":54161,"o":"$D391"},{"a":54195,"t":"code","b":[213],"m":"push","o":"de"},{"a":54196,"t":"code","b":[213],"m":"push","o":"de"},{"a":54197,"t":"code","b":[213],"m":"push","o":"de"},{"a":54198,"t":"code","b":[213],"m":"push","o":"de"},{"a":54199,"t":"code","b":[213],"m":"push","o":"de"},{"a":54200,"t":"code","b":[213],"m":"push","o":"de"},{"a":54201,"t":"code","b":[213],"m":"push","o":"de"},{"a":54202,"t":"code","b":[213],"m":"push","o":"de"},{"a":54203,"t":"code","b":[213],"m":"push","o":"de"},{"a":54204,"t":"code","b":[213],"m":"push","o":"de"},{"a":54205,"t":"code","b":[213],"m":"push","o":"de"},{"a":54206,"t":"code","b":[213],"m":"push","o":"de"},{"a":54207,"t":"code","b":[213],"m":"push","o":"de"},{"a":54208,"t":"code","b":[213],"m":"push","o":"de"},{"a":54209,"t":"code","b":[213],"m":"push","o":"de"},{"a":54210,"t":"code","b":[213],"m":"push","o":"de"},{"a":54211,"t":"code","b":[46,170],"m":"ld","o":"l,$AA"},{"a":54213,"t":"code","b":[99],"m":"ld","o":"h,e"},{"a":54214,"t":"code","b":[213],"m":"push","o":"de"},{"a":54215,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54216,"t":"code","b":[101],"m":"ld","o":"h,l"},{"a":54217,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54218,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54219,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54220,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54221,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54222,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54223,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54224,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54225,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54226,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54227,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54228,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54229,"t":"code","b":[46,254],"m":"ld","o":"l,$FE"},{"a":54231,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54232,"t":"code","b":[213],"m":"push","o":"de"},{"a":54233,"t":"code","b":[99],"m":"ld","o":"h,e"},{"a":54234,"t":"code","b":[13],"m":"dec","o":"c"},{"a":54235,"t":"code","b":[32,178],"m":"jr","oa":54159,"o":"nz,$D38F"},{"a":54237,"t":"code","b":[6,64],"m":"ld","o":"b,$40"},{"a":54239,"t":"code","b":[213],"m":"push","o":"de","x":[54243]},{"a":54240,"t":"code","b":[213],"m":"push","o":"de"},{"a":54241,"t":"code","b":[213],"m":"push","o":"de"},{"a":54242,"t":"code","b":[213],"m":"push","o":"de"},{"a":54243,"t":"code","b":[16,250],"m":"djnz","oa":54239,"o":"$D3DF"},{"a":54245,"t":"code","b":[237,123,230,233],"m":"ld","oa":59878,"o":"sp,(saved_stack_pointer)"},{"a":54249,"t":"code","b":[201],"m":"ret"},{"a":54250,"l":"halt_strip_tiles","c":"Seven 8-byte tiles, 56 bytes, for the strip the halt screen draws along row 16. The loop at $D079 takes them in order for columns 14, 12, 10, 8, 6, 4 and 2; its column counter starts at 15 and it stops when the column reaches 1, which is how the count of seven is fixed. Each tile is eight display lines, top first. Read only through $D371.","t":"byte","b":[170,254,170,254,168,253,253,168]},{"a":54258,"t":"byte","b":[170,254,170,253,168,251,251,170]},{"a":54266,"t":"byte","b":[170,254,168,253,168,251,247,162]},{"a":54274,"t":"byte","b":[170,253,168,251,170,247,247,170]},{"a":54282,"t":"byte","b":[170,253,170,251,162,239,239,138]},{"a":54290,"t":"byte","b":[170,253,170,247,162,239,223,170]},{"a":54298,"t":"byte","b":[254,253,250,247,234,223,191,42]},{"a":54306,"l":"halt_strip_tile_odd","c":"One 8-byte tile, $AA $FF $AA $FF $AA $FF $FF $AA, drawn by the loop at $D079 in each odd column from 15 down to 3 of row 16, between the tiles of $D3EA.","t":"byte","b":[170,255,170,255,170,255,255,170]},{"a":54314,"l":"train_gap_timer","c":"Passes left before the next member of the train being emitted is written. Reloaded from $D42B at $D63A each time a member is written and counted down at $D624-$D628.","t":"byte","b":[0],"x":[54820,54824,54842]},{"a":54315,"l":"train_gap","c":"Zero when no train is being emitted. Set to $13 (19) at $D618 when one starts and cleared at $D68E after its last member; while it is non-zero it is the value $D42A is reloaded with, so members follow each other 19 passes apart. Tested at $D52D, and read by the board handler at $BEE3. Nothing clears it when a new game starts: its only writers are the two named here.","t":"byte","b":[0],"x":[48867,54573,54808,54839,54926]},{"a":54316,"l":"train_square","c":"Address of the board square that holds the record the train starts from (a word). Stored at $D58C and copied into bytes 2 and 3 of every member's record at $D63D.","t":"byte","b":[0,0],"x":[54668,54845]},{"a":54318,"l":"train_start_x","c":"The x at which each member of the train is created, within the square at $D42C. Worked out at $D5B8, $D5C5 or $D5D7 from the start record and copied into byte 5 of each member at $D646.","t":"byte","b":[0],"x":[54712,54725,54743,54854]},{"a":54319,"l":"train_start_y","c":"The y at which each member of the train is created. Worked out at $D5AB, $D5E4 or $D5F1 from the start record and copied into byte 7 of each member at $D64C.","t":"byte","b":[0],"x":[54699,54756,54769,54860]},{"a":54320,"l":"train_start_height","c":"Byte 0 of the start record, its top height, kept at $D59A. Each member is created standing on it: this value goes into byte $0B (bottom) and this plus 10 into byte $0D (top) at $D65A-$D662.","t":"byte","b":[0],"x":[54682,54874]},{"a":54321,"l":"train_heading","c":"Heading the train sets off on: $00, $40, $80 or $C0, chosen at $D5BB-$D5F4 from the low two bits of the start record's type and stored at $D5FB. Copied into byte $0E of each member, and with $80 added into byte $13, at $D669-$D671.","t":"byte","b":[0],"x":[54779,54889]},{"a":54322,"l":"train_members_left","c":"Members of the current train still to be written: set at $D60B to the number of followers plus one for the leader, 2 to 5, and counted down at $D685-$D689; at zero $D42B is cleared. Like $D42B it is not reset when a game starts. The four bytes after it, $D433-$D436, hold zero and no instruction refers to them.","t":"byte","b":[0,0,0,0,0],"x":[54795,54917,54921]},{"a":54327,"l":"eruption_delay","c":"Passes to wait before another type $FB record may be created. $0A in the loaded image; counted down at $D449 on passes when nothing is in view, and set back to $0A at $D45F each time a record is created.","t":"byte","b":[10],"x":[54338,54346,54367]},{"a":54328,"l":"spawn_objects","c":"Called once per pass from the frame loop at $765F, its one caller: makes new objects in three steps, each of which first steps the random generator at $E472, and then runs every object through $D691. This first step creates the points bugs come up from. If the display code counted nothing at all in view on its last build ($8068 = 0; $AFF4 adds one for each board record or object it accepts), the delay $D437 has run out and the pool counter $7C71 is below 13, it adds 2 to the counter, sets the delay to 10 and writes a record at the pool's end pointer $7C72: type $FB, byte 1 = $14, table position 2,2 (the worm's square), x and y from the worm's position bytes $7FF5 and $7FF7, size $10 by $10, bottom height 0 and top 1; the end pointer moves on 30 bytes. The handler at $DE41 counts byte 1 down and at zero writes a type $F3 bug beside the point, which is what the second count is for.","t":"code","b":[205,114,228],"m":"call","oa":58482,"o":"random_next","x":[30303]},{"a":54331,"t":"code","b":[58,104,128],"m":"ld","oa":32872,"o":"a,(entries_added)"},{"a":54334,"t":"code","b":[167],"m":"and","o":"a"},{"a":54335,"t":"code","b":[194,145,212],"m":"jp","oa":54417,"o":"nz,spawn_flyer"},{"a":54338,"t":"code","b":[58,55,212],"m":"ld","oa":54327,"o":"a,(eruption_delay)"},{"a":54341,"t":"code","b":[167],"m":"and","o":"a"},{"a":54342,"t":"code","b":[202,80,212],"m":"jp","oa":54352,"o":"z,$D450"},{"a":54345,"t":"code","b":[61],"m":"dec","o":"a"},{"a":54346,"t":"code","b":[50,55,212],"m":"ld","oa":54327,"o":"(eruption_delay),a"},{"a":54349,"t":"code","b":[195,145,212],"m":"jp","oa":54417,"o":"spawn_flyer"},{"a":54352,"t":"code","b":[58,113,124],"m":"ld","oa":31857,"o":"a,(object_count_plus_one)","x":[54342]},{"a":54355,"t":"code","b":[254,13],"m":"cp","o":"$0D"},{"a":54357,"t":"code","b":[210,145,212],"m":"jp","oa":54417,"o":"nc,spawn_flyer"},{"a":54360,"t":"code","b":[60],"m":"inc","o":"a"},{"a":54361,"t":"code","b":[60],"m":"inc","o":"a"},{"a":54362,"t":"code","b":[50,113,124],"m":"ld","oa":31857,"o":"(object_count_plus_one),a"},{"a":54365,"t":"code","b":[62,10],"m":"ld","o":"a,$0A"},{"a":54367,"t":"code","b":[50,55,212],"m":"ld","oa":54327,"o":"(eruption_delay),a"},{"a":54370,"t":"code","b":[42,114,124],"m":"ld","oa":31858,"o":"hl,(object_list_end)"},{"a":54373,"t":"code","b":[54,251],"m":"ld","o":"(hl),$FB"},{"a":54375,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54376,"t":"code","b":[54,20],"m":"ld","o":"(hl),$14"},{"a":54378,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54379,"t":"code","b":[54,2],"m":"ld","o":"(hl),$02"},{"a":54381,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54382,"t":"code","b":[54,2],"m":"ld","o":"(hl),$02"},{"a":54384,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54385,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54386,"t":"code","b":[58,245,127],"m":"ld","oa":32757,"o":"a,($7FF5)"},{"a":54389,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":54390,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54391,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54392,"t":"code","b":[58,247,127],"m":"ld","oa":32759,"o":"a,($7FF7)"},{"a":54395,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":54396,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54397,"t":"code","b":[54,16],"m":"ld","o":"(hl),$10"},{"a":54399,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54400,"t":"code","b":[54,16],"m":"ld","o":"(hl),$10"},{"a":54402,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54403,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54404,"t":"code","b":[54,0],"m":"ld","o":"(hl),$00"},{"a":54406,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54407,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54408,"t":"code","b":[54,1],"m":"ld","o":"(hl),$01"},{"a":54410,"t":"code","b":[17,17,0],"m":"ld","o":"de,$0011"},{"a":54413,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":54414,"t":"code","b":[34,114,124],"m":"ld","oa":31858,"o":"(object_list_end),hl"},{"a":54417,"l":"spawn_flyer","c":"Second step of $D438: creates a type $E5 object. It needs the pool counter $7C71 below 9, and either the counter at 1, which means the pool is empty, or the random byte $E46F equal to $4E. The record goes at the end pointer: a table position next to the worm's (bits 0, 1 and 3 of the random byte $E470 pick one of the eight positions around 2,2), x and y $80 (the middle of the square), size 10 by 10, bottom height $CF and top $D9, bytes $0E-$11 from the random bytes $E46F, $E46F, $E470 and $E471, byte $12 = 5, byte $13 = $0F and byte $1C = $63. If the table has no square at that position ($DF9F returns a zero high byte) the record is abandoned where it stands; otherwise the end pointer moves on 30 bytes and the counter goes up by one. An empty pool therefore gets one of these at once, unless the square picked is missing. The type is handled at $DC69.","t":"code","b":[205,114,228],"m":"call","oa":58482,"o":"random_next","x":[54335,54349,54357]},{"a":54420,"t":"code","b":[58,113,124],"m":"ld","oa":31857,"o":"a,(object_count_plus_one)"},{"a":54423,"t":"code","b":[254,9],"m":"cp","o":"$09"},{"a":54425,"t":"code","b":[210,42,213],"m":"jp","oa":54570,"o":"nc,spawn_train"},{"a":54428,"t":"code","b":[61],"m":"dec","o":"a"},{"a":54429,"t":"code","b":[40,8],"m":"jr","oa":54439,"o":"z,$D4A7"},{"a":54431,"t":"code","b":[58,111,228],"m":"ld","oa":58479,"o":"a,(random_state)"},{"a":54434,"t":"code","b":[238,78],"m":"xor","o":"$4E"},{"a":54436,"t":"code","b":[194,42,213],"m":"jp","oa":54570,"o":"nz,spawn_train"},{"a":54439,"t":"code","b":[42,114,124],"m":"ld","oa":31858,"o":"hl,(object_list_end)","x":[54429]},{"a":54442,"t":"code","b":[54,229],"m":"ld","o":"(hl),$E5"},{"a":54444,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54445,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54446,"t":"code","b":[58,112,228],"m":"ld","oa":58480,"o":"a,($E470)"},{"a":54449,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":54450,"t":"code","b":[203,95],"m":"bit","o":"3,a"},{"a":54452,"t":"code","b":[40,13],"m":"jr","oa":54467,"o":"z,$D4C3"},{"a":54454,"t":"code","b":[230,2],"m":"and","o":"$02"},{"a":54456,"t":"code","b":[60],"m":"inc","o":"a"},{"a":54457,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":54458,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":54459,"t":"code","b":[203,7],"m":"rlc","o":"a"},{"a":54461,"t":"code","b":[230,2],"m":"and","o":"$02"},{"a":54463,"t":"code","b":[60],"m":"inc","o":"a"},{"a":54464,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":54465,"t":"code","b":[24,13],"m":"jr","oa":54480,"o":"$D4D0"},{"a":54467,"t":"code","b":[230,1],"m":"and","o":"$01","x":[54452]},{"a":54469,"t":"code","b":[60],"m":"inc","o":"a"},{"a":54470,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":54471,"t":"code","b":[238,3],"m":"xor","o":"$03"},{"a":54473,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":54474,"t":"code","b":[203,72],"m":"bit","o":"1,b"},{"a":54476,"t":"code","b":[32,2],"m":"jr","oa":54480,"o":"nz,$D4D0"},{"a":54478,"t":"code","b":[28],"m":"inc","o":"e"},{"a":54479,"t":"code","b":[20],"m":"inc","o":"d"},{"a":54480,"t":"code","b":[115],"m":"ld","o":"(hl),e","x":[54465,54476]},{"a":54481,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54482,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":54483,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54484,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54485,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":54486,"t":"code","b":[205,159,223],"m":"call","oa":57247,"o":"square_from_reference"},{"a":54489,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":54490,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":54491,"t":"code","b":[167],"m":"and","o":"a"},{"a":54492,"t":"code","b":[202,42,213],"m":"jp","oa":54570,"o":"z,spawn_train"},{"a":54495,"t":"code","b":[54,0],"m":"ld","o":"(hl),$00"},{"a":54497,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54498,"t":"code","b":[54,128],"m":"ld","o":"(hl),$80"},{"a":54500,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54501,"t":"code","b":[54,0],"m":"ld","o":"(hl),$00"},{"a":54503,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54504,"t":"code","b":[54,128],"m":"ld","o":"(hl),$80"},{"a":54506,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54507,"t":"code","b":[62,10],"m":"ld","o":"a,$0A"},{"a":54509,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":54510,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54511,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":54512,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54513,"t":"code","b":[62,207],"m":"ld","o":"a,$CF"},{"a":54515,"t":"code","b":[54,0],"m":"ld","o":"(hl),$00"},{"a":54517,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54518,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":54519,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54520,"t":"code","b":[198,10],"m":"add","o":"a,$0A"},{"a":54522,"t":"code","b":[54,0],"m":"ld","o":"(hl),$00"},{"a":54524,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54525,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":54526,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54527,"t":"code","b":[58,111,228],"m":"ld","oa":58479,"o":"a,(random_state)"},{"a":54530,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":54531,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54532,"t":"code","b":[58,111,228],"m":"ld","oa":58479,"o":"a,(random_state)"},{"a":54535,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":54536,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54537,"t":"code","b":[58,112,228],"m":"ld","oa":58480,"o":"a,($E470)"},{"a":54540,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":54541,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54542,"t":"code","b":[58,113,228],"m":"ld","oa":58481,"o":"a,($E471)"},{"a":54545,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":54546,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54547,"t":"code","b":[54,5],"m":"ld","o":"(hl),$05"},{"a":54549,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54550,"t":"code","b":[54,15],"m":"ld","o":"(hl),$0F"},{"a":54552,"t":"code","b":[17,9,0],"m":"ld","o":"de,$0009"},{"a":54555,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":54556,"t":"code","b":[54,99],"m":"ld","o":"(hl),$63"},{"a":54558,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54559,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54560,"t":"code","b":[34,114,124],"m":"ld","oa":31858,"o":"(object_list_end),hl"},{"a":54563,"t":"code","b":[58,113,124],"m":"ld","oa":31857,"o":"a,(object_count_plus_one)"},{"a":54566,"t":"code","b":[60],"m":"inc","o":"a"},{"a":54567,"t":"code","b":[50,113,124],"m":"ld","oa":31857,"o":"(object_count_plus_one),a"},{"a":54570,"l":"spawn_train","c":"Third step of $D438: the trains that run along the tracks. With a train already being emitted ($D42B non-zero) it goes to $D624. Otherwise a new one starts only on a pass where the low six bits of the random byte $E470 are $19 and the pool counter $7C71 is below 11. It takes a number from 1 to 8 out of bits 1-3 of $E46F and scans the 25 squares of the table at $6432 in table order, counting the records whose type is $E8-$EB; the record that brings the count to that number is the start and control goes to $D586. With fewer such records in the 25 squares no train starts. Either way the pass ends in the walk at $D691.","t":"code","b":[205,114,228],"m":"call","oa":58482,"o":"random_next","x":[54425,54436,54492]},{"a":54573,"t":"code","b":[58,43,212],"m":"ld","oa":54315,"o":"a,(train_gap)"},{"a":54576,"t":"code","b":[167],"m":"and","o":"a"},{"a":54577,"t":"code","b":[194,36,214],"m":"jp","oa":54820,"o":"nz,emit_train_member"},{"a":54580,"t":"code","b":[58,112,228],"m":"ld","oa":58480,"o":"a,($E470)"},{"a":54583,"t":"code","b":[230,63],"m":"and","o":"$3F"},{"a":54585,"t":"code","b":[238,25],"m":"xor","o":"$19"},{"a":54587,"t":"code","b":[194,145,214],"m":"jp","oa":54929,"o":"nz,walk_objects"},{"a":54590,"t":"code","b":[58,113,124],"m":"ld","oa":31857,"o":"a,(object_count_plus_one)"},{"a":54593,"t":"code","b":[254,11],"m":"cp","o":"$0B"},{"a":54595,"t":"code","b":[210,145,214],"m":"jp","oa":54929,"o":"nc,walk_objects"},{"a":54598,"t":"code","b":[58,111,228],"m":"ld","oa":58479,"o":"a,(random_state)"},{"a":54601,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":54603,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":54605,"t":"code","b":[238,3],"m":"xor","o":"$03"},{"a":54607,"t":"code","b":[60],"m":"inc","o":"a"},{"a":54608,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":54609,"t":"code","b":[221,33,50,100],"m":"ld","o":"ix,$6432"},{"a":54613,"t":"code","b":[6,25],"m":"ld","o":"b,$19"},{"a":54615,"t":"code","b":[17,6,0],"m":"ld","o":"de,$0006"},{"a":54618,"t":"code","b":[221,110,0],"m":"ld","o":"l,(ix+$00)","x":[54657]},{"a":54621,"t":"code","b":[221,102,1],"m":"ld","o":"h,(ix+$01)"},{"a":54624,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":54625,"t":"code","b":[180],"m":"or","o":"h"},{"a":54626,"t":"code","b":[40,25],"m":"jr","oa":54653,"o":"z,$D57D"},{"a":54628,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":54629,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54630,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54631,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[54643,54647]},{"a":54632,"t":"code","b":[167],"m":"and","o":"a"},{"a":54633,"t":"code","b":[40,18],"m":"jr","oa":54653,"o":"z,$D57D"},{"a":54635,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":54636,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":54637,"t":"code","b":[230,252],"m":"and","o":"$FC"},{"a":54639,"t":"code","b":[254,232],"m":"cp","o":"$E8"},{"a":54641,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":54642,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":54643,"t":"code","b":[194,103,213],"m":"jp","oa":54631,"o":"nz,$D567"},{"a":54646,"t":"code","b":[13],"m":"dec","o":"c"},{"a":54647,"t":"code","b":[194,103,213],"m":"jp","oa":54631,"o":"nz,$D567"},{"a":54650,"t":"code","b":[195,134,213],"m":"jp","oa":54662,"o":"start_train"},{"a":54653,"t":"code","b":[221,35],"m":"inc","o":"ix","x":[54626,54633]},{"a":54655,"t":"code","b":[221,35],"m":"inc","o":"ix"},{"a":54657,"t":"code","b":[16,215],"m":"djnz","oa":54618,"o":"$D55A"},{"a":54659,"t":"code","b":[195,145,214],"m":"jp","oa":54929,"o":"walk_objects"},{"a":54662,"l":"start_train","c":"Sets up a train at the record found by $D52A (IX the table entry of its square, HL just past the record, A its type). It keeps the square's address in $D42C and the record's top height in $D430, then takes the side the train leaves by, and its heading, from the low two bits of the type: $E8 the right edge (x + width) heading $00; $EA ten units left of the record (x - 10) heading $80; $E9 ten units before it in y (y - 10) heading $C0; $EB its far edge in y (y + depth) heading $40; on the other axis the start is centred (start + half the size - 5). Bits 5 and 6 of the random byte $E471 give the number of followers, 1 to 4: that number goes into byte $16 of the leader's record, one more goes into $D432 and onto the pool counter $7C71, $13 into $D42B and 1 into byte $18. The leader itself, type $F0, is written through $D634. The board's 129 squares hold five records of type $E8, five of $E9, four of $EA and one of $EB.","t":"code","b":[221,78,0],"m":"ld","o":"c,(ix+$00)","x":[54650]},{"a":54665,"t":"code","b":[221,70,1],"m":"ld","o":"b,(ix+$01)"},{"a":54668,"t":"code","b":[237,67,44,212],"m":"ld","oa":54316,"o":"(train_square),bc"},{"a":54672,"t":"code","b":[55],"m":"scf"},{"a":54673,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":54675,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54676,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":54678,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":54679,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)"},{"a":54682,"t":"code","b":[50,48,212],"m":"ld","oa":54320,"o":"(train_start_height),a"},{"a":54685,"t":"code","b":[203,65],"m":"bit","o":"0,c"},{"a":54687,"t":"code","b":[32,44],"m":"jr","oa":54733,"o":"nz,$D5CD"},{"a":54689,"t":"code","b":[221,126,5],"m":"ld","o":"a,(ix+$05)"},{"a":54692,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":54694,"t":"code","b":[221,134,4],"m":"add","o":"a,(ix+$04)"},{"a":54697,"t":"code","b":[214,5],"m":"sub","o":"$05"},{"a":54699,"t":"code","b":[50,47,212],"m":"ld","oa":54319,"o":"(train_start_y),a"},{"a":54702,"t":"code","b":[203,73],"m":"bit","o":"1,c"},{"a":54704,"t":"code","b":[32,14],"m":"jr","oa":54720,"o":"nz,$D5C0"},{"a":54706,"t":"code","b":[221,126,2],"m":"ld","o":"a,(ix+$02)"},{"a":54709,"t":"code","b":[221,134,3],"m":"add","o":"a,(ix+$03)"},{"a":54712,"t":"code","b":[50,46,212],"m":"ld","oa":54318,"o":"(train_start_x),a"},{"a":54715,"t":"code","b":[14,0],"m":"ld","o":"c,$00"},{"a":54717,"t":"code","b":[195,246,213],"m":"jp","oa":54774,"o":"$D5F6"},{"a":54720,"t":"code","b":[221,126,2],"m":"ld","o":"a,(ix+$02)","x":[54704]},{"a":54723,"t":"code","b":[214,10],"m":"sub","o":"$0A"},{"a":54725,"t":"code","b":[50,46,212],"m":"ld","oa":54318,"o":"(train_start_x),a"},{"a":54728,"t":"code","b":[14,128],"m":"ld","o":"c,$80"},{"a":54730,"t":"code","b":[195,246,213],"m":"jp","oa":54774,"o":"$D5F6"},{"a":54733,"t":"code","b":[221,126,3],"m":"ld","o":"a,(ix+$03)","x":[54687]},{"a":54736,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":54738,"t":"code","b":[221,134,2],"m":"add","o":"a,(ix+$02)"},{"a":54741,"t":"code","b":[214,5],"m":"sub","o":"$05"},{"a":54743,"t":"code","b":[50,46,212],"m":"ld","oa":54318,"o":"(train_start_x),a"},{"a":54746,"t":"code","b":[203,73],"m":"bit","o":"1,c"},{"a":54748,"t":"code","b":[40,14],"m":"jr","oa":54764,"o":"z,$D5EC"},{"a":54750,"t":"code","b":[221,126,4],"m":"ld","o":"a,(ix+$04)"},{"a":54753,"t":"code","b":[221,134,5],"m":"add","o":"a,(ix+$05)"},{"a":54756,"t":"code","b":[50,47,212],"m":"ld","oa":54319,"o":"(train_start_y),a"},{"a":54759,"t":"code","b":[14,64],"m":"ld","o":"c,$40"},{"a":54761,"t":"code","b":[195,246,213],"m":"jp","oa":54774,"o":"$D5F6"},{"a":54764,"t":"code","b":[221,126,4],"m":"ld","o":"a,(ix+$04)","x":[54748]},{"a":54767,"t":"code","b":[214,10],"m":"sub","o":"$0A"},{"a":54769,"t":"code","b":[50,47,212],"m":"ld","oa":54319,"o":"(train_start_y),a"},{"a":54772,"t":"code","b":[14,192],"m":"ld","o":"c,$C0"},{"a":54774,"t":"code","b":[221,42,114,124],"m":"ld","oa":31858,"o":"ix,(object_list_end)","x":[54717,54730,54761]},{"a":54778,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":54779,"t":"code","b":[50,49,212],"m":"ld","oa":54321,"o":"(train_heading),a"},{"a":54782,"t":"code","b":[58,113,228],"m":"ld","oa":58481,"o":"a,($E471)"},{"a":54785,"t":"code","b":[7],"m":"rlca"},{"a":54786,"t":"code","b":[7],"m":"rlca"},{"a":54787,"t":"code","b":[7],"m":"rlca"},{"a":54788,"t":"code","b":[230,3],"m":"and","o":"$03"},{"a":54790,"t":"code","b":[60],"m":"inc","o":"a"},{"a":54791,"t":"code","b":[221,119,22],"m":"ld","o":"(ix+$16),a"},{"a":54794,"t":"code","b":[60],"m":"inc","o":"a"},{"a":54795,"t":"code","b":[50,50,212],"m":"ld","oa":54322,"o":"(train_members_left),a"},{"a":54798,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":54799,"t":"code","b":[58,113,124],"m":"ld","oa":31857,"o":"a,(object_count_plus_one)"},{"a":54802,"t":"code","b":[129],"m":"add","o":"a,c"},{"a":54803,"t":"code","b":[50,113,124],"m":"ld","oa":31857,"o":"(object_count_plus_one),a"},{"a":54806,"t":"code","b":[62,19],"m":"ld","o":"a,$13"},{"a":54808,"t":"code","b":[50,43,212],"m":"ld","oa":54315,"o":"(train_gap),a"},{"a":54811,"t":"code","b":[221,54,24,1],"m":"ld","o":"(ix+$18),$01"},{"a":54815,"t":"code","b":[62,240],"m":"ld","o":"a,$F0"},{"a":54817,"t":"code","b":[195,52,214],"m":"jp","oa":54836,"o":"$D634"},{"a":54820,"l":"emit_train_member","c":"Counts the gap $D42A down and, when it reaches zero, writes the next follower of the train at the pool's end pointer: type $F1 (the leader comes in at $D634 with type $F0 already in A). The record gets the square's address from $D42C in bytes 2-3, x and y from $D42E and $D42F, size 10 by 10, bottom height from $D430 and top 10 above it, the heading $D431 in byte $0E and the opposite heading in byte $13, byte $14 = 4, byte $0F = $FF, the state that sends a type $F1 record to the rider code at $DB0F, and byte $10 = 0. The gap is reloaded from $D42B, the end pointer moves on 30 bytes, and when $D432 reaches zero $D42B is cleared. The pool counter is not touched here: it was raised for the whole train at $D613. Because $D42B and $D432 survive the start of a new game while the counter is reset to 1 ($7624), followers left over from a train cut short by the end of a game are written into the next game uncounted, and each one later removed takes the counter one too low: with two left over and nothing else in the pool it goes from 1 to 0 to $FF.","t":"code","b":[58,42,212],"m":"ld","oa":54314,"o":"a,(train_gap_timer)","x":[54577]},{"a":54823,"t":"code","b":[61],"m":"dec","o":"a"},{"a":54824,"t":"code","b":[50,42,212],"m":"ld","oa":54314,"o":"(train_gap_timer),a"},{"a":54827,"t":"code","b":[194,145,214],"m":"jp","oa":54929,"o":"nz,walk_objects"},{"a":54830,"t":"code","b":[221,42,114,124],"m":"ld","oa":31858,"o":"ix,(object_list_end)"},{"a":54834,"t":"code","b":[62,241],"m":"ld","o":"a,$F1"},{"a":54836,"t":"code","b":[221,119,0],"m":"ld","o":"(ix+$00),a","x":[54817]},{"a":54839,"t":"code","b":[58,43,212],"m":"ld","oa":54315,"o":"a,(train_gap)"},{"a":54842,"t":"code","b":[50,42,212],"m":"ld","oa":54314,"o":"(train_gap_timer),a"},{"a":54845,"t":"code","b":[42,44,212],"m":"ld","oa":54316,"o":"hl,(train_square)"},{"a":54848,"t":"code","b":[221,117,2],"m":"ld","o":"(ix+$02),l"},{"a":54851,"t":"code","b":[221,116,3],"m":"ld","o":"(ix+$03),h"},{"a":54854,"t":"code","b":[58,46,212],"m":"ld","oa":54318,"o":"a,(train_start_x)"},{"a":54857,"t":"code","b":[221,119,5],"m":"ld","o":"(ix+$05),a"},{"a":54860,"t":"code","b":[58,47,212],"m":"ld","oa":54319,"o":"a,(train_start_y)"},{"a":54863,"t":"code","b":[221,119,7],"m":"ld","o":"(ix+$07),a"},{"a":54866,"t":"code","b":[62,10],"m":"ld","o":"a,$0A"},{"a":54868,"t":"code","b":[221,119,8],"m":"ld","o":"(ix+$08),a"},{"a":54871,"t":"code","b":[221,119,9],"m":"ld","o":"(ix+$09),a"},{"a":54874,"t":"code","b":[58,48,212],"m":"ld","oa":54320,"o":"a,(train_start_height)"},{"a":54877,"t":"code","b":[221,119,11],"m":"ld","o":"(ix+$0B),a"},{"a":54880,"t":"code","b":[198,10],"m":"add","o":"a,$0A"},{"a":54882,"t":"code","b":[221,119,13],"m":"ld","o":"(ix+$0D),a"},{"a":54885,"t":"code","b":[221,54,20,4],"m":"ld","o":"(ix+$14),$04"},{"a":54889,"t":"code","b":[58,49,212],"m":"ld","oa":54321,"o":"a,(train_heading)"},{"a":54892,"t":"code","b":[221,119,14],"m":"ld","o":"(ix+$0E),a"},{"a":54895,"t":"code","b":[238,128],"m":"xor","o":"$80"},{"a":54897,"t":"code","b":[221,119,19],"m":"ld","o":"(ix+$13),a"},{"a":54900,"t":"code","b":[221,54,15,255],"m":"ld","o":"(ix+$0F),$FF"},{"a":54904,"t":"code","b":[221,54,16,0],"m":"ld","o":"(ix+$10),$00"},{"a":54908,"t":"code","b":[17,30,0],"m":"ld","o":"de,$001E"},{"a":54911,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":54913,"t":"code","b":[221,34,114,124],"m":"ld","oa":31858,"o":"(object_list_end),ix"},{"a":54917,"t":"code","b":[58,50,212],"m":"ld","oa":54322,"o":"a,(train_members_left)"},{"a":54920,"t":"code","b":[61],"m":"dec","o":"a"},{"a":54921,"t":"code","b":[50,50,212],"m":"ld","oa":54322,"o":"(train_members_left),a"},{"a":54924,"t":"code","b":[32,3],"m":"jr","oa":54929,"o":"nz,walk_objects"},{"a":54926,"t":"code","b":[50,43,212],"m":"ld","oa":54315,"o":"(train_gap),a"},{"a":54929,"l":"walk_objects","c":"Runs every object in the pool once per pass: loads the end pointer $7C72 and falls into the loop at $D694, which works down from the last record to the first. Reached at the end of $D438 by five jumps ($D53B, $D543, $D583, $D62B, $D68C) and by falling out of $D68E.","t":"code","b":[42,114,124],"m":"ld","oa":31858,"o":"hl,(object_list_end)","x":[54587,54595,54659,54827,54924]},{"a":54932,"l":"walk_next_object","c":"The loop of the object walk. HL is the record just handled, or the end pointer on entry from $D691. If it is not above $7C74, the first record, the walk is over and it returns to the frame loop. Otherwise it steps down 30 bytes and dispatches on the type byte there: $F3 to $D6C9, $F1 to $D9ED, $F0 to $DB0C, $E3 to $DAF1, $E5 to $DC69, $E6 to $DDF8 and $FB to $DE41; a record of any other type is removed through $DEE6. Every handler ends by jumping back here with its record in HL: 19 jumps in all. $DEE6 removes a record by copying the pool's last record over it, so walking downwards means the record moved in has already had its turn.","t":"code","b":[235],"m":"ex","o":"de,hl","x":[55007,55457,55555,55608,55614,55921,56004,56055,56061,56259,56393,56751,56793,56863,56894,56908,56919,57013,57089]},{"a":54933,"t":"code","b":[33,116,124],"m":"ld","o":"hl,$7C74"},{"a":54936,"t":"code","b":[167],"m":"and","o":"a"},{"a":54937,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":54939,"t":"code","b":[208],"m":"ret","o":"nc"},{"a":54940,"t":"code","b":[33,226,255],"m":"ld","o":"hl,$FFE2"},{"a":54943,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":54944,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":54945,"t":"code","b":[254,243],"m":"cp","o":"$F3"},{"a":54947,"t":"code","b":[40,36],"m":"jr","oa":54985,"o":"z,update_bug"},{"a":54949,"t":"code","b":[254,241],"m":"cp","o":"$F1"},{"a":54951,"t":"code","b":[202,237,217],"m":"jp","oa":55789,"o":"z,update_sparky"},{"a":54954,"t":"code","b":[254,240],"m":"cp","o":"$F0"},{"a":54956,"t":"code","b":[202,12,219],"m":"jp","oa":56076,"o":"z,update_rider"},{"a":54959,"t":"code","b":[254,227],"m":"cp","o":"$E3"},{"a":54961,"t":"code","b":[202,241,218],"m":"jp","oa":56049,"o":"z,update_arrival_marker"},{"a":54964,"t":"code","b":[254,229],"m":"cp","o":"$E5"},{"a":54966,"t":"code","b":[202,105,220],"m":"jp","oa":56425,"o":"z,e5_flyer_handler"},{"a":54969,"t":"code","b":[254,230],"m":"cp","o":"$E6"},{"a":54971,"t":"code","b":[202,248,221],"m":"jp","oa":56824,"o":"z,e6_burst_handler"},{"a":54974,"t":"code","b":[254,251],"m":"cp","o":"$FB"},{"a":54976,"t":"code","b":[202,65,222],"m":"jp","oa":56897,"o":"z,fb_marker_handler"},{"a":54979,"t":"code","b":[229],"m":"push","o":"hl"},{"a":54980,"t":"code","b":[253,225],"m":"pop","o":"iy"},{"a":54982,"t":"code","b":[195,230,222],"m":"jp","oa":57062,"o":"remove_object_record"},{"a":54985,"l":"update_bug","c":"Handler for a type $F3 record: the bug that crawls over the board, chases the worm and, on touching it, is taken out of the pool and counted onto a segment of the worm by the worm's own code at $9E7C and $A5F6. IY is set to the record. A negative speed byte ($12) marks a bug that a sparky has hit: $FF becomes $FE and the bug waits a pass, anything lower turns it into a burst at $DE22. Otherwise bytes $13 and $12 are made non-zero, $DF04 works out the step from the heading (byte $0E) and speed and the position it leads to, and $DFB8 tests that position against the board and the other objects. No square there ($8028 = 0) and the bug is blocked ($D8BC). A collision ($803B = $FF) goes to $D845. Otherwise $803B is the height of the surface underneath: if the bug's bottom is less than 6 above it, the bug moves and settles on it ($D735). A deeper drop depends on the mode in byte $15: mode 0 steps off and falls 6 a pass only if that surface is not below the worm's height $7FFF, mode 1 always steps off, and modes 2 and 3 treat the drop as a block.","t":"code","b":[229],"m":"push","o":"hl","x":[54947]},{"a":54986,"t":"code","b":[253,225],"m":"pop","o":"iy"},{"a":54988,"t":"code","b":[253,126,18],"m":"ld","o":"a,(iy+$12)"},{"a":54991,"t":"code","b":[167],"m":"and","o":"a"},{"a":54992,"t":"code","b":[242,226,214],"m":"jp","oa":55010,"o":"p,$D6E2"},{"a":54995,"t":"code","b":[61],"m":"dec","o":"a"},{"a":54996,"t":"code","b":[254,254],"m":"cp","o":"$FE"},{"a":54998,"t":"code","b":[218,34,222],"m":"jp","oa":56866,"o":"c,become_e6_burst"},{"a":55001,"t":"code","b":[253,119,18],"m":"ld","o":"(iy+$12),a"},{"a":55004,"t":"code","b":[253,229],"m":"push","o":"iy"},{"a":55006,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":55007,"t":"code","b":[195,148,214],"m":"jp","oa":54932,"o":"walk_next_object"},{"a":55010,"t":"code","b":[253,126,19],"m":"ld","o":"a,(iy+$13)","x":[54992]},{"a":55013,"t":"code","b":[167],"m":"and","o":"a"},{"a":55014,"t":"code","b":[32,3],"m":"jr","oa":55019,"o":"nz,$D6EB"},{"a":55016,"t":"code","b":[253,52,19],"m":"inc","o":"(iy+$13)"},{"a":55019,"t":"code","b":[253,126,18],"m":"ld","o":"a,(iy+$12)","x":[55014]},{"a":55022,"t":"code","b":[167],"m":"and","o":"a"},{"a":55023,"t":"code","b":[32,3],"m":"jr","oa":55028,"o":"nz,$D6F4"},{"a":55025,"t":"code","b":[253,52,18],"m":"inc","o":"(iy+$12)"},{"a":55028,"t":"code","b":[205,4,223],"m":"call","oa":57092,"o":"velocity_from_heading","x":[55023]},{"a":55031,"t":"code","b":[205,184,223],"m":"call","oa":57272,"o":"probe_move"},{"a":55034,"t":"code","b":[58,40,128],"m":"ld","oa":32808,"o":"a,(shape_x3_high)"},{"a":55037,"t":"code","b":[167],"m":"and","o":"a"},{"a":55038,"t":"code","b":[40,30],"m":"jr","oa":55070,"o":"z,$D71E"},{"a":55040,"t":"code","b":[58,59,128],"m":"ld","oa":32827,"o":"a,(probe_floor)"},{"a":55043,"t":"code","b":[254,255],"m":"cp","o":"$FF"},{"a":55045,"t":"code","b":[202,69,216],"m":"jp","oa":55365,"o":"z,bug_collision"},{"a":55048,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":55049,"t":"code","b":[58,35,128],"m":"ld","oa":32803,"o":"a,(shape_x2)"},{"a":55052,"t":"code","b":[145],"m":"sub","o":"c"},{"a":55053,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":55054,"t":"code","b":[254,6],"m":"cp","o":"$06"},{"a":55056,"t":"code","b":[56,35],"m":"jr","oa":55093,"o":"c,bug_move"},{"a":55058,"t":"code","b":[14,6],"m":"ld","o":"c,$06"},{"a":55060,"t":"code","b":[253,126,21],"m":"ld","o":"a,(iy+$15)"},{"a":55063,"t":"code","b":[167],"m":"and","o":"a"},{"a":55064,"t":"code","b":[40,15],"m":"jr","oa":55081,"o":"z,$D729"},{"a":55066,"t":"code","b":[254,2],"m":"cp","o":"$02"},{"a":55068,"t":"code","b":[56,23],"m":"jr","oa":55093,"o":"c,bug_move"},{"a":55070,"t":"code","b":[62,255],"m":"ld","o":"a,$FF","x":[55038,55091]},{"a":55072,"t":"code","b":[50,59,128],"m":"ld","oa":32827,"o":"(probe_floor),a"},{"a":55075,"t":"code","b":[50,54,128],"m":"ld","oa":32822,"o":"(probe_surface),a"},{"a":55078,"t":"code","b":[195,188,216],"m":"jp","oa":55484,"o":"bug_blocked"},{"a":55081,"t":"code","b":[58,255,127],"m":"ld","oa":32767,"o":"a,($7FFF)","x":[55064]},{"a":55084,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":55085,"t":"code","b":[58,59,128],"m":"ld","oa":32827,"o":"a,(probe_floor)"},{"a":55088,"t":"code","b":[185],"m":"cp","o":"c"},{"a":55089,"t":"code","b":[14,6],"m":"ld","o":"c,$06"},{"a":55091,"t":"code","b":[56,233],"m":"jr","oa":55070,"o":"c,$D71E"},{"a":55093,"l":"bug_move","c":"Makes the bug's move. Entered at $D735 with the drop in C, which is negated, or at $D738 with a signed height change in A (from $D8B9 and from $DC66, where a rider turns into a bug). The change is added to the bottom and top heights (bytes $0B and $0D), the three limb bytes are stepped by $D97D and $D996, the tested position is stored in bytes 4-7 from $8029, $801B, $802A and $801D, and the square it lies in ($8027) is looked up by $A192, which gives its column and row in the table at $6432, or leaves the address as it is when the square is not among the 25; the result goes into bytes 2-3. A bug whose square is outside the table (byte 3 is 5 or more) counts byte $17 down; at zero one is added to the reserve of bugs at $8066 and the record is removed. Inside the table byte $17 is reloaded with $28, so a bug is given up 40 passes after leaving it. Then the mode decides: with bit 0 of byte $15 clear the bug chases ($D7E4); with it set it wanders. Wandering counts the timer in byte $16 down; once it is zero, a bug inside the table and less than $200 from the worm by $D941 changes to mode 2 with the timer at $14. Each pass the heading turns by the rate in byte $13; a random byte from $E472 equal to $C6 flips bit 1 of the mode; and the low five bits of the random byte are added to byte $14, each carry out of it reversing the turn rate.","t":"code","b":[121],"m":"ld","o":"a,c","x":[55056,55068,55518,55523]},{"a":55094,"t":"code","b":[237,68],"m":"neg"},{"a":55096,"t":"code","b":[79],"m":"ld","o":"c,a","x":[55481,56422]},{"a":55097,"t":"code","b":[253,134,11],"m":"add","o":"a,(iy+$0B)"},{"a":55100,"t":"code","b":[253,119,11],"m":"ld","o":"(iy+$0B),a"},{"a":55103,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":55104,"t":"code","b":[253,134,13],"m":"add","o":"a,(iy+$0D)"},{"a":55107,"t":"code","b":[253,119,13],"m":"ld","o":"(iy+$0D),a"},{"a":55110,"t":"code","b":[205,125,217],"m":"call","oa":55677,"o":"step_limbs_up","x":[55466]},{"a":55113,"t":"code","b":[205,150,217],"m":"call","oa":55702,"o":"step_limbs_down"},{"a":55116,"t":"code","b":[58,41,128],"m":"ld","oa":32809,"o":"a,(shape_y3)"},{"a":55119,"t":"code","b":[253,119,4],"m":"ld","o":"(iy+$04),a"},{"a":55122,"t":"code","b":[58,27,128],"m":"ld","oa":32795,"o":"a,(shape_x0)"},{"a":55125,"t":"code","b":[253,119,5],"m":"ld","o":"(iy+$05),a"},{"a":55128,"t":"code","b":[58,42,128],"m":"ld","oa":32810,"o":"a,(shape_y3_high)"},{"a":55131,"t":"code","b":[253,119,6],"m":"ld","o":"(iy+$06),a"},{"a":55134,"t":"code","b":[58,29,128],"m":"ld","oa":32797,"o":"a,(shape_y0)"},{"a":55137,"t":"code","b":[253,119,7],"m":"ld","o":"(iy+$07),a"},{"a":55140,"t":"code","b":[42,39,128],"m":"ld","oa":32807,"o":"hl,(shape_x3)"},{"a":55143,"t":"code","b":[205,146,161],"m":"call","oa":41362,"o":"find_cell_in_window"},{"a":55146,"t":"code","b":[253,117,2],"m":"ld","o":"(iy+$02),l"},{"a":55149,"t":"code","b":[253,116,3],"m":"ld","o":"(iy+$03),h"},{"a":55152,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":55153,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":55155,"t":"code","b":[56,15],"m":"jr","oa":55172,"o":"c,$D784"},{"a":55157,"t":"code","b":[253,53,23],"m":"dec","o":"(iy+$17)"},{"a":55160,"t":"code","b":[32,14],"m":"jr","oa":55176,"o":"nz,$D788"},{"a":55162,"t":"code","b":[58,102,128],"m":"ld","oa":32870,"o":"a,(bug_spawn_budget)"},{"a":55165,"t":"code","b":[60],"m":"inc","o":"a"},{"a":55166,"t":"code","b":[50,102,128],"m":"ld","oa":32870,"o":"(bug_spawn_budget),a"},{"a":55169,"t":"code","b":[195,230,222],"m":"jp","oa":57062,"o":"remove_object_record"},{"a":55172,"t":"code","b":[253,54,23,40],"m":"ld","o":"(iy+$17),$28","x":[55155]},{"a":55176,"t":"code","b":[253,126,21],"m":"ld","o":"a,(iy+$15)","x":[55160]},{"a":55179,"t":"code","b":[203,71],"m":"bit","o":"0,a"},{"a":55181,"t":"code","b":[40,85],"m":"jr","oa":55268,"o":"z,bug_chase"},{"a":55183,"t":"code","b":[253,126,22],"m":"ld","o":"a,(iy+$16)"},{"a":55186,"t":"code","b":[167],"m":"and","o":"a"},{"a":55187,"t":"code","b":[40,7],"m":"jr","oa":55196,"o":"z,$D79C"},{"a":55189,"t":"code","b":[61],"m":"dec","o":"a"},{"a":55190,"t":"code","b":[253,119,22],"m":"ld","o":"(iy+$16),a"},{"a":55193,"t":"code","b":[195,179,215],"m":"jp","oa":55219,"o":"$D7B3"},{"a":55196,"t":"code","b":[253,126,3],"m":"ld","o":"a,(iy+$03)","x":[55187]},{"a":55199,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":55201,"t":"code","b":[48,16],"m":"jr","oa":55219,"o":"nc,$D7B3"},{"a":55203,"t":"code","b":[205,65,217],"m":"call","oa":55617,"o":"distance_to_worm"},{"a":55206,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":55207,"t":"code","b":[254,2],"m":"cp","o":"$02"},{"a":55209,"t":"code","b":[48,8],"m":"jr","oa":55219,"o":"nc,$D7B3"},{"a":55211,"t":"code","b":[253,54,21,2],"m":"ld","o":"(iy+$15),$02"},{"a":55215,"t":"code","b":[253,54,22,20],"m":"ld","o":"(iy+$16),$14"},{"a":55219,"t":"code","b":[253,126,14],"m":"ld","o":"a,(iy+$0E)","x":[55193,55201,55209]},{"a":55222,"t":"code","b":[253,134,19],"m":"add","o":"a,(iy+$13)"},{"a":55225,"t":"code","b":[253,119,14],"m":"ld","o":"(iy+$0E),a"},{"a":55228,"t":"code","b":[205,114,228],"m":"call","oa":58482,"o":"random_next"},{"a":55231,"t":"code","b":[254,198],"m":"cp","o":"$C6"},{"a":55233,"t":"code","b":[32,11],"m":"jr","oa":55246,"o":"nz,$D7CE"},{"a":55235,"t":"code","b":[253,126,21],"m":"ld","o":"a,(iy+$15)"},{"a":55238,"t":"code","b":[238,2],"m":"xor","o":"$02"},{"a":55240,"t":"code","b":[253,119,21],"m":"ld","o":"(iy+$15),a"},{"a":55243,"t":"code","b":[58,111,228],"m":"ld","oa":58479,"o":"a,(random_state)"},{"a":55246,"t":"code","b":[230,31],"m":"and","o":"$1F","x":[55233]},{"a":55248,"t":"code","b":[253,134,20],"m":"add","o":"a,(iy+$14)"},{"a":55251,"t":"code","b":[253,119,20],"m":"ld","o":"(iy+$14),a"},{"a":55254,"t":"code","b":[210,0,217],"m":"jp","oa":55552,"o":"nc,$D900"},{"a":55257,"t":"code","b":[253,126,19],"m":"ld","o":"a,(iy+$13)"},{"a":55260,"t":"code","b":[237,68],"m":"neg"},{"a":55262,"t":"code","b":[253,119,19],"m":"ld","o":"(iy+$13),a"},{"a":55265,"t":"code","b":[195,0,217],"m":"jp","oa":55552,"o":"$D900"},{"a":55268,"l":"bug_chase","c":"The chasing half of the bug's behaviour, taken when bit 0 of the mode byte $15 is clear. Outside the table it only sets bit 0 of byte 1 of the record, which no instruction was found to read for this type, and the timer in byte $16 to $14. Inside, $D941 measures the distance to the worm. With the timer at zero and the distance $300 or more it does the same as outside. With the timer at zero and the worm nearer, bit 1 of the mode is set from the heights: if the worm's height $7FFF is below the bug's bottom the bit is cleared, which lets the bug come down off things, and the timer becomes $20; otherwise the bit is set and the timer stays at zero. With the timer running it is counted down. Then it steers: the signs of the two differences left by $D941 select one of the diagonals $20, $60, $A0 or $E0, the one that points away from the worm, and the heading (byte $0E) is moved by the size of the turn rate (byte $13) away from that, so it homes on the opposite diagonal, towards the worm. A bug with larger x and y than the worm settles on heading $A0, one with smaller x and larger y on $E0, smaller x and y on $20, larger x and smaller y on $60, and then swings one step either side of it.","t":"code","b":[253,126,3],"m":"ld","o":"a,(iy+$03)","x":[55181]},{"a":55271,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":55273,"t":"code","b":[56,11],"m":"jr","oa":55286,"o":"c,$D7F6"},{"a":55275,"t":"code","b":[253,203,1,198],"m":"set","o":"0,(iy+$01)","x":[55298]},{"a":55279,"t":"code","b":[253,54,22,20],"m":"ld","o":"(iy+$16),$14"},{"a":55283,"t":"code","b":[195,0,217],"m":"jp","oa":55552,"o":"$D900"},{"a":55286,"t":"code","b":[205,65,217],"m":"call","oa":55617,"o":"distance_to_worm","x":[55273]},{"a":55289,"t":"code","b":[253,126,22],"m":"ld","o":"a,(iy+$16)"},{"a":55292,"t":"code","b":[167],"m":"and","o":"a"},{"a":55293,"t":"code","b":[32,25],"m":"jr","oa":55320,"o":"nz,$D818"},{"a":55295,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":55296,"t":"code","b":[254,3],"m":"cp","o":"$03"},{"a":55298,"t":"code","b":[48,231],"m":"jr","oa":55275,"o":"nc,$D7EB"},{"a":55300,"t":"code","b":[58,255,127],"m":"ld","oa":32767,"o":"a,($7FFF)"},{"a":55303,"t":"code","b":[253,190,11],"m":"cp","o":"(iy+$0B)"},{"a":55306,"t":"code","b":[62,33],"m":"ld","o":"a,$21"},{"a":55308,"t":"code","b":[253,203,21,142],"m":"res","o":"1,(iy+$15)"},{"a":55312,"t":"code","b":[56,6],"m":"jr","oa":55320,"o":"c,$D818"},{"a":55314,"t":"code","b":[253,203,21,206],"m":"set","o":"1,(iy+$15)"},{"a":55318,"t":"code","b":[62,1],"m":"ld","o":"a,$01"},{"a":55320,"t":"code","b":[61],"m":"dec","o":"a","x":[55293,55312]},{"a":55321,"t":"code","b":[253,119,22],"m":"ld","o":"(iy+$16),a"},{"a":55324,"t":"code","b":[58,62,128],"m":"ld","oa":32830,"o":"a,(probe_bottom)"},{"a":55327,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":55328,"t":"code","b":[58,64,128],"m":"ld","oa":32832,"o":"a,(probe_ramp_flags)"},{"a":55331,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":55333,"t":"code","b":[203,25],"m":"rr","o":"c"},{"a":55335,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":55336,"t":"code","b":[203,57],"m":"srl","o":"c"},{"a":55338,"t":"code","b":[169],"m":"xor","o":"c"},{"a":55339,"t":"code","b":[230,192],"m":"and","o":"$C0"},{"a":55341,"t":"code","b":[246,32],"m":"or","o":"$20"},{"a":55343,"t":"code","b":[253,150,14],"m":"sub","o":"(iy+$0E)"},{"a":55346,"t":"code","b":[253,78,19],"m":"ld","o":"c,(iy+$13)"},{"a":55349,"t":"code","b":[169],"m":"xor","o":"c"},{"a":55350,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":55351,"t":"code","b":[250,60,216],"m":"jp","oa":55356,"o":"m,$D83C"},{"a":55354,"t":"code","b":[237,68],"m":"neg"},{"a":55356,"t":"code","b":[253,134,14],"m":"add","o":"a,(iy+$0E)","x":[55351]},{"a":55359,"t":"code","b":[253,119,14],"m":"ld","o":"(iy+$0E),a"},{"a":55362,"t":"code","b":[195,0,217],"m":"jp","oa":55552,"o":"$D900"},{"a":55365,"l":"bug_collision","c":"The bug's move met something ($803B = $FF). If it is a sparky, a type $F1 object ($8035 = $F1, its record in $8037), 20 ($0014) is added to the score at $8060, the one place this part of the code scores. A large bug (size byte 8 = $0E) only shrinks to size $0A, while the sparky becomes a burst (type $E6, byte $0E = 4, picture $C5B3) and the sound at $E4E8 is started through $E4F7. Any other bug gets $FF in its speed byte, which makes it a burst two passes later, and the sparky is removed: the pool counter and end pointer step back and the pool's last record is copied over the sparky's. The copy goes wrong when the bug is itself the last record and the sparky lies below it: the bug's record is the one moved, the $FF lands in the abandoned copy, and the bug is handled a second time and lives on, with the sparky gone and the 20 points given. For anything else met, and after the large bug's case, the top of the obstacle ($8036) decides: level with the bug's bottom, it moves on ($D746), which is also what happens on every move of a bug at height zero, where $DFB8 reports a collision with nothing; a bug of size 7 is blocked by any step; other bugs climb a step of less than $14 ($D738) and are blocked by more.","t":"code","b":[58,53,128],"m":"ld","oa":32821,"o":"a,(probe_z)","x":[55045]},{"a":55368,"t":"code","b":[254,241],"m":"cp","o":"$F1"},{"a":55370,"t":"code","b":[194,164,216],"m":"jp","oa":55460,"o":"nz,$D8A4"},{"a":55373,"t":"code","b":[42,96,128],"m":"ld","oa":32864,"o":"hl,(score)"},{"a":55376,"t":"code","b":[1,20,0],"m":"ld","o":"bc,$0014"},{"a":55379,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":55380,"t":"code","b":[34,96,128],"m":"ld","oa":32864,"o":"(score),hl"},{"a":55383,"t":"code","b":[253,126,8],"m":"ld","o":"a,(iy+$08)"},{"a":55386,"t":"code","b":[254,14],"m":"cp","o":"$0E"},{"a":55388,"t":"code","b":[32,35],"m":"jr","oa":55425,"o":"nz,$D881"},{"a":55390,"t":"code","b":[253,54,8,10],"m":"ld","o":"(iy+$08),$0A"},{"a":55394,"t":"code","b":[253,54,9,10],"m":"ld","o":"(iy+$09),$0A"},{"a":55398,"t":"code","b":[42,55,128],"m":"ld","oa":32823,"o":"hl,(probe_hit)"},{"a":55401,"t":"code","b":[54,230],"m":"ld","o":"(hl),$E6"},{"a":55403,"t":"code","b":[17,14,0],"m":"ld","o":"de,$000E"},{"a":55406,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":55407,"t":"code","b":[54,4],"m":"ld","o":"(hl),$04"},{"a":55409,"t":"code","b":[17,179,197],"m":"ld","o":"de,$C5B3"},{"a":55412,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":55413,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":55414,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":55415,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":55416,"t":"code","b":[17,232,228],"m":"ld","o":"de,$E4E8"},{"a":55419,"t":"code","b":[205,247,228],"m":"call","oa":58615,"o":"start_sound_script_if_idle"},{"a":55422,"t":"code","b":[195,164,216],"m":"jp","oa":55460,"o":"$D8A4"},{"a":55425,"t":"code","b":[58,113,124],"m":"ld","oa":31857,"o":"a,(object_count_plus_one)","x":[55388]},{"a":55428,"t":"code","b":[61],"m":"dec","o":"a"},{"a":55429,"t":"code","b":[50,113,124],"m":"ld","oa":31857,"o":"(object_count_plus_one),a"},{"a":55432,"t":"code","b":[42,114,124],"m":"ld","oa":31858,"o":"hl,(object_list_end)"},{"a":55435,"t":"code","b":[1,30,0],"m":"ld","o":"bc,$001E"},{"a":55438,"t":"code","b":[167],"m":"and","o":"a"},{"a":55439,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":55441,"t":"code","b":[34,114,124],"m":"ld","oa":31858,"o":"(object_list_end),hl"},{"a":55444,"t":"code","b":[237,91,55,128],"m":"ld","oa":32823,"o":"de,(probe_hit)"},{"a":55448,"t":"code","b":[237,176],"m":"ldir"},{"a":55450,"t":"code","b":[253,54,18,255],"m":"ld","o":"(iy+$12),$FF"},{"a":55454,"t":"code","b":[253,229],"m":"push","o":"iy"},{"a":55456,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":55457,"t":"code","b":[195,148,214],"m":"jp","oa":54932,"o":"walk_next_object"},{"a":55460,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)","x":[55370,55422]},{"a":55463,"t":"code","b":[253,150,11],"m":"sub","o":"(iy+$0B)"},{"a":55466,"t":"code","b":[202,70,215],"m":"jp","oa":55110,"o":"z,$D746"},{"a":55469,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":55470,"t":"code","b":[253,126,8],"m":"ld","o":"a,(iy+$08)"},{"a":55473,"t":"code","b":[254,7],"m":"cp","o":"$07"},{"a":55475,"t":"code","b":[202,188,216],"m":"jp","oa":55484,"o":"z,bug_blocked"},{"a":55478,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":55479,"t":"code","b":[254,20],"m":"cp","o":"$14"},{"a":55481,"t":"code","b":[218,56,215],"m":"jp","oa":55096,"o":"c,$D738"},{"a":55484,"l":"bug_blocked","c":"The bug cannot go where it was heading. With the step zeroed it tests its present position again ($DF44, $DFB8). If nothing holds it up there it sinks toward the surface underneath by up to 6 through $D735, without moving. Otherwise it turns on the spot. In a wandering mode (bit 0 of byte $15 set) the heading turns by the rate in byte $13 and the limb bytes are stepped by $D97D if the rate is negative, $D996 if not. In a chasing mode a heading that is not a multiple of $40 is rounded to the nearest one and byte $18 set to 9; one that already is turns a further $40 and byte $18 is counted down, and when it reaches zero bit 1 of the mode is cleared, the timer in byte $16 set to $13 and byte $18 back to 9. The exit at $D900, which six jumps share, hands the record back to the walk at $D694.","t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000","x":[55078,55475]},{"a":55487,"t":"code","b":[34,51,128],"m":"ld","oa":32819,"o":"(probe_x),hl"},{"a":55490,"t":"code","b":[34,53,128],"m":"ld","oa":32821,"o":"(probe_z),hl"},{"a":55493,"t":"code","b":[34,55,128],"m":"ld","oa":32823,"o":"(probe_hit),hl"},{"a":55496,"t":"code","b":[205,68,223],"m":"call","oa":57156,"o":"set_move_box"},{"a":55499,"t":"code","b":[205,184,223],"m":"call","oa":57272,"o":"probe_move"},{"a":55502,"t":"code","b":[58,59,128],"m":"ld","oa":32827,"o":"a,(probe_floor)"},{"a":55505,"t":"code","b":[254,255],"m":"cp","o":"$FF"},{"a":55507,"t":"code","b":[202,230,216],"m":"jp","oa":55526,"o":"z,$D8E6"},{"a":55510,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":55511,"t":"code","b":[58,35,128],"m":"ld","oa":32803,"o":"a,(shape_x2)"},{"a":55514,"t":"code","b":[145],"m":"sub","o":"c"},{"a":55515,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":55516,"t":"code","b":[254,6],"m":"cp","o":"$06"},{"a":55518,"t":"code","b":[218,53,215],"m":"jp","oa":55093,"o":"c,bug_move"},{"a":55521,"t":"code","b":[14,6],"m":"ld","o":"c,$06"},{"a":55523,"t":"code","b":[195,53,215],"m":"jp","oa":55093,"o":"bug_move"},{"a":55526,"t":"code","b":[253,203,21,70],"m":"bit","o":"0,(iy+$15)","x":[55507]},{"a":55530,"t":"code","b":[32,55],"m":"jr","oa":55587,"o":"nz,$D923"},{"a":55532,"t":"code","b":[253,126,14],"m":"ld","o":"a,(iy+$0E)"},{"a":55535,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":55536,"t":"code","b":[230,63],"m":"and","o":"$3F"},{"a":55538,"t":"code","b":[40,18],"m":"jr","oa":55558,"o":"z,$D906"},{"a":55540,"t":"code","b":[253,54,24,9],"m":"ld","o":"(iy+$18),$09"},{"a":55544,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":55545,"t":"code","b":[198,32],"m":"add","o":"a,$20"},{"a":55547,"t":"code","b":[230,192],"m":"and","o":"$C0"},{"a":55549,"t":"code","b":[253,119,14],"m":"ld","o":"(iy+$0E),a"},{"a":55552,"t":"code","b":[253,229],"m":"push","o":"iy","x":[55254,55265,55283,55362,55569,55584]},{"a":55554,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":55555,"t":"code","b":[195,148,214],"m":"jp","oa":54932,"o":"walk_next_object"},{"a":55558,"t":"code","b":[253,126,14],"m":"ld","o":"a,(iy+$0E)","x":[55538]},{"a":55561,"t":"code","b":[198,64],"m":"add","o":"a,$40"},{"a":55563,"t":"code","b":[253,119,14],"m":"ld","o":"(iy+$0E),a"},{"a":55566,"t":"code","b":[253,53,24],"m":"dec","o":"(iy+$18)"},{"a":55569,"t":"code","b":[194,0,217],"m":"jp","oa":55552,"o":"nz,$D900"},{"a":55572,"t":"code","b":[253,203,21,142],"m":"res","o":"1,(iy+$15)"},{"a":55576,"t":"code","b":[253,54,22,19],"m":"ld","o":"(iy+$16),$13"},{"a":55580,"t":"code","b":[253,54,24,9],"m":"ld","o":"(iy+$18),$09"},{"a":55584,"t":"code","b":[195,0,217],"m":"jp","oa":55552,"o":"$D900"},{"a":55587,"t":"code","b":[253,126,14],"m":"ld","o":"a,(iy+$0E)","x":[55530]},{"a":55590,"t":"code","b":[253,134,19],"m":"add","o":"a,(iy+$13)"},{"a":55593,"t":"code","b":[253,119,14],"m":"ld","o":"(iy+$0E),a"},{"a":55596,"t":"code","b":[253,229],"m":"push","o":"iy"},{"a":55598,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":55599,"t":"code","b":[253,203,19,126],"m":"bit","o":"7,(iy+$13)"},{"a":55603,"t":"code","b":[40,6],"m":"jr","oa":55611,"o":"z,$D93B"},{"a":55605,"t":"code","b":[205,125,217],"m":"call","oa":55677,"o":"step_limbs_up"},{"a":55608,"t":"code","b":[195,148,214],"m":"jp","oa":54932,"o":"walk_next_object"},{"a":55611,"t":"code","b":[205,150,217],"m":"call","oa":55702,"o":"step_limbs_down","x":[55603]},{"a":55614,"t":"code","b":[195,148,214],"m":"jp","oa":54932,"o":"walk_next_object"},{"a":55617,"l":"distance_to_worm","c":"Returns in HL how far the object at IY is from the worm: the sum of the absolute differences in x and in y, with 256 units to a board square. The object's position is its table column and x (bytes 2 and 5) and its table row and y (bytes 3 and 7); the worm's is column and row 2 with x from $7FF5 and y from $7FF7. The signed differences, object minus worm, are left in $803D (x) and $803F (y), where $D81C reads their high bytes. Only meaningful for an object inside the table; both callers, $D7A3 and $D7F6, check byte 3 first.","t":"code","b":[253,110,5],"m":"ld","o":"l,(iy+$05)","x":[55203,55286]},{"a":55620,"t":"code","b":[253,102,2],"m":"ld","o":"h,(iy+$02)"},{"a":55623,"t":"code","b":[58,245,127],"m":"ld","oa":32757,"o":"a,($7FF5)"},{"a":55626,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":55627,"t":"code","b":[22,2],"m":"ld","o":"d,$02"},{"a":55629,"t":"code","b":[167],"m":"and","o":"a"},{"a":55630,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":55632,"t":"code","b":[34,61,128],"m":"ld","oa":32829,"o":"(probe_top),hl"},{"a":55635,"t":"code","b":[242,93,217],"m":"jp","oa":55645,"o":"p,$D95D"},{"a":55638,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":55639,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":55642,"t":"code","b":[167],"m":"and","o":"a"},{"a":55643,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":55645,"t":"code","b":[77],"m":"ld","o":"c,l","x":[55635]},{"a":55646,"t":"code","b":[68],"m":"ld","o":"b,h"},{"a":55647,"t":"code","b":[253,110,7],"m":"ld","o":"l,(iy+$07)"},{"a":55650,"t":"code","b":[253,102,3],"m":"ld","o":"h,(iy+$03)"},{"a":55653,"t":"code","b":[58,247,127],"m":"ld","oa":32759,"o":"a,($7FF7)"},{"a":55656,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":55657,"t":"code","b":[22,2],"m":"ld","o":"d,$02"},{"a":55659,"t":"code","b":[167],"m":"and","o":"a"},{"a":55660,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":55662,"t":"code","b":[34,63,128],"m":"ld","oa":32831,"o":"(probe_ramp),hl"},{"a":55665,"t":"code","b":[242,123,217],"m":"jp","oa":55675,"o":"p,$D97B"},{"a":55668,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":55669,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":55672,"t":"code","b":[167],"m":"and","o":"a"},{"a":55673,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":55675,"t":"code","b":[9],"m":"add","o":"hl,bc","x":[55665]},{"a":55676,"t":"code","b":[201],"m":"ret"},{"a":55677,"l":"step_limbs_up","c":"Adds $20 to each of bytes $0F, $10 and $11 of the record at IY. In a type $F3 record these three bytes are what the drawing code copies out at $842F and reads at $B3A5-$B40E, a nibble at a time, to pose the bug. Called from $D746 on every move and from $D935 when a blocked bug turns with a negative rate.","t":"code","b":[253,126,15],"m":"ld","o":"a,(iy+$0F)","x":[55110,55605]},{"a":55680,"t":"code","b":[198,32],"m":"add","o":"a,$20"},{"a":55682,"t":"code","b":[253,119,15],"m":"ld","o":"(iy+$0F),a"},{"a":55685,"t":"code","b":[253,126,16],"m":"ld","o":"a,(iy+$10)"},{"a":55688,"t":"code","b":[198,32],"m":"add","o":"a,$20"},{"a":55690,"t":"code","b":[253,119,16],"m":"ld","o":"(iy+$10),a"},{"a":55693,"t":"code","b":[253,126,17],"m":"ld","o":"a,(iy+$11)"},{"a":55696,"t":"code","b":[198,32],"m":"add","o":"a,$20"},{"a":55698,"t":"code","b":[253,119,17],"m":"ld","o":"(iy+$11),a"},{"a":55701,"t":"code","b":[201],"m":"ret"},{"a":55702,"l":"step_limbs_down","c":"Subtracts 2 from each of bytes $0F, $10 and $11 of the record at IY, the same three bytes $D97D adds $20 to, so a move changes each by $1E. Called from $D749 on every move and from $D93B when a blocked bug turns with a positive rate.","t":"code","b":[253,53,15],"m":"dec","o":"(iy+$0F)","x":[55113,55611]},{"a":55705,"t":"code","b":[253,53,15],"m":"dec","o":"(iy+$0F)"},{"a":55708,"t":"code","b":[253,53,16],"m":"dec","o":"(iy+$10)"},{"a":55711,"t":"code","b":[253,53,16],"m":"dec","o":"(iy+$10)"},{"a":55714,"t":"code","b":[253,53,17],"m":"dec","o":"(iy+$11)"},{"a":55717,"t":"code","b":[253,53,17],"m":"dec","o":"(iy+$11)"},{"a":55720,"t":"code","b":[201],"m":"ret"},{"a":55721,"l":"burper_wait_and_rise","c":"State 0 of a type $F1 record, the mine a burper leaves: the fire code at $7771 gives a shot state 0 and $A0 in byte $0E when bit 6 of the control byte is set. Byte $0E is counted down one a pass. Until it reaches zero the mine takes the ordinary move at $DA18 with a speed of 0, so all it does is sink to the surface under it. At zero the state becomes $FD, and from $D9B2, where later passes enter directly, it rises: 7 is added to its bottom and top heights each pass and the new position is tested with $DF44 and $DFB8. Any collision turns it into a burst at $DE22, and so does a height that passes $FF, where both heights are set to $FA first. The wait is 160 passes, and a rise from height 0 that meets nothing ends in the burst on its 34th pass. The type $E5 handler at $DDF1 also sets state $FD, for a waiting mine it finds under an $E5 object.","t":"code","b":[253,53,14],"m":"dec","o":"(iy+$0E)","x":[55815]},{"a":55724,"t":"code","b":[32,106],"m":"jr","oa":55832,"o":"nz,$DA18"},{"a":55726,"t":"code","b":[253,54,15,253],"m":"ld","o":"(iy+$0F),$FD"},{"a":55730,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000","x":[55827]},{"a":55733,"t":"code","b":[34,51,128],"m":"ld","oa":32819,"o":"(probe_x),hl"},{"a":55736,"t":"code","b":[34,53,128],"m":"ld","oa":32821,"o":"(probe_z),hl"},{"a":55739,"t":"code","b":[34,55,128],"m":"ld","oa":32823,"o":"(probe_hit),hl"},{"a":55742,"t":"code","b":[253,126,11],"m":"ld","o":"a,(iy+$0B)"},{"a":55745,"t":"code","b":[198,7],"m":"add","o":"a,$07"},{"a":55747,"t":"code","b":[253,119,11],"m":"ld","o":"(iy+$0B),a"},{"a":55750,"t":"code","b":[56,26],"m":"jr","oa":55778,"o":"c,$D9E2"},{"a":55752,"t":"code","b":[253,126,13],"m":"ld","o":"a,(iy+$0D)"},{"a":55755,"t":"code","b":[198,7],"m":"add","o":"a,$07"},{"a":55757,"t":"code","b":[253,119,13],"m":"ld","o":"(iy+$0D),a"},{"a":55760,"t":"code","b":[56,16],"m":"jr","oa":55778,"o":"c,$D9E2"},{"a":55762,"t":"code","b":[205,68,223],"m":"call","oa":57156,"o":"set_move_box"},{"a":55765,"t":"code","b":[205,184,223],"m":"call","oa":57272,"o":"probe_move"},{"a":55768,"t":"code","b":[58,59,128],"m":"ld","oa":32827,"o":"a,(probe_floor)"},{"a":55771,"t":"code","b":[60],"m":"inc","o":"a"},{"a":55772,"t":"code","b":[202,34,222],"m":"jp","oa":56866,"o":"z,become_e6_burst"},{"a":55775,"t":"code","b":[195,74,218],"m":"jp","oa":55882,"o":"$DA4A"},{"a":55778,"t":"code","b":[253,54,13,250],"m":"ld","o":"(iy+$0D),$FA","x":[55750,55760]},{"a":55782,"t":"code","b":[253,54,11,250],"m":"ld","o":"(iy+$0B),$FA"},{"a":55786,"t":"code","b":[195,34,222],"m":"jp","oa":56866,"o":"become_e6_burst"},{"a":55789,"l":"update_sparky","c":"Handler for a type $F1 record, a sparky: the fire code at $7722 writes one for each shot, taking one off the count at $805D, and $D62E writes one for each follower of a train. While the timer in byte $10 is running it is counted down; a shot starts it at $37, and the worm's collision test at $9BDD passes over a sparky until it is zero. A state of 4 in byte $0F, which is how a blaster is fired, becomes 7 the first time the record is handled. The state then selects: 0 the waiting mine at $D9A9; $FF the rider code at $DB0F; $FE the fizzle at $DA9D; $FD the rise at $D9B2; anything else is used as the speed (byte $12), so a blaster travels at 7. $DF04 and $DFB8 work out and test the move. With no square there the record is removed ($DEE6). With no collision the sparky sinks toward the surface underneath by at most 6 and moves ($DA3C). A collision goes to $DA74.","t":"code","b":[229],"m":"push","o":"hl","x":[54951]},{"a":55790,"t":"code","b":[253,225],"m":"pop","o":"iy"},{"a":55792,"t":"code","b":[253,126,16],"m":"ld","o":"a,(iy+$10)"},{"a":55795,"t":"code","b":[167],"m":"and","o":"a"},{"a":55796,"t":"code","b":[253,126,15],"m":"ld","o":"a,(iy+$0F)"},{"a":55799,"t":"code","b":[202,6,218],"m":"jp","oa":55814,"o":"z,$DA06"},{"a":55802,"t":"code","b":[253,53,16],"m":"dec","o":"(iy+$10)"},{"a":55805,"t":"code","b":[254,4],"m":"cp","o":"$04"},{"a":55807,"t":"code","b":[32,5],"m":"jr","oa":55814,"o":"nz,$DA06"},{"a":55809,"t":"code","b":[62,7],"m":"ld","o":"a,$07"},{"a":55811,"t":"code","b":[253,119,15],"m":"ld","o":"(iy+$0F),a"},{"a":55814,"t":"code","b":[167],"m":"and","o":"a","x":[55799,55807]},{"a":55815,"t":"code","b":[202,169,217],"m":"jp","oa":55721,"o":"z,burper_wait_and_rise"},{"a":55818,"t":"code","b":[60],"m":"inc","o":"a"},{"a":55819,"t":"code","b":[202,15,219],"m":"jp","oa":56079,"o":"z,$DB0F"},{"a":55822,"t":"code","b":[60],"m":"inc","o":"a"},{"a":55823,"t":"code","b":[202,157,218],"m":"jp","oa":55965,"o":"z,sparky_fizzle"},{"a":55826,"t":"code","b":[60],"m":"inc","o":"a"},{"a":55827,"t":"code","b":[202,178,217],"m":"jp","oa":55730,"o":"z,$D9B2"},{"a":55830,"t":"code","b":[214,3],"m":"sub","o":"$03"},{"a":55832,"t":"code","b":[253,119,18],"m":"ld","o":"(iy+$12),a","x":[55724]},{"a":55835,"t":"code","b":[205,4,223],"m":"call","oa":57092,"o":"velocity_from_heading"},{"a":55838,"t":"code","b":[205,184,223],"m":"call","oa":57272,"o":"probe_move"},{"a":55841,"t":"code","b":[58,40,128],"m":"ld","oa":32808,"o":"a,(shape_x3_high)"},{"a":55844,"t":"code","b":[167],"m":"and","o":"a"},{"a":55845,"t":"code","b":[202,230,222],"m":"jp","oa":57062,"o":"z,remove_object_record"},{"a":55848,"t":"code","b":[58,59,128],"m":"ld","oa":32827,"o":"a,(probe_floor)"},{"a":55851,"t":"code","b":[254,255],"m":"cp","o":"$FF"},{"a":55853,"t":"code","b":[40,69],"m":"jr","oa":55924,"o":"z,sparky_collision"},{"a":55855,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":55856,"t":"code","b":[253,126,11],"m":"ld","o":"a,(iy+$0B)"},{"a":55859,"t":"code","b":[145],"m":"sub","o":"c"},{"a":55860,"t":"code","b":[254,6],"m":"cp","o":"$06"},{"a":55862,"t":"code","b":[56,2],"m":"jr","oa":55866,"o":"c,$DA3A"},{"a":55864,"t":"code","b":[62,6],"m":"ld","o":"a,$06"},{"a":55866,"t":"code","b":[237,68],"m":"neg","x":[55862]},{"a":55868,"l":"finish_object_move","c":"Shared end of a move. From $DA3C the signed height change in A is added to the object's bottom and top heights (bytes $0B and $0D). From $DA4A the tested position is stored: $8029, $801B, $802A and $801D into bytes 4-7, and what $A192 returns for the square in $8027, its table position or its address, into bytes 2-3; then the walk goes on at $D694. $DA3C is fallen into from the sparky's own drop at $DA3A and jumped to from $DA88, $DAEE, $DB86 and $DB9F; $DA4A, with no change of height, is jumped to from $D9DF, $DA83 and the type $E5 handler at $DDF5.","t":"code","b":[79],"m":"ld","o":"c,a","x":[55944,56046,56198,56223]},{"a":55869,"t":"code","b":[253,134,11],"m":"add","o":"a,(iy+$0B)"},{"a":55872,"t":"code","b":[253,119,11],"m":"ld","o":"(iy+$0B),a"},{"a":55875,"t":"code","b":[253,126,13],"m":"ld","o":"a,(iy+$0D)"},{"a":55878,"t":"code","b":[129],"m":"add","o":"a,c"},{"a":55879,"t":"code","b":[253,119,13],"m":"ld","o":"(iy+$0D),a"},{"a":55882,"t":"code","b":[58,41,128],"m":"ld","oa":32809,"o":"a,(shape_y3)","x":[55775,55939,56821]},{"a":55885,"t":"code","b":[253,119,4],"m":"ld","o":"(iy+$04),a"},{"a":55888,"t":"code","b":[58,27,128],"m":"ld","oa":32795,"o":"a,(shape_x0)"},{"a":55891,"t":"code","b":[253,119,5],"m":"ld","o":"(iy+$05),a"},{"a":55894,"t":"code","b":[58,42,128],"m":"ld","oa":32810,"o":"a,(shape_y3_high)"},{"a":55897,"t":"code","b":[253,119,6],"m":"ld","o":"(iy+$06),a"},{"a":55900,"t":"code","b":[58,29,128],"m":"ld","oa":32797,"o":"a,(shape_y0)"},{"a":55903,"t":"code","b":[253,119,7],"m":"ld","o":"(iy+$07),a"},{"a":55906,"t":"code","b":[42,39,128],"m":"ld","oa":32807,"o":"hl,(shape_x3)"},{"a":55909,"t":"code","b":[205,146,161],"m":"call","oa":41362,"o":"find_cell_in_window"},{"a":55912,"t":"code","b":[253,117,2],"m":"ld","o":"(iy+$02),l"},{"a":55915,"t":"code","b":[253,116,3],"m":"ld","o":"(iy+$03),h"},{"a":55918,"t":"code","b":[253,229],"m":"push","o":"iy"},{"a":55920,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":55921,"t":"code","b":[195,148,214],"m":"jp","oa":54932,"o":"walk_next_object"},{"a":55924,"l":"sparky_collision","c":"The sparky's move met a board record ($803B = $FF). Objects of types $F1 and $F0 are not tested against other objects ($E10C), so it can only be the board. A record of type $E2, a track, sends the sparky to $DAC7. Otherwise the step up to the obstacle's top ($8036 less the sparky's bottom) decides: none and it moves on, less than $0C and it climbs it, $0C or more and it has hit a wall: it is removed at once if its x or y byte is zero, else its state becomes $FE and the fizzle below begins on the same pass.","t":"code","b":[58,53,128],"m":"ld","oa":32821,"o":"a,(probe_z)","x":[55853]},{"a":55927,"t":"code","b":[254,226],"m":"cp","o":"$E2"},{"a":55929,"t":"code","b":[202,199,218],"m":"jp","oa":56007,"o":"z,sparky_join_track"},{"a":55932,"t":"code","b":[253,78,11],"m":"ld","o":"c,(iy+$0B)"},{"a":55935,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)"},{"a":55938,"t":"code","b":[145],"m":"sub","o":"c"},{"a":55939,"t":"code","b":[202,74,218],"m":"jp","oa":55882,"o":"z,$DA4A"},{"a":55942,"t":"code","b":[254,12],"m":"cp","o":"$0C"},{"a":55944,"t":"code","b":[218,60,218],"m":"jp","oa":55868,"o":"c,finish_object_move"},{"a":55947,"t":"code","b":[253,126,7],"m":"ld","o":"a,(iy+$07)"},{"a":55950,"t":"code","b":[167],"m":"and","o":"a"},{"a":55951,"t":"code","b":[202,230,222],"m":"jp","oa":57062,"o":"z,remove_object_record"},{"a":55954,"t":"code","b":[253,126,5],"m":"ld","o":"a,(iy+$05)"},{"a":55957,"t":"code","b":[167],"m":"and","o":"a"},{"a":55958,"t":"code","b":[202,230,222],"m":"jp","oa":57062,"o":"z,remove_object_record"},{"a":55961,"t":"code","b":[253,54,15,254],"m":"ld","o":"(iy+$0F),$FE"},{"a":55965,"l":"sparky_fizzle","c":"State $FE of a sparky, one that has hit a wall. Each pass takes 2 from each size byte (8 and 9) and adds 1 to y and to x (bytes 7 and 5), so it shrinks about its centre. It is removed when a size reaches zero, which from size 10 is the fifth pass, or if y or x wraps to zero.","t":"code","b":[253,53,8],"m":"dec","o":"(iy+$08)","x":[55823]},{"a":55968,"t":"code","b":[202,230,222],"m":"jp","oa":57062,"o":"z,remove_object_record"},{"a":55971,"t":"code","b":[253,53,8],"m":"dec","o":"(iy+$08)"},{"a":55974,"t":"code","b":[202,230,222],"m":"jp","oa":57062,"o":"z,remove_object_record"},{"a":55977,"t":"code","b":[253,53,9],"m":"dec","o":"(iy+$09)"},{"a":55980,"t":"code","b":[202,230,222],"m":"jp","oa":57062,"o":"z,remove_object_record"},{"a":55983,"t":"code","b":[253,53,9],"m":"dec","o":"(iy+$09)"},{"a":55986,"t":"code","b":[202,230,222],"m":"jp","oa":57062,"o":"z,remove_object_record"},{"a":55989,"t":"code","b":[253,52,7],"m":"inc","o":"(iy+$07)"},{"a":55992,"t":"code","b":[202,230,222],"m":"jp","oa":57062,"o":"z,remove_object_record"},{"a":55995,"t":"code","b":[253,52,5],"m":"inc","o":"(iy+$05)"},{"a":55998,"t":"code","b":[202,230,222],"m":"jp","oa":57062,"o":"z,remove_object_record"},{"a":56001,"t":"code","b":[253,229],"m":"push","o":"iy"},{"a":56003,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":56004,"t":"code","b":[195,148,214],"m":"jp","oa":54932,"o":"walk_next_object"},{"a":56007,"l":"sparky_join_track","c":"A sparky whose move met a type $E2 record becomes a rider: state $FF, heading rounded to the nearest multiple of $40, byte $13 the opposite heading, byte $15 = 3, byte $14 = 6 and byte $16 = 0. It is lifted to the record's top ($8036) through $DA3C and from the next pass is run by $DB0F.","t":"code","b":[62,255],"m":"ld","o":"a,$FF","x":[55929]},{"a":56009,"t":"code","b":[253,119,15],"m":"ld","o":"(iy+$0F),a"},{"a":56012,"t":"code","b":[253,126,14],"m":"ld","o":"a,(iy+$0E)"},{"a":56015,"t":"code","b":[198,32],"m":"add","o":"a,$20"},{"a":56017,"t":"code","b":[230,192],"m":"and","o":"$C0"},{"a":56019,"t":"code","b":[253,119,14],"m":"ld","o":"(iy+$0E),a"},{"a":56022,"t":"code","b":[198,128],"m":"add","o":"a,$80"},{"a":56024,"t":"code","b":[253,119,19],"m":"ld","o":"(iy+$13),a"},{"a":56027,"t":"code","b":[253,54,21,3],"m":"ld","o":"(iy+$15),$03"},{"a":56031,"t":"code","b":[253,54,20,6],"m":"ld","o":"(iy+$14),$06"},{"a":56035,"t":"code","b":[253,54,22,0],"m":"ld","o":"(iy+$16),$00"},{"a":56039,"t":"code","b":[253,78,11],"m":"ld","o":"c,(iy+$0B)"},{"a":56042,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)"},{"a":56045,"t":"code","b":[145],"m":"sub","o":"c"},{"a":56046,"t":"code","b":[195,60,218],"m":"jp","oa":55868,"o":"finish_object_move"},{"a":56049,"l":"update_arrival_marker","c":"Handler for a type $E3 record: what the leader of a train (type $F0) is turned into at $DC21 when it reaches a record of type $EC, $EE or $EF, where it waits to count its followers in. The handler only runs two timers: byte $17 is counted down every pass, and each time it reaches zero byte $18 is counted down. When byte $18 goes below zero the number left in byte $16, the followers that have not arrived ($DBF0 takes one off for each that does), is added to the reserve of bugs at $8066 and the record is removed. With $14 in byte $17 and 1 in byte $18, the values in the leaders of the template at $7951, that happens 276 passes after the leader arrives.","t":"code","b":[229],"m":"push","o":"hl","x":[54961]},{"a":56050,"t":"code","b":[253,225],"m":"pop","o":"iy"},{"a":56052,"t":"code","b":[253,53,23],"m":"dec","o":"(iy+$17)"},{"a":56055,"t":"code","b":[194,148,214],"m":"jp","oa":54932,"o":"nz,walk_next_object"},{"a":56058,"t":"code","b":[253,53,24],"m":"dec","o":"(iy+$18)"},{"a":56061,"t":"code","b":[242,148,214],"m":"jp","oa":54932,"o":"p,walk_next_object"},{"a":56064,"t":"code","b":[58,102,128],"m":"ld","oa":32870,"o":"a,(bug_spawn_budget)"},{"a":56067,"t":"code","b":[253,134,22],"m":"add","o":"a,(iy+$16)"},{"a":56070,"t":"code","b":[50,102,128],"m":"ld","oa":32870,"o":"(bug_spawn_budget),a"},{"a":56073,"t":"code","b":[195,230,222],"m":"jp","oa":57062,"o":"remove_object_record"},{"a":56076,"l":"update_rider","c":"Handler for a type $F0 record, the leader of a train, and, entered at $DB0F, for a type $F1 record in state $FF: a follower, or a sparky that has joined a track. Riders move at speed 7 along the board records of type $E2. After the move is worked out and tested ($DF04, $DFB8) the timer in byte $14 is counted down; on the pass it reaches zero byte $13 is set to the reverse of the heading and byte $15 to 3, and if the record met or underneath ($8035, $8037) is of type $E2 and less than $1E across the direction of travel, the tested position is centred on it ($801B or $801D = its start + half its width - 5) and the test is made again. Then, from $DB6D: with no square there, or with a surface underneath that is not type $E2, or with a collision with anything other than type $E2 or types $E8-$EF, the rider turns ($DBA2). With a type $E2 record underneath or met it takes that record's height and moves ($DA3C). A collision with a record of type $E8-$EF leaves for $DBC6, where the journey ends.","t":"code","b":[229],"m":"push","o":"hl","x":[54956]},{"a":56077,"t":"code","b":[253,225],"m":"pop","o":"iy"},{"a":56079,"t":"code","b":[253,54,18,7],"m":"ld","o":"(iy+$12),$07","x":[55819]},{"a":56083,"t":"code","b":[205,4,223],"m":"call","oa":57092,"o":"velocity_from_heading"},{"a":56086,"t":"code","b":[205,184,223],"m":"call","oa":57272,"o":"probe_move","x":[56148,56170]},{"a":56089,"t":"code","b":[253,53,20],"m":"dec","o":"(iy+$14)"},{"a":56092,"t":"code","b":[194,109,219],"m":"jp","oa":56173,"o":"nz,$DB6D"},{"a":56095,"t":"code","b":[253,126,14],"m":"ld","o":"a,(iy+$0E)"},{"a":56098,"t":"code","b":[198,128],"m":"add","o":"a,$80"},{"a":56100,"t":"code","b":[253,119,19],"m":"ld","o":"(iy+$13),a"},{"a":56103,"t":"code","b":[253,54,21,3],"m":"ld","o":"(iy+$15),$03"},{"a":56107,"t":"code","b":[58,53,128],"m":"ld","oa":32821,"o":"a,(probe_z)"},{"a":56110,"t":"code","b":[254,226],"m":"cp","o":"$E2"},{"a":56112,"t":"code","b":[32,59],"m":"jr","oa":56173,"o":"nz,$DB6D"},{"a":56114,"t":"code","b":[221,42,55,128],"m":"ld","oa":32823,"o":"ix,(probe_hit)"},{"a":56118,"t":"code","b":[253,126,14],"m":"ld","o":"a,(iy+$0E)"},{"a":56121,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":56123,"t":"code","b":[198,64],"m":"add","o":"a,$40"},{"a":56125,"t":"code","b":[203,127],"m":"bit","o":"7,a"},{"a":56127,"t":"code","b":[40,22],"m":"jr","oa":56151,"o":"z,$DB57"},{"a":56129,"t":"code","b":[221,126,3],"m":"ld","o":"a,(ix+$03)"},{"a":56132,"t":"code","b":[254,30],"m":"cp","o":"$1E"},{"a":56134,"t":"code","b":[48,37],"m":"jr","oa":56173,"o":"nc,$DB6D"},{"a":56136,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":56138,"t":"code","b":[221,134,2],"m":"add","o":"a,(ix+$02)"},{"a":56141,"t":"code","b":[56,30],"m":"jr","oa":56173,"o":"c,$DB6D"},{"a":56143,"t":"code","b":[214,5],"m":"sub","o":"$05"},{"a":56145,"t":"code","b":[50,27,128],"m":"ld","oa":32795,"o":"(shape_x0),a"},{"a":56148,"t":"code","b":[195,22,219],"m":"jp","oa":56086,"o":"$DB16"},{"a":56151,"t":"code","b":[221,126,5],"m":"ld","o":"a,(ix+$05)","x":[56127]},{"a":56154,"t":"code","b":[254,30],"m":"cp","o":"$1E"},{"a":56156,"t":"code","b":[48,15],"m":"jr","oa":56173,"o":"nc,$DB6D"},{"a":56158,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":56160,"t":"code","b":[221,134,4],"m":"add","o":"a,(ix+$04)"},{"a":56163,"t":"code","b":[56,8],"m":"jr","oa":56173,"o":"c,$DB6D"},{"a":56165,"t":"code","b":[214,5],"m":"sub","o":"$05"},{"a":56167,"t":"code","b":[50,29,128],"m":"ld","oa":32797,"o":"(shape_y0),a"},{"a":56170,"t":"code","b":[195,22,219],"m":"jp","oa":56086,"o":"$DB16"},{"a":56173,"t":"code","b":[58,40,128],"m":"ld","oa":32808,"o":"a,(shape_x3_high)","x":[56092,56112,56134,56141,56156,56163]},{"a":56176,"t":"code","b":[167],"m":"and","o":"a"},{"a":56177,"t":"code","b":[40,47],"m":"jr","oa":56226,"o":"z,rider_turn"},{"a":56179,"t":"code","b":[58,59,128],"m":"ld","oa":32827,"o":"a,(probe_floor)"},{"a":56182,"t":"code","b":[254,255],"m":"cp","o":"$FF"},{"a":56184,"t":"code","b":[40,15],"m":"jr","oa":56201,"o":"z,$DB89"},{"a":56186,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":56187,"t":"code","b":[58,53,128],"m":"ld","oa":32821,"o":"a,(probe_z)"},{"a":56190,"t":"code","b":[254,226],"m":"cp","o":"$E2"},{"a":56192,"t":"code","b":[32,32],"m":"jr","oa":56226,"o":"nz,rider_turn"},{"a":56194,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":56195,"t":"code","b":[253,150,11],"m":"sub","o":"(iy+$0B)"},{"a":56198,"t":"code","b":[195,60,218],"m":"jp","oa":55868,"o":"finish_object_move"},{"a":56201,"t":"code","b":[58,53,128],"m":"ld","oa":32821,"o":"a,(probe_z)","x":[56184]},{"a":56204,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":56205,"t":"code","b":[230,248],"m":"and","o":"$F8"},{"a":56207,"t":"code","b":[254,232],"m":"cp","o":"$E8"},{"a":56209,"t":"code","b":[40,51],"m":"jr","oa":56262,"o":"z,f0_f1_reaches_e8_record"},{"a":56211,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":56212,"t":"code","b":[254,226],"m":"cp","o":"$E2"},{"a":56214,"t":"code","b":[32,10],"m":"jr","oa":56226,"o":"nz,rider_turn"},{"a":56216,"t":"code","b":[253,78,11],"m":"ld","o":"c,(iy+$0B)"},{"a":56219,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)"},{"a":56222,"t":"code","b":[145],"m":"sub","o":"c"},{"a":56223,"t":"code","b":[195,60,218],"m":"jp","oa":55868,"o":"finish_object_move"},{"a":56226,"l":"rider_turn","c":"The rider cannot go on. It sets the timer in byte $14 to 6 and adds $40 to the heading (byte $0E), a quarter turn, without moving on this pass. If the new heading is the reverse one kept in byte $13 it takes one from byte $15 and turns again, so it does not double back; when byte $15 goes below zero, which from the 3 that $DB27 gives it is the fourth time the turning comes round to the reverse heading, the rider becomes a burst at $DE22. Any other heading is tried on the next pass, and the exit at $DBC0 hands the record back to the walk.","t":"code","b":[253,54,20,6],"m":"ld","o":"(iy+$14),$06","x":[56177,56192,56214,56247]},{"a":56230,"t":"code","b":[253,126,14],"m":"ld","o":"a,(iy+$0E)"},{"a":56233,"t":"code","b":[198,64],"m":"add","o":"a,$40"},{"a":56235,"t":"code","b":[253,119,14],"m":"ld","o":"(iy+$0E),a"},{"a":56238,"t":"code","b":[253,190,19],"m":"cp","o":"(iy+$13)"},{"a":56241,"t":"code","b":[194,192,219],"m":"jp","oa":56256,"o":"nz,f0_handler_exit"},{"a":56244,"t":"code","b":[253,53,21],"m":"dec","o":"(iy+$15)"},{"a":56247,"t":"code","b":[242,162,219],"m":"jp","oa":56226,"o":"p,rider_turn"},{"a":56250,"t":"code","b":[195,34,222],"m":"jp","oa":56866,"o":"become_e6_burst"},{"a":56253,"l":"unreached_inc_after_rider","c":"Three bytes, $FD $34 $13, which decode as INC (IY+$13). Nothing reaches them: the instruction before is an unconditional JP, the code after begins at $DBC0, and no jump or call names $DBBD.","t":"byte","b":[253,52,19]},{"a":56256,"l":"f0_handler_exit","c":"The exit of the handler at $DB0C, which type-$F0 records share with type-$F1 records whose +$0F is $FF. It is reached from $DBB1 once the heading in +$0E has been turned by $40 and does not match the byte in +$13: it copies IY, the record being handled, into HL and jumps to $D694, which goes on to the record 30 bytes below in the object list. One reference, the JP NZ at $DBB1.","t":"code","b":[253,229],"m":"push","o":"iy","x":[56241]},{"a":56258,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":56259,"t":"code","b":[195,148,214],"m":"jp","oa":54932,"o":"walk_next_object"},{"a":56262,"l":"f0_f1_reaches_e8_record","c":"Reached from $DB91 in the handler at $DB0C when the probe at $DFB8 reports a hit ($803B = $FF) on something whose type byte in $8035 is $E8 to $EF. A type-$F0 record ($DC12) is removed through $DEE6 if that type is $E8-$EB or $ED; for $EC, $EE or $EF it becomes type $E3 and settles on the board record at ($8037): +$0B = the record's first byte, its top, +$0D = that plus $0B, +$05 and +$08 = its x and width, +$07 and +$09 = its y and depth, and the walk continues at $D694. A type-$F1 record goes to $DC4C for $E8-$EB, to the counter at $DEB8 for $ED, and for $EC, $EE or $EF becomes type $F3 and runs the probe again, which now tests other objects too. If that leaves $E3 in $8035, the record at ($8037) is taken to be a type-$E3 object, with no check that it is not one of the board's four type-$E3 records: its +$16 is decremented and this record is removed, and when +$16 reaches zero the $E3 record is removed first, by copying the last record of the list over it. When the record being handled is itself the last in the list, that copy puts it in the $E3 record's place, where it lives on as type $F3, and the removal that follows drops the record before it instead. If the second probe leaves anything else in $8035 the record goes to $DC4C, which makes it type $F3 with +$12 = 4, +$13 = 6, +$15 = 2 and +$16 = 2 and jumps to $D738 with A = ($8036) minus its own +$0B, the height it has to rise to stand on what it hit. The board on the tape holds 15 records of types $E8-$EB, 17 of $EC, 4 of $ED and none of $EE or $EF.","t":"code","b":[253,126,0],"m":"ld","o":"a,(iy+$00)","x":[56209]},{"a":56265,"t":"code","b":[254,240],"m":"cp","o":"$F0"},{"a":56267,"t":"code","b":[202,18,220],"m":"jp","oa":56338,"o":"z,$DC12"},{"a":56270,"t":"code","b":[58,53,128],"m":"ld","oa":32821,"o":"a,(probe_z)"},{"a":56273,"t":"code","b":[203,87],"m":"bit","o":"2,a"},{"a":56275,"t":"code","b":[202,76,220],"m":"jp","oa":56396,"o":"z,$DC4C"},{"a":56278,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":56280,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":56282,"t":"code","b":[202,184,222],"m":"jp","oa":57016,"o":"z,count_ed_arrival"},{"a":56285,"t":"code","b":[253,54,0,243],"m":"ld","o":"(iy+$00),$F3"},{"a":56289,"t":"code","b":[205,184,223],"m":"call","oa":57272,"o":"probe_move"},{"a":56292,"t":"code","b":[58,53,128],"m":"ld","oa":32821,"o":"a,(probe_z)"},{"a":56295,"t":"code","b":[254,227],"m":"cp","o":"$E3"},{"a":56297,"t":"code","b":[194,76,220],"m":"jp","oa":56396,"o":"nz,$DC4C"},{"a":56300,"t":"code","b":[221,42,55,128],"m":"ld","oa":32823,"o":"ix,(probe_hit)"},{"a":56304,"t":"code","b":[221,53,22],"m":"dec","o":"(ix+$16)"},{"a":56307,"t":"code","b":[194,230,222],"m":"jp","oa":57062,"o":"nz,remove_object_record"},{"a":56310,"t":"code","b":[58,113,124],"m":"ld","oa":31857,"o":"a,(object_count_plus_one)"},{"a":56313,"t":"code","b":[61],"m":"dec","o":"a"},{"a":56314,"t":"code","b":[50,113,124],"m":"ld","oa":31857,"o":"(object_count_plus_one),a"},{"a":56317,"t":"code","b":[42,114,124],"m":"ld","oa":31858,"o":"hl,(object_list_end)"},{"a":56320,"t":"code","b":[1,30,0],"m":"ld","o":"bc,$001E"},{"a":56323,"t":"code","b":[167],"m":"and","o":"a"},{"a":56324,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":56326,"t":"code","b":[34,114,124],"m":"ld","oa":31858,"o":"(object_list_end),hl"},{"a":56329,"t":"code","b":[237,91,55,128],"m":"ld","oa":32823,"o":"de,(probe_hit)"},{"a":56333,"t":"code","b":[237,176],"m":"ldir"},{"a":56335,"t":"code","b":[195,230,222],"m":"jp","oa":57062,"o":"remove_object_record"},{"a":56338,"t":"code","b":[58,53,128],"m":"ld","oa":32821,"o":"a,(probe_z)","x":[56267]},{"a":56341,"t":"code","b":[203,87],"m":"bit","o":"2,a"},{"a":56343,"t":"code","b":[202,230,222],"m":"jp","oa":57062,"o":"z,remove_object_record"},{"a":56346,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":56348,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":56350,"t":"code","b":[202,230,222],"m":"jp","oa":57062,"o":"z,remove_object_record"},{"a":56353,"t":"code","b":[253,54,0,227],"m":"ld","o":"(iy+$00),$E3"},{"a":56357,"t":"code","b":[42,55,128],"m":"ld","oa":32823,"o":"hl,(probe_hit)"},{"a":56360,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":56361,"t":"code","b":[253,119,11],"m":"ld","o":"(iy+$0B),a"},{"a":56364,"t":"code","b":[198,11],"m":"add","o":"a,$0B"},{"a":56366,"t":"code","b":[253,119,13],"m":"ld","o":"(iy+$0D),a"},{"a":56369,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56370,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56371,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":56372,"t":"code","b":[253,119,5],"m":"ld","o":"(iy+$05),a"},{"a":56375,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56376,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":56377,"t":"code","b":[253,119,8],"m":"ld","o":"(iy+$08),a"},{"a":56380,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56381,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":56382,"t":"code","b":[253,119,7],"m":"ld","o":"(iy+$07),a"},{"a":56385,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56386,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":56387,"t":"code","b":[253,119,9],"m":"ld","o":"(iy+$09),a"},{"a":56390,"t":"code","b":[253,229],"m":"push","o":"iy"},{"a":56392,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":56393,"t":"code","b":[195,148,214],"m":"jp","oa":54932,"o":"walk_next_object"},{"a":56396,"t":"code","b":[253,54,0,243],"m":"ld","o":"(iy+$00),$F3","x":[56275,56297]},{"a":56400,"t":"code","b":[253,54,18,4],"m":"ld","o":"(iy+$12),$04"},{"a":56404,"t":"code","b":[253,54,19,6],"m":"ld","o":"(iy+$13),$06"},{"a":56408,"t":"code","b":[253,54,21,2],"m":"ld","o":"(iy+$15),$02"},{"a":56412,"t":"code","b":[253,54,22,2],"m":"ld","o":"(iy+$16),$02"},{"a":56416,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)"},{"a":56419,"t":"code","b":[253,150,11],"m":"sub","o":"(iy+$0B)"},{"a":56422,"t":"code","b":[195,56,215],"m":"jp","oa":55096,"o":"$D738"},{"a":56425,"l":"e5_flyer_handler","c":"Handler for type-$E5 records, entered from the dispatch at $D6B6 with HL = the record. A record whose +$03 is 5 or more, meaning its square has left the 5-by-5 window at $6432, is removed. Otherwise it steers at the point the view is centred on, ($7FF5, $7FF7) in window square (2, 2): for x it takes $0200 + ($7FF5) minus its own position (+$02 as the high byte, +$05 as the low), adds four times that difference to the velocity in +$14/+$15 and keeps the whole part (+$15) within -4 to 4; the same for y with ($7FF7), +$03, +$07 and +$17/+$18. The velocities go to $8033-$8038 for $DF44 and their sign bytes to +$16 and +$19. When both differences are between -20 and 19 it writes 2 to $8056, sets the attribute bytes at $5A6A, $5A6B, $5AAA and $5AAB to $47 (four of the sixteen panel cells that $7A56-$7A94 recolour in every frame), and lowers +$0B and +$0D by 5; if either passes below zero it has landed: +$0B = 1, +$0D = $0B, and it becomes type $F3 with +$18 = 2 and +$15 = 1. Then come $DF44 and the probe at $DFB8. With no square at the new place ($8028 = 0) the whole parts of both velocities are negated and the step is dropped. With no hit, the height beneath it ($803B) is stored in +$1B, which the drawing code reads at $8674; if the thing beneath is a type-$F1 record whose +$0F is 0, that record's +$0F is set to $FD, which is what makes a waiting burper rise (the manual's 'rise to a Sputnik overhead'); and $DA4A stores the new position. On a hit with a type-$F1 record, that record is removed by copying the last record of the list over it, 35 is added to the word at $8060 and this record becomes the burst at $DE22; when this record is itself the last in the list the copy keeps it alive in the other's place and the burst is written just past the end of the list. A hit on another $E5 bounces it as above. A hit on anything else lifts it onto the thing and makes it type $F3 if the thing's top is 0 to 14 above the flyer's own base; otherwise it bounces.","t":"code","b":[229],"m":"push","o":"hl","x":[54966]},{"a":56426,"t":"code","b":[253,225],"m":"pop","o":"iy"},{"a":56428,"t":"code","b":[253,126,3],"m":"ld","o":"a,(iy+$03)"},{"a":56431,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":56433,"t":"code","b":[210,230,222],"m":"jp","oa":57062,"o":"nc,remove_object_record"},{"a":56436,"t":"code","b":[14,2],"m":"ld","o":"c,$02"},{"a":56438,"t":"code","b":[58,245,127],"m":"ld","oa":32757,"o":"a,($7FF5)"},{"a":56441,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":56442,"t":"code","b":[38,2],"m":"ld","o":"h,$02"},{"a":56444,"t":"code","b":[253,94,5],"m":"ld","o":"e,(iy+$05)"},{"a":56447,"t":"code","b":[253,86,2],"m":"ld","o":"d,(iy+$02)"},{"a":56450,"t":"code","b":[167],"m":"and","o":"a"},{"a":56451,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":56453,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":56454,"t":"code","b":[33,20,0],"m":"ld","o":"hl,$0014"},{"a":56457,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":56458,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":56459,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":56460,"t":"code","b":[167],"m":"and","o":"a"},{"a":56461,"t":"code","b":[32,6],"m":"jr","oa":56469,"o":"nz,$DC95"},{"a":56463,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":56464,"t":"code","b":[254,40],"m":"cp","o":"$28"},{"a":56466,"t":"code","b":[48,1],"m":"jr","oa":56469,"o":"nc,$DC95"},{"a":56468,"t":"code","b":[13],"m":"dec","o":"c"},{"a":56469,"t":"code","b":[41],"m":"add","o":"hl,hl","x":[56461,56466]},{"a":56470,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":56471,"t":"code","b":[253,94,20],"m":"ld","o":"e,(iy+$14)"},{"a":56474,"t":"code","b":[253,86,21],"m":"ld","o":"d,(iy+$15)"},{"a":56477,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":56478,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":56479,"t":"code","b":[198,4],"m":"add","o":"a,$04"},{"a":56481,"t":"code","b":[254,9],"m":"cp","o":"$09"},{"a":56483,"t":"code","b":[56,9],"m":"jr","oa":56494,"o":"c,$DCAE"},{"a":56485,"t":"code","b":[62,4],"m":"ld","o":"a,$04"},{"a":56487,"t":"code","b":[203,124],"m":"bit","o":"7,h"},{"a":56489,"t":"code","b":[40,2],"m":"jr","oa":56493,"o":"z,$DCAD"},{"a":56491,"t":"code","b":[62,252],"m":"ld","o":"a,$FC"},{"a":56493,"t":"code","b":[103],"m":"ld","o":"h,a","x":[56489]},{"a":56494,"t":"code","b":[253,117,20],"m":"ld","o":"(iy+$14),l","x":[56483]},{"a":56497,"t":"code","b":[253,116,21],"m":"ld","o":"(iy+$15),h"},{"a":56500,"t":"code","b":[34,51,128],"m":"ld","oa":32819,"o":"(probe_x),hl"},{"a":56503,"t":"code","b":[175],"m":"xor","o":"a"},{"a":56504,"t":"code","b":[203,124],"m":"bit","o":"7,h"},{"a":56506,"t":"code","b":[40,1],"m":"jr","oa":56509,"o":"z,$DCBD"},{"a":56508,"t":"code","b":[61],"m":"dec","o":"a"},{"a":56509,"t":"code","b":[253,119,22],"m":"ld","o":"(iy+$16),a","x":[56506]},{"a":56512,"t":"code","b":[50,55,128],"m":"ld","oa":32823,"o":"(probe_hit),a"},{"a":56515,"t":"code","b":[58,247,127],"m":"ld","oa":32759,"o":"a,($7FF7)"},{"a":56518,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":56519,"t":"code","b":[38,2],"m":"ld","o":"h,$02"},{"a":56521,"t":"code","b":[253,94,7],"m":"ld","o":"e,(iy+$07)"},{"a":56524,"t":"code","b":[253,86,3],"m":"ld","o":"d,(iy+$03)"},{"a":56527,"t":"code","b":[167],"m":"and","o":"a"},{"a":56528,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":56530,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":56531,"t":"code","b":[33,20,0],"m":"ld","o":"hl,$0014"},{"a":56534,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":56535,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":56536,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":56537,"t":"code","b":[167],"m":"and","o":"a"},{"a":56538,"t":"code","b":[32,46],"m":"jr","oa":56586,"o":"nz,$DD0A"},{"a":56540,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":56541,"t":"code","b":[254,40],"m":"cp","o":"$28"},{"a":56543,"t":"code","b":[48,41],"m":"jr","oa":56586,"o":"nc,$DD0A"},{"a":56545,"t":"code","b":[13],"m":"dec","o":"c"},{"a":56546,"t":"code","b":[32,38],"m":"jr","oa":56586,"o":"nz,$DD0A"},{"a":56548,"t":"code","b":[62,2],"m":"ld","o":"a,$02"},{"a":56550,"t":"code","b":[50,86,128],"m":"ld","oa":32854,"o":"(clear_click_period),a"},{"a":56553,"t":"code","b":[17,71,71],"m":"ld","o":"de,$4747"},{"a":56556,"t":"code","b":[237,83,170,90],"m":"ld","oa":23210,"o":"($5AAA),de"},{"a":56560,"t":"code","b":[237,83,106,90],"m":"ld","oa":23146,"o":"($5A6A),de"},{"a":56564,"t":"code","b":[253,126,11],"m":"ld","o":"a,(iy+$0B)"},{"a":56567,"t":"code","b":[214,5],"m":"sub","o":"$05"},{"a":56569,"t":"code","b":[253,119,11],"m":"ld","o":"(iy+$0B),a"},{"a":56572,"t":"code","b":[218,152,221],"m":"jp","oa":56728,"o":"c,$DD98"},{"a":56575,"t":"code","b":[253,126,13],"m":"ld","o":"a,(iy+$0D)"},{"a":56578,"t":"code","b":[214,5],"m":"sub","o":"$05"},{"a":56580,"t":"code","b":[253,119,13],"m":"ld","o":"(iy+$0D),a"},{"a":56583,"t":"code","b":[218,152,221],"m":"jp","oa":56728,"o":"c,$DD98"},{"a":56586,"t":"code","b":[41],"m":"add","o":"hl,hl","x":[56538,56543,56546]},{"a":56587,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":56588,"t":"code","b":[253,94,23],"m":"ld","o":"e,(iy+$17)"},{"a":56591,"t":"code","b":[253,86,24],"m":"ld","o":"d,(iy+$18)"},{"a":56594,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":56595,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":56596,"t":"code","b":[198,4],"m":"add","o":"a,$04"},{"a":56598,"t":"code","b":[254,9],"m":"cp","o":"$09"},{"a":56600,"t":"code","b":[56,9],"m":"jr","oa":56611,"o":"c,$DD23"},{"a":56602,"t":"code","b":[62,4],"m":"ld","o":"a,$04"},{"a":56604,"t":"code","b":[203,124],"m":"bit","o":"7,h"},{"a":56606,"t":"code","b":[40,2],"m":"jr","oa":56610,"o":"z,$DD22"},{"a":56608,"t":"code","b":[62,252],"m":"ld","o":"a,$FC"},{"a":56610,"t":"code","b":[103],"m":"ld","o":"h,a","x":[56606]},{"a":56611,"t":"code","b":[253,117,23],"m":"ld","o":"(iy+$17),l","x":[56600]},{"a":56614,"t":"code","b":[253,116,24],"m":"ld","o":"(iy+$18),h"},{"a":56617,"t":"code","b":[34,53,128],"m":"ld","oa":32821,"o":"(probe_z),hl"},{"a":56620,"t":"code","b":[175],"m":"xor","o":"a"},{"a":56621,"t":"code","b":[203,124],"m":"bit","o":"7,h"},{"a":56623,"t":"code","b":[40,1],"m":"jr","oa":56626,"o":"z,$DD32"},{"a":56625,"t":"code","b":[61],"m":"dec","o":"a"},{"a":56626,"t":"code","b":[253,119,25],"m":"ld","o":"(iy+$19),a","x":[56623]},{"a":56629,"t":"code","b":[50,56,128],"m":"ld","oa":32824,"o":"(probe_hit_high),a"},{"a":56632,"t":"code","b":[205,68,223],"m":"call","oa":57156,"o":"set_move_box"},{"a":56635,"t":"code","b":[205,184,223],"m":"call","oa":57272,"o":"probe_move"},{"a":56638,"t":"code","b":[58,40,128],"m":"ld","oa":32808,"o":"a,(shape_x3_high)"},{"a":56641,"t":"code","b":[167],"m":"and","o":"a"},{"a":56642,"t":"code","b":[40,110],"m":"jr","oa":56754,"o":"z,$DDB2"},{"a":56644,"t":"code","b":[58,59,128],"m":"ld","oa":32827,"o":"a,(probe_floor)"},{"a":56647,"t":"code","b":[254,255],"m":"cp","o":"$FF"},{"a":56649,"t":"code","b":[194,220,221],"m":"jp","oa":56796,"o":"nz,$DDDC"},{"a":56652,"t":"code","b":[58,53,128],"m":"ld","oa":32821,"o":"a,(probe_z)"},{"a":56655,"t":"code","b":[254,241],"m":"cp","o":"$F1"},{"a":56657,"t":"code","b":[32,38],"m":"jr","oa":56697,"o":"nz,$DD79"},{"a":56659,"t":"code","b":[58,113,124],"m":"ld","oa":31857,"o":"a,(object_count_plus_one)"},{"a":56662,"t":"code","b":[61],"m":"dec","o":"a"},{"a":56663,"t":"code","b":[50,113,124],"m":"ld","oa":31857,"o":"(object_count_plus_one),a"},{"a":56666,"t":"code","b":[42,96,128],"m":"ld","oa":32864,"o":"hl,(score)"},{"a":56669,"t":"code","b":[1,35,0],"m":"ld","o":"bc,$0023"},{"a":56672,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":56673,"t":"code","b":[34,96,128],"m":"ld","oa":32864,"o":"(score),hl"},{"a":56676,"t":"code","b":[42,114,124],"m":"ld","oa":31858,"o":"hl,(object_list_end)"},{"a":56679,"t":"code","b":[237,91,55,128],"m":"ld","oa":32823,"o":"de,(probe_hit)"},{"a":56683,"t":"code","b":[1,30,0],"m":"ld","o":"bc,$001E"},{"a":56686,"t":"code","b":[167],"m":"and","o":"a"},{"a":56687,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":56689,"t":"code","b":[34,114,124],"m":"ld","oa":31858,"o":"(object_list_end),hl"},{"a":56692,"t":"code","b":[237,176],"m":"ldir"},{"a":56694,"t":"code","b":[195,34,222],"m":"jp","oa":56866,"o":"become_e6_burst"},{"a":56697,"t":"code","b":[254,229],"m":"cp","o":"$E5","x":[56657]},{"a":56699,"t":"code","b":[40,53],"m":"jr","oa":56754,"o":"z,$DDB2"},{"a":56701,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)"},{"a":56704,"t":"code","b":[253,150,11],"m":"sub","o":"(iy+$0B)"},{"a":56707,"t":"code","b":[254,15],"m":"cp","o":"$0F"},{"a":56709,"t":"code","b":[48,43],"m":"jr","oa":56754,"o":"nc,$DDB2"},{"a":56711,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":56712,"t":"code","b":[253,134,11],"m":"add","o":"a,(iy+$0B)"},{"a":56715,"t":"code","b":[253,119,11],"m":"ld","o":"(iy+$0B),a"},{"a":56718,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":56719,"t":"code","b":[253,134,13],"m":"add","o":"a,(iy+$0D)"},{"a":56722,"t":"code","b":[253,119,13],"m":"ld","o":"(iy+$0D),a"},{"a":56725,"t":"code","b":[195,160,221],"m":"jp","oa":56736,"o":"$DDA0"},{"a":56728,"t":"code","b":[253,54,11,1],"m":"ld","o":"(iy+$0B),$01","x":[56572,56583]},{"a":56732,"t":"code","b":[253,54,13,11],"m":"ld","o":"(iy+$0D),$0B"},{"a":56736,"t":"code","b":[253,54,0,243],"m":"ld","o":"(iy+$00),$F3","x":[56725]},{"a":56740,"t":"code","b":[253,54,24,2],"m":"ld","o":"(iy+$18),$02"},{"a":56744,"t":"code","b":[253,54,21,1],"m":"ld","o":"(iy+$15),$01"},{"a":56748,"t":"code","b":[253,229],"m":"push","o":"iy"},{"a":56750,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":56751,"t":"code","b":[195,148,214],"m":"jp","oa":54932,"o":"walk_next_object"},{"a":56754,"t":"code","b":[253,94,21],"m":"ld","o":"e,(iy+$15)","x":[56642,56699,56709]},{"a":56757,"t":"code","b":[253,86,22],"m":"ld","o":"d,(iy+$16)"},{"a":56760,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":56763,"t":"code","b":[167],"m":"and","o":"a"},{"a":56764,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":56766,"t":"code","b":[253,117,21],"m":"ld","o":"(iy+$15),l"},{"a":56769,"t":"code","b":[253,116,22],"m":"ld","o":"(iy+$16),h"},{"a":56772,"t":"code","b":[253,94,24],"m":"ld","o":"e,(iy+$18)"},{"a":56775,"t":"code","b":[253,86,25],"m":"ld","o":"d,(iy+$19)"},{"a":56778,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":56781,"t":"code","b":[167],"m":"and","o":"a"},{"a":56782,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":56784,"t":"code","b":[253,117,24],"m":"ld","o":"(iy+$18),l"},{"a":56787,"t":"code","b":[253,116,25],"m":"ld","o":"(iy+$19),h"},{"a":56790,"t":"code","b":[253,229],"m":"push","o":"iy"},{"a":56792,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":56793,"t":"code","b":[195,148,214],"m":"jp","oa":54932,"o":"walk_next_object"},{"a":56796,"t":"code","b":[253,119,27],"m":"ld","o":"(iy+$1B),a","x":[56649]},{"a":56799,"t":"code","b":[58,53,128],"m":"ld","oa":32821,"o":"a,(probe_z)"},{"a":56802,"t":"code","b":[254,241],"m":"cp","o":"$F1"},{"a":56804,"t":"code","b":[32,15],"m":"jr","oa":56821,"o":"nz,$DDF5"},{"a":56806,"t":"code","b":[221,42,55,128],"m":"ld","oa":32823,"o":"ix,(probe_hit)"},{"a":56810,"t":"code","b":[221,126,15],"m":"ld","o":"a,(ix+$0F)"},{"a":56813,"t":"code","b":[167],"m":"and","o":"a"},{"a":56814,"t":"code","b":[194,245,221],"m":"jp","oa":56821,"o":"nz,$DDF5"},{"a":56817,"t":"code","b":[221,54,15,253],"m":"ld","o":"(ix+$0F),$FD"},{"a":56821,"t":"code","b":[195,74,218],"m":"jp","oa":55882,"o":"$DA4A","x":[56804,56814]},{"a":56824,"l":"e6_burst_handler","c":"Handler for type-$E6 records, the short burst that a destroyed object turns into, entered from $D6BB with HL = the record. +$0E is its life. A value of 5 or more sends the record to $DE22 to be set up from the start. Otherwise +$0E is decremented and the record is removed through $DEE6 when that takes it below zero. While the value before the decrement was 4 or 3 the shape pointer in +$0F/+$10 is left alone; at 2 it becomes $C5EF and at 1 $C62B. From the 4 that $DE22 stores this gives four passes, showing $C5B3 twice, then $C5EF, then $C62B, and removal on the fifth. The three shapes are 60 bytes apart and are drawn by the code at $870F.","t":"code","b":[229],"m":"push","o":"hl","x":[54971]},{"a":56825,"t":"code","b":[253,225],"m":"pop","o":"iy"},{"a":56827,"t":"code","b":[253,126,14],"m":"ld","o":"a,(iy+$0E)"},{"a":56830,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":56832,"t":"code","b":[48,32],"m":"jr","oa":56866,"o":"nc,become_e6_burst"},{"a":56834,"t":"code","b":[253,53,14],"m":"dec","o":"(iy+$0E)"},{"a":56837,"t":"code","b":[250,230,222],"m":"jp","oa":57062,"o":"m,remove_object_record"},{"a":56840,"t":"code","b":[254,3],"m":"cp","o":"$03"},{"a":56842,"t":"code","b":[48,16],"m":"jr","oa":56860,"o":"nc,$DE1C"},{"a":56844,"t":"code","b":[33,239,197],"m":"ld","o":"hl,$C5EF"},{"a":56847,"t":"code","b":[254,2],"m":"cp","o":"$02"},{"a":56849,"t":"code","b":[48,3],"m":"jr","oa":56854,"o":"nc,$DE16"},{"a":56851,"t":"code","b":[33,43,198],"m":"ld","o":"hl,$C62B"},{"a":56854,"t":"code","b":[253,117,15],"m":"ld","o":"(iy+$0F),l","x":[56849]},{"a":56857,"t":"code","b":[253,116,16],"m":"ld","o":"(iy+$10),h"},{"a":56860,"t":"code","b":[253,229],"m":"push","o":"iy","x":[56842]},{"a":56862,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":56863,"t":"code","b":[195,148,214],"m":"jp","oa":54932,"o":"walk_next_object"},{"a":56866,"l":"become_e6_burst","c":"Turns the record in IY into a burst: type $E6, +$0E = 4, shape pointer +$0F/+$10 = $C5B3, and 8 in both $8055 and $8056, so that the next buffer clear and the next buffer copy each click the speaker every eighth pixel row, 16 times (a sound script that is playing replaces the 8 in $8055 at that copy). It ends at $D694 with HL = the record. Six references: $D6D6, $D9DC, $D9EA, $DBBA, $DD76 and, for a type-$E6 record whose +$0E is 5 or more, $DE00.","t":"code","b":[253,54,0,230],"m":"ld","o":"(iy+$00),$E6","x":[54998,55772,55786,56250,56694,56832]},{"a":56870,"t":"code","b":[253,54,14,4],"m":"ld","o":"(iy+$0E),$04"},{"a":56874,"t":"code","b":[33,179,197],"m":"ld","o":"hl,$C5B3"},{"a":56877,"t":"code","b":[253,117,15],"m":"ld","o":"(iy+$0F),l"},{"a":56880,"t":"code","b":[253,116,16],"m":"ld","o":"(iy+$10),h"},{"a":56883,"t":"code","b":[62,8],"m":"ld","o":"a,$08"},{"a":56885,"t":"code","b":[50,85,128],"m":"ld","oa":32853,"o":"(copy_click_period),a"},{"a":56888,"t":"code","b":[50,86,128],"m":"ld","oa":32854,"o":"(clear_click_period),a"},{"a":56891,"t":"code","b":[253,229],"m":"push","o":"iy"},{"a":56893,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":56894,"t":"code","b":[195,148,214],"m":"jp","oa":54932,"o":"walk_next_object"},{"a":56897,"l":"fb_marker_handler","c":"Handler for type-$FB records, entered from $D6C0 with HL = the record. $D462 makes one at the position the view is centred on, with +$01 = $14, and +$01 is its countdown. If bit 7 of +$01 is set the record is removed through $DEE6; if +$01 is 0 nothing happens. Otherwise +$01 is decremented and $8055 set to $21, three clicks in that frame's buffer copy, and on the pass that brings it to 0 a type-$F3 record is written at the end of the list ($7C72): the marker's square (+$02/+$03), its x and y (+$05, +$07) plus 4, each replaced by $FE if the sum passes 255, a size of 7 by 7 (+$08, +$09), +$0B = 1, +$0D = 6, heading +$0E = the low byte of the frame counter at $8059, +$12 = 3, +$13 = 5, +$14 = $13, +$15 = 2, +$16 = $13 and +$18 = 1. The other bytes of the new record keep whatever the memory held. The end pointer moves on by 30; the count at $7C71 is not changed here, because $D458 added 2 when it made the marker.","t":"code","b":[229],"m":"push","o":"hl","x":[54976]},{"a":56898,"t":"code","b":[253,225],"m":"pop","o":"iy"},{"a":56900,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56901,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":56902,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":56903,"t":"code","b":[167],"m":"and","o":"a"},{"a":56904,"t":"code","b":[250,230,222],"m":"jp","oa":57062,"o":"m,remove_object_record"},{"a":56907,"t":"code","b":[61],"m":"dec","o":"a"},{"a":56908,"t":"code","b":[250,148,214],"m":"jp","oa":54932,"o":"m,walk_next_object"},{"a":56911,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56912,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":56913,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":56914,"t":"code","b":[62,33],"m":"ld","o":"a,$21"},{"a":56916,"t":"code","b":[50,85,128],"m":"ld","oa":32853,"o":"(copy_click_period),a"},{"a":56919,"t":"code","b":[194,148,214],"m":"jp","oa":54932,"o":"nz,walk_next_object"},{"a":56922,"t":"code","b":[42,114,124],"m":"ld","oa":31858,"o":"hl,(object_list_end)"},{"a":56925,"t":"code","b":[54,243],"m":"ld","o":"(hl),$F3"},{"a":56927,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56928,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56929,"t":"code","b":[253,126,2],"m":"ld","o":"a,(iy+$02)"},{"a":56932,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":56933,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56934,"t":"code","b":[253,126,3],"m":"ld","o":"a,(iy+$03)"},{"a":56937,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":56938,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56939,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56940,"t":"code","b":[253,126,5],"m":"ld","o":"a,(iy+$05)"},{"a":56943,"t":"code","b":[198,4],"m":"add","o":"a,$04"},{"a":56945,"t":"code","b":[48,2],"m":"jr","oa":56949,"o":"nc,$DE75"},{"a":56947,"t":"code","b":[62,254],"m":"ld","o":"a,$FE"},{"a":56949,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[56945]},{"a":56950,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56951,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56952,"t":"code","b":[253,126,7],"m":"ld","o":"a,(iy+$07)"},{"a":56955,"t":"code","b":[198,4],"m":"add","o":"a,$04"},{"a":56957,"t":"code","b":[48,2],"m":"jr","oa":56961,"o":"nc,$DE81"},{"a":56959,"t":"code","b":[62,254],"m":"ld","o":"a,$FE"},{"a":56961,"t":"code","b":[119],"m":"ld","o":"(hl),a","x":[56957]},{"a":56962,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56963,"t":"code","b":[54,7],"m":"ld","o":"(hl),$07"},{"a":56965,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56966,"t":"code","b":[54,7],"m":"ld","o":"(hl),$07"},{"a":56968,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56969,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56970,"t":"code","b":[54,1],"m":"ld","o":"(hl),$01"},{"a":56972,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56973,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56974,"t":"code","b":[54,6],"m":"ld","o":"(hl),$06"},{"a":56976,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56977,"t":"code","b":[58,89,128],"m":"ld","oa":32857,"o":"a,(frame_counter)"},{"a":56980,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":56981,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56982,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56983,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56984,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56985,"t":"code","b":[54,3],"m":"ld","o":"(hl),$03"},{"a":56987,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56988,"t":"code","b":[54,5],"m":"ld","o":"(hl),$05"},{"a":56990,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56991,"t":"code","b":[54,19],"m":"ld","o":"(hl),$13"},{"a":56993,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56994,"t":"code","b":[54,2],"m":"ld","o":"(hl),$02"},{"a":56996,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":56997,"t":"code","b":[54,19],"m":"ld","o":"(hl),$13"},{"a":56999,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57000,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57001,"t":"code","b":[54,1],"m":"ld","o":"(hl),$01"},{"a":57003,"t":"code","b":[17,6,0],"m":"ld","o":"de,$0006"},{"a":57006,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":57007,"t":"code","b":[34,114,124],"m":"ld","oa":31858,"o":"(object_list_end),hl"},{"a":57010,"t":"code","b":[253,229],"m":"push","o":"iy"},{"a":57012,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":57013,"t":"code","b":[195,148,214],"m":"jp","oa":54932,"o":"walk_next_object"},{"a":57016,"l":"count_ed_arrival","c":"Reached from $DBDA when a type-$F1 record whose +$0F is $FF meets a board record of type $ED. It adds one to the three decimal digits at $BD6C (units), $BD6D (tens) and $BD6E (hundreds), carrying at 10 and wrapping from 999 to 000, calls $BD12 with A = the hundreds, B = the tens and C = the units, and falls into $DEE6, which removes the record. The same three bytes are zeroed and passed to $BD12 when a game starts, at $75D8-$75E5.","t":"code","b":[58,108,189],"m":"ld","oa":48492,"o":"a,(counter_units)","x":[56282]},{"a":57019,"t":"code","b":[60],"m":"inc","o":"a"},{"a":57020,"t":"code","b":[254,10],"m":"cp","o":"$0A"},{"a":57022,"t":"code","b":[56,25],"m":"jr","oa":57049,"o":"c,$DED9"},{"a":57024,"t":"code","b":[58,109,189],"m":"ld","oa":48493,"o":"a,(counter_tens)"},{"a":57027,"t":"code","b":[60],"m":"inc","o":"a"},{"a":57028,"t":"code","b":[254,10],"m":"cp","o":"$0A"},{"a":57030,"t":"code","b":[56,13],"m":"jr","oa":57045,"o":"c,$DED5"},{"a":57032,"t":"code","b":[58,110,189],"m":"ld","oa":48494,"o":"a,(counter_hundreds)"},{"a":57035,"t":"code","b":[60],"m":"inc","o":"a"},{"a":57036,"t":"code","b":[254,10],"m":"cp","o":"$0A"},{"a":57038,"t":"code","b":[56,1],"m":"jr","oa":57041,"o":"c,$DED1"},{"a":57040,"t":"code","b":[175],"m":"xor","o":"a"},{"a":57041,"t":"code","b":[50,110,189],"m":"ld","oa":48494,"o":"(counter_hundreds),a","x":[57038]},{"a":57044,"t":"code","b":[175],"m":"xor","o":"a"},{"a":57045,"t":"code","b":[50,109,189],"m":"ld","oa":48493,"o":"(counter_tens),a","x":[57030]},{"a":57048,"t":"code","b":[175],"m":"xor","o":"a"},{"a":57049,"t":"code","b":[50,108,189],"m":"ld","oa":48492,"o":"(counter_units),a","x":[57022]},{"a":57052,"t":"code","b":[237,75,108,189],"m":"ld","oa":48492,"o":"bc,(counter_units)"},{"a":57056,"t":"code","b":[58,110,189],"m":"ld","oa":48494,"o":"a,(counter_hundreds)"},{"a":57059,"t":"code","b":[205,18,189],"m":"call","oa":48402,"o":"build_counter_display"},{"a":57062,"l":"remove_object_record","c":"Removes the record in IY from the object list: it decrements the count at $7C71, moves the end pointer at $7C72 back by 30, copies the 30 bytes of what was the last record over the one being removed, and jumps to $D694 with HL = IY, so the walk carries on with the record below. The order of the list is not kept. When IY is itself the last record the copy is onto itself. 19 references, all jumps from the object handlers between $D6C6 and $DE48.","t":"code","b":[58,113,124],"m":"ld","oa":31857,"o":"a,(object_count_plus_one)","x":[54982,55169,55845,55951,55958,55968,55974,55980,55986,55992,55998,56073,56307,56335,56343,56350,56433,56837,56904]},{"a":57065,"t":"code","b":[61],"m":"dec","o":"a"},{"a":57066,"t":"code","b":[50,113,124],"m":"ld","oa":31857,"o":"(object_count_plus_one),a"},{"a":57069,"t":"code","b":[42,114,124],"m":"ld","oa":31858,"o":"hl,(object_list_end)"},{"a":57072,"t":"code","b":[1,30,0],"m":"ld","o":"bc,$001E"},{"a":57075,"t":"code","b":[167],"m":"and","o":"a"},{"a":57076,"t":"code","b":[237,66],"m":"sbc","o":"hl,bc"},{"a":57078,"t":"code","b":[34,114,124],"m":"ld","oa":31858,"o":"(object_list_end),hl"},{"a":57081,"t":"code","b":[253,229],"m":"push","o":"iy"},{"a":57083,"t":"code","b":[209],"m":"pop","o":"de"},{"a":57084,"t":"code","b":[237,176],"m":"ldir"},{"a":57086,"t":"code","b":[253,229],"m":"push","o":"iy"},{"a":57088,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":57089,"t":"code","b":[195,148,214],"m":"jp","oa":54932,"o":"walk_next_object"},{"a":57092,"l":"velocity_from_heading","c":"Turns the heading in +$0E (256 to a full turn) and the speed in +$12 of the record in IY into a velocity. The y part is speed * sin(heading) and the x part speed * sin(heading + $40), each a table sine from $A8C4 multiplied at $A8D8 and negated when the angle is in the second half of the turn, giving a signed number with a fraction byte. x goes to $8033 (fraction), $8034 (whole) and $8037 (sign extension), y to $8035, $8036 and $8038. It then falls into $DF44. A speed of 4 gives x = 3.98, y = 0 at heading 0 and x = 0, y = 3.98 at heading $40, the table's largest sine being 255/256. Called from $D6F4, $DA1B and $DB13.","t":"code","b":[253,126,14],"m":"ld","o":"a,(iy+$0E)","x":[55028,55835,56083]},{"a":57095,"t":"code","b":[205,196,168],"m":"call","oa":43204,"o":"sine_lookup"},{"a":57098,"t":"code","b":[253,94,18],"m":"ld","o":"e,(iy+$12)"},{"a":57101,"t":"code","b":[205,216,168],"m":"call","oa":43224,"o":"multiply_e_by_a"},{"a":57104,"t":"code","b":[1,0,0],"m":"ld","o":"bc,$0000"},{"a":57107,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":57108,"t":"code","b":[48,11],"m":"jr","oa":57121,"o":"nc,$DF21"},{"a":57110,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":57111,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":57112,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":57115,"t":"code","b":[175],"m":"xor","o":"a"},{"a":57116,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":57118,"t":"code","b":[159],"m":"sbc","o":"a,a"},{"a":57119,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":57120,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":57121,"t":"code","b":[34,53,128],"m":"ld","oa":32821,"o":"(probe_z),hl","x":[57108]},{"a":57124,"t":"code","b":[237,67,55,128],"m":"ld","oa":32823,"o":"(probe_hit),bc"},{"a":57128,"t":"code","b":[198,64],"m":"add","o":"a,$40"},{"a":57130,"t":"code","b":[205,196,168],"m":"call","oa":43204,"o":"sine_lookup"},{"a":57133,"t":"code","b":[253,94,18],"m":"ld","o":"e,(iy+$12)"},{"a":57136,"t":"code","b":[205,216,168],"m":"call","oa":43224,"o":"multiply_e_by_a"},{"a":57139,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":57140,"t":"code","b":[48,11],"m":"jr","oa":57153,"o":"nc,$DF41"},{"a":57142,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":57143,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":57146,"t":"code","b":[175],"m":"xor","o":"a"},{"a":57147,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":57149,"t":"code","b":[159],"m":"sbc","o":"a,a"},{"a":57150,"t":"code","b":[50,55,128],"m":"ld","oa":32823,"o":"(probe_hit),a"},{"a":57153,"t":"code","b":[34,51,128],"m":"ld","oa":32819,"o":"(probe_x),hl","x":[57140]},{"a":57156,"l":"set_move_box","c":"Works out where the record in IY would be after one step, without changing the record. The new x is +$05 with its fraction +$04 plus the velocity in $8033, $8034 and $8037, kept as a 16-bit number in $801B with the fraction in $8029, and $801F is that plus the width +$08. The new y comes the same way from +$07, +$06 and $8035, $8036 and $8038 into $801D and $802A, with $8025 = y plus the depth +$09. A high byte other than 0 means the box has crossed the edge of its 256-unit square. It also copies the base and top heights +$0B and +$0D to $8023 and $8024, and the square reference +$02/+$03 to $8021. Entered by falling in from $DF04, and called from $D8C8, $D9D2 and $DD38 with the velocity already in place.","t":"code","b":[253,110,5],"m":"ld","o":"l,(iy+$05)","x":[55496,55762,56632]},{"a":57159,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":57161,"t":"code","b":[58,52,128],"m":"ld","oa":32820,"o":"a,(probe_y)"},{"a":57164,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":57165,"t":"code","b":[58,55,128],"m":"ld","oa":32823,"o":"a,(probe_hit)"},{"a":57168,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":57169,"t":"code","b":[58,51,128],"m":"ld","oa":32819,"o":"a,(probe_x)"},{"a":57172,"t":"code","b":[253,134,4],"m":"add","o":"a,(iy+$04)"},{"a":57175,"t":"code","b":[237,90],"m":"adc","o":"hl,de"},{"a":57177,"t":"code","b":[34,27,128],"m":"ld","oa":32795,"o":"(shape_x0),hl"},{"a":57180,"t":"code","b":[50,41,128],"m":"ld","oa":32809,"o":"(shape_y3),a"},{"a":57183,"t":"code","b":[253,94,8],"m":"ld","o":"e,(iy+$08)"},{"a":57186,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":57188,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":57189,"t":"code","b":[34,31,128],"m":"ld","oa":32799,"o":"(shape_x1),hl"},{"a":57192,"t":"code","b":[253,110,7],"m":"ld","o":"l,(iy+$07)"},{"a":57195,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":57197,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)"},{"a":57200,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":57201,"t":"code","b":[58,56,128],"m":"ld","oa":32824,"o":"a,(probe_hit_high)"},{"a":57204,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":57205,"t":"code","b":[58,53,128],"m":"ld","oa":32821,"o":"a,(probe_z)"},{"a":57208,"t":"code","b":[253,134,6],"m":"add","o":"a,(iy+$06)"},{"a":57211,"t":"code","b":[237,90],"m":"adc","o":"hl,de"},{"a":57213,"t":"code","b":[34,29,128],"m":"ld","oa":32797,"o":"(shape_y0),hl"},{"a":57216,"t":"code","b":[50,42,128],"m":"ld","oa":32810,"o":"(shape_y3_high),a"},{"a":57219,"t":"code","b":[253,94,9],"m":"ld","o":"e,(iy+$09)"},{"a":57222,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":57224,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":57225,"t":"code","b":[34,37,128],"m":"ld","oa":32805,"o":"(shape_y2),hl"},{"a":57228,"t":"code","b":[253,110,11],"m":"ld","o":"l,(iy+$0B)"},{"a":57231,"t":"code","b":[253,102,13],"m":"ld","o":"h,(iy+$0D)"},{"a":57234,"t":"code","b":[34,35,128],"m":"ld","oa":32803,"o":"(shape_x2),hl"},{"a":57237,"t":"code","b":[253,110,2],"m":"ld","o":"l,(iy+$02)"},{"a":57240,"t":"code","b":[253,102,3],"m":"ld","o":"h,(iy+$03)"},{"a":57243,"t":"code","b":[34,33,128],"m":"ld","oa":32801,"o":"(shape_y1),hl"},{"a":57246,"t":"code","b":[201],"m":"ret"},{"a":57247,"l":"square_from_reference","c":"Resolves a square reference in HL into the address of a board square. When H is less than 5, L and H are a column and a row of the 5-by-5 window of square addresses at $6432 (25 words; the middle one, $644A, is the square the view is centred in) and HL returns the word at $6432 + 2 * (5 * H + L), which is 0 where the board has no square. When H is 5 or more HL is taken to be an address already and is returned unchanged. L is not range-checked. Called from $D4D6, $DFE2 and $E149.","t":"code","b":[124],"m":"ld","o":"a,h","x":[54486,57314,57673]},{"a":57248,"t":"code","b":[254,5],"m":"cp","o":"$05"},{"a":57250,"t":"code","b":[48,19],"m":"jr","oa":57271,"o":"nc,$DFB7"},{"a":57252,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":57254,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":57256,"t":"code","b":[132],"m":"add","o":"a,h"},{"a":57257,"t":"code","b":[133],"m":"add","o":"a,l"},{"a":57258,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":57260,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":57262,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":57263,"t":"code","b":[33,50,100],"m":"ld","o":"hl,$6432"},{"a":57266,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":57267,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":57268,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57269,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":57270,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":57271,"t":"code","b":[201],"m":"ret","x":[57250]},{"a":57272,"l":"probe_move","c":"Tests the box that $DF44 set up against the board and, for most record types, against the other objects. This first half clears the four square pointers $80A9-$80AF and the results $8035-$803C, stores the box's height ($8024 = top minus base), puts the base height in $8036 as the running floor, and resolves the object's square through $DF9F into $8027. From the high bytes of the box's right and far edges ($8020 and $8026) it picks the 2-by-2 block of squares the box can touch and fills $80A9 (lower x, lower y), $80AB (higher x, lower y), $80AD (lower x, higher y) and $80AF (higher x, higher y) from the object's square and the four link words that begin every square: +0 is the neighbour towards higher x, +2 lower y, +4 lower x and +6 higher y. BC, each half 0 or 1, is where $80AF lies relative to the object's square. It continues at $E0D2. Seven callers: $D6F7, $D8CB, $D9D5, $DA1E, $DB16, $DBE1 and $DD3B.","t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000","x":[55031,55499,55765,55838,56086,56289,56635]},{"a":57275,"t":"code","b":[34,169,128],"m":"ld","oa":32937,"o":"(probe_cell_diagonal),hl"},{"a":57278,"t":"code","b":[34,171,128],"m":"ld","oa":32939,"o":"(probe_cell_low_y),hl"},{"a":57281,"t":"code","b":[34,173,128],"m":"ld","oa":32941,"o":"(probe_cell_low_x),hl"},{"a":57284,"t":"code","b":[34,175,128],"m":"ld","oa":32943,"o":"(probe_cell_far),hl"},{"a":57287,"t":"code","b":[34,53,128],"m":"ld","oa":32821,"o":"(probe_z),hl"},{"a":57290,"t":"code","b":[34,55,128],"m":"ld","oa":32823,"o":"(probe_hit),hl"},{"a":57293,"t":"code","b":[34,57,128],"m":"ld","oa":32825,"o":"(probe_slope),hl"},{"a":57296,"t":"code","b":[34,59,128],"m":"ld","oa":32827,"o":"(probe_floor),hl"},{"a":57299,"t":"code","b":[42,35,128],"m":"ld","oa":32803,"o":"hl,(shape_x2)"},{"a":57302,"t":"code","b":[124],"m":"ld","o":"a,h"},{"a":57303,"t":"code","b":[149],"m":"sub","o":"l"},{"a":57304,"t":"code","b":[50,36,128],"m":"ld","oa":32804,"o":"(shape_x2_high),a"},{"a":57307,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":57308,"t":"code","b":[50,54,128],"m":"ld","oa":32822,"o":"(probe_surface),a"},{"a":57311,"t":"code","b":[42,33,128],"m":"ld","oa":32801,"o":"hl,(shape_y1)"},{"a":57314,"t":"code","b":[205,159,223],"m":"call","oa":57247,"o":"square_from_reference"},{"a":57317,"t":"code","b":[34,39,128],"m":"ld","oa":32807,"o":"(shape_x3),hl"},{"a":57320,"t":"code","b":[58,32,128],"m":"ld","oa":32800,"o":"a,(shape_x1_high)"},{"a":57323,"t":"code","b":[167],"m":"and","o":"a"},{"a":57324,"t":"code","b":[40,50],"m":"jr","oa":57376,"o":"z,$E020"},{"a":57326,"t":"code","b":[58,38,128],"m":"ld","oa":32806,"o":"a,(shape_y2_high)"},{"a":57329,"t":"code","b":[167],"m":"and","o":"a"},{"a":57330,"t":"code","b":[40,22],"m":"jr","oa":57354,"o":"z,$E00A"},{"a":57332,"t":"code","b":[34,169,128],"m":"ld","oa":32937,"o":"(probe_cell_diagonal),hl"},{"a":57335,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":57336,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57337,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":57338,"t":"code","b":[237,83,171,128],"m":"ld","oa":32939,"o":"(probe_cell_low_y),de"},{"a":57342,"t":"code","b":[205,140,224],"m":"call","oa":57484,"o":"fill_square_low_x_high_y"},{"a":57345,"t":"code","b":[205,177,224],"m":"call","oa":57521,"o":"fill_square_high_x_high_y"},{"a":57348,"t":"code","b":[1,1,1],"m":"ld","o":"bc,$0101"},{"a":57351,"t":"code","b":[195,210,224],"m":"jp","oa":57554,"o":"probe_records_and_objects"},{"a":57354,"t":"code","b":[34,173,128],"m":"ld","oa":32941,"o":"(probe_cell_low_x),hl","x":[57330]},{"a":57357,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":57358,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57359,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":57360,"t":"code","b":[237,83,175,128],"m":"ld","oa":32943,"o":"(probe_cell_far),de"},{"a":57364,"t":"code","b":[205,74,224],"m":"call","oa":57418,"o":"fill_square_low_x_low_y"},{"a":57367,"t":"code","b":[205,109,224],"m":"call","oa":57453,"o":"fill_square_high_x_low_y"},{"a":57370,"t":"code","b":[1,1,0],"m":"ld","o":"bc,$0001"},{"a":57373,"t":"code","b":[195,210,224],"m":"jp","oa":57554,"o":"probe_records_and_objects"},{"a":57376,"t":"code","b":[58,38,128],"m":"ld","oa":32806,"o":"a,(shape_y2_high)","x":[57324]},{"a":57379,"t":"code","b":[167],"m":"and","o":"a"},{"a":57380,"t":"code","b":[40,18],"m":"jr","oa":57400,"o":"z,$E038"},{"a":57382,"t":"code","b":[34,171,128],"m":"ld","oa":32939,"o":"(probe_cell_low_y),hl"},{"a":57385,"t":"code","b":[205,74,224],"m":"call","oa":57418,"o":"fill_square_low_x_low_y"},{"a":57388,"t":"code","b":[205,177,224],"m":"call","oa":57521,"o":"fill_square_high_x_high_y"},{"a":57391,"t":"code","b":[205,140,224],"m":"call","oa":57484,"o":"fill_square_low_x_high_y"},{"a":57394,"t":"code","b":[1,0,1],"m":"ld","o":"bc,$0100"},{"a":57397,"t":"code","b":[195,210,224],"m":"jp","oa":57554,"o":"probe_records_and_objects"},{"a":57400,"t":"code","b":[34,175,128],"m":"ld","oa":32943,"o":"(probe_cell_far),hl","x":[57380]},{"a":57403,"t":"code","b":[205,109,224],"m":"call","oa":57453,"o":"fill_square_high_x_low_y"},{"a":57406,"t":"code","b":[205,140,224],"m":"call","oa":57484,"o":"fill_square_low_x_high_y"},{"a":57409,"t":"code","b":[205,74,224],"m":"call","oa":57418,"o":"fill_square_low_x_low_y"},{"a":57412,"t":"code","b":[1,0,0],"m":"ld","o":"bc,$0000"},{"a":57415,"t":"code","b":[195,210,224],"m":"jp","oa":57554,"o":"probe_records_and_objects"},{"a":57418,"l":"fill_square_low_x_low_y","c":"Fills $80A9, the square at lower x and lower y of the probe's 2-by-2 block: the lower-x link (+4) of the square in $80AB if that pointer is not zero, otherwise the lower-y link (+2) of the square in $80AD; if both are zero $80A9 is left as it is. Called from $E014, $E029 and $E041.","t":"code","b":[42,171,128],"m":"ld","oa":32939,"o":"hl,(probe_cell_low_y)","x":[57364,57385,57409]},{"a":57421,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":57422,"t":"code","b":[180],"m":"or","o":"h"},{"a":57423,"t":"code","b":[40,12],"m":"jr","oa":57437,"o":"z,$E05D"},{"a":57425,"t":"code","b":[17,4,0],"m":"ld","o":"de,$0004"},{"a":57428,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":57429,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":57430,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57431,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":57432,"t":"code","b":[237,83,169,128],"m":"ld","oa":32937,"o":"(probe_cell_diagonal),de"},{"a":57436,"t":"code","b":[201],"m":"ret"},{"a":57437,"t":"code","b":[42,173,128],"m":"ld","oa":32941,"o":"hl,(probe_cell_low_x)","x":[57423]},{"a":57440,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":57441,"t":"code","b":[180],"m":"or","o":"h"},{"a":57442,"t":"code","b":[200],"m":"ret","o":"z"},{"a":57443,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57444,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57445,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":57446,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57447,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":57448,"t":"code","b":[237,83,169,128],"m":"ld","oa":32937,"o":"(probe_cell_diagonal),de"},{"a":57452,"t":"code","b":[201],"m":"ret"},{"a":57453,"l":"fill_square_high_x_low_y","c":"Fills $80AB, the square at higher x and lower y of the probe's block: the higher-x link (+0) of the square in $80A9 if there is one, otherwise the lower-y link (+2) of the square in $80AF. Called from $E017 and $E03B.","t":"code","b":[42,169,128],"m":"ld","oa":32937,"o":"hl,(probe_cell_diagonal)","x":[57367,57403]},{"a":57456,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":57457,"t":"code","b":[180],"m":"or","o":"h"},{"a":57458,"t":"code","b":[40,8],"m":"jr","oa":57468,"o":"z,$E07C"},{"a":57460,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":57461,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57462,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":57463,"t":"code","b":[237,83,171,128],"m":"ld","oa":32939,"o":"(probe_cell_low_y),de"},{"a":57467,"t":"code","b":[201],"m":"ret"},{"a":57468,"t":"code","b":[42,175,128],"m":"ld","oa":32943,"o":"hl,(probe_cell_far)","x":[57458]},{"a":57471,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":57472,"t":"code","b":[180],"m":"or","o":"h"},{"a":57473,"t":"code","b":[200],"m":"ret","o":"z"},{"a":57474,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57475,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57476,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":57477,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57478,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":57479,"t":"code","b":[237,83,171,128],"m":"ld","oa":32939,"o":"(probe_cell_low_y),de"},{"a":57483,"t":"code","b":[201],"m":"ret"},{"a":57484,"l":"fill_square_low_x_high_y","c":"Fills $80AD, the square at lower x and higher y of the probe's block: the lower-x link (+4) of the square in $80AF if there is one, otherwise the higher-y link (+6) of the square in $80A9. Called from $DFFE, $E02F and $E03E.","t":"code","b":[42,175,128],"m":"ld","oa":32943,"o":"hl,(probe_cell_far)","x":[57342,57391,57406]},{"a":57487,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":57488,"t":"code","b":[180],"m":"or","o":"h"},{"a":57489,"t":"code","b":[40,12],"m":"jr","oa":57503,"o":"z,$E09F"},{"a":57491,"t":"code","b":[17,4,0],"m":"ld","o":"de,$0004"},{"a":57494,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":57495,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":57496,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57497,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":57498,"t":"code","b":[237,83,173,128],"m":"ld","oa":32941,"o":"(probe_cell_low_x),de"},{"a":57502,"t":"code","b":[201],"m":"ret"},{"a":57503,"t":"code","b":[42,169,128],"m":"ld","oa":32937,"o":"hl,(probe_cell_diagonal)","x":[57489]},{"a":57506,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":57507,"t":"code","b":[180],"m":"or","o":"h"},{"a":57508,"t":"code","b":[200],"m":"ret","o":"z"},{"a":57509,"t":"code","b":[17,6,0],"m":"ld","o":"de,$0006"},{"a":57512,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":57513,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":57514,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57515,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":57516,"t":"code","b":[237,83,173,128],"m":"ld","oa":32941,"o":"(probe_cell_low_x),de"},{"a":57520,"t":"code","b":[201],"m":"ret"},{"a":57521,"l":"fill_square_high_x_high_y","c":"Fills $80AF, the square at higher x and higher y of the probe's block: the higher-x link (+0) of the square in $80AD if there is one, otherwise the higher-y link (+6) of the square in $80AB. Called from $E001 and $E02C.","t":"code","b":[42,173,128],"m":"ld","oa":32941,"o":"hl,(probe_cell_low_x)","x":[57345,57388]},{"a":57524,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":57525,"t":"code","b":[180],"m":"or","o":"h"},{"a":57526,"t":"code","b":[40,8],"m":"jr","oa":57536,"o":"z,$E0C0"},{"a":57528,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":57529,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57530,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":57531,"t":"code","b":[237,83,175,128],"m":"ld","oa":32943,"o":"(probe_cell_far),de"},{"a":57535,"t":"code","b":[201],"m":"ret"},{"a":57536,"t":"code","b":[42,171,128],"m":"ld","oa":32939,"o":"hl,(probe_cell_low_y)","x":[57526]},{"a":57539,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":57540,"t":"code","b":[180],"m":"or","o":"h"},{"a":57541,"t":"code","b":[200],"m":"ret","o":"z"},{"a":57542,"t":"code","b":[17,6,0],"m":"ld","o":"de,$0006"},{"a":57545,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":57546,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":57547,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57548,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":57549,"t":"code","b":[237,83,175,128],"m":"ld","oa":32943,"o":"(probe_cell_far),de"},{"a":57553,"t":"code","b":[201],"m":"ret"},{"a":57554,"l":"probe_records_and_objects","c":"Second half of the probe at $DFB8, reached by a jump from each of its four cases with BC = the position of the square in $80AF, which it keeps in $80B1/$80B2. If the box's base is at height 0 it starts with $803B = $FF: a hit on the floor, with type 0. It calls $E1CF for each of the four squares, passing that square's position in BC. Unless the record in IY is type $F1 or $F0 it then goes through every object record from the end of the list down to $7C74, leaves out IY itself, resolves each one's square through $DF9F and, where that is one of the four squares, tests it with $E3D9. Last, at $E199, it sets $8027 to the square holding the box's new origin: the object's own when the high bytes of $801B and $801D are both 0, otherwise whichever of the four pointers those high bytes select, which is 0 where the board has no square. Results: $803B = $FF for a hit, with $8036 = the top of the thing hit, $8035 = its type, $8037 = its address and $8039 = its slope word; otherwise $803B = the top of the highest thing beneath the box, 0 if there is none, with $8035 and $8037 naming it.","t":"code","b":[237,67,177,128],"m":"ld","oa":32945,"o":"(probe_far_cell_offset),bc","x":[57351,57373,57397,57415]},{"a":57558,"t":"code","b":[58,35,128],"m":"ld","oa":32803,"o":"a,(shape_x2)"},{"a":57561,"t":"code","b":[167],"m":"and","o":"a"},{"a":57562,"t":"code","b":[32,4],"m":"jr","oa":57568,"o":"nz,$E0E0"},{"a":57564,"t":"code","b":[61],"m":"dec","o":"a"},{"a":57565,"t":"code","b":[50,59,128],"m":"ld","oa":32827,"o":"(probe_floor),a"},{"a":57568,"t":"code","b":[42,175,128],"m":"ld","oa":32943,"o":"hl,(probe_cell_far)","x":[57562]},{"a":57571,"t":"code","b":[237,75,177,128],"m":"ld","oa":32945,"o":"bc,(probe_far_cell_offset)"},{"a":57575,"t":"code","b":[205,207,225],"m":"call","oa":57807,"o":"test_square_records"},{"a":57578,"t":"code","b":[42,173,128],"m":"ld","oa":32941,"o":"hl,(probe_cell_low_x)"},{"a":57581,"t":"code","b":[237,75,177,128],"m":"ld","oa":32945,"o":"bc,(probe_far_cell_offset)"},{"a":57585,"t":"code","b":[13],"m":"dec","o":"c"},{"a":57586,"t":"code","b":[205,207,225],"m":"call","oa":57807,"o":"test_square_records"},{"a":57589,"t":"code","b":[42,171,128],"m":"ld","oa":32939,"o":"hl,(probe_cell_low_y)"},{"a":57592,"t":"code","b":[237,75,177,128],"m":"ld","oa":32945,"o":"bc,(probe_far_cell_offset)"},{"a":57596,"t":"code","b":[5],"m":"dec","o":"b"},{"a":57597,"t":"code","b":[205,207,225],"m":"call","oa":57807,"o":"test_square_records"},{"a":57600,"t":"code","b":[42,169,128],"m":"ld","oa":32937,"o":"hl,(probe_cell_diagonal)"},{"a":57603,"t":"code","b":[237,75,177,128],"m":"ld","oa":32945,"o":"bc,(probe_far_cell_offset)"},{"a":57607,"t":"code","b":[13],"m":"dec","o":"c"},{"a":57608,"t":"code","b":[5],"m":"dec","o":"b"},{"a":57609,"t":"code","b":[205,207,225],"m":"call","oa":57807,"o":"test_square_records"},{"a":57612,"t":"code","b":[253,126,0],"m":"ld","o":"a,(iy+$00)"},{"a":57615,"t":"code","b":[254,241],"m":"cp","o":"$F1"},{"a":57617,"t":"code","b":[202,153,225],"m":"jp","oa":57753,"o":"z,$E199"},{"a":57620,"t":"code","b":[254,240],"m":"cp","o":"$F0"},{"a":57622,"t":"code","b":[202,153,225],"m":"jp","oa":57753,"o":"z,$E199"},{"a":57625,"t":"code","b":[221,42,114,124],"m":"ld","oa":31858,"o":"ix,(object_list_end)"},{"a":57629,"t":"code","b":[17,226,255],"m":"ld","o":"de,$FFE2","x":[57665,57694,57713,57732,57741,57750]},{"a":57632,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":57634,"t":"code","b":[17,140,131],"m":"ld","o":"de,$838C"},{"a":57637,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":57639,"t":"code","b":[210,153,225],"m":"jp","oa":57753,"o":"nc,$E199"},{"a":57642,"t":"code","b":[17,116,124],"m":"ld","o":"de,$7C74"},{"a":57645,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":57647,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)"},{"a":57650,"t":"code","b":[253,190,0],"m":"cp","o":"(iy+$00)"},{"a":57653,"t":"code","b":[194,67,225],"m":"jp","oa":57667,"o":"nz,$E143"},{"a":57656,"t":"code","b":[221,229],"m":"push","o":"ix"},{"a":57658,"t":"code","b":[253,229],"m":"push","o":"iy"},{"a":57660,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":57661,"t":"code","b":[209],"m":"pop","o":"de"},{"a":57662,"t":"code","b":[167],"m":"and","o":"a"},{"a":57663,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":57665,"t":"code","b":[40,218],"m":"jr","oa":57629,"o":"z,$E11D"},{"a":57667,"t":"code","b":[221,110,2],"m":"ld","o":"l,(ix+$02)","x":[57653]},{"a":57670,"t":"code","b":[221,102,3],"m":"ld","o":"h,(ix+$03)"},{"a":57673,"t":"code","b":[205,159,223],"m":"call","oa":57247,"o":"square_from_reference"},{"a":57676,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":57677,"t":"code","b":[42,169,128],"m":"ld","oa":32937,"o":"hl,(probe_cell_diagonal)"},{"a":57680,"t":"code","b":[167],"m":"and","o":"a"},{"a":57681,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":57683,"t":"code","b":[32,12],"m":"jr","oa":57697,"o":"nz,$E161"},{"a":57685,"t":"code","b":[237,75,177,128],"m":"ld","oa":32945,"o":"bc,(probe_far_cell_offset)"},{"a":57689,"t":"code","b":[13],"m":"dec","o":"c"},{"a":57690,"t":"code","b":[5],"m":"dec","o":"b"},{"a":57691,"t":"code","b":[205,217,227],"m":"call","oa":58329,"o":"test_against_object"},{"a":57694,"t":"code","b":[195,29,225],"m":"jp","oa":57629,"o":"$E11D"},{"a":57697,"t":"code","b":[42,171,128],"m":"ld","oa":32939,"o":"hl,(probe_cell_low_y)","x":[57683]},{"a":57700,"t":"code","b":[167],"m":"and","o":"a"},{"a":57701,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":57703,"t":"code","b":[32,11],"m":"jr","oa":57716,"o":"nz,$E174"},{"a":57705,"t":"code","b":[237,75,177,128],"m":"ld","oa":32945,"o":"bc,(probe_far_cell_offset)"},{"a":57709,"t":"code","b":[5],"m":"dec","o":"b"},{"a":57710,"t":"code","b":[205,217,227],"m":"call","oa":58329,"o":"test_against_object"},{"a":57713,"t":"code","b":[195,29,225],"m":"jp","oa":57629,"o":"$E11D"},{"a":57716,"t":"code","b":[42,173,128],"m":"ld","oa":32941,"o":"hl,(probe_cell_low_x)","x":[57703]},{"a":57719,"t":"code","b":[167],"m":"and","o":"a"},{"a":57720,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":57722,"t":"code","b":[32,11],"m":"jr","oa":57735,"o":"nz,$E187"},{"a":57724,"t":"code","b":[237,75,177,128],"m":"ld","oa":32945,"o":"bc,(probe_far_cell_offset)"},{"a":57728,"t":"code","b":[13],"m":"dec","o":"c"},{"a":57729,"t":"code","b":[205,217,227],"m":"call","oa":58329,"o":"test_against_object"},{"a":57732,"t":"code","b":[195,29,225],"m":"jp","oa":57629,"o":"$E11D"},{"a":57735,"t":"code","b":[42,175,128],"m":"ld","oa":32943,"o":"hl,(probe_cell_far)","x":[57722]},{"a":57738,"t":"code","b":[167],"m":"and","o":"a"},{"a":57739,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":57741,"t":"code","b":[32,142],"m":"jr","oa":57629,"o":"nz,$E11D"},{"a":57743,"t":"code","b":[237,75,177,128],"m":"ld","oa":32945,"o":"bc,(probe_far_cell_offset)"},{"a":57747,"t":"code","b":[205,217,227],"m":"call","oa":58329,"o":"test_against_object"},{"a":57750,"t":"code","b":[195,29,225],"m":"jp","oa":57629,"o":"$E11D"},{"a":57753,"t":"code","b":[237,91,177,128],"m":"ld","oa":32945,"o":"de,(probe_far_cell_offset)","x":[57617,57622,57639]},{"a":57757,"t":"code","b":[58,28,128],"m":"ld","oa":32796,"o":"a,(shape_x0_high)"},{"a":57760,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":57761,"t":"code","b":[147],"m":"sub","o":"e"},{"a":57762,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":57763,"t":"code","b":[58,30,128],"m":"ld","oa":32798,"o":"a,(shape_y0_high)"},{"a":57766,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":57767,"t":"code","b":[177],"m":"or","o":"c"},{"a":57768,"t":"code","b":[200],"m":"ret","o":"z"},{"a":57769,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":57770,"t":"code","b":[146],"m":"sub","o":"d"},{"a":57771,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":57772,"t":"code","b":[33,175,128],"m":"ld","o":"hl,$80AF"},{"a":57775,"t":"code","b":[237,75,175,128],"m":"ld","oa":32943,"o":"bc,(probe_cell_far)"},{"a":57779,"t":"code","b":[237,67,39,128],"m":"ld","oa":32807,"o":"(shape_x3),bc"},{"a":57783,"t":"code","b":[29],"m":"dec","o":"e"},{"a":57784,"t":"code","b":[200],"m":"ret","o":"z"},{"a":57785,"t":"code","b":[28],"m":"inc","o":"e"},{"a":57786,"t":"code","b":[40,2],"m":"jr","oa":57790,"o":"z,$E1BE"},{"a":57788,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":57789,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":57790,"t":"code","b":[21],"m":"dec","o":"d","x":[57786]},{"a":57791,"t":"code","b":[200],"m":"ret","o":"z"},{"a":57792,"t":"code","b":[20],"m":"inc","o":"d"},{"a":57793,"t":"code","b":[40,4],"m":"jr","oa":57799,"o":"z,$E1C7"},{"a":57795,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":57796,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":57797,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":57798,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":57799,"t":"code","b":[94],"m":"ld","o":"e,(hl)","x":[57793]},{"a":57800,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":57801,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":57802,"t":"code","b":[237,83,39,128],"m":"ld","oa":32807,"o":"(shape_x3),de"},{"a":57806,"t":"code","b":[201],"m":"ret"},{"a":57807,"l":"test_square_records","c":"Tests the probe's box against every record of one board square. HL = the square (it returns at once for 0) and BC = the square's position relative to the object's own, stored in $8049 (x) and $804A (y). Records are 7 bytes long from the square's +8 up to a zero first byte: top height, bottom height, x, width, y, depth, type. A record whose rectangle does not overlap the box, or whose type is $F7, is passed over. The top two bits of the type give the shape. $C0 is a level block. $80 is a ramp along x and $40 a ramp along y: bytes 0 and 1 are the heights at its two ends, $908B interpolates the surface height at the box, and $9CCC turns rise and run into a slope word for $803F (256 * the smaller over the larger, with flags in the high byte). $00 is a block cut along a diagonal, which counts only if $908B puts the box's edge on the solid side. Then, at $E378: a surface lower than the running floor in $8036 is remembered in $803B if it is the highest so far beneath the box; otherwise, unless the box's top (the floor plus $8024, held at $FF) is below the record's bottom, it is a hit: $803B = $FF and the floor in $8036 rises to the surface. In either case $8037 = the record, $8039 = the slope word and $8035 = its type. On the tape the board has 459 records in 129 squares: 418 of the $C0 kind (81 of them type $F7), 14 of $80, 20 of $40 and 7 of $00. No ramp among them has bit 5 of its type set, the case that the branches at $E2E0 and $E34E handle. Called four times, from $E0E7, $E0F2, $E0FD and $E109.","t":"code","b":[125],"m":"ld","o":"a,l","x":[57575,57586,57597,57609]},{"a":57808,"t":"code","b":[180],"m":"or","o":"h"},{"a":57809,"t":"code","b":[200],"m":"ret","o":"z"},{"a":57810,"t":"code","b":[237,67,73,128],"m":"ld","oa":32841,"o":"(cell_offset_x),bc"},{"a":57814,"t":"code","b":[17,8,0],"m":"ld","o":"de,$0008"},{"a":57817,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":57818,"t":"code","b":[229],"m":"push","o":"hl"},{"a":57819,"t":"code","b":[221,225],"m":"pop","o":"ix"},{"a":57821,"t":"code","b":[195,229,225],"m":"jp","oa":57829,"o":"$E1E5"},{"a":57824,"t":"code","b":[17,7,0],"m":"ld","o":"de,$0007","x":[57847,57862,57878,57893,57901,57989,58250,58275,58296,58326]},{"a":57827,"t":"code","b":[221,25],"m":"add","o":"ix,de"},{"a":57829,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)","x":[57821]},{"a":57832,"t":"code","b":[167],"m":"and","o":"a"},{"a":57833,"t":"code","b":[200],"m":"ret","o":"z"},{"a":57834,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":57837,"t":"code","b":[221,94,2],"m":"ld","o":"e,(ix+$02)"},{"a":57840,"t":"code","b":[58,73,128],"m":"ld","oa":32841,"o":"a,(cell_offset_x)"},{"a":57843,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":57844,"t":"code","b":[175],"m":"xor","o":"a"},{"a":57845,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":57847,"t":"code","b":[250,224,225],"m":"jp","oa":57824,"o":"m,$E1E0"},{"a":57850,"t":"code","b":[221,110,3],"m":"ld","o":"l,(ix+$03)"},{"a":57853,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":57854,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":57855,"t":"code","b":[237,91,27,128],"m":"ld","oa":32795,"o":"de,(shape_x0)"},{"a":57859,"t":"code","b":[167],"m":"and","o":"a"},{"a":57860,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":57862,"t":"code","b":[250,224,225],"m":"jp","oa":57824,"o":"m,$E1E0"},{"a":57865,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":57868,"t":"code","b":[221,94,4],"m":"ld","o":"e,(ix+$04)"},{"a":57871,"t":"code","b":[58,74,128],"m":"ld","oa":32842,"o":"a,(cell_offset_y)"},{"a":57874,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":57875,"t":"code","b":[175],"m":"xor","o":"a"},{"a":57876,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":57878,"t":"code","b":[250,224,225],"m":"jp","oa":57824,"o":"m,$E1E0"},{"a":57881,"t":"code","b":[221,110,5],"m":"ld","o":"l,(ix+$05)"},{"a":57884,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":57885,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":57886,"t":"code","b":[237,91,29,128],"m":"ld","oa":32797,"o":"de,(shape_y0)"},{"a":57890,"t":"code","b":[167],"m":"and","o":"a"},{"a":57891,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":57893,"t":"code","b":[250,224,225],"m":"jp","oa":57824,"o":"m,$E1E0"},{"a":57896,"t":"code","b":[221,126,6],"m":"ld","o":"a,(ix+$06)"},{"a":57899,"t":"code","b":[254,247],"m":"cp","o":"$F7"},{"a":57901,"t":"code","b":[202,224,225],"m":"jp","oa":57824,"o":"z,$E1E0"},{"a":57904,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":57907,"t":"code","b":[34,63,128],"m":"ld","oa":32831,"o":"(probe_ramp),hl"},{"a":57910,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":57911,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":57913,"t":"code","b":[169],"m":"xor","o":"c"},{"a":57914,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":57915,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":57916,"t":"code","b":[230,192],"m":"and","o":"$C0"},{"a":57918,"t":"code","b":[194,139,226],"m":"jp","oa":57995,"o":"nz,$E28B"},{"a":57921,"t":"code","b":[58,73,128],"m":"ld","oa":32841,"o":"a,(cell_offset_x)"},{"a":57924,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":57925,"t":"code","b":[221,94,2],"m":"ld","o":"e,(ix+$02)"},{"a":57928,"t":"code","b":[221,110,3],"m":"ld","o":"l,(ix+$03)"},{"a":57931,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":57933,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":57934,"t":"code","b":[203,96],"m":"bit","o":"4,b"},{"a":57936,"t":"code","b":[32,1],"m":"jr","oa":57939,"o":"nz,$E253"},{"a":57938,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":57939,"t":"code","b":[121],"m":"ld","o":"a,c","x":[57936]},{"a":57940,"t":"code","b":[217],"m":"exx"},{"a":57941,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":57942,"t":"code","b":[58,74,128],"m":"ld","oa":32842,"o":"a,(cell_offset_y)"},{"a":57945,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":57946,"t":"code","b":[221,78,4],"m":"ld","o":"c,(ix+$04)"},{"a":57949,"t":"code","b":[221,110,5],"m":"ld","o":"l,(ix+$05)"},{"a":57952,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":57954,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":57955,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":57956,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":57957,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":57960,"t":"code","b":[203,111],"m":"bit","o":"5,a"},{"a":57962,"t":"code","b":[32,3],"m":"jr","oa":57967,"o":"nz,$E26F"},{"a":57964,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":57967,"t":"code","b":[205,139,144],"m":"call","oa":37003,"o":"edge_x_at_row","x":[57962]},{"a":57970,"t":"code","b":[237,91,27,128],"m":"ld","oa":32795,"o":"de,(shape_x0)"},{"a":57974,"t":"code","b":[221,126,6],"m":"ld","o":"a,(ix+$06)"},{"a":57977,"t":"code","b":[203,103],"m":"bit","o":"4,a"},{"a":57979,"t":"code","b":[32,5],"m":"jr","oa":57986,"o":"nz,$E282"},{"a":57981,"t":"code","b":[237,91,31,128],"m":"ld","oa":32799,"o":"de,(shape_x1)"},{"a":57985,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":57986,"t":"code","b":[167],"m":"and","o":"a","x":[57979]},{"a":57987,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":57989,"t":"code","b":[250,224,225],"m":"jp","oa":57824,"o":"m,$E1E0"},{"a":57992,"t":"code","b":[195,144,226],"m":"jp","oa":58000,"o":"$E290"},{"a":57995,"t":"code","b":[254,192],"m":"cp","o":"$C0","x":[57918]},{"a":57997,"t":"code","b":[194,159,226],"m":"jp","oa":58015,"o":"nz,$E29F"},{"a":58000,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)","x":[57992]},{"a":58003,"t":"code","b":[50,61,128],"m":"ld","oa":32829,"o":"(probe_top),a"},{"a":58006,"t":"code","b":[221,126,1],"m":"ld","o":"a,(ix+$01)"},{"a":58009,"t":"code","b":[50,62,128],"m":"ld","oa":32830,"o":"(probe_bottom),a"},{"a":58012,"t":"code","b":[195,120,227],"m":"jp","oa":58232,"o":"$E378"},{"a":58015,"t":"code","b":[254,128],"m":"cp","o":"$80","x":[57997]},{"a":58017,"t":"code","b":[194,13,227],"m":"jp","oa":58125,"o":"nz,$E30D"},{"a":58020,"t":"code","b":[221,110,0],"m":"ld","o":"l,(ix+$00)"},{"a":58023,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":58025,"t":"code","b":[221,94,1],"m":"ld","o":"e,(ix+$01)"},{"a":58028,"t":"code","b":[84],"m":"ld","o":"d,h"},{"a":58029,"t":"code","b":[203,96],"m":"bit","o":"4,b"},{"a":58031,"t":"code","b":[32,9],"m":"jr","oa":58042,"o":"nz,$E2BA"},{"a":58033,"t":"code","b":[58,64,128],"m":"ld","oa":32832,"o":"a,(probe_ramp_flags)"},{"a":58036,"t":"code","b":[203,199],"m":"set","o":"0,a"},{"a":58038,"t":"code","b":[50,64,128],"m":"ld","oa":32832,"o":"(probe_ramp_flags),a"},{"a":58041,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":58042,"t":"code","b":[121],"m":"ld","o":"a,c","x":[58031]},{"a":58043,"t":"code","b":[217],"m":"exx"},{"a":58044,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":58045,"t":"code","b":[58,73,128],"m":"ld","oa":32841,"o":"a,(cell_offset_x)"},{"a":58048,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":58049,"t":"code","b":[221,78,2],"m":"ld","o":"c,(ix+$02)"},{"a":58052,"t":"code","b":[221,110,3],"m":"ld","o":"l,(ix+$03)"},{"a":58055,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":58057,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":58058,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":58059,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":58060,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":58063,"t":"code","b":[203,103],"m":"bit","o":"4,a"},{"a":58065,"t":"code","b":[32,3],"m":"jr","oa":58070,"o":"nz,$E2D6"},{"a":58067,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":58070,"t":"code","b":[205,139,144],"m":"call","oa":37003,"o":"edge_x_at_row","x":[58065]},{"a":58073,"t":"code","b":[221,102,6],"m":"ld","o":"h,(ix+$06)"},{"a":58076,"t":"code","b":[203,108],"m":"bit","o":"5,h"},{"a":58078,"t":"code","b":[40,13],"m":"jr","oa":58093,"o":"z,$E2ED"},{"a":58080,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":58081,"t":"code","b":[50,62,128],"m":"ld","oa":32830,"o":"(probe_bottom),a"},{"a":58084,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)"},{"a":58087,"t":"code","b":[50,61,128],"m":"ld","oa":32829,"o":"(probe_top),a"},{"a":58090,"t":"code","b":[195,120,227],"m":"jp","oa":58232,"o":"$E378"},{"a":58093,"t":"code","b":[221,126,1],"m":"ld","o":"a,(ix+$01)","x":[58078]},{"a":58096,"t":"code","b":[50,62,128],"m":"ld","oa":32830,"o":"(probe_bottom),a"},{"a":58099,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":58100,"t":"code","b":[50,61,128],"m":"ld","oa":32829,"o":"(probe_top),a"},{"a":58103,"t":"code","b":[221,78,3],"m":"ld","o":"c,(ix+$03)"},{"a":58106,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)"},{"a":58109,"t":"code","b":[221,150,1],"m":"sub","o":"(ix+$01)"},{"a":58112,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":58113,"t":"code","b":[58,64,128],"m":"ld","oa":32832,"o":"a,(probe_ramp_flags)"},{"a":58116,"t":"code","b":[205,204,156],"m":"call","oa":40140,"o":"ratio_smaller_over_larger"},{"a":58119,"t":"code","b":[34,63,128],"m":"ld","oa":32831,"o":"(probe_ramp),hl"},{"a":58122,"t":"code","b":[195,120,227],"m":"jp","oa":58232,"o":"$E378"},{"a":58125,"t":"code","b":[62,2],"m":"ld","o":"a,$02","x":[58017]},{"a":58127,"t":"code","b":[50,64,128],"m":"ld","oa":32832,"o":"(probe_ramp_flags),a"},{"a":58130,"t":"code","b":[221,110,0],"m":"ld","o":"l,(ix+$00)"},{"a":58133,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":58135,"t":"code","b":[221,94,1],"m":"ld","o":"e,(ix+$01)"},{"a":58138,"t":"code","b":[84],"m":"ld","o":"d,h"},{"a":58139,"t":"code","b":[203,96],"m":"bit","o":"4,b"},{"a":58141,"t":"code","b":[32,9],"m":"jr","oa":58152,"o":"nz,$E328"},{"a":58143,"t":"code","b":[58,64,128],"m":"ld","oa":32832,"o":"a,(probe_ramp_flags)"},{"a":58146,"t":"code","b":[203,199],"m":"set","o":"0,a"},{"a":58148,"t":"code","b":[50,64,128],"m":"ld","oa":32832,"o":"(probe_ramp_flags),a"},{"a":58151,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":58152,"t":"code","b":[121],"m":"ld","o":"a,c","x":[58141]},{"a":58153,"t":"code","b":[217],"m":"exx"},{"a":58154,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":58155,"t":"code","b":[58,74,128],"m":"ld","oa":32842,"o":"a,(cell_offset_y)"},{"a":58158,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":58159,"t":"code","b":[221,78,4],"m":"ld","o":"c,(ix+$04)"},{"a":58162,"t":"code","b":[221,110,5],"m":"ld","o":"l,(ix+$05)"},{"a":58165,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":58167,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":58168,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":58169,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":58170,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":58173,"t":"code","b":[203,103],"m":"bit","o":"4,a"},{"a":58175,"t":"code","b":[32,3],"m":"jr","oa":58180,"o":"nz,$E344"},{"a":58177,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":58180,"t":"code","b":[205,139,144],"m":"call","oa":37003,"o":"edge_x_at_row","x":[58175]},{"a":58183,"t":"code","b":[221,102,6],"m":"ld","o":"h,(ix+$06)"},{"a":58186,"t":"code","b":[203,108],"m":"bit","o":"5,h"},{"a":58188,"t":"code","b":[40,13],"m":"jr","oa":58203,"o":"z,$E35B"},{"a":58190,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":58191,"t":"code","b":[50,62,128],"m":"ld","oa":32830,"o":"(probe_bottom),a"},{"a":58194,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)"},{"a":58197,"t":"code","b":[50,61,128],"m":"ld","oa":32829,"o":"(probe_top),a"},{"a":58200,"t":"code","b":[195,120,227],"m":"jp","oa":58232,"o":"$E378"},{"a":58203,"t":"code","b":[221,126,1],"m":"ld","o":"a,(ix+$01)","x":[58188]},{"a":58206,"t":"code","b":[50,62,128],"m":"ld","oa":32830,"o":"(probe_bottom),a"},{"a":58209,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":58210,"t":"code","b":[50,61,128],"m":"ld","oa":32829,"o":"(probe_top),a"},{"a":58213,"t":"code","b":[221,78,5],"m":"ld","o":"c,(ix+$05)"},{"a":58216,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)"},{"a":58219,"t":"code","b":[221,150,1],"m":"sub","o":"(ix+$01)"},{"a":58222,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":58223,"t":"code","b":[58,64,128],"m":"ld","oa":32832,"o":"a,(probe_ramp_flags)"},{"a":58226,"t":"code","b":[205,204,156],"m":"call","oa":40140,"o":"ratio_smaller_over_larger"},{"a":58229,"t":"code","b":[34,63,128],"m":"ld","oa":32831,"o":"(probe_ramp),hl"},{"a":58232,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)","x":[58012,58090,58122,58200]},{"a":58235,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":58236,"t":"code","b":[58,61,128],"m":"ld","oa":32829,"o":"a,(probe_top)"},{"a":58239,"t":"code","b":[185],"m":"cp","o":"c"},{"a":58240,"t":"code","b":[48,36],"m":"jr","oa":58278,"o":"nc,$E3A6"},{"a":58242,"t":"code","b":[58,59,128],"m":"ld","oa":32827,"o":"a,(probe_floor)"},{"a":58245,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":58246,"t":"code","b":[58,61,128],"m":"ld","oa":32829,"o":"a,(probe_top)"},{"a":58249,"t":"code","b":[185],"m":"cp","o":"c"},{"a":58250,"t":"code","b":[218,224,225],"m":"jp","oa":57824,"o":"c,$E1E0"},{"a":58253,"t":"code","b":[58,61,128],"m":"ld","oa":32829,"o":"a,(probe_top)"},{"a":58256,"t":"code","b":[50,59,128],"m":"ld","oa":32827,"o":"(probe_floor),a"},{"a":58259,"t":"code","b":[221,34,55,128],"m":"ld","oa":32823,"o":"(probe_hit),ix"},{"a":58263,"t":"code","b":[42,63,128],"m":"ld","oa":32831,"o":"hl,(probe_ramp)"},{"a":58266,"t":"code","b":[34,57,128],"m":"ld","oa":32825,"o":"(probe_slope),hl"},{"a":58269,"t":"code","b":[221,126,6],"m":"ld","o":"a,(ix+$06)"},{"a":58272,"t":"code","b":[50,53,128],"m":"ld","oa":32821,"o":"(probe_z),a"},{"a":58275,"t":"code","b":[195,224,225],"m":"jp","oa":57824,"o":"$E1E0"},{"a":58278,"t":"code","b":[58,62,128],"m":"ld","oa":32830,"o":"a,(probe_bottom)","x":[58240]},{"a":58281,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":58282,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)"},{"a":58285,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":58286,"t":"code","b":[58,36,128],"m":"ld","oa":32804,"o":"a,(shape_x2_high)"},{"a":58289,"t":"code","b":[129],"m":"add","o":"a,c"},{"a":58290,"t":"code","b":[210,183,227],"m":"jp","oa":58295,"o":"nc,$E3B7"},{"a":58293,"t":"code","b":[62,255],"m":"ld","o":"a,$FF"},{"a":58295,"t":"code","b":[184],"m":"cp","o":"b","x":[58290]},{"a":58296,"t":"code","b":[218,224,225],"m":"jp","oa":57824,"o":"c,$E1E0"},{"a":58299,"t":"code","b":[62,255],"m":"ld","o":"a,$FF"},{"a":58301,"t":"code","b":[50,59,128],"m":"ld","oa":32827,"o":"(probe_floor),a"},{"a":58304,"t":"code","b":[58,61,128],"m":"ld","oa":32829,"o":"a,(probe_top)"},{"a":58307,"t":"code","b":[50,54,128],"m":"ld","oa":32822,"o":"(probe_surface),a"},{"a":58310,"t":"code","b":[221,34,55,128],"m":"ld","oa":32823,"o":"(probe_hit),ix"},{"a":58314,"t":"code","b":[42,63,128],"m":"ld","oa":32831,"o":"hl,(probe_ramp)"},{"a":58317,"t":"code","b":[34,57,128],"m":"ld","oa":32825,"o":"(probe_slope),hl"},{"a":58320,"t":"code","b":[221,126,6],"m":"ld","o":"a,(ix+$06)"},{"a":58323,"t":"code","b":[50,53,128],"m":"ld","oa":32821,"o":"(probe_z),a"},{"a":58326,"t":"code","b":[195,224,225],"m":"jp","oa":57824,"o":"$E1E0"},{"a":58329,"l":"test_against_object","c":"Tests the probe's box against one other object record, in IX; BC = the position of that object's square relative to the moving object's, stored in $8049/$804A. It returns if the two rectangles (+$05, +$08, +$07 and +$09 of IX against $801B, $801F, $801D and $8025) do not overlap. If the other object's top (+$0D) is below the running floor in $8036 it becomes the thing beneath the box when it is the highest so far ($803B = its top). Otherwise, if its base (+$0B) is below the box's top, it is a hit: $803B = $FF and $8036 = its top. In both cases $8037 = IX, $8039 = 0 and $8035 = its type byte. Called from $E15B, $E16E, $E181 and $E193.","t":"code","b":[237,67,73,128],"m":"ld","oa":32841,"o":"(cell_offset_x),bc","x":[57691,57710,57729,57747]},{"a":58333,"t":"code","b":[42,31,128],"m":"ld","oa":32799,"o":"hl,(shape_x1)"},{"a":58336,"t":"code","b":[221,94,5],"m":"ld","o":"e,(ix+$05)"},{"a":58339,"t":"code","b":[58,73,128],"m":"ld","oa":32841,"o":"a,(cell_offset_x)"},{"a":58342,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":58343,"t":"code","b":[175],"m":"xor","o":"a"},{"a":58344,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":58346,"t":"code","b":[248],"m":"ret","o":"m"},{"a":58347,"t":"code","b":[221,110,8],"m":"ld","o":"l,(ix+$08)"},{"a":58350,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":58351,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":58352,"t":"code","b":[237,91,27,128],"m":"ld","oa":32795,"o":"de,(shape_x0)"},{"a":58356,"t":"code","b":[167],"m":"and","o":"a"},{"a":58357,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":58359,"t":"code","b":[248],"m":"ret","o":"m"},{"a":58360,"t":"code","b":[42,37,128],"m":"ld","oa":32805,"o":"hl,(shape_y2)"},{"a":58363,"t":"code","b":[221,94,7],"m":"ld","o":"e,(ix+$07)"},{"a":58366,"t":"code","b":[58,74,128],"m":"ld","oa":32842,"o":"a,(cell_offset_y)"},{"a":58369,"t":"code","b":[87],"m":"ld","o":"d,a"},{"a":58370,"t":"code","b":[175],"m":"xor","o":"a"},{"a":58371,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":58373,"t":"code","b":[248],"m":"ret","o":"m"},{"a":58374,"t":"code","b":[221,110,9],"m":"ld","o":"l,(ix+$09)"},{"a":58377,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":58379,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":58380,"t":"code","b":[237,91,29,128],"m":"ld","oa":32797,"o":"de,(shape_y0)"},{"a":58384,"t":"code","b":[167],"m":"and","o":"a"},{"a":58385,"t":"code","b":[237,82],"m":"sbc","o":"hl,de"},{"a":58387,"t":"code","b":[248],"m":"ret","o":"m"},{"a":58388,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)"},{"a":58391,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":58392,"t":"code","b":[221,126,13],"m":"ld","o":"a,(ix+$0D)"},{"a":58395,"t":"code","b":[185],"m":"cp","o":"c"},{"a":58396,"t":"code","b":[48,32],"m":"jr","oa":58430,"o":"nc,$E43E"},{"a":58398,"t":"code","b":[58,59,128],"m":"ld","oa":32827,"o":"a,(probe_floor)"},{"a":58401,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":58402,"t":"code","b":[221,126,13],"m":"ld","o":"a,(ix+$0D)"},{"a":58405,"t":"code","b":[185],"m":"cp","o":"c"},{"a":58406,"t":"code","b":[216],"m":"ret","o":"c"},{"a":58407,"t":"code","b":[221,126,13],"m":"ld","o":"a,(ix+$0D)"},{"a":58410,"t":"code","b":[50,59,128],"m":"ld","oa":32827,"o":"(probe_floor),a"},{"a":58413,"t":"code","b":[221,34,55,128],"m":"ld","oa":32823,"o":"(probe_hit),ix"},{"a":58417,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":58420,"t":"code","b":[34,57,128],"m":"ld","oa":32825,"o":"(probe_slope),hl"},{"a":58423,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)"},{"a":58426,"t":"code","b":[50,53,128],"m":"ld","oa":32821,"o":"(probe_z),a"},{"a":58429,"t":"code","b":[201],"m":"ret"},{"a":58430,"t":"code","b":[221,126,11],"m":"ld","o":"a,(ix+$0B)","x":[58396]},{"a":58433,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":58434,"t":"code","b":[58,54,128],"m":"ld","oa":32822,"o":"a,(probe_surface)"},{"a":58437,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":58438,"t":"code","b":[58,36,128],"m":"ld","oa":32804,"o":"a,(shape_x2_high)"},{"a":58441,"t":"code","b":[129],"m":"add","o":"a,c"},{"a":58442,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":58443,"t":"code","b":[210,80,228],"m":"jp","oa":58448,"o":"nc,$E450"},{"a":58446,"t":"code","b":[14,255],"m":"ld","o":"c,$FF"},{"a":58448,"t":"code","b":[120],"m":"ld","o":"a,b","x":[58443]},{"a":58449,"t":"code","b":[185],"m":"cp","o":"c"},{"a":58450,"t":"code","b":[208],"m":"ret","o":"nc"},{"a":58451,"t":"code","b":[62,255],"m":"ld","o":"a,$FF"},{"a":58453,"t":"code","b":[50,59,128],"m":"ld","oa":32827,"o":"(probe_floor),a"},{"a":58456,"t":"code","b":[221,126,13],"m":"ld","o":"a,(ix+$0D)"},{"a":58459,"t":"code","b":[50,54,128],"m":"ld","oa":32822,"o":"(probe_surface),a"},{"a":58462,"t":"code","b":[221,34,55,128],"m":"ld","oa":32823,"o":"(probe_hit),ix"},{"a":58466,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":58469,"t":"code","b":[34,57,128],"m":"ld","oa":32825,"o":"(probe_slope),hl"},{"a":58472,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)"},{"a":58475,"t":"code","b":[50,53,128],"m":"ld","oa":32821,"o":"(probe_z),a"},{"a":58478,"t":"code","b":[201],"m":"ret"},{"a":58479,"l":"random_state","c":"The 24-bit state of the generator at $E472: $E46F is the low byte and $E471 the high. The tape loads it as $380000. Besides the generator, 23 instructions elsewhere read one of the three bytes directly as a random value: eight read $E46F, seven $E470 and eight $E471, among them $D49F, $D534 and $D5FE in the code that creates objects.","t":"byte","b":[0,0,56],"x":[42065,48785,48790,54431,54527,54532,54598,55243,58482,58503]},{"a":58482,"l":"random_next","c":"The game's random number generator. It shifts the 24-bit value at $E46F-$E471 left by one bit, puts bit 7 XOR bit 5 of the new $E471 into bit 0, and returns the new low byte in A. The bit that leaves the top is lost, so 23 bits carry the state, and each call brings in a single new bit: a result is the one before it shifted left with a new bottom bit. From the tape's $380000 the first results are $01, $02, $05, $0B, $16, $2C, $58, $B0, $60, $C0, $80 and then ten zeros. The low 23 bits return to their starting value after 7,864,305 calls, which is 15 * (2^19 - 1), and a state of zero would stay zero. Six callers: $7A30, $D438, $D491, $D52A, $D7BC and $E764.","t":"code","b":[42,111,228],"m":"ld","oa":58479,"o":"hl,(random_state)","x":[31280,54328,54417,54570,55228,59236]},{"a":58485,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":58486,"t":"code","b":[58,113,228],"m":"ld","oa":58481,"o":"a,($E471)"},{"a":58489,"t":"code","b":[143],"m":"adc","o":"a,a"},{"a":58490,"t":"code","b":[203,61],"m":"srl","o":"l"},{"a":58492,"t":"code","b":[50,113,228],"m":"ld","oa":58481,"o":"($E471),a"},{"a":58495,"t":"code","b":[230,160],"m":"and","o":"$A0"},{"a":58497,"t":"code","b":[198,96],"m":"add","o":"a,$60"},{"a":58499,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":58501,"t":"code","b":[203,21],"m":"rl","o":"l"},{"a":58503,"t":"code","b":[34,111,228],"m":"ld","oa":58479,"o":"(random_state),hl"},{"a":58506,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":58507,"t":"code","b":[201],"m":"ret"},{"a":58508,"l":"worm_width_table","c":"The worm's width table: 34 bytes falling from $FF to $12, the longer a section the smaller the factor. $AC61, the only reference, indexes it with the high byte of the sum of two magnitudes, the absolute values of the words at $8033 and $8035 (plus the byte at $8003 on the pass where the counter at $8067 runs out), held to a maximum of $1E, and scales both magnitudes by the byte it reads, over 256, through $A8DB. So entries 0 to 30 can be read and the last three, $14, $13 and $12 at $E4AB-$E4AD, cannot.","t":"byte","b":[255,230,210,197,170,150,130,100]},{"a":58516,"t":"byte","b":[95,80,70,65,62,55,53,50]},{"a":58524,"t":"byte","b":[47,43,41,38,35,34,32,30]},{"a":58532,"t":"byte","b":[28,26,25,24,23,22,21,20]},{"a":58540,"t":"byte","b":[19,18]},{"a":58542,"l":"sound_script_pointer","c":"Address of the next byte of the sound script being played. $7585 loads it with $E4C2 for a new game, $E511 with $E4B2 for the menu and $E4FC with whatever its caller passes; $E9E8 reads through it and moves it on. It holds $E4B2 on the tape, and $0000 after a script has run to its end.","t":"addr","b":[178,228],"oa":58546,"o":"sound_script_menu","x":[30085,58620,58641,59890,59900,59917]},{"a":58544,"l":"sound_script_counter","c":"The number of calls of $E9E8 left before the sound script moves to its next byte; 0 means that no script is playing, which is what $E4F7 tests. It is set to 1 whenever a script is started, reloaded from $E4B1 at each step and zeroed at $EA15 when a script ends.","t":"byte","b":[0],"x":[30091,58615,58627,58635,59880,59887,59906,59925]},{"a":58545,"l":"sound_script_reload","c":"How many buffer copies each sound script byte lasts. Every store that starts a script writes $0101 across $E4B0 and $E4B1 ($758B, $E503, $E50B), so this is always 1, one byte to a copy. It is read only at $E9FF.","t":"byte","b":[1],"x":[59903]},{"a":58546,"l":"sound_script_menu","c":"The sound script that the menu loads at $E50E: $07, $0A and the $00 that closes it. A script is a run of values for $8055, one for each call of $E9E8, closed by $00 and a word that is either the address of the script to carry on with or $0000 to stop. This one clicks the speaker every 7th pixel row of one buffer copy (18 clicks) and every 10th of the next (12), and so on round.","t":"byte","b":[7,10,0],"x":[58542,58549]},{"a":58549,"l":"sound_script_menu_link","c":"Link word of the menu's sound script: $E4B2, its own start, so it repeats for as long as it stays loaded. On the menu and in the key redefiner a byte is used each time a page is drawn.","t":"addr","b":[178,228],"oa":58546,"o":"sound_script_menu"},{"a":58551,"l":"sound_script_alarm","c":"Sound script $02, $09, $04, $0B, $06, $0D, $08, $0F and the closing $00: two rising runs interleaved. It is started through $E4FC, without the test for a script already playing, by $7815, which the code at $77A7-$77CD reaches when each of the four bytes $7F5A, $7F6A, $7F7A and $7F8A is between 1 and $80.","t":"byte","b":[2,9,4,11,6,13,8,15],"x":[58560]},{"a":58559,"t":"byte","b":[0]},{"a":58560,"l":"sound_script_alarm_link","c":"Link word $E4B7: the script at $E4B7 goes back to its own start, so once begun it runs until $E508 or $757F loads another, and every start asked for through $E4F7 in between finds the counter at 1 and does nothing.","t":"addr","b":[183,228],"oa":58551,"o":"sound_script_alarm"},{"a":58562,"l":"sound_script_game_start","c":"The sound script $7582 loads when a game starts: 28 values and the closing $00. They are $13, $02, $11, $03, $0F, $04, $0E, $05, $0D, $06, $0C, $07, $0C, $08, $0B, $09, $0A, then $11 three times, $03, and $1E seven times: a falling run and a rising run interleaved until they meet, then a tail.","t":"byte","b":[19,2,17,3,15,4,14,5]},{"a":58570,"t":"byte","b":[13,6,12,7,12,8,11,9]},{"a":58578,"t":"byte","b":[10,17,17,17,3,30,30,30]},{"a":58586,"t":"byte","b":[30,30,30,30,0]},{"a":58591,"l":"sound_script_game_start_stop","c":"Link word $0000 after the game-start script: the high byte is zero, so $EA15 zeroes the counter and the script stops, leaving $0000 in the pointer at $E4AE.","t":"word","b":[0,0],"d":[0]},{"a":58593,"l":"sound_script_touch","c":"Sound script $0E, $0E, $0E, $1E and the closing $00: four buffer copies with 9, 9, 9 and 4 clicks. It is started through $E4F7, so only when nothing else is playing, from $9E8B, $A5F0 and $A601.","t":"byte","b":[14,14,14,30,0]},{"a":58598,"l":"sound_script_touch_stop","c":"Link word $0000: the script at $E4E1 plays once and stops.","t":"word","b":[0,0],"d":[0]},{"a":58600,"l":"sound_script_f3_meets_f1","c":"Sound script $1A, $1A, $1A and the closing $00, three buffer copies of 4 clicks each. Its one start is the $E4F7 call at $D87B, in the branch of the type-$F3 handler taken when the record has met a type-$F1 record and its own +$08 is $0E.","t":"byte","b":[26,26,26,0]},{"a":58604,"l":"sound_script_f3_meets_f1_stop","c":"Link word $0000: the script at $E4E8 plays once and stops.","t":"word","b":[0,0],"d":[0]},{"a":58606,"l":"sound_script_game_end","c":"Sound script $14, $18, $19, $0B, $08, $06 and the closing $00. Its one start is the $E4F7 call at $7863, in the code that ends a game, so it plays only if no other script is running at that moment.","t":"byte","b":[20,24,25,11,8,6,0],"x":[58613]},{"a":58613,"l":"sound_script_game_end_link","c":"Link word $E4EE: the script at $E4EE repeats from its own start until the menu at $E508 loads $E4B2 in its place.","t":"addr","b":[238,228],"oa":58606,"o":"sound_script_game_end"},{"a":58615,"l":"start_sound_script_if_idle","c":"Starts the sound script at DE unless one is already playing: it returns with nothing changed when the counter at $E4B0 is not zero, and otherwise falls into $E4FC. A script whose link word points back at itself never lets the counter reach zero, so after $E4B7 or $E4EE has started nothing can be started through here until the menu or a new game loads another script. Called from $7863, $9E8B, $A5F0, $A601 and $D87B.","t":"code","b":[58,176,228],"m":"ld","oa":58544,"o":"a,(sound_script_counter)","x":[30819,40587,42480,42497,55419]},{"a":58618,"t":"code","b":[167],"m":"and","o":"a"},{"a":58619,"t":"code","b":[192],"m":"ret","o":"nz"},{"a":58620,"l":"start_sound_script","c":"Starts the sound script at DE whatever is playing: it stores DE in $E4AE and $0101 in $E4B0/$E4B1, so the script's first byte is taken by the next call of $E9E8. Called directly only from $7818; $E4F7 falls into it.","t":"code","b":[237,83,174,228],"m":"ld","oa":58542,"o":"(sound_script_pointer),de","x":[30744]},{"a":58624,"t":"code","b":[17,1,1],"m":"ld","o":"de,$0101"},{"a":58627,"t":"code","b":[237,83,176,228],"m":"ld","oa":58544,"o":"(sound_script_counter),de"},{"a":58631,"t":"code","b":[201],"m":"ret"},{"a":58632,"l":"menu","c":"The opening menu, and where every game ends up. It loads the sound script at $E4B2 with counter and reload 1, draws message $86, the menu page, through $E930, and jumps to the tune at $E69F. That never returns: the keys are polled by $E51C after every note, and its two jumps are the only way out. Five references: $7F40 after the first screen, $7699 when the abort control (bit 7 of $8057) is down in play, $7899 and $78C6 at the end of a game, and $E57F when the key redefiner's EXIT row is chosen. It does not set the stack pointer itself.","t":"code","b":[33,1,1],"m":"ld","o":"hl,$0101","x":[30361,30873,30918,32576,58751]},{"a":58635,"t":"code","b":[34,176,228],"m":"ld","oa":58544,"o":"(sound_script_counter),hl"},{"a":58638,"t":"code","b":[33,178,228],"m":"ld","o":"hl,$E4B2"},{"a":58641,"t":"code","b":[34,174,228],"m":"ld","oa":58542,"o":"(sound_script_pointer),hl"},{"a":58644,"t":"code","b":[62,134],"m":"ld","o":"a,$86"},{"a":58646,"t":"code","b":[205,48,233],"m":"call","oa":59696,"o":"show_text_page"},{"a":58649,"t":"code","b":[195,159,230],"m":"jp","oa":59039,"o":"play_tune_forever"},{"a":58652,"l":"menu_poll_keys","c":"The menu's key test, called by the tone loop at $E791 after every note of the tune. Through $7BE8 it tests key number $23, the 0 key, and if it is down jumps to $757F to start a game; then $24, the 1 key, which jumps to the key redefiner at $E544; then $1C, the 2 key, which flips the byte at $E868 between $0D and $0E (XOR 3) to turn the Kempston joystick on or off, redraws the menu page with $E930 and waits at $E5B2 until no key is down. With none of the three down it returns to the tune. The two jumps leave the tune's return addresses on the stack; both destinations load SP afresh.","t":"code","b":[62,35],"m":"ld","o":"a,$23","x":[59281]},{"a":58654,"t":"code","b":[205,232,123],"m":"call","oa":31720,"o":"test_key"},{"a":58657,"t":"code","b":[210,127,117],"m":"jp","oa":30079,"o":"nc,start_new_game"},{"a":58660,"t":"code","b":[62,36],"m":"ld","o":"a,$24"},{"a":58662,"t":"code","b":[205,232,123],"m":"call","oa":31720,"o":"test_key"},{"a":58665,"t":"code","b":[210,68,229],"m":"jp","oa":58692,"o":"nc,key_redefiner"},{"a":58668,"t":"code","b":[62,28],"m":"ld","o":"a,$1C"},{"a":58670,"t":"code","b":[205,232,123],"m":"call","oa":31720,"o":"test_key"},{"a":58673,"t":"code","b":[56,16],"m":"jr","oa":58691,"o":"c,$E543"},{"a":58675,"t":"code","b":[58,104,232],"m":"ld","oa":59496,"o":"a,(kempston_flag)"},{"a":58678,"t":"code","b":[238,3],"m":"xor","o":"$03"},{"a":58680,"t":"code","b":[50,104,232],"m":"ld","oa":59496,"o":"(kempston_flag),a"},{"a":58683,"t":"code","b":[62,134],"m":"ld","o":"a,$86"},{"a":58685,"t":"code","b":[205,48,233],"m":"call","oa":59696,"o":"show_text_page"},{"a":58688,"t":"code","b":[205,178,229],"m":"call","oa":58802,"o":"wait_keys_released"},{"a":58691,"t":"code","b":[201],"m":"ret","x":[58673]},{"a":58692,"l":"key_redefiner","c":"The key redefiner page. It resets SP to $F000, puts a space in the marker of the EXIT row ($E8F3) and starts at row 0, keeping the row number in $8034. For the current row it writes '>' into the row's first byte, whose address comes from $E5BB, and draws message $87 through $E930. Then it polls two keys with $7BE8. SPACE (key $20) blanks the marker and moves to the next row, going from row 8 back to row 0; the page is redrawn at every step and there is no wait for the key to be released, so a held key steps on as fast as the page redraws. ENTER (key $21) on row 8, EXIT, jumps to the menu at $E508. ENTER on rows 0 to 7 writes $88 into the row's key slot, its eighth byte, redraws the page so that three solid blocks show there, waits at $E5B2 for every key to be released and takes the next key pressed from $7B8B. That key's number goes into the control table at $7BE0, in the slot that the eight bytes at $7BD8 give for the row (2, 1, 5, 4, 7, 6, 3, 0), and its display code from the 40-byte table at $7BB0 goes into the row's key slot. Any of the 40 keys is accepted, SPACE and ENTER among them, and nothing stops two controls sharing a key. Entered only from $E529.","t":"code","b":[49,0,240],"m":"ld","o":"sp,$F000","x":[58665]},{"a":58695,"t":"code","b":[62,32],"m":"ld","o":"a,$20"},{"a":58697,"t":"code","b":[50,243,232],"m":"ld","oa":59635,"o":"(key_row_exit_name),a"},{"a":58700,"t":"code","b":[175],"m":"xor","o":"a","x":[58737]},{"a":58701,"t":"code","b":[50,52,128],"m":"ld","oa":32820,"o":"(probe_y),a","x":[58735]},{"a":58704,"t":"code","b":[205,187,229],"m":"call","oa":58811,"o":"key_row_address"},{"a":58707,"t":"code","b":[54,62],"m":"ld","o":"(hl),$3E"},{"a":58709,"t":"code","b":[62,135],"m":"ld","o":"a,$87","x":[58799]},{"a":58711,"t":"code","b":[205,48,233],"m":"call","oa":59696,"o":"show_text_page"},{"a":58714,"t":"code","b":[62,32],"m":"ld","o":"a,$20","x":[58744]},{"a":58716,"t":"code","b":[205,232,123],"m":"call","oa":31720,"o":"test_key"},{"a":58719,"t":"code","b":[56,18],"m":"jr","oa":58739,"o":"c,$E573"},{"a":58721,"t":"code","b":[58,52,128],"m":"ld","oa":32820,"o":"a,(probe_y)"},{"a":58724,"t":"code","b":[205,187,229],"m":"call","oa":58811,"o":"key_row_address"},{"a":58727,"t":"code","b":[54,32],"m":"ld","o":"(hl),$20"},{"a":58729,"t":"code","b":[58,52,128],"m":"ld","oa":32820,"o":"a,(probe_y)"},{"a":58732,"t":"code","b":[60],"m":"inc","o":"a"},{"a":58733,"t":"code","b":[254,9],"m":"cp","o":"$09"},{"a":58735,"t":"code","b":[56,220],"m":"jr","oa":58701,"o":"c,$E54D"},{"a":58737,"t":"code","b":[24,217],"m":"jr","oa":58700,"o":"$E54C"},{"a":58739,"t":"code","b":[62,33],"m":"ld","o":"a,$21","x":[58719]},{"a":58741,"t":"code","b":[205,232,123],"m":"call","oa":31720,"o":"test_key"},{"a":58744,"t":"code","b":[56,224],"m":"jr","oa":58714,"o":"c,$E55A"},{"a":58746,"t":"code","b":[58,52,128],"m":"ld","oa":32820,"o":"a,(probe_y)"},{"a":58749,"t":"code","b":[254,8],"m":"cp","o":"$08"},{"a":58751,"t":"code","b":[202,8,229],"m":"jp","oa":58632,"o":"z,menu"},{"a":58754,"t":"code","b":[205,187,229],"m":"call","oa":58811,"o":"key_row_address"},{"a":58757,"t":"code","b":[30,7],"m":"ld","o":"e,$07"},{"a":58759,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":58760,"t":"code","b":[54,136],"m":"ld","o":"(hl),$88"},{"a":58762,"t":"code","b":[229],"m":"push","o":"hl"},{"a":58763,"t":"code","b":[62,135],"m":"ld","o":"a,$87"},{"a":58765,"t":"code","b":[205,48,233],"m":"call","oa":59696,"o":"show_text_page"},{"a":58768,"t":"code","b":[205,178,229],"m":"call","oa":58802,"o":"wait_keys_released"},{"a":58771,"t":"code","b":[205,139,123],"m":"call","oa":31627,"o":"wait_for_one_key"},{"a":58774,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":58775,"t":"code","b":[58,52,128],"m":"ld","oa":32820,"o":"a,(probe_y)"},{"a":58778,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":58779,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":58781,"t":"code","b":[33,216,123],"m":"ld","o":"hl,$7BD8"},{"a":58784,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":58785,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":58786,"t":"code","b":[33,224,123],"m":"ld","o":"hl,$7BE0"},{"a":58789,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":58790,"t":"code","b":[113],"m":"ld","o":"(hl),c"},{"a":58791,"t":"code","b":[89],"m":"ld","o":"e,c"},{"a":58792,"t":"code","b":[33,176,123],"m":"ld","o":"hl,$7BB0"},{"a":58795,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":58796,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":58797,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":58798,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":58799,"t":"code","b":[195,85,229],"m":"jp","oa":58709,"o":"$E555"},{"a":58802,"l":"wait_keys_released","c":"Waits until no key is down: it reads port $FE with A = 0, which selects all eight half-rows at once, and loops while any of the five key bits reads 0. Called from $E540 after the Kempston option has been toggled and from $E590 before the redefiner reads a new key.","t":"code","b":[175],"m":"xor","o":"a","x":[58688,58768,58808]},{"a":58803,"t":"code","b":[219,254],"m":"in","o":"a,($FE)"},{"a":58805,"t":"code","b":[47],"m":"cpl"},{"a":58806,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":58808,"t":"code","b":[32,248],"m":"jr","oa":58802,"o":"nz,wait_keys_released"},{"a":58810,"t":"code","b":[201],"m":"ret"},{"a":58811,"l":"key_row_address","c":"Returns HL = $E89B + 11 * A, the first byte of row A of the key redefiner's nine rows inside message $87, which it steps through 11 bytes at a time (the ninth row, EXIT, is 10 bytes long), with D = 0 and E = 11 * A. Called from $E550, $E564 and $E582.","t":"code","b":[33,155,232],"m":"ld","o":"hl,$E89B","x":[58704,58724,58754]},{"a":58814,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":58816,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":58817,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":58819,"t":"code","b":[131],"m":"add","o":"a,e"},{"a":58820,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":58822,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":58824,"t":"code","b":[131],"m":"add","o":"a,e"},{"a":58825,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":58826,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":58827,"t":"code","b":[201],"m":"ret"},{"a":58828,"l":"note_pitch_table","c":"Pitch table of the menu tune: twelve pairs of bytes, one pair for each semitone of an octave, read by $E716. The first byte of a pair is the delay count for half a cycle in octave 1, falling from $BE to $65 a semitone at a time; the second is a quarter of the number of half-cycles to play, rising from $19 to $2F, so that every note lasts about the same time (the twelve products lie between 4,650 and 4,815).","t":"byte","b":[190,25,179,26,169,28,159,30]},{"a":58836,"t":"byte","b":[150,31,142,33,134,35,127,37]},{"a":58844,"t":"byte","b":[120,40,113,42,107,45,101,47]},{"a":58852,"l":"tune_script_pointers","c":"Ten addresses, the tune's scripts numbered $A0 to $A9: $E5F8, $E5FD, $E606, $E60F, $E618, $E61F, $E628, $E660, $E685 and $E68E. $E6B6 indexes the table with twice the element byte less $A0 and does not check the range.","t":"addr","b":[248,229],"oa":58872,"o":"tune_script_a0"},{"a":58854,"t":"addr","b":[253,229],"oa":58877,"o":"tune_script_a1"},{"a":58856,"t":"addr","b":[6,230],"oa":58886,"o":"tune_script_a2"},{"a":58858,"t":"addr","b":[15,230],"oa":58895,"o":"tune_script_a3"},{"a":58860,"t":"addr","b":[24,230],"oa":58904,"o":"tune_script_a4"},{"a":58862,"t":"addr","b":[31,230],"oa":58911,"o":"tune_script_a5"},{"a":58864,"t":"addr","b":[40,230],"oa":58920,"o":"tune_script_a6"},{"a":58866,"t":"addr","b":[96,230],"oa":58976,"o":"tune_script_a7"},{"a":58868,"t":"addr","b":[133,230],"oa":59013,"o":"tune_script_a8"},{"a":58870,"t":"addr","b":[142,230],"oa":59022,"o":"tune_script_a9"},{"a":58872,"l":"tune_script_a0","c":"Tune script $A0, the whole tune: $A6, $A6, $A7, $A7 and the $FF that ends every script. A script is a list of one-byte elements. $00-$27 is a note, twelve to the octave over four octaves; $28-$4F the same notes at half length; $50-$9F a note reached by a slide up from the semitone below; $A0-$A9 plays another script and comes back; $C8 would play the element after it as noise. One pass of this script plays 450 elements and takes about 194 million T-states, 55 seconds, and $E69F repeats it without end.","t":"byte","b":[166,166,167,167,255],"x":[58852]},{"a":58877,"l":"tune_script_a1","c":"Tune script $A1, eight notes and $FF: $0C, $18, $07, $1B, $0C, $1F, $07, $1B. Script $A6 plays it four times, in two pairs.","t":"byte","b":[12,24,7,27,12,31,7,27],"x":[58854]},{"a":58885,"t":"byte","b":[255]},{"a":58886,"l":"tune_script_a2","c":"Tune script $A2, eight notes and $FF: $0B, $1A, $06, $1E, $0A, $19, $05, $1D. Script $A6 plays it twice, each time after a pair of $A1.","t":"byte","b":[11,26,6,30,10,25,5,29],"x":[58856]},{"a":58894,"t":"byte","b":[255]},{"a":58895,"l":"tune_script_a3","c":"Tune script $A3, eight notes and $FF: $0E, $1D, $07, $20, $0E, $24, $07, $20. Script $A6 plays it twice in succession.","t":"byte","b":[14,29,7,32,14,36,7,32],"x":[58858]},{"a":58903,"t":"byte","b":[255]},{"a":58904,"l":"tune_script_a4","c":"Tune script $A4, six elements and $FF: $11, $4B, $48, $0C, $4B, $48. $4B and $48 are notes $23 and $20 at half length. Script $A6 plays it four times, in two pairs.","t":"byte","b":[17,75,72,12,75,72,255],"x":[58860]},{"a":58911,"l":"tune_script_a5","c":"Tune script $A5, eight notes and $FF: $0B, $1A, $06, $1E, $0B, $1F, $06, $1E. Script $A6 plays it twice in succession, after its pair of $A3.","t":"byte","b":[11,26,6,30,11,31,6,30],"x":[58862]},{"a":58919,"t":"byte","b":[255]},{"a":58920,"l":"tune_script_a6","c":"Tune script $A6, the first half of the tune: 55 elements and $FF, which call scripts $A1 to $A5 fourteen times in all between notes of its own. Its own elements include the runs $35-$3A and $34, $36, $37, $38 of half-length notes and the slide notes $6F and $74. Script $A0 plays it twice.","t":"byte","b":[161,161,162,8,111,7,111,111],"x":[58864]},{"a":58928,"t":"byte","b":[53,54,55,56,57,58,161,161]},{"a":58936,"t":"byte","b":[162,7,111,111,111,12,116,12]},{"a":58944,"t":"byte","b":[12,163,163,165,165,164,164,19]},{"a":58952,"t":"byte","b":[116,116,12,19,116,52,54,55]},{"a":58960,"t":"byte","b":[56,164,164,54,12,54,6,116]},{"a":58968,"t":"byte","b":[7,71,72,71,69,67,66,255]},{"a":58976,"l":"tune_script_a7","c":"Tune script $A7, the second half of the tune: 36 elements and $FF. It opens with $A8 twice and $A9, plays 32 elements of its own, the last three of them the slide note $6F, and closes with $A9 again. Script $A0 plays it twice.","t":"byte","b":[168,168,169,12,31,5,27,11],"x":[58866]},{"a":58984,"t":"byte","b":[24,5,31,11,30,3,25,8]},{"a":58992,"t":"byte","b":[22,3,30,10,29,2,24,5]},{"a":59000,"t":"byte","b":[19,2,29,9,27,9,27,9]},{"a":59008,"t":"byte","b":[111,111,111,169,255]},{"a":59013,"l":"tune_script_a8","c":"Tune script $A8, eight notes and $FF: $07, $1F, $0C, $1B, $07, $1D, $0C, $1A. Script $A7 plays it twice at its start.","t":"byte","b":[7,31,12,27,7,29,12,26],"x":[58868]},{"a":59021,"t":"byte","b":[255]},{"a":59022,"l":"tune_script_a9","c":"Tune script $A9, sixteen elements and $FF: $0C, $18, $05, $1E, $0C, $19, $05, $1F, $07, $1D, $0C, $18, $07 and three of the slide note $6A. Script $A7 plays it twice. Its $FF at $E69E is the last byte of the tune.","t":"byte","b":[12,24,5,30,12,25,5,31],"x":[58870]},{"a":59030,"t":"byte","b":[7,29,12,24,7,106,106,106]},{"a":59038,"t":"byte","b":[255]},{"a":59039,"l":"play_tune_forever","c":"The menu's idle loop: it stores 0, a NOP, in the patched opcode at $E75D, plays tune script $A0 through $E6AB and starts again, without end. Reached from the menu at $E519. The only ways out are the two jumps in $E51C, which the tone loop calls after each note.","t":"code","b":[175],"m":"xor","o":"a","x":[58649,59048]},{"a":59040,"t":"code","b":[50,93,231],"m":"ld","oa":59229,"o":"(tone_carry_opcode),a"},{"a":59043,"t":"code","b":[62,160],"m":"ld","o":"a,$A0"},{"a":59045,"t":"code","b":[205,171,230],"m":"call","oa":59051,"o":"play_tune_element"},{"a":59048,"t":"code","b":[195,159,230],"m":"jp","oa":59039,"o":"play_tune_forever"},{"a":59051,"l":"play_tune_element","c":"Plays one element of the tune, in A. For $A0 or more, A less $A0 picks one of the ten script addresses at $E5E4 and each byte of that script is played by a recursive call, up to its $FF; a $C8 inside a script flips the opcode at $E75D between NOP and CCF (XOR $3F) around the element after it, which makes the tone loop move the speaker at random for that element, but no script on the tape holds a $C8. Below $28 the element is a note and goes straight to $E745. $28-$4F is the note A less $28 with its half-cycle count halved. $50-$9F is a slide: the note one semitone below A less $50 for $5A half-cycles, then the note itself for its own count less $5A; the three used, $6A, $6F and $74, are notes 26, 31 and 36, whose counts are well above $5A. Called from $E6A5 and from itself at $E6D2 and $E6E1.","t":"code","b":[254,160],"m":"cp","o":"$A0","x":[59045,59090,59105]},{"a":59053,"t":"code","b":[56,56],"m":"jr","oa":59111,"o":"c,$E6E7"},{"a":59055,"t":"code","b":[214,160],"m":"sub","o":"$A0"},{"a":59057,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":59058,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":59060,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":59062,"t":"code","b":[33,228,229],"m":"ld","o":"hl,$E5E4"},{"a":59065,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":59066,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":59067,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":59068,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":59069,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":59070,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[59102,59109]},{"a":59071,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":59072,"t":"code","b":[254,255],"m":"cp","o":"$FF"},{"a":59074,"t":"code","b":[200],"m":"ret","o":"z"},{"a":59075,"t":"code","b":[254,200],"m":"cp","o":"$C8"},{"a":59077,"t":"code","b":[32,25],"m":"jr","oa":59104,"o":"nz,$E6E0"},{"a":59079,"t":"code","b":[58,93,231],"m":"ld","oa":59229,"o":"a,(tone_carry_opcode)"},{"a":59082,"t":"code","b":[238,63],"m":"xor","o":"$3F"},{"a":59084,"t":"code","b":[50,93,231],"m":"ld","oa":59229,"o":"(tone_carry_opcode),a"},{"a":59087,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":59088,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":59089,"t":"code","b":[229],"m":"push","o":"hl"},{"a":59090,"t":"code","b":[205,171,230],"m":"call","oa":59051,"o":"play_tune_element"},{"a":59093,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":59094,"t":"code","b":[58,93,231],"m":"ld","oa":59229,"o":"a,(tone_carry_opcode)"},{"a":59097,"t":"code","b":[238,63],"m":"xor","o":"$3F"},{"a":59099,"t":"code","b":[50,93,231],"m":"ld","oa":59229,"o":"(tone_carry_opcode),a"},{"a":59102,"t":"code","b":[24,222],"m":"jr","oa":59070,"o":"$E6BE"},{"a":59104,"t":"code","b":[229],"m":"push","o":"hl","x":[59077]},{"a":59105,"t":"code","b":[205,171,230],"m":"call","oa":59051,"o":"play_tune_element"},{"a":59108,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":59109,"t":"code","b":[24,215],"m":"jr","oa":59070,"o":"$E6BE"},{"a":59111,"t":"code","b":[254,40],"m":"cp","o":"$28","x":[59053]},{"a":59113,"t":"code","b":[218,69,231],"m":"jp","oa":59205,"o":"c,play_note"},{"a":59116,"t":"code","b":[214,80],"m":"sub","o":"$50"},{"a":59118,"t":"code","b":[48,12],"m":"jr","oa":59132,"o":"nc,$E6FC"},{"a":59120,"t":"code","b":[198,40],"m":"add","o":"a,$28"},{"a":59122,"t":"code","b":[205,22,231],"m":"call","oa":59158,"o":"note_period_and_count"},{"a":59125,"t":"code","b":[203,58],"m":"srl","o":"d"},{"a":59127,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":59129,"t":"code","b":[195,72,231],"m":"jp","oa":59208,"o":"tone_loop"},{"a":59132,"t":"code","b":[79],"m":"ld","o":"c,a","x":[59118]},{"a":59133,"t":"code","b":[217],"m":"exx"},{"a":59134,"t":"code","b":[61],"m":"dec","o":"a"},{"a":59135,"t":"code","b":[205,22,231],"m":"call","oa":59158,"o":"note_period_and_count"},{"a":59138,"t":"code","b":[17,90,0],"m":"ld","o":"de,$005A"},{"a":59141,"t":"code","b":[205,72,231],"m":"call","oa":59208,"o":"tone_loop"},{"a":59144,"t":"code","b":[217],"m":"exx"},{"a":59145,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":59146,"t":"code","b":[205,22,231],"m":"call","oa":59158,"o":"note_period_and_count"},{"a":59149,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":59150,"t":"code","b":[1,166,255],"m":"ld","o":"bc,$FFA6"},{"a":59153,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":59154,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":59155,"t":"code","b":[195,72,231],"m":"jp","oa":59208,"o":"tone_loop"},{"a":59158,"l":"note_period_and_count","c":"Looks up note A for the tone loop. A divided by 12 is the octave and the remainder picks a pair of bytes from the table at $E5CC. It returns HL = the delay count for half a cycle and DE = the number of half-cycles: in octave 0 twice the first byte and twice the second, in octave 1 the first byte and four times the second, and for each octave above that the delay halved again and the count doubled. Note 12 gives HL = $BE and DE = $64. Called from $E6F2, $E6FF, $E70A and $E745.","t":"code","b":[6,0],"m":"ld","o":"b,$00","x":[59122,59135,59146,59205]},{"a":59160,"t":"code","b":[80],"m":"ld","o":"d,b"},{"a":59161,"t":"code","b":[4],"m":"inc","o":"b","x":[59164]},{"a":59162,"t":"code","b":[214,12],"m":"sub","o":"$0C"},{"a":59164,"t":"code","b":[48,251],"m":"jr","oa":59161,"o":"nc,$E719"},{"a":59166,"t":"code","b":[198,12],"m":"add","o":"a,$0C"},{"a":59168,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":59169,"t":"code","b":[203,35],"m":"sla","o":"e"},{"a":59171,"t":"code","b":[33,204,229],"m":"ld","o":"hl,$E5CC"},{"a":59174,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":59175,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":59176,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":59177,"t":"code","b":[110],"m":"ld","o":"l,(hl)"},{"a":59178,"t":"code","b":[38,0],"m":"ld","o":"h,$00"},{"a":59180,"t":"code","b":[84],"m":"ld","o":"d,h"},{"a":59181,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":59182,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":59183,"t":"code","b":[5],"m":"dec","o":"b"},{"a":59184,"t":"code","b":[32,7],"m":"jr","oa":59193,"o":"nz,$E739"},{"a":59186,"t":"code","b":[203,60],"m":"srl","o":"h"},{"a":59188,"t":"code","b":[203,29],"m":"rr","o":"l"},{"a":59190,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":59191,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":59192,"t":"code","b":[201],"m":"ret"},{"a":59193,"t":"code","b":[5],"m":"dec","o":"b","x":[59184]},{"a":59194,"t":"code","b":[40,7],"m":"jr","oa":59203,"o":"z,$E743"},{"a":59196,"t":"code","b":[41],"m":"add","o":"hl,hl","x":[59201]},{"a":59197,"t":"code","b":[203,58],"m":"srl","o":"d"},{"a":59199,"t":"code","b":[203,27],"m":"rr","o":"e"},{"a":59201,"t":"code","b":[16,249],"m":"djnz","oa":59196,"o":"$E73C"},{"a":59203,"t":"code","b":[235],"m":"ex","o":"de,hl","x":[59194]},{"a":59204,"t":"code","b":[201],"m":"ret"},{"a":59205,"l":"play_note","c":"Plays note A at full length: it calls $E716 and falls into the tone loop at $E748. Reached only from $E6E9, for elements below $28.","t":"code","b":[205,22,231],"m":"call","oa":59158,"o":"note_period_and_count","x":[59113]},{"a":59208,"l":"tone_loop","c":"The beeper. HL = the delay count for half a cycle and DE = the number of half-cycles. It takes 4 off HL to allow for its own overhead and, for each half-cycle, runs the delay as OUT ($FE),A inside a DJNZ, once for each unit left in HL, with A still holding the value last sent: bits 0-2 are 1, so the border stays blue. With the opcode at $E75D a NOP, every half-cycle then flips bits 3 to 7 of A, taking the speaker and MIC bits between $01 and $F9. Counted in T-states without memory contention, note 12 is 100 half-cycles about 4,600 apart, close to 380 Hz, and every full-length note lasts about 0.13 s. Entered from $E745 for a plain note and from $E6F9, $E705 and $E713.","t":"code","b":[43],"m":"dec","o":"hl","x":[59129,59141,59155]},{"a":59209,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":59210,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":59211,"t":"code","b":[43],"m":"dec","o":"hl"},{"a":59212,"t":"code","b":[62,7],"m":"ld","o":"a,$07"},{"a":59214,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":59215,"t":"code","b":[36],"m":"inc","o":"h"},{"a":59216,"t":"code","b":[20],"m":"inc","o":"d"},{"a":59217,"t":"code","b":[62,1],"m":"ld","o":"a,$01"},{"a":59219,"t":"code","b":[76],"m":"ld","o":"c,h","x":[59276,59279]},{"a":59220,"t":"code","b":[69],"m":"ld","o":"b,l"},{"a":59221,"t":"code","b":[211,254],"m":"out","o":"($FE),a","x":[59223,59226]},{"a":59223,"t":"code","b":[16,252],"m":"djnz","oa":59221,"o":"$E755"},{"a":59225,"t":"code","b":[13],"m":"dec","o":"c"},{"a":59226,"t":"code","b":[32,249],"m":"jr","oa":59221,"o":"nz,$E755"},{"a":59228,"t":"code","b":[55],"m":"scf"},{"a":59229,"l":"tone_carry_opcode","c":"One byte of the tone loop that other code rewrites: $00, a NOP, stored at $E6A0, or $3F, a CCF, which the $C8 element switches on and off at $E6CC and $E6DB. It follows an SCF. As a NOP it leaves the carry set and the speaker is flipped on every half-cycle. As a CCF it clears the carry, $E472 is called and the flip is left out when bit 0 of the random byte is 1, which makes noise. The rest of the loop follows from here. A counter in A', 7 at first and afterwards 9 less the high byte of four times the delay count, marks every few half-cycles; on those marks, once fewer than 45 half-cycles remain, the delay count goes up by one, so each note sags in pitch as it ends. When DE runs out the loop calls $E51C to poll the menu keys, and returns. A delay count whose low byte reaches 0 on the way up gives one half-cycle of twice the length, because the DJNZ then runs 256 times more than it should; that happens once in each of notes 7 and 8.","t":"code","b":[0],"m":"nop","x":[59040,59079,59084,59094,59099]},{"a":59230,"t":"code","b":[56,15],"m":"jr","oa":59247,"o":"c,$E76F"},{"a":59232,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":59233,"t":"code","b":[213],"m":"push","o":"de"},{"a":59234,"t":"code","b":[229],"m":"push","o":"hl"},{"a":59235,"t":"code","b":[197],"m":"push","o":"bc"},{"a":59236,"t":"code","b":[205,114,228],"m":"call","oa":58482,"o":"random_next"},{"a":59239,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":59240,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":59241,"t":"code","b":[209],"m":"pop","o":"de"},{"a":59242,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":59244,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":59245,"t":"code","b":[56,2],"m":"jr","oa":59249,"o":"c,$E771"},{"a":59247,"t":"code","b":[238,248],"m":"xor","o":"$F8","x":[59230]},{"a":59249,"t":"code","b":[8],"m":"ex","o":"af,af'","x":[59245]},{"a":59250,"t":"code","b":[61],"m":"dec","o":"a"},{"a":59251,"t":"code","b":[32,21],"m":"jr","oa":59274,"o":"nz,$E78A"},{"a":59253,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":59254,"t":"code","b":[61],"m":"dec","o":"a"},{"a":59255,"t":"code","b":[32,6],"m":"jr","oa":59263,"o":"nz,$E77F"},{"a":59257,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":59258,"t":"code","b":[254,45],"m":"cp","o":"$2D"},{"a":59260,"t":"code","b":[48,1],"m":"jr","oa":59263,"o":"nc,$E77F"},{"a":59262,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":59263,"t":"code","b":[124],"m":"ld","o":"a,h","x":[59255,59260]},{"a":59264,"t":"code","b":[77],"m":"ld","o":"c,l"},{"a":59265,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":59267,"t":"code","b":[23],"m":"rla"},{"a":59268,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":59270,"t":"code","b":[23],"m":"rla"},{"a":59271,"t":"code","b":[47],"m":"cpl"},{"a":59272,"t":"code","b":[198,10],"m":"add","o":"a,$0A"},{"a":59274,"t":"code","b":[8],"m":"ex","o":"af,af'","x":[59251]},{"a":59275,"t":"code","b":[29],"m":"dec","o":"e"},{"a":59276,"t":"code","b":[32,197],"m":"jr","oa":59219,"o":"nz,$E753"},{"a":59278,"t":"code","b":[21],"m":"dec","o":"d"},{"a":59279,"t":"code","b":[32,194],"m":"jr","oa":59219,"o":"nz,$E753"},{"a":59281,"t":"code","b":[205,28,229],"m":"call","oa":58652,"o":"menu_poll_keys"},{"a":59284,"t":"code","b":[201],"m":"ret"},{"a":59285,"l":"message_pointers","c":"Ten addresses, the messages the printer at $E95D reaches as codes $80 to $89: $E7A9 twice ('<SPACE>'), $E7B1 ('<SYM SHIFT>'), $E7BD ('<CAPS SHIFT>'), $E7CA ('<ENTER>'), $E7D2 ('ER......'), $E7DB (the menu page), $E882 (the key redefiner page), $E92C (three solid blocks) and $7CE0, the text of the forgery warning. $E961 indexes the table with twice the low seven bits of the code. $86 and $87 are the only codes passed to $E930; $81 to $85 and $88 occur inside messages or come from the key name table at $7BB0. Inside a message $80 is the cursor command, so the first word cannot be reached from text, and nothing asks for $89: the forgery screen prints its text with its own routine at $7CB3.","t":"addr","b":[169,231],"oa":59305,"o":"key_name_space"},{"a":59287,"t":"addr","b":[169,231],"oa":59305,"o":"key_name_space"},{"a":59289,"t":"addr","b":[177,231],"oa":59313,"o":"key_name_sym_shift"},{"a":59291,"t":"addr","b":[189,231],"oa":59325,"o":"key_name_caps_shift"},{"a":59293,"t":"addr","b":[202,231],"oa":59338,"o":"key_name_enter"},{"a":59295,"t":"addr","b":[210,231],"oa":59346,"o":"control_name_suffix"},{"a":59297,"t":"addr","b":[219,231],"oa":59355,"o":"menu_page_message"},{"a":59299,"t":"addr","b":[130,232],"oa":59522,"o":"redefiner_page_message"},{"a":59301,"t":"addr","b":[44,233],"oa":59692,"o":"key_wanted_message"},{"a":59303,"t":"addr","b":[224,124],"oa":31968,"o":"forgery_warning_text"},{"a":59305,"l":"key_name_space","c":"'<SPACE>', messages $80 and $81: both of the first two table words point here. $81 is the display code of key $20 in the table at $7BB0, the default in the BLAST row's key slot at $E8A2, and the key named in the first help line at $E903.","t":"text","b":[60,83,80,65,67,69,62],"d":"<SPACE>","enc":"zx","x":[59285,59287]},{"a":59312,"l":"key_name_space_end","c":"$00, the end of '<SPACE>'.","t":"byte","b":[0]},{"a":59313,"l":"key_name_sym_shift","c":"'<SYM SHIFT>', message $82, the display code of key $18 in the table at $7BB0.","t":"text","b":[60,83,89,77,32,83,72,73,70,84,62],"d":"<SYM SHIFT>","enc":"zx","x":[59289]},{"a":59324,"l":"key_name_sym_shift_end","c":"$00, the end of '<SYM SHIFT>'.","t":"byte","b":[0]},{"a":59325,"l":"key_name_caps_shift","c":"'<CAPS SHIFT>', message $83, the display code of key $27 in the table at $7BB0.","t":"text","b":[60,67,65,80,83,32,83,72,73,70,84,62],"d":"<CAPS SHIFT>","enc":"zx","x":[59291]},{"a":59337,"l":"key_name_caps_shift_end","c":"$00, the end of '<CAPS SHIFT>'.","t":"byte","b":[0]},{"a":59338,"l":"key_name_enter","c":"'<ENTER>', message $84, the display code of key $21 in the table at $7BB0 and the key named in the second help line at $E918.","t":"text","b":[60,69,78,84,69,82,62],"d":"<ENTER>","enc":"zx","x":[59293]},{"a":59345,"l":"key_name_enter_end","c":"$00, the end of '<ENTER>'.","t":"byte","b":[0]},{"a":59346,"l":"control_name_suffix","c":"'ER......', message $85: the ending shared by the eight control names of the key redefiner, each of which stores only its stem (BLAST, BURP, FAST, SLOW, RIGHT, LEFT, BOUNC, ABORT), with six full stops that lead across to the key.","t":"text","b":[69,82,46,46,46,46,46,46],"d":"ER......","enc":"zx","x":[59295]},{"a":59354,"l":"control_name_suffix_end","c":"$00, the end of message $85.","t":"byte","b":[0]},{"a":59355,"l":"menu_page_message","c":"Message $86, the menu page, starts here with five control bytes: $FE $0F sets the attribute to $0F, white ink on blue paper, and $80 $04 $F2 puts the cursor at $F204, pixel row 16, column 4.","t":"byte","b":[254,15,128,4,242],"x":[59297]},{"a":59360,"l":"menu_title_text","c":"The title, 24 characters: 'FAT WORM', two spaces, 'BLOWS A SPARKY'. It is printed in white from column 4 on pixel rows 16 to 23.","t":"text","b":[70,65,84,32,87,79,82,77,32,32,66,76,79,87,83,32,65,32,83,80,65,82,75,89],"d":"FAT WORM  BLOWS A SPARKY","enc":"zx"},{"a":59384,"l":"menu_rule_cursor","c":"$80 $24 $F2: the cursor goes to $F224, pixel row 17, column 4, one pixel row below the start of the title.","t":"byte","b":[128,36,242]},{"a":59387,"l":"menu_rule_text","c":"24 underline characters (code $5F). Printed one pixel row lower than the title, their bottom line falls on pixel row 24, just under the title's cells, and rules it off.","t":"text","b":[95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95],"d":"________________________","enc":"zx"},{"a":59411,"l":"menu_credits_setup","c":"$FE $0C sets the attribute to $0C, green ink on blue, and $80 $04 $F5 puts the cursor at $F504, pixel row 40, column 4.","t":"byte","b":[254,12,128,4,245]},{"a":59416,"l":"menu_author_text","c":"'BY JULIAN G TODD', 16 characters, the first of the two green lines.","t":"text","b":[66,89,32,74,85,76,73,65,78,32,71,32,84,79,68,68],"d":"BY JULIAN G TODD","enc":"zx"},{"a":59432,"l":"menu_copyright_cursor","c":"$80 $04 $F6: the cursor goes to $F604, pixel row 48, column 4.","t":"byte","b":[128,4,246]},{"a":59435,"l":"menu_copyright_text","c":"The copyright line, 21 characters: code $7F, the copyright sign in the Spectrum's character set, and 'DURELL SOFTWARE 1986'.","t":"text","b":[127,68,85,82,69,76,76,32,83,79,70,84,87,65,82,69,32,49,57,56,54],"d":"\u00a9DURELL SOFTWARE 1986","enc":"zx"},{"a":59456,"l":"menu_options_setup","c":"$FE $0E sets the attribute to $0E, yellow ink on blue, and $80 $03 $F8 puts the cursor at $F803, pixel row 64, column 3.","t":"byte","b":[254,14,128,3,248]},{"a":59461,"l":"menu_option_redefine_text","c":"17 characters: '1', three spaces and 'REDEFINE KEYS'. The 1 key is tested at $E524.","t":"text","b":[49,32,32,32,82,69,68,69,70,73,78,69,32,75,69,89,83],"d":"1   REDEFINE KEYS","enc":"zx"},{"a":59478,"l":"menu_option_start_cursor","c":"$80 $83 $FB: the cursor goes to $FB83, pixel row 92, column 3. The START GAME line is stored before the KEMPSTON line although it is printed lower down the screen.","t":"byte","b":[128,131,251]},{"a":59481,"l":"menu_option_start_text","c":"14 characters: '0', three spaces and 'START GAME'. The 0 key is tested at $E51C.","t":"text","b":[48,32,32,32,83,84,65,82,84,32,71,65,77,69],"d":"0   START GAME","enc":"zx"},{"a":59495,"l":"menu_kempston_attribute_code","c":"$FE, the attribute command for the KEMPSTON JOYSTICK line; its operand is the byte at $E868.","t":"byte","b":[254]},{"a":59496,"l":"kempston_flag","c":"The attribute of the menu's KEMPSTON JOYSTICK line, which doubles as the joystick switch. $0D, cyan ink, as on the tape, is off; $0E, yellow like the other two options, is on. The 2 key on the menu flips it with XOR 3 at $E533-$E538, and the control reader at $7C2A reads the Kempston port $1F only when it finds $0E here.","t":"byte","b":[13],"x":[31786,58675,58680]},{"a":59497,"l":"menu_option_kempston_cursor","c":"$80 $43 $F9: the cursor goes to $F943, pixel row 74, column 3.","t":"byte","b":[128,67,249]},{"a":59500,"l":"menu_option_kempston_text","c":"21 characters: '2', three spaces and 'KEMPSTON JOYSTICK', printed in whichever attribute $E868 holds. The 2 key is tested at $E52C.","t":"text","b":[50,32,32,32,75,69,77,80,83,84,79,78,32,74,79,89,83,84,73,67,75],"d":"2   KEMPSTON JOYSTICK","enc":"zx"},{"a":59521,"l":"menu_page_end","c":"$00, the end of message $86.","t":"byte","b":[0]},{"a":59522,"l":"redefiner_page_message","c":"Message $87, the key redefiner page, starts here: $FE $0F sets white ink on blue and $80 $07 $F1 puts the cursor at $F107, pixel row 8, column 7.","t":"byte","b":[254,15,128,7,241],"x":[59299]},{"a":59527,"l":"redefiner_title_text","c":"The page's title, 15 characters: 'KEY', three spaces and 'REDEFINER'.","t":"text","b":[75,69,89,32,32,32,82,69,68,69,70,73,78,69,82],"d":"KEY   REDEFINER","enc":"zx"},{"a":59542,"l":"redefiner_rows_setup","c":"$FE $0D sets the attribute to $0D, cyan ink on blue, and $80 $06 $F3 puts the cursor at $F306, pixel row 24, column 6, for the first of the nine rows. The rows that follow are 10 pixel rows apart, so most of them do not start on a character row.","t":"byte","b":[254,13,128,6,243]},{"a":59547,"l":"key_row_blast_name","c":"Row 0 of the key redefiner: its marker byte, '>' on the selected row and a space on the others (written at $E553 and $E567), and the stem BLAST. With message $85 after it the line reads BLASTER. This is also the base of the nine-row table that $E5BB indexes. The row is printed at pixel row 24, column 6.","t":"text","b":[62,66,76,65,83,84],"d":">BLAST","enc":"zx"},{"a":59553,"l":"key_row_blast_suffix_code","c":"Code $85 in the BLAST row: the printer inserts message $85, 'ER......', here.","t":"byte","b":[133]},{"a":59554,"l":"key_row_blast_key","c":"The key slot of the BLAST row, its eighth byte: the display code of the key, $81 on the tape, which prints as '<SPACE>' (key number $20 in the control table at $7BE2, bit 5 of $8057 in play). The redefiner writes $88 here while it waits for a key and then the new key's code from $7BB0.","t":"byte","b":[129]},{"a":59555,"l":"key_row_blast_next_cursor","c":"$80 $46 $F4: the cursor goes to $F446, pixel row 34, column 6, for the BURP row.","t":"byte","b":[128,70,244]},{"a":59558,"l":"key_row_burp_name","c":"Row 1 of the key redefiner: its marker byte, '>' on the selected row and a space on the others (written at $E553 and $E567), and the stem BURP. With message $85 after it the line reads BURPER. The row is printed at pixel row 34, column 6.","t":"text","b":[32,66,85,82,80],"d":" BURP","enc":"zx"},{"a":59563,"l":"key_row_burp_suffix_code","c":"Code $85 in the BURP row: the printer inserts message $85, 'ER......', here.","t":"byte","b":[133]},{"a":59564,"l":"key_row_burp_key","c":"A full stop of padding and the key slot of the BURP row at $E8AD, the row's eighth byte: the character shown for the key, '1' on the tape (key number $24 in the control table at $7BE1, bit 6 of $8057 in play). The redefiner writes $88 here while it waits for a key and then the new key's code from $7BB0.","t":"text","b":[46,49],"d":".1","enc":"zx"},{"a":59566,"l":"key_row_burp_next_cursor","c":"$80 $86 $F5: the cursor goes to $F586, pixel row 44, column 6, for the FAST row.","t":"byte","b":[128,134,245]},{"a":59569,"l":"key_row_fast_name","c":"Row 2 of the key redefiner: its marker byte, '>' on the selected row and a space on the others (written at $E553 and $E567), and the stem FAST. With message $85 after it the line reads FASTER. The row is printed at pixel row 44, column 6.","t":"text","b":[32,70,65,83,84],"d":" FAST","enc":"zx"},{"a":59574,"l":"key_row_fast_suffix_code","c":"Code $85 in the FAST row: the printer inserts message $85, 'ER......', here.","t":"byte","b":[133]},{"a":59575,"l":"key_row_fast_key","c":"A full stop of padding and the key slot of the FAST row at $E8B8, the row's eighth byte: the character shown for the key, 'Q' on the tape (key number $25 in the control table at $7BE5, bit 2 of $8057 in play). The redefiner writes $88 here while it waits for a key and then the new key's code from $7BB0.","t":"text","b":[46,81],"d":".Q","enc":"zx"},{"a":59577,"l":"key_row_fast_next_cursor","c":"$80 $C6 $F6: the cursor goes to $F6C6, pixel row 54, column 6, for the SLOW row.","t":"byte","b":[128,198,246]},{"a":59580,"l":"key_row_slow_name","c":"Row 3 of the key redefiner: its marker byte, '>' on the selected row and a space on the others (written at $E553 and $E567), and the stem SLOW. With message $85 after it the line reads SLOWER. The row is printed at pixel row 54, column 6.","t":"text","b":[32,83,76,79,87],"d":" SLOW","enc":"zx"},{"a":59585,"l":"key_row_slow_suffix_code","c":"Code $85 in the SLOW row: the printer inserts message $85, 'ER......', here.","t":"byte","b":[133]},{"a":59586,"l":"key_row_slow_key","c":"A full stop of padding and the key slot of the SLOW row at $E8C3, the row's eighth byte: the character shown for the key, 'A' on the tape (key number $26 in the control table at $7BE4, bit 3 of $8057 in play). The redefiner writes $88 here while it waits for a key and then the new key's code from $7BB0.","t":"text","b":[46,65],"d":".A","enc":"zx"},{"a":59588,"l":"key_row_slow_next_cursor","c":"$80 $06 $F8: the cursor goes to $F806, pixel row 64, column 6, for the RIGHT row.","t":"byte","b":[128,6,248]},{"a":59591,"l":"key_row_right_name","c":"Row 4 of the key redefiner: its marker byte, '>' on the selected row and a space on the others (written at $E553 and $E567), and the stem RIGHT. With message $85 after it the line reads RIGHTER. The row is printed at pixel row 64, column 6.","t":"text","b":[32,82,73,71,72,84],"d":" RIGHT","enc":"zx"},{"a":59597,"l":"key_row_right_suffix_code","c":"Code $85 in the RIGHT row: the printer inserts message $85, 'ER......', here.","t":"byte","b":[133]},{"a":59598,"l":"key_row_right_key","c":"The key slot of the RIGHT row at $E8CE, the row's eighth byte: the character shown for the key, 'P' on the tape (key number $22 in the control table at $7BE7, bit 0 of $8057 in play). The redefiner writes $88 here while it waits for a key and then the new key's code from $7BB0.","t":"text","b":[80],"d":"P","enc":"zx"},{"a":59599,"l":"key_row_right_next_cursor","c":"$80 $46 $F9: the cursor goes to $F946, pixel row 74, column 6, for the LEFT row.","t":"byte","b":[128,70,249]},{"a":59602,"l":"key_row_left_name","c":"Row 5 of the key redefiner: its marker byte, '>' on the selected row and a space on the others (written at $E553 and $E567), and the stem LEFT. With message $85 after it the line reads LEFTER. The row is printed at pixel row 74, column 6.","t":"text","b":[32,76,69,70,84],"d":" LEFT","enc":"zx"},{"a":59607,"l":"key_row_left_suffix_code","c":"Code $85 in the LEFT row: the printer inserts message $85, 'ER......', here.","t":"byte","b":[133]},{"a":59608,"l":"key_row_left_key","c":"A full stop of padding and the key slot of the LEFT row at $E8D9, the row's eighth byte: the character shown for the key, 'O' on the tape (key number $1A in the control table at $7BE6, bit 1 of $8057 in play). The redefiner writes $88 here while it waits for a key and then the new key's code from $7BB0.","t":"text","b":[46,79],"d":".O","enc":"zx"},{"a":59610,"l":"key_row_left_next_cursor","c":"$80 $86 $FA: the cursor goes to $FA86, pixel row 84, column 6, for the BOUNC row.","t":"byte","b":[128,134,250]},{"a":59613,"l":"key_row_bounc_name","c":"Row 6 of the key redefiner: its marker byte, '>' on the selected row and a space on the others (written at $E553 and $E567), and the stem BOUNC. With message $85 after it the line reads BOUNCER. The row is printed at pixel row 84, column 6.","t":"text","b":[32,66,79,85,78,67],"d":" BOUNC","enc":"zx"},{"a":59619,"l":"key_row_bounc_suffix_code","c":"Code $85 in the BOUNC row: the printer inserts message $85, 'ER......', here.","t":"byte","b":[133]},{"a":59620,"l":"key_row_bounc_key","c":"The key slot of the BOUNC row at $E8E4, the row's eighth byte: the character shown for the key, 'H' on the tape (key number $01 in the control table at $7BE3, bit 4 of $8057 in play). The redefiner writes $88 here while it waits for a key and then the new key's code from $7BB0.","t":"text","b":[72],"d":"H","enc":"zx"},{"a":59621,"l":"key_row_bounc_next_cursor","c":"$80 $C6 $FB: the cursor goes to $FBC6, pixel row 94, column 6, for the ABORT row.","t":"byte","b":[128,198,251]},{"a":59624,"l":"key_row_abort_name","c":"Row 7 of the key redefiner: its marker byte, '>' on the selected row and a space on the others (written at $E553 and $E567), and the stem ABORT. With message $85 after it the line reads ABORTER. The row is printed at pixel row 94, column 6.","t":"text","b":[32,65,66,79,82,84],"d":" ABORT","enc":"zx"},{"a":59630,"l":"key_row_abort_suffix_code","c":"Code $85 in the ABORT row: the printer inserts message $85, 'ER......', here.","t":"byte","b":[133]},{"a":59631,"l":"key_row_abort_key","c":"The key slot of the ABORT row at $E8EF, the row's eighth byte: the character shown for the key, 'G' on the tape (key number $06 in the control table at $7BE0, bit 7 of $8057 in play). The redefiner writes $88 here while it waits for a key and then the new key's code from $7BB0.","t":"text","b":[71],"d":"G","enc":"zx"},{"a":59632,"l":"key_row_abort_next_cursor","c":"$80 $06 $FD: the cursor goes to $FD06, pixel row 104, column 6, for the EXIT row.","t":"byte","b":[128,6,253]},{"a":59635,"l":"key_row_exit_name","c":"Row 8 of the key redefiner: its marker byte and EXIT, with no key slot. $E549 puts a space in the marker each time the redefiner is entered, because leaving through this row leaves '>' in it. ENTER on this row goes back to the menu ($E57F). Printed at pixel row 104, column 6.","t":"text","b":[32,69,88,73,84],"d":" EXIT","enc":"zx","x":[58697]},{"a":59640,"l":"redefiner_help_setup","c":"$FE $4B sets the attribute to $4B, BRIGHT with magenta ink on blue paper, and $80 $03 $FE puts the cursor at $FE03, pixel row 112, column 3.","t":"byte","b":[254,75,128,3,254]},{"a":59645,"l":"redefiner_help_advance_text","c":"'PRESS ', the start of the first help line.","t":"text","b":[80,82,69,83,83,32],"d":"PRESS ","enc":"zx"},{"a":59651,"l":"redefiner_help_advance_key","c":"Code $81 in the first help line: the printer inserts message $81, '<SPACE>'.","t":"byte","b":[129]},{"a":59652,"l":"redefiner_help_advance_tail","c":"' TO ADVANCE', which completes 'PRESS <SPACE> TO ADVANCE'.","t":"text","b":[32,84,79,32,65,68,86,65,78,67,69],"d":" TO ADVANCE","enc":"zx"},{"a":59663,"l":"redefiner_help_change_cursor","c":"$80 $01 $FF: the cursor goes to $FF01, pixel row 120, column 1, the last character row of the buffer. The printer also colours the cell below each character, and below row 15 that wraps to row 0, so this line leaves the attribute $4B in columns 1 to 31 of the top row of the screen.","t":"byte","b":[128,1,255]},{"a":59666,"l":"redefiner_help_change_text","c":"'PRESS ', the start of the second help line.","t":"text","b":[80,82,69,83,83,32],"d":"PRESS ","enc":"zx"},{"a":59672,"l":"redefiner_help_change_key","c":"Code $84 in the second help line: the printer inserts message $84, '<ENTER>'.","t":"byte","b":[132]},{"a":59673,"l":"redefiner_help_change_tail","c":"' TO CHANGE OR EXIT', which completes 'PRESS <ENTER> TO CHANGE OR EXIT', 31 characters from column 1.","t":"text","b":[32,84,79,32,67,72,65,78,71,69,32,79,82,32,69,88,73,84],"d":" TO CHANGE OR EXIT","enc":"zx"},{"a":59691,"l":"redefiner_page_end","c":"$00, the end of message $87.","t":"byte","b":[0]},{"a":59692,"l":"key_wanted_message","c":"Message $88: three bytes of character code $01 and a closing $00. The printer takes the glyph for code $01 from $3C08 in the ROM, below the font, where the 48K ROM holds eight bytes of $FF, so the message draws three solid blocks. $E588 writes $88 into a row's key slot to show them while the redefiner waits for the new key.","t":"byte","b":[1,1,1,0],"x":[59301]},{"a":59696,"l":"show_text_page","c":"Draws a text page; A = the message number. It first sets each of the 512 attribute bytes $5800-$59FF, the top sixteen character rows, to its own ink on blue paper (AND 7, OR 8), which also clears BRIGHT and FLASH. Then it zeroes the frame buffer $F000-$FFFF, prints the message into the buffer with $E95D and copies the buffer to the screen with $E9E8, which also takes one byte of the sound script. The bottom eight rows, the panel, are not touched. Called with $86 from $E516 and $E53D and with $87 from $E557 and $E58D.","t":"code","b":[79],"m":"ld","o":"c,a","x":[58646,58685,58711,58765]},{"a":59697,"t":"code","b":[33,0,88],"m":"ld","o":"hl,$5800"},{"a":59700,"t":"code","b":[69],"m":"ld","o":"b,l"},{"a":59701,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[59715]},{"a":59702,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":59704,"t":"code","b":[246,8],"m":"or","o":"$08"},{"a":59706,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":59707,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":59708,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":59709,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":59711,"t":"code","b":[246,8],"m":"or","o":"$08"},{"a":59713,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":59714,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":59715,"t":"code","b":[16,240],"m":"djnz","oa":59701,"o":"$E935"},{"a":59717,"t":"code","b":[121],"m":"ld","o":"a,c"},{"a":59718,"t":"code","b":[33,0,240],"m":"ld","o":"hl,$F000"},{"a":59721,"t":"code","b":[17,1,240],"m":"ld","o":"de,$F001"},{"a":59724,"t":"code","b":[1,255,15],"m":"ld","o":"bc,$0FFF"},{"a":59727,"t":"code","b":[54,0],"m":"ld","o":"(hl),$00"},{"a":59729,"t":"code","b":[237,176],"m":"ldir"},{"a":59731,"t":"code","b":[205,93,233],"m":"call","oa":59741,"o":"print_message"},{"a":59734,"t":"code","b":[205,232,233],"m":"call","oa":59880,"o":"copy_buffer_to_screen"},{"a":59737,"t":"code","b":[201],"m":"ret"},{"a":59738,"l":"print_cursor","c":"Where the next character goes, as an address in the frame buffer: $F000 + 32 * pixel row + column, so a line can start on any pixel row, not only on a character row. The $80 command in a message sets it ($E979) and each character moves it on by one ($E9E1). It holds $F000 on the tape.","t":"addr","b":[0,240],"oa":61440,"o":"panel_bitmap","x":[59769,59798,59868,59873]},{"a":59740,"l":"print_attribute","c":"The attribute byte written with each character. The $FE command in a message sets it ($E987) and $E9B3 reads it. It holds $0F on the tape.","t":"byte","b":[15],"x":[59783,59827]},{"a":59741,"l":"print_message","c":"The text printer. With bit 7 of A set it prints a message: the low seven bits pick an address from the table at $E795 and the bytes there are read up to a $00. $80 is followed by a two-byte cursor address for $E95A, $FE by an attribute for $E95C, and every other byte is printed by a recursive call, so a code of $81 or more inside a message inserts another message. With bit 7 clear it prints the character A at the cursor. The cursor is an address in the frame buffer; from it the routine works out the attribute cell (bits 8-11 are the character row, bits 0-4 the column) and writes the attribute there and in the cell below, wrapping from row 15 to row 0, because a character need not start on a cell boundary. The glyph is the eight bytes at $3C00 + 8 * A in the ROM, which is the ROM font for codes $20 to $7F. Each byte is ORed with itself shifted one pixel right, which thickens every stroke, and XORed into the buffer on eight successive pixel rows, 32 bytes apart. The cursor then moves one byte on, so the bold characters are still eight pixels wide. Called from $E953 and from itself at $E98E.","t":"code","b":[167],"m":"and","o":"a","x":[59731,59790]},{"a":59742,"t":"code","b":[242,149,233],"m":"jp","oa":59797,"o":"p,$E995"},{"a":59745,"t":"code","b":[33,149,231],"m":"ld","o":"hl,$E795"},{"a":59748,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":59750,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":59751,"t":"code","b":[22,0],"m":"ld","o":"d,$00"},{"a":59753,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":59754,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":59755,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":59756,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":59757,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":59758,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[59774,59786,59794]},{"a":59759,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":59760,"t":"code","b":[167],"m":"and","o":"a"},{"a":59761,"t":"code","b":[200],"m":"ret","o":"z"},{"a":59762,"t":"code","b":[254,128],"m":"cp","o":"$80"},{"a":59764,"t":"code","b":[32,11],"m":"jr","oa":59777,"o":"nz,$E981"},{"a":59766,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":59767,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":59768,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":59769,"t":"code","b":[237,83,90,233],"m":"ld","oa":59738,"o":"(print_cursor),de"},{"a":59773,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":59774,"t":"code","b":[195,110,233],"m":"jp","oa":59758,"o":"$E96E"},{"a":59777,"t":"code","b":[254,254],"m":"cp","o":"$FE","x":[59764]},{"a":59779,"t":"code","b":[32,8],"m":"jr","oa":59789,"o":"nz,$E98D"},{"a":59781,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":59782,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":59783,"t":"code","b":[50,92,233],"m":"ld","oa":59740,"o":"(print_attribute),a"},{"a":59786,"t":"code","b":[195,110,233],"m":"jp","oa":59758,"o":"$E96E"},{"a":59789,"t":"code","b":[229],"m":"push","o":"hl","x":[59779]},{"a":59790,"t":"code","b":[205,93,233],"m":"call","oa":59741,"o":"print_message"},{"a":59793,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":59794,"t":"code","b":[195,110,233],"m":"jp","oa":59758,"o":"$E96E"},{"a":59797,"t":"code","b":[8],"m":"ex","o":"af,af'","x":[59742]},{"a":59798,"t":"code","b":[237,91,90,233],"m":"ld","oa":59738,"o":"de,(print_cursor)"},{"a":59802,"t":"code","b":[14,0],"m":"ld","o":"c,$00"},{"a":59804,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":59805,"t":"code","b":[230,15],"m":"and","o":"$0F"},{"a":59807,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":59809,"t":"code","b":[203,25],"m":"rr","o":"c"},{"a":59811,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":59813,"t":"code","b":[203,25],"m":"rr","o":"c"},{"a":59815,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":59817,"t":"code","b":[203,25],"m":"rr","o":"c"},{"a":59819,"t":"code","b":[246,88],"m":"or","o":"$58"},{"a":59821,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":59822,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":59823,"t":"code","b":[230,31],"m":"and","o":"$1F"},{"a":59825,"t":"code","b":[177],"m":"or","o":"c"},{"a":59826,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":59827,"t":"code","b":[58,92,233],"m":"ld","oa":59740,"o":"a,(print_attribute)"},{"a":59830,"t":"code","b":[2],"m":"ld","o":"(bc),a"},{"a":59831,"t":"code","b":[33,32,0],"m":"ld","o":"hl,$0020"},{"a":59834,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":59835,"t":"code","b":[203,140],"m":"res","o":"1,h"},{"a":59837,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":59838,"t":"code","b":[8],"m":"ex","o":"af,af'"},{"a":59839,"t":"code","b":[1,0,60],"m":"ld","o":"bc,$3C00"},{"a":59842,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":59843,"t":"code","b":[97],"m":"ld","o":"h,c"},{"a":59844,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":59845,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":59846,"t":"code","b":[41],"m":"add","o":"hl,hl"},{"a":59847,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":59848,"t":"code","b":[6,8],"m":"ld","o":"b,$08"},{"a":59850,"t":"code","b":[126],"m":"ld","o":"a,(hl)","x":[59866]},{"a":59851,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":59853,"t":"code","b":[182],"m":"or","o":"(hl)"},{"a":59854,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":59855,"t":"code","b":[79],"m":"ld","o":"c,a"},{"a":59856,"t":"code","b":[26],"m":"ld","o":"a,(de)"},{"a":59857,"t":"code","b":[169],"m":"xor","o":"c"},{"a":59858,"t":"code","b":[18],"m":"ld","o":"(de),a"},{"a":59859,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":59860,"t":"code","b":[198,32],"m":"add","o":"a,$20"},{"a":59862,"t":"code","b":[95],"m":"ld","o":"e,a"},{"a":59863,"t":"code","b":[48,1],"m":"jr","oa":59866,"o":"nc,$E9DA"},{"a":59865,"t":"code","b":[20],"m":"inc","o":"d"},{"a":59866,"t":"code","b":[16,238],"m":"djnz","oa":59850,"o":"$E9CA","x":[59863]},{"a":59868,"t":"code","b":[237,91,90,233],"m":"ld","oa":59738,"o":"de,(print_cursor)"},{"a":59872,"t":"code","b":[19],"m":"inc","o":"de"},{"a":59873,"t":"code","b":[237,83,90,233],"m":"ld","oa":59738,"o":"(print_cursor),de"},{"a":59877,"t":"code","b":[201],"m":"ret"},{"a":59878,"l":"saved_stack_pointer","c":"The stack pointer, kept here while SP is used to move data: by the buffer copy at $E9E8 (saved at $EA21, restored at $EAA3), by the buffer clear at $EAA9 (restored at $EAF0) and by the routine at $D37D (restored at $D3E5).","t":"word","b":[0,0],"d":[0],"x":[54141,54245,59937,60067,60073,60144]},{"a":59880,"l":"copy_buffer_to_screen","c":"Copies the frame buffer to the screen and makes the frame's sound. First the sound script: if the counter at $E4B0 is not 0 it is decremented and the byte at the script pointer $E4AE goes into $8055; when the counter reaches 0 the pointer moves on, the counter is reloaded from $E4B1, and if the next byte is $00 the pointer is replaced by the word after it, a zero high byte there stopping the script. Then the copy. SP is saved at $E9E6 and set to $F000, and 2,048 POPs read the buffer two bytes at a time, 16 POPs to a pixel row, while HL steps through the first two thirds of the display file, $4000-$4FFF, in its own order: eight pixel rows $100 apart, then the next character row, then the second third. Buffer byte $F000 + 32 * y + x lands on pixel row y (0 to 127), column x; the bottom third and the attributes are not written. After each row a counter loaded from $8055 is decremented, and when it reaches 0 it is reloaded and A, 1 at the start, has bits 3-7 flipped and is sent to port $FE. With n in $8055 that is one click every n rows: 128 / n of them, rounded down, for n from 1 to 128, and none for 0 or for more than 128. Interrupts are off throughout the game, so nothing else uses the stack meanwhile. Called from $766B in every frame and from $78EA, $790A, $7920, $D336 and $E956.","t":"code","b":[58,176,228],"m":"ld","oa":58544,"o":"a,(sound_script_counter)","x":[30315,30954,30986,31008,54070,59734]},{"a":59883,"t":"code","b":[61],"m":"dec","o":"a"},{"a":59884,"t":"code","b":[250,24,234],"m":"jp","oa":59928,"o":"m,$EA18"},{"a":59887,"t":"code","b":[50,176,228],"m":"ld","oa":58544,"o":"(sound_script_counter),a"},{"a":59890,"t":"code","b":[42,174,228],"m":"ld","oa":58542,"o":"hl,(sound_script_pointer)"},{"a":59893,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":59894,"t":"code","b":[50,85,128],"m":"ld","oa":32853,"o":"(copy_click_period),a"},{"a":59897,"t":"code","b":[32,29],"m":"jr","oa":59928,"o":"nz,$EA18"},{"a":59899,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":59900,"t":"code","b":[34,174,228],"m":"ld","oa":58542,"o":"(sound_script_pointer),hl"},{"a":59903,"t":"code","b":[58,177,228],"m":"ld","oa":58545,"o":"a,(sound_script_reload)"},{"a":59906,"t":"code","b":[50,176,228],"m":"ld","oa":58544,"o":"(sound_script_counter),a"},{"a":59909,"t":"code","b":[126],"m":"ld","o":"a,(hl)"},{"a":59910,"t":"code","b":[167],"m":"and","o":"a"},{"a":59911,"t":"code","b":[32,15],"m":"jr","oa":59928,"o":"nz,$EA18"},{"a":59913,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":59914,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":59915,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":59916,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":59917,"t":"code","b":[237,83,174,228],"m":"ld","oa":58542,"o":"(sound_script_pointer),de"},{"a":59921,"t":"code","b":[122],"m":"ld","o":"a,d"},{"a":59922,"t":"code","b":[167],"m":"and","o":"a"},{"a":59923,"t":"code","b":[32,3],"m":"jr","oa":59928,"o":"nz,$EA18"},{"a":59925,"t":"code","b":[50,176,228],"m":"ld","oa":58544,"o":"(sound_script_counter),a"},{"a":59928,"t":"code","b":[217],"m":"exx","x":[59884,59897,59911,59923]},{"a":59929,"t":"code","b":[58,85,128],"m":"ld","oa":32853,"o":"a,(copy_click_period)"},{"a":59932,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":59933,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":59934,"t":"code","b":[62,1],"m":"ld","o":"a,$01"},{"a":59936,"t":"code","b":[217],"m":"exx"},{"a":59937,"t":"code","b":[237,115,230,233],"m":"ld","oa":59878,"o":"(saved_stack_pointer),sp"},{"a":59941,"t":"code","b":[49,0,240],"m":"ld","o":"sp,$F000"},{"a":59944,"t":"code","b":[33,0,64],"m":"ld","o":"hl,$4000"},{"a":59947,"t":"code","b":[14,2],"m":"ld","o":"c,$02"},{"a":59949,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":59952,"t":"code","b":[6,8],"m":"ld","o":"b,$08","x":[60054,60064]},{"a":59954,"t":"code","b":[25],"m":"add","o":"hl,de","x":[60048]},{"a":59955,"t":"code","b":[209],"m":"pop","o":"de"},{"a":59956,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":59957,"t":"code","b":[44],"m":"inc","o":"l"},{"a":59958,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":59959,"t":"code","b":[44],"m":"inc","o":"l"},{"a":59960,"t":"code","b":[209],"m":"pop","o":"de"},{"a":59961,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":59962,"t":"code","b":[44],"m":"inc","o":"l"},{"a":59963,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":59964,"t":"code","b":[44],"m":"inc","o":"l"},{"a":59965,"t":"code","b":[209],"m":"pop","o":"de"},{"a":59966,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":59967,"t":"code","b":[44],"m":"inc","o":"l"},{"a":59968,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":59969,"t":"code","b":[44],"m":"inc","o":"l"},{"a":59970,"t":"code","b":[209],"m":"pop","o":"de"},{"a":59971,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":59972,"t":"code","b":[44],"m":"inc","o":"l"},{"a":59973,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":59974,"t":"code","b":[44],"m":"inc","o":"l"},{"a":59975,"t":"code","b":[209],"m":"pop","o":"de"},{"a":59976,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":59977,"t":"code","b":[44],"m":"inc","o":"l"},{"a":59978,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":59979,"t":"code","b":[44],"m":"inc","o":"l"},{"a":59980,"t":"code","b":[209],"m":"pop","o":"de"},{"a":59981,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":59982,"t":"code","b":[44],"m":"inc","o":"l"},{"a":59983,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":59984,"t":"code","b":[44],"m":"inc","o":"l"},{"a":59985,"t":"code","b":[209],"m":"pop","o":"de"},{"a":59986,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":59987,"t":"code","b":[44],"m":"inc","o":"l"},{"a":59988,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":59989,"t":"code","b":[44],"m":"inc","o":"l"},{"a":59990,"t":"code","b":[209],"m":"pop","o":"de"},{"a":59991,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":59992,"t":"code","b":[44],"m":"inc","o":"l"},{"a":59993,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":59994,"t":"code","b":[44],"m":"inc","o":"l"},{"a":59995,"t":"code","b":[209],"m":"pop","o":"de"},{"a":59996,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":59997,"t":"code","b":[44],"m":"inc","o":"l"},{"a":59998,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":59999,"t":"code","b":[44],"m":"inc","o":"l"},{"a":60000,"t":"code","b":[209],"m":"pop","o":"de"},{"a":60001,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":60002,"t":"code","b":[44],"m":"inc","o":"l"},{"a":60003,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":60004,"t":"code","b":[44],"m":"inc","o":"l"},{"a":60005,"t":"code","b":[209],"m":"pop","o":"de"},{"a":60006,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":60007,"t":"code","b":[44],"m":"inc","o":"l"},{"a":60008,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":60009,"t":"code","b":[44],"m":"inc","o":"l"},{"a":60010,"t":"code","b":[209],"m":"pop","o":"de"},{"a":60011,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":60012,"t":"code","b":[44],"m":"inc","o":"l"},{"a":60013,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":60014,"t":"code","b":[44],"m":"inc","o":"l"},{"a":60015,"t":"code","b":[209],"m":"pop","o":"de"},{"a":60016,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":60017,"t":"code","b":[44],"m":"inc","o":"l"},{"a":60018,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":60019,"t":"code","b":[44],"m":"inc","o":"l"},{"a":60020,"t":"code","b":[209],"m":"pop","o":"de"},{"a":60021,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":60022,"t":"code","b":[44],"m":"inc","o":"l"},{"a":60023,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":60024,"t":"code","b":[44],"m":"inc","o":"l"},{"a":60025,"t":"code","b":[209],"m":"pop","o":"de"},{"a":60026,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":60027,"t":"code","b":[44],"m":"inc","o":"l"},{"a":60028,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":60029,"t":"code","b":[44],"m":"inc","o":"l"},{"a":60030,"t":"code","b":[209],"m":"pop","o":"de"},{"a":60031,"t":"code","b":[115],"m":"ld","o":"(hl),e"},{"a":60032,"t":"code","b":[44],"m":"inc","o":"l"},{"a":60033,"t":"code","b":[114],"m":"ld","o":"(hl),d"},{"a":60034,"t":"code","b":[217],"m":"exx"},{"a":60035,"t":"code","b":[45],"m":"dec","o":"l"},{"a":60036,"t":"code","b":[194,140,234],"m":"jp","oa":60044,"o":"nz,$EA8C"},{"a":60039,"t":"code","b":[108],"m":"ld","o":"l,h"},{"a":60040,"t":"code","b":[238,248],"m":"xor","o":"$F8"},{"a":60042,"t":"code","b":[211,254],"m":"out","o":"($FE),a"},{"a":60044,"t":"code","b":[217],"m":"exx","x":[60036]},{"a":60045,"t":"code","b":[17,225,0],"m":"ld","o":"de,$00E1"},{"a":60048,"t":"code","b":[16,160],"m":"djnz","oa":59954,"o":"$EA32"},{"a":60050,"t":"code","b":[17,0,249],"m":"ld","o":"de,$F900"},{"a":60053,"t":"code","b":[44],"m":"inc","o":"l"},{"a":60054,"t":"code","b":[194,48,234],"m":"jp","oa":59952,"o":"nz,$EA30"},{"a":60057,"t":"code","b":[33,0,72],"m":"ld","o":"hl,$4800"},{"a":60060,"t":"code","b":[17,0,0],"m":"ld","o":"de,$0000"},{"a":60063,"t":"code","b":[13],"m":"dec","o":"c"},{"a":60064,"t":"code","b":[194,48,234],"m":"jp","oa":59952,"o":"nz,$EA30"},{"a":60067,"t":"code","b":[237,123,230,233],"m":"ld","oa":59878,"o":"sp,(saved_stack_pointer)"},{"a":60071,"t":"code","b":[201],"m":"ret"},{"a":60072,"l":"unreached_ret","c":"A lone $C9, a RET, after the RET that ends $E9E8. No instruction refers to this address and nothing falls into it; what it is left over from is not established.","t":"byte","b":[201]},{"a":60073,"l":"clear_buffer_draw_floor","c":"Starts a new frame in the buffer. SP is saved at $E9E6 and set to $0000, and 2,048 pushes of $FFFF fill the buffer from $FFFF down to $F000, 16 pushes to a pixel row, so all 256 by 128 pixels start set. After each row a counter loaded from $8056 is decremented and at 0 is reloaded, with bits 3-7 of A (1 at the start) flipped and sent to port $FE, just as the copy at $E9E8 does with $8055: 128 / n clicks for n from 1 to 128 and none otherwise. A row here takes about a third of the time a row of the copy takes, so the same value gives a higher note. With SP restored it calls $EB2B for each of the nine six-byte records at $8069, $806F, $8075, $807B, $8081, $8087, $808D, $8093 and $8099, which the code at $ADD2-$AE3B fills in for the three-by-three block of squares around the one the view is centred in. Called from $7665 in every frame and from $78D3, $7904 and $791A.","t":"code","b":[237,115,230,233],"m":"ld","oa":59878,"o":"(saved_stack_pointer),sp","x":[30309,30931,30980,31002]},{"a":60077,"t":"code","b":[49,0,0],"m":"ld","o":"sp,$0000"},{"a":60080,"t":"code","b":[17,255,255],"m":"ld","o":"de,$FFFF"},{"a":60083,"t":"code","b":[58,86,128],"m":"ld","oa":32854,"o":"a,(clear_click_period)"},{"a":60086,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":60087,"t":"code","b":[103],"m":"ld","o":"h,a"},{"a":60088,"t":"code","b":[62,1],"m":"ld","o":"a,$01"},{"a":60090,"t":"code","b":[6,64],"m":"ld","o":"b,$40"},{"a":60092,"t":"code","b":[213],"m":"push","o":"de","x":[60142]},{"a":60093,"t":"code","b":[213],"m":"push","o":"de"},{"a":60094,"t":"code","b":[213],"m":"push","o":"de"},{"a":60095,"t":"code","b":[213],"m":"push","o":"de"},{"a":60096,"t":"code","b":[213],"m":"push","o":"de"},{"a":60097,"t":"code","b":[213],"m":"push","o":"de"},{"a":60098,"t":"code","b":[213],"m":"push","o":"de"},{"a":60099,"t":"code","b":[213],"m":"push","o":"de"},{"a":60100,"t":"code","b":[213],"m":"push","o":"de"},{"a":60101,"t":"code","b":[213],"m":"push","o":"de"},{"a":60102,"t":"code","b":[213],"m":"push","o":"de"},{"a":60103,"t":"code","b":[213],"m":"push","o":"de"},{"a":60104,"t":"code","b":[213],"m":"push","o":"de"},{"a":60105,"t":"code","b":[213],"m":"push","o":"de"},{"a":60106,"t":"code","b":[213],"m":"push","o":"de"},{"a":60107,"t":"code","b":[213],"m":"push","o":"de"},{"a":60108,"t":"code","b":[45],"m":"dec","o":"l"},{"a":60109,"t":"code","b":[194,213,234],"m":"jp","oa":60117,"o":"nz,$EAD5"},{"a":60112,"t":"code","b":[108],"m":"ld","o":"l,h"},{"a":60113,"t":"code","b":[238,248],"m":"xor","o":"$F8"},{"a":60115,"t":"code","b":[211,254],"m":"out","o":"($FE),a"},{"a":60117,"t":"code","b":[213],"m":"push","o":"de","x":[60109]},{"a":60118,"t":"code","b":[213],"m":"push","o":"de"},{"a":60119,"t":"code","b":[213],"m":"push","o":"de"},{"a":60120,"t":"code","b":[213],"m":"push","o":"de"},{"a":60121,"t":"code","b":[213],"m":"push","o":"de"},{"a":60122,"t":"code","b":[213],"m":"push","o":"de"},{"a":60123,"t":"code","b":[213],"m":"push","o":"de"},{"a":60124,"t":"code","b":[213],"m":"push","o":"de"},{"a":60125,"t":"code","b":[213],"m":"push","o":"de"},{"a":60126,"t":"code","b":[213],"m":"push","o":"de"},{"a":60127,"t":"code","b":[213],"m":"push","o":"de"},{"a":60128,"t":"code","b":[213],"m":"push","o":"de"},{"a":60129,"t":"code","b":[213],"m":"push","o":"de"},{"a":60130,"t":"code","b":[213],"m":"push","o":"de"},{"a":60131,"t":"code","b":[213],"m":"push","o":"de"},{"a":60132,"t":"code","b":[213],"m":"push","o":"de"},{"a":60133,"t":"code","b":[45],"m":"dec","o":"l"},{"a":60134,"t":"code","b":[194,238,234],"m":"jp","oa":60142,"o":"nz,$EAEE"},{"a":60137,"t":"code","b":[108],"m":"ld","o":"l,h"},{"a":60138,"t":"code","b":[238,248],"m":"xor","o":"$F8"},{"a":60140,"t":"code","b":[211,254],"m":"out","o":"($FE),a"},{"a":60142,"t":"code","b":[16,204],"m":"djnz","oa":60092,"o":"$EABC","x":[60134]},{"a":60144,"t":"code","b":[237,123,230,233],"m":"ld","oa":59878,"o":"sp,(saved_stack_pointer)"},{"a":60148,"t":"code","b":[33,105,128],"m":"ld","o":"hl,$8069"},{"a":60151,"t":"code","b":[205,43,235],"m":"call","oa":60203,"o":"draw_floor_square"},{"a":60154,"t":"code","b":[33,111,128],"m":"ld","o":"hl,$806F"},{"a":60157,"t":"code","b":[205,43,235],"m":"call","oa":60203,"o":"draw_floor_square"},{"a":60160,"t":"code","b":[33,117,128],"m":"ld","o":"hl,$8075"},{"a":60163,"t":"code","b":[205,43,235],"m":"call","oa":60203,"o":"draw_floor_square"},{"a":60166,"t":"code","b":[33,123,128],"m":"ld","o":"hl,$807B"},{"a":60169,"t":"code","b":[205,43,235],"m":"call","oa":60203,"o":"draw_floor_square"},{"a":60172,"t":"code","b":[33,129,128],"m":"ld","o":"hl,$8081"},{"a":60175,"t":"code","b":[205,43,235],"m":"call","oa":60203,"o":"draw_floor_square"},{"a":60178,"t":"code","b":[33,135,128],"m":"ld","o":"hl,$8087"},{"a":60181,"t":"code","b":[205,43,235],"m":"call","oa":60203,"o":"draw_floor_square"},{"a":60184,"t":"code","b":[33,141,128],"m":"ld","o":"hl,$808D"},{"a":60187,"t":"code","b":[205,43,235],"m":"call","oa":60203,"o":"draw_floor_square"},{"a":60190,"t":"code","b":[33,147,128],"m":"ld","o":"hl,$8093"},{"a":60193,"t":"code","b":[205,43,235],"m":"call","oa":60203,"o":"draw_floor_square"},{"a":60196,"t":"code","b":[33,153,128],"m":"ld","o":"hl,$8099"},{"a":60199,"t":"code","b":[205,43,235],"m":"call","oa":60203,"o":"draw_floor_square"},{"a":60202,"t":"code","b":[201],"m":"ret"},{"a":60203,"l":"draw_floor_square","c":"Draws the floor of one board square into the buffer. HL = a six-byte record: the x and y of the square's corner in buffer pixels, as signed words, and the square's address, or 0 where the board has no square. It stores x and y in $801B and $801D and each plus 256 in $801F and $8025. For a missing square it sets $80BE to $00FF and calls $8E13, which clears the part of the buffer the square covers; the 0 it writes to $80B4 beforehand is overwritten by the first instruction of $8E13. For a real square it scatters dots: the address goes through $B350 (HL * 1509 + 41) to seed a sequence, the low three bits of the first value plus 7 give the number of dots, 7 to 14, and each later value gives one dot at x plus its low byte and y plus its high byte, cleared through $B9F2 when it lies inside the buffer. The dots depend only on the square's address, so they keep their places on the board as it scrolls. Called nine times by $EAA9.","t":"code","b":[94],"m":"ld","o":"e,(hl)","x":[60151,60157,60163,60169,60175,60181,60187,60193,60199]},{"a":60204,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":60205,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":60206,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":60207,"t":"code","b":[237,83,27,128],"m":"ld","oa":32795,"o":"(shape_x0),de"},{"a":60211,"t":"code","b":[20],"m":"inc","o":"d"},{"a":60212,"t":"code","b":[237,83,31,128],"m":"ld","oa":32799,"o":"(shape_x1),de"},{"a":60216,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":60217,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":60218,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":60219,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":60220,"t":"code","b":[237,83,29,128],"m":"ld","oa":32797,"o":"(shape_y0),de"},{"a":60224,"t":"code","b":[20],"m":"inc","o":"d"},{"a":60225,"t":"code","b":[237,83,37,128],"m":"ld","oa":32805,"o":"(shape_y2),de"},{"a":60229,"t":"code","b":[94],"m":"ld","o":"e,(hl)"},{"a":60230,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":60231,"t":"code","b":[86],"m":"ld","o":"d,(hl)"},{"a":60232,"t":"code","b":[123],"m":"ld","o":"a,e"},{"a":60233,"t":"code","b":[178],"m":"or","o":"d"},{"a":60234,"t":"code","b":[32,13],"m":"jr","oa":60249,"o":"nz,$EB59"},{"a":60236,"t":"code","b":[50,180,128],"m":"ld","oa":32948,"o":"(fill_outline_flag),a"},{"a":60239,"t":"code","b":[33,255,0],"m":"ld","o":"hl,$00FF"},{"a":60242,"t":"code","b":[34,190,128],"m":"ld","oa":32958,"o":"(fill_pattern),hl"},{"a":60245,"t":"code","b":[205,19,142],"m":"call","oa":36371,"o":"draw_rectangle"},{"a":60248,"t":"code","b":[201],"m":"ret"},{"a":60249,"t":"code","b":[235],"m":"ex","o":"de,hl","x":[60234]},{"a":60250,"t":"code","b":[205,80,179],"m":"call","oa":45904,"o":"floor_dot_generator"},{"a":60253,"t":"code","b":[125],"m":"ld","o":"a,l"},{"a":60254,"t":"code","b":[230,7],"m":"and","o":"$07"},{"a":60256,"t":"code","b":[198,7],"m":"add","o":"a,$07"},{"a":60258,"t":"code","b":[71],"m":"ld","o":"b,a"},{"a":60259,"t":"code","b":[197],"m":"push","o":"bc","x":[60283]},{"a":60260,"t":"code","b":[205,80,179],"m":"call","oa":45904,"o":"floor_dot_generator"},{"a":60263,"t":"code","b":[229],"m":"push","o":"hl"},{"a":60264,"t":"code","b":[76],"m":"ld","o":"c,h"},{"a":60265,"t":"code","b":[93],"m":"ld","o":"e,l"},{"a":60266,"t":"code","b":[6,0],"m":"ld","o":"b,$00"},{"a":60268,"t":"code","b":[80],"m":"ld","o":"d,b"},{"a":60269,"t":"code","b":[42,27,128],"m":"ld","oa":32795,"o":"hl,(shape_x0)"},{"a":60272,"t":"code","b":[25],"m":"add","o":"hl,de"},{"a":60273,"t":"code","b":[235],"m":"ex","o":"de,hl"},{"a":60274,"t":"code","b":[42,29,128],"m":"ld","oa":32797,"o":"hl,(shape_y0)"},{"a":60277,"t":"code","b":[9],"m":"add","o":"hl,bc"},{"a":60278,"t":"code","b":[205,242,185],"m":"call","oa":47602,"o":"clear_pixel"},{"a":60281,"t":"code","b":[225],"m":"pop","o":"hl"},{"a":60282,"t":"code","b":[193],"m":"pop","o":"bc"},{"a":60283,"t":"code","b":[16,230],"m":"djnz","oa":60259,"o":"$EB63"},{"a":60285,"t":"code","b":[201],"m":"ret"},{"a":60286,"l":"display_list_head","c":"The head of the display list: the address of the first record to draw. A link whose high byte is 0 ends the list. $AAF9 stores 0 here at the start of each frame's build; the insertion at $B008, the drawing walk at $B300 and the search for the surface under a point at $9A89 all start from this word. The tape image holds $EB8D, the address of the leftover record below, which the game never links.","t":"addr","b":[141,235],"oa":60301,"o":"leftover_list_record","x":[43769]},{"a":60288,"l":"display_list_gap","c":"Thirteen zero bytes between the list's head word and the leftover record at $EB8D. No instruction names them, and the recorded sessions neither read nor wrote them.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":60296,"t":"byte","b":[0,0,0,0,0]},{"a":60301,"l":"leftover_list_record","c":"Fifteen bytes in the shape of a display-list record, left in the image: link 0, a box from -8 to 8 both ways, top height $0C, bottom height $0A and type $FF, which is drawn as nothing. The image's head word at $EB7E points at it. Two instructions load its address, LD HL at $AAF3 and LD IX at $AED8, and each is overwritten by the instruction after it: records are allocated from $EB9C, 15 bytes on. The end-of-game code at $7841-$785B addresses the worm's records one slot low, so it writes this record's type ($EB9B) and source pointer ($EB97-$EB98), and nothing reads them.","t":"byte","b":[0,0,248,255,248,255,8,0],"x":[60286]},{"a":60309,"t":"byte","b":[8,0,0,0,12,10,255]},{"a":60316,"l":"master_tape","c":"The routine that made the master tape. The game never runs it: its only reference is the JP at $757C, and no instruction or stored word in the image names $757C. It disables interrupts, sets the stack to $F000 and walks the board's records from $6464 in 7-byte steps: a record with $F7 in its byte +6 is given a handler address in its bytes +4 and +5, chosen by the code it finds in +5 ($FF: $BD6F, $FE: $BD90, $FD: $BDD1, $FC: $BE07, $0C: left alone, anything else: $BED1); a zero byte ends a group and $FF ends the walk. From $EBF0 it builds the 256-byte bit-reversal table at $6200, then the seven pages of shifted values at $5B00-$61FF. At $EC5B it loads IX with $4000 and DE with $BF68, pushes $EFD8 and jumps to $FA6B, the turbo save routine: 49,000 bytes from $4000 go to tape, and the save returns into the entry stub. The tape therefore holds the tables and the handler addresses already built, and at $EFFE the word $EFD8 that this routine pushed. In play the display list is written over it: the worm's four records are at $EB9C, $EBAB, $EBBA and $EBC9, and the records of the board and of the objects follow them.","t":"code","b":[243],"m":"di","x":[30076]},{"a":60317,"t":"code","b":[49,0,240],"m":"ld","o":"sp,$F000"},{"a":60320,"t":"code","b":[221,33,100,100],"m":"ld","o":"ix,$6464"},{"a":60324,"t":"code","b":[1,7,0],"m":"ld","o":"bc,$0007"},{"a":60327,"t":"code","b":[221,35],"m":"inc","o":"ix"},{"a":60329,"t":"code","b":[221,9],"m":"add","o":"ix,bc","x":[60342,60349,60388,60398]},{"a":60331,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)"},{"a":60334,"t":"code","b":[167],"m":"and","o":"a"},{"a":60335,"t":"code","b":[40,53],"m":"jr","oa":60390,"o":"z,$EBE6"},{"a":60337,"t":"code","b":[221,126,6],"m":"ld","o":"a,(ix+$06)"},{"a":60340,"t":"code","b":[254,247],"m":"cp","o":"$F7"},{"a":60342,"t":"code","b":[32,241],"m":"jr","oa":60329,"o":"nz,$EBA9"},{"a":60344,"t":"code","b":[221,126,5],"m":"ld","o":"a,(ix+$05)"},{"a":60347,"t":"code","b":[254,12],"m":"cp","o":"$0C"},{"a":60349,"t":"code","b":[40,234],"m":"jr","oa":60329,"o":"z,$EBA9"},{"a":60351,"t":"code","b":[17,111,189],"m":"ld","o":"de,$BD6F"},{"a":60354,"t":"code","b":[254,255],"m":"cp","o":"$FF"},{"a":60356,"t":"code","b":[40,24],"m":"jr","oa":60382,"o":"z,$EBDE","x":[30811]},{"a":60358,"t":"code","b":[17,144,189],"m":"ld","o":"de,$BD90"},{"a":60361,"t":"code","b":[254,254],"m":"cp","o":"$FE"},{"a":60363,"t":"code","b":[40,17],"m":"jr","oa":60382,"o":"z,$EBDE"},{"a":60365,"t":"code","b":[17,209,189],"m":"ld","o":"de,$BDD1"},{"a":60368,"t":"code","b":[254,253],"m":"cp","o":"$FD"},{"a":60370,"t":"code","b":[40,10],"m":"jr","oa":60382,"o":"z,$EBDE"},{"a":60372,"t":"code","b":[17,7,190],"m":"ld","o":"de,$BE07"},{"a":60375,"t":"code","b":[254,252],"m":"cp","o":"$FC","x":[30939]},{"a":60377,"t":"code","b":[40,3],"m":"jr","oa":60382,"o":"z,$EBDE"},{"a":60379,"t":"code","b":[17,209,190],"m":"ld","o":"de,$BED1"},{"a":60382,"t":"code","b":[221,115,4],"m":"ld","o":"(ix+$04),e","x":[60356,60363,60370,60377]},{"a":60385,"t":"code","b":[221,114,5],"m":"ld","o":"(ix+$05),d"},{"a":60388,"t":"code","b":[24,195],"m":"jr","oa":60329,"o":"$EBA9"},{"a":60390,"t":"code","b":[221,35],"m":"inc","o":"ix","x":[60335]},{"a":60392,"t":"code","b":[221,35],"m":"inc","o":"ix"},{"a":60394,"t":"code","b":[221,126,0],"m":"ld","o":"a,(ix+$00)"},{"a":60397,"t":"code","b":[60],"m":"inc","o":"a"},{"a":60398,"t":"code","b":[32,185],"m":"jr","oa":60329,"o":"nz,$EBA9"},{"a":60400,"t":"code","b":[33,0,98],"m":"ld","o":"hl,$6200"},{"a":60403,"t":"code","b":[77],"m":"ld","o":"c,l","x":[60439]},{"a":60404,"t":"code","b":[175],"m":"xor","o":"a"},{"a":60405,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":60407,"t":"code","b":[203,31],"m":"rr","o":"a"},{"a":60409,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":60411,"t":"code","b":[203,31],"m":"rr","o":"a"},{"a":60413,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":60415,"t":"code","b":[203,31],"m":"rr","o":"a"},{"a":60417,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":60419,"t":"code","b":[203,31],"m":"rr","o":"a"},{"a":60421,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":60423,"t":"code","b":[203,31],"m":"rr","o":"a"},{"a":60425,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":60427,"t":"code","b":[203,31],"m":"rr","o":"a"},{"a":60429,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":60431,"t":"code","b":[203,31],"m":"rr","o":"a"},{"a":60433,"t":"code","b":[203,33],"m":"sla","o":"c"},{"a":60435,"t":"code","b":[203,31],"m":"rr","o":"a"},{"a":60437,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":60438,"t":"code","b":[44],"m":"inc","o":"l"},{"a":60439,"t":"code","b":[32,218],"m":"jr","oa":60403,"o":"nz,$EBF3"},{"a":60441,"t":"code","b":[38,91],"m":"ld","o":"h,$5B"},{"a":60443,"t":"code","b":[6,0],"m":"ld","o":"b,$00"},{"a":60445,"t":"code","b":[120],"m":"ld","o":"a,b","x":[60505]},{"a":60446,"t":"code","b":[203,199],"m":"set","o":"0,a"},{"a":60448,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":60449,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":60451,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":60452,"t":"code","b":[36],"m":"inc","o":"h"},{"a":60453,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":60455,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":60456,"t":"code","b":[36],"m":"inc","o":"h"},{"a":60457,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":60459,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":60460,"t":"code","b":[36],"m":"inc","o":"h"},{"a":60461,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":60463,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":60464,"t":"code","b":[36],"m":"inc","o":"h"},{"a":60465,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":60467,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":60468,"t":"code","b":[36],"m":"inc","o":"h"},{"a":60469,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":60471,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":60472,"t":"code","b":[36],"m":"inc","o":"h"},{"a":60473,"t":"code","b":[203,63],"m":"srl","o":"a"},{"a":60475,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":60476,"t":"code","b":[120],"m":"ld","o":"a,b"},{"a":60477,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":60479,"t":"code","b":[111],"m":"ld","o":"l,a"},{"a":60480,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":60481,"t":"code","b":[37],"m":"dec","o":"h"},{"a":60482,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":60484,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":60485,"t":"code","b":[37],"m":"dec","o":"h"},{"a":60486,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":60488,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":60489,"t":"code","b":[37],"m":"dec","o":"h"},{"a":60490,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":60492,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":60493,"t":"code","b":[37],"m":"dec","o":"h"},{"a":60494,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":60496,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":60497,"t":"code","b":[37],"m":"dec","o":"h"},{"a":60498,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":60500,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":60501,"t":"code","b":[37],"m":"dec","o":"h"},{"a":60502,"t":"code","b":[203,39],"m":"sla","o":"a"},{"a":60504,"t":"code","b":[119],"m":"ld","o":"(hl),a"},{"a":60505,"t":"code","b":[16,194],"m":"djnz","oa":60445,"o":"$EC1D"},{"a":60507,"t":"code","b":[221,33,0,64],"m":"ld","o":"ix,$4000"},{"a":60511,"t":"code","b":[17,104,191],"m":"ld","o":"de,$BF68"},{"a":60514,"t":"code","b":[33,216,239],"m":"ld","o":"hl,$EFD8"},{"a":60517,"t":"code","b":[229],"m":"push","o":"hl"},{"a":60518,"t":"code","b":[175],"m":"xor","o":"a"},{"a":60519,"t":"code","b":[55],"m":"scf"},{"a":60520,"t":"code","b":[195,107,250],"m":"jp","oa":64107,"o":"$FA6B"},{"a":60523,"t":"gap","n":877},{"a":61400,"l":"entry_stub","c":"Where the loader hands over. The tape's loader pushes $EFD8 before it reads the block and returns here when the block ends, whether or not the load succeeded: its error exits use the same return. Two NOPs, then DI, the stack to $F000, the bitmap $4000-$57FF cleared with LDIR, the 768 attribute bytes from $5800 set to $0E (yellow ink on blue paper), the border set to blue with OUT ($FE), and a jump to $7C92. Interrupts are not enabled again anywhere in the game. In play the stack grows down over this code; the recorded sessions wrote as far down as $EFE8.","t":"code","b":[0],"m":"nop"},{"a":61401,"t":"code","b":[0],"m":"nop"},{"a":61402,"t":"code","b":[243],"m":"di"},{"a":61403,"t":"code","b":[49,0,240],"m":"ld","o":"sp,$F000"},{"a":61406,"t":"code","b":[33,0,64],"m":"ld","o":"hl,$4000"},{"a":61409,"t":"code","b":[17,1,64],"m":"ld","o":"de,$4001"},{"a":61412,"t":"code","b":[1,0,24],"m":"ld","o":"bc,$1800"},{"a":61415,"t":"code","b":[54,0],"m":"ld","o":"(hl),$00"},{"a":61417,"t":"code","b":[237,176],"m":"ldir"},{"a":61419,"t":"code","b":[1,255,2],"m":"ld","o":"bc,$02FF"},{"a":61422,"t":"code","b":[54,14],"m":"ld","o":"(hl),$0E"},{"a":61424,"t":"code","b":[237,176],"m":"ldir"},{"a":61426,"t":"code","b":[62,1],"m":"ld","o":"a,$01"},{"a":61428,"t":"code","b":[211,254],"m":"out","o":"($FE),a"},{"a":61430,"t":"code","b":[195,146,124],"m":"jp","oa":31890,"o":"show_forgery_warning"},{"a":61433,"t":"gap","n":7},{"a":61440,"l":"panel_bitmap","c":"The picture of the bottom panel as loaded: 2,048 bytes of bitmap for the lowest third of the screen (the insert map's frame, the row of lights and the counter window), in the screen's own layout for that third. $7F30 copies it to $5000-$57FF once, on the way from the first screen to the menu, and nothing reads it again: from the first frame of play $F000-$FFFF is the frame buffer for the top two thirds of the screen.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[59738]},{"a":61448,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":61456,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":61464,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":61472,"t":"byte","b":[70,0,0,0,0,0,0,0]},{"a":61480,"t":"byte","b":[0,98,0,0,60,255,0,0]},{"a":61488,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":61496,"t":"byte","b":[0,0,0,0,0,0,255,60]},{"a":61504,"t":"byte","b":[90,0,0,0,1,224,0,0]},{"a":61512,"t":"byte","b":[0,90,0,0,63,227,63,224]},{"a":61520,"t":"byte","b":[252,190,203,44,230,255,63,83]},{"a":61528,"t":"byte","b":[83,83,83,83,255,252,199,252]},{"a":61536,"t":"byte","b":[90,0,0,0,0,192,0,0]},{"a":61544,"t":"byte","b":[0,90,0,0,63,255,63,7]},{"a":61552,"t":"byte","b":[239,179,153,44,190,251,243,115]},{"a":61560,"t":"byte","b":[115,115,115,115,254,252,255,252]},{"a":61568,"t":"byte","b":[90,0,0,0,0,255,255,255]},{"a":61576,"t":"byte","b":[224,90,0,0,60,3,63,63]},{"a":61584,"t":"byte","b":[236,179,248,32,198,24,63,255]},{"a":61592,"t":"byte","b":[255,255,255,255,248,252,192,60]},{"a":61600,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":61608,"t":"byte","b":[0,90,0,0,63,255,63,127]},{"a":61616,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":61624,"t":"byte","b":[255,255,255,255,240,252,255,252]},{"a":61632,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":61640,"t":"byte","b":[0,90,0,0,63,27,63,255]},{"a":61648,"t":"byte","b":[236,231,251,44,178,203,51,115]},{"a":61656,"t":"byte","b":[115,115,115,115,255,252,216,252]},{"a":61664,"t":"byte","b":[78,0,0,0,0,0,0,0]},{"a":61672,"t":"byte","b":[0,114,0,0,63,252,255,255]},{"a":61680,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":61688,"t":"byte","b":[255,255,255,255,255,255,63,252]},{"a":61696,"t":"byte","b":[63,255,255,255,255,255,255,255]},{"a":61704,"t":"byte","b":[255,252,63,255,15,255,255,255]},{"a":61712,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":61720,"t":"byte","b":[255,255,255,255,255,255,255,240]},{"a":61728,"t":"byte","b":[66,0,0,0,0,0,0,0]},{"a":61736,"t":"byte","b":[0,66,0,0,60,63,0,0]},{"a":61744,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":61752,"t":"byte","b":[0,0,0,0,0,0,252,60]},{"a":61760,"t":"byte","b":[90,0,0,0,1,224,0,0]},{"a":61768,"t":"byte","b":[0,90,0,0,63,255,63,128]},{"a":61776,"t":"byte","b":[252,190,203,44,230,255,63,51]},{"a":61784,"t":"byte","b":[51,51,51,51,255,252,255,252]},{"a":61792,"t":"byte","b":[90,0,0,0,0,192,0,0]},{"a":61800,"t":"byte","b":[0,90,0,0,63,255,63,15]},{"a":61808,"t":"byte","b":[224,135,154,44,190,56,63,99]},{"a":61816,"t":"byte","b":[99,99,99,99,254,252,255,252]},{"a":61824,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":61832,"t":"byte","b":[96,90,0,0,63,255,63,63]},{"a":61840,"t":"byte","b":[224,179,251,44,178,203,51,135]},{"a":61848,"t":"byte","b":[135,135,135,135,248,252,255,252]},{"a":61856,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":61864,"t":"byte","b":[0,90,0,0,63,255,63,255]},{"a":61872,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":61880,"t":"byte","b":[255,255,255,255,224,252,255,252]},{"a":61888,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":61896,"t":"byte","b":[0,90,0,0,60,251,63,255]},{"a":61904,"t":"byte","b":[236,131,248,32,198,200,51,135]},{"a":61912,"t":"byte","b":[135,135,135,135,255,252,223,60]},{"a":61920,"t":"byte","b":[93,255,255,255,255,255,255,255]},{"a":61928,"t":"byte","b":[255,186,0,0,63,243,255,255]},{"a":61936,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":61944,"t":"byte","b":[255,255,255,255,255,255,207,252]},{"a":61952,"t":"byte","b":[92,0,0,0,0,0,0,0]},{"a":61960,"t":"byte","b":[0,58,127,255,179,255,255,255]},{"a":61968,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":61976,"t":"byte","b":[255,255,255,255,255,255,255,204]},{"a":61984,"t":"byte","b":[66,0,0,0,0,0,0,0]},{"a":61992,"t":"byte","b":[0,66,62,31,60,15,31,255]},{"a":62000,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":62008,"t":"byte","b":[255,255,255,255,255,248,240,60]},{"a":62016,"t":"byte","b":[90,0,0,0,0,192,0,0]},{"a":62024,"t":"byte","b":[0,90,62,31,63,255,63,128]},{"a":62032,"t":"byte","b":[236,190,203,44,230,203,51,115]},{"a":62040,"t":"byte","b":[115,115,115,115,255,252,255,252]},{"a":62048,"t":"byte","b":[90,0,0,0,0,192,0,0]},{"a":62056,"t":"byte","b":[0,90,63,255,60,63,63,15]},{"a":62064,"t":"byte","b":[252,191,154,44,190,255,63,83]},{"a":62072,"t":"byte","b":[83,83,83,83,252,252,252,60]},{"a":62080,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":62088,"t":"byte","b":[0,90,62,31,63,255,63,63]},{"a":62096,"t":"byte","b":[224,179,251,239,178,203,243,115]},{"a":62104,"t":"byte","b":[115,115,115,115,248,252,255,252]},{"a":62112,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":62120,"t":"byte","b":[0,90,63,255,63,255,63,255]},{"a":62128,"t":"byte","b":[236,131,248,32,198,24,63,255]},{"a":62136,"t":"byte","b":[255,255,255,255,224,252,255,252]},{"a":62144,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":62152,"t":"byte","b":[0,90,63,255,61,251,63,255]},{"a":62160,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":62168,"t":"byte","b":[255,255,255,255,255,252,223,188]},{"a":62176,"t":"byte","b":[123,128,0,0,0,0,0,0]},{"a":62184,"t":"byte","b":[1,222,62,31,63,207,0,0]},{"a":62192,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":62200,"t":"byte","b":[0,0,0,0,0,0,243,252]},{"a":62208,"t":"byte","b":[110,31,255,255,255,255,255,255]},{"a":62216,"t":"byte","b":[248,118,127,255,188,240,0,0]},{"a":62224,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":62232,"t":"byte","b":[0,0,0,0,0,0,15,60]},{"a":62240,"t":"byte","b":[82,0,0,0,0,0,0,0]},{"a":62248,"t":"byte","b":[0,74,127,63,188,3,63,255]},{"a":62256,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":62264,"t":"byte","b":[255,255,255,255,255,252,192,60]},{"a":62272,"t":"byte","b":[90,0,0,0,0,192,0,0]},{"a":62280,"t":"byte","b":[0,90,127,63,191,255,63,1]},{"a":62288,"t":"byte","b":[224,190,203,44,130,8,51,135]},{"a":62296,"t":"byte","b":[135,135,135,135,255,252,255,252]},{"a":62304,"t":"byte","b":[90,0,0,0,0,192,0,0]},{"a":62312,"t":"byte","b":[0,90,127,255,191,195,63,15]},{"a":62320,"t":"byte","b":[252,191,155,44,190,255,63,51]},{"a":62328,"t":"byte","b":[51,51,51,51,252,252,195,252]},{"a":62336,"t":"byte","b":[90,0,36,0,0,0,0,0]},{"a":62344,"t":"byte","b":[0,90,127,63,191,255,63,63]},{"a":62352,"t":"byte","b":[236,131,24,47,178,24,255,99]},{"a":62360,"t":"byte","b":[99,99,99,99,248,252,255,252]},{"a":62368,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":62376,"t":"byte","b":[0,90,127,255,191,255,63,255]},{"a":62384,"t":"byte","b":[236,231,251,44,178,203,51,135]},{"a":62392,"t":"byte","b":[135,135,135,135,192,252,255,252]},{"a":62400,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":62408,"t":"byte","b":[0,90,127,255,189,251,63,255]},{"a":62416,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":62424,"t":"byte","b":[255,255,255,255,255,252,223,188]},{"a":62432,"t":"byte","b":[119,15,255,255,255,255,255,255]},{"a":62440,"t":"byte","b":[240,238,127,63,191,63,255,255]},{"a":62448,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":62456,"t":"byte","b":[255,255,255,255,255,255,252,252]},{"a":62464,"l":"panel_bitmap_lower","c":"The second half of the bottom panel's bitmap, $F400-$F7FF: the same block that starts at $F000, copied to the screen by the same LDIR at $7F39.","t":"byte","b":[119,15,255,255,255,255,255,255]},{"a":62472,"t":"byte","b":[240,238,95,255,191,63,255,255]},{"a":62480,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":62488,"t":"byte","b":[255,255,255,255,255,255,252,252]},{"a":62496,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":62504,"t":"byte","b":[0,90,95,47,189,251,63,255]},{"a":62512,"t":"byte","b":[224,135,24,108,130,8,63,255]},{"a":62520,"t":"byte","b":[255,255,255,255,255,252,223,188]},{"a":62528,"t":"byte","b":[90,0,0,0,0,192,0,0]},{"a":62536,"t":"byte","b":[0,90,95,47,191,255,63,1]},{"a":62544,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":62552,"t":"byte","b":[255,255,255,255,255,252,255,252]},{"a":62560,"t":"byte","b":[90,0,0,0,0,192,0,0]},{"a":62568,"t":"byte","b":[0,90,95,255,191,255,63,31]},{"a":62576,"t":"byte","b":[236,191,155,44,178,203,51,115]},{"a":62584,"t":"byte","b":[115,115,115,115,252,252,255,252]},{"a":62592,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":62600,"t":"byte","b":[0,90,95,47,191,255,63,127]},{"a":62608,"t":"byte","b":[236,243,255,47,178,203,255,83]},{"a":62616,"t":"byte","b":[83,83,83,83,240,252,255,252]},{"a":62624,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":62632,"t":"byte","b":[0,90,95,255,191,255,63,255]},{"a":62640,"t":"byte","b":[236,231,251,239,178,203,243,115]},{"a":62648,"t":"byte","b":[115,115,115,115,192,252,255,252]},{"a":62656,"t":"byte","b":[82,0,0,0,0,0,0,0]},{"a":62664,"t":"byte","b":[0,74,95,255,188,3,63,255]},{"a":62672,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":62680,"t":"byte","b":[255,255,255,255,255,252,192,60]},{"a":62688,"t":"byte","b":[110,31,255,255,255,255,255,255]},{"a":62696,"t":"byte","b":[248,118,95,47,188,240,0,0]},{"a":62704,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":62712,"t":"byte","b":[0,0,0,0,0,0,15,60]},{"a":62720,"t":"byte","b":[123,128,0,0,0,0,0,0]},{"a":62728,"t":"byte","b":[1,222,95,255,191,207,0,0]},{"a":62736,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":62744,"t":"byte","b":[0,0,0,0,0,0,243,252]},{"a":62752,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":62760,"t":"byte","b":[0,90,95,47,189,251,63,255]},{"a":62768,"t":"byte","b":[236,178,203,44,230,203,51,135]},{"a":62776,"t":"byte","b":[135,135,135,135,255,252,223,188]},{"a":62784,"t":"byte","b":[90,0,0,0,0,192,0,0]},{"a":62792,"t":"byte","b":[0,90,95,47,191,255,63,3]},{"a":62800,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":62808,"t":"byte","b":[255,255,255,255,255,252,255,252]},{"a":62816,"t":"byte","b":[90,0,0,0,0,192,0,0]},{"a":62824,"t":"byte","b":[0,90,95,255,191,255,63,31]},{"a":62832,"t":"byte","b":[224,190,11,33,130,8,51,135]},{"a":62840,"t":"byte","b":[135,135,135,135,252,252,255,252]},{"a":62848,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":62856,"t":"byte","b":[0,90,95,47,191,195,63,127]},{"a":62864,"t":"byte","b":[236,243,255,47,178,203,255,51]},{"a":62872,"t":"byte","b":[51,51,51,51,240,252,195,252]},{"a":62880,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":62888,"t":"byte","b":[0,90,95,255,191,255,63,255]},{"a":62896,"t":"byte","b":[224,231,24,47,178,24,255,99]},{"a":62904,"t":"byte","b":[99,99,99,99,129,252,255,252]},{"a":62912,"t":"byte","b":[66,0,0,0,0,0,0,0]},{"a":62920,"t":"byte","b":[0,66,95,255,188,15,31,255]},{"a":62928,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":62936,"t":"byte","b":[255,255,255,255,255,248,240,60]},{"a":62944,"t":"byte","b":[92,0,0,0,0,0,0,0]},{"a":62952,"t":"byte","b":[0,58,95,47,179,255,255,255]},{"a":62960,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":62968,"t":"byte","b":[255,255,255,255,255,255,255,204]},{"a":62976,"t":"byte","b":[93,255,255,255,255,255,255,255]},{"a":62984,"t":"byte","b":[255,186,96,3,191,243,255,255]},{"a":62992,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":63000,"t":"byte","b":[255,255,255,255,255,255,207,252]},{"a":63008,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":63016,"t":"byte","b":[0,90,103,51,188,251,63,255]},{"a":63024,"t":"byte","b":[239,178,203,44,230,251,243,115]},{"a":63032,"t":"byte","b":[115,115,115,115,255,252,223,60]},{"a":63040,"t":"byte","b":[90,0,0,0,0,192,0,0]},{"a":63048,"t":"byte","b":[0,90,103,51,191,255,63,3]},{"a":63056,"t":"byte","b":[224,134,11,33,190,8,63,255]},{"a":63064,"t":"byte","b":[255,255,255,255,254,252,255,252]},{"a":63072,"t":"byte","b":[90,0,0,0,0,192,0,0]},{"a":63080,"t":"byte","b":[96,90,96,3,191,255,63,31]},{"a":63088,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":63096,"t":"byte","b":[255,255,255,255,252,252,255,252]},{"a":63104,"t":"byte","b":[90,0,36,0,0,0,0,0]},{"a":63112,"t":"byte","b":[0,90,103,51,188,63,63,127]},{"a":63120,"t":"byte","b":[236,179,251,44,178,203,51,115]},{"a":63128,"t":"byte","b":[115,115,115,115,240,252,252,60]},{"a":63136,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":63144,"t":"byte","b":[0,90,96,3,191,255,63,255]},{"a":63152,"t":"byte","b":[236,231,255,47,178,203,255,83]},{"a":63160,"t":"byte","b":[83,83,83,83,1,252,255,252]},{"a":63168,"t":"byte","b":[66,0,0,0,0,0,0,0]},{"a":63176,"t":"byte","b":[0,66,96,3,188,63,0,0]},{"a":63184,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63192,"t":"byte","b":[0,0,0,0,0,0,252,60]},{"a":63200,"t":"byte","b":[63,255,255,255,255,255,255,255]},{"a":63208,"t":"byte","b":[255,252,103,51,143,255,255,255]},{"a":63216,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":63224,"t":"byte","b":[255,255,255,255,255,255,255,240]},{"a":63232,"t":"byte","b":[78,0,0,0,0,0,0,0]},{"a":63240,"t":"byte","b":[0,114,63,255,63,252,255,255]},{"a":63248,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":63256,"t":"byte","b":[255,255,255,255,255,255,63,252]},{"a":63264,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":63272,"t":"byte","b":[0,90,62,31,63,27,63,255]},{"a":63280,"t":"byte","b":[224,134,8,97,230,56,63,99]},{"a":63288,"t":"byte","b":[99,99,99,99,255,252,216,252]},{"a":63296,"t":"byte","b":[90,0,0,0,0,192,0,0]},{"a":63304,"t":"byte","b":[0,90,62,31,63,255,63,7]},{"a":63312,"t":"byte","b":[236,179,155,44,190,203,51,135]},{"a":63320,"t":"byte","b":[135,135,135,135,254,252,255,252]},{"a":63328,"t":"byte","b":[90,0,0,0,0,255,255,255]},{"a":63336,"t":"byte","b":[224,90,63,255,63,255,63,63]},{"a":63344,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":63352,"t":"byte","b":[255,255,255,255,248,252,255,252]},{"a":63360,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":63368,"t":"byte","b":[0,90,62,31,63,255,63,127]},{"a":63376,"t":"byte","b":[236,131,248,32,198,200,51,135]},{"a":63384,"t":"byte","b":[135,135,135,135,240,252,255,252]},{"a":63392,"t":"byte","b":[90,0,0,0,0,0,0,0]},{"a":63400,"t":"byte","b":[0,90,63,255,63,227,63,255]},{"a":63408,"t":"byte","b":[236,231,255,47,178,203,255,51]},{"a":63416,"t":"byte","b":[51,51,51,51,7,252,199,252]},{"a":63424,"t":"byte","b":[70,0,0,0,0,0,0,0]},{"a":63432,"t":"byte","b":[0,98,63,255,60,255,0,0]},{"a":63440,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63448,"t":"byte","b":[0,0,0,0,0,0,255,60]},{"a":63456,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63464,"t":"byte","b":[0,0,62,31,0,0,0,0]},{"a":63472,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63480,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":63488,"l":"panel_attributes","c":"The bottom panel's colours: 256 attribute bytes, eight rows of 32 cells, which $7F3B-$7F3E copy to $5A00-$5AFF after the bitmap. $F8FF is the last byte of the picture; the frame buffer covers these addresses in play.","t":"byte","b":[69,69,69,69,69,69,69,69]},{"a":63496,"t":"byte","b":[69,69,69,69,69,69,69,69]},{"a":63504,"t":"byte","b":[69,69,69,69,69,69,69,69]},{"a":63512,"t":"byte","b":[69,69,69,69,69,69,69,69]},{"a":63520,"t":"byte","b":[69,32,64,64,32,32,32,32]},{"a":63528,"t":"byte","b":[32,69,71,7,69,69,6,6]},{"a":63536,"t":"byte","b":[6,6,6,6,6,6,6,6]},{"a":63544,"t":"byte","b":[6,6,6,6,6,6,69,69]},{"a":63552,"t":"byte","b":[69,32,64,64,38,38,38,38]},{"a":63560,"t":"byte","b":[38,69,5,69,69,69,6,62]},{"a":63568,"t":"byte","b":[6,6,6,6,6,6,6,6]},{"a":63576,"t":"byte","b":[6,6,6,6,62,6,69,69]},{"a":63584,"t":"byte","b":[69,32,32,32,32,32,32,32]},{"a":63592,"t":"byte","b":[38,69,67,67,69,125,6,62]},{"a":63600,"t":"byte","b":[6,6,6,6,6,6,6,6]},{"a":63608,"t":"byte","b":[6,6,6,6,62,6,125,69]},{"a":63616,"t":"byte","b":[69,32,39,32,32,32,32,32]},{"a":63624,"t":"byte","b":[38,69,69,67,69,125,6,62]},{"a":63632,"t":"byte","b":[6,6,6,6,6,6,6,6]},{"a":63640,"t":"byte","b":[6,6,6,6,62,6,125,69]},{"a":63648,"t":"byte","b":[69,64,64,64,32,32,64,64]},{"a":63656,"t":"byte","b":[64,69,70,70,69,69,6,62]},{"a":63664,"t":"byte","b":[6,6,6,6,6,6,6,6]},{"a":63672,"t":"byte","b":[6,6,6,6,62,6,69,69]},{"a":63680,"t":"byte","b":[69,64,64,64,32,32,64,64]},{"a":63688,"t":"byte","b":[64,69,6,6,69,69,6,6]},{"a":63696,"t":"byte","b":[6,6,6,6,6,6,6,6]},{"a":63704,"t":"byte","b":[6,6,6,6,6,6,69,69]},{"a":63712,"t":"byte","b":[69,69,69,69,69,69,69,69]},{"a":63720,"t":"byte","b":[69,69,66,68,69,69,69,69]},{"a":63728,"t":"byte","b":[69,69,69,69,69,69,69,69]},{"a":63736,"t":"byte","b":[69,69,69,69,69,69,69,69]},{"a":63744,"t":"gap","n":292},{"a":64036,"l":"tape_utility_entry","c":"The entry of the tape utility the author saved the game with. It is not the game's code and the game never calls it. Called from BASIC, it steps the interpreter past the USR that called it and reads the next character of the line with RST $18: the tokens for SAVE ($F8), LOAD ($EF), VERIFY ($D6) and MERGE ($D5) select $1AE0, $1AE1, $1AE2 or $1AE3 in BC, and anything else jumps to the ROM's 'Nonsense in BASIC' report at $1C8A. $FA60 then stores BC in the system variable at $5C74 and jumps to $FBAB, in the utility's copy of the ROM's cassette code. That copy fills $FA67-$FF43: the ROM's $04C2-$099E moved up by $F5A5, with its internal calls and jumps repointed into the copy and its timing constants changed to save and load faster than the ROM does.","t":"code","b":[58,71,92],"m":"ld","oa":23623,"o":"a,($5C47)"},{"a":64039,"t":"code","b":[60],"m":"inc","o":"a"},{"a":64040,"t":"code","b":[50,71,92],"m":"ld","oa":23623,"o":"($5C47),a"},{"a":64043,"t":"code","b":[33,0,0],"m":"ld","o":"hl,$0000"},{"a":64046,"t":"code","b":[34,11,92],"m":"ld","oa":23563,"o":"($5C0B),hl"},{"a":64049,"t":"code","b":[42,93,92],"m":"ld","oa":23645,"o":"hl,($5C5D)"},{"a":64052,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":64053,"t":"code","b":[34,93,92],"m":"ld","oa":23645,"o":"($5C5D),hl"},{"a":64056,"t":"code","b":[1,224,26],"m":"ld","o":"bc,$1AE0"},{"a":64059,"t":"code","b":[223],"m":"rst","o":"$18"},{"a":64060,"t":"code","b":[35],"m":"inc","o":"hl"},{"a":64061,"t":"code","b":[34,93,92],"m":"ld","oa":23645,"o":"($5C5D),hl"},{"a":64064,"t":"code","b":[254,248],"m":"cp","o":"$F8"},{"a":64066,"t":"code","b":[40,28],"m":"jr","oa":64096,"o":"z,tape_utility_dispatch"},{"a":64068,"t":"code","b":[3],"m":"inc","o":"bc"},{"a":64069,"t":"code","b":[254,239],"m":"cp","o":"$EF"},{"a":64071,"t":"code","b":[40,23],"m":"jr","oa":64096,"o":"z,tape_utility_dispatch"},{"a":64073,"t":"code","b":[3],"m":"inc","o":"bc"},{"a":64074,"t":"code","b":[254,214],"m":"cp","o":"$D6"},{"a":64076,"t":"code","b":[40,18],"m":"jr","oa":64096,"o":"z,tape_utility_dispatch"},{"a":64078,"t":"code","b":[3],"m":"inc","o":"bc"},{"a":64079,"t":"code","b":[254,213],"m":"cp","o":"$D5"},{"a":64081,"t":"code","b":[40,13],"m":"jr","oa":64096,"o":"z,tape_utility_dispatch"},{"a":64083,"t":"code","b":[195,138,28],"m":"jp","oa":7306,"o":"$1C8A"},{"a":64086,"l":"tape_utility_signature","c":"Ten characters between the utility's two pieces of code: the copyright sign (code $7F in the machine's character set), then ' 1983 NMS'. Nothing reads them.","t":"text","b":[127,32,49,57,56,51,32,78,77,83],"d":"\u00a9 1983 NMS","enc":"zx"},{"a":64096,"l":"tape_utility_dispatch","c":"The four token tests at $FA40-$FA51 arrive here with BC holding $1AE0 plus 0 to 3. It stores BC in the system variable at $5C74 and jumps to $FBAB, one byte into the copy of the ROM routine that handles SAVE, LOAD, VERIFY and MERGE (the ROM's $0605, here at $FBAA).","t":"code","b":[237,67,116,92],"m":"ld","oa":23668,"o":"($5C74),bc","x":[64066,64071,64076,64081]},{"a":64100,"t":"code","b":[195,171,251],"m":"jp","oa":64427,"o":"$FBAB"},{"a":64103,"t":"gap","n":1433}]}