; ZX Spectrum ROM routines ; By Marcos Cruz (programandala.net) ; ============================================================== ; History ; 2014-12-17: Start. Regulary improved afterwards. ; ; 2015-05-24: Changes to make the file usable as symbols input ; file by z80dasm. ; ; 2015-08-20: Add new routines. ; ; 2015-09-06: Add new routines. ; ; 2016-04-16: Add new routines. ; ; 2016-08-19: Add all remaining routines, extracted from the ROM ; disassembly; remove duplicates; change all hex addresses to ; upper case. Rename `draw` to `draw_line_24BA; use `draw` for ; the official routine. ; 2016-09-02: Rename the entry point of ADD-CHAR at 0F85 with a descriptive ; name. ; ; 2017-02-09: Add two additional entry points, and two 128K routines. ; ============================================================== MACRO RST_ROM name RST #20 DW name ENDM ; ============================================================== MODULE BASIC_FN: ; BASIC 48 x48: .abs EQU #346A .acs EQU #3843 .add_back EQU #3004 .add_ch_1 EQU #0F8B .add_char EQU #0F81 .add_char_keeping_current_mode EQU #0F85 .add_rep_6 EQU #309F .addend_0 EQU #2FF9 .addition EQU #3014 .addn_oflw EQU #303C .all_added EQU #300D .alpha EQU #2C8D .alphanum EQU #2C88 .arc_end EQU #245F .arc_loop EQU #2425 .arc_start EQU #2439 .asn EQU #3833 .atn EQU #37E2 .auto_l_1 EQU #17CE .auto_l_2 EQU #17E1 .auto_l_3 EQU #17E4 .auto_l_4 EQU #17ED .auto_list EQU #1795 .bc_spaces EQU #0030 .be_end EQU #03F6 .be_h_and_l_lp EQU #03D6 .be_ix_plus_0 EQU #03D4 .be_ix_plus_1 EQU #03D3 .be_ix_plus_2 EQU #03D2 .be_ix_plus_3 EQU #03D1 .beep EQU #03F8 .beeper EQU #03B5 .bin_digit EQU #2CA2 .bin_end EQU #2CB3 .bits_zero EQU #3283 .border EQU #2294 .border_1 EQU #22A6 .border_2297 EQU #2297 ; secondary entry to rom_border .border_229b EQU #229B ; secondary entry to rom_border .both_null EQU #3572 .break_key EQU #1F54 ; return the carry flag reset if SHIFT and BREAK keys are both being pressed. .byte_comp EQU #3564 .byte_zero EQU #327E .c_arc_ge1 EQU #235A .c_ent EQU #37B7 .c_r_gre_1 EQU #233B .ca_10_by_a_plus_c EQU #2F8B .calculate EQU #335B .call_jump EQU #162C .call_sub EQU #15F7 .cases EQU #37FA .cat_etc EQU #1793 .cd_prms1 EQU #247D .ch_add_plus_1 EQU #0074 .chan_flag EQU #1615 .chan_k EQU #1634 .chan_op_1 EQU #1610 .chan_open EQU #1601 ; open a channel (channel in A) .chan_p EQU #164D .chan_s EQU #1642 ; set flags for upper screen channel .chan_s_1 EQU #1646 .check_end EQU #1BEE .chn_cd_lu EQU #162D .chrs EQU #35C9 .circle EQU #2320 .cl_09_1 EQU #1CD6 .cl_addr EQU #0E9B .cl_all EQU #0DAF ; clear whole (upper) display area .cl_attr EQU #0E88 .cl_chan EQU #0D94 .cl_chan_a EQU #0DA0 .cl_line EQU #0E44 .cl_line_1 EQU #0E4A .cl_line_2 EQU #0E4D .cl_line_3 EQU #0E80 .cl_sc_all EQU #0DFE .cl_scr_1 EQU #0E05 .cl_scr_2 EQU #0E0D .cl_scr_3 EQU #0E19 .cl_scroll EQU #0E00 ; scroll the number of lines in the B register .cl_set EQU #0DD9 .cl_set_1 EQU #0DEE .cl_set_2 EQU #0DF4 .cl_str_lu EQU #1716 .class_01 EQU #1C1F .class_02 EQU #1C4E .class_03 EQU #1C0D .class_04 EQU #1C6C .class_05 EQU #1C11 .class_07 EQU #1C96 .class_09 EQU #1CBE .class_0b EQU #1CDB .class_tbl EQU #1C01 .clear EQU #1EAC .clear_1 EQU #1EB7 .clear_2 EQU #1EDC .clear_prb EQU #0EDF .clear_run EQU #1EAF .clear_sp EQU #1097 .close EQU #16E5 .close_0_16EB EQU #16EB .close_1 EQU #16FC .close_2 EQU #1701 .close_str EQU #171C .cls EQU #0D6B ; CLS .cls_1 EQU #0D87 .cls_2 EQU #0D89 .cls_3 EQU #0D8E .cls_lower EQU #0D6E .co_change EQU #226C .co_temp_1 EQU #21E1 .co_temp_2 EQU #21E2 .co_temp_3 EQU #21F2 .co_temp_4 EQU #21FC .co_temp_5 EQU #2211 .co_temp_6 EQU #2228 .co_temp_7 EQU #2234 .co_temp_8 EQU #223E .co_temp_9 EQU #2246 .co_temp_a EQU #2257 .co_temp_b EQU #2258 .co_temp_c EQU #2273 .co_temp_d EQU #227D .co_temp_e EQU #2287 .code EQU #3669 .comma_sp EQU #1537 .continue EQU #1E5F .copy EQU #0EAC .copy_1 EQU #0EB2 .copy_2 EQU #0EC9 .copy_3 EQU #0ED3 .copy_buff EQU #0ECD .copy_end EQU #0EDA .copy_l_1 EQU #0EFD .copy_l_2 EQU #0F0C .copy_l_3 EQU #0F14 .copy_l_4 EQU #0F18 .copy_l_5 EQU #0F1E .copy_line EQU #0EF4 .copyright EQU #1539 .cos EQU #37AA .count_one EQU #31FA .cp_lines EQU #1980 .ctlchrtab EQU #0A11 .d_l_diag EQU #24D4 .d_l_hr_vt EQU #24DB .d_l_loop EQU #24CE .d_l_plot EQU #24EC .d_l_range EQU #24F7 .d_l_step EQU #24DF .d_letter EQU #2C1F .d_no_loop EQU #2C2E .d_rport_c EQU #2C05 .d_run EQU #2C15 .d_size EQU #2C2D .data EQU #1E27 .data_1 EQU #1E2C .data_2 EQU #1E37 .de_comma_paren_de_plus_1_parenequ EQU #2AEE .dec_jr_nz EQU #367A .dec_rpt_c EQU #2CCF .dec_sto_1 EQU #2CD5 .dec_to_fp EQU #2C9B .decimal EQU #2CCB .def_fn EQU #1F60 .def_fn_1 EQU #1F6A .def_fn_2 EQU #1F7D .def_fn_3 EQU #1F86 .def_fn_4 EQU #1F89 .def_fn_5 EQU #1F94 .def_fn_6 EQU #1FA6 .def_fn_7 EQU #1FBD .delete EQU #33A1 .differ EQU #19DD .dim EQU #2C02 .dim_clear EQU #2C7C .dim_sizes EQU #2C7F .div_34th EQU #31DB .div_loop EQU #31D2 .div_start EQU #31E2 .division EQU #31AF .divn_expt EQU #313D .dl_larger EQU #24CB .dl_x_ge_y EQU #24C4 .double_a EQU #338C .dr_3_prms EQU #238D .dr_prms EQU #23C1 .dr_sin_nz EQU #23A3 .draw EQU #2382 .draw_line EQU #24B7 .draw_line_24BA EQU #24BA ; entry point of the draw_line routine .draw_save EQU #2497 .drw_steps EQU #2420 .e_divsn EQU #2D6D .e_end EQU #2D7B .e_fetch EQU #2D6E .e_format EQU #2CEB .e_fp_jump EQU #2D18 .e_l_1 EQU #1A15 .e_line_no EQU #19FB .e_loop EQU #2D60 .e_save EQU #2D55 .e_to_fp EQU #2D4F .e_tst_end EQU #2D71 .each_s_1 EQU #1990 .each_s_2 EQU #1998 .each_s_3 EQU #199A .each_s_4 EQU #19A5 .each_s_5 EQU #19AD .each_s_6 EQU #19B1 .each_stmt EQU #198B .ed_again EQU #0F30 .ed_blank EQU #1150 .ed_c_done EQU #117C .ed_c_end EQU #117E .ed_contr EQU #0F6C .ed_copy EQU #111D .ed_cur EQU #1011 .ed_delete EQU #1015 .ed_down EQU #0FF3 .ed_edge EQU #1031 .ed_edge_1 EQU #103E .ed_edge_2 EQU #1051 .ed_edit EQU #0FA9 .ed_end EQU #1026 .ed_enter EQU #1024 .ed_error EQU #107F .ed_full EQU #1167 .ed_graph EQU #107C .ed_ignore EQU #101E .ed_keys EQU #0F92 .ed_keys_t EQU #0FA0 .ed_left EQU #1007 .ed_list EQU #106E .ed_loop EQU #0F38 .ed_right EQU #100C .ed_spaces EQU #115E .ed_stop EQU #1001 .ed_symbol EQU #1076 .ed_up EQU #1059 .editor EQU #0F2C .end_calc EQU #369B .end_compl EQU #30A3 .end_tests EQU #358C .ent_table EQU #338E .error_1 EQU #0008 .error_2 EQU #0053 .error_3 EQU #0055 .error_4 EQU #0058 .ex_or_not EQU #3543 .exchange EQU #343C .exit EQU #36C2 .exp EQU #36C4 .expt_1num EQU #1C82 .expt_2num EQU #1C7A .expt_exp EQU #1C8C .f_found EQU #1D7C .f_l_s EQU #1D34 .f_loop EQU #1D64 .f_reorder EQU #1D16 .f_use_1 EQU #1D10 .fetch_num EQU #1CDE .fetch_two EQU #2FBA .find_i_1 EQU #1E9C .find_int1 EQU #1E94 .find_int2 EQU #1E99 .first_3d EQU #3380 .fn_skpovr EQU #28AB .for EQU #1D03 .form_exp EQU #33DE .fp_0_or_1 EQU #350B .fp_a_end EQU #2DE1 .fp_calc EQU #0028 .fp_calc_2 EQU #33A2 .fp_delete EQU #2DAD .fp_to_a EQU #2DD5 .fp_to_bc EQU #2DA2 .free_mem EQU #1F1A .frst_less EQU #3585 .full_addn EQU #303E .g_loop EQU #3453 .gen_ent_1 EQU #335E .gen_ent_2 EQU #3362 .get_argt EQU #3783 .get_char EQU #0018 .get_hl_by_de EQU #2AF4 .get_mem_xx EQU #340F .get_param EQU #1B55 .go_nc_mlt EQU #30A5 .go_sub EQU #1EED .go_to EQU #1E67 .go_to_2 EQU #1E73 .go_to_bc EQU #1E6A ; 'GO TO' line in BC register .go_to_hl EQU #1E6C ; 'GO TO' line in HL register XXX not tested .gre.8 EQU #373D .greater_0 EQU #34F9 .hl_again EQU #30BC .hl_by_de_to_hl EQU #30A9 ; HL=HL*DE .hl_end EQU #30BE .hl_hl_by_de EQU #30A9 .hl_loop EQU #30B1 .hlxde EQU #30A9 ; HL=HL*DE .i_carry EQU #2AE8 .i_restore EQU #2AEB .if EQU #1CF0 .if_1 EQU #1D00 .in EQU #34A5 .in_assign EQU #21B9 .in_chan_k EQU #21D6 .in_item_1 EQU #20C1 .in_item_2 EQU #20D8 .in_item_3 EQU #20ED .in_next_1 EQU #21AF .in_next_2 EQU #21B2 .in_pk_stk EQU #34B0 .in_pr_1 EQU #211A .in_pr_2 EQU #211C .in_pr_3 EQU #2129 .in_prompt EQU #20FA .in_stop EQU #21D0 .in_var_1 EQU #213A .in_var_2 EQU #2148 .in_var_3 EQU #215E .in_var_4 EQU #2161 .in_var_5 EQU #2174 .in_var_6 EQU #219B .indexer EQU #16DC .indexer_1 EQU #16DB .init_chan EQU #15AF .init_strm EQU #15C6 .input EQU #2089 .input_1 EQU #2096 .input_2 EQU #20AD .input_ad EQU #15E6 .int EQU #36AF .int_case EQU #3483 .int_exp1 EQU #2ACC .int_exp2 EQU #2ACD .int_fetch EQU #2D7F .int_store EQU #2D8E .int_to_fp EQU #2D3B .ix_end EQU #3290 .jump EQU #3686 .jump_2 EQU #3687 .jump_true EQU #368F .k_8_and_9 EQU #0382 .k_@_char EQU #03B2 .k_ch_set EQU #02D1 .k_digit EQU #0367 .k_e_let EQU #0341 .k_end EQU #0308 .k_gra_dgt EQU #0389 .k_klc_dgt EQU #039D .k_klc_let EQU #034F .k_look_up EQU #034A .k_main EQU #032C .k_new EQU #02F1 .k_repeat EQU #0310 .k_st_loop EQU #02C6 .k_tokens EQU #0364 .key_3keys EQU #029F .key_bits EQU #02A1 .key_chan EQU #1113 .key_contr EQU #10FA .key_data EQU #1105 .key_decode EQU #0333 .key_done2 EQU #111B .key_done EQU #02AB .key_flag EQU #10F4 .key_input EQU #10A8 .key_int EQU #0048 .key_line EQU #0296 .key_m_cl EQU #10DB .key_mode EQU #10E6 .key_next EQU #110D .key_scan EQU #028E .key_test EQU #031E .keyboard EQU #02BF .l_add_string EQU #2BAF .l_char EQU #2B3E .l_delete_string EQU #2B72 .l_each_ch EQU #2B0B .l_enter EQU #2BA6 .l_exists EQU #2B66 .l_first EQU #2BEA .l_in_w_or_s EQU #2BA3 .l_length EQU #2B9B .l_new_string EQU #2BC0 .l_no_sp EQU #2B0C .l_numeric EQU #2B59 .l_single EQU #2B4F .l_spaces EQU #2B29 .l_string EQU #2BC6 .l_test_ch EQU #2B1F .last EQU #386C .ld_8_bits EQU #05CA .ld_block EQU #0802 .ld_break EQU #056B .ld_bytes EQU #0556 .ld_ch_pr EQU #07AD .ld_cont_1 EQU #0819 .ld_cont_2 EQU #0825 .ld_contrl EQU #0808 .ld_data EQU #082E .ld_data_1 EQU #084C .ld_dec EQU #05C4 .ld_delay EQU #05E9 .ld_edge_1 EQU #05E7 .ld_edge_2 EQU #05E3 .ld_flag EQU #05B3 .ld_leader EQU #0580 .ld_look_h EQU #0767 .ld_loop EQU #05A9 .ld_marker EQU #05C8 .ld_name EQU #07A6 .ld_next EQU #05C2 .ld_prog EQU #0873 .ld_prog_1 EQU #08AD .ld_sample EQU #05ED .ld_start EQU #056C .ld_sync EQU #058F .ld_type EQU #078A .ld_verify EQU #05BD .ld_wait EQU #0574 .len EQU #3674 .less_0 EQU #3506 .less_mask EQU #328A .let EQU #2AFF .line_ad_1 EQU #1974 .line_addr EQU #196E .line_draw EQU #2477 .line_end EQU #1BB3 .line_new EQU #1B9E .line_no EQU #1695 .line_no_a EQU #1691 .line_run EQU #1B8A .line_scan EQU #1B17 .line_use EQU #1BBF .line_zero EQU #168F .list EQU #17F9 .list_1 EQU #17FB .list_2 EQU #1814 .list_3 EQU #181A .list_4 EQU #181F .list_5 EQU #1822 .list_all EQU #1833 .list_all_2 EQU #1835 .llist EQU #17F5 .ln EQU #3713 .ln_fetch EQU #190F .ln_store EQU #191C .loc_mem EQU #3406 .log_paren_2_power_a_paren EQU #2DC1 .look_p_1 EQU #1D8B .look_p_2 EQU #1DA3 .look_prog EQU #1D86 .look_vars EQU #28B2 .lprint EQU #1FC9 .main_1 EQU #12A9 .main_2 EQU #12AC .main_3 EQU #12CF .main_4 EQU #1303 .main_5 EQU #133C .main_5_1349 EQU #1349 .main_6 EQU #1373 .main_7 EQU #1376 .main_8 EQU #1384 .main_9 EQU #1386 .main_add1 EQU #157D .main_add2 EQU #15AB .main_add EQU #155D .main_exec EQU #12A2 .main_g EQU #1313 ; runtime error (error in A) .main_keys EQU #0205 .make_expt EQU #313B .make_room EQU #1655 .mask_int EQU #0038 .me_contrl EQU #08B6 .me_ent_1 EQU #093E .me_ent_2 EQU #0955 .me_ent_3 EQU #0958 .me_enter EQU #092C .me_new_l2 EQU #08EB .me_new_lp EQU #08D2 .me_old_l1 EQU #08DF .me_old_lp EQU #08D7 .me_old_v1 EQU #0901 .me_old_v2 EQU #0909 .me_old_v3 EQU #0912 .me_old_v4 EQU #091E .me_old_vp EQU #08F9 .me_var_l1 EQU #0921 .me_var_l2 EQU #0923 .me_var_lp EQU #08F0 .mlt_loop EQU #3114 .move_fp EQU #33C0 .mult_long EQU #30F0 .mult_oflw EQU #30EF .mult_rslt EQU #30EA .multiply EQU #30CA .n_mod_m EQU #36A0 .n_negtv EQU #3705 .near_zero EQU #3159 .neg_byte EQU #2FAF .neg_test EQU #3474 .negate EQU #346E .new EQU #11B7 .next EQU #1DAB .next_1 EQU #1DE2 .next_2 EQU #1DE9 .next_2num EQU #1C79 .next_char EQU #0020 .next_line EQU #1BD1 .next_loop EQU #1DDA .next_o_1 EQU #19C7 .next_o_2 EQU #19CE .next_o_3 EQU #19D5 .next_o_4 EQU #19D6 .next_o_5 EQU #19DB .next_one EQU #19B8 .nil_bytes EQU #3272 .nmi_vect EQU #121C .no_add EQU #311B .no_and_no EQU #3524 .no_l_eql_etc EQU #353B .no_reset EQU #0070 .no_rstore EQU #31F9 .normalise EQU #316C .norml_now EQU #3186 .not EQU #3501 .not_bin EQU #2CB8 .not_used EQU #1988 .nu_or_str EQU #354E .number EQU #18B6 .numeric EQU #2D1B .nxt_dgt_1 EQU #2CDA .nxt_dgt_2 EQU #2D40 .offst_tbl EQU #1A48 .oflow_clr EQU #3195 .oflw1_clr EQU #3146 .oflw2_clr EQU #3151 .one EQU #386A .one_shift EQU #2FE5 .one_space EQU #1652 .op_str_lu EQU #177A .open EQU #1736 .open_1 EQU #1756 .open_2 EQU #175D .open_3 EQU #1767 .open_end EQU #178B .open_k EQU #1781 .open_p EQU #1789 .open_s EQU #1785 .or EQU #351B .other_str EQU #35B7 .out EQU #1E7A .out_c_1 EQU #18F3 .out_c_2 EQU #1909 .out_ch_1 EQU #195A .out_ch_2 EQU #1968 .out_ch_3 EQU #196C .out_char EQU #1937 .out_code EQU #15EF .out_curs EQU #18E1 .out_flash EQU #18C1 .out_line1 EQU #1865 .out_line2 EQU #187D .out_line3 EQU #1881 .out_line4 EQU #1894 .out_line5 EQU #18A1 .out_line6 EQU #18B4 .out_line EQU #1855 .out_num_1 EQU #1A1B .out_num_2 EQU #1A28 .out_num_3 EQU #1A30 .out_num_4 EQU #1A42 .out_sp_1 EQU #192B .out_sp_2 EQU #1925 .out_sp_no EQU #192A .p_beep EQU #1AE3 .p_border EQU #1AF5 .p_bright EQU #1AEE .p_cat EQU #1B14 .p_circle EQU #1AE7 .p_clear EQU #1ABB .p_close EQU #1B02 .p_cls EQU #1ABE .p_cont EQU #1AB8 .p_copy EQU #1AD6 .p_data EQU #1ACC .p_def_fn EQU #1AF9 .p_dim EQU #1AA2 .p_draw EQU #1AD2 .p_erase EQU #1B10 .p_flash EQU #1AED .p_for EQU #1A90 .p_format EQU #1B06 .p_go_sub EQU #1A86 .p_go_to EQU #1A7D .p_if EQU #1A81 .p_ink EQU #1AEB .p_input EQU #1A9F .p_int_sto EQU #2D8C .p_inverse EQU #1AEF .p_let EQU #1A7A .p_list EQU #1AAE .p_llist EQU #1ADC .p_load EQU #1AE0 .p_lprint EQU #1AD9 .p_merge EQU #1AE2 .p_move EQU #1B0A .p_new EQU #1AA8 .p_next EQU #1A98 .p_open EQU #1AFC .p_out EQU #1AF1 .p_over EQU #1AF0 .p_paper EQU #1AEC .p_pause EQU #1AC5 .p_plot EQU #1AC1 .p_poke EQU #1AB1 .p_print EQU #1A9C .p_random EQU #1AB5 .p_read EQU #1AC9 .p_rem EQU #1AA5 .p_restore EQU #1ACF .p_return EQU #1A8D .p_run EQU #1AAB .p_save EQU #1ADF .p_stop EQU #1A8A .p_verify EQU #1AE1 .pass_by EQU #1E39 .pause EQU #1F3A .pause_1 EQU #1F3D .pause_2 EQU #1F49 .pause_end EQU #1F4F .peek EQU #34AC .perm EQU #1C96 .pf_all_9 EQU #2EB8 .pf_bits EQU #2E7B .pf_bytes EQU #2E8A .pf_count EQU #2F2D .pf_dc_out EQU #2F5E .pf_dec_0s EQU #2F64 .pf_digits EQU #2EA1 .pf_e_frmt EQU #2F6C .pf_e_pos EQU #2F83 .pf_e_sbrn EQU #2F4A .pf_e_sign EQU #2F85 .pf_fr_dgt EQU #2EEC .pf_fr_exx EQU #2EEF .pf_fractn EQU #2ECF .pf_frn_lp EQU #2EDF .pf_insert EQU #2EA9 .pf_large EQU #2E56 .pf_loop EQU #2E01 .pf_medium EQU #2E6F .pf_more EQU #2ECB .pf_negtve EQU #2DF2 .pf_not_e EQU #2F46 .pf_out_dt EQU #2F59 .pf_out_lp EQU #2F52 .pf_postve EQU #2DF8 .pf_r_back EQU #2F25 .pf_rnd_lp EQU #2F18 .pf_round EQU #2F0C .pf_save EQU #2E1E .pf_small EQU #2E24 .pf_test_2 EQU #2EB3 .pixel_add EQU #22AA .pl_tst_in EQU #22FD .plot EQU #22DC .plot_22df EQU #22DF ; secondary entry to PLOT .plot_end EQU #2303 .plot_loop EQU #22F0 .plot_sub EQU #22E5 ; the plot subroutine (coords in BC) .po_1_oper EQU #0A7A .po_2_oper EQU #0A75 .po_able EQU #0AD9 .po_any EQU #0B24 .po_at_err EQU #0AAC .po_at_set EQU #0ABF .po_attr EQU #0BDB .po_attr_1 EQU #0BFA .po_attr_2 EQU #0C08 .po_back_1 EQU #0A23 .po_back_2 EQU #0A38 .po_back_3 EQU #0A3A .po_change EQU #0A80 .po_char EQU #0B65 .po_char_2 EQU #0B6A .po_char_3 EQU #0B76 .po_comma EQU #0A5F .po_cont EQU #0A87 .po_each EQU #0C22 .po_enter EQU #0A4F .po_f_pr EQU #0B1D .po_fetch EQU #0B03 .po_fill EQU #0AC3 .po_gr_1 EQU #0B38 .po_gr_2 EQU #0B3E .po_gr_3 EQU #0B4C .po_msg EQU #0C0A .po_quest EQU #0A69 .po_right EQU #0A3D .po_save EQU #0C3B .po_scr EQU #0C55 .po_scr_2 EQU #0C88 .po_scr_3 EQU #0CD2 .po_scr_3a EQU #0CF0 .po_scr_4 EQU #0D02 .po_scr_4a EQU #0D1C .po_scr_4b EQU #0D2D .po_search EQU #0C41 .po_space EQU #0AD0 .po_st_e EQU #0AF0 .po_st_pr EQU #0AFC .po_step EQU #0C44 .po_store EQU #0ADC .po_t EQU #0B5F .po_t_and_udg EQU #0B52 .po_t_udg EQU #0B52 .po_tab EQU #0AC2 .po_table EQU #0C14 .po_tokens EQU #0C10 .po_tr_sp EQU #0C35 .po_tv_1 EQU #0A7D .po_tv_2 EQU #0A6D .point_lp EQU #22D4 .point_sub EQU #22CB .point_sub_22ce EQU #22CE ; secondary entry to POINT-SUB .pointers EQU #1664 .poke EQU #1E80 .pr_all EQU #0B7F ; "print all characters" .pr_all_1 EQU #0B93 .pr_all_2 EQU #0BA4 .pr_all_3 EQU #0BB6 .pr_all_4 EQU #0BB7 .pr_all_5 EQU #0BC1 .pr_all_6 EQU #0BD3 .pr_at_tab EQU #201E .pr_end_z EQU #2045 .pr_item_1 EQU #1FFC .pr_item_2 EQU #200E .pr_item_3 EQU #2024 .pr_posn_1 EQU #204E .pr_posn_2 EQU #2061 .pr_posn_3 EQU #2067 .pr_posn_4 EQU #206E .pr_st_end EQU #2048 .pr_string EQU #203C ; print a string (start in DE, count in BC) .prb_bytes EQU #0EE7 .prep_add EQU #2F9B .prep_m_or_d EQU #30C0 .print EQU #1FCD .print_1 EQU #1FCF .print_2 EQU #1FDF .print_3 EQU #1FE5 .print_4 EQU #1FF2 .print_a EQU #0010 .print_a_2 EQU #15F2 .print_cr EQU #1FF5 .print_fp EQU #2DE3 ; print a floating point number .print_out EQU #09F4 .print_string EQU #203C .ptr_done EQU #167F .ptr_next EQU #166B .r_i_store EQU #365F .ram_check EQU #11DA .ram_done EQU #11EF .ram_fill EQU #11DC .ram_read EQU #11E2 .ram_set EQU #1219 .rand_1 EQU #1E5A .randomize EQU #1E4F .re_entry EQU #3365 .re_st_two EQU #3293 .re_stack EQU #3297 .read EQU #1DED .read_1 EQU #1E0A .read_2 EQU #1E1E .read_3 EQU #1DEC .read_in EQU #3645 .rec_edit EQU #16D4 .reclaim_1 EQU #19E5 .reclaim_2 EQU #19E8 .rem EQU #1BB2 .remove_fp EQU #11A7 .report_0 EQU #1BB0 .report_1 EQU #1DD8 .report_2 EQU #1C2E .report_2a EQU #0670 .report_3 EQU #2A20 .report_4 EQU #1F15 .report_5 EQU #0C86 .report_6 EQU #31AD .report_6b EQU #3703 .report_7 EQU #1F36 .report_8 EQU #15E4 .report_a EQU #34E7 .report_ab EQU #371A .report_b EQU #046C .report_bb EQU #1E9F .report_bc EQU #24F9 .report_bd EQU #35DC .report_c EQU #1C8A .report_cb EQU #21CE .report_d EQU #0D00 .report_da EQU #0552 .report_dc EQU #0F0A .report_e EQU #1E08 .report_fa EQU #0642 .report_fb EQU #1765 .report_h EQU #21D4 .report_i EQU #1D84 .report_j EQU #15C4 .report_k EQU #2244 .report_l EQU #1B7B .report_m EQU #1EDA .report_n EQU #1BEC .report_oa EQU #160E .report_ob EQU #1725 .report_p EQU #2812 .report_q EQU #288B .report_r EQU #0806 .reserve EQU #169E .reset EQU #0066 .rest_run EQU #1E45 .restk_sub EQU #3296 .restore EQU #1E42 .result_ok EQU #370C .return EQU #1F23 .rom_trap EQU #1708 .rpt_mesgs EQU #1391 .rs_nrmlse EQU #32B1 .rs_store EQU #32BD .rslt_zero EQU #370E .rstk_loop EQU #32B2 .run EQU #1EA1 .s_2_coord EQU #2522 .s_alphnum EQU #2684 .s_attr EQU #2672 .s_attr_s EQU #2580 .s_attr_s_2583 EQU #2583 ; secondary entry to S-ATTR-S .s_bracket EQU #25E8 .s_cont_1 EQU #26DD .s_cont_2 EQU #2712 .s_cont_3 EQU #2713 .s_decimal EQU #268D .s_fn EQU #25F5 .s_fn_sbrn EQU #27BD .s_ik_dollar_stk EQU #2660 .s_ink_dollar_en EQU #2665 .s_inkey_dollar EQU #2634 .s_letter EQU #26C9 .s_loop EQU #2734 .s_loop_1 EQU #24FF .s_loopend EQU #2770 .s_negate EQU #26DF .s_next EQU #2790 .s_no_to_string EQU #2707 .s_not_and EQU #2788 .s_numeric EQU #26C3 .s_opertr EQU #2723 .s_pi EQU #2627 .s_pi_end EQU #2630 .s_point EQU #267B .s_push_po EQU #270D .s_q_again EQU #25BE .s_q_copy EQU #25CB .s_q_prms EQU #25D9 .s_quote EQU #25B3 .s_quote_s EQU #250F .s_rnd EQU #25F8 .s_rnd_end EQU #2625 .s_rport_c2 EQU #2761 .s_rport_c EQU #252D .s_runtest EQU #2764 .s_sc_mtch EQU #255A .s_sc_rows EQU #255D .s_scr_nxt EQU #2573 .s_scr_sto EQU #257D .s_screen_dollar EQU #2668 .s_scrn_dollar_s EQU #2535 .s_scrn_lp EQU #254F .s_scrn_s EQU #2535 .s_scrn_s_2538 EQU #2538 ; secondary entry to S-SCRN$-S .s_sd_skip EQU #26B6 .s_stk_dec EQU #26B5 .s_stk_lst EQU #274C .s_string EQU #25DB .s_syntest EQU #275B .s_tighter EQU #2773 .s_u_plus EQU #25AF .sa_1_sec EQU #0991 .sa_8_bits EQU #0525 .sa_all EQU #075A ; tape save/load .sa_bit_1 EQU #0514 .sa_bit_2 EQU #0511 .sa_blank EQU #0629 .sa_bytes EQU #04C2 .sa_code EQU #06C3 .sa_code_1 EQU #06E1 .sa_code_2 EQU #06F0 .sa_code_3 EQU #06F5 .sa_code_4 EQU #06F9 .sa_contrl EQU #0970 .sa_data EQU #0652 .sa_data_1 EQU #0692 .sa_delay EQU #053C .sa_flag EQU #04D0 .sa_leader EQU #04D8 .sa_line EQU #0716 .sa_line_1 EQU #0723 .sa_loop EQU #04FE .sa_loop_p EQU #0505 .sa_name EQU #064B .sa_null EQU #0644 .sa_or_ld_end EQU #0554 .sa_or_ld_ret EQU #053F .sa_out EQU #051C .sa_parity EQU #050E .sa_scr_dollar EQU #06A0 .sa_set EQU #051A .sa_space EQU #0621 .sa_start EQU #0507 .sa_sync_1 EQU #04EA .sa_sync_2 EQU #04F2 .sa_type_0 EQU #073A .sa_type_3 EQU #0710 .sa_v_new EQU #0685 .sa_v_old EQU #0672 .sa_v_type EQU #068F .save_etc EQU #0605 .scan_ent EQU #336C .scan_func EQU #2596 .scan_loop EQU #1B52 .scanning EQU #24FB .scrl_mssg EQU #0CF8 .sec_plus EQU #3575 .secnd_low EQU #356B .separator EQU #1B6F .series_xx EQU #3449 .set_de EQU #1195 .set_hl EQU #1190 .set_min EQU #16B0 .set_permanent_colors_0x1CAD EQU #1CAD ; special entry point .set_permanent_colors_1CAD EQU #1CAD ; special entry point .set_stk EQU #16C5 .set_work EQU #16BF .sf_arg_lp EQU #2843 .sf_arg_vl EQU #2852 .sf_argmt1 EQU #2802 .sf_argmts EQU #27D9 .sf_brkt_1 EQU #27D0 .sf_brkt_2 EQU #27E4 .sf_cp_def EQU #2814 .sf_flag_6 EQU #27E9 .sf_fnd_df EQU #2808 .sf_not_fd EQU #2825 .sf_r_br_2 EQU #2885 .sf_rprt_c EQU #27E6 .sf_run EQU #27F7 .sf_syn_en EQU #27F4 .sf_value EQU #288D .sf_values EQU #2831 .sfa_cp_vr EQU #296B .sfa_end EQU #2991 .sfa_loop EQU #295A .sfa_match EQU #2981 .sgn EQU #3492 .shift_fp EQU #2FDD .shift_len EQU #3055 .shift_one EQU #316E .sign_done EQU #2CFE .sign_flag EQU #2CF2 .sign_to_c EQU #3507 .sin EQU #37B5 .skip_cons EQU #33F7 .skip_next EQU #33F8 .skip_over EQU #007D .skip_zero EQU #315E .skips EQU #0090 .sl_define EQU #2A94 .sl_over EQU #2AA8 .sl_rpt_c EQU #2A7A .sl_second EQU #2A81 .sl_store EQU #2AAD .slicing EQU #2A52 .small EQU #37F8 .spare EQU #386E .sqr EQU #384A .st_e_part EQU #2CFF .st_mem_xx EQU #342D .stack_a EQU #2D28 .stack_bc EQU #2D2B ; stack BC register pair .stack_fetch EQU #2BF1 ; get last value from calculator stack .stack_num EQU #33B4 .start EQU #0000 .start_new EQU #11CB .stk_code EQU #3671 .stk_const EQU #33C8 .stk_const_xx EQU #341B .stk_data EQU #33C6 .stk_digit EQU #2D22 .stk_f_arg EQU #2951 .stk_fetch EQU #2BF1 .stk_pntrs EQU #35BF .stk_st_0 EQU #2AB1 .stk_sto_string EQU #2AB2 .stk_store EQU #2AB6 .stk_to_a EQU #2314 .stk_to_bc EQU #2307 .stk_var EQU #2996 .stk_zeros EQU #33F1 .stmt_l_1 EQU #1B29 .stmt_loop EQU #1B28 .stmt_next EQU #1BF4 .stmt_r_1 EQU #1B7D .stmt_ret EQU #1B76 .stop EQU #1CEE .str_alter EQU #2070 .str_and_no EQU #352D .str_data1 EQU #1727 .str_data EQU #171E .str_dollar EQU #361F .str_test EQU #3588 .strings EQU #3559 .strs_add EQU #359C .strt_mlt EQU #3125 .subn_only EQU #31F2 .subtract EQU #300F .sv_arrays EQU #29AE .sv_ch_add EQU #29E0 .sv_close EQU #29D8 .sv_comma EQU #29C3 .sv_count EQU #29E7 .sv_dim EQU #2A48 .sv_elem_string EQU #2A2C .sv_loop EQU #29EA .sv_mult EQU #29FB .sv_number EQU #2A22 .sv_ptr EQU #29C0 .sv_rpt_c EQU #2A12 .sv_simple_string EQU #29A1 .sv_slice EQU #2A45 .sv_slice? EQU #2A49 .swap_byte EQU #343E .syntax_z EQU #2530 .t_expnent EQU #326C .t_first EQU #3233 .t_gr_zero EQU #3221 .t_numeric EQU #3252 .t_shift EQU #3261 .t_small EQU #323F .t_store EQU #3267 .t_test EQU #325E .tan EQU #37DA .tape_msgs EQU #09A1 .tbl_addrs EQU #32D7 .tbl_of_ops EQU #2795 .tbl_priors EQU #27B0 .temp_ptr1 EQU #0077 .temp_ptr2 EQU #0078 .temps EQU #0D4D ; copy the permanent color items to the temporary ones .temps_1 EQU #0D5B .temps_2 EQU #0D65 .test_5_sp EQU #33A9 .test_char EQU #001C .test_neg EQU #307C .test_norm EQU #3155 .test_room EQU #1F05 .test_zero EQU #34E9 .tkn_table EQU #0095 .to_power EQU #3851 .truncate EQU #3214 .two_p_1 EQU #1E8E .two_param EQU #1E85 .unstack_z EQU #1FC3 .use_252 EQU #2495 .use_zero EQU #1CE6 .usr_no EQU #34B3 .usr_range EQU #34D3 .usr_stack EQU #34E4 .usr_string EQU #34BC .v_80_byte EQU #2932 .v_char EQU #28D4 .v_each EQU #2900 .v_end EQU #294B .v_found_1 EQU #293E .v_found_2 EQU #293F .v_get_ptr EQU #2929 .v_matches EQU #2912 .v_next EQU #292A .v_pass EQU #2943 .v_rport_c EQU #360C .v_run EQU #28FD .v_run_or_syn EQU #28EF .v_spaces EQU #2913 .v_str_var EQU #28DE .v_syntax EQU #2934 .v_test_fn EQU #28E3 .val_dollar EQU #35DE .val_fet_1 EQU #1C56 .val_fet_2 EQU #1C59 .valid EQU #371C .var_a_1 EQU #1C22 .var_a_2 EQU #1C30 .var_a_3 EQU #1C46 .vr_cont_1 EQU #07E9 .vr_cont_2 EQU #07F4 .vr_cont_3 EQU #0800 .vr_contrl EQU #07CB .wait_key1 EQU #15DE .wait_key EQU #15D4 .x_large EQU #326D .x_neg EQU #36B7 .xis0 EQU #385D .yneg EQU #37A8 .zero_rslt EQU #315D .zeros_4_or_5 EQU #2FFB .zplus EQU #37A1 .zx81_name EQU #04AA ; BASIC 128 x128: .show_main_menu EQU #259F .ROM_SWAP EQU #5B00 ; 128K paging subroutine in RAM ;._128_new EQU #0057 ENDMODULE