ZX-SP-ROMs/inc/rom_routines.inc
Anatoliy Belyanskiy 125f9faa01 ...
2023-11-07 03:03:24 +10:00

1163 lines
28 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
; ==============================================================
ROUTINE:
.abs EQU 0x346A
.acs EQU 0x3843
.add_back EQU 0x3004
.add_ch_1 EQU 0x0F8B
.add_char EQU 0x0F81
.add_char_keeping_current_mode EQU 0x0F85
.add_rep_6 EQU 0x309F
.addend_0 EQU 0x2FF9
.addition EQU 0x3014
.addn_oflw EQU 0x303C
.all_added EQU 0x300D
.alpha EQU 0x2C8D
.alphanum EQU 0x2C88
.arc_end EQU 0x245F
.arc_loop EQU 0x2425
.arc_start EQU 0x2439
.asn EQU 0x3833
.atn EQU 0x37E2
.auto_l_1 EQU 0x17CE
.auto_l_2 EQU 0x17E1
.auto_l_3 EQU 0x17E4
.auto_l_4 EQU 0x17ED
.auto_list EQU 0x1795
.bc_spaces EQU 0x0030
.be_end EQU 0x03F6
.be_h_and_l_lp EQU 0x03D6
.be_ix_plus_0 EQU 0x03D4
.be_ix_plus_1 EQU 0x03D3
.be_ix_plus_2 EQU 0x03D2
.be_ix_plus_3 EQU 0x03D1
.beep EQU 0x03F8
.beeper EQU 0x03B5
.bin_digit EQU 0x2CA2
.bin_end EQU 0x2CB3
.bits_zero EQU 0x3283
.border EQU 0x2294
.border_1 EQU 0x22A6
.border_2297 EQU 0x2297 ; secondary entry to rom_border
.border_229b EQU 0x229B ; secondary entry to rom_border
.both_null EQU 0x3572
.break_key EQU 0x1F54 ; return the carry flag reset if SHIFT and BREAK keys are both being pressed.
.byte_comp EQU 0x3564
.byte_zero EQU 0x327E
.c_arc_ge1 EQU 0x235A
.c_ent EQU 0x37B7
.c_r_gre_1 EQU 0x233B
.ca_10_by_a_plus_c EQU 0x2F8B
.calculate EQU 0x335B
.call_jump EQU 0x162C
.call_sub EQU 0x15F7
.cases EQU 0x37FA
.cat_etc EQU 0x1793
.cd_prms1 EQU 0x247D
.ch_add_plus_1 EQU 0x0074
.chan_flag EQU 0x1615
.chan_k EQU 0x1634
.chan_op_1 EQU 0x1610
.chan_open EQU 0x1601 ; open a channel (channel in A)
.chan_p EQU 0x164D
.chan_s EQU 0x1642 ; set flags for upper screen channel
.chan_s_1 EQU 0x1646
.check_end EQU 0x1BEE
.chn_cd_lu EQU 0x162D
.chrs EQU 0x35C9
.circle EQU 0x2320
.cl_09_1 EQU 0x1CD6
.cl_addr EQU 0x0E9B
.cl_all EQU 0x0DAF ; clear whole (upper) display area
.cl_attr EQU 0x0E88
.cl_chan EQU 0x0D94
.cl_chan_a EQU 0x0DA0
.cl_line EQU 0x0E44
.cl_line_1 EQU 0x0E4A
.cl_line_2 EQU 0x0E4D
.cl_line_3 EQU 0x0E80
.cl_sc_all EQU 0x0DFE
.cl_scr_1 EQU 0x0E05
.cl_scr_2 EQU 0x0E0D
.cl_scr_3 EQU 0x0E19
.cl_scroll EQU 0x0E00 ; scroll the number of lines in the B register
.cl_set EQU 0x0DD9
.cl_set_1 EQU 0x0DEE
.cl_set_2 EQU 0x0DF4
.cl_str_lu EQU 0x1716
.class_01 EQU 0x1C1F
.class_02 EQU 0x1C4E
.class_03 EQU 0x1C0D
.class_04 EQU 0x1C6C
.class_05 EQU 0x1C11
.class_07 EQU 0x1C96
.class_09 EQU 0x1CBE
.class_0b EQU 0x1CDB
.class_tbl EQU 0x1C01
.clear EQU 0x1EAC
.clear_1 EQU 0x1EB7
.clear_2 EQU 0x1EDC
.clear_prb EQU 0x0EDF
.clear_run EQU 0x1EAF
.clear_sp EQU 0x1097
.close EQU 0x16E5
.close_0_16EB EQU 0x16EB
.close_1 EQU 0x16FC
.close_2 EQU 0x1701
.close_str EQU 0x171C
.cls EQU 0x0D6B ; CLS
.cls_1 EQU 0x0D87
.cls_2 EQU 0x0D89
.cls_3 EQU 0x0D8E
.cls_lower EQU 0x0D6E
.co_change EQU 0x226C
.co_temp_1 EQU 0x21E1
.co_temp_2 EQU 0x21E2
.co_temp_3 EQU 0x21F2
.co_temp_4 EQU 0x21FC
.co_temp_5 EQU 0x2211
.co_temp_6 EQU 0x2228
.co_temp_7 EQU 0x2234
.co_temp_8 EQU 0x223E
.co_temp_9 EQU 0x2246
.co_temp_a EQU 0x2257
.co_temp_b EQU 0x2258
.co_temp_c EQU 0x2273
.co_temp_d EQU 0x227D
.co_temp_e EQU 0x2287
.code EQU 0x3669
.comma_sp EQU 0x1537
.continue EQU 0x1E5F
.copy EQU 0x0EAC
.copy_1 EQU 0x0EB2
.copy_2 EQU 0x0EC9
.copy_3 EQU 0x0ED3
.copy_buff EQU 0x0ECD
.copy_end EQU 0x0EDA
.copy_l_1 EQU 0x0EFD
.copy_l_2 EQU 0x0F0C
.copy_l_3 EQU 0x0F14
.copy_l_4 EQU 0x0F18
.copy_l_5 EQU 0x0F1E
.copy_line EQU 0x0EF4
.copyright EQU 0x1539
.cos EQU 0x37AA
.count_one EQU 0x31FA
.cp_lines EQU 0x1980
.ctlchrtab EQU 0x0A11
.d_l_diag EQU 0x24D4
.d_l_hr_vt EQU 0x24DB
.d_l_loop EQU 0x24CE
.d_l_plot EQU 0x24EC
.d_l_range EQU 0x24F7
.d_l_step EQU 0x24DF
.d_letter EQU 0x2C1F
.d_no_loop EQU 0x2C2E
.d_rport_c EQU 0x2C05
.d_run EQU 0x2C15
.d_size EQU 0x2C2D
.data EQU 0x1E27
.data_1 EQU 0x1E2C
.data_2 EQU 0x1E37
.de_comma_paren_de_plus_1_parenequ EQU 0x2AEE
.dec_jr_nz EQU 0x367A
.dec_rpt_c EQU 0x2CCF
.dec_sto_1 EQU 0x2CD5
.dec_to_fp EQU 0x2C9B
.decimal EQU 0x2CCB
.def_fn EQU 0x1F60
.def_fn_1 EQU 0x1F6A
.def_fn_2 EQU 0x1F7D
.def_fn_3 EQU 0x1F86
.def_fn_4 EQU 0x1F89
.def_fn_5 EQU 0x1F94
.def_fn_6 EQU 0x1FA6
.def_fn_7 EQU 0x1FBD
.delete EQU 0x33A1
.differ EQU 0x19DD
.dim EQU 0x2C02
.dim_clear EQU 0x2C7C
.dim_sizes EQU 0x2C7F
.div_34th EQU 0x31DB
.div_loop EQU 0x31D2
.div_start EQU 0x31E2
.division EQU 0x31AF
.divn_expt EQU 0x313D
.dl_larger EQU 0x24CB
.dl_x_ge_y EQU 0x24C4
.double_a EQU 0x338C
.dr_3_prms EQU 0x238D
.dr_prms EQU 0x23C1
.dr_sin_nz EQU 0x23A3
.draw EQU 0x2382
.draw_line EQU 0x24B7
.draw_line_24BA EQU 0x24BA ; entry point of the draw_line routine
.draw_save EQU 0x2497
.drw_steps EQU 0x2420
.e_divsn EQU 0x2D6D
.e_end EQU 0x2D7B
.e_fetch EQU 0x2D6E
.e_format EQU 0x2CEB
.e_fp_jump EQU 0x2D18
.e_l_1 EQU 0x1A15
.e_line_no EQU 0x19FB
.e_loop EQU 0x2D60
.e_save EQU 0x2D55
.e_to_fp EQU 0x2D4F
.e_tst_end EQU 0x2D71
.each_s_1 EQU 0x1990
.each_s_2 EQU 0x1998
.each_s_3 EQU 0x199A
.each_s_4 EQU 0x19A5
.each_s_5 EQU 0x19AD
.each_s_6 EQU 0x19B1
.each_stmt EQU 0x198B
.ed_again EQU 0x0F30
.ed_blank EQU 0x1150
.ed_c_done EQU 0x117C
.ed_c_end EQU 0x117E
.ed_contr EQU 0x0F6C
.ed_copy EQU 0x111D
.ed_cur EQU 0x1011
.ed_delete EQU 0x1015
.ed_down EQU 0x0FF3
.ed_edge EQU 0x1031
.ed_edge_1 EQU 0x103E
.ed_edge_2 EQU 0x1051
.ed_edit EQU 0x0FA9
.ed_end EQU 0x1026
.ed_enter EQU 0x1024
.ed_error EQU 0x107F
.ed_full EQU 0x1167
.ed_graph EQU 0x107C
.ed_ignore EQU 0x101E
.ed_keys EQU 0x0F92
.ed_keys_t EQU 0x0FA0
.ed_left EQU 0x1007
.ed_list EQU 0x106E
.ed_loop EQU 0x0F38
.ed_right EQU 0x100C
.ed_spaces EQU 0x115E
.ed_stop EQU 0x1001
.ed_symbol EQU 0x1076
.ed_up EQU 0x1059
.editor EQU 0x0F2C
.end_calc EQU 0x369B
.end_compl EQU 0x30A3
.end_tests EQU 0x358C
.ent_table EQU 0x338E
.error_1 EQU 0x0008
.error_2 EQU 0x0053
.error_3 EQU 0x0055
.error_4 EQU 0x0058
.ex_or_not EQU 0x3543
.exchange EQU 0x343C
.exit EQU 0x36C2
.exp EQU 0x36C4
.expt_1num EQU 0x1C82
.expt_2num EQU 0x1C7A
.expt_exp EQU 0x1C8C
.f_found EQU 0x1D7C
.f_l_s EQU 0x1D34
.f_loop EQU 0x1D64
.f_reorder EQU 0x1D16
.f_use_1 EQU 0x1D10
.fetch_num EQU 0x1CDE
.fetch_two EQU 0x2FBA
.find_i_1 EQU 0x1E9C
.find_int1 EQU 0x1E94
.find_int2 EQU 0x1E99
.first_3d EQU 0x3380
.fn_skpovr EQU 0x28AB
.for EQU 0x1D03
.form_exp EQU 0x33DE
.fp_0_or_1 EQU 0x350B
.fp_a_end EQU 0x2DE1
.fp_calc EQU 0x0028
.fp_calc_2 EQU 0x33A2
.fp_delete EQU 0x2DAD
.fp_to_a EQU 0x2DD5
.fp_to_bc EQU 0x2DA2
.free_mem EQU 0x1F1A
.frst_less EQU 0x3585
.full_addn EQU 0x303E
.g_loop EQU 0x3453
.gen_ent_1 EQU 0x335E
.gen_ent_2 EQU 0x3362
.get_argt EQU 0x3783
.get_char EQU 0x0018
.get_hl_by_de EQU 0x2AF4
.get_mem_xx EQU 0x340F
.get_param EQU 0x1B55
.go_nc_mlt EQU 0x30A5
.go_sub EQU 0x1EED
.go_to EQU 0x1E67
.go_to_2 EQU 0x1E73
.go_to_bc EQU 0x1E6A ; 'GO TO' line in BC register
.go_to_hl EQU 0x1E6C ; 'GO TO' line in HL register XXX not tested
.gre.8 EQU 0x373D
.greater_0 EQU 0x34F9
.hl_again EQU 0x30BC
.hl_by_de_to_hl EQU 0x30A9 ; HL=HL*DE
.hl_end EQU 0x30BE
.hl_hl_by_de EQU 0x30A9
.hl_loop EQU 0x30B1
.hlxde EQU 0x30A9 ; HL=HL*DE
.i_carry EQU 0x2AE8
.i_restore EQU 0x2AEB
.if EQU 0x1CF0
.if_1 EQU 0x1D00
.in EQU 0x34A5
.in_assign EQU 0x21B9
.in_chan_k EQU 0x21D6
.in_item_1 EQU 0x20C1
.in_item_2 EQU 0x20D8
.in_item_3 EQU 0x20ED
.in_next_1 EQU 0x21AF
.in_next_2 EQU 0x21B2
.in_pk_stk EQU 0x34B0
.in_pr_1 EQU 0x211A
.in_pr_2 EQU 0x211C
.in_pr_3 EQU 0x2129
.in_prompt EQU 0x20FA
.in_stop EQU 0x21D0
.in_var_1 EQU 0x213A
.in_var_2 EQU 0x2148
.in_var_3 EQU 0x215E
.in_var_4 EQU 0x2161
.in_var_5 EQU 0x2174
.in_var_6 EQU 0x219B
.indexer EQU 0x16DC
.indexer_1 EQU 0x16DB
.init_chan EQU 0x15AF
.init_strm EQU 0x15C6
.input EQU 0x2089
.input_1 EQU 0x2096
.input_2 EQU 0x20AD
.input_ad EQU 0x15E6
.int EQU 0x36AF
.int_case EQU 0x3483
.int_exp1 EQU 0x2ACC
.int_exp2 EQU 0x2ACD
.int_fetch EQU 0x2D7F
.int_store EQU 0x2D8E
.int_to_fp EQU 0x2D3B
.ix_end EQU 0x3290
.jump EQU 0x3686
.jump_2 EQU 0x3687
.jump_true EQU 0x368F
.k_8_and_9 EQU 0x0382
.k_@_char EQU 0x03B2
.k_ch_set EQU 0x02D1
.k_digit EQU 0x0367
.k_e_let EQU 0x0341
.k_end EQU 0x0308
.k_gra_dgt EQU 0x0389
.k_klc_dgt EQU 0x039D
.k_klc_let EQU 0x034F
.k_look_up EQU 0x034A
.k_main EQU 0x032C
.k_new EQU 0x02F1
.k_repeat EQU 0x0310
.k_st_loop EQU 0x02C6
.k_tokens EQU 0x0364
.key_3keys EQU 0x029F
.key_bits EQU 0x02A1
.key_chan EQU 0x1113
.key_contr EQU 0x10FA
.key_data EQU 0x1105
.key_decode EQU 0x0333
.key_done2 EQU 0x111B
.key_done EQU 0x02AB
.key_flag EQU 0x10F4
.key_input EQU 0x10A8
.key_int EQU 0x0048
.key_line EQU 0x0296
.key_m_cl EQU 0x10DB
.key_mode EQU 0x10E6
.key_next EQU 0x110D
.key_scan EQU 0x028E
.key_test EQU 0x031E
.keyboard EQU 0x02BF
.l_add_string EQU 0x2BAF
.l_char EQU 0x2B3E
.l_delete_string EQU 0x2B72
.l_each_ch EQU 0x2B0B
.l_enter EQU 0x2BA6
.l_exists EQU 0x2B66
.l_first EQU 0x2BEA
.l_in_w_or_s EQU 0x2BA3
.l_length EQU 0x2B9B
.l_new_string EQU 0x2BC0
.l_no_sp EQU 0x2B0C
.l_numeric EQU 0x2B59
.l_single EQU 0x2B4F
.l_spaces EQU 0x2B29
.l_string EQU 0x2BC6
.l_test_ch EQU 0x2B1F
.last EQU 0x386C
.ld_8_bits EQU 0x05CA
.ld_block EQU 0x0802
.ld_break EQU 0x056B
.ld_bytes EQU 0x0556
.ld_ch_pr EQU 0x07AD
.ld_cont_1 EQU 0x0819
.ld_cont_2 EQU 0x0825
.ld_contrl EQU 0x0808
.ld_data EQU 0x082E
.ld_data_1 EQU 0x084C
.ld_dec EQU 0x05C4
.ld_delay EQU 0x05E9
.ld_edge_1 EQU 0x05E7
.ld_edge_2 EQU 0x05E3
.ld_flag EQU 0x05B3
.ld_leader EQU 0x0580
.ld_look_h EQU 0x0767
.ld_loop EQU 0x05A9
.ld_marker EQU 0x05C8
.ld_name EQU 0x07A6
.ld_next EQU 0x05C2
.ld_prog EQU 0x0873
.ld_prog_1 EQU 0x08AD
.ld_sample EQU 0x05ED
.ld_start EQU 0x056C
.ld_sync EQU 0x058F
.ld_type EQU 0x078A
.ld_verify EQU 0x05BD
.ld_wait EQU 0x0574
.len EQU 0x3674
.less_0 EQU 0x3506
.less_mask EQU 0x328A
.let EQU 0x2AFF
.line_ad_1 EQU 0x1974
.line_addr EQU 0x196E
.line_draw EQU 0x2477
.line_end EQU 0x1BB3
.line_new EQU 0x1B9E
.line_no EQU 0x1695
.line_no_a EQU 0x1691
.line_run EQU 0x1B8A
.line_scan EQU 0x1B17
.line_use EQU 0x1BBF
.line_zero EQU 0x168F
.list EQU 0x17F9
.list_1 EQU 0x17FB
.list_2 EQU 0x1814
.list_3 EQU 0x181A
.list_4 EQU 0x181F
.list_5 EQU 0x1822
.list_all EQU 0x1833
.list_all_2 EQU 0x1835
.llist EQU 0x17F5
.ln EQU 0x3713
.ln_fetch EQU 0x190F
.ln_store EQU 0x191C
.loc_mem EQU 0x3406
.log_paren_2_power_a_paren EQU 0x2DC1
.look_p_1 EQU 0x1D8B
.look_p_2 EQU 0x1DA3
.look_prog EQU 0x1D86
.look_vars EQU 0x28B2
.lprint EQU 0x1FC9
.main_1 EQU 0x12A9
.main_2 EQU 0x12AC
.main_3 EQU 0x12CF
.main_4 EQU 0x1303
.main_5 EQU 0x133C
.main_5_1349 EQU 0x1349
.main_6 EQU 0x1373
.main_7 EQU 0x1376
.main_8 EQU 0x1384
.main_9 EQU 0x1386
.main_add1 EQU 0x157D
.main_add2 EQU 0x15AB
.main_add EQU 0x155D
.main_exec EQU 0x12A2
.main_g EQU 0x1313 ; runtime error (error in A)
.main_keys EQU 0x0205
.make_expt EQU 0x313B
.make_room EQU 0x1655
.mask_int EQU 0x0038
.me_contrl EQU 0x08B6
.me_ent_1 EQU 0x093E
.me_ent_2 EQU 0x0955
.me_ent_3 EQU 0x0958
.me_enter EQU 0x092C
.me_new_l2 EQU 0x08EB
.me_new_lp EQU 0x08D2
.me_old_l1 EQU 0x08DF
.me_old_lp EQU 0x08D7
.me_old_v1 EQU 0x0901
.me_old_v2 EQU 0x0909
.me_old_v3 EQU 0x0912
.me_old_v4 EQU 0x091E
.me_old_vp EQU 0x08F9
.me_var_l1 EQU 0x0921
.me_var_l2 EQU 0x0923
.me_var_lp EQU 0x08F0
.mlt_loop EQU 0x3114
.move_fp EQU 0x33C0
.mult_long EQU 0x30F0
.mult_oflw EQU 0x30EF
.mult_rslt EQU 0x30EA
.multiply EQU 0x30CA
.n_mod_m EQU 0x36A0
.n_negtv EQU 0x3705
.near_zero EQU 0x3159
.neg_byte EQU 0x2FAF
.neg_test EQU 0x3474
.negate EQU 0x346E
.new EQU 0x11B7
.next EQU 0x1DAB
.next_1 EQU 0x1DE2
.next_2 EQU 0x1DE9
.next_2num EQU 0x1C79
.next_char EQU 0x0020
.next_line EQU 0x1BD1
.next_loop EQU 0x1DDA
.next_o_1 EQU 0x19C7
.next_o_2 EQU 0x19CE
.next_o_3 EQU 0x19D5
.next_o_4 EQU 0x19D6
.next_o_5 EQU 0x19DB
.next_one EQU 0x19B8
.nil_bytes EQU 0x3272
.nmi_vect EQU 0x121C
.no_add EQU 0x311B
.no_and_no EQU 0x3524
.no_l_eql_etc EQU 0x353B
.no_reset EQU 0x0070
.no_rstore EQU 0x31F9
.normalise EQU 0x316C
.norml_now EQU 0x3186
.not EQU 0x3501
.not_bin EQU 0x2CB8
.not_used EQU 0x1988
.nu_or_str EQU 0x354E
.number EQU 0x18B6
.numeric EQU 0x2D1B
.nxt_dgt_1 EQU 0x2CDA
.nxt_dgt_2 EQU 0x2D40
.offst_tbl EQU 0x1A48
.oflow_clr EQU 0x3195
.oflw1_clr EQU 0x3146
.oflw2_clr EQU 0x3151
.one EQU 0x386A
.one_shift EQU 0x2FE5
.one_space EQU 0x1652
.op_str_lu EQU 0x177A
.open EQU 0x1736
.open_1 EQU 0x1756
.open_2 EQU 0x175D
.open_3 EQU 0x1767
.open_end EQU 0x178B
.open_k EQU 0x1781
.open_p EQU 0x1789
.open_s EQU 0x1785
.or EQU 0x351B
.other_str EQU 0x35B7
.out EQU 0x1E7A
.out_c_1 EQU 0x18F3
.out_c_2 EQU 0x1909
.out_ch_1 EQU 0x195A
.out_ch_2 EQU 0x1968
.out_ch_3 EQU 0x196C
.out_char EQU 0x1937
.out_code EQU 0x15EF
.out_curs EQU 0x18E1
.out_flash EQU 0x18C1
.out_line1 EQU 0x1865
.out_line2 EQU 0x187D
.out_line3 EQU 0x1881
.out_line4 EQU 0x1894
.out_line5 EQU 0x18A1
.out_line6 EQU 0x18B4
.out_line EQU 0x1855
.out_num_1 EQU 0x1A1B
.out_num_2 EQU 0x1A28
.out_num_3 EQU 0x1A30
.out_num_4 EQU 0x1A42
.out_sp_1 EQU 0x192B
.out_sp_2 EQU 0x1925
.out_sp_no EQU 0x192A
.p_beep EQU 0x1AE3
.p_border EQU 0x1AF5
.p_bright EQU 0x1AEE
.p_cat EQU 0x1B14
.p_circle EQU 0x1AE7
.p_clear EQU 0x1ABB
.p_close EQU 0x1B02
.p_cls EQU 0x1ABE
.p_cont EQU 0x1AB8
.p_copy EQU 0x1AD6
.p_data EQU 0x1ACC
.p_def_fn EQU 0x1AF9
.p_dim EQU 0x1AA2
.p_draw EQU 0x1AD2
.p_erase EQU 0x1B10
.p_flash EQU 0x1AED
.p_for EQU 0x1A90
.p_format EQU 0x1B06
.p_go_sub EQU 0x1A86
.p_go_to EQU 0x1A7D
.p_if EQU 0x1A81
.p_ink EQU 0x1AEB
.p_input EQU 0x1A9F
.p_int_sto EQU 0x2D8C
.p_inverse EQU 0x1AEF
.p_let EQU 0x1A7A
.p_list EQU 0x1AAE
.p_llist EQU 0x1ADC
.p_load EQU 0x1AE0
.p_lprint EQU 0x1AD9
.p_merge EQU 0x1AE2
.p_move EQU 0x1B0A
.p_new EQU 0x1AA8
.p_next EQU 0x1A98
.p_open EQU 0x1AFC
.p_out EQU 0x1AF1
.p_over EQU 0x1AF0
.p_paper EQU 0x1AEC
.p_pause EQU 0x1AC5
.p_plot EQU 0x1AC1
.p_poke EQU 0x1AB1
.p_print EQU 0x1A9C
.p_random EQU 0x1AB5
.p_read EQU 0x1AC9
.p_rem EQU 0x1AA5
.p_restore EQU 0x1ACF
.p_return EQU 0x1A8D
.p_run EQU 0x1AAB
.p_save EQU 0x1ADF
.p_stop EQU 0x1A8A
.p_verify EQU 0x1AE1
.pass_by EQU 0x1E39
.pause EQU 0x1F3A
.pause_1 EQU 0x1F3D
.pause_2 EQU 0x1F49
.pause_end EQU 0x1F4F
.peek EQU 0x34AC
.perm EQU 0x1C96
.pf_all_9 EQU 0x2EB8
.pf_bits EQU 0x2E7B
.pf_bytes EQU 0x2E8A
.pf_count EQU 0x2F2D
.pf_dc_out EQU 0x2F5E
.pf_dec_0s EQU 0x2F64
.pf_digits EQU 0x2EA1
.pf_e_frmt EQU 0x2F6C
.pf_e_pos EQU 0x2F83
.pf_e_sbrn EQU 0x2F4A
.pf_e_sign EQU 0x2F85
.pf_fr_dgt EQU 0x2EEC
.pf_fr_exx EQU 0x2EEF
.pf_fractn EQU 0x2ECF
.pf_frn_lp EQU 0x2EDF
.pf_insert EQU 0x2EA9
.pf_large EQU 0x2E56
.pf_loop EQU 0x2E01
.pf_medium EQU 0x2E6F
.pf_more EQU 0x2ECB
.pf_negtve EQU 0x2DF2
.pf_not_e EQU 0x2F46
.pf_out_dt EQU 0x2F59
.pf_out_lp EQU 0x2F52
.pf_postve EQU 0x2DF8
.pf_r_back EQU 0x2F25
.pf_rnd_lp EQU 0x2F18
.pf_round EQU 0x2F0C
.pf_save EQU 0x2E1E
.pf_small EQU 0x2E24
.pf_test_2 EQU 0x2EB3
.pixel_add EQU 0x22AA
.pl_tst_in EQU 0x22FD
.plot EQU 0x22DC
.plot_22df EQU 0x22DF ; secondary entry to PLOT
.plot_end EQU 0x2303
.plot_loop EQU 0x22F0
.plot_sub EQU 0x22E5 ; the plot subroutine (coords in BC)
.po_1_oper EQU 0x0A7A
.po_2_oper EQU 0x0A75
.po_able EQU 0x0AD9
.po_any EQU 0x0B24
.po_at_err EQU 0x0AAC
.po_at_set EQU 0x0ABF
.po_attr EQU 0x0BDB
.po_attr_1 EQU 0x0BFA
.po_attr_2 EQU 0x0C08
.po_back_1 EQU 0x0A23
.po_back_2 EQU 0x0A38
.po_back_3 EQU 0x0A3A
.po_change EQU 0x0A80
.po_char EQU 0x0B65
.po_char_2 EQU 0x0B6A
.po_char_3 EQU 0x0B76
.po_comma EQU 0x0A5F
.po_cont EQU 0x0A87
.po_each EQU 0x0C22
.po_enter EQU 0x0A4F
.po_f_pr EQU 0x0B1D
.po_fetch EQU 0x0B03
.po_fill EQU 0x0AC3
.po_gr_1 EQU 0x0B38
.po_gr_2 EQU 0x0B3E
.po_gr_3 EQU 0x0B4C
.po_msg EQU 0x0C0A
.po_quest EQU 0x0A69
.po_right EQU 0x0A3D
.po_save EQU 0x0C3B
.po_scr EQU 0x0C55
.po_scr_2 EQU 0x0C88
.po_scr_3 EQU 0x0CD2
.po_scr_3a EQU 0x0CF0
.po_scr_4 EQU 0x0D02
.po_scr_4a EQU 0x0D1C
.po_scr_4b EQU 0x0D2D
.po_search EQU 0x0C41
.po_space EQU 0x0AD0
.po_st_e EQU 0x0AF0
.po_st_pr EQU 0x0AFC
.po_step EQU 0x0C44
.po_store EQU 0x0ADC
.po_t EQU 0x0B5F
.po_t_and_udg EQU 0x0B52
.po_t_udg EQU 0x0B52
.po_tab EQU 0x0AC2
.po_table EQU 0x0C14
.po_tokens EQU 0x0C10
.po_tr_sp EQU 0x0C35
.po_tv_1 EQU 0x0A7D
.po_tv_2 EQU 0x0A6D
.point_lp EQU 0x22D4
.point_sub EQU 0x22CB
.point_sub_22ce EQU 0x22CE ; secondary entry to POINT-SUB
.pointers EQU 0x1664
.poke EQU 0x1E80
.pr_all EQU 0x0B7F ; "print all characters"
.pr_all_1 EQU 0x0B93
.pr_all_2 EQU 0x0BA4
.pr_all_3 EQU 0x0BB6
.pr_all_4 EQU 0x0BB7
.pr_all_5 EQU 0x0BC1
.pr_all_6 EQU 0x0BD3
.pr_at_tab EQU 0x201E
.pr_end_z EQU 0x2045
.pr_item_1 EQU 0x1FFC
.pr_item_2 EQU 0x200E
.pr_item_3 EQU 0x2024
.pr_posn_1 EQU 0x204E
.pr_posn_2 EQU 0x2061
.pr_posn_3 EQU 0x2067
.pr_posn_4 EQU 0x206E
.pr_st_end EQU 0x2048
.pr_string EQU 0x203C ; print a string (start in DE, count in BC)
.prb_bytes EQU 0x0EE7
.prep_add EQU 0x2F9B
.prep_m_or_d EQU 0x30C0
.print EQU 0x1FCD
.print_1 EQU 0x1FCF
.print_2 EQU 0x1FDF
.print_3 EQU 0x1FE5
.print_4 EQU 0x1FF2
.print_a EQU 0x0010
.print_a_2 EQU 0x15F2
.print_cr EQU 0x1FF5
.print_fp EQU 0x2DE3 ; print a floating point number
.print_out EQU 0x09F4
.print_string EQU 0x203C
.ptr_done EQU 0x167F
.ptr_next EQU 0x166B
.r_i_store EQU 0x365F
.ram_check EQU 0x11DA
.ram_done EQU 0x11EF
.ram_fill EQU 0x11DC
.ram_read EQU 0x11E2
.ram_set EQU 0x1219
.rand_1 EQU 0x1E5A
.randomize EQU 0x1E4F
.re_entry EQU 0x3365
.re_st_two EQU 0x3293
.re_stack EQU 0x3297
.read EQU 0x1DED
.read_1 EQU 0x1E0A
.read_2 EQU 0x1E1E
.read_3 EQU 0x1DEC
.read_in EQU 0x3645
.rec_edit EQU 0x16D4
.reclaim_1 EQU 0x19E5
.reclaim_2 EQU 0x19E8
.rem EQU 0x1BB2
.remove_fp EQU 0x11A7
.report_0 EQU 0x1BB0
.report_1 EQU 0x1DD8
.report_2 EQU 0x1C2E
.report_2a EQU 0x0670
.report_3 EQU 0x2A20
.report_4 EQU 0x1F15
.report_5 EQU 0x0C86
.report_6 EQU 0x31AD
.report_6b EQU 0x3703
.report_7 EQU 0x1F36
.report_8 EQU 0x15E4
.report_a EQU 0x34E7
.report_ab EQU 0x371A
.report_b EQU 0x046C
.report_bb EQU 0x1E9F
.report_bc EQU 0x24F9
.report_bd EQU 0x35DC
.report_c EQU 0x1C8A
.report_cb EQU 0x21CE
.report_d EQU 0x0D00
.report_da EQU 0x0552
.report_dc EQU 0x0F0A
.report_e EQU 0x1E08
.report_fa EQU 0x0642
.report_fb EQU 0x1765
.report_h EQU 0x21D4
.report_i EQU 0x1D84
.report_j EQU 0x15C4
.report_k EQU 0x2244
.report_l EQU 0x1B7B
.report_m EQU 0x1EDA
.report_n EQU 0x1BEC
.report_oa EQU 0x160E
.report_ob EQU 0x1725
.report_p EQU 0x2812
.report_q EQU 0x288B
.report_r EQU 0x0806
.reserve EQU 0x169E
.reset EQU 0x0066
.rest_run EQU 0x1E45
.restk_sub EQU 0x3296
.restore EQU 0x1E42
.result_ok EQU 0x370C
.return EQU 0x1F23
.rom_trap EQU 0x1708
.rpt_mesgs EQU 0x1391
.rs_nrmlse EQU 0x32B1
.rs_store EQU 0x32BD
.rslt_zero EQU 0x370E
.rstk_loop EQU 0x32B2
.run EQU 0x1EA1
.s_2_coord EQU 0x2522
.s_alphnum EQU 0x2684
.s_attr EQU 0x2672
.s_attr_s EQU 0x2580
.s_attr_s_2583 EQU 0x2583 ; secondary entry to S-ATTR-S
.s_bracket EQU 0x25E8
.s_cont_1 EQU 0x26DD
.s_cont_2 EQU 0x2712
.s_cont_3 EQU 0x2713
.s_decimal EQU 0x268D
.s_fn EQU 0x25F5
.s_fn_sbrn EQU 0x27BD
.s_ik_dollar_stk EQU 0x2660
.s_ink_dollar_en EQU 0x2665
.s_inkey_dollar EQU 0x2634
.s_letter EQU 0x26C9
.s_loop EQU 0x2734
.s_loop_1 EQU 0x24FF
.s_loopend EQU 0x2770
.s_negate EQU 0x26DF
.s_next EQU 0x2790
.s_no_to_string EQU 0x2707
.s_not_and EQU 0x2788
.s_numeric EQU 0x26C3
.s_opertr EQU 0x2723
.s_pi EQU 0x2627
.s_pi_end EQU 0x2630
.s_point EQU 0x267B
.s_push_po EQU 0x270D
.s_q_again EQU 0x25BE
.s_q_copy EQU 0x25CB
.s_q_prms EQU 0x25D9
.s_quote EQU 0x25B3
.s_quote_s EQU 0x250F
.s_rnd EQU 0x25F8
.s_rnd_end EQU 0x2625
.s_rport_c2 EQU 0x2761
.s_rport_c EQU 0x252D
.s_runtest EQU 0x2764
.s_sc_mtch EQU 0x255A
.s_sc_rows EQU 0x255D
.s_scr_nxt EQU 0x2573
.s_scr_sto EQU 0x257D
.s_screen_dollar EQU 0x2668
.s_scrn_dollar_s EQU 0x2535
.s_scrn_lp EQU 0x254F
.s_scrn_s EQU 0x2535
.s_scrn_s_2538 EQU 0x2538 ; secondary entry to S-SCRN$-S
.s_sd_skip EQU 0x26B6
.s_stk_dec EQU 0x26B5
.s_stk_lst EQU 0x274C
.s_string EQU 0x25DB
.s_syntest EQU 0x275B
.s_tighter EQU 0x2773
.s_u_plus EQU 0x25AF
.sa_1_sec EQU 0x0991
.sa_8_bits EQU 0x0525
.sa_all EQU 0x075A ; tape save/load
.sa_bit_1 EQU 0x0514
.sa_bit_2 EQU 0x0511
.sa_blank EQU 0x0629
.sa_bytes EQU 0x04C2
.sa_code EQU 0x06C3
.sa_code_1 EQU 0x06E1
.sa_code_2 EQU 0x06F0
.sa_code_3 EQU 0x06F5
.sa_code_4 EQU 0x06F9
.sa_contrl EQU 0x0970
.sa_data EQU 0x0652
.sa_data_1 EQU 0x0692
.sa_delay EQU 0x053C
.sa_flag EQU 0x04D0
.sa_leader EQU 0x04D8
.sa_line EQU 0x0716
.sa_line_1 EQU 0x0723
.sa_loop EQU 0x04FE
.sa_loop_p EQU 0x0505
.sa_name EQU 0x064B
.sa_null EQU 0x0644
.sa_or_ld_end EQU 0x0554
.sa_or_ld_ret EQU 0x053F
.sa_out EQU 0x051C
.sa_parity EQU 0x050E
.sa_scr_dollar EQU 0x06A0
.sa_set EQU 0x051A
.sa_space EQU 0x0621
.sa_start EQU 0x0507
.sa_sync_1 EQU 0x04EA
.sa_sync_2 EQU 0x04F2
.sa_type_0 EQU 0x073A
.sa_type_3 EQU 0x0710
.sa_v_new EQU 0x0685
.sa_v_old EQU 0x0672
.sa_v_type EQU 0x068F
.save_etc EQU 0x0605
.scan_ent EQU 0x336C
.scan_func EQU 0x2596
.scan_loop EQU 0x1B52
.scanning EQU 0x24FB
.scrl_mssg EQU 0x0CF8
.sec_plus EQU 0x3575
.secnd_low EQU 0x356B
.separator EQU 0x1B6F
.series_xx EQU 0x3449
.set_de EQU 0x1195
.set_hl EQU 0x1190
.set_min EQU 0x16B0
.set_permanent_colors_0x1CAD EQU 0x1CAD ; special entry point
.set_permanent_colors_1CAD EQU 0x1CAD ; special entry point
.set_stk EQU 0x16C5
.set_work EQU 0x16BF
.sf_arg_lp EQU 0x2843
.sf_arg_vl EQU 0x2852
.sf_argmt1 EQU 0x2802
.sf_argmts EQU 0x27D9
.sf_brkt_1 EQU 0x27D0
.sf_brkt_2 EQU 0x27E4
.sf_cp_def EQU 0x2814
.sf_flag_6 EQU 0x27E9
.sf_fnd_df EQU 0x2808
.sf_not_fd EQU 0x2825
.sf_r_br_2 EQU 0x2885
.sf_rprt_c EQU 0x27E6
.sf_run EQU 0x27F7
.sf_syn_en EQU 0x27F4
.sf_value EQU 0x288D
.sf_values EQU 0x2831
.sfa_cp_vr EQU 0x296B
.sfa_end EQU 0x2991
.sfa_loop EQU 0x295A
.sfa_match EQU 0x2981
.sgn EQU 0x3492
.shift_fp EQU 0x2FDD
.shift_len EQU 0x3055
.shift_one EQU 0x316E
.sign_done EQU 0x2CFE
.sign_flag EQU 0x2CF2
.sign_to_c EQU 0x3507
.sin EQU 0x37B5
.skip_cons EQU 0x33F7
.skip_next EQU 0x33F8
.skip_over EQU 0x007D
.skip_zero EQU 0x315E
.skips EQU 0x0090
.sl_define EQU 0x2A94
.sl_over EQU 0x2AA8
.sl_rpt_c EQU 0x2A7A
.sl_second EQU 0x2A81
.sl_store EQU 0x2AAD
.slicing EQU 0x2A52
.small EQU 0x37F8
.spare EQU 0x386E
.sqr EQU 0x384A
.st_e_part EQU 0x2CFF
.st_mem_xx EQU 0x342D
.stack_a EQU 0x2D28
.stack_bc EQU 0x2D2B ; stack BC register pair
.stack_fetch EQU 0x2BF1 ; get last value from calculator stack
.stack_num EQU 0x33B4
.start EQU 0x0000
.start_new EQU 0x11CB
.stk_code EQU 0x3671
.stk_const EQU 0x33C8
.stk_const_xx EQU 0x341B
.stk_data EQU 0x33C6
.stk_digit EQU 0x2D22
.stk_f_arg EQU 0x2951
.stk_fetch EQU 0x2BF1
.stk_pntrs EQU 0x35BF
.stk_st_0 EQU 0x2AB1
.stk_sto_string EQU 0x2AB2
.stk_store EQU 0x2AB6
.stk_to_a EQU 0x2314
.stk_to_bc EQU 0x2307
.stk_var EQU 0x2996
.stk_zeros EQU 0x33F1
.stmt_l_1 EQU 0x1B29
.stmt_loop EQU 0x1B28
.stmt_next EQU 0x1BF4
.stmt_r_1 EQU 0x1B7D
.stmt_ret EQU 0x1B76
.stop EQU 0x1CEE
.str_alter EQU 0x2070
.str_and_no EQU 0x352D
.str_data1 EQU 0x1727
.str_data EQU 0x171E
.str_dollar EQU 0x361F
.str_test EQU 0x3588
.strings EQU 0x3559
.strs_add EQU 0x359C
.strt_mlt EQU 0x3125
.subn_only EQU 0x31F2
.subtract EQU 0x300F
.sv_arrays EQU 0x29AE
.sv_ch_add EQU 0x29E0
.sv_close EQU 0x29D8
.sv_comma EQU 0x29C3
.sv_count EQU 0x29E7
.sv_dim EQU 0x2A48
.sv_elem_string EQU 0x2A2C
.sv_loop EQU 0x29EA
.sv_mult EQU 0x29FB
.sv_number EQU 0x2A22
.sv_ptr EQU 0x29C0
.sv_rpt_c EQU 0x2A12
.sv_simple_string EQU 0x29A1
.sv_slice EQU 0x2A45
.sv_slice? EQU 0x2A49
.swap_byte EQU 0x343E
.syntax_z EQU 0x2530
.t_expnent EQU 0x326C
.t_first EQU 0x3233
.t_gr_zero EQU 0x3221
.t_numeric EQU 0x3252
.t_shift EQU 0x3261
.t_small EQU 0x323F
.t_store EQU 0x3267
.t_test EQU 0x325E
.tan EQU 0x37DA
.tape_msgs EQU 0x09A1
.tbl_addrs EQU 0x32D7
.tbl_of_ops EQU 0x2795
.tbl_priors EQU 0x27B0
.temp_ptr1 EQU 0x0077
.temp_ptr2 EQU 0x0078
.temps EQU 0x0D4D ; copy the permanent color items to the temporary ones
.temps_1 EQU 0x0D5B
.temps_2 EQU 0x0D65
.test_5_sp EQU 0x33A9
.test_char EQU 0x001C
.test_neg EQU 0x307C
.test_norm EQU 0x3155
.test_room EQU 0x1F05
.test_zero EQU 0x34E9
.tkn_table EQU 0x0095
.to_power EQU 0x3851
.truncate EQU 0x3214
.two_p_1 EQU 0x1E8E
.two_param EQU 0x1E85
.unstack_z EQU 0x1FC3
.use_252 EQU 0x2495
.use_zero EQU 0x1CE6
.usr_no EQU 0x34B3
.usr_range EQU 0x34D3
.usr_stack EQU 0x34E4
.usr_string EQU 0x34BC
.v_80_byte EQU 0x2932
.v_char EQU 0x28D4
.v_each EQU 0x2900
.v_end EQU 0x294B
.v_found_1 EQU 0x293E
.v_found_2 EQU 0x293F
.v_get_ptr EQU 0x2929
.v_matches EQU 0x2912
.v_next EQU 0x292A
.v_pass EQU 0x2943
.v_rport_c EQU 0x360C
.v_run EQU 0x28FD
.v_run_or_syn EQU 0x28EF
.v_spaces EQU 0x2913
.v_str_var EQU 0x28DE
.v_syntax EQU 0x2934
.v_test_fn EQU 0x28E3
.val_dollar EQU 0x35DE
.val_fet_1 EQU 0x1C56
.val_fet_2 EQU 0x1C59
.valid EQU 0x371C
.var_a_1 EQU 0x1C22
.var_a_2 EQU 0x1C30
.var_a_3 EQU 0x1C46
.vr_cont_1 EQU 0x07E9
.vr_cont_2 EQU 0x07F4
.vr_cont_3 EQU 0x0800
.vr_contrl EQU 0x07CB
.wait_key1 EQU 0x15DE
.wait_key EQU 0x15D4
.x_large EQU 0x326D
.x_neg EQU 0x36B7
.xis0 EQU 0x385D
.yneg EQU 0x37A8
.zero_rslt EQU 0x315D
.zeros_4_or_5 EQU 0x2FFB
.zplus EQU 0x37A1
.zx81_name EQU 0x04AA
; ZX Spectrum 128K
.ROM_SWAP EQU 0x5B00 ; 128K paging subroutine in RAM
._128_new EQU 0x0057