ZX-SP-ROMs/inc/rom_routines.inc
2024-10-11 04:59:31 +10:00

1167 lines
27 KiB
PHP

; 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