ASSEMBLY LISTING OF SEGMENT >spec>install>1035>any_to_any_.alm ASSEMBLED ON: 10/01/90 1626.2 mdt Mon OPTIONS USED: -target l68 list symbols ASSEMBLED BY: ALM Version 8.14 March 1989 ASSEMBLER CREATED: 06/09/89 1102.3 mdt Fri 1 " *********************************************************** 2 " * * 3 " * Copyright, (C) Honeywell Bull Inc., 1987 * 4 " * * 5 " * Copyright, (C) Honeywell Information Systems Inc., 1984 * 6 " * * 7 " *********************************************************** 8 9 " HISTORY COMMENTS: 10 " 1) change(86-04-29,Oke), approve(86-05-30,MCR7424), audit(86-05-30,Mabey), 11 " install(86-06-12,MR12.0-1075): 12 " flt_dec.fix_bin.zero case after mp3d or dv3d assumed length in x3 was 13 " valid, it needed copy from x4. 14 " 2) change(86-04-29,Oke), approve(86-05-30,MCR7424), audit(86-05-30,Mabey), 15 " install(86-06-12,MR12.0-1075): 16 " Scan for bad characters before skipping leading blanks in 17 " char_to_arithmetic_. Otherwise we run off the blank skip table to other 18 " tables, and invalidly accept some bad inputs. 19 " 3) change(86-07-15,Ginter), approve(86-07-15,MCR7435), 20 " audit(86-07-16,Mabey), install(86-07-28,MR12.0-1104): 21 " Change by M Mabey (installed by Ginter) - Conversions from fixed bin 22 " numbers with negative scale factors to float decimal, character, and 23 " bits would fail. 24 " 4) change(90-08-27,Blackmore), approve(90-08-27,MCR8194), 25 " audit(90-09-14,Oke), install(90-10-01,MR12.4-1035): 26 " Fix entry 40 in the arrays 'stype' and 'ttype' to fix treatment of fixed 27 " decimal unsigned 4-bit values (Multics type 40). Also fix treatment of 28 " exponent to floating decimal values during conversion into a bitstring. 29 " END HISTORY COMMENTS 30 31 32 " PL/I Conversion Package 33 " 34 " BLW, Spring 1973 35 " Re-written by T. Oke 1983. SEE MTB-672 for details. 36 37 " Character input of "" mis-handled. Fixed 84-03-13 by T. Oke 38 " Char to bit fills "0"b to wrong target. Fixed 84-03-14 by T. Oke 39 " Flt Dec to Scaled bin forms bad on zero. Fixed 84-03-16 by T. Oke 40 " Flt Dec to Bit did no offset when replacing exponent. Fixed 84-03-16 41 " by T. Oke 42 " varying char and bit target routines did not limit to source length. 43 " Fixed 84-04-16 by T. Oke 44 " optimization of flt_bin_to_flt_dec omitted converting the last bit 45 " of the flt bin mantissa. Fixed 84-04-16 by T. Oke 46 " original_source_length length not saved prior to error_205 detection 47 " which calls error_xxx, which uses uninitialized 48 " original_source_length. error_205 now forces string to 256. 49 " PHX17351 Fixed 84-04-19 by T. Oke 50 " Full conversion precision from flt_decimal to flt_bin. Maintained 51 " through use of precision correction determined from upper non-0 52 " digit of flt_decimal. We convert to flt_bin 70 to flt_bin 71. 53 " Correct error_176 to become error_191. Oncode message 376 does not 54 " exist, but 391 was correct message. 55 " Correct handling of scaled fixed bin to correct the scale factor with 56 " a fixed exponent and produce the right values. 57 " 58 " Installed into MR11 - October 1984. 59 60 " put_bit of aligned target must pre-clear 1st and possible 2nd word to 61 " avoid padded reference bug. Fixed 84-11-09 by T. Oke 62 " load_flt_dec.target needs to validate 0.0 number to prevent size 63 " condition falsely signalled. Fixed 84-11-09 by T. Oke 64 " flt_dec.fix_bin.zero used length of flt_dec source rather than needed 65 " fix_dec target to convert causing size error. Fixed 84-11-12 by 66 " T. Oke 67 " end_get_fix_dec.normalized used X2 as length of fixed decimal 68 " generic. X2 is invalid at this point, should use X3 instead as 69 " length of float decimal generic to fix exponent. 70 " Fixed 84-11-12 by T. Oke 71 " recognize.no_sign did not skip leading 0's to prevent conversion 72 " errors indicating too many digits. Now leading 0's don't count. 73 " Fixed 84-11-13 by T. Oke 74 " move_char_to_numeric needs to recognize 0-length input. 75 " Fixed 84-11-16 by T. Oke 76 " Fix minimum recognized precision to 1 in case of blank or 0 input. 77 " Fixed 84-11-19 by T. Oke 78 " rtrim source string for char_to_numeric_ input. 84-11-19 by T. Oke 79 " Use pl1_signal_conversion_ rather than 80 " plio2_signal_$conversion_error_. 84-11-20 by T. Oke 81 " 84-11-29 by T. Oke. What is hoped to be the final fix to skipping 82 " leading zeros. Now we remember that an integer part was seen 83 " then remove leading zeros from precision calculation. 84 " 85-02-07 by T. Oke. Moved code in convert_flt_bin_to_flt_hex to 85 " correct rounding test. Somehow mask index code got moved. 86 " Fixed rounding. 87 000002 88 segdef real_to_real_ 000006 89 segdef real_to_real_round_ 000000 90 segdef real_to_real_truncate_ 000002 91 segdef any_to_any_ 000006 92 segdef any_to_any_round_ 000000 93 segdef any_to_any_truncate_ 000071 94 segdef char_to_numeric_ 95 96 include eis_micro_ops 000020 1-1 bool insm,020 000040 1-2 bool enf,040 000060 1-3 bool ses,060 000100 1-4 bool mvzb,100 000120 1-5 bool mvza,120 000140 1-6 bool mfls,140 000160 1-7 bool mflc,160 000200 1-8 bool insb,200 000220 1-9 bool insa,220 000240 1-10 bool insn,240 000260 1-11 bool insp,260 000300 1-12 bool ign,300 000320 1-13 bool mvc,320 000340 1-14 bool mses,340 000360 1-15 bool mors,360 000400 1-16 bool lte,400 000420 1-17 bool cht,420 1-18 " 000010 1-19 bool if0,10 000004 1-20 bool if1,4 000002 1-21 bool if2,2 000001 1-22 bool if3,1 97 include pl1_system 2-1 2-2 2-3 "BEGIN INCLUDE FILE system.incl.alm 2-4 2-5 "Created 06/01/77 1735.3 edt Wed by convert_include_file, 2-6 " Version of 03/21/77 1355.7 edt Mon. 2-7 2-8 "Made from >exl>include>system.incl.pl1, 2-9 " modified 06/01/77 1735.3 edt Wed 2-10 2-11 000033 2-12 equ max_p_flt_bin_1,27 "MANIFEST 000077 2-13 equ max_p_flt_bin_2,63 "MANIFEST 000043 2-14 equ max_p_fix_bin_1,35 "MANIFEST 000107 2-15 equ max_p_fix_bin_2,71 "MANIFEST 000073 2-16 equ max_p_dec,59 "MANIFEST 000107 2-17 equ max_p_bin_or_dec,71 "MANIFEST 777777 777600 2-18 equ min_scale,-128 "MANIFEST 000177 2-19 equ max_scale,+127 "MANIFEST 000044 000000 2-20 equ max_bit_string,9437184 "MANIFEST 000004 000000 2-21 equ max_char_string,1048576 "MANIFEST 000001 000000 2-22 equ max_area_size,262144 "MANIFEST 000034 2-23 equ min_area_size,28 "MANIFEST 000375 2-24 equ max_bit_string_constant,253 "MANIFEST 000376 2-25 equ max_char_string_constant,254 "MANIFEST 000400 2-26 equ max_identifier_length,256 "MANIFEST 000030 2-27 equ max_length_precision,24 "MANIFEST 000030 2-28 equ max_offset_precision,24 "MANIFEST 000001 000000 2-29 equ max_words_per_variable,262144 "MANIFEST 000044 2-30 equ bits_per_word,36 "MANIFEST 000110 2-31 equ bits_per_double,72 "MANIFEST 000002 2-32 equ characters_per_half,2 "MANIFEST 000004 2-33 equ characters_per_word,4 "MANIFEST 000010 2-34 equ characters_per_double,8 "MANIFEST 000011 2-35 equ bits_per_character,9 "MANIFEST 000022 2-36 equ bits_per_half,18 "MANIFEST 000011 2-37 equ bits_per_decimal_digit,9 "MANIFEST 000010 2-38 equ bits_per_binary_exponent,8 "MANIFEST 000044 2-39 equ bits_per_packed_ptr,36 "MANIFEST 000001 2-40 equ words_per_fix_bin_1,1 "MANIFEST 000002 2-41 equ words_per_fix_bin_2,2 "MANIFEST 000001 2-42 equ words_per_flt_bin_1,1 "MANIFEST 000002 2-43 equ words_per_flt_bin_2,2 "MANIFEST 000001 2-44 equ words_per_varying_string_header,1 "MANIFEST 000001 2-45 equ words_per_offset,1 "MANIFEST 000002 2-46 equ words_per_pointer,2 "MANIFEST 000004 2-47 equ words_per_label_var,4 "MANIFEST 000004 2-48 equ words_per_entry_var,4 "MANIFEST 000004 2-49 equ words_per_file_var,4 "MANIFEST 000004 2-50 equ words_per_format,4 "MANIFEST 000006 2-51 equ words_per_condition_var,6 "MANIFEST 777777 2-52 equ max_index_register_value,262143 "MANIFEST 002000 2-53 equ default_area_size,1024 "MANIFEST 000033 2-54 equ default_flt_bin_p,27 "MANIFEST 000021 2-55 equ default_fix_bin_p,17 "MANIFEST 000012 2-56 equ default_flt_dec_p,10 "MANIFEST 000007 2-57 equ default_fix_dec_p,7 "MANIFEST 2-58 2-59 "END INCLUDE FILE system.incl.alm 98 include stack_header 3-1 " BEGIN INCLUDE FILE ... stack_header.incl.alm 3/72 Bill Silver 3-2 " 3-3 " modified 7/76 by M. Weaver for *system links and more system use of areas 3-4 " modified 3/77 by M. Weaver to add rnt_ptr 3-5 " modified 7/77 by S. Webber to add run_unit_depth and assign_linkage_ptr 3-6 " modified 6/83 by J. Ives to add trace_frames and in_trace. 3-7 3-8 " HISTORY COMMENTS: 3-9 " 1) change(86-06-24,DGHowe), approve(86-06-24,MCR7396), 3-10 " audit(86-08-05,Schroth), install(86-11-03,MR12.0-1206): 3-11 " added the heap_header_ptr definition 3-12 " 2) change(86-08-12,Kissel), approve(86-08-12,MCR7473), 3-13 " audit(86-10-10,Fawcett), install(86-11-03,MR12.0-1206): 3-14 " Modified to support control point management. These changes were 3-15 " actually made in February 1985 by G. Palter. 3-16 " 3) change(86-10-22,Fawcett), approve(86-10-22,MCR7473), 3-17 " audit(86-10-22,Farley), install(86-11-03,MR12.0-1206): 3-18 " Remove the old_lot pointer and replace it with cpm_data_ptr. Use the 18 3-19 " bit pad after cur_lot_size for the cpm_enabled. This was done to save 3-20 " some space int the stack header and change the cpd_ptr unal to 3-21 " cpm_data_ptr (ITS pair). 3-22 " END HISTORY COMMENTS 3-23 000004 3-24 equ stack_header.cpm_data_ptr,4 ptr to control point for this stack 000006 3-25 equ stack_header.combined_stat_ptr,6 ptr to separate static area 3-26 000010 3-27 equ stack_header.clr_ptr,8 ptr to area containing linkage sections 000012 3-28 equ stack_header.max_lot_size,10 number of words allowed in lot (DU) 000012 3-29 equ stack_header.main_proc_invoked,10 nonzero if main proc was invoked in run unit (DL) 000012 3-30 equ stack_header.run_unit_depth,10 number of active run units stacked (DL) 000013 3-31 equ stack_header.cur_lot_size,11 DU number of words (entries) in lot 000013 3-32 equ stack_header.cpm_enabled,11 DL non-zero if control point management is enabled 000014 3-33 equ stack_header.system_free_ptr,12 ptr to system storage area 000016 3-34 equ stack_header.user_free_ptr,14 ptr to user storage area 3-35 000020 3-36 equ stack_header.parent_ptr,16 ptr to parent stack or null 000022 3-37 equ stack_header.stack_begin_ptr,18 ptr to first stack frame 000024 3-38 equ stack_header.stack_end_ptr,20 ptr to next useable stack frame 000026 3-39 equ stack_header.lot_ptr,22 ptr to the lot for the current ring 3-40 000030 3-41 equ stack_header.signal_ptr,24 ptr to signal proc for current ring 000032 3-42 equ stack_header.bar_mode_sp,26 value of sp before entering bar mode 000034 3-43 equ stack_header.pl1_operators_ptr,28 ptr: pl1_operators_$operator_table 000036 3-44 equ stack_header.call_op_ptr,30 ptr to standard call operator 3-45 000040 3-46 equ stack_header.push_op_ptr,32 ptr to standard push operator 000042 3-47 equ stack_header.return_op_ptr,34 ptr to standard return operator 000044 3-48 equ stack_header.ret_no_pop_op_ptr,36 ptr: stand. return/ no pop operator 000046 3-49 equ stack_header.entry_op_ptr,38 ptr to standard entry operator 3-50 000050 3-51 equ stack_header.trans_op_tv_ptr,40 ptr to table of translator operator ptrs 000052 3-52 equ stack_header.isot_ptr,42 pointer to ISOT 000054 3-53 equ stack_header.sct_ptr,44 pointer to System Condition Table 000056 3-54 equ stack_header.unwinder_ptr,46 pointer to unwinder for current ring 3-55 000060 3-56 equ stack_header.sys_link_info_ptr,48 ptr to *system link name table 000062 3-57 equ stack_header.rnt_ptr,50 ptr to reference name table 000064 3-58 equ stack_header.ect_ptr,52 ptr to event channel table 000066 3-59 equ stack_header.assign_linkage_ptr,54 ptr to area for hcs_$assign_linkage calls 000070 3-60 equ stack_header.heap_header_ptr,56 ptr to heap header. 000072 3-61 equ stack_header.trace_frames,58 stack of trace_catch_ frames 000073 3-62 equ stach_header.trace_top_ptr,59 trace pointer 000074 3-63 equ stack_header.in_trace,60 trace antirecurse bit 000100 3-64 equ stack_header_end,64 length of stack header 3-65 3-66 3-67 3-68 000000 3-69 equ trace_frames.count,0 number of trace frames on stack 000001 3-70 equ trace_frames.top_ptr,1 packed pointer to top one 3-71 3-72 " The following constant is an offset within the pl1 operators table. 3-73 " It references a transfer vector table. 3-74 000551 3-75 bool tv_offset,551 3-76 3-77 3-78 " The following constants are offsets within this transfer vector table. 3-79 001170 3-80 equ call_offset,tv_offset+271 001171 3-81 equ push_offset,tv_offset+272 001172 3-82 equ return_offset,tv_offset+273 001173 3-83 equ return_no_pop_offset,tv_offset+274 001174 3-84 equ entry_offset,tv_offset+275 3-85 3-86 3-87 " END INCLUDE FILE stack_header.incl.alm 99 include stack_frame 4-1 " 4-2 " BEGIN INCLUDE FILE ... stack_frame.incl.alm 6/72 RBS 4-3 " 4-4 " Modified: 16 Dec 1977, D. Levin - to add fio_ps_ptr 4-5 " Modified: 3 Feb 1978, P. Krupp - to add run_unit_manager_bit & main_proc_bit 4-6 " Modified: 21 March 1978, D. Levin - change fio_ps_ptr to support_ptr 4-7 " 000020 4-8 equ stack_frame.prev_sp,16 000020 4-9 equ stack_frame.condition_word,16 000022 4-10 equ stack_frame.next_sp,18 000022 4-11 equ stack_frame.signaller_word,18 000024 4-12 equ stack_frame.return_ptr,20 000026 4-13 equ stack_frame.entry_ptr,22 000030 4-14 equ stack_frame.operator_ptr,24 000030 4-15 equ stack_frame.lp_ptr,24 000032 4-16 equ stack_frame.arg_ptr,26 000034 4-17 equ stack_frame.static_ptr,28 000035 4-18 equ stack_frame.support_ptr,29 " only used by fortran I/O 000036 4-19 equ stack_frame.on_unit_rel_ptrs,30 000037 4-20 equ stack_frame.operator_ret_ptr,31 000037 4-21 equ stack_frame.translator_id,31 000040 4-22 equ stack_frame.regs,32 000060 4-23 equ stack_frame.min_length,48 000020 4-24 equ stack_frame.flag_word,16 020000 4-25 bool stack_frame.main_proc_bit,020000 (DL) 010000 4-26 bool stack_frame.run_unit_manager,010000 (DL) 004000 4-27 bool stack_frame.signal_bit,004000 (DL) 002000 4-28 bool stack_frame.crawl_out_bit,002000 (DL) 001000 4-29 bool stack_frame.signaller_bit,001000 (DL) 000400 4-30 bool stack_frame.link_trap_bit,000400 (DL) 000200 4-31 bool stack_frame.support_bit,000200 (DL) 000100 4-32 bool stack_frame.condition_bit,000100 (DL) 4-33 4-34 " 4-35 " END INCLUDE FILE ... stack_frame.incl.alm 4-36 " 100 " 101 " mnemonics for CSL instruction 102 " 000003 103 bool move,03 104 " 105 " description of error extension of stack 106 " 000200 107 equ error_extension,128 size of extension 000000 108 equ save_ptrs,0 000020 109 equ save_regs,16 000030 110 equ call_ptr,24 000032 111 equ arglist,26 000024 112 equ oncode,save_regs+4 000025 113 equ onchar_index,save_regs+5 000025 114 equ name_length,save_regs+5 000004 115 equ onsource_ptr,save_ptrs+4 assumes s = 2 000100 116 equ onsource,64 117 " WORK AREA DESCRIPTION. 118 " 119 " There are two work areas of: 120 " 28 words - Normal numeric to numeric, bit to bit. 121 " 118 words - to character, character to numeric. 122 " Old programs (compiled before release 24) reference two work areas, 123 " of 36 and 156 words. 124 125 " Token information for character to numeric input. Used by recognize to 126 " build token information from input stream. 127 000000 128 equ sign_part,0 000001 129 equ integer_part,1 000002 130 equ fractional_part,2 000003 131 equ exponent_part,3 000004 132 equ type_part,4 000005 133 equ prec_part,5 " precision and scale 000006 134 equ token_size,6 " number of words in token 000030 135 equ token_length,token_size*4 " five words of 4 chars each 136 137 macro token_info 1 138 equ &1_token,&2 " start of token 2 139 equ &1.sign.index,&2+0 " sign index in DL 3 140 equ &1.sign.length,&2+0 " sign length in DU 4 141 equ &1.integer.index,&2+1 " integer part index in DL 5 142 equ &1.integer.length,&2+1 " integer length in DU 6 143 equ &1.fraction.index,&2+2 " fraction index in DL 7 144 equ &1.fraction.length,&2+2 " fraction length in DU 8 145 equ &1.exponent.value,&2+3 " exponent value 9 146 equ &1.type,&2+4 " type in DU 10 147 equ &1.term,&2+4 " encoded terminator in DL 11 148 equ &1.scale,&2+5 " scale in DU 12 149 equ &1.prec,&2+5 " prec in DL 13 150 &endm 151 152 153 000000 154 equ scales,0 000000 155 equ target_scale,0 (DU) target scale 000000 156 equ target_precision,0 (DL) target precision 000001 157 equ source_scale,1 (DU) source scale 000001 158 equ source_precision,1 (DL) source precision 000001 159 equ source_string_length,1 FULL word 000002 160 equ original_source,2 copy of orig source ptr 161 162 " GENERIC storage. 163 000004 164 equ fix_bin_generic,4 DOUBLE WORD 165 000006 166 equ flt_bin_generic,6 DOUBLE WORD float bin 000012 167 equ flt_bin_generic_exp,10 Exponent for float bin 168 000013 169 equ flt_dec_generic_exp,11 Exponent for float decimal 000014 170 equ flt_dec_generic,12 float decimal (64) bytes 000014 171 equ fix_dec_generic,12 OVERLAY fix dec (64) bytes 000014 172 equ bit_generic,12 ** OVERLAY flt_dec_generic 173 " 174 " end of short work area (28 words) 175 000034 176 equ return,28 save_target return pointer 000036 177 equ save_target_ptr,30 t ptr during binary -> char 000040 178 equ generic_ptr,32 source ptr char_to_arithmetic_ 000042 179 equ save_pr4,34 PR4 storage if we destroy 000044 180 equ error_return,36 000046 181 equ save_target_precision,38 000047 182 equ save_rounding,39 000050 183 equ char_generic,40 GENERIC char (256 B, 64 W) 000110 184 equ char_flt_dec_gen,72 generic flt_dec for char 000150 185 equ original_source_length,104 000151 186 equ save_target_type,105 187 000000 188 maclist off save 189 token_info real,106 190 token_info imag,106+token_size 000000 191 maclist restore 192 193 " end of long work area (118 words) 194 " character constants 195 000040 196 bool blank,040 000053 197 bool plus_sign,053 000055 198 bool minus_sign,055 000056 199 bool period,056 000060 200 bool digit_0,060 000061 201 bool digit_1,061 000111 202 bool letter_I,111 000145 203 bool letter_e,145 000146 204 bool letter_f,146 000151 205 bool letter_i,151 206 " 207 " character classes 208 " 000000 209 equ illegal_class,0 000001 210 equ sign_class,1 000002 211 equ period_class,2 000003 212 equ b_class,3 000004 213 equ de_class,4 000005 214 equ i_class,5 000006 215 equ blank_class,6 000007 216 equ digit_class,7 000010 217 equ f_class,8 218 219 " base register assignments 220 000001 221 equ target,1 " points to user's target 000002 222 equ generic,2 " points to current generic (char/bit) 000003 223 equ source,3 " points to user's source 000004 224 equ linkage,4 " destroyed in format/recognize 000005 225 equ work,5 " points to working storage area 000006 226 equ sp,6 " points to current caller's stack 227 228 " text base ptr in stack frame 229 000046 230 equ tbp,38 231 232 " Indicator bits. 233 400000 234 bool ind_zero,400000 200000 235 bool ind_negative,200000 100000 236 bool ind_carry,100000 040000 237 bool ind_overflow,040000 020000 238 bool ind_exp_overflow,020000 010000 239 bool ind_exp_underflow,010000 004000 240 bool ind_overflow_mask,004000 241 242 " Indicator register fault mask. 243 004000 244 bool mask_faults,ind_overflow_mask 000000 245 bool unmask_faults,0 246 247 " Length of power of two table. 248 000305 249 equ two_table_limit,197 250 251 " Type Codes for numeric to character conversion. 252 000022 253 equ fix_dec_type,2*9 " real_fix_dec_9bit_ls 000246 254 equ flt_dec_type,2*83 " real_flt_dec_gen 255 256 " Type code for generic float decimal. 257 000123 258 equ real_flt_dec_generic,83 000124 259 equ cplx_flt_dec_generic,84 260 261 " Error declaration and handling. 262 " 263 " Errors are managed by masking overflow faults throughout the code, using 264 " the constants "mask_faults" and "unmask_faults". Overflows are detected 265 " through code sequences for range testing, or through the hardware 266 " setting the overflow or exponent overflow bits. Then the correct error 267 " is signalled through a pl1-style call. 268 " 269 " At the moment all errors signalled in this manner are restartable, even 270 " though a "size_error" is declared in documentation as not being 271 " restartable. 272 " 273 " Decimal and float binary range error declaration as underflow or 274 " overflow depend upon the correct sign being present in the 275 " flt_dec_generic_exp and the flt_bin_generic_exp respectively. The 276 " contents can well be shifted to the upper bits, the the word sign bit 277 " must be correct. 278 " 279 " 280 " TESTING 281 " 282 " This program has been tested through the test sub-system "test_a" and 283 " its associated test scripts to assure correct functioning. This test 284 " sub-system should be used to pinpoint and duplicate all reported errors 285 " and to verify correct functioning after error removal. 286 " 287 " Three basic test suites are used: 288 " 289 " fetch_tests.test_a Tests ability to fetch values with minimum 290 " converison done. 291 " store_tests.test_a Tests ability to store results with minimum 292 " conversion done. Pre-requisite is fetch_tests. 293 " c_test.rnd.test_a Tests conversion and fixups with rounding. 294 " Pre-requisites are fetch and store tests. 295 " 296 " When you do any work on assign_ or any_to_any_ please add to these test 297 " suites. 298 299 " Work Area allocation has been done in two areas, rather than the 300 " previous three areas. 301 " 302 " The first area matches the previous smallest area, and is 28 words in 303 " length. The second area is a total of 118 words in length. The previous 304 " second area was 44 words in length and had a decimal temporary within it. 305 " This functionality has been absorbed within the first area. 306 " 307 " The previous third area was a total of 158 words in length, and its 308 " functionality has been absorbed by the new second area's 118 word length. 309 " 310 " The first area is used for all numeric to numeric conversions, pl1 311 " bit to bit, and pl1 character to character conversions. The second area is 312 " used for numeric to character and character to numeric and bit conversions. 313 " It is also required if conversions of bit or character input, other than pl1 314 " type descriptors, are done, where a re-structure of the stream is needed. ANY_TO_ANY_ CALLERS as of: 84-03-19 315 316 317 " References to any_to_any_: (bound_library_wired_ in HARDCORE) 318 " assign_.alm 200 words 319 " put_format_.alm 156 words 320 " References to any_to_any_$any_to_any_round_: (bound_library_wired_ in HARDCORE) 321 " assign_.alm 200 words 322 " formline_.alm 160 words 323 " pl1_operators_.alm passed by user program 'convert' = 164 words 324 " put_format_.alm 156 words 325 " References to any_to_any_$any_to_any_truncate_: (bound_library_wired_ in HARDCORE) 326 " assign_.alm 200 words 327 " formline_.alm 160 words 328 " pl1_operators_.alm passed by user program 'convert' = 164 words 329 " References to any_to_any_$char_to_numeric_: (bound_library_wired_ in HARDCORE) 330 " assign_.alm 200 words 331 " References to any_to_any_$real_to_real_round_: (bound_library_wired_ in HARDCORE) 332 " pl1_operators_.alm passed by user program 'convert' = 164 words 333 " pl1_operators_.alm passed by user program 'convert' = 164 words 334 335 " Calling sequence and register conventions: 336 " 337 " Entries: 338 " any_to_any_ 339 " any_to_any_round_ 340 " any_to_any_truncate_ 341 " real_to_real_ 342 " real_to_real_round_ 343 " real_to_real_truncate_ 344 " 345 " (pr0) pl1_operators_$operator_table (Not used...must not be changed) 346 " pr1 points to the target. (Input) 347 " pr3 points to the source. (Input) 348 " pr5 caller-supplied work area. See "WORK AREA DESCRIPTION" above. 349 " (Input) 350 " pr6 points to caller's stack frame. (Input) 351 " a contains the length of the target if it 352 " is a string, or the scale of the target in AU 353 " and the precision in AL. (Input) 354 " q contains the length of the source if it 355 " is a string, or the scale of the source in QU 356 " and the precision in QL. (Input) 357 " x0 return offset in calling program. (Input) 358 " x6 contains the type code of the target. (Input) 359 " x7 contains the type code of the source. (Input) 360 361 362 " NOTE. We run with overflow faults masked. All exit is done through 363 " 364 " tra unmask_exit 365 " 366 " or by similarly doing an: 367 " 368 " ldi unmask_faults,dl 369 " 370 " prior to exiting routine. Without faults masked we can normally take 371 " overflow conditions and not know to signal properly within the code. 372 000000 373 any_to_any_truncate_: 000000 374 real_to_real_truncate_: 000000 aa 000000 6250 00 375 eax5 0 " no rounding 000001 0a 000007 7100 00 376 tra xfer 377 000002 378 any_to_any_: 000002 379 real_to_real_: 000002 aa 000000 6250 00 380 eax5 0 " assume no rounding 000003 0a 000376 2210 16 381 ldx1 target_type_map,x6 " get flags for target 000004 aa 400000 3010 03 382 canx1 round,du " check targetfor rounding 000005 0a 000007 6000 00 383 tze xfer " no rounding, process 384 000006 385 any_to_any_round_: 000006 386 real_to_real_round_: 000006 aa 000001 6250 00 387 eax5 1 " round 388 389 390 " Dispatch 391 392 " Scales and precision share the same word. Scales are upper (ldxN). 393 " Precision is lower (lxlN). 394 000007 aa 5 00000 7571 00 395 xfer: staq work|scales " Scales in DU, precision DL 000010 aa 000256 1070 03 396 cmpx7 source_map_size,du " See if source convertable 000011 0a 006273 6030 00 397 trc error_bad_type 000012 aa 000256 1060 03 398 cmpx6 target_map_size,du " See if target convertable 000013 0a 006273 6030 00 399 trc error_bad_type 400 401 " Find source conversion to GENERIC 402 000014 aa 5 00002 4501 00 403 stz work|original_source " no stack error extension 000015 aa 004000 6340 07 404 ldi mask_faults,dl " overflows noted by software 000016 0a 000120 7230 17 405 lxl3 source_type_map,x7 " get source conversion addr 000017 aa 000000 6730 13 406 tsp7 0,x3 " conversion 000020 aa 004000 6340 07 407 ldi mask_faults,dl " reset to permit faults 408 " through with conversion, check for complex target 409 " (Note that char & bit targets return directly to the user, 410 " not to the caller via pr7). 411 " 412 " Source and target pointers have been updated by get and put routines 413 " and are correct for imaginary parts. 414 415 000021 0a 000376 2210 16 416 ldx1 target_type_map,x6 " get flag word for target 000022 aa 200000 3010 03 417 canx1 complex,du " complex? 000023 0a 000056 6000 00 418 tze unmask_exit " real target, return 419 000024 0a 000120 7210 17 420 lxl1 source_type_map,x7 " get source routine 000025 0a 000120 2220 17 421 ldx2 source_type_map,x7 000026 aa 020000 3020 03 422 canx2 simple,du " check if source is simple 000027 0a 000056 6010 00 423 tnz unmask_exit 000030 aa 200000 3020 03 424 canx2 complex,du " check if source is complex 000031 0a 000054 6010 00 425 tnz convert_complex " convert complex source 426 427 " Source is not complex, target is, assume zero imaginary part. 428 " Zero generic type of source in work area and then convert it. 429 000032 0a 000120 2230 16 430 ldx3 source_type_map,x6 " Get GENERIC type 000033 aa 000077 3630 03 431 anx3 generic_mask,du 000034 0a 000076 7100 33 432 tra zero_generic,x3* " zero work area 433 000035 434 zero_fixed_bin: " Zero GENERIC fixed bin 000035 aa 5 00004 4501 00 435 stz work|fix_bin_generic 000036 aa 5 00005 4501 00 436 stz work|fix_bin_generic+1 000037 0a 001326 2210 03 437 ldx1 fix_bin_generic_conversion,du 000040 0a 000054 7100 00 438 tra convert_complex 439 000041 440 zero_float_bin: " Zero GENERIC float bin 000041 aa 5 00012 4501 00 441 stz work|flt_bin_generic_exp 000042 aa 5 00006 4501 00 442 stz work|flt_bin_generic 000043 aa 5 00007 4501 00 443 stz work|flt_bin_generic+1 000044 0a 001600 2210 03 444 ldx1 flt_bin_generic_conversion,du 000045 0a 000054 7100 00 445 tra convert_complex 446 000046 447 zero_float_dec: " Zero GENERIC float decimal 000046 aa 000012 2230 03 448 ldx3 default_flt_dec_p,du " length of decimal 000047 aa 000140 3004 00 449 mvn (),(pr,rl) 000050 0a 000103 010002 450 desc9ls dec_zero,2 000051 aa 500014 000013 451 desc9fl work|flt_dec_generic,x3 000052 aa 5 00013 4501 00 452 stz work|flt_dec_generic_exp 000053 0a 002004 2210 03 453 ldx1 flt_dec_generic_conversion,du 454 " tra convert_complex 455 000054 456 convert_complex: 000054 aa 004000 6340 07 457 ldi mask_faults,dl " mask for conversion faults 000055 aa 000000 6730 11 458 tsp7 0,x1 " Convert imaginary to target 459 460 " Unmask faults for exit. 461 000056 462 unmask_exit: 000056 aa 000000 6340 07 463 ldi unmask_faults,dl 000057 aa 5 00002 2341 00 464 szn work|original_source " was stack extended? 000060 0a 000066 6000 00 465 tze exit.1 000061 aa 6 00000 3731 00 466 epbp7 sp|0 " get ptr to base of stack 000062 467 inhibit on <+><+><+><+><+><+><+><+><+><+><+> 000062 aa 7 00024 3523 20 468 epp2 sb|stack_header.stack_end_ptr,* " throw extension 000063 aa 2 77600 3523 00 469 epp2 pr2|-error_extension 000064 aa 7 00024 2523 00 470 spri2 sb|stack_header.stack_end_ptr 000065 aa 6 00022 2523 00 471 spri2 sp|stack_frame.next_sp 000066 472 inhibit off <-><-><-><-><-><-><-><-><-><-><-> 473 474 " Setup A and X7 as if for char_to_numeric_ 475 000066 476 exit.1: 000066 aa 5 00000 2351 00 477 lda work|target_precision " scale (DU), precision (DL) 000067 aa 000000 6270 16 478 eax7 0,x6 " source type used 000070 aa 6 00046 7101 70 479 tra sp|tbp,*x0 " return to caller 480 " CHAR_TO_NUMERIC_ 481 482 " Externally available interface. 483 " 484 " procedure to convert a number to its syntactic numeric form 485 " and return such information to caller 486 " entered with: 487 " source ptr in pr3 488 " target ptr in pr1 (must be double-word aligned) 489 " work ptr in pr5 490 " source length in q 491 " rounding called if x5 non-zero 492 " 493 " exits with: 494 " number stored in target 495 " number type in x7 496 " number precision in al 497 " number scale in au 498 000071 499 char_to_numeric_: 000071 aa 004000 6340 07 500 ldi mask_faults,dl " mask fault on indicators 000072 aa 000000 2260 03 501 ldx6 0,du " flag target of opportunity 000073 aa 5 00001 7561 00 502 stq work|source_string_length 000074 aa 3 00000 3521 00 503 epp generic,source|0 " point to source 000075 0a 003511 7100 00 504 tra char_to_arithmetic " convert 505 506 507 " Case table used for zeroing source GENERIC work area 508 000076 509 zero_generic: 000076 0a 006273 0000 00 510 arg error_bad_type 000077 0a 000035 0000 00 511 arg zero_fixed_bin " fixed bin signed 000100 0a 000041 0000 00 512 arg zero_float_bin " float bin 000101 0a 000046 0000 00 513 arg zero_float_dec " float decimal 000102 0a 000035 0000 00 514 arg zero_fixed_bin " fixed bin unsigned 515 516 517 518 " Following is both a 2 character fixed decimal 0 and a 3 character 519 " float decimal 0.0 (normalized). 520 000103 aa 053 060 000 000 521 dec_zero: aci "+0" 522 523 524 525 " Following instruction sets are used by execute instructions. Double 526 " pairing is typically used for no-round/round with X5 keying exec. 527 000104 528 mvn.pr_rl.pr_rl: 000104 aa 0 00140 3005 40 529 mvn (pr,rl),(pr,rl) 000105 aa 0 00340 3005 40 530 mvn (pr,rl),(pr,rl),round 531 000106 532 dv3d.id.pr.pr_rl: 000106 aa 140100 2274 20 533 dv3d (id),(pr),(pr,rl) 000107 aa 140300 2274 20 534 dv3d (id),(pr),(pr,rl),round 535 000110 536 dv3d.id.pr_rl.pr_rl: 000110 aa 140140 2274 20 537 dv3d (id),(pr,rl),(pr,rl) 000111 aa 140340 2274 20 538 dv3d (id),(pr,rl),(pr,rl),round 539 000112 540 mp3d.id.pr_rl.pr_rl: 000112 aa 140140 2264 20 541 mp3d (id),(pr,rl),(pr,rl) " index 0 (truncate) 000113 aa 140340 2264 20 542 mp3d (id),(pr,rl),(pr,rl),round " index 1 (round) 543 000114 544 dv3d.id.pr_rl.pr: 000114 aa 100140 2274 20 545 dv3d (id),(pr,rl),(pr) 000115 aa 100340 2274 20 546 dv3d (id),(pr,rl),(pr),round 547 000116 548 mp3d.id.pr_rl.pr: 000116 aa 100140 2264 20 549 mp3d (id),(pr,rl),(pr) 000117 aa 100340 2264 20 550 mp3d (id),(pr,rl),(pr),round 551 552 " Macro Definitions for table driving. 553 554 " macros to define type tables. 555 " 556 " arg1 - Internal routine to convert source or target. 557 " arg2 - Generic internal data type. 558 " arg3 - FLAGS expression. 559 " 000120 560 maclist off save 561 562 " Table for source conversion 563 564 macro stype 1 565 vfd 12/(&3)/64,6/&2,18/get_&1 2 566 vfd 12/(&3)/64,6/&2,18/get_&1_packed 3 567 &end 568 569 " Table for target conversion 570 571 macro ttype 1 572 vfd 12/(&3)/64,6/&2,18/put_&1 2 573 vfd 12/(&3)/64,6/&2,18/put_&1_packed 3 574 &end 575 576 577 " Following flags are used to determine what should be done with a 578 " data type. 579 " 580 " round indicates the default is to round the target. 581 " complex indicates the target or source is complex. 582 " short indicates the target is 1 word float bin for rounding. 583 400000 584 bool round,400000 " round 200000 585 bool complex,200000 " complex 100000 586 bool short,100000 " single word flt bin 040000 587 bool varying,040000 " varying bit or char string 020000 588 bool simple,020000 " type is not complex 010000 589 bool fix,010000 " data type is fixed 590 591 " The following fields are used to mask out portions of the source and 592 " target tables to recover fields. DU, DL is significant. 593 " 594 " flag_mask recovers the field containing flags. 595 " generic_mask recovers the field indicating GENERIC type. 596 " type_mask recovers the offset to the conversion routine. 597 777700 598 bool flag_mask,777700 " DU 000077 599 bool generic_mask,000077 " DU 777777 600 bool type_mask,777777 " DL 601 602 603 " The following table contains the the GENERIC data type numbers. 604 000001 605 equ FIXED_BIN,1 000002 606 equ FLOAT_BIN,2 000003 607 equ FLOAT_DEC,3 000004 608 equ FIXED_BIN_UNS,4 609 000005 610 equ BIT,5 000006 611 equ CHAR,6 612 613 " Fixed binary is divided into FIXED_BIN and FIXED_BIN_UNS because there 614 " are distinct operational differences between the two, particularly since 615 " a FIXED_BIN_UNS number can appear negative if viewed as a FIXED_BIN 616 " number, and right shifts to normalize a FIXED_BIN_UNS number need to be 617 " done with LOGICAL rather than arithmetic operations. 618 " mapped input type 619 000120 620 source_type_map: 621 "( 0); stype ERROR,0 " FILLER of ERROR 622 "( 1); stype fix_bin_1,FIXED_BIN,fix " fixed binary short 623 "( 2); stype fix_bin_2,FIXED_BIN,fix " fixed binary long 624 "( 3); stype flt_bin_1,FLOAT_BIN,round " float binary short 625 "( 4); stype flt_bin_2,FLOAT_BIN,round " float binary long 626 "( 5); stype fix_bin_1,FIXED_BIN,(complex+fix) " complex fixed binary short 627 "( 6); stype fix_bin_2,FIXED_BIN,(complex+fix) " complex fixed binary long 628 "( 7); stype flt_bin_1,FLOAT_BIN,(round+complex)" complex float binary short 629 "( 8); stype flt_bin_2,FLOAT_BIN,(round+complex)" complex float binary long 630 "( 9); stype fix_dec_9ls,FLOAT_DEC,fix " fixed decimal 9-bit 631 "(10); stype flt_dec_9,FLOAT_DEC,round " float decimal 9-bit 632 "(11); stype fix_dec_9ls,FLOAT_DEC,(complex+fix) " complex fixed decimal 9-bit 633 "(12); stype flt_dec_9,FLOAT_DEC,(round+complex) " complex float decimal 9-bit 634 "(13); stype ERROR,0 " pointer 635 "(14); stype ERROR,0 " offset 636 "(15); stype ERROR,0 " label 637 "(16); stype ERROR,0 " entry 638 "(17); stype ERROR,0 " structure 639 "(18); stype ERROR,0 " area 640 "(19); stype bit,BIT " bit 641 "(20); stype varying_bit,BIT,varying " varying bit 642 "(21); stype char,CHAR " character 643 "(22); stype varying_char,CHAR,varying " varying character 644 "(23); stype ERROR,0 " file 645 "(24); stype ERROR,0 " label constant runtime 646 "(25); stype ERROR,0 " int entry runtime 647 "(26); stype ERROR,0 " ext entry runtime 648 "(27); stype ERROR,0 " ext procedure runtime 649 "(28); stype ERROR,0 " RESERVED (type 28) 650 "(29); stype fix_dec_9ls_ovrp,FLOAT_DEC,fix " fixed dec leading overpunch 9-bit 651 "(30); stype fix_dec_9ts_ovrp,FLOAT_DEC,fix " fixed dec trailing overpunch 9-bit 652 "(31); stype ERROR,0 " RESERVED (type 31) 653 "(32); stype ERROR,0 " RESERVED (type 32) 654 "(33); stype fix_bin_1uns,FIXED_BIN_UNS,fix " fixed binary unsigned short 655 "(34); stype fix_bin_2uns,FIXED_BIN_UNS,fix " fixed binary unsigned long 656 "(35); stype fix_dec_9uns,FLOAT_DEC,fix " fixed decimal unsigned 9-bit 657 "(36); stype fix_dec_9ts,FLOAT_DEC,fix " fixed decimal trailing sign 9-bit 658 "(37); stype fix_dec_9ts,FLOAT_DEC,(complex+fix) " complex fixed decimal trailing sign (future??) 659 "(38); stype fix_dec_4uns,FLOAT_DEC,fix " fixed decimal unsigned 4-bit 660 "(39); stype fix_dec_4ts,FLOAT_DEC,fix " fixed decimal trailing sign 4-bit 661 "(40); stype fix_dec_4uns,FLOAT_DEC,fix " fixed decimal unsigned 4-bit byte-aligned 662 "(41); stype fix_dec_4ls,FLOAT_DEC,fix " fixed decimal leading sign 4-bit 663 "(42); stype flt_dec_4,FLOAT_DEC,round " float decimal 4-bit 664 "(43); stype fix_dec_4ls,FLOAT_DEC,fix " decimal leading sign 4-bit byte-aligned 665 "(44); stype flt_dec_4,FLOAT_DEC,round " float decimal 4-bit byte-aligned 666 "(45); stype fix_dec_4ls,FLOAT_DEC,(complex+fix) " complex fixed decimal leading sign 4-bit byte-aligned 667 "(46); stype flt_dec_4,FLOAT_DEC,(complex+round) " cplx float decimal 4-bit byte-aligned 668 "(47); stype flt_hex_1,FLOAT_BIN,round " float hex single 669 "(48); stype flt_hex_2,FLOAT_BIN,round " float hex double 670 "(49); stype flt_hex_1,FLOAT_BIN,(round+complex) " complex float hex single 671 "(50); stype flt_hex_2,FLOAT_BIN,(round+complex) " complex float hex double 672 "(51); stype ERROR,0 " RESERVED (type 51) 673 "(52); stype ERROR,0 " RESERVED (type 52) 674 "(53); stype ERROR,0 " RESERVED (type 53) 675 "(54); stype ERROR,0 " RESERVED (type 54) 676 "(55); stype ERROR,0 " RESERVED (type 55) 677 "(56); stype ERROR,0 " RESERVED (type 56) 678 "(57); stype ERROR,0 " RESERVED (type 57) 679 "(58); stype ERROR,0 " ESCAPE (type 58) 680 "(59); stype ERROR,0 " algol68 straight 681 "(60); stype ERROR,0 " algol68 format 682 "(61); stype ERROR,0 " algol68 array descriptor 683 "(62); stype ERROR,0 " algol68 union 684 "(63); stype ERROR,0 " picture runtime 685 "(64); stype ERROR,0 " EXTRA (64) 686 "(65); stype ERROR,0 " EXTRA (65) 687 "(66); stype ERROR,0 " EXTRA (66) 688 "(67); stype ERROR,0 " EXTRA (67) 689 "(68); stype ERROR,0 " EXTRA (68) 690 "(69); stype ERROR,0 " EXTRA (69) 691 "(70); stype ERROR,0 " EXTRA (70) 692 "(71); stype ERROR,0 " EXTRA (71) 693 "(72); stype ERROR,0 " EXTRA (72) 694 "(73); stype ERROR,0 " EXTRA (73) 695 "(74); stype ERROR,0 " EXTRA (74) 696 "(75); stype ERROR,0 " EXTRA (75) 697 "(76); stype ERROR,0 " EXTRA (76) 698 "(77); stype ERROR,0 " EXTRA (77) 699 "(78); stype ERROR,0 " EXTRA (78) 700 "(79); stype ERROR,0 " EXTRA (79) 701 "(80); stype ERROR,0 " EXTRA (80) 702 "(81); stype flt_dec_ext,FLOAT_DEC,round " float dec extended 703 "(82); stype flt_dec_ext,FLOAT_DEC,(round+complex) " complex float dec extended 704 "(83); stype flt_dec_gen,FLOAT_DEC,round " float dec generic 705 "(84); stype flt_dec_gen,FLOAT_DEC,(round+complex) " complex float dec generic 706 "(85); stype flt_bin_gen,FLOAT_BIN,round " float bin generic 707 "(86); stype flt_bin_gen,FLOAT_BIN,(round+complex) " complex float bin generic 708 000256 709 equ source_map_size,*-source_type_map 710 " mapped output type 711 000376 712 target_type_map: 713 "( 0); ttype ERROR,0 " FILLER of ERROR 714 "( 1); ttype fix_bin_1,FIXED_BIN " fixed binary short 715 "( 2); ttype fix_bin_2,FIXED_BIN " fixed binary long 716 "( 3); ttype flt_bin_1,FLOAT_BIN,(round+short) " float binary short 717 "( 4); ttype flt_bin_2,FLOAT_BIN,round " float binary long 718 "( 5); ttype fix_bin_1,FIXED_BIN,complex " complex fixed binary short 719 "( 6); ttype fix_bin_2,FIXED_BIN,complex " complex fixed binary long 720 "( 7); ttype flt_bin_1,FLOAT_BIN,(round+complex+short)" complex float binary short 721 "( 8); ttype flt_bin_2,FLOAT_BIN,(round+complex)" complex float binary long 722 "( 9); ttype fix_dec_9ls,FLOAT_DEC " fixed decimal 9-bit 723 "(10); ttype flt_dec_9,FLOAT_DEC,round " float decimal 9-bit 724 "(11); ttype fix_dec_9ls,FLOAT_DEC,complex " complex fixed decimal 9-bit 725 "(12); ttype flt_dec_9,FLOAT_DEC,(round+complex) " complex float decimal 9-bit 726 "(13); ttype ERROR,0 " pointer 727 "(14); ttype ERROR,0 " offset 728 "(15); ttype ERROR,0 " label 729 "(16); ttype ERROR,0 " entry 730 "(17); ttype ERROR,0 " structure 731 "(18); ttype ERROR,0 " area 732 "(19); ttype bit,BIT " bit 733 "(20); ttype varying_bit,BIT,varying " varying bit 734 "(21); ttype char,CHAR " character 735 "(22); ttype varying_char,CHAR,varying " varying character 736 "(23); ttype ERROR,0 " file 737 "(24); ttype ERROR,0 " label constant runtime 738 "(25); ttype ERROR,0 " int entry runtime 739 "(26); ttype ERROR,0 " ext entry runtime 740 "(27); ttype ERROR,0 " ext procedure runtime 741 "(28); ttype ERROR,0 " RESERVED (type 28) 742 "(29); ttype fix_dec_9ls_ovrp,FLOAT_DEC " fixed dec leading overpunch 9-bit 743 "(30); ttype fix_dec_9ts_ovrp,FLOAT_DEC " fixed dec trailing overpunch 9-bit 744 "(31); ttype ERROR,0 " RESERVED (type 31) 745 "(32); ttype ERROR,0 " RESERVED (type 32) 746 "(33); ttype fix_bin_1uns,FIXED_BIN_UNS " fixed binary unsigned short 747 "(34); ttype fix_bin_2uns,FIXED_BIN_UNS " fixed binary unsigned long 748 "(35); ttype fix_dec_9uns,FLOAT_DEC " fixed decimal unsigned 9-bit 749 "(36); ttype fix_dec_9ts,FLOAT_DEC " fixed decimal trailing sign 9-bit 750 "(37); ttype fix_dec_9ts,FLOAT_DEC,complex " complex fixed decimal trailing sign (future??) 751 "(38); ttype fix_dec_4uns,FLOAT_DEC " fixed decimal unsigned 4-bit 752 "(39); ttype fix_dec_4ts,FLOAT_DEC " fixed decimal trailing sign 4-bit 753 "(40); ttype fix_dec_4uns,FLOAT_DEC " fixed decimal unsigned 4-bit byte-aligned 754 "(41); ttype fix_dec_4ls,FLOAT_DEC " fixed decimal leading sign 4-bit 755 "(42); ttype flt_dec_4,FLOAT_DEC,round " float decimal 4-bit 756 "(43); ttype fix_dec_4ls,FLOAT_DEC " decimal leading sign 4-bit byte-aligned 757 "(44); ttype flt_dec_4,FLOAT_DEC,round " float decimal 4-bit byte-aligned 758 "(45); ttype fix_dec_4ls,FLOAT_DEC,complex " complex fixed decimal leading sign 4-bit byte-aligned 759 "(46); ttype flt_dec_4,FLOAT_DEC,(complex+round) " cplx float decimal 4-bit byte-aligned 760 "(47); ttype flt_hex_1,FLOAT_BIN,round " float hex single 761 "(48); ttype flt_hex_2,FLOAT_BIN,round " float hex double 762 "(49); ttype flt_hex_1,FLOAT_BIN,(round+complex) " complex float hex single 763 "(50); ttype flt_hex_2,FLOAT_BIN,(round+complex) " complex float hex double 764 "(51); ttype ERROR,0 " RESERVED (type 51) 765 "(52); ttype ERROR,0 " RESERVED (type 52) 766 "(53); ttype ERROR,0 " RESERVED (type 53) 767 "(54); ttype ERROR,0 " RESERVED (type 54) 768 "(55); ttype ERROR,0 " RESERVED (type 55) 769 "(56); ttype ERROR,0 " RESERVED (type 56) 770 "(57); ttype ERROR,0 " RESERVED (type 57) 771 "(58); ttype ERROR,0 " ESCAPE (type 58) 772 "(59); ttype ERROR,0 " algol68 straight 773 "(60); ttype ERROR,0 " algol68 format 774 "(61); ttype ERROR,0 " algol68 array descriptor 775 "(62); ttype ERROR,0 " algol68 union 776 "(63); ttype ERROR,0 " picture runtime 777 "(64); ttype ERROR,0 " EXTRA (64) 778 "(65); ttype ERROR,0 " EXTRA (65) 779 "(66); ttype ERROR,0 " EXTRA (66) 780 "(67); ttype ERROR,0 " EXTRA (67) 781 "(68); ttype ERROR,0 " EXTRA (68) 782 "(69); ttype ERROR,0 " EXTRA (69) 783 "(70); ttype ERROR,0 " EXTRA (70) 784 "(71); ttype ERROR,0 " EXTRA (71) 785 "(72); ttype ERROR,0 " EXTRA (72) 786 "(73); ttype ERROR,0 " EXTRA (73) 787 "(74); ttype ERROR,0 " EXTRA (74) 788 "(75); ttype ERROR,0 " EXTRA (75) 789 "(76); ttype ERROR,0 " EXTRA (76) 790 "(77); ttype ERROR,0 " EXTRA (77) 791 "(78); ttype ERROR,0 " EXTRA (78) 792 "(79); ttype ERROR,0 " EXTRA (79) 793 "(80); ttype ERROR,0 " EXTRA (80) 794 "(81); ttype flt_dec_ext,FLOAT_DEC,round " float dec extended 795 "(82); ttype flt_dec_ext,FLOAT_DEC,(round+complex) " complex float dec extended 796 "(83); ttype flt_dec_gen,FLOAT_DEC,round " float dec generic 797 "(84); ttype flt_dec_gen,FLOAT_DEC,(round+complex) " complex float dec generic 798 "(85); ttype flt_bin_gen,FLOAT_BIN,round " float bin generic 799 "(86); ttype flt_bin_gen,FLOAT_BIN,(round+complex) " complex float bin generic 800 000256 801 equ target_map_size,*-target_type_map 802 000654 803 maclist restore 804 " Register conventions for source GET routines. 805 " (all routines specified in the table below). All registers named below, 806 " must be preserved by the conversion routine. 807 " 808 " pr0 (reserved - pl1_operators_ ptr) 809 " pr1 points to target. 810 " pr2 points to generic data area 811 " pr3 points to source. 812 " pr5 points to work area. 813 " pr6 (reserved - stack_frame ptr) 814 " pr7 points to return location in any_to_any_. 815 " x0 return offset in user program. 816 " x5 0 if no round, 1 if round. 817 " x6 target type. 818 " x7 source type. 819 820 " work|scales stored scales (in upper halves) 821 " work|precisions stored precisions (in lower halves) 822 " 823 " Decimal GET routines leave X3 as the size of the floating decimal 824 " generic variable, including sign and hardware exponent. 825 826 " Conversion rules go that source and target pointers are updated by the GET 827 " and PUT routines respectively, thus they are always up-to-date by the 828 " end of the conversion. This makes converting real and imaginary parts 829 " quite easy. If range errors are detected, they are signalled as 830 " appropriate through the singalling routines at the end of this program. 831 " Depending upon the type of error signalled, return is done to a float 832 " bin or float decimal generic converison, to continue the conversion of a 833 " 0.0 quantity. Fixed bin conversion errors simply return. 834 " 835 " Conditions of calling conversion routines: 836 " 837 " Fixed Bin: 72-bit value is expected in work|fix_bin_generic. 838 " Float Bin: 72-bit value is expected in work|flt_bin_generic, 839 " 36-bit exponent is expected in work|flt_bin_generic_exp. 840 " Float Decimal:X3 has the length of the float decimal number, including 841 " the sign and a byte for the hardware exponent. The float 842 " decimal number is left in work|flt_dec_generic and the 843 " 36-bit software exponent is in work|flt_dec_generic_exp. 844 " Fixed Bin uns:72-bit value is expected in work|fix_bin_generic. 845 " Bit: Bit value is pointed to by generic|0. If necessary the 846 " area work|bit_generic can be used for internal storage, BUT 847 " it overlays work|flt_dec_generic. This conflict must be 848 " remembered in conversion routines. In a varying bit string 849 " the pointer points at the start of the bit stream, which is 850 " one word beyond the length word. X3 is the length of the 851 " bit string (up to 256 bits). 852 " Char: Character string is pointed to by generic|0. If necessary 853 " the area work|char_generic can be used for internal storage 854 " and does not conflict with other storage. X3 is the length 855 " of the character string (up to 256 characters). In a 856 " varying character string the pointer points at the start of 857 " the character stream, which is one word beyond the length 858 " word. 859 " 860 " All character conversions require the large work area. Fixed Binary Source Conversion to GENERIC 861 862 863 " Unsigned Cases 864 865 000654 866 get_fix_bin_1uns: " Fixed bin single word unsigned 000654 aa 3 00000 2351 00 867 lda source|0 " load value 000655 aa 000044 7730 00 868 lrl 36 " position to Q, clear A 000656 aa 5 00004 7571 00 869 staq work|fix_bin_generic 000657 aa 3 00001 3535 00 870 epp source,source|1 " update source pointer 000660 0a 002402 7100 00 871 tra fix_bin_uns_generic_conversion 872 873 000661 874 get_fix_bin_1uns_packed: " Packed fixed bin single unsigned 000661 875 get_fix_bin_2uns_packed: " Packed fixed bin double unsigned 000661 aa 5 00001 7221 00 876 lxl2 work|source_precision 000662 aa 0 03140 0605 40 877 csl (pr,rl),(pr,rl),bool(move) 000663 aa 300000 000012 878 descb source|0,x2 000664 aa 500004 000012 879 descb work|fix_bin_generic,x2 000665 aa 3 00000 5035 12 880 abd source|0,x2 " update source pointer 000666 aa 5 00004 2371 00 881 ldaq work|fix_bin_generic 000667 aa 777777 6620 03 882 erx2 =o777777,du " form 2's complement precision 000670 aa 000111 7730 12 883 lrl 72+1,2 " position result unsigned 000671 aa 5 00004 7571 00 884 staq work|fix_bin_generic 000672 0a 002402 7100 00 885 tra fix_bin_uns_generic_conversion 886 887 000673 888 get_fix_bin_2uns: " Fixed bin double word to GENERIC 000673 aa 3 00000 2371 00 889 ldaq source|0 " load value 000674 aa 5 00004 7571 00 890 staq work|fix_bin_generic 000675 aa 3 00002 3535 00 891 epp source,source|2 " update source pointer 000676 0a 002402 7100 00 892 tra fix_bin_uns_generic_conversion 893 894 895 896 897 " Signed Cases 898 899 000677 900 get_fix_bin_1: " Fixed bin single word to GENERIC 000677 aa 3 00000 2351 00 901 lda source|0 " load value 000700 aa 000044 7330 00 902 lrs 36 " position and sign extend 000701 aa 5 00004 7571 00 903 staq work|fix_bin_generic 000702 aa 3 00001 3535 00 904 epp source,source|1 000703 0a 001326 7100 00 905 tra fix_bin_generic_conversion 906 907 000704 908 get_fix_bin_1_packed: " Packed fixed bin single to GENERIC 000704 909 get_fix_bin_2_packed: " Packed fixed bin double to GENERIC 000704 aa 5 00001 7221 00 910 lxl2 work|source_precision 000705 aa 000001 0620 03 911 adx2 =1,du " account for sign 000706 aa 0 03140 0605 40 912 csl (pr,rl),(pr,rl),bool(move) 000707 aa 300000 000012 913 descb source|0,x2 000710 aa 500004 000012 914 descb work|fix_bin_generic,x2 000711 aa 3 00000 5035 12 915 abd source|0,x2 " update source pointer 000712 aa 5 00004 2371 00 916 ldaq work|fix_bin_generic 000713 aa 777777 6620 03 917 erx2 =o777777,du " form 2's complement precision 000714 aa 000111 7330 12 918 lrs 72+1,2 " position result 000715 aa 5 00004 7571 00 919 staq work|fix_bin_generic 000716 0a 001326 7100 00 920 tra fix_bin_generic_conversion 921 922 000717 923 get_fix_bin_2: " Fixed bin double word to GENERIC fb (71) 000717 aa 3 00000 2371 00 924 ldaq source|0 " load value 000720 aa 5 00004 7571 00 925 staq work|fix_bin_generic 000721 aa 3 00002 3535 00 926 epp source,source|2 " update source pointer 000722 0a 001326 7100 00 927 tra fix_bin_generic_conversion 928 " Floating Binary Source Conversion to GENERIC 929 930 000723 931 get_flt_bin_1: " Floating binary single to generic 000723 aa 3 00000 4311 00 932 fld source|0 000724 aa 3 00001 3535 00 933 epp source,source|1 " update source pointer 000725 0a 000740 7100 00 934 tra end_get_flt_bin 935 000726 936 get_flt_bin_1_packed: " Floating binary single packed to generic 000726 937 get_flt_bin_2_packed: " Floating binary double packed to generic 000726 aa 5 00001 7221 00 938 lxl2 work|source_precision 000727 aa 000011 0620 03 939 adx2 =9,du " account for sign and exponent 000730 aa 0 03100 0605 40 940 csl (pr,rl),(pr),bool(move),fill(0) 000731 aa 300000 000012 941 descb source|0,x2 000732 aa 500006 000110 942 descb work|flt_bin_generic,72 000733 aa 5 00006 4331 00 943 dfld work|flt_bin_generic 000734 aa 3 00000 5035 12 944 abd source|0,x2 " update source pointer 000735 0a 000740 7100 00 945 tra end_get_flt_bin 946 000736 947 get_flt_bin_2: " Floating binary double to generic 000736 aa 3 00000 4331 00 948 dfld source|0 000737 aa 3 00002 3535 00 949 epp source,source|2 " update source pointer 950 " tra end_get_flt_bin 951 000740 952 end_get_flt_bin: 000740 0a 000745 6010 00 953 tnz get_flt_bin.zero " Not zero store as indicated 000741 aa 5 00012 4501 00 954 stz work|flt_bin_generic_exp 000742 aa 5 00006 4501 00 955 stz work|flt_bin_generic 000743 aa 5 00007 4501 00 956 stz work|flt_bin_generic+1 000744 0a 001600 7100 00 957 tra flt_bin_generic_conversion " Store absolute zero 958 000745 959 get_flt_bin.zero: 000745 aa 5 00012 4561 00 960 ste work|flt_bin_generic_exp 000746 aa 5 00006 7571 00 961 staq work|flt_bin_generic 000747 aa 5 00012 2351 00 962 lda work|flt_bin_generic_exp 000750 aa 000034 7310 00 963 ars 36-8 " position in full exponent 000751 aa 5 00012 7551 00 964 sta work|flt_bin_generic_exp 000752 0a 001600 7100 00 965 tra flt_bin_generic_conversion 966 967 968 " Get a GENERIC floating binary value. Storage form is: 969 " 970 " Double word aligned. 971 " 972 " AQ portion of EAQ. Full 72 bits stored. 973 " fixed bin (35) exponent value. 974 " PAD word. 975 000753 976 get_flt_bin_gen: " Floating binary generic to internal 000753 aa 3 00000 4331 00 977 dfld source|0 " move mantissa, 0->exp 000754 aa 5 00006 7571 00 978 staq work|flt_bin_generic 000755 aa 000000 4110 03 979 lde 0,du 000756 aa 3 00002 2351 00 980 lda source|2 000757 aa 5 00012 7551 00 981 sta work|flt_bin_generic_exp 000760 aa 3 00004 3535 00 982 epp source,source|4 " update source pointer 000761 0a 001600 7100 00 983 tra flt_bin_generic_conversion 984 " Floating Hexadecimal Source Conversion to GENERIC 985 986 000762 987 get_flt_hex_1: " Floating hex single to generic 000762 aa 3 00000 4311 00 988 fld source|0 000763 aa 3 00001 3535 00 989 epp source,source|1 " update source pointer 000764 0a 000777 7100 00 990 tra end_get_flt_hex 991 000765 992 get_flt_hex_1_packed: " Floating hex single packed to generic 000765 993 get_flt_hex_2_packed: " Floating hex double packed to generic 000765 aa 5 00001 7221 00 994 lxl2 work|source_precision 000766 aa 000011 0620 03 995 adx2 =9,du " account for sign and exponent 000767 aa 0 03100 0605 40 996 csl (pr,rl),(pr),bool(move),fill(0) 000770 aa 300000 000012 997 descb source|0,x2 000771 aa 500006 000110 998 descb work|flt_bin_generic,72 000772 aa 5 00006 4331 00 999 dfld work|flt_bin_generic 000773 aa 3 00000 5035 12 1000 abd source|0,x2 " update source pointer 000774 0a 000777 7100 00 1001 tra end_get_flt_hex 1002 000775 1003 get_flt_hex_2: " Floating hex double to generic 000775 aa 3 00000 4331 00 1004 dfld source|0 000776 aa 3 00002 3535 00 1005 epp source,source|2 " update source pointer 1006 " tra end_get_flt_hex 1007 000777 1008 end_get_flt_hex: 000777 0a 001004 6010 00 1009 tnz get_flt_hex.nz " Not zero - store as indicated 001000 aa 5 00012 4501 00 1010 stz work|flt_bin_generic_exp 001001 aa 5 00006 4501 00 1011 stz work|flt_bin_generic 001002 aa 5 00007 4501 00 1012 stz work|flt_bin_generic+1 001003 0a 001600 7100 00 1013 tra flt_bin_generic_conversion " Store absolute zero 1014 1015 1016 " Non-Zero Floating HEXADECIMAL - convert to extended floating binary 1017 001004 1018 get_flt_hex.nz: 001004 aa 5 00012 4561 00 1019 ste work|flt_bin_generic_exp 001005 aa 000000 4110 03 1020 lde =0,du " normalize to binary from hex 001006 aa 000000 5730 00 1021 fno 001007 aa 5 00013 4561 00 1022 ste work|flt_dec_generic_exp 001010 aa 000000 4110 03 1023 lde =0,du " save 0 exponent 001011 aa 5 00006 7571 00 1024 staq work|flt_bin_generic 001012 aa 5 00012 2351 00 1025 lda work|flt_bin_generic_exp " position for full range 001013 aa 000032 7310 00 1026 ars 36-8-2 " single bit shift 001014 aa 5 00012 7551 00 1027 sta work|flt_bin_generic_exp 001015 aa 5 00013 2351 00 1028 lda work|flt_dec_generic_exp " get binary correction 001016 aa 000034 7310 00 1029 ars 36-8 001017 aa 5 00012 0551 00 1030 asa work|flt_bin_generic_exp " include hex exponent 001020 0a 001600 7100 00 1031 tra flt_bin_generic_conversion 1032 " Fixed Decimal 9-bit Source Conversion to GENERIC 1033 1034 " ****NOTE**** - X2 MUST contain the fixed decimal length at the point 1035 " end_get_fix_dec.normalize is called. These initial routines leave 1036 " generic pointing to a 9-bit leading signed fixed decimal number. The 1037 " final conversion to GENERIC float dec is done by 1038 " end_get_fix_dec.normalize. 1039 1040 " 9-bit Leading Sign Case 1041 001021 1042 get_fix_dec_9ls: " Actual work done in 001021 1043 get_fix_dec_9ls_packed: " end_get_fix_dec.normalize 001021 aa 5 00001 7221 00 1044 lxl2 work|source_precision 001022 aa 000001 0620 03 1045 adx2 =1,du " count sign in size 001023 aa 3 00000 3521 00 1046 epp generic,source|0 " point to source 001024 aa 3 00000 5005 12 1047 a9bd source|0,x2 " update source pointer 001025 0a 001203 7100 00 1048 tra end_get_fix_dec.normalize 1049 1050 " 9-bit Leading Sign Overpunched Case 1051 001026 1052 get_fix_dec_9ls_ovrp: 001026 1053 get_fix_dec_9ls_ovrp_packed: 001026 aa 5 00001 7231 00 1054 lxl3 work|source_precision 001027 aa 000001 6220 13 1055 eax2 1,x3 " Count sign 1056 1057 " Move mantissa including overpunched sign, skip sign of generic FD 1058 001030 aa 0 00140 1005 40 1059 mlr (pr,rl),(pr,rl) 001031 aa 300000 000013 1060 desc9a source|0,x3 001032 aa 500014 200013 1061 desc9a work|fix_dec_generic(1),x3 1062 1063 " Translate overpunched sign to sign and leading digit 1064 001033 aa 000100 1244 00 1065 scm (),(pr),mask(000) " Determine index of sign 001034 0a 001114 000024 1066 desc9a overpunch_9_source,20 " Conversion table 001035 aa 300000 000001 1067 desc9a source|0,1 " overpunch 001036 aa 5 00013 0001 00 1068 arg work|flt_dec_generic_exp " index result 001037 0a 006273 6064 00 1069 ttn error_bad_type " not convertable 1070 001040 aa 5 00013 2351 00 1071 lda work|flt_dec_generic_exp 001041 aa 000001 7350 00 1072 als 1 " *2 for char index 001042 aa 000100 1004 05 1073 mlr (al),(pr) " Move in correct codes 001043 0a 001133 000002 1074 desc9a overpunch_9_chars,2 001044 aa 500014 000002 1075 desc9a work|fix_dec_generic,2 001045 aa 5 00014 3521 00 1076 epp generic,work|flt_dec_generic " point to 9bit_ls 001046 aa 3 00000 5005 13 1077 a9bd source|0,x3 " update source pointer 001047 0a 001203 7100 00 1078 tra end_get_fix_dec.normalize 1079 1080 " 9-bit Trailing Sign Overpunched Case 1081 001050 1082 get_fix_dec_9ts_ovrp: 001050 1083 get_fix_dec_9ts_ovrp_packed: 001050 aa 5 00001 7231 00 1084 lxl3 work|source_precision 001051 aa 000001 6220 13 1085 eax2 1,x3 " Count sign 1086 1087 " Move mantissa including overpunched sign, skip sign of generic FD 1088 001052 aa 0 00140 1005 40 1089 mlr (pr,rl),(pr,rl) 001053 aa 300000 000013 1090 desc9a source|0,x3 001054 aa 500014 200013 1091 desc9a work|fix_dec_generic(1),x3 1092 1093 " Translate overpunched sign to sign and leading digit 1094 001055 aa 000113 1244 00 1095 scm (),(pr,x3),mask(000) " Determine index of sign 001056 0a 001114 000024 1096 desc9a overpunch_9_source,20 " Conversion table 001057 aa 377777 600001 1097 desc9a source|-1(3),1 " overpunch 001060 aa 5 00013 0001 00 1098 arg work|flt_dec_generic_exp " index result 001061 0a 006273 6064 00 1099 ttn error_bad_type " not convertable 1100 001062 aa 5 00013 2351 00 1101 lda work|flt_dec_generic_exp 001063 aa 000100 1004 05 1102 mlr (al),(pr) " Move sign 001064 0a 001121 000001 1103 desc9a overpunch_9_signs,1 001065 aa 500014 000001 1104 desc9a work|fix_dec_generic,1 001066 aa 000113 1004 05 1105 mlr (al),(pr,x3) " Fixup trailing digit 001067 0a 001126 000001 1106 desc9a overpunch_9_digits,1 001070 aa 500014 000001 1107 desc9a work|fix_dec_generic,1 001071 aa 5 00014 3521 00 1108 epp generic,work|flt_dec_generic " point to 9bit_ls 001072 aa 3 00000 5005 13 1109 a9bd source|0,x3 " update source pointer 001073 0a 001203 7100 00 1110 tra end_get_fix_dec.normalize Fixed Decimal 9-bit Source Conversion to GENERIC 1111 1112 1113 " 9-bit Unsigned Case 1114 001074 1115 get_fix_dec_9uns: 001074 1116 get_fix_dec_9uns_packed: 001074 aa 5 00001 7241 00 1117 lxl4 work|source_precision 001075 aa 000001 6220 14 1118 eax2 1,x4 " length of leading sign result 001076 aa 000001 6230 12 1119 eax3 1,x2 " size of floating result 001077 aa 0 00140 3005 40 1120 mvn (pr,rl),(pr,rl) 001100 aa 300000 030014 1121 desc9ns source|0,x4 001101 aa 500014 000013 1122 desc9fl work|flt_dec_generic,x3 001102 aa 3 00000 5005 13 1123 a9bd source|0,x3 " update source pointer 001103 0a 001207 7100 00 1124 tra end_get_fix_dec.normalized 1125 1126 1127 1128 " 9-bit Trailing Sign Case 1129 001104 1130 get_fix_dec_9ts: 001104 1131 get_fix_dec_9ts_packed: 001104 aa 5 00001 7231 00 1132 lxl3 work|source_precision 001105 aa 000001 6220 13 1133 eax2 1,x3 " size of signed result 001106 aa 000001 6230 12 1134 eax3 1,x2 " size of floating result 001107 aa 0 00140 3005 40 1135 mvn (pr,rl),(pr,rl) 001110 aa 300000 020012 1136 desc9ts source|0,x2 001111 aa 500014 000013 1137 desc9fl work|flt_dec_generic,x3 001112 aa 3 00000 5005 12 1138 a9bd source|0,x2 " update source pointer 001113 0a 001207 7100 00 1139 tra end_get_fix_dec.normalized 1140 1141 1142 1143 1144 " Table used to determine overpunch conversion. Index provides 1145 " conversion reference to an overpunch character table. 1146 001114 1147 overpunch_9_source: " used to translate overpunch to table index 001114 aa 173 101 102 103 1148 aci /{ABCDEFGHI}JKLMNOPQR/,20 001115 aa 104 105 106 107 001116 aa 110 111 175 112 001117 aa 113 114 115 116 001120 aa 117 120 121 122 1149 " ++++++++++---------- 1150 " 01234567890123456789 1151 001121 1152 overpunch_9_signs: " overpunch sign 001121 aa 053 053 053 053 1153 aci /++++++++++----------/,20 001122 aa 053 053 053 053 001123 aa 053 053 055 055 001124 aa 055 055 055 055 001125 aa 055 055 055 055 1154 001126 1155 overpunch_9_digits: " overpunch digit 001126 aa 060 061 062 063 1156 aci /01234567890123456789/,20 001127 aa 064 065 066 067 001130 aa 070 071 060 061 001131 aa 062 063 064 065 001132 aa 066 067 070 071 1157 001133 1158 overpunch_9_chars: " index*2 to get sign and leading digit 001133 aa 053 060 053 061 1159 aci /+0+1+2+3+4+5+6+7+8+9-0-1-2-3-4-5-6-7-8-9/,40 001134 aa 053 062 053 063 001135 aa 053 064 053 065 001136 aa 053 066 053 067 001137 aa 053 070 053 071 001140 aa 055 060 055 061 001141 aa 055 062 055 063 001142 aa 055 064 055 065 001143 aa 055 066 055 067 001144 aa 055 070 055 071 1160 " Fixed Decimal 4-bit Source Conversion to GENERIC 1161 1162 " Fourbit source is byte aligned. Thus we round to next byte in setting 1163 " the source pointer update. 1164 1165 1166 " 4-bit Leading Sign Case 1167 1168 001145 1169 get_fix_dec_4ls: 001145 1170 get_fix_dec_4ls_packed: 001145 aa 5 00001 7221 00 1171 lxl2 work|source_precision 001146 aa 000001 0620 03 1172 adx2 1,du " count sign in size 001147 aa 000001 6230 12 1173 eax3 1,x2 " size of floating result 001150 aa 0 00140 3005 40 1174 mvn (pr,rl),(pr,rl) 001151 aa 300000 050012 1175 desc4ls source|0,x2 001152 aa 500014 000013 1176 desc9fl work|flt_dec_generic,x3 001153 aa 000001 6220 12 1177 eax2 1,x2 " byte align update 001154 aa 777776 3620 03 1178 anx2 =o777776,du 001155 aa 3 00000 5025 12 1179 a4bd source|0,x2 " update source pointer 001156 0a 001207 7100 00 1180 tra end_get_fix_dec.normalized 1181 1182 1183 1184 " 4-bit Unsigned Case 1185 001157 1186 get_fix_dec_4uns: 001157 1187 get_fix_dec_4uns_packed: 001157 aa 5 00001 7241 00 1188 lxl4 work|source_precision 001160 aa 000001 6220 14 1189 eax2 1,x4 " count sign in size 001161 aa 000001 6230 12 1190 eax3 1,x2 " size of floating result 001162 aa 0 00140 3005 40 1191 mvn (pr,rl),(pr,rl) 001163 aa 300000 070014 1192 desc4ns source|0,x4 001164 aa 500014 000013 1193 desc9fl work|flt_dec_generic,x3 001165 aa 000001 6240 14 1194 eax4 1,x4 " byte align update 001166 aa 777776 3640 03 1195 anx4 =o777776,du 001167 aa 3 00000 5025 14 1196 a4bd source|0,x4 " update source pointer 001170 0a 001207 7100 00 1197 tra end_get_fix_dec.normalized 1198 1199 1200 1201 " 4-bit Trailing Sign Case 1202 001171 1203 get_fix_dec_4ts: 001171 1204 get_fix_dec_4ts_packed: 001171 aa 5 00001 7231 00 1205 lxl3 work|source_precision 001172 aa 000001 6220 13 1206 eax2 1,x3 " size of signed result 001173 aa 000001 6230 12 1207 eax3 1,x2 " size of floating result 001174 aa 0 00140 3005 40 1208 mvn (pr,rl),(pr,rl) " move unsigned mantissa 001175 aa 300000 060012 1209 desc4ts source|0,x2 001176 aa 500014 000013 1210 desc9fl work|flt_dec_generic,x3 001177 aa 000001 6220 12 1211 eax2 1,x2 " byte align update 001200 aa 777776 3620 03 1212 anx2 =o777776,du 001201 aa 3 00000 5025 12 1213 a4bd source|0,x2 " update source pointer 001202 0a 001207 7100 00 1214 tra end_get_fix_dec.normalized 1215 " Normalize fixed decimal to floating decimal 1216 1217 1218 " A source decimal mantissa is currently setup with a correct 1219 " fixed decimal value. This is now moved in place to a floating decimal 1220 " format to establish the 8-bit exponent and round as necessary. From this 1221 " the full floating decimal extended exponent is formed, taking into 1222 " account a possible fixed decimal scale factor. 1223 " 1224 " On entry generic points to source to convert. This is simple source pointer 1225 " for 9bit_ls, or flt_dec_generic pre-cooked to 9bit_ls for others. 1226 " 1227 " X3 is precision on exit including exponent and sign. 1228 1229 001203 1230 end_get_fix_dec.normalize: 001203 aa 000001 6230 12 1231 eax3 1,x2 " Count byte for exponent 001204 0a 000104 7160 15 1232 xec mvn.pr_rl.pr_rl,x5 " float and ?round? 001205 aa 200000 010012 1233 desc9ls generic|0,x2 001206 aa 500014 000013 1234 desc9fl work|flt_dec_generic,x3 1235 1236 " The rounded move may alter the exponent value. We pick up what it 1237 " set to account for this possibility and integrate the fixed scale 1238 " factor into the 36-bit exponent. 1239 1240 1241 " Entry to this point presumes that X3 is the length of the floating 1242 " decimal number, and that it is already in work|flt_dec_generic. 1243 " At this point we take the 8-bit hardware exponent and extend it to 1244 " a full 35 bit signed exponent. 1245 001207 1246 end_get_fix_dec.normalized: " have floating number 001207 aa 5 00013 4501 00 1247 stz work|flt_dec_generic_exp " pre_set exponent 001210 aa 0 00100 1005 13 1248 mlr (pr,x3),(pr) " get new exponent 001211 aa 500013 600001 1249 desc9a work|flt_dec_generic-1(3),1 001212 aa 500013 600001 1250 desc9a work|flt_dec_generic_exp(3),1 1251 001213 aa 5 00001 2351 00 1252 lda work|source_scale 001214 aa 000022 7310 00 1253 ars 18 " full extension 001215 aa 000000 5310 00 1254 neg " and form negative scale 001216 aa 5 00013 0551 00 1255 asa work|flt_dec_generic_exp " in full exponent 001217 0a 002004 7100 00 1256 tra flt_dec_generic_conversion 1257 " Floating Decimal Source Conversion to GENERIC 1258 " 9-bit Case 1259 001220 1260 get_flt_dec_9: 001220 1261 get_flt_dec_9_packed: 001220 aa 5 00001 7231 00 1262 lxl3 work|source_precision 001221 aa 000002 0630 03 1263 adx3 1+1,du " account for sign/exponent 001222 aa 0 00140 3005 40 1264 mvn (pr,rl),(pr,rl) 001223 aa 300000 000013 1265 desc9fl source|0,x3 001224 aa 500014 000013 1266 desc9fl work|flt_dec_generic,x3 1267 001225 aa 0 00100 1005 13 1268 mlr (pr,x3),(pr) " 8-bit to 36-bit exponent 001226 aa 500013 600001 1269 desc9a work|flt_dec_generic-1(3),1 001227 aa 500013 000001 1270 desc9a work|flt_dec_generic_exp,1 001230 aa 5 00013 2351 00 1271 lda work|flt_dec_generic_exp 001231 aa 000001 7750 00 1272 alr 1 " skip pad bit in exponent 001232 aa 000034 7310 00 1273 ars 36-8 " sign extend 001233 aa 5 00013 7551 00 1274 sta work|flt_dec_generic_exp 001234 aa 3 00000 5005 13 1275 a9bd source|0,x3 " update source pointer 001235 0a 002004 7100 00 1276 tra flt_dec_generic_conversion 1277 1278 " 4-bit Case 1279 001236 1280 get_flt_dec_4: 001236 1281 get_flt_dec_4_packed: 001236 aa 5 00001 7231 00 1282 lxl3 work|source_precision 001237 aa 000003 6220 13 1283 eax2 1+2,x3 " 4-bit sign/exponent 001240 aa 000002 0630 03 1284 adx3 1+1,du " form length 9-bit 001241 aa 0 00140 3005 40 1285 mvn (pr,rl),(pr,rl) 001242 aa 300000 040012 1286 desc4fl source|0,x2 001243 aa 500014 000013 1287 desc9fl work|flt_dec_generic,x3 001244 aa 0 00100 1005 13 1288 mlr (pr,x3),(pr) " Expand the exponent 001245 aa 500013 600001 1289 desc9a work|flt_dec_generic-1(3),1 001246 aa 500013 000001 1290 desc9a work|flt_dec_generic_exp,1 001247 aa 5 00013 2351 00 1291 lda work|flt_dec_generic_exp 001250 aa 000001 7750 00 1292 alr 1 " skip pad bit in exponent 001251 aa 000034 7310 00 1293 ars 36-8 " sign extend 001252 aa 5 00013 7551 00 1294 sta work|flt_dec_generic_exp 001253 aa 000001 6220 12 1295 eax2 1,x2 " byte align update 001254 aa 777776 3620 03 1296 anx2 =o777776,du 001255 aa 3 00000 5025 12 1297 a4bd source|0,x2 " update source pointer 001256 0a 002004 7100 00 1298 tra flt_dec_generic_conversion 1299 1300 " 9-bit extended Case (has 9-bit rather than 8-bit exponent) 1301 001257 1302 get_flt_dec_ext: 001257 1303 get_flt_dec_ext_packed: 001257 aa 5 00001 7231 00 1304 lxl3 work|source_precision 001260 aa 000002 0630 03 1305 adx3 1+1,du " account for sign/exponent 001261 aa 0 00140 3005 40 1306 mvn (pr,rl),(pr,rl) 001262 aa 300000 000013 1307 desc9fl source|0,x3 001263 aa 500014 000013 1308 desc9fl work|flt_dec_generic,x3 1309 1310 " Expand the exponent (pick from source since mvn kills high bit) 1311 001264 aa 0 00100 1005 13 1312 mlr (pr,x3),(pr) " 9-bit to 36-bit exponent 001265 aa 377777 600001 1313 desc9a source|-1(3),1 001266 aa 500013 000001 1314 desc9a work|flt_dec_generic_exp,1 001267 aa 5 00013 2351 00 1315 lda work|flt_dec_generic_exp 001270 aa 000033 7310 00 1316 ars 36-9 " sign extend 001271 aa 5 00013 7551 00 1317 sta work|flt_dec_generic_exp 001272 aa 3 00000 5005 13 1318 a9bd source|0,x3 " update source pointer 001273 0a 002004 7100 00 1319 tra flt_dec_generic_conversion 1320 1321 " 9-bit generic Case. Has leading 36-bit exponent. 1322 001274 1323 get_flt_dec_gen: " move to generic to get hardware exponent. 001274 aa 3 00000 2351 00 1324 lda source|0 " get exponent 001275 aa 5 00013 7551 00 1325 sta work|flt_dec_generic_exp 001276 aa 5 00001 7221 00 1326 lxl2 work|source_precision 001277 aa 000001 0620 03 1327 adx2 1,du " account for sign 001300 aa 000001 6230 12 1328 eax3 1,x2 " account for hard exponent 001301 aa 0 00140 1005 40 1329 mlr (pr,rl),(pr,rl),fill(000) " move and clear exp 001302 aa 300001 000012 1330 desc9a source|1,x2 001303 aa 500014 000013 1331 desc9a work|flt_dec_generic,x3 001304 aa 000003 6220 12 1332 eax2 3,x2 " set round of mantissa len 001305 aa 3 00000 5005 12 1333 a9bd source|0,x2 " increment and round 001306 aa 000001 0530 03 1334 adwp source,1,du 001307 0a 002004 7100 00 1335 tra flt_dec_generic_conversion Bit Source Conversion to FINA 1336 1337 " Bit conversion to final target. 1338 " 1339 " Conversion to numeric converts to fixed bin (71, 0) or fixed bin 1340 " unsigned (72, 0) and continues to final target. A bit source is 1341 " non-complex, so normal conversion to 0 of the imaginary part will 1342 " occur. Since we have no imaginary part for source, we do not move 1343 " the source pointer. Source length is left in X3. We use generic to 1344 " point to the source to be converted. This permits us to later add 1345 " other boolean types converting to a generic form. 1346 001310 1347 get_varying_bit: 001310 aa 3 77777 7231 00 1348 lxl3 source|-1 " load length of varying 001311 aa 5 00001 4431 00 1349 sxl3 work|source_precision 001312 0a 001314 7100 00 1350 tra get_bit.set_source 1351 001313 1352 get_bit: 001313 1353 get_bit_packed: 001313 aa 5 00001 7231 00 1354 lxl3 work|source_precision " get length of bits 1355 1356 " Set pointer to bit source. For now it is in true source. 1357 001314 1358 get_bit.set_source: 001314 aa 3 00000 3521 00 1359 epp generic,source|0 " point to source of bits. 001315 0a 002626 7100 00 1360 tra bit_generic_conversion 1361 1362 1363 1364 1365 1366 "Character source conversion to TARGET 1367 1368 " Character input routines convert a varying string to a fixed length 1369 " string, and make a pointer to the string. 1370 1371 " Standard is string is pointed to by generic, and current length is in 1372 " work|source_precision. 1373 " If we are converting to a numeric form, then we take over control and 1374 " convert to float decimal, then continue with a float decimal to TARGET 1375 " conversion. If we are converting to bit we do a simple conversion, as 1376 " with conversion to character. 1377 001316 1378 get_varying_char: 001316 aa 3 77777 2351 00 1379 lda source|-1 " get length of varying char 001317 aa 5 00001 7551 00 1380 sta work|source_precision 1381 001320 1382 get_char: 001320 1383 get_char_packed: 001320 aa 3 00000 3521 00 1384 epp generic,source|0 001321 aa 5 00001 7231 00 1385 lxl3 work|source_precision 001322 aa 000000 6350 13 1386 eaa 0,x3 " save source length 001323 aa 000022 7310 00 1387 ars 18 001324 aa 5 00001 7551 00 1388 sta work|source_string_length 001325 0a 002734 7100 00 1389 tra char_to_generic 1390 " Conversion Routines - Fixed bin to target GENERIC 1391 001326 1392 fix_bin_generic_conversion: 001326 0a 000376 2210 16 1393 ldx1 target_type_map,x6 " determine target GENERIC 001327 aa 000077 3610 03 1394 anx1 generic_mask,du " mask for type 001330 0a 001331 7100 31 1395 tra fix_bin_generic_case,x1* 1396 001331 1397 fix_bin_generic_case: 001331 0a 006273 0000 00 1398 arg error_bad_type 001332 0a 001356 0000 00 1399 arg fix_bin_to_fix_bin 001333 0a 001422 0000 00 1400 arg fix_bin_to_flt_bin 001334 0a 001446 0000 00 1401 arg fix_bin_to_flt_dec 001335 0a 001340 0000 00 1402 arg fix_bin_to_fix_bin_uns 001336 0a 001515 0000 00 1403 arg fix_bin_to_bit 001337 0a 003017 0000 00 1404 arg fix_bin_to_char 1405 1406 " Fixed bin to fixed bin unsigned differs from fixed bin to fixed bin for 1407 " left scaling since moving a bit into the sign position would erroneously 1408 " trigger a size error. Right shift is fine since sign bit is clear. 1409 001340 1410 fix_bin_to_fix_bin_uns: " convert to unsigned target 001340 aa 5 00004 2371 00 1411 ldaq work|fix_bin_generic 001341 0a 006226 6040 00 1412 tmi size_error " cannot convert negative 001342 aa 5 00000 2221 00 1413 ldx2 work|target_scale " determine cross-scaling 001343 aa 5 00001 1621 00 1414 sbx2 work|source_scale 001344 1415 fix_bin.fix_bin_uns.flt: " entry from flt_bin_to_fixun 001344 0a 005175 6000 00 1416 tze generic_to_target " scales match 001345 0a 001366 6040 00 1417 tmi fix_bin.scale_right " need right shift and ?round? 1418 1419 " Overflow detection means generating a mask of the number of bits to 1420 " be shifted left to determine if this area is non-zero, if so then we 1421 " will overflow. 1422 001346 aa 400000 2350 03 1423 lda =o400000,du " get mask bit 001347 aa 000000 2360 07 1424 ldq =0,dl 001350 aa 777777 7330 12 1425 lrs -1,x2 " generate mask 001351 aa 5 00004 3771 00 1426 anaq work|fix_bin_generic 001352 0a 006226 6010 00 1427 tnz size_error " we would overflow 1428 001353 aa 5 00004 2371 00 1429 ldaq work|fix_bin_generic 001354 aa 000000 7370 12 1430 lls 0,x2 001355 0a 001414 7100 00 1431 tra fix_bin.noscale 1432 1433 " Convert fixed bin to fixed bin. Here it is mainly a matter of scaling 1434 " to ensure the target scale factor is correct. 1435 001356 1436 fix_bin_to_fix_bin: 001356 aa 5 00000 2221 00 1437 ldx2 work|target_scale " determine cross-scaling 001357 aa 5 00001 1621 00 1438 sbx2 work|source_scale 001360 1439 fix_bin.fix_bin.flt: " entry from flt_bin_to_fix 001360 0a 005175 6000 00 1440 tze generic_to_target " scales match 001361 0a 001366 6040 00 1441 tmi fix_bin.scale_right " need right shift and ?round? 1442 001362 1443 fix_bin.scale_left: " left shift zero fill 001362 aa 5 00004 2371 00 1444 ldaq work|fix_bin_generic 001363 aa 000000 7370 12 1445 lls 0,x2 001364 0a 006226 6030 00 1446 trc size_error " overflow 001365 0a 001414 7100 00 1447 tra fix_bin.noscale 1448 1449 " Right scaling may require a round. Negative rounds down, positive 1450 " rounds up. Do this by determining the bit position to round at. This 1451 " rounding bit will be good for both positive and negative values. 1452 001366 1453 fix_bin.scale_right: " right shift and ?round? 001366 aa 777777 6620 03 1454 erx2 =o777777,du " form shift count-1 001367 aa 000000 6240 15 1455 eax4 0,x5 " determine if rounding 001370 0a 001376 6000 00 1456 tze fix_bin.noround 001371 0a 001416 2370 00 1457 ldaq one " load mask for rounding 001372 aa 000000 7370 12 1458 lls 0,x2 " determine round bit 001373 aa 5 00004 3771 00 1459 anaq work|fix_bin_generic 001374 0a 001376 6010 00 1460 tnz fix_bin.noround 001375 aa 000000 6240 00 1461 eax4 0 " force no round 001376 1462 fix_bin.noround: 001376 aa 5 00004 2371 00 1463 ldaq work|fix_bin_generic 001377 0a 001411 6050 00 1464 tpl fix_bin.scale.pos Conversion Routines - Fixed bin to GENERIC right scaling. 1465 1466 " Right scale is done by negate, scale/round and negate again, since 1467 " right shift is not a true arithmetic divide unless positive. 1468 " In the special case of 400000000000000000000000 we overflow the negate 1469 " and special case correct through fix_bin.right.ovfl. 1470 001400 aa 000000 5330 00 1471 negl 001401 0a 001407 6170 00 1472 tov fix_bin.right.ovfl " special case overflow 001402 aa 000001 7330 12 1473 lrs 1,x2 " scale 001403 0a 001420 7160 14 1474 xec binary_round,4 " round as appropriate 001404 0a 006226 6170 00 1475 tov size_error 001405 aa 000000 5330 00 1476 negl " correct result 001406 0a 001414 7100 00 1477 tra fix_bin.noscale 1478 1479 " Single special case of only high order bit set. Positive would set 1480 " bit above top of register. Do signed shift right since shift count 1481 " cannot be beyond end of word. And no round can occur in this case. 1482 1483 " We still are masked for overflows and cannot detect further hardware 1484 " overflows without clearing and resetting the indicator mask. 1485 " When we enter the high order bit is set by negl and is still correct 1486 " as signed value. 1487 001407 1488 fix_bin.right.ovfl: 001407 aa 000001 7330 12 1489 lrs 1,x2 " scale 001410 0a 001414 7100 00 1490 tra fix_bin.noscale 1491 001411 1492 fix_bin.scale.pos: 001411 aa 000001 7330 12 1493 lrs 1,x2 " scale number 001412 0a 001420 7160 14 1494 xec binary_round,4 " round positive or negative 001413 0a 006226 6170 00 1495 tov size_error " out-of-range 001414 1496 fix_bin.noscale: " no scaling needed, no round 001414 aa 5 00004 7571 00 1497 staq work|fix_bin_generic 001415 0a 005175 7100 00 1498 tra generic_to_target 1499 1500 even 001416 aa 000000 000000 1501 one: dec 0,1 " must be double word aligned 001417 aa 000000 000001 1502 001420 1503 binary_round: 001420 aa 000000 0110 00 1504 nop 0 " no round positive (index 0) 001421 aa 000001 0330 07 1505 adl =1,dl " round positive (index 1) 1506 " Conversion Routines - Fixed bin to target GENERIC (float bin) 1507 1508 1509 " Convert fixed bin to float bin by floating the AQ, setting the 1510 " exponent and normalizing. Then move the final exponent to the generic 1511 " float bin exponent field and set the generic float bin mantissa. 1512 1513 " Rounding of short and long targets is done here since fixed bin is longer 1514 " than 63 bits and we would otherwise be numerically incorrect in certain 1515 " cases. Since we are rounding anyway we do short at the same time. 1516 001422 1517 fix_bin_to_flt_bin: 001422 aa 5 00001 2351 00 1518 lda work|source_scale " exponent including scale 001423 aa 000022 7310 00 1519 ars 18 " clip precision 001424 aa 000000 5310 00 1520 neg 0 " form -scale (b25) 001425 aa 000107 0750 07 1521 ada =71,dl " add integer scaling 001426 aa 000034 7350 00 1522 als 36-8 001427 aa 5 00012 7551 00 1523 sta work|flt_bin_generic_exp 001430 aa 5 00004 2371 00 1524 ldaq work|fix_bin_generic 001431 aa 5 00012 4111 00 1525 lde work|flt_bin_generic_exp 001432 aa 000000 5730 00 1526 fno 001433 0a 001442 6000 00 1527 tze fix_bin.flt.zero " store extended 0.0 001434 aa 5 00012 4561 00 1528 ste work|flt_bin_generic_exp " save exponent 001435 aa 5 00006 7571 00 1529 staq work|flt_bin_generic 001436 aa 5 00012 2351 00 1530 lda work|flt_bin_generic_exp 001437 aa 000034 7310 00 1531 ars 36-8 " form 36-bit exp 001440 aa 5 00012 7551 00 1532 sta work|flt_bin_generic_exp 001441 0a 005175 7100 00 1533 tra generic_to_target 1534 1535 " Store an exact 0.0 in internal generic. This has exponent of 0. 1536 001442 1537 fix_bin.flt.zero: " zero float bin then convert to target 001442 aa 5 00012 4501 00 1538 stz work|flt_bin_generic_exp 001443 aa 5 00006 4501 00 1539 stz work|flt_bin_generic 001444 aa 5 00007 4501 00 1540 stz work|flt_bin_generic+1 001445 0a 005175 7100 00 1541 tra generic_to_target " convert to target 1542 " Conversion Routines - Fixed bin to target GENERIC (float decimal) 1543 1544 1545 " On exit X3 is the precision of the flt_dec_generic value. 1546 1547 " Initial coding uses BTD instruction and EIS divide to provide result of 1548 " scaling. This may be improved later. 1549 1550 001446 1551 fix_bin_to_flt_dec: 001446 aa 5 00004 2371 00 1552 ldaq work|fix_bin_generic " see if zero 001447 0a 006265 6000 00 1553 tze force_zero " which is fast conversion 1554 1555 " Determine precision of conversion. 1556 001450 aa 220000 4110 03 1557 lde =72b25,du " pre-set bit count 001451 aa 000000 5730 00 1558 fno " find high bit 001452 aa 5 00006 4561 00 1559 ste work|flt_bin_generic 001453 aa 5 00006 2351 00 1560 lda work|flt_bin_generic " find true precision 001454 aa 000034 7310 00 1561 ars 36-8 001455 0a 010624 2240 05 1562 ldx4 bin_prec_to_dec_prec,al " get digits needed 001456 0a 010624 7220 05 1563 lxl2 bin_prec_to_dec_prec,al " get size of source bytes 001457 aa 777767 6210 12 1564 eax1 -9,x2 " determine offset of source 001460 aa 777777 6610 03 1565 erx1 =o777777,du 001461 aa 0 00140 3015 51 1566 btd (pr,x1,rl),(pr,rl) 001462 aa 500004 000012 1567 desc9a work|fix_bin_generic,x2 001463 aa 500014 010014 1568 desc9ls work|flt_dec_generic,x4 001464 aa 5 00013 4501 00 1569 stz work|flt_dec_generic_exp " kill flt dec exponent 1570 001465 aa 000001 6230 14 1571 eax3 1,x4 " size of float decimal 001466 aa 5 00001 2221 00 1572 ldx2 work|source_scale " determine power to divide 001467 0a 005175 6000 00 1573 tze generic_to_target " simple move 001470 0a 001477 6040 00 1574 tmi fix_bin_to_flt_dec.neg_scale 1575 1576 " Divide will provide a leading 0 in most cases. So we divide to one 1577 " digit more precision. Convert fixed decimal to float decimal. 1578 001471 aa 000001 0630 03 1579 adx3 1,du " one more digit for divide 001472 0a 000110 7160 15 1580 xec dv3d.id.pr_rl.pr_rl,x5 " scale the output 001473 0a 010077 0000 12 1581 arg two_table,x2 " power of two 001474 aa 500014 010014 1582 desc9ls work|flt_dec_generic,x4 001475 aa 500014 000013 1583 desc9fl work|flt_dec_generic,x3 001476 0a 001505 7100 00 1584 tra fix_bin_to_flt_dec.common 1585 001477 1586 fix_bin_to_flt_dec.neg_scale: 001477 aa 777777 6620 03 1587 erx2 =o777777,du 001500 aa 000001 0620 03 1588 adx2 =1,du " negate x2 001501 0a 000112 7160 15 1589 xec mp3d.id.pr_rl.pr_rl,x5 " scale the output 001502 0a 010077 0000 12 1590 arg two_table,x2 " power of two 001503 aa 500014 010014 1591 desc9ls work|flt_dec_generic,x4 001504 aa 500014 000013 1592 desc9fl work|flt_dec_generic,x3 1593 001505 1594 fix_bin_to_flt_dec.common: 001505 aa 0 00100 1005 13 1595 mlr (pr,x3),(pr) " pick and extend exponent 001506 aa 500013 600001 1596 desc9a work|flt_dec_generic-1(3),1 001507 aa 500013 000001 1597 desc9a work|flt_dec_generic_exp,1 001510 aa 5 00013 2351 00 1598 lda work|flt_dec_generic_exp 001511 aa 000001 7350 00 1599 als 1 001512 aa 000034 7310 00 1600 ars 36-8 001513 aa 5 00013 7551 00 1601 sta work|flt_dec_generic_exp 001514 0a 005175 7100 00 1602 tra generic_to_target 1603 " Conversion Routines - Fixed bin to target GENERIC (bit) 1604 1605 " Entry condition is a fixed bin value in fix_bin_generic. 1606 " We convert the fix bin source to fixed bin (71, 0), obeying all normal 1607 " conversion rules. Code highly congruent with fix_bin_to_fix_bin. 1608 1609 001515 1610 fix_bin_to_bit: 001515 aa 5 00001 2221 00 1611 ldx2 work|source_scale 001516 1612 fix_bin.bit.flt: " entry from flt_bin_to_bit 001516 0a 001552 6000 00 1613 tze to_bit " scales match 001517 0a 001526 6050 00 1614 tpl fix_bin.bit.scale_right " need right shift and ?round? 1615 001520 1616 fix_bin.bit.scale_left: " left shift zero fill 001520 aa 5 00004 2371 00 1617 ldaq work|fix_bin_generic 001521 aa 777777 6620 03 1618 erx2 =o777777,du 001522 aa 000001 0620 03 1619 adx2 =1,du " negate x2 001523 aa 000000 7370 12 1620 lls 0,x2 001524 0a 006226 6030 00 1621 trc size_error " overflow 001525 0a 001552 7100 00 1622 tra to_bit " value is good 1623 001526 1624 fix_bin.bit.scale_right: " right shift with round 001526 aa 000000 6240 15 1625 eax4 0,x5 " determine if rounding 001527 0a 001535 6000 00 1626 tze fix_bin.bit.noround 001530 0a 001416 2370 00 1627 ldaq one " load mask for rounding 001531 aa 777777 7370 12 1628 lls -1,x2 " determine round bit 001532 aa 5 00004 3771 00 1629 anaq work|fix_bin_generic 001533 0a 001535 6010 00 1630 tnz fix_bin.bit.noround 001534 aa 000000 6240 00 1631 eax4 0 " force no round 1632 001535 1633 fix_bin.bit.noround: 001535 aa 5 00004 2371 00 1634 ldaq work|fix_bin_generic 001536 0a 001547 6050 00 1635 tpl fix_bin.bit.scale.pos 001537 aa 000000 5330 00 1636 negl " result left as positive 001540 0a 001545 6170 00 1637 tov fix_bin.bit.right.ovfl " special case overflow 001541 aa 000000 7330 12 1638 lrs 0,x2 " scale 001542 0a 001420 7160 14 1639 xec binary_round,4 " round as appropriate 001543 0a 006226 6170 00 1640 tov size_error 001544 0a 001552 7100 00 1641 tra to_bit 1642 001545 1643 fix_bin.bit.right.ovfl: 001545 aa 000000 7330 12 1644 lrs 0,x2 " scale 001546 0a 001552 7100 00 1645 tra to_bit 1646 001547 1647 fix_bin.bit.scale.pos: 001547 aa 000000 7330 12 1648 lrs 0,x2 " scale number 001550 0a 001420 7160 14 1649 xec binary_round,4 " round positive or negative 001551 0a 006226 6170 00 1650 tov size_error " out-of-range 1651 1652 " Convert to generic bit string. This is done by moving bits for the 1653 " precision of the source, subtracting the scale factor first. 1654 " On entry the AQ holds a fixed bin (71, 0) number. 1655 001552 1656 to_bit: 001552 aa 004000 6340 07 1657 ldi mask_faults,dl " reset faults 001553 aa 5 00004 7571 00 1658 staq work|fix_bin_generic " save fix bin (71, 0) 001554 aa 5 00004 2341 00 1659 szn work|fix_bin_generic " see if negative 001555 0a 001561 6050 00 1660 tpl to_bit.pos 001556 aa 000000 5330 00 1661 negl 001557 0a 006226 6170 00 1662 tov size_error " won't fit in (71,0) 001560 aa 5 00004 7571 00 1663 staq work|fix_bin_generic 1664 001561 1665 to_bit.pos: 001561 aa 5 00014 3521 00 1666 epp generic,work|bit_generic " set generic area 001562 aa 5 00001 7221 00 1667 lxl2 work|source_precision " determine start bit to move 001563 aa 5 00001 1621 00 1668 sbx2 work|source_scale 001564 aa 777667 6240 12 1669 eax4 -73,x2 001565 aa 777777 6640 03 1670 erx4 =o777777,du " start = 72-precision 001566 0a 001571 6050 00 1671 tpl fix_bin.bit.non_null " string not null 001567 aa 000000 2230 03 1672 ldx3 0,du " length is 0 001570 0a 005175 7100 00 1673 tra generic_to_target " output "0" bits 1674 001571 1675 fix_bin.bit.non_null: 001571 aa 777777 7370 14 1676 lls -1,x4 " shift out skipped part 001572 0a 006226 6030 00 1677 trc size_error " number is too big 001573 aa 5 00000 7231 00 1678 lxl3 work|target_precision 001574 aa 0 03140 0605 54 1679 csl (pr,x4,rl),(pr,rl),bool(move),fill(0) 001575 aa 500004 000012 1680 descb work|fix_bin_generic,x2 001576 aa 200000 000013 1681 descb generic|0,x3 001577 0a 005175 7100 00 1682 tra generic_to_target " store result Conversion Routines - Float bin to target GENERIC 1683 1684 1685 " Entry condition is the flt_bin_generic value. Only global register 1686 " assignments hold for other registers, like X6, X7, etc. 1687 001600 1688 flt_bin_generic_conversion: 001600 0a 000376 2210 16 1689 ldx1 target_type_map,x6 " determine target GENERIC 001601 aa 000077 3610 03 1690 anx1 generic_mask,du " mask for type 001602 0a 001603 7100 31 1691 tra flt_bin_generic_case,x1* 1692 001603 1693 flt_bin_generic_case: 001603 0a 006273 0000 00 1694 arg error_bad_type 001604 0a 001632 0000 00 1695 arg flt_bin_to_fix_bin 001605 0a 005175 0000 00 1696 arg generic_to_target " trivial conversion 001606 0a 001650 0000 00 1697 arg flt_bin_to_flt_dec 001607 0a 001612 0000 00 1698 arg flt_bin_to_fix_bin_uns 001610 0a 001770 0000 00 1699 arg flt_bin_to_bit 001611 0a 003021 0000 00 1700 arg flt_bin_to_char 1701 1702 " Fixed bin signed and unsigned are similar conversions. Conversion is 1703 " done by considering the floating point mantissa to be a scaled fixed 1704 " binary number. The scale is determined to be fixed bin (71,71-exp). 1705 001612 1706 flt_bin_to_fix_bin_uns: 001612 aa 5 00006 2371 00 1707 ldaq work|flt_bin_generic 001613 0a 006226 6040 00 1708 tmi size_error " must be positive 001614 aa 5 00004 7571 00 1709 staq work|fix_bin_generic 1710 1711 " Form scale factor from exponent. 1712 001615 aa 000110 2350 07 1713 lda =72,dl " scaling 001616 aa 5 00012 1751 00 1714 sba work|flt_bin_generic_exp " - exponent 001617 0a 006226 6040 00 1715 tmi size_error 001620 aa 000001 1750 07 1716 sba 1,dl " correct for ranging 001621 aa 000000 6220 05 1717 eax2 0,al 001622 aa 000034 7350 00 1718 als 36-8 " initial ranging 001623 0a 006226 6030 00 1719 trc size_error 001624 aa 000110 1020 03 1720 cmpx2 =72,du " unsigned limit 001625 0a 006226 6054 00 1721 tpnz size_error " too big 1722 1723 " Form shift factor according to target scale. 1724 001626 aa 5 00000 1621 00 1725 sbx2 work|target_scale 001627 aa 777777 6620 03 1726 erx2 =o777777,du " form target-source 001630 aa 000001 0620 03 1727 adx2 1,du 001631 0a 001344 7100 00 1728 tra fix_bin.fix_bin_uns.flt 1729 1730 1731 " Convert float binary to fixed binary signed. 1732 001632 1733 flt_bin_to_fix_bin: 001632 aa 5 00006 2371 00 1734 ldaq work|flt_bin_generic " save integer bits of AQ 001633 aa 5 00004 7571 00 1735 staq work|fix_bin_generic 1736 1737 " Form scale factor from exponent 1738 001634 aa 000107 2350 07 1739 lda =71,dl " scaling 001635 aa 5 00012 1751 00 1740 sba work|flt_bin_generic_exp " - exponent 001636 0a 006226 6040 00 1741 tmi size_error 001637 aa 000000 6220 05 1742 eax2 0,al " xfer for store 001640 aa 000034 7350 00 1743 als 36-8 " initial ranging 001641 0a 006226 6030 00 1744 trc size_error 001642 aa 000107 1020 03 1745 cmpx2 =71,du " signed limit 001643 0a 006226 6054 00 1746 tpnz size_error " too big 1747 1748 " Form shift factor according to target scale. 1749 001644 aa 5 00000 1621 00 1750 sbx2 work|target_scale 001645 aa 777777 6620 03 1751 erx2 =o777777,du " form target-source 001646 aa 000001 0620 03 1752 adx2 1,du 001647 0a 001360 7100 00 1753 tra fix_bin.fix_bin.flt " enter and process 1754 " Conversion Routines - Float Binary to Float Decimal GENERIC 1755 1756 " Floating binary conversion utilizes a sectioning technique to 1757 " convert through the total range. This will produce errors towards 1758 " the limits of the range unfortunately. Hopefully this technique 1759 " will be replaced in the near future. 1760 1761 " Essentially we find a corrected exponent for the float binary number 1762 " to account for the precision. This will be a power of two multiplier. 1763 " The mantissa is converted to an integer of precision 63, by storing 1764 " the EAQ's AQ after shifting 8 bits. 1765 1766 " We convert this to hardware float decimal with a zero exponent, and 1767 " store a zero exponent in the flt_dec_generic. 1768 1769 " We convert from this decimal value to the final decimal value by 1770 " adjusting for the floating point bin's original exponent, by multiplying 1771 " or dividing by two as appropriate. We section through the range of 1772 " the table taking into account that 2**m is equivalent to 2**(n+o) by 1773 " using the limit of the table as the limit of powers of two for each step. 1774 " Multiply has an extra digit of precision and divide has two. 1775 1776 " Due to the hardware characteristic that a divide may result in a leading 1777 " 0 on the float dec mantissa, we use extra precision and move the result 1778 " to normalize and round. 1779 1780 " On exit, X3 is length of final floating result. 1781 " During operations X4 is the length of the current result. It starts as 1782 " the length of the initial BTD, and continues during mult or division. 1783 001650 1784 flt_bin_to_flt_dec: 001650 aa 5 00006 2371 00 1785 ldaq work|flt_bin_generic 001651 0a 006265 6000 00 1786 tze force_zero " zero float bin 1787 1788 " Form the initial decimal estimate. 1789 001652 aa 000010 7330 00 1790 lrs 8 " clear out 8-dummy bits 001653 aa 5 00006 7571 00 1791 staq work|flt_bin_generic 001654 aa 000077 2350 07 1792 lda 63,dl " precision is flt bin (63) 001655 aa 000000 1160 07 1793 cmpq =0,dl " see if q is clear 001656 0a 001660 6010 00 1794 tnz flt_bin_to_flt_dec.go " use full precision 001657 aa 000033 2350 07 1795 lda 27,dl " precision is flt bin (27) 1796 1797 " We have precision in al. Do the work. 1798 001660 1799 flt_bin_to_flt_dec.go: 001660 0a 010625 2240 05 1800 ldx4 bin_prec_to_dec_prec+1,al " get precision of target 001661 0a 010625 7210 05 1801 lxl1 bin_prec_to_dec_prec+1,al " get size of source 001662 aa 5 00000 7231 00 1802 lxl3 work|target_precision " setup target precision 001663 aa 000002 0630 03 1803 adx3 2,du " sign+exp 001664 aa 000002 6220 13 1804 eax2 2,x3 " over-length for divide 001665 aa 000001 1640 03 1805 sbx4 1,du " fixed decimal length 001666 aa 5 00013 4501 00 1806 stz work|flt_dec_generic_exp " output number exponent 1807 1808 " Convert mantissa to decimal. 1809 001667 aa 0 00140 3015 40 1810 btd (pr,rl),(pr,rl) 001670 aa 500006 000011 1811 desc9a work|flt_bin_generic,x1 001671 aa 500014 010014 1812 desc9ls work|flt_dec_generic,x4 001672 aa 000001 0640 03 1813 adx4 1,du " account for exponent 001673 aa 000114 1004 00 1814 mlr (),(pr,x4),fill(000) " clear exponent 001674 aa 000000 000000 1815 zero 001675 aa 500013 600001 1816 desc9a work|flt_dec_generic-1(3),1 1817 1818 " Correct exponent to power of two of representation. 1819 001676 aa 000305 2210 03 1820 ldx1 two_table_limit,du " load range limit 001677 aa 000000 5310 00 1821 neg " -precision 001700 aa 5 00012 0751 00 1822 ada work|flt_bin_generic_exp " now power of two 001701 0a 001732 6000 00 1823 tze flt_bin.flt_dec.to_target " no work at all 001702 0a 001705 6050 00 1824 tpl flt_bin.flt_dec.start_pos " positive power of two 001703 aa 000000 5310 00 1825 neg " correct exponent 001704 0a 001734 7100 00 1826 tra flt_bin.flt_dec.start_neg " -ve power of two 1827 1828 " Start a section of conversion. 1829 001705 1830 flt_bin.flt_dec.start_pos: 001705 aa 000305 1150 07 1831 cmpa two_table_limit,dl " within table range? 001706 0a 001710 6050 00 1832 tpl flt_bin.flt_dec.set_pos " above range 001707 aa 000000 6210 05 1833 eax1 0,al " use exponent remainder 1834 001710 1835 flt_bin.flt_dec.set_pos: 001710 0a 000112 7160 15 1836 xec mp3d.id.pr_rl.pr_rl,x5 " power and round 001711 0a 010077 0000 11 1837 arg two_table,x1 001712 aa 500014 000014 1838 desc9fl work|flt_dec_generic,x4 " initial length 001713 aa 500014 000013 1839 desc9fl work|flt_dec_generic,x3 1840 1841 " Build generic float decimal exponent. 1842 001714 aa 0 00100 1005 13 1843 mlr (pr,x3),(pr) " X4 is current fix dec len 001715 aa 500013 600001 1844 desc9a work|flt_dec_generic-1(3),1 " hardware exponent 001716 aa 500004 000001 1845 desc9a work|fix_bin_generic,1 1846 001717 aa 5 00004 2361 00 1847 ldq work|fix_bin_generic " sign extend and add 001720 aa 000001 7360 00 1848 qls 1 001721 aa 000034 7320 00 1849 qrs 36-8 001722 aa 5 00013 0561 00 1850 asq work|flt_dec_generic_exp 1851 1852 " See if all done the binary exponent. 1853 001723 aa 000305 1750 07 1854 sba two_table_limit,dl 001724 0a 005175 6044 00 1855 tmoz generic_to_target " done 001725 aa 000000 6240 13 1856 eax4 0,x3 " flt dec length 001726 aa 000114 1004 00 1857 mlr (),(pr,x4),fill(000) " clear exponent 001727 aa 000000 000000 1858 zero 001730 aa 500013 600001 1859 desc9a work|flt_dec_generic-1(3),1 001731 0a 001705 7100 00 1860 tra flt_bin.flt_dec.start_pos 1861 001732 1862 flt_bin.flt_dec.to_target: 001732 aa 000000 6230 14 1863 eax3 0,x4 " length of BTD output 001733 0a 005175 7100 00 1864 tra generic_to_target 1865 " Conversion Routine - Float Binary to Float Decimal GENERIC (Continued) 1866 1867 " Negative power of two done by divide. We divide overlength to 1868 " preserve precision and account for divide characteristic where the 1869 " mantissa gets a leading zero if the divisor is greater than or equal 1870 " to the dividend. A later MVN collapsing the precision will fix the 1871 " leading zero. 1872 001734 1873 flt_bin.flt_dec.start_neg: 001734 aa 000305 1150 07 1874 cmpa two_table_limit,dl " check range of section 001735 0a 001737 6050 00 1875 tpl flt_bin.flt_dec.set_neg " above range 001736 aa 000000 6210 05 1876 eax1 0,al " get remaining exp 1877 001737 1878 flt_bin.flt_dec.set_neg: 001737 aa 140140 2274 20 1879 dv3d (id),(pr,rl),(pr,rl) 001740 0a 010077 0000 11 1880 arg two_table,x1 001741 aa 500014 000014 1881 desc9fl work|flt_dec_generic,x4 001742 aa 500014 000012 1882 desc9fl work|flt_dec_generic,x2 " one byte larger 001743 aa 000305 1150 07 1883 cmpa two_table_limit,dl " will we continue? 001744 0a 001747 6050 00 1884 tpl flt_bin.flt_dec.neg_continue 001745 aa 000000 6230 12 1885 eax3 0,x2 " done, finish exp move 001746 0a 001752 7100 00 1886 tra flt_bin.flt_dec.neg_done 1887 001747 1888 flt_bin.flt_dec.neg_continue: " needs move to normalize 001747 0a 000104 7160 15 1889 xec mvn.pr_rl.pr_rl,x5 001750 aa 500014 000012 1890 desc9fl work|flt_dec_generic,x2 001751 aa 500014 000013 1891 desc9fl work|flt_dec_generic,x3 1892 1893 " Powering section done. Pick up hardware exponent and add to the 1894 " generic exponent. Clear hardware exponent and continue. 1895 001752 1896 flt_bin.flt_dec.neg_done: 001752 aa 0 00100 1005 13 1897 mlr (pr,x3),(pr) " X4 is current fix dec len 001753 aa 500013 600001 1898 desc9a work|flt_dec_generic-1(3),1 " hardware exponent 001754 aa 500004 000001 1899 desc9a work|fix_bin_generic,1 1900 001755 aa 5 00004 2361 00 1901 ldq work|fix_bin_generic " sign extend and add 001756 aa 000001 7360 00 1902 qls 1 001757 aa 000034 7320 00 1903 qrs 36-8 001760 aa 5 00013 0561 00 1904 asq work|flt_dec_generic_exp 1905 001761 aa 000305 1750 07 1906 sba two_table_limit,dl " account for work done 001762 0a 005175 6044 00 1907 tmoz generic_to_target " done 001763 aa 000000 6240 13 1908 eax4 0,x3 " float decimal length 001764 aa 000114 1004 00 1909 mlr (),(pr,x4),fill(000) " clear exponent 001765 aa 000000 000000 1910 zero 001766 aa 500013 600001 1911 desc9a work|flt_dec_generic-1(3),1 001767 0a 001734 7100 00 1912 tra flt_bin.flt_dec.start_neg 1913 " Conversion Routines - Float bin to target GENERIC (bit) 1914 1915 " Entry condition is a generic float bin value in flt_bin_generic. 1916 " We convert the flt bin source to fixed bin (71, 0), obeying all normal 1917 " conversion rules. 1918 1919 001770 1920 flt_bin_to_bit: 001770 aa 5 00006 2371 00 1921 ldaq work|flt_bin_generic " save integer bits of AQ 001771 aa 5 00004 7571 00 1922 staq work|fix_bin_generic 1923 1924 " Form scale factor from exponent 1925 001772 aa 000107 2350 07 1926 lda =71,dl " scaling 001773 aa 5 00012 1751 00 1927 sba work|flt_bin_generic_exp " - exponent 001774 0a 006226 6040 00 1928 tmi size_error 001775 aa 000000 6220 05 1929 eax2 0,al " xfer for store 001776 aa 000034 7350 00 1930 als 36-8 " initial ranging 001777 0a 006226 6030 00 1931 trc size_error 002000 aa 000107 1020 03 1932 cmpx2 =71,du " signed limit 002001 0a 006226 6054 00 1933 tpnz size_error " too big 002002 aa 000000 1020 03 1934 cmpx2 0,du " set indicators 002003 0a 001516 7100 00 1935 tra fix_bin.bit.flt " continue in fixed bin Conversion Routines - Float decimal to target GENERIC 1936 1937 " Entry condition is float decimal source in flt_dec_generic with X3 1938 " as the precision of this number. Extended exponent is in 1939 " flt_dec_generic_exp, with the vestigial hardware float decimal exponent 1940 " of flt_dec_generic_exp as a don't-care value. 1941 1942 " This routine ensures that the hardware float decimal exponent is set to 1943 " 0 prior to conversion, to ensure ease of conversion. 1944 002004 1945 flt_dec_generic_conversion: 002004 aa 000113 1004 00 1946 mlr (),(pr,x3),fill(000) 002005 aa 000000 000000 1947 zero " put in a 0 value 002006 aa 500013 600001 1948 desc9a work|flt_dec_generic-1(3),1 " to the exponent 1949 002007 0a 000376 2210 16 1950 ldx1 target_type_map,x6 " find target GENERIC 002010 aa 000077 3610 03 1951 anx1 generic_mask,du " mask for type 002011 0a 002012 7100 31 1952 tra flt_dec_generic_case,x1* 1953 1954 " flt_dec_to_flt_dec is a trivial conversion since on entry X3 has the 1955 " precision of the flt_dec_generic and this is what the put routines use. 1956 " Thus we match at this point by design. 1957 002012 1958 flt_dec_generic_case: 002012 0a 006273 0000 00 1959 arg error_bad_type 002013 0a 002021 0000 00 1960 arg flt_dec_to_fix_bin 002014 0a 002106 0000 00 1961 arg flt_dec_to_flt_bin 002015 0a 005175 0000 00 1962 arg generic_to_target " trivial conversion 002016 0a 002256 0000 00 1963 arg flt_dec_to_fix_bin_uns 002017 0a 002344 0000 00 1964 arg flt_dec_to_bit 002020 0a 003023 0000 00 1965 arg flt_dec_to_char 1966 1967 " Convert float decimal to scaled or unscaled fixed binary. 1968 002021 1969 flt_dec_to_fix_bin: 002021 aa 5 00000 7241 00 1970 lxl4 work|target_precision " find conversion precision 002022 0a 010624 2240 14 1971 ldx4 bin_prec_to_dec_prec,x4 002023 aa 5 00000 2221 00 1972 ldx2 work|target_scale " is bin an integer? 002024 0a 002054 6000 00 1973 tze flt_dec.fix_bin.no_scale " yes 002025 0a 002035 6040 00 1974 tmi flt_dec.fix_bin.neg_scale " negative scale 1975 1976 " Scale the float decimal value by the integer's power of two scale 1977 002026 aa 140140 2264 20 1978 mp3d (id),(pr,rl),(pr,rl) 002027 0a 010077 0000 12 1979 arg two_table,x2 002030 aa 500014 000013 1980 desc9fl work|flt_dec_generic,x3 002031 aa 500014 000014 1981 desc9fl work|flt_dec_generic,x4 002032 0a 002044 6010 00 1982 tnz flt_dec.fix_bin.exp_change 1983 1984 " flt_dec.fix_bin.zero assumes x3 is current position of exp and 1985 " therefore the length of the source. Make this true in case of 1986 " zero value, since x4 now holds length after mp3d or dv3d. 1987 002033 1988 flt_dec.fix_bin.zero_fix: 002033 aa 000000 6230 14 1989 eax3 0,x4 " mp3d or dv3d length is x4 002034 0a 002062 7100 00 1990 tra flt_dec.fix_bin.zero 1991 002035 1992 flt_dec.fix_bin.neg_scale: " negative scale is divide 002035 aa 000001 0640 03 1993 adx4 1,du " extra digit for hardware 002036 aa 5 00000 3221 00 1994 lcx2 work|target_scale " get |scale| 002037 aa 140140 2274 20 1995 dv3d (id),(pr,rl),(pr,rl) 002040 0a 010077 0000 12 1996 arg two_table,x2 002041 aa 500014 000013 1997 desc9fl work|flt_dec_generic,x3 002042 aa 500014 000014 1998 desc9fl work|flt_dec_generic,x4 002043 0a 002033 6000 00 1999 tze flt_dec.fix_bin.zero_fix " zero value 2000 " tra flt_dec.fix_bin.exp_change 2001 2002 " Integrate possible exponent change. 2003 002044 2004 flt_dec.fix_bin.exp_change: 002044 aa 000000 6230 14 2005 eax3 0,x4 " x3 is now exp offset 002045 aa 0 00100 1005 13 2006 mlr (pr,x3),(pr) 002046 aa 500013 600001 2007 desc9a work|flt_dec_generic-1(3),1 002047 aa 500012 000001 2008 desc9a work|flt_bin_generic_exp,1 002050 aa 5 00012 2351 00 2009 lda work|flt_bin_generic_exp 002051 aa 000001 7350 00 2010 als 1 002052 aa 000034 7310 00 2011 ars 36-8 002053 aa 5 00013 0551 00 2012 asa work|flt_dec_generic_exp 2013 " See if exponent is too big. If not, then convert to fixed decimal 2014 " and then to binary. We leave it in place as correct. Exp offset is 2015 " assumed to be in x3. 2016 002054 2017 flt_dec.fix_bin.no_scale: 002054 aa 5 00013 2351 00 2018 lda work|flt_dec_generic_exp 002055 aa 000034 7350 00 2019 als 36-8 002056 0a 006252 6030 00 2020 trc decimal_range_error " range outside of flt dec 002057 aa 0 00113 1005 00 2021 mlr (pr),(pr,x3) " install hardware exp 002060 aa 500013 600001 2022 desc9a work|flt_dec_generic_exp(3),1 002061 aa 500013 600001 2023 desc9a work|flt_dec_generic-1(3),1 2024 002062 2025 flt_dec.fix_bin.zero: " x3 is assumed source length 002062 aa 777777 6240 14 2026 eax4 -1,x4 " target leading sign length 002063 0a 000104 7160 15 2027 xec mvn.pr_rl.pr_rl,x5 " create fixed decimal 002064 aa 500014 000013 2028 desc9fl work|flt_dec_generic,x3 002065 aa 500014 010014 2029 desc9ls work|flt_dec_generic,x4 002066 aa 0 00100 3055 40 2030 dtb (pr,rl),(pr) 002067 aa 500014 010014 2031 desc9ls work|flt_dec_generic,x4 002070 aa 500004 000010 2032 desc9a work|fix_bin_generic,8 002071 0a 002073 6170 00 2033 tov flt_dec.fix_bin.ovfl " may be bad may be -2**71 002072 0a 005175 7100 00 2034 tra generic_to_target 2035 2036 " Check if we had the value -2361183241434822606848, if not - size_error. 2037 002073 2038 flt_dec.fix_bin.ovfl: 002073 aa 0 00000 3035 40 2039 cmpn (pr,rl),() 002074 aa 500014 010014 2040 desc9ls work|flt_dec_generic,x4 002075 0a 002103 050027 2041 desc4ls max_fix_bin.dec,23 002076 0a 006226 6010 00 2042 tnz size_error " was out-of-range 002077 aa 001000 4310 03 2043 fld =1b26,du " get high-order bit 002100 aa 5 00004 7571 00 2044 staq work|fix_bin_generic 002101 aa 004000 6340 07 2045 ldi mask_faults,dl " clear overflow and mask 002102 0a 005175 7100 00 2046 tra generic_to_target 2047 002103 2048 max_fix_bin.dec: 002103 aa 322 066 021 203 2049 ac4 /-2361183241434822606848/,23 002104 aa 044 024 064 202 002105 aa 046 006 204 200 2050 " Conversion Routines - Flt Decimal to target GENERIC (flt bin) 2051 2052 " Convert float decimal value to an appropriate fixed decimal value 2053 " which will have all bits of significance for the final float bin 2054 " value. 2055 2056 " On entry X3 contains the precision of the flt_dec_generic. 2057 2058 " Algorithm finds the power of ten expressed in the float decimal, by 2059 " finding the leading zero's, the exponent and the precision as: 2060 " 2061 " mag = precision + exponent - leading_zeros 2062 " 2063 " From this and the log identity of base conversion, we determine a 2064 " top binary exponent which will cover this number as: 2065 " 2066 " bin_exp = ceil (mag*log2(10)) - log2(10) = 3.321928095 2067 " 2068 " This provides a power of two by which to scale the floating number, prior 2069 " to converting it to binary. This power is adjusted by the binary point 2070 " position of the floating point number. 2071 002106 2072 flt_dec_to_flt_bin: 002106 aa 5 00001 7231 00 2073 lxl3 work|source_precision 002107 aa 0 00000 1645 40 2074 tct (pr,rl) " count leading zeros 002110 aa 500014 200013 2075 desc9a work|flt_dec_generic(1),x3 " miss sign and exponent 002111 0a 005142 000000 2076 desc9a zero_skip 002112 aa 5 00004 0001 00 2077 arg work|fix_bin_generic 002113 0a 006246 6064 00 2078 ttn store_float_bin_zero " all digits are "0" 2079 2080 " At this point fix_bin_generic has the leading zero count. 002114 aa 000177 2350 07 2081 lda =o177,dl " mask for zero count 002115 aa 5 00004 3551 00 2082 ansa work|fix_bin_generic 002116 aa 5 00004 7211 00 2083 lxl1 work|fix_bin_generic " leading zero count 002117 aa 5 00013 2361 00 2084 ldq work|flt_dec_generic_exp " exponent in Q 002120 aa 777777 6350 13 2085 eaa -1,x3 " precision 002121 aa 000022 7310 00 2086 ars 18 002122 aa 5 00004 1551 00 2087 ssa work|fix_bin_generic " precision - lead zero 002123 0a 006246 6040 00 2088 tmi store_float_bin_zero 2089 2090 " Setup registers for scale series. Determine precision ceiling needed 2091 " from precision of both source and target. Take the larger to govern 2092 " sufficient precision for operation. Use extra digit for extension 2093 " precision needed for floating round. 2094 " 2095 " x2 is overlength precision of divide 2096 " x3 is running precision (starts at flt dec input length) 2097 " x4 is output precision of normalize 2098 002124 aa 000002 6230 13 2099 eax3 2,x3 " precision+sign+exp 002125 aa 5 00000 7241 00 2100 lxl4 work|target_precision " form output from target 002126 0a 010624 2240 14 2101 ldx4 bin_prec_to_dec_prec,x4 " including sign/exp 002127 aa 000002 0640 03 2102 adx4 2,du " with extra digit+extension 002130 aa 000001 6220 14 2103 eax2 1,x4 " extra again for divide 002131 aa 5 00006 7431 00 2104 stx3 work|flt_bin_generic " save for max 002132 aa 5 00006 1041 00 2105 cmpx4 work|flt_bin_generic " see if source or target larget 002133 0a 002136 6054 00 2106 tpnz flt_dec.flt_bin.max_prec 002134 aa 000001 6240 13 2107 eax4 1,x3 " take precision from source 002135 aa 000002 6220 13 2108 eax2 2,x3 " overlength for divide 002136 2109 flt_dec.flt_bin.max_prec: 002136 aa 5 00004 0761 00 2110 adq work|fix_bin_generic " exp + prec - LZ 002137 0a 002401 4020 00 2111 mpy log2.10 002140 aa 000003 7370 00 2112 lls 3 " scale back 002141 aa 5 00012 7551 00 2113 sta work|flt_bin_generic_exp " save initial exponent stab 2114 " Precision correction. 2115 2116 " In order to maximize conversion precision, we determine the precision 2117 " needed to contain the high order digit of the mantissa. This is 2118 " subtracted from the precision of the EAQ to determine the power of two 2119 " needed to produce maximum possible conversion precision. 2120 2121 " From leading zero count, determine the first non-zero digit value and 2122 " move to work|fix_bin_generic filling high with zero. Determine the 2123 " precision correction needed to bring us to float_bin 70 to 71. 2124 002142 aa 0 00100 1015 11 2125 mrl (pr,x1),(pr),fill(000) " zero fill for ldx1 pickup 002143 aa 500014 200001 2126 desc9a work|flt_dec_generic(1),1 002144 aa 500004 000002 2127 desc9a work|fix_bin_generic,2 002145 aa 5 00004 2211 00 2128 ldx1 work|fix_bin_generic " get high digit - convert 002146 0a 010655 2210 11 2129 ldx1 digit_to_prec-48,x1 " pick up precision-correct 0 002147 aa 5 00004 4501 00 2130 stz work|fix_bin_generic " clear storage 002150 aa 5 00004 4411 00 2131 sxl1 work|fix_bin_generic " save precision correction 002151 aa 5 00004 0751 00 2132 ada work|fix_bin_generic " correct float_bin 71 prec 002152 aa 000107 1750 07 2133 sba =71,dl " correct alignment 002153 aa 5 00004 7551 00 2134 sta work|fix_bin_generic " save as final power 002154 0a 002171 6040 00 2135 tmi flt_dec.flt_bin.scale_up 2136 002155 2137 flt_dec.flt_bin.scale_dwn: " Scale down by power of two 002155 aa 000305 1150 07 2138 cmpa two_table_limit,dl " within table range? 002156 0a 002230 6044 00 2139 tmoz flt_dec.flt_bin.dwn.final " yes final to fixed 002157 aa 000305 2350 07 2140 lda two_table_limit,dl " scale-down section 002160 aa 140140 2274 20 2141 dv3d (id),(pr,rl),(pr,rl) " down-scale mantissa 002161 0a 010077 0000 05 2142 arg two_table,al 002162 aa 500014 000013 2143 desc9fl work|flt_dec_generic,x3 002163 aa 500014 000012 2144 desc9fl work|flt_dec_generic,x2 " overlength for precision 002164 0a 000104 7160 15 2145 xec mvn.pr_rl.pr_rl,x5 002165 aa 500014 000012 2146 desc9fl work|flt_dec_generic,x2 002166 aa 500014 000014 2147 desc9fl work|flt_dec_generic,x4 002167 aa 000000 5310 00 2148 neg " subtract work done 002170 0a 002201 7100 00 2149 tra flt_dec.flt_bin.done 2150 " Scale up by appropriate power of two. 2151 002171 2152 flt_dec.flt_bin.scale_up: 002171 aa 000000 5310 00 2153 neg " form absolute 002172 aa 000305 1150 07 2154 cmpa two_table_limit,dl " within table range? 002173 0a 002220 6044 00 2155 tmoz flt_dec.flt_bin.up.final " yes final to fixed 002174 aa 000305 2350 07 2156 lda two_table_limit,dl " scale-up section 002175 0a 000112 7160 15 2157 xec mp3d.id.pr_rl.pr_rl,x5 " up-scale mantissa ?round? 002176 0a 010077 0000 05 2158 arg two_table,al 002177 aa 500014 000013 2159 desc9fl work|flt_dec_generic,x3 002200 aa 500014 000014 2160 desc9fl work|flt_dec_generic,x4 " overlength for precision 2161 " tra flt_dec.flt_bin.done 2162 2163 2164 " Powering section done. Fix up work done is scaling to bin exp. 2165 002201 2166 flt_dec.flt_bin.done: 002201 aa 000000 6230 14 2167 eax3 0,x4 " expand size of flt_dec 002202 aa 5 00004 0551 00 2168 asa work|fix_bin_generic " count work done 2169 002203 aa 0 00100 1005 14 2170 mlr (pr,x4),(pr) " update exponent 002204 aa 500013 600001 2171 desc9a work|flt_dec_generic-1(3),1 002205 aa 500005 000001 2172 desc9a work|fix_bin_generic+1,1 002206 aa 5 00005 2351 00 2173 lda work|fix_bin_generic+1 002207 aa 000001 7350 00 2174 als 1 002210 aa 000034 7310 00 2175 ars 36-8 002211 aa 5 00013 0551 00 2176 asa work|flt_dec_generic_exp 2177 002212 aa 000114 1004 00 2178 mlr (),(pr,x4),fill(000) " clear decimal exponet 002213 aa 000000 000000 2179 zero 002214 aa 500013 600001 2180 desc9a work|flt_dec_generic-1(3),1 " to avoid over/underflow 002215 aa 5 00004 2351 00 2181 lda work|fix_bin_generic " check completion. 002216 0a 002171 6040 00 2182 tmi flt_dec.flt_bin.scale_up " scale up 002217 0a 002155 7100 00 2183 tra flt_dec.flt_bin.scale_dwn " scale down 2184 2185 " Final multiply to correct range. Result goes to fixed decimal to 2186 " position for DTB conversion to binary. 2187 002220 2188 flt_dec.flt_bin.up.final: 002220 aa 0 00113 1005 00 2189 mlr (pr),(pr,x3) " move exponent 002221 aa 500013 600001 2190 desc9a work|flt_dec_generic_exp(3),1 002222 aa 500013 600001 2191 desc9a work|flt_dec_generic-1(3),1 2192 002223 0a 000116 7160 15 2193 xec mp3d.id.pr_rl.pr,x5 " up-scale mantissa ?round? 002224 0a 010077 0000 05 2194 arg two_table,al 002225 aa 500014 000013 2195 desc9fl work|flt_dec_generic,x3 002226 aa 500014 010030 2196 desc9ls work|flt_dec_generic,24 " overlength for precision 002227 0a 002237 7100 00 2197 tra flt_dec.flt_bin.up.enter 2198 2199 " Final divide to correct range. Result goes to fixed decimal to position 2200 " for DTB conversion to binary. 2201 002230 2202 flt_dec.flt_bin.dwn.final: 002230 aa 0 00113 1005 00 2203 mlr (pr),(pr,x3) " move exponent 002231 aa 500013 600001 2204 desc9a work|flt_dec_generic_exp(3),1 002232 aa 500013 600001 2205 desc9a work|flt_dec_generic-1(3),1 2206 002233 0a 000114 7160 15 2207 xec dv3d.id.pr_rl.pr,x5 002234 0a 010077 0000 05 2208 arg two_table,al 002235 aa 500014 000013 2209 desc9fl work|flt_dec_generic,x3 002236 aa 500014 010030 2210 desc9ls work|flt_dec_generic,24 2211 2212 " Convert the fixed decimal value to bits, and normalize float bin result. 2213 002237 2214 flt_dec.flt_bin.up.enter: 002237 aa 0 00100 3055 00 2215 dtb (pr),(pr) 002240 aa 500014 010030 2216 desc9ls work|flt_dec_generic,24 002241 aa 500006 000010 2217 desc9a work|flt_bin_generic,8 2218 2219 " Get the precision correction for the high order decimal input digit and 2220 " formulate the initial binary exponent. 2221 002242 aa 000000 6350 11 2222 eaa 0,x1 002243 aa 000012 7350 00 2223 als 18-8 " to exponent position 002244 aa 5 00004 7551 00 2224 sta work|fix_bin_generic 002245 aa 5 00006 2371 00 2225 ldaq work|flt_bin_generic 002246 aa 5 00004 4111 00 2226 lde work|fix_bin_generic 002247 aa 000000 5730 00 2227 fno 002250 aa 5 00004 4561 00 2228 ste work|fix_bin_generic 002251 aa 5 00006 7571 00 2229 staq work|flt_bin_generic 002252 aa 5 00004 2351 00 2230 lda work|fix_bin_generic 002253 aa 000034 7310 00 2231 ars 36-8 002254 aa 5 00012 0551 00 2232 asa work|flt_bin_generic_exp 002255 0a 005175 7100 00 2233 tra generic_to_target 2234 " Conversion Routines - Flt Decimal to target generic (fix bin uns) 2235 2236 " Convert float decimal to scaled or unscaled fixed binary unsigned. 2237 002256 2238 flt_dec_to_fix_bin_uns: 002256 aa 0 53000 1065 00 2239 cmpc (pr),(),fill(plus_sign) " Ensure positive number. 002257 aa 500014 000001 2240 desc9a work|flt_dec_generic,1 002260 aa 000000 000000 2241 zero 002261 0a 006226 6010 00 2242 tnz size_error " converting negative 002262 aa 5 00000 7241 00 2243 lxl4 work|target_precision " determine precision needed 002263 0a 010624 2240 14 2244 ldx4 bin_prec_to_dec_prec,x4 002264 aa 5 00000 2221 00 2245 ldx2 work|target_scale " is bin an integer? 002265 0a 002315 6000 00 2246 tze flt_dec.fix_bin_uns.no_scale " yes 002266 0a 002276 6040 00 2247 tmi flt_dec.fix_bin_uns.neg_scale " negative scale 2248 2249 " Scale the float decimal value by the integer's power of two scale 2250 002267 aa 140140 2264 20 2251 mp3d (id),(pr,rl),(pr,rl) 002270 0a 010077 0000 12 2252 arg two_table,x2 002271 aa 500014 000013 2253 desc9fl work|flt_dec_generic,x3 002272 aa 500014 000014 2254 desc9fl work|flt_dec_generic,x4 002273 0a 002305 6010 00 2255 tnz flt_dec.fix_bin_uns.exp_change 2256 2257 " Assumption at flt_dec.fix_bin_uns.zero is x3 is size of target, which is 2258 " currently held only in x4. Copy x4 to x3 to correct for assumption. 2259 002274 2260 flt_dec.fix_bin_uns.zero_fix: 002274 aa 000000 6230 14 2261 eax3 0,x4 " size of zero target 002275 0a 002323 7100 00 2262 tra flt_dec.fix_bin_uns.zero " zero value 2263 002276 2264 flt_dec.fix_bin_uns.neg_scale: " negative scale is divide 002276 aa 5 00000 3221 00 2265 lcx2 work|target_scale " |scale| 002277 aa 000001 0640 03 2266 adx4 1,du " extra digit for hardware 002300 aa 140140 2274 20 2267 dv3d (id),(pr,rl),(pr,rl) 002301 0a 010077 0000 12 2268 arg two_table,x2 002302 aa 500014 000013 2269 desc9fl work|flt_dec_generic,x3 002303 aa 500014 000014 2270 desc9fl work|flt_dec_generic,x4 002304 0a 002274 6000 00 2271 tze flt_dec.fix_bin_uns.zero_fix " zero value 2272 " tra flt_dec.fix_bin_uns.exp_change 2273 002305 2274 flt_dec.fix_bin_uns.exp_change: " Add any exponent change 002305 aa 000000 6230 14 2275 eax3 0,x4 002306 aa 0 00100 1005 13 2276 mlr (pr,x3),(pr) 002307 aa 500013 600001 2277 desc9a work|flt_dec_generic-1(3),1 002310 aa 500012 000001 2278 desc9a work|flt_bin_generic_exp,1 002311 aa 5 00012 2351 00 2279 lda work|flt_bin_generic_exp 002312 aa 000001 7350 00 2280 als 1 002313 aa 000034 7310 00 2281 ars 36-8 002314 aa 5 00013 0551 00 2282 asa work|flt_dec_generic_exp 2283 2284 " See if exponent is too big. If not, then convert to fixed decimal 2285 " and then to binary. We leave it in place as correct. 2286 002315 2287 flt_dec.fix_bin_uns.no_scale: 002315 aa 5 00013 2351 00 2288 lda work|flt_dec_generic_exp 002316 aa 000034 7350 00 2289 als 36-8 002317 0a 006252 6030 00 2290 trc decimal_range_error " range outside of flt dec 002320 aa 0 00113 1005 00 2291 mlr (pr),(pr,x3) " install hardware exp 002321 aa 500013 600001 2292 desc9a work|flt_dec_generic_exp(3),1 002322 aa 500013 600001 2293 desc9a work|flt_dec_generic-1(3),1 2294 002323 2295 flt_dec.fix_bin_uns.zero: 002323 aa 777777 6240 14 2296 eax4 -1,x4 " leading signed precision 002324 0a 000104 7160 15 2297 xec mvn.pr_rl.pr_rl,x5 " create fixed decimal 002325 aa 500014 000013 2298 desc9fl work|flt_dec_generic,x3 002326 aa 500014 010014 2299 desc9ls work|flt_dec_generic,x4 2300 2301 " Convert. An overflow is acceptable since the bit pattern is right. 2302 002327 aa 0 00100 3055 40 2303 dtb (pr,rl),(pr) 002330 aa 500014 010014 2304 desc9ls work|flt_dec_generic,x4 002331 aa 500004 000010 2305 desc9a work|fix_bin_generic,8 002332 0a 002334 6170 00 2306 tov flt_dec.fix_bin_uns.ovfl " too big, only 71 bits done 002333 0a 005175 7100 00 2307 tra generic_to_target 2308 2309 " We got an overflow on the conversion. Thus set the high order bit. 2310 002334 2311 flt_dec.fix_bin_uns.ovfl: 002334 aa 0 00000 3035 40 2312 cmpn (pr,rl),() " See if above 72 bit limit. 002335 aa 500014 010014 2313 desc9ls work|flt_dec_generic,x4 002336 0a 006602 070026 2314 desc4ns two_72,22 002337 0a 006226 6044 00 2315 tmoz size_error 002340 aa 400000 2350 03 2316 lda =o400000,du " include the sign bit 002341 aa 5 00004 2551 00 2317 orsa work|fix_bin_generic 002342 aa 004000 6340 07 2318 ldi mask_faults,dl " permits overflow again 002343 0a 005175 7100 00 2319 tra generic_to_target Conversion Routines - Flt Decimal to target GENERIC (bit) 2320 2321 " Entry condition is a float decimal value in flt_dec_generic 2322 " We convert the flt dec source to fixed bin (71, 0), obeying all normal 2323 " conversion rules. 2324 2325 002344 2326 flt_dec_to_bit: 002344 aa 5 00013 2351 00 2327 lda work|flt_dec_generic_exp " incorporate exponent 002345 aa 000034 7350 00 2328 als 36-8 002346 0a 006252 6030 00 2329 trc decimal_range_error " range outside of flt dec 002347 aa 0 00113 1005 00 2330 mlr (pr),(pr,x3) " install hardware exp 002350 aa 500013 600001 2331 desc9a work|flt_dec_generic_exp(3),1 002351 aa 500013 600001 2332 desc9a work|flt_dec_generic-1(3),1 2333 002352 aa 000027 2240 03 2334 ldx4 23,du 002353 0a 000104 7160 15 2335 xec mvn.pr_rl.pr_rl,x5 " create fixed decimal 002354 aa 500014 000013 2336 desc9fl work|flt_dec_generic,x3 002355 aa 500014 010014 2337 desc9ls work|flt_dec_generic,x4 002356 aa 0 00100 3055 40 2338 dtb (pr,rl),(pr) " convert to fixed bin (71,0) 002357 aa 500014 010014 2339 desc9ls work|flt_dec_generic,x4 002360 aa 500004 000010 2340 desc9a work|fix_bin_generic,8 002361 0a 006226 6170 00 2341 tov size_error 2342 2343 " Determine the precision equivalent of the result with 0 scale. 2344 002362 aa 5 00001 7221 00 2345 lxl2 work|source_precision 002363 aa 5 00001 1621 00 2346 sbx2 work|source_scale 002364 aa 000000 6360 12 2347 eaq 0,x2 002365 aa 000022 7320 00 2348 qrs 18 002366 0a 002401 4020 00 2349 mpy log2.10 " convert precision to bin 002367 aa 000003 7370 00 2350 lls 3 002370 aa 000000 1160 07 2351 cmpq 0,dl " take ceiling 002371 0a 002373 6000 00 2352 tze flt_dec.bit.ceil 002372 aa 000001 0750 07 2353 ada 1,dl 002373 2354 flt_dec.bit.ceil: 002373 aa 000107 1150 07 2355 cmpa 71,dl " take min (71, a) 002374 0a 002376 6040 00 2356 tmi flt_dec.bit.min 002375 aa 000107 2350 07 2357 lda 71,dl 002376 2358 flt_dec.bit.min: 002376 aa 5 00001 7551 00 2359 sta work|source_precision 002377 aa 5 00004 2371 00 2360 ldaq work|fix_bin_generic " pick up value 002400 0a 001552 7100 00 2361 tra to_bit " convert fix bin (71, 0) to bit 2362 2363 2364 " Log conversion to convert decimal exponent into binary exponent. 2365 002401 2366 log2.10: 002401 aa 324464 741137 2367 dec 3.321928095b2 " log2(10) at scale 34 2368 " Conversion Routines - Fixed bin unsigned to target GENERIC 2369 002402 2370 fix_bin_uns_generic_conversion: 002402 0a 000376 2210 16 2371 ldx1 target_type_map,x6 " determine target GENERIC 002403 aa 000077 3610 03 2372 anx1 generic_mask,du " mask for type 002404 0a 002405 7100 31 2373 tra fix_bin_uns_generic_case,x1* 2374 002405 2375 fix_bin_uns_generic_case: 002405 0a 006273 0000 00 2376 arg error_bad_type 002406 0a 002414 0000 00 2377 arg fix_bin_uns_to_fix_bin 002407 0a 002450 0000 00 2378 arg fix_bin_uns_to_flt_bin 002410 0a 002477 0000 00 2379 arg fix_bin_uns_to_flt_dec 002411 0a 002414 0000 00 2380 arg fix_bin_uns_to_fix_bin_uns 002412 0a 002562 0000 00 2381 arg fix_bin_uns_to_bit 002413 0a 003036 0000 00 2382 arg fix_bin_uns_to_char 2383 2384 " Convert fixed bin to fixed bin. Here it is mainly a matter of scaling 2385 " to ensure the target scale factor is correct. The difference between 2386 " conversion to signed and unsigned targets is to assure that the output 2387 " value is within the range of the target, and an unsigned to signed 2388 " conversion must result in a positive signed result. 2389 2390 002414 2391 fix_bin_uns_to_fix_bin: " target signed 002414 2392 fix_bin_uns_to_fix_bin_uns: " target unsigned 002414 aa 5 00004 2371 00 2393 ldaq work|fix_bin_generic " load for .check_target 002415 aa 5 00000 2221 00 2394 ldx2 work|target_scale " determine cross-scaling 002416 aa 5 00001 1621 00 2395 sbx2 work|source_scale 002417 0a 002444 6000 00 2396 tze fix_bin_uns.check_target " scales match 002420 0a 002430 6040 00 2397 tmi fix_bin_uns.scale_right " need right shift and ?round? 2398 2399 " Overflow detection means generating a mask of the number of bits to 2400 " be shifted left to determine if this area is non-zero, if so then we 2401 " will overflow. 2402 002421 2403 fix_bin_uns.scale_left: " left shift zero fill 002421 aa 001000 4310 03 2404 fld =1b26,du " get mask bit 002422 aa 777777 7330 12 2405 lrs -1,x2 " generate mask 002423 aa 5 00004 3771 00 2406 anaq work|fix_bin_generic 002424 0a 006226 6010 00 2407 tnz size_error " we would overflow 2408 002425 aa 5 00004 2371 00 2409 ldaq work|fix_bin_generic 002426 aa 000000 7370 12 2410 lls 0,x2 002427 0a 002443 7100 00 2411 tra fix_bin_uns.noscale 2412 2413 " Right scaling may require a round. Positive rounds up. Do this by 2414 " determining the bit position to round at. 2415 002430 2416 fix_bin_uns.scale_right: " right shift and ?round? 002430 aa 777777 6620 03 2417 erx2 =o777777,du " form shift count-1 002431 aa 000000 6240 15 2418 eax4 0,x5 " determine if rounding 002432 0a 002440 6000 00 2419 tze fix_bin_uns.noround 002433 0a 001416 2370 00 2420 ldaq one " load mask for rounding 002434 aa 000000 7370 12 2421 lls 0,x2 " determine round bit 002435 aa 5 00004 3771 00 2422 anaq work|fix_bin_generic 002436 0a 002440 6010 00 2423 tnz fix_bin_uns.noround 002437 aa 000000 6240 00 2424 eax4 0 " force no round 002440 2425 fix_bin_uns.noround: 002440 aa 5 00004 2371 00 2426 ldaq work|fix_bin_generic 002441 aa 000001 7730 12 2427 lrl 1,x2 " do total scale 002442 0a 001420 7160 14 2428 xec binary_round,4 " round if necessary 002443 2429 fix_bin_uns.noscale: " no scaling needed, no round 002443 aa 5 00004 7571 00 2430 staq work|fix_bin_generic 2431 2432 " Ensure target is big enough to hold result. Do this through shifting. 2433 " Fixed bin uns to Fixed bin signed checked by precision difference. 2434 002444 2435 fix_bin_uns.check_target: 002444 aa 5 00000 7221 00 2436 lxl2 work|target_precision " find precision 002445 aa 000000 7730 12 2437 lrl 0,x2 " see what is above it 002446 0a 006226 6010 00 2438 tnz size_error " too big to fit 002447 0a 005175 7100 00 2439 tra generic_to_target " convert to target 2440 " Conversion Routines - Fixed bin unsigned to target GENERIC (float bin) 2441 2442 2443 " Conversion is almost identical to normal fixed bin conversion, with 2444 " the additional condition that the result must be unsigned, thus if 2445 " the source is a full fixed bin (72) unsigned and has the upper bit set, 2446 " we pre-scale by one to remove an erroneous negative indication. 2447 002450 2448 fix_bin_uns_to_flt_bin: 002450 aa 5 00001 2351 00 2449 lda work|source_scale " form exponent including scale 002451 aa 000022 7310 00 2450 ars 18 " clip precision 002452 aa 000034 7350 00 2451 als 36-8 " move to exp field 002453 aa 000000 5310 00 2452 neg 0 " form -scale (b25) 002454 aa 216000 0750 03 2453 ada =71b25,du " add integer scaling 002455 aa 5 00012 7551 00 2454 sta work|flt_bin_generic_exp 002456 aa 5 00004 2371 00 2455 ldaq work|fix_bin_generic 002457 0a 002462 6050 00 2456 tpl fix_bin_uns.positive " high bit is clear 002460 aa 5 00012 0541 00 2457 aos work|flt_bin_generic_exp " scale exponent 002461 aa 000001 7730 00 2458 lrl 1 " protect high bit 002462 2459 fix_bin_uns.positive: 002462 aa 5 00012 4111 00 2460 lde work|flt_bin_generic_exp " load and normalize 002463 aa 000000 5730 00 2461 fno 002464 0a 002473 6000 00 2462 tze fix_bin_uns.flt.zero " store extended 0.0 002465 aa 5 00012 4561 00 2463 ste work|flt_bin_generic_exp " save exponent 002466 aa 5 00006 7571 00 2464 staq work|flt_bin_generic 002467 aa 5 00012 2351 00 2465 lda work|flt_bin_generic_exp 002470 aa 000034 7310 00 2466 ars 36-8 " form 36-bit exp 002471 aa 5 00012 7551 00 2467 sta work|flt_bin_generic_exp 002472 0a 005175 7100 00 2468 tra generic_to_target 2469 2470 002473 2471 fix_bin_uns.flt.zero: " zero float bin then convert to target 002473 aa 5 00012 4501 00 2472 stz work|flt_bin_generic_exp 002474 aa 5 00006 4501 00 2473 stz work|flt_bin_generic 002475 aa 5 00007 4501 00 2474 stz work|flt_bin_generic+1 002476 0a 005175 7100 00 2475 tra generic_to_target " convert to target 2476 " Conversion Routines - Fixed bin unsigned to target GENERIC (float decimal) 2477 2478 2479 " Initial coding uses BTD instruction and divides to provide result of 2480 " scaling. This may be improved later. 2481 2482 002477 2483 fix_bin_uns_to_flt_dec: 002477 aa 5 00004 2371 00 2484 ldaq work|fix_bin_generic " see if high order bit set 002500 0a 006265 6000 00 2485 tze force_zero " total is 0.0 002501 aa 400000 3150 03 2486 cana =o400000,du 002502 0a 002515 6000 00 2487 tze fix_bin_uns.flt_dec.short 002503 aa 400000 3750 03 2488 ana =o400000,du " mask off high bit 002504 aa 5 00004 6551 00 2489 ersa work|fix_bin_generic " turn it off 2490 002505 aa 000027 2240 03 2491 ldx4 23,du " set length of conversion 002506 aa 0 00140 3015 00 2492 btd (pr),(pr,rl) " convert 71 bits 002507 aa 500004 000010 2493 desc9a work|fix_bin_generic,8 002510 aa 500014 010014 2494 desc9ls work|flt_dec_generic,x4 2495 002511 aa 000140 2024 00 2496 ad2d (),(pr,rl) " correct for high bit 002512 0a 006577 070026 2497 desc4ns two_71,22 " add 71's bit power 002513 aa 500014 010014 2498 desc9ls work|flt_dec_generic,x4 002514 0a 002531 7100 00 2499 tra fix_bin_uns.flt_dec.long 2500 2501 " Determine length needed to convert. Method from fix_bin_to_flt_dec. 2502 " At fix_bin_uns.flt_dec.long X4 has length of the fixed decimal number. 2503 002515 2504 fix_bin_uns.flt_dec.short: 002515 aa 220000 4110 03 2505 lde =72b25,du " find true precision 002516 aa 000000 5730 00 2506 fno 002517 aa 5 00006 4561 00 2507 ste work|flt_bin_generic 002520 aa 5 00006 2351 00 2508 lda work|flt_bin_generic 002521 aa 000034 7310 00 2509 ars 36-8 002522 0a 010624 2240 05 2510 ldx4 bin_prec_to_dec_prec,al " get digits needed 002523 0a 010624 7220 05 2511 lxl2 bin_prec_to_dec_prec,al " get size of source 002524 aa 777767 6210 12 2512 eax1 -9,x2 " get offset of source 002525 aa 777777 6610 03 2513 erx1 =o777777,du 002526 aa 0 00140 3015 51 2514 btd (pr,x1,rl),(pr,rl) 002527 aa 500004 000012 2515 desc9a work|fix_bin_generic,x2 002530 aa 500014 010014 2516 desc9ls work|flt_dec_generic,x4 2517 002531 2518 fix_bin_uns.flt_dec.long: 002531 aa 5 00013 4501 00 2519 stz work|flt_dec_generic_exp " pre-set 0 exponent 2520 002532 aa 000001 6230 14 2521 eax3 1,x4 " size of float decimal 002533 aa 5 00001 2221 00 2522 ldx2 work|source_scale " determine power to divide 002534 0a 005175 6000 00 2523 tze generic_to_target " simple move 002535 0a 002544 6040 00 2524 tmi fix_bin_uns.flt_dec.neg_scale 2525 002536 aa 000001 0630 03 2526 adx3 1,du " one extra digit for divide 002537 0a 000110 7160 15 2527 xec dv3d.id.pr_rl.pr_rl,x5 " scale the output 002540 0a 010077 0000 12 2528 arg two_table,x2 " power of two 002541 aa 500014 010014 2529 desc9ls work|flt_dec_generic,x4 002542 aa 500014 000013 2530 desc9fl work|flt_dec_generic,x3 002543 0a 002552 7100 00 2531 tra fix_bin_uns.flt_dec.common 2532 002544 2533 fix_bin_uns.flt_dec.neg_scale: 002544 aa 777777 6620 03 2534 erx2 =o777777,du 002545 aa 000001 0620 03 2535 adx2 =1,du " negate x2 002546 0a 000112 7160 15 2536 xec mp3d.id.pr_rl.pr_rl,x5 " scale the output 002547 0a 010077 0000 12 2537 arg two_table,x2 " power of two 002550 aa 500014 010014 2538 desc9ls work|flt_dec_generic,x4 002551 aa 500014 000013 2539 desc9fl work|flt_dec_generic,x3 2540 002552 2541 fix_bin_uns.flt_dec.common: 002552 aa 0 00100 1005 13 2542 mlr (pr,x3),(pr) " pick and extend exponent 002553 aa 500013 600001 2543 desc9a work|flt_dec_generic-1(3),1 002554 aa 500013 000001 2544 desc9a work|flt_dec_generic_exp,1 002555 aa 5 00013 2351 00 2545 lda work|flt_dec_generic_exp 002556 aa 000001 7350 00 2546 als 1 002557 aa 000034 7310 00 2547 ars 36-8 002560 aa 5 00013 7551 00 2548 sta work|flt_dec_generic_exp 002561 0a 005175 7100 00 2549 tra generic_to_target 2550 " Conversion Routines - Fixed bin unsigned to target GENERIC (bit) 2551 2552 " Entry condition is a fixed bin unsigned value in fix_bin_generic. 2553 " We convert the fix bin uns source to fixed bin uns (72, 0), obeying 2554 " all normal conversion rules. 2555 002562 2556 fix_bin_uns_to_bit: 002562 aa 5 00004 2371 00 2557 ldaq work|fix_bin_generic " load for to_bit 002563 aa 5 00001 2221 00 2558 ldx2 work|source_scale " unscaled is (72, 0) 002564 0a 002605 6000 00 2559 tze to_bit_uns " convert to final bits 002565 0a 002573 6050 00 2560 tpl fix_bin_uns.bit.scale_right " need shift right and ?round? 2561 002566 2562 fix_bin_uns.bit.scale_left: " left shift zero fill 002566 aa 777777 6620 03 2563 erx2 =o777777,du " negate x2 002567 aa 000001 0620 03 2564 adx2 =1,du 002570 aa 000000 7370 12 2565 lls 0,x2 002571 0a 006226 6030 00 2566 trc size_error " overflow 002572 0a 002605 7100 00 2567 tra to_bit_uns " value is good 2568 002573 2569 fix_bin_uns.bit.scale_right: 002573 aa 000000 6240 15 2570 eax4 0,x5 " determine if rounding 002574 0a 002602 6000 00 2571 tze fix_bin_uns.bit.noround 002575 0a 001416 2370 00 2572 ldaq one " load mask for rounding 002576 aa 777777 7370 12 2573 lls -1,x2 " determine round bit 002577 aa 5 00004 3771 00 2574 anaq work|fix_bin_generic 002600 0a 002602 6010 00 2575 tnz fix_bin_uns.bit.noround 002601 aa 000000 6240 00 2576 eax4 0 " force no round 002602 2577 fix_bin_uns.bit.noround: 002602 aa 5 00004 2371 00 2578 ldaq work|fix_bin_generic 002603 aa 000000 7730 12 2579 lrl 0,x2 " do total scale 002604 0a 001420 7160 14 2580 xec binary_round,4 " round if necessary 2581 2582 " Determine if it fits within the bit stream target and move to generic. 2583 002605 2584 to_bit_uns: 002605 aa 5 00004 7571 00 2585 staq work|fix_bin_generic " save fix bin (71, 0) 002606 aa 5 00014 3521 00 2586 epp generic,work|bit_generic " set generic area 002607 aa 5 00001 7221 00 2587 lxl2 work|source_precision " determine start bit to move 002610 aa 5 00001 1621 00 2588 sbx2 work|source_scale 002611 aa 777667 6240 12 2589 eax4 -73,x2 002612 aa 777777 6640 03 2590 erx4 =o777777,du " start = 72-precision 002613 0a 002616 6050 00 2591 tpl fix_bin_uns.bit.non_null " string not null 002614 aa 000000 2230 03 2592 ldx3 0,du " length is 0 002615 0a 005175 7100 00 2593 tra generic_to_target " output "0" bits 2594 002616 2595 fix_bin_uns.bit.non_null: 002616 aa 5 00000 7211 00 2596 lxl1 work|target_precision " see if fits within bits 002617 aa 000000 7730 11 2597 lrl 0,x1 " okay if "0"b left over 002620 0a 006226 6010 00 2598 tnz size_error " number is too big 002621 aa 5 00000 7231 00 2599 lxl3 work|target_precision 002622 aa 0 03140 0605 54 2600 csl (pr,x4,rl),(pr,rl),bool(move),fill(0) 002623 aa 500004 000012 2601 descb work|fix_bin_generic,x2 002624 aa 200000 000013 2602 descb generic|0,x3 002625 0a 005175 7100 00 2603 tra generic_to_target " store result 2604 " Conversion Routines - Bit to target GENERIC 2605 2606 " Expects generic to point to bit source, and length to be in X3. 2607 002626 2608 bit_generic_conversion: 002626 0a 000376 2210 16 2609 ldx1 target_type_map,x6 " Call to target routine 002627 aa 000077 3610 03 2610 anx1 generic_mask,du 002630 0a 002631 7100 31 2611 tra bit_generic_case,x1* 2612 002631 2613 bit_generic_case: 002631 0a 006273 0000 00 2614 arg error_bad_type 002632 0a 002640 0000 00 2615 arg bit_to_fix_bin 002633 0a 002640 0000 00 2616 arg bit_to_flt_bin 002634 0a 002640 0000 00 2617 arg bit_to_flt_dec 002635 0a 002653 0000 00 2618 arg bit_to_fix_bin_uns 002636 0a 002665 0000 00 2619 arg bit_to_bit 002637 0a 002673 0000 00 2620 arg bit_to_char 2621 2622 " Conversion to fixed bin is done in a simple manner, as is conversion 2623 " to float bin and float decimal. For all these we convert to fixed bin 2624 " (71, 0), and then call the fixed bin conversion to target GENERIC. 2625 002640 2626 bit_to_fix_bin: 002640 2627 bit_to_flt_bin: 002640 2628 bit_to_flt_dec: 002640 aa 5 00004 4501 00 2629 stz work|fix_bin_generic " clear sign bit 2630 2631 " Copy bits reverse to get from end of string. 2632 002641 aa 0 03100 0615 40 2633 csr (pr,rl),(pr),bool(move),fill(0) 002642 aa 200000 000013 2634 descb generic|0,x3 002643 aa 500004 010107 2635 descb work|fix_bin_generic(1),71 002644 0a 001326 6014 00 2636 trtf fix_bin_generic_conversion " bit string < 71 bits 002645 aa 777671 6230 13 2637 eax3 -71,x3 " check upper bits 002646 aa 0 00000 0665 40 2638 cmpb (pr,rl),(),fill(0) " to ensure leading "0"b 002647 aa 200000 000013 2639 descb generic|0,x3 002650 aa 000000 000000 2640 zero 002651 0a 006226 6010 00 2641 tnz size_error " too big 002652 0a 001326 7100 00 2642 tra fix_bin_generic_conversion " convert it 2643 2644 2645 2646 " Unsigned target case. 2647 002653 2648 bit_to_fix_bin_uns: " copy clears sign bit 002653 aa 0 03100 0615 40 2649 csr (pr,rl),(pr),bool(move),fill(0) 002654 aa 200000 000013 2650 descb generic|0,x3 002655 aa 500004 000110 2651 descb work|fix_bin_generic,72 002656 0a 002402 6014 00 2652 trtf fix_bin_uns_generic_conversion " bit string <= 72 bits 002657 aa 777670 6230 13 2653 eax3 -72,x3 " check upper bits 002660 aa 0 00000 0665 40 2654 cmpb (pr,rl),(),fill(0) " to ensure leading "0"b 002661 aa 200000 000013 2655 descb generic|0,x3 002662 aa 000000 000000 2656 zero 002663 0a 006226 6010 00 2657 tnz size_error " too big 002664 0a 002402 7100 00 2658 tra fix_bin_uns_generic_conversion " convert it 2659 " Converison Routine - bit to bit. 2660 2661 " Bit to bit conversion is simple. We simply determine if varying or 2662 " simple target, and copy sufficient bits to fill the target. Return 2663 " is directly to user since we cannot be complex. For a varying string 2664 " we only copy up to the length of the source, for a non-varying string, 2665 " we fill "0" beyond the length of the source. Source len in X3. Source 2666 " is pointed to by generic. We leave generic pointing to bit_generic. 2667 002665 2668 bit_to_bit: 002665 aa 5 00000 7221 00 2669 lxl2 work|target_precision 002666 aa 0 03140 0605 40 2670 csl (pr,rl),(pr,rl),bool(move),fill(0) 002667 aa 200000 000013 2671 descb generic|0,x3 002670 aa 500014 000012 2672 descb work|bit_generic,x2 " copy all bits needed 002671 aa 5 00014 3521 00 2673 epp generic,work|bit_generic " point to generic source. 002672 0a 005175 7100 00 2674 tra generic_to_target 2675 2676 2677 "Conversion Routines - bit to character. 2678 2679 " Bit to character is done by converting to the limit of the target's 2680 " precision the input bits in a loop. Much of the code, except the final 2681 " copy is identical to the bit-to-bit situation, since the only difference 2682 " is that the source bits become target digits. Source len in X3. Source 2683 " is addressed by generic. On exit we set generic to the generic 2684 " character, X3 is length of string. We use fix_bin_generic to temp-store 2685 " the string length of output. 2686 002673 2687 bit_to_char: 002673 aa 5 00000 7221 00 2688 lxl2 work|target_precision 002674 aa 000000 2240 03 2689 ldx4 0,du " source bit index 002675 aa 5 00004 7421 00 2690 stx2 work|fix_bin_generic " save precision 002676 0a 000376 2210 16 2691 ldx1 target_type_map,x6 " see if varying 002677 aa 040000 3010 03 2692 canx1 varying,du 002700 0a 002705 6000 00 2693 tze bit.char.loop 2694 2695 " Varying target, adjust conversion length in X2 if bit < char length. 2696 002701 aa 5 00004 1031 00 2697 cmpx3 work|fix_bin_generic 002702 0a 002705 6054 00 2698 tpnz bit.char.loop " Source > target 002703 aa 5 00004 7431 00 2699 stx3 work|fix_bin_generic " save precision 002704 aa 000000 6220 13 2700 eax2 0,x3 2701 002705 2702 bit.char.loop: 002705 aa 0 00000 0665 14 2703 cmpb (pr,x4),() " check if bit 1/0 002706 aa 200000 000001 2704 descb generic|0,1 002707 aa 000000 000000 2705 zero 002710 0a 002715 6000 00 2706 tze bit.char.zero 002711 aa 061114 1004 00 2707 mlr (),(pr,x4),fill(digit_1) " fill in "1" 002712 aa 000000 000000 2708 zero 002713 aa 500050 000001 2709 desc9a work|char_generic,1 002714 0a 002720 7100 00 2710 tra bit.char.done_digit 2711 002715 2712 bit.char.zero: 002715 aa 060114 1004 00 2713 mlr (),(pr,x4),fill(digit_0) " fill in "0" 002716 aa 000000 000000 2714 zero 002717 aa 500050 000001 2715 desc9a work|char_generic,1 2716 002720 2717 bit.char.done_digit: 002720 aa 000001 6240 14 2718 eax4 1,x4 002721 aa 000001 1630 03 2719 sbx3 1,du " count source done 002722 0a 002726 6044 00 2720 tmoz bit.char.fill_blank " beyond the source 002723 aa 000001 1620 03 2721 sbx2 1,du " count target done 002724 0a 002705 6054 00 2722 tpnz bit.char.loop 002725 0a 002731 7100 00 2723 tra bit.char.exit 2724 2725 " Beyond source, fill target with " " characters. 2726 002726 2727 bit.char.fill_blank: 002726 aa 040154 1004 00 2728 mlr (),(pr,rl,x4),fill(blank) 002727 aa 000000 000000 2729 zero 002730 aa 500050 000012 2730 desc9a work|char_generic,x2 2731 002731 2732 bit.char.exit: " setup chars and exit 002731 aa 5 00004 2231 00 2733 ldx3 work|fix_bin_generic " precision of generic chars 002732 aa 5 00050 3521 00 2734 epp generic,work|char_generic " base of chars 002733 0a 005175 7100 00 2735 tra generic_to_target Conversion Routines - Character to target GENERIC (char to bit) (char to char) 2736 002734 2737 char_to_generic: 002734 0a 000376 2210 16 2738 ldx1 target_type_map,x6 " determine target GENERIC 002735 aa 000077 3610 03 2739 anx1 generic_mask,du " mask for type 002736 0a 002737 7100 31 2740 tra char_generic_case,x1* 2741 002737 2742 char_generic_case: 002737 0a 006273 0000 00 2743 arg error_bad_type 002740 0a 003511 0000 00 2744 arg char_to_arithmetic " char_to_fix_bin 002741 0a 003511 0000 00 2745 arg char_to_arithmetic " char_to_flt_bin 002742 0a 003511 0000 00 2746 arg char_to_arithmetic " char_to_flt_dec 002743 0a 003511 0000 00 2747 arg char_to_arithmetic " char_to_fix_bin_uns 002744 0a 002746 0000 00 2748 arg char_to_bit 002745 0a 003015 0000 00 2749 arg char_to_char 2750 2751 " Char to bit conversion is simple. We simply determine if varying or 2752 " simple target, and copy sufficient bits to fill the target. Return 2753 " is directly to user since we cannot be complex. For a varying string 2754 " we only copy up to the length of the source, for a non-varying string, 2755 " we fill "0" beyond the length of the source. We receive generic pointing 2756 " to the character string, X3 as the length. We leave generic as base of 2757 " bit string and X3 as length. We use fix_bin_generic as the working 2758 " target length, permitting correct varying target conversion. 2759 002746 2760 char_to_bit: 002746 2761 char.bit.restart: " enter and restart 002746 aa 5 00001 7231 00 2762 lxl3 work|source_precision 002747 aa 5 00000 7221 00 2763 lxl2 work|target_precision 002750 aa 000000 2240 03 2764 ldx4 0,du " save length of target 002751 aa 5 00004 7421 00 2765 stx2 work|fix_bin_generic " save precision 002752 0a 000376 2210 16 2766 ldx1 target_type_map,x6 " see if varying 002753 aa 040000 3010 03 2767 canx1 varying,du 002754 0a 002761 6000 00 2768 tze char.bit.loop.enter 2769 2770 " Varying target, adjust conversion length in X2 if char < bit length. 2771 002755 aa 5 00004 1031 00 2772 cmpx3 work|fix_bin_generic 002756 0a 002761 6054 00 2773 tpnz char.bit.loop.enter " Source > target 002757 aa 5 00004 7431 00 2774 stx3 work|fix_bin_generic " save precision 002760 aa 000000 6220 13 2775 eax2 0,x3 2776 002761 2777 char.bit.loop.enter: 002761 aa 000000 1030 03 2778 cmpx3 0,du 002762 0a 003006 6044 00 2779 tmoz char.bit.fill_0 " no work - fill 0 002763 2780 char.bit.loop: 002763 aa 000114 1244 00 2781 scm (),(pr,x4) 002764 0a 003014 000002 2782 desc9a char.bit.01,2 " see if character is 0 or 1 002765 aa 200000 000001 2783 desc9a generic|0,1 002766 aa 5 00005 0001 00 2784 arg work|fix_bin_generic+1 002767 0a 002775 6070 00 2785 ttf char.bit.good " valid digit 2786 2787 " Digit is invalid. We correct values to declare a conversion error. 2788 002770 aa 000001 6360 14 2789 eaq 1,x4 " index in Q 002771 aa 000022 7320 00 2790 qrs 18 002772 aa 000277 2350 07 2791 lda 191,dl " oncode 002773 0a 006124 7010 00 2792 tsx1 conversion_error 002774 0a 002746 7100 00 2793 tra char.bit.restart " re-try conversion again 2794 2795 " Character was good. Fill in correct bit. 2796 002775 2797 char.bit.good: 002775 aa 0 03114 0605 00 2798 csl (pr),(pr,x4),bool(move) " fill bit 002776 aa 500005 700001 2799 descb work|fix_bin_generic+1(35),1 " using low order of index 002777 aa 500014 000001 2800 descb work|bit_generic,1 003000 aa 000001 6240 14 2801 eax4 1,x4 003001 aa 000001 1630 03 2802 sbx3 1,du " see if beyond source 003002 0a 003006 6044 00 2803 tmoz char.bit.fill_0 " fill with 0 bits 003003 aa 000001 1620 03 2804 sbx2 1,du " see if more target 003004 0a 002763 6054 00 2805 tpnz char.bit.loop 003005 0a 003011 7100 00 2806 tra char.bit.exit 2807 2808 " Fill in "0" bits for remainder of target. 2809 003006 2810 char.bit.fill_0: 003006 aa 003154 0604 00 2811 csl (),(pr,x4,rl),bool(move),fill(0) 003007 aa 000000 000000 2812 zero 003010 aa 500014 000012 2813 descb work|bit_generic,x2 2814 003011 2815 char.bit.exit: " setup bit info for exit 003011 aa 5 00004 2231 00 2816 ldx3 work|fix_bin_generic " number of bits 003012 aa 5 00014 3521 00 2817 epp generic,work|bit_generic " location of bits 003013 0a 005175 7100 00 2818 tra generic_to_target 2819 2820 " String used to check if characters are 0 or 1. 2821 003014 2822 char.bit.01: 003014 aa 060 061 000 000 2823 aci /01/,2 2824 2825 2826 "Conversion Routines - Character to Character 2827 2828 " Source length is in work|source_precision. generic points to the string. 2829 003015 2830 char_to_char: 003015 aa 5 00001 7231 00 2831 lxl3 work|source_precision " pick up length 003016 0a 005175 7100 00 2832 tra generic_to_target 2833 " Conversion Routines - Numeric to character 2834 2835 " This routine utilizes the existing _to_flt_dec 2836 " conversion, and sets up for such a conversion. It sets the 2837 " target precision according to the log conversion from the 2838 " precision of the incoming number. Set X4 to conversion routine address 2839 " since source get for real part is already done. 2840 003017 2841 fix_bin_to_char: 003017 0a 001446 2240 03 2842 ldx4 fix_bin_to_flt_dec,du " convert to float decimal 003020 0a 003037 7100 00 2843 tra to_char.enter 2844 003021 2845 flt_bin_to_char: 003021 0a 001650 2240 03 2846 ldx4 flt_bin_to_flt_dec,du " convert to float decimal 003022 0a 003037 7100 00 2847 tra to_char.enter 2848 2849 2850 " At this point X3 contains the length of the float decimal GENERIC. 2851 " It must be preserved through to the "to_char.float_type" label. 2852 003023 2853 flt_dec_to_char: 003023 0a 005175 2240 03 2854 ldx4 generic_to_target,du " convert to float decimal 003024 0a 003473 7010 00 2855 tsx1 save_target " save old target info 003025 aa 5 00001 2351 00 2856 lda work|source_precision " source to target prec/scale 003026 aa 5 00000 7551 00 2857 sta work|target_precision 003027 aa 5 00110 3515 00 2858 epp target,work|char_flt_dec_gen " past guard band 003030 aa 000246 2260 03 2859 ldx6 flt_dec_type,du " presume float 003031 0a 000120 2210 17 2860 ldx1 source_type_map,x7 " determine if float or fix 003032 aa 010000 3010 03 2861 canx1 fix,du 003033 0a 003071 6000 00 2862 tze to_char.float_type 003034 aa 000022 2260 03 2863 ldx6 fix_dec_type,du " fixed target 003035 0a 003071 7100 00 2864 tra to_char.float_type 2865 003036 2866 fix_bin_uns_to_char: 003036 0a 002477 2240 03 2867 ldx4 fix_bin_uns_to_flt_dec,du " convert to float decimal 2868 003037 2869 to_char.enter: " common processing 003037 0a 003473 7010 00 2870 tsx1 save_target " save old target info 2871 2872 " Float decimal precision is ceil ((fixed bin precision)/3.32). 2873 " This considers the bin precision and the decimal precision to be 2874 " logarithm expressions and is simply the bin precision changed from 2875 " log(2) to log(10). 2876 003040 aa 5 00001 2361 00 2877 ldq work|source_precision 003041 aa 777777 3760 07 2878 anq =o777777,dl " mask out scale 003042 0a 010750 4020 00 2879 mpy =.3012056b-1 003043 aa 000000 1160 07 2880 cmpq 0,dl 003044 0a 003046 6000 00 2881 tze to_char.precision.ceil " ceiling 003045 aa 000001 0750 07 2882 ada 1,dl " round up 2883 003046 2884 to_char.precision.ceil: 003046 aa 5 00000 7551 00 2885 sta work|target_precision " store in DL 2886 2887 " Put output into work|char_flt_dec_gen. Set target type to float decimal. 2888 003047 aa 5 00110 3515 00 2889 epp target,work|char_flt_dec_gen " past guard band 003050 aa 000246 2260 03 2890 ldx6 flt_dec_type,du " presume float 003051 0a 000120 2210 17 2891 ldx1 source_type_map,x7 " determine if float or fix 003052 aa 010000 3010 03 2892 canx1 fix,du 003053 0a 003071 6000 00 2893 tze to_char.float_type 003054 aa 000022 2260 03 2894 ldx6 fix_dec_type,du " fixed target 003055 aa 5 00000 0541 00 2895 aos work|target_precision " get additional precision 003056 aa 5 00001 2361 00 2896 ldq work|source_scale " find scale digits 003057 0a 003061 6050 00 2897 tpl to_char.pos_scale " don't keep neg scale 003060 aa 000000 2360 07 2898 ldq 0,dl 003061 2899 to_char.pos_scale: 003061 aa 000022 7320 00 2900 qrs 18 003062 0a 003071 6000 00 2901 tze to_char.float_type 003063 0a 010751 4020 00 2902 mpy =.301205b-1 " form scale conversion 003064 aa 000000 1160 07 2903 cmpq 0,dl " round up 003065 0a 003067 6000 00 2904 tze to_char.scale.ceiling 003066 aa 000001 0750 07 2905 ada 1,dl 003067 2906 to_char.scale.ceiling: 003067 aa 000022 7350 00 2907 als 18 003070 aa 5 00000 0551 00 2908 asa work|target_scale " integrate with precision 2909 003071 2910 to_char.float_type: 003071 aa 000000 6730 14 2911 tsp7 0,x4 " Convert real part 003072 aa 004000 6340 07 2912 ldi mask_faults,dl " re-enable overflow detect 2913 " Determine if source is complex. If so convert complex part too. 2914 003073 0a 000120 2210 17 2915 ldx1 source_type_map,x7 003074 aa 200000 3010 03 2916 canx1 complex,du 003075 0a 003101 6000 00 2917 tze to_char.simple_source 003076 0a 000120 7240 17 2918 lxl4 source_type_map,x7 003077 aa 000000 6730 14 2919 tsp7 0,x4 003100 aa 004000 6340 07 2920 ldi mask_faults,dl " re-enable overflow detect 2921 2922 " Restore target info for character, and CASE to data type of source 2923 " to get correct conversion. 2924 003101 2925 to_char.simple_source: 003101 aa 5 00110 3535 00 2926 epp source,work|char_flt_dec_gen " take flt/fix dec from temp 003102 0a 000120 2210 17 2927 ldx1 source_type_map,x7 " determine source GENERIC 003103 aa 000077 3610 03 2928 anx1 generic_mask,du 003104 0a 003105 7100 31 2929 tra to_char.formatter,x1* 2930 003105 2931 to_char.formatter: 003105 0a 006273 0000 00 2932 arg error_bad_type 003106 0a 003114 0000 00 2933 arg format_fix 003107 0a 003136 0000 00 2934 arg format_flt_bin 003110 0a 003121 0000 00 2935 arg format_flt_dec 003111 0a 003114 0000 00 2936 arg format_fix 003112 0a 006273 0000 00 2937 arg error_bad_type " bits grabbed earlier 003113 0a 006273 0000 00 2938 arg error_bad_type " characters grabbed earlier 2939 " Conversion Routines - Formated fixed bin output. 2940 2941 2942 " Format fixed. 2943 003114 2944 format_fix: 003114 0a 003202 3700 00 2945 epp4 format_integer " presume an integer 003115 aa 5 00001 2211 00 2946 ldx1 work|source_scale 003116 0a 003137 6044 00 2947 tmoz to_char.call_format " format as integer 003117 0a 003232 3700 00 2948 epp4 format_fixed 003120 0a 003137 7100 00 2949 tra to_char.call_format " format as fractional 2950 2951 2952 " Format float decimal. 2953 " 2954 " This requires that we determine if the original source was fixed or 2955 " float decimal to determine scale information. 2956 003121 2957 format_flt_dec: 003121 0a 000120 2210 17 2958 ldx1 source_type_map,x7 003122 aa 010000 3010 03 2959 canx1 fix,du " was source fixed decimal 003123 0a 003136 6000 00 2960 tze format_flt_bin " no - format float 2961 003124 0a 003202 3700 00 2962 epp4 format_integer 003125 aa 5 00001 2241 00 2963 ldx4 work|source_scale " if no scale, format integer 003126 0a 003137 6000 00 2964 tze to_char.call_format 2965 2966 " Format as scaled fixed decimal. 2967 003127 0a 003310 3700 00 2968 epp4 format_scaled " use F format 003130 0a 003137 6040 00 2969 tmi to_char.call_format " scale below precision 2970 003131 aa 5 00001 7241 00 2971 lxl4 work|source_precision " is scale beyond precision 003132 aa 5 00001 1041 00 2972 cmpx4 work|source_scale 003133 0a 003137 6040 00 2973 tmi to_char.call_format 003134 0a 003232 3700 00 2974 epp4 format_fixed " simple format 003135 0a 003137 7100 00 2975 tra to_char.call_format 2976 2977 2978 " Format float binary. 2979 003136 2980 format_flt_bin: 003136 0a 003360 3700 00 2981 epp4 format_float 2982 2983 " Call formatter for real and possibly imaginary parts. 2984 003137 2985 to_char.call_format: 003137 aa 5 00050 3521 00 2986 epp generic,work|char_generic " pointer to target w/guard 003140 aa 000000 6240 00 2987 eax4 0 " flag for real part 003141 aa 5 00000 7231 00 2988 lxl3 work|target_precision " form target precision 003142 aa 4 00000 6731 00 2989 tsp7 pr4|0 " call formatter 2990 2991 " X2 contains the number of characters output, X3 contains p+2, source 2992 " pointer is updated. 2993 003143 0a 000120 2210 17 2994 ldx1 source_type_map,x7 " do imaginary if complex 003144 aa 200000 3010 03 2995 canx1 complex,du 003145 0a 003176 6000 00 2996 tze to_char.copy_to_target " only real part 2997 003146 aa 2 00000 5005 12 2998 a9bd generic|0,x2 " point to imaginary part 003147 aa 5 00046 7421 00 2999 stx2 work|save_target_precision " save length output 003150 aa 000001 6240 00 3000 eax4 1 " flag for imaginary part 003151 aa 5 00000 7231 00 3001 lxl3 work|target_precision " form target precision 003152 aa 4 00000 6731 00 3002 tsp7 pr4|0 " format 3003 " Squeeze blanks from imaginary part and add trailing "i". 3004 003153 aa 0 00003 1255 40 3005 scmr (pr,rl),(du) 003154 aa 200000 000012 3006 desc9a generic|0,x2 003155 aa 040000 000000 3007 vfd 9/blank 003156 aa 5 00004 0001 00 3008 arg work|fix_bin_generic 003157 aa 000000 6350 12 3009 eaa 0,x2 " length of field 003160 aa 000022 7310 00 3010 ars 18 003161 aa 5 00004 1751 00 3011 sba work|fix_bin_generic " form number of leading 0's 003162 aa 5 00004 2361 00 3012 ldq work|fix_bin_generic " number of non-blank chars 003163 aa 000001 6240 06 3013 eax4 1,ql " space for "i" 003164 aa 1 51140 1005 45 3014 mlr (pr,rl,al),(pr,rl),fill(letter_i) 003165 aa 200000 000006 3015 desc9a generic|0,ql 003166 aa 200000 000014 3016 desc9a generic|0,x4 003167 aa 000000 1150 07 3017 cmpa 0,dl " need to fill spaces at end? 003170 0a 003174 6000 00 3018 tze to_char.no_fill " and skip if none 003171 aa 040154 1004 00 3019 mlr (),(pr,rl,x4),fill(blank) " put spaces right of field 003172 aa 000000 000000 3020 zero 003173 aa 200000 000005 3021 desc9a generic|0,al 3022 003174 3023 to_char.no_fill: 003174 aa 000001 0620 03 3024 adx2 1,du " allow for i at end 003175 aa 5 00046 0621 00 3025 adx2 work|save_target_precision " form total length of string 3026 3027 " assign char temporary to final target 3028 003176 3029 to_char.copy_to_target: 003176 0a 003502 7010 00 3030 tsx1 restore_target " restore target info 3031 003177 aa 5 00050 3521 00 3032 epp generic,work|char_generic " get ptr to characters 003200 aa 000000 6230 12 3033 eax3 0,x2 " get source length in al 003201 0a 005175 7100 00 3034 tra generic_to_target " and go move 3035 " Conversion Routines - Format decimal integer. 3036 3037 3038 " entered with p in x3, x4 = 0(1) for real(imag) part, 3039 " generic = ptr to output buffer, pr4 = ptr to ourselves, 3040 " and pr7 = return loc 3041 3042 " returns with p+1 in x3 and x2 = number of chars output (p+3), source 3043 " pointing after used portion. 3044 003202 3045 format_integer: 003202 aa 000001 6230 13 3046 eax3 1,x3 003203 aa 000002 6220 13 3047 eax2 2,x3 " length of output = p + 3 003204 aa 0 00000 3035 40 3048 cmpn (pr,rl),() " is field 0 003205 aa 300000 010013 3049 desc9ls source|0,x3 003206 0a 003231 010002 3050 desc9ls char_zero,2 003207 0a 003216 6000 00 3051 tze format_integer.zero 003210 aa 1 40020 0245 40 3052 mvne (pr,rl),(id),(pr,rl) " no, do editing 003211 aa 300000 010013 3053 desc9ls source|0,x3 003212 0a 003223 0000 14 3054 arg int_edit_desc,x4 003213 aa 200000 000012 3055 desc9a generic|0,x2 003214 aa 3 00000 5005 13 3056 a9bd source|0,x3 " update source used 003215 aa 7 00000 7101 00 3057 tra pr7|0 3058 003216 3059 format_integer.zero: 003216 aa 040140 1014 20 3060 mrl (id),(pr,rl),fill(blank) " zero field (edit would IPR) 003217 0a 003227 0000 14 3061 arg zero_field,x4 003220 aa 200000 000012 3062 desc9a generic|0,x2 003221 aa 3 00000 5005 13 3063 a9bd source|0,x3 " update source used 003222 aa 7 00000 7101 00 3064 tra pr7|0 3065 003223 3066 int_edit_desc: 003223 0a 003225 000007 3067 desc9a int_edit,7 real 003224 0a 003225 400005 3068 desc9a int_edit(2),5 imag 3069 003225 aa 403040 022140 3070 int_edit: vfd 9/lte+3,9/blank,9/insm+2,9/mfls,9/mfls,9/mfls,9/mfls 003226 aa 140140 140000 3071 003227 3072 zero_field: 003227 0a 003231 200001 3073 desc9a char_zero(1),1 real 003230 0a 003231 000002 3074 desc9a char_zero,2 imag 3075 3076 " Character zero forms. 3077 003231 3078 char_zero: 003231 aa 053 060 055 060 3079 aci "+0-0" 3080 " Conversion Routines - Format Fixed scaled 0 < scale <= precision. 3081 3082 3083 " entered with p in x3, x4 = 0(1) for real(imag) part, 3084 " generic = ptr to output buffer, pr4 = ptr to ourselves, 3085 " and pr7 = return loc 3086 3087 " returns with p+1 in x3 and x2 = number of chars output (p+3), source 3088 " points after used part. 3089 003232 3090 format_fixed: 003232 aa 000001 6230 13 3091 eax3 1,x3 " form p+1 003233 aa 5 00000 1631 00 3092 sbx3 work|target_scale " get p-q+1 003234 aa 000001 6220 13 3093 eax2 1,x3 " first part of field 003235 aa 000002 1030 03 3094 cmpx3 2,du " need at least 2 digits 003236 0a 003274 6040 00 3095 tmi format_fixed.no_lead_digits " no, special action needed 003237 aa 0 00000 3035 40 3096 cmpn (pr,rl),() " are first p-q digits zero? 003240 aa 300000 010013 3097 desc9ls source|0,x3 003241 0a 003231 010002 3098 desc9ls char_zero,2 003242 0a 003260 6000 00 3099 tze format_fixed.zero 003243 aa 1 40020 0245 40 3100 mvne (pr,rl),(id),(pr,rl) " non-zero, form Sdddd 003244 aa 300000 010013 3101 desc9ls source|0,x3 003245 0a 003301 0000 14 3102 arg fixed_edit_desc,x4 003246 aa 200000 000012 3103 desc9a generic|0,x2 3104 3105 " Format right hand side after decimal point. 3106 003247 3107 format_fixed.right: 003247 aa 5 00000 2361 00 3108 ldq work|target_scale " q+1 digits of form .ddddd 003250 aa 000001 6350 02 3109 eaa 1,qu 003251 aa 0 56152 1015 53 3110 mrl (pr,rl,x3),(pr,rl,x2),fill(period) 003252 aa 300000 000002 3111 desc9a source|0,qu 003253 aa 200000 000001 3112 desc9a generic|0,au 003254 aa 5 00000 0631 00 3113 adx3 work|target_scale " get back p+1 003255 aa 000002 6220 13 3114 eax2 2,x3 " total size of field 003256 aa 3 00000 5005 13 3115 a9bd source|0,x3 " update source pointer 003257 aa 7 00000 7101 00 3116 tra pr7|0 3117 3118 " Format integer part as zero. 3119 003260 3120 format_fixed.zero: 003260 aa 0 53000 1065 00 3121 cmpc (pr),(),fill(plus_sign) 003261 aa 300000 000001 3122 desc9a source|0,1 003262 aa 000000 000000 3123 zero 003263 0a 003270 6000 00 3124 tze format_fixed.zero_pos " skip if number positive 003264 aa 040140 1014 00 3125 mrl (),(pr,rl),fill(blank) " move in -0 003265 0a 003231 400002 3126 desc9a char_zero(2),2 003266 aa 200000 000012 3127 desc9a generic|0,x2 003267 0a 003247 7100 00 3128 tra format_fixed.right " format fractional part 3129 003270 3130 format_fixed.zero_pos: 003270 aa 040140 1014 20 3131 mrl (id),(pr,rl),fill(blank) " zero, edit would IPR 003271 0a 003227 0000 14 3132 arg zero_field,4 003272 aa 200000 000012 3133 desc9a generic|0,x2 003273 0a 003247 7100 00 3134 tra format_fixed.right " format fractional part 3135 003274 3136 format_fixed.no_lead_digits: 003274 aa 1 00020 0245 00 3137 mvne (pr),(id),(pr) " put s0 at start of field 003275 aa 300000 010002 3138 desc9ls source|0,2 003276 0a 003305 0000 14 3139 arg no_leading_edit_desc,x4 003277 aa 200000 000002 3140 desc9a generic|0,2 003300 0a 003247 7100 00 3141 tra format_fixed.right " format fractional part 3142 003301 3143 fixed_edit_desc: 003301 0a 003303 000007 3144 desc9a fixed_edit,7 003302 0a 003303 400005 3145 desc9a fixed_edit(2),5 3146 003303 3147 fixed_edit: 003303 aa 403040 021140 3148 vfd 9/lte+3,9/blank,9/insm+1,9/mfls,9/mfls,9/mfls,9/mfls 003304 aa 140140 140000 3149 003305 3150 no_leading_edit_desc: 003305 0a 003307 000004 3151 desc9a no_leading_edit,4 003306 0a 003307 400002 3152 desc9a no_leading_edit(2),2 3153 003307 3154 no_leading_edit: 003307 aa 403040 040210 3155 vfd 9/lte+3,9/blank,9/enf,9/insb+8 3156 " Conversion Routines - Format fixed scaled scale < 0 | precision < scale 3157 3158 " Call: x4 = 0 (1) for real (imag) part 3159 " generic = ptr to output buffer 3160 " pr4 = ptr to ourselves 3161 " tsp7 pr4|0 3162 " x2 = number of chars output (p+4, p+5 or p+6) 3163 " x3 = p 3164 3165 " Destroys: a, q, x1 3166 " Updates: source to point after used part. 3167 3168 003310 3169 format_scaled: 003310 aa 000001 6230 13 3170 eax3 1,x3 " account for sign 003311 aa 0 00000 3035 40 3171 cmpn (pr,rl),() " Is number zero? 003312 aa 300000 010013 3172 desc9ls source|0,x3 003313 0a 003231 010002 3173 desc9ls char_zero,2 003314 0a 003321 6010 00 3174 tnz format_scaled.nonzero " No: edit number with mvne 003315 aa 040140 1014 20 3175 mrl (id),(pr,rl),fill(blank) " Yes: mvne would IPR 003316 0a 003227 0000 14 3176 arg zero_field,x4 003317 aa 200000 000013 3177 desc9a generic|0,x3 003320 0a 003325 7100 00 3178 tra format_scaled.scale_factor 3179 3180 " Non-zero number. 3181 003321 3182 format_scaled.nonzero: 003321 aa 1 40020 0245 40 3183 mvne (pr,rl),(id),(pr,rl) " convert pic "(p)-9vf(-q)" 003322 aa 300000 010013 3184 desc9ls source|0,x3 003323 0a 003354 0000 14 3185 arg format_scaled.edit_desc,x4 003324 aa 200000 000013 3186 desc9a generic|0,x3 3187 3188 " Format scale factor for number. 3189 003325 3190 format_scaled.scale_factor: " convert the scale factor 003325 aa 146113 1004 00 3191 mlr (),(pr,x3),fill(letter_f) " tack on "f" 003326 aa 000000 000000 3192 zero 003327 aa 200000 000001 3193 desc9a generic|0,1 003330 aa 5 00001 2351 00 3194 lda work|source_scale " au = scale_factor 003331 aa 000022 7310 00 3195 ars 18 " a = scale_factor 003332 aa 000002 6220 00 3196 eax2 1+1 " assume 1 digit scale factor 003333 aa 000012 4050 07 3197 cmg 10,dl " Is one digit enough? 003334 0a 003341 6040 00 3198 tmi format_scaled.have_length " Yes: format it 003335 aa 000003 6220 00 3199 eax2 2+1 " No: assume 2 digit factor 003336 aa 000144 4050 07 3200 cmg 100,dl " Are two digits enough? 003337 0a 003341 6040 00 3201 tmi format_scaled.have_length " Yes: format it 003340 aa 000004 6220 00 3202 eax2 3+1 " No: three digit factor 3203 003341 3204 format_scaled.have_length: " x2 = digits in factor + 1 003341 aa 000000 5310 00 3205 neg " a = -scale_factor 003342 aa 5 00004 7551 00 3206 sta work|fix_bin_generic " work|b = -scale_factor 003343 aa 0 00153 3015 00 3207 btd (pr),(pr,rl,x3) " convert -scale_factor 003344 aa 500004 000004 3208 desc9a work|fix_bin_generic,4 003345 aa 200000 210012 3209 desc9ls generic|0(1),x2 003346 aa 000002 6350 12 3210 eaa 2,x2 003347 aa 000022 7310 00 3211 ars 18 003350 aa 5 00001 0751 00 3212 ada work|source_precision " A = p+digits_in_factor+1+2 003351 aa 000000 6220 05 3213 eax2 0,al " into X2 003352 aa 3 00000 5005 13 3214 a9bd source|0,x3 " update source pointer 003353 aa 7 00000 7101 00 3215 tra pr7|0 3216 003354 3217 format_scaled.edit_desc: 003354 0a 003356 000006 3218 desc9a format_scaled.edit,6 003355 0a 003356 400004 3219 desc9a format_scaled.edit(2),4 3220 003356 3221 format_scaled.edit: 003356 aa 403040 140140 3222 vfd 9/lte+3,9/blank,9/mfls,9/mfls,9/mfls,9/mfls 003357 aa 140140 000000 3223 " Conversion Routines - Format Decimal float. 3224 3225 " entered with: 3226 " source|0 -> float decimal generic 3227 " x3 has precision of mantissa 3228 " x4 has 0/1 for real/imag 3229 " generic -> output buffer 3230 " pr4 -> formatting routine 3231 " pr7 -> return loc 3232 3233 " returns with x2 = number of chars output (p+7), updates source to point 3234 " after used part. 3235 003360 3236 format_float: 003360 aa 0 00000 1645 40 3237 tct (pr,rl) " count leading zeros 003361 aa 300001 200013 3238 desc9a source|1(1),x3 " miss sign and exponent 003362 0a 005142 000000 3239 desc9a zero_skip 003363 aa 5 00004 0001 00 3240 arg work|fix_bin_generic 003364 0a 003446 6064 00 3241 ttn zero_float " all digits are "0" 3242 003365 aa 5 00004 7221 00 3243 lxl2 work|fix_bin_generic " get number of leading zeros 003366 aa 000000 6350 12 3244 eaa 0,x2 003367 aa 000022 7310 00 3245 ars 18 003370 aa 000000 5310 00 3246 neg 003371 aa 5 00000 0751 00 3247 ada work|target_precision " form # of non-zero digits 003372 aa 777777 3750 07 3248 ana =o777777,dl 003373 aa 0 00100 1005 00 3249 mlr (pr),(pr) " copy sign into temp 003374 aa 300001 000001 3250 desc9a source|1,1 003375 aa 500014 000001 3251 desc9a work|fix_dec_generic,1 003376 aa 0 60140 1005 52 3252 mlr (pr,rl,x2),(pr,rl),fill(digit_0) " copy sans leading zeros 003377 aa 300001 200005 3253 desc9a source|1(1),al 003400 aa 500014 200013 3254 desc9a work|fix_dec_generic(1),x3 003401 aa 000001 1750 07 3255 sba 1,dl " form output exponent 003402 aa 3 00000 0751 00 3256 ada source|0 " include generic exponent 003403 aa 5 00004 7551 00 3257 sta work|fix_bin_generic " save to stop overwrite 003404 aa 000001 0630 03 3258 adx3 1,du " get p+1 003405 aa 000001 6220 13 3259 eax2 1,3 " get p+2 003406 aa 1 40020 0245 40 3260 mvne (pr,rl),(id),(pr,rl) " generate Sd.dddddddd 003407 aa 500014 010013 3261 desc9ls work|fix_dec_generic,x3 003410 0a 003467 0000 14 3262 arg float_edit_desc,4 003411 aa 200000 000012 3263 desc9a generic|0,x2 003412 aa 145112 1004 00 3264 mlr (),(pr,x2),fill(letter_e) " move in "e" 003413 aa 000000 000000 3265 zero 003414 aa 200000 000001 3266 desc9a generic|0,1 003415 aa 0 00112 3015 00 3267 btd (pr),(pr,x2) " convert exponent 003416 aa 500004 000004 3268 desc9a work|fix_bin_generic,4 003417 aa 200000 210013 3269 desc9ls generic|0(1),11 003420 aa 000002 0620 03 3270 adx2 2,du " add length of "e+" 003421 aa 0 00000 1645 12 3271 tct (pr,x2) " count most leading zeros 003422 aa 200000 000007 3272 desc9a generic|0,7 003423 0a 005142 000000 3273 desc9a zero_skip 003424 aa 5 00004 0001 00 3274 arg work|fix_bin_generic 003425 aa 000000 6360 12 3275 eaq 0,x2 " get index 003426 aa 000022 7320 00 3276 qrs 18 003427 aa 5 00004 0761 00 3277 adq work|fix_bin_generic " add offset 003430 aa 777777 3760 07 3278 anq =o777777,dl " mask for index 003431 aa 5 00004 2351 00 3279 lda work|fix_bin_generic " get length 003432 aa 777777 3750 07 3280 ana =o777777,dl 003433 aa 000000 5310 00 3281 neg 003434 aa 000012 6240 05 3282 eax4 10,al " length of move 003435 aa 0 00152 1015 46 3283 mrl (pr,ql,rl),(pr,x2,rl) 003436 aa 200000 000014 3284 desc9a generic|0,x4 003437 aa 200000 000014 3285 desc9a generic|0,x4 003440 aa 5 00004 7441 00 3286 stx4 work|fix_bin_generic " store exponent length 003441 aa 5 00004 0621 00 3287 adx2 work|fix_bin_generic " add length of digits 003442 aa 000003 0630 03 3288 adx3 3,du " round up 003443 aa 3 00000 5005 13 3289 a9bd source|0,x3 " update source pointer 003444 aa 000001 0530 03 3290 adwp source,1,du " align to word 003445 aa 7 00000 7101 00 3291 tra pr7|0 Zero floating point value. 3292 003446 3293 zero_float: 003446 aa 000002 0630 03 3294 adx3 2,du " get p + 2 003447 aa 060140 1004 20 3295 mlr (id),(pr,rl),fill(digit_0) " form b0.00000 or +0.0000 003450 0a 003462 0000 14 3296 arg zero_fl_desc,x4 003451 aa 200000 000013 3297 desc9a generic|0,x3 003452 aa 060113 1004 00 3298 mlr (),(pr,x3),fill(digit_0) " tack on e+000 003453 0a 003466 000002 3299 desc9a eplus,2 003454 aa 200000 000005 3300 desc9a generic|0,5 003455 aa 000005 6220 13 3301 eax2 5,x3 " get length of field 003456 aa 000002 0630 03 3302 adx3 2,du " sign+mantissa+3 to round 003457 aa 3 00000 5005 13 3303 a9bd source|0,x3 " update source pointer 003460 aa 000001 0530 03 3304 adwp source,1,du " align to word 003461 aa 7 00000 7101 00 3305 tra pr7|0 3306 3307 3308 " Constants and formatting descriptors 3309 003462 3310 zero_fl_desc: 003462 0a 003464 000003 3311 desc9a real_zero_fl,3 003463 0a 003465 000003 3312 desc9a imag_zero_fl,3 3313 003464 3314 real_zero_fl: 003464 aa 040 060 056 000 3315 aci " 0." 003465 3316 imag_zero_fl: 003465 aa 053 060 056 000 3317 aci "+0." 003466 aa 145 053 000 000 3318 eplus: aci "e+" 3319 003467 3320 float_edit_desc: 003467 0a 003471 000010 3321 desc9a float_edit,8 real 003470 0a 003471 400006 3322 desc9a float_edit(2),6 imag 3323 003471 3324 float_edit: 003471 aa 403040 141207 3325 vfd 9/lte+3,9/blank,9/mfls+1,9/insb+7,9/mvc,9/mvc,9/mvc,9/mvc 003472 aa 320320 320320 3326 3327 3328 3329 " Save target information and return pointer. 3330 003473 3331 save_target: 003473 aa 5 00000 2351 00 3332 lda work|target_precision " combined prec(DL), scale(DU) 003474 aa 5 00046 7551 00 3333 sta work|save_target_precision 003475 aa 5 00036 2515 00 3334 spri1 work|save_target_ptr 003476 aa 5 00034 6535 00 3335 spri7 work|return 003477 aa 5 00042 6501 00 3336 spri4 work|save_pr4 003500 aa 5 00151 7461 00 3337 stx6 work|save_target_type 003501 aa 000000 7100 11 3338 tra 0,1 3339 3340 3341 " Restore target information and return pointer. 3342 003502 3343 restore_target: 003502 aa 5 00046 2351 00 3344 lda work|save_target_precision 003503 aa 5 00000 7551 00 3345 sta work|target_precision 003504 aa 5 00036 3515 20 3346 epp1 work|save_target_ptr,* 003505 aa 5 00034 3735 20 3347 epp7 work|return,* 003506 aa 5 00042 3701 20 3348 epp4 work|save_pr4,* 003507 aa 5 00151 2261 00 3349 ldx6 work|save_target_type 003510 aa 000000 7100 11 3350 tra 0,1 Conversion Routines - Character to Arithmetic. 3351 3352 " On entry original_source is zero'd, to indicate no stack extension. 3353 3354 " We receive the input string in the character temporary and translate it 3355 " as we go as necessary. One initial translate test is done to permit the 3356 " use of short translate/test tables. It finds the first illegal char. 3357 " For this translation and the CASE tests, the code is: 3358 " 3359 " 0 (illegal_class) - illegal character 3360 " 1 (sign_class) - plus or minus sign 3361 " 2 (period_class) - period (as for decimal point) 3362 " 3 (b_class) - b or B, used to indicate binary 3363 " 4 (de_class) - d,D e,E, used to indicate exponential format 3364 " 5 (i_class) - i or I, used to indicate end of Imaginary part 3365 " 6 (blank_class) - Whitespace 3366 " 7 (digit_class) - 0 thru 9, numeric digit 3367 " 8 (f_class) - f or F, used to indicated fixed format 3368 3369 " Recognize is used to build a token list for a numeric part, and to 3370 " recognize the numeric type provided. It is first called to parse the 3371 " real part, and then the imaginary part of the input number. If in 3372 " scanning the real part, it finds a termination of I or i, we have 3373 " found the imaginary part instead, and move it to the imaginary token 3374 " list and clear the real token list. 3375 3376 " The token list is initialized to zero, which will setup exponent, type, 3377 " index and length. This is used with fill in later moves to setup the 3378 " float decimal source number. 3379 3380 " After recognize has been run on the translated token source, we determine 3381 " the dominant numeric type for output, and the dominant scale and 3382 " precision of the real and imaginary parts. 3383 " 3384 " Dominant scale is: max (scale_real, scale_imaginary) 3385 " The scale is determined by the length of the fractional parts. 3386 " 3387 " Dominant precision is: max (integer_real, integer_imaginary)+1 + 3388 " dominant scale. 3389 " 3390 " After determining dominant scale and precision and type, we copy 3391 " information according to the token list into the character temporary 3392 " from the source string. The sign is moved with a "+" fill, thus it 3393 " defaults to +. The integer part is moved right to left with 0 fill, 3394 " the fractional part left to right with 0 fill. The exponent has already 3395 " been parsed and determined. We correct it by subtracting the dominant 3396 " scale to produce a true float decimal GENERIC form for the input real 3397 " and imaginary parts. 3398 " 3399 " When this numeric input has been built, we simply enter any_to_any_ 3400 " to do conversion to the target. 3401 " 3402 " There are four basic types of data. 3403 000001 3404 equ fixbin,1 " fixed binary 000002 3405 equ fltbin,2 " float binary 000003 3406 equ fixdec,3 " fixed decimal 000004 3407 equ fltdec,4 " float decimal 3408 3409 " These are later converted to the true internal data type*2 by a 3410 " conversion table. Float decimal will normally use real_flt_dec_9bit, but 3411 " if the range does not fit, then we escape to real_flt_dec_ext for a 9-bit 3412 " exponent. 3413 " Converision Routines - Character to numeric 3414 3415 " Uses PR4 to point to token area in current use. 3416 003511 3417 char_to_arithmetic: 003511 aa 5 00002 4501 00 3418 stz work|original_source " clear extension flag 003512 aa 5 00047 7451 00 3419 stx5 work|save_rounding " save rounding requested 003513 aa 5 00001 2351 00 3420 lda work|source_string_length " get length of source 003514 aa 777777 3750 07 3421 ana =o777777,dl 003515 0a 003771 6000 00 3422 tze char.arith.zero 003516 aa 000400 1150 07 3423 cmpa 256,dl " check length 003517 0a 006100 6054 00 3424 tpnz error_205 " input string too long 003520 0a 003526 7100 00 3425 tra char.arith.save_len 3426 3427 " Restart point to pick up string from "conversion" error recover routine. 3428 " Here we may have a different length than before. 3429 003521 3430 char_to_arithmetic_restart: 003521 aa 5 00001 2351 00 3431 lda work|source_string_length " get length of source 003522 0a 003771 6000 00 3432 tze char.arith.zero 003523 aa 000400 1150 07 3433 cmpa 256,dl " deal with max of 256 chars 003524 0a 003526 6040 00 3434 tmi char.arith.save_len 003525 aa 000400 2350 07 3435 lda 256,dl " force length, no error 3436 3437 " Save length of string supplied. Length in A. 3438 003526 3439 char.arith.save_len: 003526 aa 5 00150 7551 00 3440 sta work|original_source_length " save for conversion error 3441 3442 " NOTE - Here it should be spri generic,work|generic_ptr, but ALM won't do it. 003527 aa 5 00040 2521 00 3443 spri2 work|generic_ptr " save string pointer 3444 003530 aa 0 00000 1645 40 3445 tct (pr,rl) " find illegal or end 003531 aa 200000 000005 3446 desc9a generic|0,al 003532 0a 004656 0000 00 3447 arg error_table 003533 aa 5 00006 0001 00 3448 arg work|flt_bin_generic 003534 0a 003540 6064 00 3449 ttn char.arith.good_string 3450 3451 " Bad character seen. Find index of it. 3452 003535 aa 5 00006 2361 00 3453 ldq work|flt_bin_generic " get index 003536 aa 777777 3760 07 3454 anq =o777777,dl 003537 0a 006074 7100 00 3455 tra error_203 " illegal character 3456 003540 3457 char.arith.good_string: 003540 aa 0 00000 1655 40 3458 tctr (pr,rl) " rtrim (string) 003541 aa 200000 000005 3459 desc9a generic|0,al 003542 0a 005114 0000 00 3460 arg blank_skip 003543 aa 5 00004 0001 00 3461 arg work|fix_bin_generic 003544 aa 5 00004 3351 00 3462 lca work|fix_bin_generic " - blanks 003545 aa 000011 7750 00 3463 alr 9 " sign extend 003546 aa 000011 7310 00 3464 ars 9 003547 aa 5 00150 0751 00 3465 ada work|original_source_length " length - blanks 003550 0a 003771 6000 00 3466 tze char.arith.zero " all blank 3467 3468 " Start index at first non-whitespace. 3469 " Build token information into imaginary token. Will move it later. 3470 003551 aa 000100 1004 00 3471 mlr (),(pr),fill(000) " init real token 003552 aa 000000 000000 3472 zero 003553 aa 500152 000030 3473 desc9a work|real_token,token_length 003554 aa 000100 1004 00 3474 mlr (),(pr),fill(000) " init imag token 003555 aa 000000 000000 3475 zero 003556 aa 500160 000030 3476 desc9a work|imag_token,token_length 003557 aa 0 00000 1645 40 3477 tct (pr,rl) " skip over leading blanks 003560 aa 200000 000005 3478 desc9a generic|0,al 003561 0a 005114 0000 00 3479 arg blank_skip 003562 aa 5 00004 0001 00 3480 arg work|fix_bin_generic 003563 aa 5 00004 5511 40 3481 stba work|fix_bin_generic,40 " clear high byte blank count 003564 aa 5 00004 1751 00 3482 sba work|fix_bin_generic " account for blanks 003565 0a 003771 6044 00 3483 tmoz char.arith.zero " all blank - is 0.0 3484 3485 " Not all character input was blank. Start on real part. 3486 003566 aa 5 00004 2361 00 3487 ldq work|fix_bin_generic " initialize offset 003567 0a 004334 7020 00 3488 tsx2 recognize " look for a number 003570 aa 0 00100 1005 00 3489 mlr (pr),(pr) " move imag to real 003571 aa 500160 000030 3490 desc9a work|imag_token,token_length 003572 aa 500152 000030 3491 desc9a work|real_token,token_length 003573 aa 000000 1150 07 3492 cmpa 0,dl " did we reach end of input 003574 0a 003577 6054 00 3493 tpnz char.arith.more_input " continue 003575 aa 5 00164 4501 00 3494 stz work|imag.type " indicate no imaginary 003576 0a 003643 7100 00 3495 tra char.arith.end_of_input 3496 3497 " have some characters after the number, process as terminator. 3498 " Use X2 as error index for trailing blank check. 3499 003577 3500 char.arith.more_input: 003577 0a 006074 2220 03 3501 ldx2 error_203,du " indicate bad character 3502 003600 aa 5 00156 7241 00 3503 lxl4 work|real.term " get terminator class 003601 0a 003602 7100 14 3504 tra *+1,x4 " case process terminator 003602 0a 006074 7100 00 3505 tra error_203 " illegal 003603 0a 003621 7100 00 3506 tra char.arith.have_real_part " sign - imag follows 003604 0a 006074 7100 00 3507 tra error_203 " period 003605 0a 006074 7100 00 3508 tra error_203 " b 003606 0a 006074 7100 00 3509 tra error_203 " d e 003607 0a 003615 7100 00 3510 tra char.arith.got_imag_part " i - we saw imag part 003610 0a 003613 7100 00 3511 tra char.arith.blank_imag " blank 003611 0a 006074 7100 00 3512 tra error_203 " digit (can't happen) 003612 0a 006074 7100 00 3513 tra error_203 " f 3514 3515 3516 " Blank trailing real part. Clear imaginary part and check blanks. 3517 003613 3518 char.arith.blank_imag: 003613 aa 5 00164 4501 00 3519 stz work|imag.type " no imaginary type 003614 0a 003636 7100 00 3520 tra char.arith.check_blank 3521 3522 " We have just seen the imaginary part, and the real part is empty. 3523 " The imaginary token list entry is okay, clear the real token. 3524 003615 3525 char.arith.got_imag_part: 003615 aa 000100 1004 00 3526 mlr (),(pr),fill(000) " init real 003616 aa 000000 000000 3527 zero 003617 aa 500152 000030 3528 desc9a work|real_token,token_length 003620 0a 003627 7100 00 3529 tra char.arith.have_imag_part " we have imaginary 3530 3531 " Capture token info in imaginary part. 3532 003621 3533 char.arith.have_real_part: 003621 aa 000100 1004 00 3534 mlr (),(pr),fill(000) " init imag 003622 aa 000000 000000 3535 zero 003623 aa 500160 000030 3536 desc9a work|imag_token,token_length 3537 003624 0a 004334 7020 00 3538 tsx2 recognize " look for a number 003625 aa 000000 1150 07 3539 cmpa 0,dl " did we reach end of input 003626 0a 006122 6044 00 3540 tmoz error_219 " must have the "i" 3541 3542 " We have both parts of the number, real and imaginary. 3543 " Check if we terminate correctly. We must have blanks. 3544 003627 3545 char.arith.have_imag_part: 003627 aa 5 00164 7241 00 3546 lxl4 work|imag.term " check terminator 003630 aa 000005 1040 03 3547 cmpx4 i_class,du " must be "i" 003631 0a 006122 6010 00 3548 tnz error_219 003632 aa 000001 0760 07 3549 adq 1,dl " skip the blank 003633 aa 000001 1750 07 3550 sba 1,dl " one less to check 003634 0a 003643 6044 00 3551 tmoz char.arith.end_of_input 003635 0a 006112 2220 03 3552 ldx2 error_211,du " bad char after "i" 3553 003636 3554 char.arith.check_blank: 003636 aa 0 00000 1645 46 3555 tct (pr,rl,ql) " skip trailing blanks 003637 aa 200000 000005 3556 desc9a generic|0,al 003640 0a 005114 0000 00 3557 arg blank_skip 003641 aa 5 00004 0001 00 3558 arg work|fix_bin_generic 003642 aa 000000 6070 12 3559 ttf 0,x2 " complain 3560 3561 " From token list, form the generic input, using char.flt_dec_generic. 3562 003643 3563 char.arith.end_of_input: " Set dominant conversion type. 003643 aa 000000 6260 16 3564 eax6 0,x6 " target of opportunity 003644 0a 003730 6010 00 3565 tnz char.arith.supplied 3566 003645 aa 5 00156 2271 00 3567 ldx7 work|real.type 003646 aa 5 00164 2211 00 3568 ldx1 work|imag.type 003647 0a 003776 3520 37 3569 epp generic,dominant_type,x7* " select imaginary table 003650 aa 2 00000 2271 11 3570 ldx7 generic|0,x1 " get dominant type 003651 aa 2 00000 7221 11 3571 lxl2 generic|0,x1 " get precision routine 3572 3573 " If we alter the precision and scale, for a decimal to binary conversion. 3574 " The precision will appear in AL, and the scale in X5. We indicate the 3575 " modified scale/precision tokenlist word by X3 as an offset in the 3576 " work area. 3577 003652 aa 000000 2350 07 3578 lda 0,dl " preset precision 003653 aa 000000 2250 03 3579 ldx5 0,du " preset scale 003654 aa 000000 2230 03 3580 ldx3 0,du " preset token prec/scale mod 003655 aa 000000 7100 12 3581 tra 0,x2 " manage precision 3582 3583 " Transform the precision of the real part to binary from decimal. 3584 003656 3585 r_dec_to_xbin: " Convert real part decimal prec/scale to bin 003656 aa 000157 2230 03 3586 ldx3 real.scale,du 003657 0a 003665 7100 00 3587 tra dec_to_bin.scale 3588 003660 3589 r_dec_to_bin: " Convert real part decimal prec to bin 003660 aa 000157 2230 03 3590 ldx3 real.prec,du 003661 0a 003675 7100 00 3591 tra dec_to_bin.prec 3592 003662 3593 i_dec_to_bin: " Convert imaginary part decimal prec/scale to bin 003662 aa 000165 2230 03 3594 ldx3 imag.prec,du 003663 0a 003675 7100 00 3595 tra dec_to_bin.prec 3596 003664 3597 i_dec_to_xbin: " Convert imaginary part decimal prec to bin 003664 aa 000165 2230 03 3598 ldx3 imag.scale,du 3599 " tra dec_to_bin.scale " fall through to routine 3600 3601 " Convert the indicated scale to X5. 3602 003665 3603 dec_to_bin.scale: 003665 aa 5 00000 2361 13 3604 ldq work|0,x3 " scale = ceil (log2(10)*scale) 003666 aa 000022 7320 00 3605 qrs 18 " position 003667 0a 003675 6040 00 3606 tmi dec_to_bin.prec " negative scale set to 0 003670 0a 002401 4020 00 3607 mpy log2.10 " convert base 003671 aa 000003 7370 00 3608 lls 3 003672 aa 000000 1160 07 3609 cmpq 0,dl " ceiling 003673 0a 003675 6000 00 3610 tze dec_to_bin.prec 003674 aa 000001 0750 07 3611 ada 1,dl 3612 " tra dec_to_bin.prec " find dominant precision 3613 003675 3614 dec_to_bin.prec: 003675 aa 000001 2230 03 3615 ldx3 1,du 003676 aa 5 00000 2361 13 3616 ldq work|0,x3 " prec = ceil (log2(10)*prec) 003677 aa 777777 3760 07 3617 anq =o777777,dl " mask from DL 003700 0a 002401 4020 00 3618 mpy log2.10 " convert base 003701 aa 000003 7370 00 3619 lls 3 003702 aa 000000 1160 07 3620 cmpq 0,dl " ceiling 003703 0a 003706 6000 00 3621 tze char.arith.save_prec 003704 aa 000001 0750 07 3622 ada 1,dl 003705 0a 003706 7100 00 3623 tra char.arith.save_prec " find dominant precision 3624 3625 " Save updated precision and scale. 3626 003706 3627 char.arith.save_prec: 003706 aa 5 00000 7551 13 3628 sta work|0,x3 " save precision 003707 aa 5 00000 7451 13 3629 stx5 work|0,x3 " save scale 3630 3631 " Take precisions as is: From dominant, process precision and scale. 3632 003710 3633 as_is: 003710 aa 000000 6240 17 3634 eax4 0,x7 " save type 003711 0a 004111 7160 17 3635 xec calculate_precision,x7 " target_precision 003712 aa 5 00164 2251 00 3636 ldx5 work|imag.type " determine if complex 003713 0a 003715 6000 00 3637 tze char.arith.real_type 003714 aa 000004 6240 14 3638 eax4 4,x4 " change to complex 003715 3639 char.arith.real_type: " set type of source 003715 0a 004027 2260 14 3640 ldx6 final_type,x4 " presume short 003716 aa 5 00000 2251 00 3641 ldx5 work|target_precision 003717 0a 004116 7160 17 3642 xec calculate_type,x7 " compare to limit 003720 0a 003722 6044 00 3643 tmoz char.arith.set_round " within short 003721 0a 004027 7260 14 3644 lxl6 final_type,x4 " pick up long type 3645 003722 3646 char.arith.set_round: 003722 aa 5 00047 4501 00 3647 stz work|save_rounding " presume no round 003723 0a 000376 2210 17 3648 ldx1 target_type_map,x7 " get default 003724 aa 400000 3010 03 3649 canx1 round,du 003725 0a 003730 6000 00 3650 tze char.arith.supplied " no round 003726 aa 000001 2350 07 3651 lda 1,dl 003727 aa 5 00047 7551 00 3652 sta work|save_rounding " round 3653 3654 " Caller supplied target type and precision. Convert input. 3655 003730 3656 char.arith.supplied: 003730 aa 5 00040 3521 20 3657 epp generic,work|generic_ptr,* " get ptr to source 003731 0a 004123 7010 00 3658 tsx1 move_char_to_generic " move and set scale/prec, type 003732 aa 5 00047 2251 00 3659 ldx5 work|save_rounding 003733 0a 003745 3734 00 3660 epp7 char.arith.real_return " setup return 003734 aa 5 00157 7231 00 3661 lxl3 work|real.prec " setup float dec precision 003735 aa 000002 6230 13 3662 eax3 2,x3 " extend for sign and hard exp 003736 aa 5 00156 2221 00 3663 ldx2 work|real.type " get internal type 003737 0a 003740 7100 12 3664 tra *+1,x2 " process generic 003740 0a 002004 7100 00 3665 tra flt_dec_generic_conversion " presume 0.0 003741 0a 001326 7100 00 3666 tra fix_bin_generic_conversion 003742 0a 001600 7100 00 3667 tra flt_bin_generic_conversion 003743 0a 002004 7100 00 3668 tra flt_dec_generic_conversion 003744 0a 002004 7100 00 3669 tra flt_dec_generic_conversion 3670 003745 3671 char.arith.real_return: 003745 aa 004000 6340 07 3672 ldi mask_faults,dl " clear for faults again 003746 0a 000376 2210 16 3673 ldx1 target_type_map,x6 " get flag word for target 003747 aa 200000 3010 03 3674 canx1 complex,du " complex? 003750 0a 000056 6000 00 3675 tze unmask_exit " real target, return 3676 3677 " Convert imaginary part. 3678 003751 aa 0 00100 1005 00 3679 mlr (pr),(pr) " move imag to real 003752 aa 500160 000030 3680 desc9a work|imag_token,token_length 003753 aa 500152 000030 3681 desc9a work|real_token,token_length 3682 003754 aa 5 00040 3521 20 3683 epp generic,work|generic_ptr,* " get ptr to source 003755 0a 004123 7010 00 3684 tsx1 move_char_to_generic " move and set scale/prec 003756 aa 5 00047 2251 00 3685 ldx5 work|save_rounding 003757 0a 000056 3734 00 3686 epp7 unmask_exit " setup return 003760 aa 5 00157 7231 00 3687 lxl3 work|real.prec " setup float dec precision 003761 aa 000002 6230 13 3688 eax3 2,x3 " extend for sign and hard exp 003762 aa 5 00156 2221 00 3689 ldx2 work|real.type " get internal type 003763 0a 003764 7100 12 3690 tra *+1,x2 " process generic 003764 0a 002004 7100 00 3691 tra flt_dec_generic_conversion " +0 already set 003765 0a 001326 7100 00 3692 tra fix_bin_generic_conversion 003766 0a 001600 7100 00 3693 tra flt_bin_generic_conversion 003767 0a 002004 7100 00 3694 tra flt_dec_generic_conversion 003770 0a 002004 7100 00 3695 tra flt_dec_generic_conversion 3696 3697 3698 " Input of real and imaginary is zero. Use a default input. 3699 003771 3700 char.arith.zero: 003771 0a 003775 3520 00 3701 epp generic,char.arith.zero_char 003772 aa 000001 2350 07 3702 lda 1,dl " one character long 003773 aa 5 00001 7551 00 3703 sta work|source_string_length 003774 0a 003521 7100 00 3704 tra char_to_arithmetic_restart 3705 003775 3706 char.arith.zero_char: 003775 aa 060 000 000 000 3707 aci /0/,1 3708 " Tables for type conversion. 3709 3710 3711 " Dominant type table. Used to convert a real and imaginary type into 3712 " the dominant complex type. First table references the other four. 3713 " Here we have a 0 entry for a non-existant token type default of 0. 3714 3715 " The following matrix provides conversions and determines precision 3716 " conversion. 3717 " 3718 " REAL TYPE 3719 " 3720 " 0 type | error | fixbin | fltbin | fixdec | fltdec | 3721 " | | as is | as is | as is | as is | 3722 " ---------------------------------------------| 3723 " fixbin | fixbin | fixbin | fltbin | fixbin | fltbin | 3724 " | as is | as is | as is |dec->bin|dec->bin| 3725 " ---------------------------------------------| 3726 " fltbin | fltbin | fltbin | fltbin | fltbin | fltbin | 3727 " | as is | as is | as is |dec->bin|dec->bin| 3728 " ---------------------------------------------| 3729 " fixdec | fixdec | fixbin | fltbin | fixdec | fltdec | 3730 " | as is |dec->bin|dec->bin| as is | as is | 3731 " ---------------------------------------------| 3732 " fltdec | fltdec | fltbin | fltbin | fltdec | fltdec | 3733 " | as is |dec->bin|dec->bin| as is | as is | 3734 " ---------------------------------------------| 3735 " IMAG TYPE 0 type fixbin fltbin fixdec fltdec 3736 3737 003776 3738 dominant_type: 003776 0a 004015 0000 00 3739 arg fixdec_type " use default if real is 0 003777 0a 004003 0000 00 3740 arg fixbin_type 004000 0a 004010 0000 00 3741 arg fltbin_type 004001 0a 004015 0000 00 3742 arg fixdec_type 004002 0a 004022 0000 00 3743 arg fltdec_type 3744 3745 " Table element has DU type and DL conversion routine. This conversion 3746 " routine is used to convert precision and scale as necessary according 3747 " to the output type and the real and imaginary sources. as_is just 3748 " passes on the scale and precision. 3749 004003 3750 fixbin_type: 004003 a0 000001 003710 3751 vfd 18/fixbin,18/as_is " stay in type, use real part 004004 a0 000001 003710 3752 vfd 18/fixbin,18/as_is " stay in type, prec/scale 004005 a0 000002 003710 3753 vfd 18/fltbin,18/as_is " co-erce fixbin to fltbin 004006 a0 000001 003664 3754 vfd 18/fixbin,18/i_dec_to_xbin " co-erce fixdec to fixbin 004007 a0 000002 003662 3755 vfd 18/fltbin,18/i_dec_to_bin " co-erce fltdec to fltbin 3756 004010 3757 fltbin_type: 004010 a0 000002 003710 3758 vfd 18/fltbin,18/as_is " stay in type 004011 a0 000002 003710 3759 vfd 18/fltbin,18/as_is " co-erce fixbin to fltbin 004012 a0 000002 003710 3760 vfd 18/fltbin,18/as_is " stay in type 004013 a0 000002 003662 3761 vfd 18/fltbin,18/i_dec_to_bin " co-erce fixdec to fltbin 004014 a0 000002 003662 3762 vfd 18/fltbin,18/i_dec_to_bin " co-erce fltdec to fltbin 3763 004015 3764 fixdec_type: 004015 a0 000003 003710 3765 vfd 18/fixdec,18/as_is " stay in type 004016 a0 000001 003656 3766 vfd 18/fixbin,18/r_dec_to_xbin " co-erce fixdec to fixbin 004017 a0 000002 003660 3767 vfd 18/fltbin,18/r_dec_to_bin " co-erce fixdec to fltbin 004020 a0 000003 003710 3768 vfd 18/fixdec,18/as_is " stay in type 004021 a0 000004 003710 3769 vfd 18/fltdec,18/as_is " co-erce fixdec to fltdec 3770 004022 3771 fltdec_type: 004022 a0 000004 003710 3772 vfd 18/fltdec,18/as_is " stay in type 004023 a0 000002 003660 3773 vfd 18/fltbin,18/r_dec_to_bin " co-erce fixbin to fltbin 004024 a0 000002 003660 3774 vfd 18/fltbin,18/r_dec_to_bin " co-erce fltdec to fltbin 004025 a0 000004 003710 3775 vfd 18/fltdec,18/as_is " co-erce fixdec to fltdec 004026 a0 000004 003710 3776 vfd 18/fltdec,18/as_is " stay in type 3777 " Type table for conversion of internal to real data type. DU is 3778 " short form, DL is long form. 3779 000001 3780 equ real_fix_bin_1,1 000002 3781 equ real_fix_bin_2,2 000003 3782 equ real_flt_bin_1,3 000004 3783 equ real_flt_bin_2,4 000005 3784 equ cplx_fix_bin_1,5 000006 3785 equ cplx_fix_bin_2,6 000007 3786 equ cplx_flt_bin_1,7 000010 3787 equ cplx_flt_bin_2,8 000011 3788 equ real_fix_dec_9bit_ls,9 000012 3789 equ real_flt_dec_9bit,10 000013 3790 equ cplx_fix_dec_9bit_ls,11 000014 3791 equ cplx_flt_dec_9bit,12 3792 004027 3793 final_type: 004027 aa 000004 000004 3794 vfd 18/real_fix_bin_2*2,18/real_fix_bin_2*2 " default 0 type 004030 aa 000002 000004 3795 vfd 18/real_fix_bin_1*2,18/real_fix_bin_2*2 004031 aa 000006 000010 3796 vfd 18/real_flt_bin_1*2,18/real_flt_bin_2*2 004032 aa 000022 000022 3797 vfd 18/real_fix_dec_9bit_ls*2,18/real_fix_dec_9bit_ls*2 004033 aa 000024 000024 3798 vfd 18/real_flt_dec_9bit*2,18/real_flt_dec_9bit*2 004034 aa 000012 000014 3799 vfd 18/cplx_fix_bin_1*2,18/cplx_fix_bin_2*2 004035 aa 000016 000020 3800 vfd 18/cplx_flt_bin_1*2,18/cplx_flt_bin_2*2 004036 aa 000026 000026 3801 vfd 18/cplx_fix_dec_9bit_ls*2,18/cplx_fix_dec_9bit_ls*2 004037 aa 000030 000030 3802 vfd 18/cplx_flt_dec_9bit*2,18/cplx_flt_dec_9bit*2 3803 " Compute precision and scale of final result 3804 3805 " scale = max(real_scale,imag_scale) 3806 " precision = scale + max(real_prec-real_scale, imag_prec-imag_scale) 3807 " 3808 " Result left in source_scale and source_precision fields in work area. 3809 3810 004040 3811 fixed_prec_and_scale: 004040 aa 5 00164 2221 00 3812 ldx2 work|imag.type " take real if no imag 004041 0a 004065 6000 00 3813 tze fixed_prec_and_scale.real 3814 3815 " Calculate precisions. 3816 004042 aa 5 00157 7221 00 3817 lxl2 work|real.prec 004043 aa 5 00157 1621 00 3818 sbx2 work|real.scale " real prec-scale 004044 aa 5 00165 7231 00 3819 lxl3 work|imag.prec 004045 aa 5 00165 1631 00 3820 sbx3 work|imag.scale 004046 aa 5 00000 7431 00 3821 stx3 work|target_precision " imag prec-scale 004047 aa 5 00000 1021 00 3822 cmpx2 work|target_precision 004050 aa 000002 6050 04 3823 tpl 2,ic " real>imag 004051 aa 000000 6220 13 3824 eax2 0,x3 " take imaginary 004052 aa 000001 0620 03 3825 adx2 1,du 004053 aa 5 00157 2231 00 3826 ldx3 work|real.scale " calculate max scale 004054 aa 5 00165 1031 00 3827 cmpx3 work|imag.scale 004055 aa 000002 6050 04 3828 tpl 2,ic 004056 aa 5 00165 2231 00 3829 ldx3 work|imag.scale 004057 aa 5 00000 7431 00 3830 stx3 work|target_scale " set new scale (DU) 004060 aa 5 00000 0621 00 3831 adx2 work|target_scale " add max scale 004061 aa 5 00000 4421 00 3832 sxl2 work|target_precision " set new precision (DL) 004062 aa 000000 6054 11 3833 tpnz 0,x1 004063 aa 5 00000 0541 00 3834 aos work|target_precision " max (prec, 1) 004064 aa 000000 7100 11 3835 tra 0,x1 3836 004065 3837 fixed_prec_and_scale.real: 004065 aa 5 00157 2351 00 3838 lda work|real.prec 004066 aa 5 00000 7551 00 3839 sta work|target_precision 004067 aa 777777 3750 07 3840 ana =o777777,dl " mask for precision 004070 aa 000000 6054 11 3841 tpnz 0,x1 004071 aa 5 00000 0541 00 3842 aos work|target_precision " max (prec, 1) 004072 aa 000000 7100 11 3843 tra 0,x1 3844 3845 " Calculate float precision. 3846 3847 " precision = max(real_prec, imag_prec) 3848 " 3849 " Result left in target_precision field in work area. Scale set to 0. 3850 3851 004073 3852 float_prec: 004073 aa 5 00157 7221 00 3853 lxl2 work|real.prec 004074 aa 5 00164 2231 00 3854 ldx3 work|imag.type " take real if no imag 004075 0a 004102 6000 00 3855 tze float_prec.real 004076 aa 5 00165 7231 00 3856 lxl3 work|imag.prec 004077 aa 5 00165 1021 00 3857 cmpx2 work|imag.prec 004100 aa 000002 6050 04 3858 tpl 2,ic 004101 aa 000000 6220 13 3859 eax2 0,x3 004102 3860 float_prec.real: 004102 aa 5 00000 4421 00 3861 sxl2 work|target_precision " set new precision (DL) 004103 aa 000000 2220 03 3862 ldx2 0,du 004104 aa 5 00000 7421 00 3863 stx2 work|target_precision " zero scale 004105 aa 5 00000 7221 00 3864 lxl2 work|target_precision " ensure precision >= 1 004106 aa 000000 6054 11 3865 tpnz 0,x1 004107 aa 5 00000 0541 00 3866 aos work|target_precision " max (prec, 1) 004110 aa 000000 7100 11 3867 tra 0,x1 3868 3869 3870 3871 " Execute table used for calculation of precision and scale according to 3872 " the dominant target type. 3873 004111 3874 calculate_precision: 004111 0a 006273 7100 00 3875 tra error_bad_type " must have a type by now 004112 0a 004040 7010 00 3876 tsx1 fixed_prec_and_scale 004113 0a 004073 7010 00 3877 tsx1 float_prec 004114 0a 004040 7010 00 3878 tsx1 fixed_prec_and_scale 004115 0a 004073 7010 00 3879 tsx1 float_prec 3880 3881 " Execute table used for comparison of precision limit to determine 3882 " long/short data type. 3883 004116 3884 calculate_type: 004116 0a 006273 7100 00 3885 tra error_bad_type " must have type by now 004117 aa 000043 1050 03 3886 cmpx5 35,du " short limit of fixed bin 004120 aa 000033 1050 03 3887 cmpx5 27,du " short limit of float bin 004121 aa 000073 1050 03 3888 cmpx5 59,du " upper limit of fixed dec 004122 aa 000073 1050 03 3889 cmpx5 59,du " upper limit of float dec Move float decimal generic from source character stream. 3890 3891 " Routine to move character input to float decimal generic form for 3892 " char_to_arithmetic. It creates a 36-bit exponent, moves the sign 3893 " and moves the integer and fractional parts. 3894 3895 " On entry: 3896 " X1 is return offset 3897 " generic points to source string 3898 " type of numer in work|imag.type (DU) 3899 " 3900 " On exit we have stored the appropriate type of float decimal generic, 3901 " fix_bin_generic or flt_bin_generic. 3902 " We have also set source_precision and source_scale and X7. 3903 004123 3904 move_char_to_generic: 004123 aa 5 00156 2221 00 3905 ldx2 work|real.type 004124 0a 004125 7100 12 3906 tra *+1,x2 004125 0a 004132 7100 00 3907 tra char_to_generic.zero_dec 004126 0a 004177 7100 00 3908 tra char_to_generic.fixbin 004127 0a 004244 7100 00 3909 tra char_to_generic.fltbin 004130 0a 004141 7100 00 3910 tra char_to_generic.fixdec 004131 0a 004141 7100 00 3911 tra char_to_generic.fltdec 3912 004132 3913 char_to_generic.zero_dec: 004132 aa 000001 2350 07 3914 lda 1,dl " set source scale/prec 004133 aa 5 00001 7551 00 3915 sta work|source_precision 004134 aa 5 00157 7551 00 3916 sta work|real.prec " same in token 004135 aa 5 00013 4501 00 3917 stz work|flt_dec_generic_exp " clear exponent 004136 0a 000103 2350 00 3918 lda dec_zero " implant +0 004137 aa 5 00014 7551 00 3919 sta work|flt_dec_generic 004140 aa 000000 7100 11 3920 tra 0,x1 3921 004141 3922 char_to_generic.fixdec: 004141 3923 char_to_generic.fltdec: 004141 aa 5 00001 4501 00 3924 stz work|source_scale " kill the scale 004142 aa 000246 2270 03 3925 ldx7 real_flt_dec_generic*2,du " set type of data moved to 004143 aa 5 00153 2221 00 3926 ldx2 work|real.integer.length " get precision (DU) 004144 aa 5 00154 0621 00 3927 adx2 work|real.fraction.length 004145 0a 004132 6044 00 3928 tmoz char_to_generic.zero_dec " default to 0.0 004146 aa 000073 1020 03 3929 cmpx2 max_p_dec,du " see if too many digits 004147 0a 006120 6054 00 3930 tpnz error_218 004150 aa 5 00001 4421 00 3931 sxl2 work|source_precision " save precision 004151 aa 5 00154 2351 00 3932 lda work|real.fraction.length " get fractional length 004152 aa 000022 7310 00 3933 ars 18 004153 aa 5 00155 1551 00 3934 ssa work|real.exponent.value " form fraction - exponent 004154 aa 5 00155 3351 00 3935 lca work|real.exponent.value " save generic's exponent 004155 aa 5 00013 7551 00 3936 sta work|flt_dec_generic_exp 3937 3938 " Move in sign. 3939 004156 aa 5 00152 2221 00 3940 ldx2 work|real.sign.length " length in DU 004157 aa 5 00152 7231 00 3941 lxl3 work|real.sign.index " index in DL 004160 aa 000001 2240 03 3942 ldx4 1,du " move 1 char 004161 aa 0 53140 1005 53 3943 mlr (pr,rl,x3),(pr,rl),fill(plus_sign) 004162 aa 200000 000012 3944 desc9a generic|0,x2 " fills "+" if no sign 004163 aa 500014 000014 3945 desc9a work|flt_dec_generic,x4 3946 3947 " Move integer part. 3948 004164 aa 5 00153 2221 00 3949 ldx2 work|real.integer.length " length of source DU 004165 aa 5 00153 7241 00 3950 lxl4 work|real.integer.index " index in source DL 004166 aa 0 60140 1005 54 3951 mlr (pr,rl,x4),(pr,rl),fill(digit_0) 004167 aa 200000 000012 3952 desc9a generic|0,x2 004170 aa 500014 200012 3953 desc9a work|flt_dec_generic(1),x2 3954 3955 " Move fractional part. 3956 004171 aa 5 00154 7241 00 3957 lxl4 work|real.fraction.index " index in source DL 004172 aa 5 00154 2231 00 3958 ldx3 work|real.fraction.length " length of source DU 004173 aa 0 60152 1005 54 3959 mlr (pr,rl,x4),(pr,rl,x2),fill(digit_0) 004174 aa 200000 000013 3960 desc9a generic|0,x3 004175 aa 500014 200013 3961 desc9a work|flt_dec_generic(1),x3 004176 aa 000000 7100 11 3962 tra 0,x1 " return for next section 3963 " Move fixed bin generic from source character stream. 3964 3965 " Here we will receive an integer and a fractional part. They must 3966 " be converted to bits and stored. They have been pre-checked. 3967 " 3968 " Number is converted from the lower bits to the higher bits. 3969 " Precision is set, scale was set by recognize. 3970 004177 3971 char_to_generic.fixbin: 004177 aa 000004 2270 03 3972 ldx7 real_fix_bin_2*2,du " set type of output 004200 aa 5 00157 2221 00 3973 ldx2 work|real.scale " copy scale 004201 aa 5 00001 7421 00 3974 stx2 work|source_scale 004202 aa 5 00154 2221 00 3975 ldx2 work|real.fraction.length " length of fraction 004203 aa 5 00153 0621 00 3976 adx2 work|real.integer.length " plus length of integer 004204 aa 000107 1020 03 3977 cmpx2 max_p_fix_bin_2,du " see if too many digits 004205 0a 006120 6054 00 3978 tpnz error_218 004206 aa 5 00001 4421 00 3979 sxl2 work|source_precision " gives precision 004207 aa 5 00004 3535 00 3980 epp source,work|fix_bin_generic " point to target area 004210 aa 3 00000 4501 00 3981 stz source|0 " pre-set 004211 aa 3 00001 4501 00 3982 stz source|1 004212 aa 000107 2250 03 3983 ldx5 71,du " bit index of target 004213 aa 5 00154 2241 00 3984 ldx4 work|real.fraction.length " get length 004214 0a 004220 6000 00 3985 tze char.gen.fixbin.int 3986 004215 aa 5 00154 7231 00 3987 lxl3 work|real.fraction.index " get index 004216 aa 5 00154 0631 00 3988 adx3 work|real.fraction.length " plus length +1 004217 0a 004320 7020 00 3989 tsx2 move_char_to_bit_right " move right to left 3990 3991 " Do integer part next. Abbut to fraction. 3992 004220 3993 char.gen.fixbin.int: 004220 aa 5 00153 2241 00 3994 ldx4 work|real.integer.length " get length 004221 0a 004226 6000 00 3995 tze char.gen.fixbin.exit_1 " set precision and exit 004222 aa 5 00153 7231 00 3996 lxl3 work|real.integer.index " get index 004223 aa 5 00153 0631 00 3997 adx3 work|real.integer.length " plus length+1 004224 0a 004320 7020 00 3998 tsx2 move_char_to_bit_right " move right to left 004225 0a 004230 7100 00 3999 tra char.gen.fixbin.exit 4000 004226 4001 char.gen.fixbin.exit_1: 004226 aa 000001 2230 03 4002 ldx3 1,du 004227 aa 5 00157 4431 00 4003 sxl3 work|real.prec " indicate source prec is 1 4004 004230 4005 char.gen.fixbin.exit: 004230 aa 5 00152 2241 00 4006 ldx4 work|real.sign.length " length of sign 004231 aa 000000 6000 11 4007 tze 0,x1 " default + sign 004232 aa 5 00152 7231 00 4008 lxl3 work|real.sign.index " index of sign 004233 aa 0 53000 1065 13 4009 cmpc (pr,x3),(),fill(plus_sign) 004234 aa 200000 000001 4010 desc9a generic|0,1 004235 aa 000000 000000 4011 zero 004236 aa 000000 6000 11 4012 tze 0,x1 " + sign 004237 aa 5 00004 2371 00 4013 ldaq work|fix_bin_generic " form negative 004240 aa 000000 5330 00 4014 negl 004241 0a 006226 6170 00 4015 tov size_error " -2**72 won't fit 004242 aa 5 00004 7571 00 4016 staq work|fix_bin_generic 004243 aa 000000 7100 11 4017 tra 0,x1 4018 " Move float bin generic from source character stream. 4019 " Here we will receive an integer and a fractional part. They must 4020 " be converted to bits and stored. They have been pre-checked. 4021 " Number is converted from the lower bits to the higher bits, it is 4022 " stored starting from integer+fractional length from the top, and 4023 " the exponent is set to integer length + exponent. 4024 004244 4025 char_to_generic.fltbin: 004244 aa 000010 2270 03 4026 ldx7 real_flt_bin_2*2,du " set type of output 004245 aa 5 00154 2221 00 4027 ldx2 work|real.fraction.length " length of fraction 004246 aa 5 00001 4501 00 4028 stz work|source_scale 004247 aa 5 00153 0621 00 4029 adx2 work|real.integer.length " plus length of integer 004250 aa 000077 1020 03 4030 cmpx2 max_p_flt_bin_2,du " see if too many digits 004251 0a 006120 6054 00 4031 tpnz error_218 004252 aa 5 00001 4421 00 4032 sxl2 work|source_precision " gives precision 004253 aa 5 00153 2351 00 4033 lda work|real.integer.length " get length DU 004254 aa 000022 7310 00 4034 ars 18 004255 aa 5 00155 0751 00 4035 ada work|real.exponent.value 004256 aa 5 00012 7551 00 4036 sta work|flt_bin_generic_exp " store the flt bin gen exp 004257 aa 5 00006 3535 00 4037 epp source,work|flt_bin_generic " point to target area 004260 aa 3 00000 4501 00 4038 stz source|0 004261 aa 3 00001 4501 00 4039 stz source|1 " pre-set mantissa 004262 aa 5 00154 2251 00 4040 ldx5 work|real.fraction.index " bit index of target 004263 aa 5 00153 0651 00 4041 adx5 work|real.integer.length 004264 aa 5 00154 2241 00 4042 ldx4 work|real.fraction.length " get length 004265 0a 004271 6000 00 4043 tze char.gen.fltbin.int 4044 004266 aa 5 00154 7231 00 4045 lxl3 work|real.fraction.index " get index 004267 aa 5 00154 0631 00 4046 adx3 work|real.fraction.length 004270 0a 004320 7020 00 4047 tsx2 move_char_to_bit_right " move right to left 4048 4049 " Do integer part next. Abbut to fraction. 4050 004271 4051 char.gen.fltbin.int: 004271 aa 5 00153 2241 00 4052 ldx4 work|real.integer.length " get length 004272 0a 004277 6000 00 4053 tze char.gen.fltbin.exit_1 004273 aa 5 00153 7231 00 4054 lxl3 work|real.integer.index " get index 004274 aa 5 00153 0631 00 4055 adx3 work|real.integer.length 004275 0a 004320 7020 00 4056 tsx2 move_char_to_bit_right " move right to left 004276 0a 004301 7100 00 4057 tra char.gen.fltbin.exit 4058 004277 4059 char.gen.fltbin.exit_1: 004277 aa 000001 2230 03 4060 ldx3 1,du " indicate source precision 1 004300 aa 5 00157 4431 00 4061 sxl3 work|real.prec 4062 004301 4063 char.gen.fltbin.exit: 004301 aa 5 00152 2241 00 4064 ldx4 work|real.sign.length " length of sign 004302 aa 000000 6000 11 4065 tze 0,x1 " default + sign 004303 aa 5 00152 7231 00 4066 lxl3 work|real.sign.index " index of sign 004304 aa 0 53000 1065 13 4067 cmpc (pr,x3),(),fill(plus_sign) 004305 aa 200000 000001 4068 desc9a generic|0,1 004306 aa 000000 000000 4069 zero 004307 aa 000000 6000 11 4070 tze 0,x1 " + sign 004310 aa 5 00006 2371 00 4071 ldaq work|flt_bin_generic " form negative 004311 aa 000000 4110 03 4072 lde 0,du 004312 aa 000000 5130 00 4073 fneg 004313 aa 5 00006 7571 00 4074 staq work|flt_bin_generic 004314 aa 777777 2350 03 4075 lda =-1,du " form -1 to correct exp 004315 aa 000022 7310 00 4076 ars 18 004316 aa 5 00012 0551 00 4077 asa work|flt_bin_generic_exp " account for shift in fneg 004317 aa 000000 7100 11 4078 tra 0,x1 4079 4080 " x3 is index into character string and is pre-decremented. 4081 " x4 is length of character string and is decremented. 4082 " x5 is index into bit string and is decremented. 4083 004320 4084 move_char_to_bit_right: 004320 aa 000001 1630 03 4085 sbx3 1,du " move source index 004321 aa 000113 1244 00 4086 scm (),(pr,x3),mask(000) " check 0 or 1 004322 0a 003014 000002 4087 desc9a char.bit.01,2 004323 aa 200000 000001 4088 desc9a generic|0,1 004324 aa 5 00013 0001 00 4089 arg work|flt_dec_generic_exp " lowermost bit will be good 004325 aa 0 03115 0605 00 4090 csl (pr),(pr,x5),bool(move) " as true digit value 004326 aa 500013 700001 4091 descb work|flt_dec_generic_exp(35),1 004327 aa 300000 000001 4092 descb source|0,1 004330 aa 000001 1650 03 4093 sbx5 1,du " move target index 004331 aa 000001 1640 03 4094 sbx4 1,du " count bit done 004332 0a 004320 6054 00 4095 tpnz move_char_to_bit_right 004333 aa 000000 7100 12 4096 tra 0,x2 RECOGNIZE A REAL CONSTANT 4097 4098 " recognize a 4099 " entered with 4100 " char offset in ql 4101 " char length in al 4102 " token area to use is imag_token 4103 " return offset in x2 4104 " pointer to source string in generic 4105 " 4106 " exits with 4107 " char offset in ql 4108 " char length (remaining) in al 4109 " type in x7 4110 " token area filled in 4111 004334 4112 recognize: 004334 aa 000003 2270 03 4113 ldx7 fixdec,du " preset to fixed decimal 4114 4115 " Check for sign. Translate and test next character. 4116 004335 aa 0 00100 1605 06 4117 mvt (pr,ql),(pr) " translate first character 004336 aa 200000 000001 4118 desc9a generic|0,1 004337 aa 500012 000001 4119 desc9a work|flt_bin_generic_exp,1 004340 0a 005046 0000 00 4120 arg translate_table 4121 004341 aa 0 01000 1065 00 4122 cmpc (pr),(),fill(sign_class) " test if in classification 004342 aa 500012 000001 4123 desc9a work|flt_bin_generic_exp,1 004343 aa 000000 000000 4124 zero 004344 0a 004353 6010 00 4125 tnz recognize.no_sign 4126 4127 " Note sign index and length of 1. 4128 004345 aa 5 00160 7561 00 4129 stq work|imag.sign.index " index in DL 004346 aa 000001 2230 03 4130 ldx3 1,du 004347 aa 5 00160 7431 00 4131 stx3 work|imag.sign.length " length of 1 004350 aa 000001 1750 07 4132 sba 1,dl " done one character 004351 0a 006072 6044 00 4133 tmoz error_202 " error - no digits found 004352 aa 000001 0760 07 4134 adq 1,dl " skip sign 4135 4136 " Check for integer part. 4137 004353 4138 recognize.no_sign: 004353 aa 0 00000 1645 46 4139 tct (pr,rl,ql) " skip over string of digits 004354 aa 200000 000005 4140 desc9a generic|0,al 004355 0a 005071 0000 00 4141 arg digit_skip 004356 aa 5 00004 0001 00 4142 arg work|fix_bin_generic 004357 aa 5 00004 7231 00 4143 lxl3 work|fix_bin_generic " get number of digits found 004360 0a 004401 6000 00 4144 tze recognize.no_integer " skip if none 4145 4146 " Note that a mantissa exists by leaving a non-zero X3, and clip the 4147 " leading 0's from it to remove them from significance checks. 4148 004361 aa 000000 6240 13 4149 eax4 0,x3 " remember mantissa size 004362 aa 0 00000 1645 46 4150 tct (pr,rl,ql) " skip over leading 0's 004363 aa 200000 000013 4151 desc9a generic|0,x3 004364 0a 005142 0000 00 4152 arg zero_skip 004365 aa 5 00006 0001 00 4153 arg work|flt_bin_generic 004366 aa 5 00006 7251 00 4154 lxl5 work|flt_bin_generic 004367 aa 5 00006 7451 00 4155 stx5 work|flt_bin_generic " move to upper 004370 aa 000000 6250 06 4156 eax5 0,ql " setup index 004371 aa 5 00006 1641 00 4157 sbx4 work|flt_bin_generic " length of non-zero int 004372 aa 5 00006 0651 00 4158 adx5 work|flt_bin_generic " index of 1st non-zero 4159 4160 " Store length of integer part, and its index. 4161 004373 aa 5 00161 4451 00 4162 sxl5 work|imag.integer.index " significance index in DL 004374 aa 5 00161 7441 00 4163 stx4 work|imag.integer.length " length of sig string in DU 004375 aa 5 00004 5511 40 4164 stba work|fix_bin_generic,40 " clear upper byte 004376 aa 5 00004 0761 00 4165 adq work|fix_bin_generic " move string index 004377 aa 5 00004 1751 00 4166 sba work|fix_bin_generic " count all digits done 004400 0a 004614 6044 00 4167 tmoz recognize.no_more_input " no chars left 4168 4169 " Check for decimal point, or other situations. 4170 004401 4171 recognize.no_integer: 004401 aa 0 00100 1605 06 4172 mvt (pr,ql),(pr) " translate terminator 004402 aa 200000 000001 4173 desc9a generic|0,1 004403 aa 500004 200001 4174 desc9a work|fix_bin_generic(1),1 004404 0a 005046 0000 00 4175 arg translate_table 004405 aa 5 00004 2241 00 4176 ldx4 work|fix_bin_generic " get character class 004406 aa 000777 3640 03 4177 anx4 =o777,du " mask for it 004407 0a 004410 7100 14 4178 tra *+1,4 004410 0a 006074 7100 00 4179 tra error_203 " illegal 004411 0a 004615 7100 00 4180 tra recognize.finish_up " sign (start imag?) 004412 0a 004421 7100 00 4181 tra recognize.start_fractional " period 004413 0a 004562 7100 00 4182 tra recognize.have_bin " b 004414 0a 004465 7100 00 4183 tra recognize.start_exponent_flt " d e 004415 0a 004615 7100 00 4184 tra recognize.finish_up " i 004416 0a 004615 7100 00 4185 tra recognize.finish_up " blank 004417 aa 000000 000000 4186 zero 0 " digit (can't happen) 004420 0a 004466 7100 00 4187 tra recognize.start_scaled_fix " f 4188 4189 " have "." after (possibly empty) string of digits 4190 004421 4191 recognize.start_fractional: 004421 aa 000001 0760 07 4192 adq 1,dl " account for . 004422 aa 000001 1750 07 4193 sba 1,dl 004423 0a 004430 6054 00 4194 tpnz recognize.scan_fraction " fractional digits 004424 aa 000000 1030 03 4195 cmpx3 0,du " legitimate integer? 004425 0a 004615 6054 00 4196 tpnz recognize.finish_up " digits already seen 004426 aa 000001 1760 07 4197 sbq 1,dl " no digits before/after "." 004427 0a 006072 7100 00 4198 tra error_202 4199 4200 " Find limits of fractional digits. 4201 004430 4202 recognize.scan_fraction: 004430 aa 0 00000 1645 46 4203 tct (pr,rl,ql) " skip over string of digits 004431 aa 200000 000005 4204 desc9a generic|0,al 004432 0a 005071 0000 00 4205 arg digit_skip 004433 aa 5 00004 0001 00 4206 arg work|fix_bin_generic 004434 aa 5 00004 7251 00 4207 lxl5 work|fix_bin_generic " get number of digits 004435 0a 004445 6000 00 4208 tze recognize.no_fraction 4209 4210 " Fractional digits present. Note where and how many. 4211 004436 aa 5 00162 7561 00 4212 stq work|imag.fraction.index " save index in DL 004437 aa 5 00162 7451 00 4213 stx5 work|imag.fraction.length " save length in DU 004440 aa 5 00162 0631 00 4214 adx3 work|imag.fraction.length " form total precision 004441 aa 5 00004 5521 40 4215 stbq work|fix_bin_generic,40 " clear high byte digit count 004442 aa 5 00004 0761 00 4216 adq work|fix_bin_generic " account for digits 004443 aa 5 00004 1751 00 4217 sba work|fix_bin_generic 004444 0a 004614 6044 00 4218 tmoz recognize.no_more_input " exit if end reached 4219 4220 " we are scanning character after string of fractional digits 4221 004445 4222 recognize.no_fraction: 004445 aa 0 00100 1605 06 4223 mvt (pr,ql),(pr) " translate terminator 004446 aa 200000 000001 4224 desc9a generic|0,1 004447 aa 500004 200001 4225 desc9a work|fix_bin_generic(1),1 004450 0a 005046 0000 00 4226 arg translate_table 004451 aa 5 00004 2241 00 4227 ldx4 work|fix_bin_generic " get char type 004452 aa 000777 3640 03 4228 anx4 =o777,du 004453 0a 004454 7100 14 4229 tra *+1,4 004454 0a 006074 7100 00 4230 tra error_203 " illegal 004455 0a 004615 7100 00 4231 tra recognize.finish_up " sign 004456 0a 006076 7100 00 4232 tra error_204 " period 004457 0a 004562 7100 00 4233 tra recognize.have_bin " b 004460 0a 004465 7100 00 4234 tra recognize.start_exponent_flt " d e 004461 0a 004615 7100 00 4235 tra recognize.finish_up " i 004462 0a 004615 7100 00 4236 tra recognize.finish_up " blank 004463 aa 000000 000000 4237 zero 0 " digit (can't happen) 004464 0a 004466 7100 00 4238 tra recognize.start_scaled_fix " f 4239 4240 " we have "d" or "e" after mantissa 4241 004465 4242 recognize.start_exponent_flt: 004465 aa 000004 6270 00 4243 eax7 fltdec " change type 4244 4245 " we have "f" after mantissa 4246 004466 4247 recognize.start_scaled_fix: 004466 aa 000000 1030 07 4248 cmpx3 0,dl 004467 0a 006116 6000 00 4249 tze error_214 " no digits before e or f 004470 aa 000001 0760 07 4250 adq 1,dl " account for exponent start 004471 aa 000001 1750 07 4251 sba 1,dl 004472 0a 006063 6044 00 4252 tmoz error_201 004473 aa 0 00100 1605 06 4253 mvt (pr,ql),(pr) " translate terminator 004474 aa 200000 000001 4254 desc9a generic|0,1 004475 aa 500004 000001 4255 desc9a work|fix_bin_generic,1 004476 0a 005046 0000 00 4256 arg translate_table 004477 aa 0 01000 1065 00 4257 cmpc (pr),(),fill(sign_class) " check for sign 004500 aa 500004 000001 4258 desc9a work|fix_bin_generic,1 004501 aa 000000 000000 4259 zero 004502 0a 004523 6010 00 4260 tnz recognize.unsigned_exponent 4261 4262 " have start of signed exponent 4263 004503 aa 000001 0760 07 4264 adq 1,dl " account for sign 004504 aa 000001 1750 07 4265 sba 1,dl 004505 0a 006063 6044 00 4266 tmoz error_201 004506 aa 0 00000 1645 46 4267 tct (pr,rl,ql) " skip over string of digits 004507 aa 200000 000005 4268 desc9a generic|0,al 004510 0a 005071 0000 00 4269 arg digit_skip 004511 aa 5 00004 0001 00 4270 arg work|fix_bin_generic 004512 aa 5 00004 7251 00 4271 lxl5 work|fix_bin_generic " get number of digits 004513 0a 006063 6000 00 4272 tze error_201 " no digits in exponent 004514 aa 000013 1050 03 4273 cmpx5 11,du " check for max digits 004515 0a 006114 6050 00 4274 tpl error_213 " too many digits 004516 aa 000001 0650 03 4275 adx5 1,du " allow for sign 004517 aa 0 00100 3055 46 4276 dtb (pr,rl,ql),(pr) " convert exponent to binary 004520 aa 377777 610015 4277 desc9ls source|-1(3),x5 004521 aa 500163 000004 4278 desc9a work|imag.exponent.value,4 004522 0a 004536 7100 00 4279 tra recognize.common_exponent 4280 4281 " have start of unsigned exponent 4282 004523 4283 recognize.unsigned_exponent: 004523 aa 0 00000 1645 46 4284 tct (pr,rl,ql) " skip over string of digits 004524 aa 200000 000005 4285 desc9a generic|0,al 004525 0a 005071 0000 00 4286 arg digit_skip 004526 aa 5 00004 0001 00 4287 arg work|fix_bin_generic 004527 aa 5 00004 7251 00 4288 lxl5 work|fix_bin_generic " get number of digits 004530 0a 006063 6000 00 4289 tze error_201 " no digits 004531 aa 000013 1050 03 4290 cmpx5 11,du " check for max digits 004532 0a 006114 6050 00 4291 tpl error_213 004533 aa 0 00100 3055 46 4292 dtb (pr,rl,ql),(pr) " convert exponent to binary 004534 aa 200000 030015 4293 desc9ns generic|0,x5 004535 aa 500163 000004 4294 desc9a work|imag.exponent.value,4 4295 004536 4296 recognize.common_exponent: 004536 aa 5 00004 5521 40 4297 stbq work|fix_bin_generic,40 " clear high byte digit count 004537 aa 5 00004 0761 00 4298 adq work|fix_bin_generic " count exponent digits 004540 aa 5 00004 1751 00 4299 sba work|fix_bin_generic 004541 0a 004614 6044 00 4300 tmoz recognize.no_more_input 4301 4302 " we are scanning character after exponent field 4303 004542 aa 0 00100 1605 06 4304 mvt (pr,ql),(pr) " translate terminator 004543 aa 200000 000001 4305 desc9a generic|0,1 004544 aa 500004 200001 4306 desc9a work|fix_bin_generic(1),1 004545 0a 005046 0000 00 4307 arg translate_table 004546 aa 5 00004 2241 00 4308 ldx4 work|fix_bin_generic " get character class 004547 aa 000777 3640 03 4309 anx4 =o777,du 004550 0a 004551 7100 14 4310 tra *+1,4 004551 0a 006074 7100 00 4311 tra error_203 " illegal 004552 0a 004615 7100 00 4312 tra recognize.finish_up " sign 004553 0a 006076 7100 00 4313 tra error_204 " period 004554 0a 004562 7100 00 4314 tra recognize.have_bin " b 004555 0a 006104 7100 00 4315 tra error_207 " d e 004556 0a 004615 7100 00 4316 tra recognize.finish_up " i 004557 0a 004615 7100 00 4317 tra recognize.finish_up " blank 004560 aa 000000 000000 4318 zero 0 " digit (can't happen) 004561 0a 006104 7100 00 4319 tra error_207 " f 4320 4321 " have "b" at end, validate bit input form of 0 or 1. 4322 004562 4323 recognize.have_bin: 004562 aa 5 00161 2231 00 4324 ldx3 work|imag.integer.length " get length of integer 004563 0a 004572 6000 00 4325 tze recognize.bin.int " nothing to check 004564 aa 5 00161 7241 00 4326 lxl4 work|imag.integer.index " get index of integer 004565 aa 0 00000 1645 54 4327 tct (pr,rl,x4) " validate integer part 004566 aa 200000 000013 4328 desc9a generic|0,x3 004567 0a 005133 0000 00 4329 arg bit_test 004570 aa 5 00004 0001 00 4330 arg work|fix_bin_generic " dummy 004571 0a 006061 6070 00 4331 ttf error_191 " invalid digit 4332 004572 4333 recognize.bin.int: 004572 aa 5 00162 2231 00 4334 ldx3 work|imag.fraction.length " get length of fraction 004573 0a 004602 6000 00 4335 tze recognize.bin.frac " nothing to check 004574 aa 5 00162 7241 00 4336 lxl4 work|imag.fraction.index " get index of fraction 004575 aa 0 00000 1645 54 4337 tct (pr,rl,x4) " validate fraction part 004576 aa 200000 000013 4338 desc9a generic|0,x3 004577 0a 005133 0000 00 4339 arg bit_test 004600 aa 5 00004 0001 00 4340 arg work|fix_bin_generic " dummy 004601 0a 006061 6070 00 4341 ttf error_191 " invalid digit 4342 004602 4343 recognize.bin.frac: 004602 aa 000001 0760 07 4344 adq 1,dl " account for "b" 004603 aa 000001 1750 07 4345 sba 1,dl 004604 aa 777776 6270 17 4346 eax7 -2,7 " base from dec to bin 4347 4348 " Entry if input scan is done. Now fixup terminator. 4349 004605 4350 recognize.end_of_input: 004605 aa 0 00100 1605 06 4351 mvt (pr,ql),(pr) " translate terminator 004606 aa 200000 000001 4352 desc9a generic|0,1 004607 aa 500004 200001 4353 desc9a work|fix_bin_generic(1),1 004610 0a 005046 0000 00 4354 arg translate_table 004611 aa 5 00004 2241 00 4355 ldx4 work|fix_bin_generic " get character class 004612 aa 000777 3640 03 4356 anx4 =o777,du 004613 0a 004615 7100 00 4357 tra recognize.finish_up 4358 4359 " Entry if input exhausted. 4360 004614 4361 recognize.no_more_input: 004614 aa 000006 2240 03 4362 ldx4 blank_class,du " presume ended on blank 004615 4363 recognize.finish_up: " accept terminator found 004615 aa 5 00161 2231 00 4364 ldx3 work|imag.integer.length " for digit count 004616 aa 5 00162 0631 00 4365 adx3 work|imag.fraction.length 004617 aa 5 00164 7471 00 4366 stx7 work|imag.type " save internal type code 004620 aa 5 00164 4441 00 4367 sxl4 work|imag.term " save termination character 004621 aa 5 00161 2231 00 4368 ldx3 work|imag.integer.length " form precision 004622 aa 5 00162 0631 00 4369 adx3 work|imag.fraction.length 004623 aa 5 00165 4431 00 4370 sxl3 work|imag.prec " save in DL 004624 aa 5 00162 2241 00 4371 ldx4 work|imag.fraction.length 004625 aa 5 00165 7441 00 4372 stx4 work|imag.scale " save scale in DU 4373 4374 " Scaled fixed numbers should have the scale corrected for any exponent 4375 " which may have been specified. 4376 004626 aa 000001 1070 03 4377 cmpx7 fixbin,du 004627 0a 004632 6000 00 4378 tze recognize.fix_scale " fixup scale from exp 004630 aa 000003 1070 03 4379 cmpx7 fixdec,du 004631 aa 000000 6010 12 4380 tnz 0,2 " not a fixed type 4381 004632 4382 recognize.fix_scale: 004632 aa 5 00163 2241 00 4383 ldx4 work|imag.exponent.value " load upper part 004633 0a 004637 6000 00 4384 tze recognize.finish_scale " okay if clear 004634 0a 006106 6050 00 4385 tpl error_208 " big 004635 aa 777777 1040 03 4386 cmpx4 =o777777,du " okay if -1 004636 0a 006110 6010 00 4387 tnz error_209 " small 4388 004637 4389 recognize.finish_scale: 004637 aa 5 00163 7241 00 4390 lxl4 work|imag.exponent.value " get exponent 004640 aa 5 00165 1641 00 4391 sbx4 work|imag.scale " -scale 004641 0a 004650 6040 00 4392 tmi recognize.scale_pos " negative scale 004642 aa 000200 1040 03 4393 cmpx4 -min_scale,du 004643 0a 006110 6054 00 4394 tpnz error_209 " scale too small 004644 aa 777777 6640 03 4395 erx4 =o777777,du " complement 004645 aa 000001 0640 03 4396 adx4 1,du " add one 004646 aa 5 00165 7441 00 4397 stx4 work|imag.scale " save scale 004647 aa 000000 7100 12 4398 tra 0,2 " return 4399 004650 4400 recognize.scale_pos: 004650 aa 777777 6640 03 4401 erx4 =o777777,du " complement 004651 aa 000001 0640 03 4402 adx4 1,du " add one 004652 aa 000177 1040 03 4403 cmpx4 max_scale,du 004653 0a 006106 6054 00 4404 tpnz error_208 " scale too big 004654 aa 5 00165 7441 00 4405 stx4 work|imag.scale " save scale 004655 aa 000000 7100 12 4406 tra 0,2 " return Table of translations for errors. Only valid info will be 0. 4407 4408 " This table is used to initially check the incoming string, and is a full 4409 " 9-bit translation. This permits the other tables to be much smaller and 4410 " only encompass the contiguous zero-area of this table. 4411 004656 4412 error_table: 004656 aa 777777 777777 4413 oct 777777777777,777777777777 000 - 007 004657 aa 777777 777777 004660 aa 777777 777777 4414 oct 777777777777,777777777777 010 - 017 004661 aa 777777 777777 004662 aa 777777 777777 4415 oct 777777777777,777777777777 020 - 027 004663 aa 777777 777777 004664 aa 777777 777777 4416 oct 777777777777,777777777777 030 - 037 004665 aa 777777 777777 004666 aa 000777 777777 4417 oct 000777777777,777777777777 040 - 047 blank 004667 aa 777777 777777 004670 aa 777777 777000 4418 oct 777777777000,777000000777 050 - 057 + - . 004671 aa 777000 000777 004672 aa 000000 000000 4419 oct 000000000000,000000000000 060 - 061 01234567 004673 aa 000000 000000 004674 aa 000000 777777 4420 oct 000000777777,777777777777 070 - 077 89 004675 aa 777777 777777 004676 aa 777777 000777 4421 oct 777777000777,000000000777 100 - 107 B D E F 004677 aa 000000 000777 004700 aa 777000 777777 4422 oct 777000777777,777777777777 110 - 117 I 004701 aa 777777 777777 004702 aa 777777 777777 4423 oct 777777777777,777777777777 120 - 127 004703 aa 777777 777777 004704 aa 777777 777777 4424 oct 777777777777,777777777777 130 - 137 004705 aa 777777 777777 004706 aa 777777 000777 4425 oct 777777000777,000000000777 140 - 147 b d e f 004707 aa 000000 000777 004710 aa 777000 777777 4426 oct 777000777777,777777777777 150 - 157 i 004711 aa 777777 777777 004712 aa 777777 777777 4427 oct 777777777777,777777777777 160 - 167 004713 aa 777777 777777 004714 aa 777777 777777 4428 oct 777777777777,777777777777 170 - 177 004715 aa 777777 777777 004716 aa 777777 777777 4429 oct 777777777777,777777777777 200 - 207 004717 aa 777777 777777 004720 aa 777777 777777 4430 oct 777777777777,777777777777 210 - 217 004721 aa 777777 777777 004722 aa 777777 777777 4431 oct 777777777777,777777777777 220 - 227 004723 aa 777777 777777 004724 aa 777777 777777 4432 oct 777777777777,777777777777 230 - 237 004725 aa 777777 777777 004726 aa 777777 777777 4433 oct 777777777777,777777777777 240 - 247 004727 aa 777777 777777 004730 aa 777777 777777 4434 oct 777777777777,777777777777 250 - 257 004731 aa 777777 777777 004732 aa 777777 777777 4435 oct 777777777777,777777777777 260 - 267 004733 aa 777777 777777 004734 aa 777777 777777 4436 oct 777777777777,777777777777 270 - 277 004735 aa 777777 777777 004736 aa 777777 777777 4437 oct 777777777777,777777777777 300 - 307 004737 aa 777777 777777 004740 aa 777777 777777 4438 oct 777777777777,777777777777 310 - 317 004741 aa 777777 777777 004742 aa 777777 777777 4439 oct 777777777777,777777777777 320 - 327 004743 aa 777777 777777 004744 aa 777777 777777 4440 oct 777777777777,777777777777 330 - 337 004745 aa 777777 777777 004746 aa 777777 777777 4441 oct 777777777777,777777777777 340 - 347 004747 aa 777777 777777 004750 aa 777777 777777 4442 oct 777777777777,777777777777 350 - 357 004751 aa 777777 777777 004752 aa 777777 777777 4443 oct 777777777777,777777777777 360 - 367 004753 aa 777777 777777 004754 aa 777777 777777 4444 oct 777777777777,777777777777 370 - 377 004755 aa 777777 777777 004756 aa 777777 777777 4445 oct 777777777777,777777777777 400 - 407 004757 aa 777777 777777 004760 aa 777777 777777 4446 oct 777777777777,777777777777 410 - 417 004761 aa 777777 777777 004762 aa 777777 777777 4447 oct 777777777777,777777777777 420 - 427 004763 aa 777777 777777 004764 aa 777777 777777 4448 oct 777777777777,777777777777 430 - 437 004765 aa 777777 777777 004766 aa 777777 777777 4449 oct 777777777777,777777777777 440 - 447 004767 aa 777777 777777 004770 aa 777777 777777 4450 oct 777777777777,777777777777 450 - 457 004771 aa 777777 777777 004772 aa 777777 777777 4451 oct 777777777777,777777777777 460 - 467 004773 aa 777777 777777 004774 aa 777777 777777 4452 oct 777777777777,777777777777 470 - 477 004775 aa 777777 777777 004776 aa 777777 777777 4453 oct 777777777777,777777777777 500 - 507 004777 aa 777777 777777 005000 aa 777777 777777 4454 oct 777777777777,777777777777 510 - 517 005001 aa 777777 777777 005002 aa 777777 777777 4455 oct 777777777777,777777777777 520 - 527 005003 aa 777777 777777 005004 aa 777777 777777 4456 oct 777777777777,777777777777 530 - 537 005005 aa 777777 777777 005006 aa 777777 777777 4457 oct 777777777777,777777777777 540 - 547 005007 aa 777777 777777 005010 aa 777777 777777 4458 oct 777777777777,777777777777 550 - 557 005011 aa 777777 777777 005012 aa 777777 777777 4459 oct 777777777777,777777777777 560 - 567 005013 aa 777777 777777 005014 aa 777777 777777 4460 oct 777777777777,777777777777 570 - 577 005015 aa 777777 777777 005016 aa 777777 777777 4461 oct 777777777777,777777777777 600 - 607 005017 aa 777777 777777 005020 aa 777777 777777 4462 oct 777777777777,777777777777 610 - 617 005021 aa 777777 777777 005022 aa 777777 777777 4463 oct 777777777777,777777777777 620 - 627 005023 aa 777777 777777 005024 aa 777777 777777 4464 oct 777777777777,777777777777 630 - 637 005025 aa 777777 777777 005026 aa 777777 777777 4465 oct 777777777777,777777777777 640 - 647 005027 aa 777777 777777 005030 aa 777777 777777 4466 oct 777777777777,777777777777 650 - 657 005031 aa 777777 777777 005032 aa 777777 777777 4467 oct 777777777777,777777777777 660 - 667 005033 aa 777777 777777 005034 aa 777777 777777 4468 oct 777777777777,777777777777 670 - 677 005035 aa 777777 777777 005036 aa 777777 777777 4469 oct 777777777777,777777777777 700 - 707 005037 aa 777777 777777 005040 aa 777777 777777 4470 oct 777777777777,777777777777 710 - 717 005041 aa 777777 777777 005042 aa 777777 777777 4471 oct 777777777777,777777777777 720 - 727 005043 aa 777777 777777 005044 aa 777777 777777 4472 oct 777777777777,777777777777 730 - 737 005045 aa 777777 777777 005046 aa 777777 777777 4473 oct 777777777777,777777777777 740 - 747 005047 aa 777777 777777 005050 aa 777777 777777 4474 oct 777777777777,777777777777 750 - 757 005051 aa 777777 777777 005052 aa 777777 777777 4475 oct 777777777777,777777777777 760 - 767 005053 aa 777777 777777 005054 aa 777777 777777 4476 oct 777777777777,777777777777 770 - 777 Source checking tables. 005055 aa 777777 777777 4477 4478 " Table used to encode the input string: 4479 " 4480 " encoding characters 4481 " 0 (Any other characters) 4482 " 1 + - 4483 " 2 . 4484 " 3 B b 4485 " 4 D E d e 4486 " 5 I i 4487 " 6 SP 4488 " 7 0 1 2 3 4 5 6 7 8 9 4489 " 8 F f 4490 005056 4491 translate_tab: 005056 aa 006000 000000 4492 oct 006000000000,000000000000 040 - 047 005057 aa 000000 000000 005060 aa 000000 000001 4493 oct 000000000001,000001002000 050 - 057 005061 aa 000001 002000 005062 aa 007007 007007 4494 oct 007007007007,007007007007 060 - 061 005063 aa 007007 007007 005064 aa 007007 000000 4495 oct 007007000000,000000000000 070 - 077 005065 aa 000000 000000 005066 aa 000000 003000 4496 oct 000000003000,004004010000 100 - 107 005067 aa 004004 010000 005070 aa 000005 000000 4497 oct 000005000000,000000000000 110 - 117 005071 aa 000000 000000 005072 aa 000000 000000 4498 oct 000000000000,000000000000 120 - 127 005073 aa 000000 000000 005074 aa 000000 000000 4499 oct 000000000000,000000000000 130 - 137 005075 aa 000000 000000 005076 aa 000000 003000 4500 oct 000000003000,004004010000 140 - 147 005077 aa 004004 010000 005100 aa 000005 000000 4501 oct 000005000000 150 - 153 4502 005046 4503 equ translate_table,translate_tab-8 4504 4505 " Table for finding contiguous digit streams. 4506 005101 4507 digit_tab: 005101 aa 777777 777777 4508 oct 777777777777,777777777777 040 - 047 005102 aa 777777 777777 005103 aa 777777 777777 4509 oct 777777777777,777777777777 050 - 057 005104 aa 777777 777777 005105 aa 000000 000000 4510 oct 000000000000,000000000000 060 - 067 005106 aa 000000 000000 005107 aa 000000 777777 4511 oct 000000777777,777777777777 070 - 077 005110 aa 777777 777777 005111 aa 777777 777777 4512 oct 777777777777,777777777777 100 - 107 005112 aa 777777 777777 005113 aa 777777 777777 4513 oct 777777777777,777777777777 110 - 117 005114 aa 777777 777777 005115 aa 777777 777777 4514 oct 777777777777,777777777777 120 - 127 005116 aa 777777 777777 005117 aa 777777 777777 4515 oct 777777777777,777777777777 130 - 137 005120 aa 777777 777777 005121 aa 777777 777777 4516 oct 777777777777,777777777777 140 - 147 005122 aa 777777 777777 005123 aa 777777 777777 4517 oct 777777777777 150 - 153 4518 005071 4519 equ digit_skip,digit_tab-8 4520 4521 4522 " Table for finding contiguous spaces. 4523 005124 4524 blank_tab: 005124 aa 000777 777777 4525 oct 000777777777,777777777777 040 - 047 005125 aa 777777 777777 005126 aa 777777 777777 4526 oct 777777777777,777777777777 050 - 057 005127 aa 777777 777777 005130 aa 777777 777777 4527 oct 777777777777,777777777777 060 - 067 005131 aa 777777 777777 005132 aa 777777 777777 4528 oct 777777777777,777777777777 070 - 077 005133 aa 777777 777777 005134 aa 777777 777777 4529 oct 777777777777,777777777777 100 - 107 005135 aa 777777 777777 005136 aa 777777 777777 4530 oct 777777777777,777777777777 110 - 117 005137 aa 777777 777777 005140 aa 777777 777777 4531 oct 777777777777,777777777777 120 - 127 005141 aa 777777 777777 005142 aa 777777 777777 4532 oct 777777777777,777777777777 130 - 137 005143 aa 777777 777777 005144 aa 777777 777777 4533 oct 777777777777,777777777777 140 - 147 005145 aa 777777 777777 005146 aa 777777 777777 4534 oct 777777777777 150 - 153 4535 005114 4536 equ blank_skip,blank_tab-8 4537 4538 " Table used to validate bit input. Very short since we know input is 4539 " pre-validated numeric digits. 4540 005147 4541 bit_tab: 005147 aa 000000 777777 4542 oct 000000777777,777777777777 060 - 061 only 0 and 1 005150 aa 777777 777777 005151 aa 777777 777777 4543 oct 777777777777 070 - 073 4544 005133 4545 equ bit_test,bit_tab-8-4 4546 4547 4548 " Table of translation values to check leading zeros. 4549 " True beginning is offset 40(8) characters above true table. 4550 005152 4551 zero_tab: 005152 aa 777777 777777 4552 oct 777777777777,777777777777 040 - 047 005153 aa 777777 777777 005154 aa 777777 777777 4553 oct 777777777777,777777777777 050 - 057 005155 aa 777777 777777 005156 aa 000777 777777 4554 oct 000777777777,777777777777 060 - 067 005157 aa 777777 777777 005160 aa 777777 777777 4555 oct 777777777777,777777777777 070 - 077 005161 aa 777777 777777 005162 aa 777777 777777 4556 oct 777777777777,777777777777 100 - 107 005163 aa 777777 777777 005164 aa 777777 777777 4557 oct 777777777777,777777777777 110 - 117 005165 aa 777777 777777 005166 aa 777777 777777 4558 oct 777777777777,777777777777 120 - 127 005167 aa 777777 777777 005170 aa 777777 777777 4559 oct 777777777777,777777777777 130 - 137 005171 aa 777777 777777 005172 aa 777777 777777 4560 oct 777777777777,777777777777 140 - 147 005173 aa 777777 777777 005174 aa 777777 777777 4561 oct 777777777777 150 - 153 4562 005142 4563 equ zero_skip,zero_tab-8 4564 " Call GENERIC to target conversion 4565 " Register conventions for source PUT routines. 4566 " (all routines specified in the table below). All registers named below, 4567 " must be preserved by the conversion routine. 4568 " 4569 " pr0 (reserved - pl1_operators_ ptr) 4570 " pr1 points to target. 4571 " pr3 points to source. 4572 " pr5 points to work area. 4573 " pr6 (reserved - stack_frame ptr) 4574 " pr7 points to return location in any_to_any_. 4575 " x0 return offset in user program. 4576 " x3 for decimal target routines is size of flt_dec_generic. 4577 " x5 0 if no round, 1 if round. 4578 " x6 target type. 4579 " x7 source type. 4580 4581 " work|scales stored scales (in upper halves) 4582 " work|precisions stored precisions (in lower halves) 4583 " 4584 " Decimal PUT routines require X3 as the size of the floating decimal 4585 " generic variable, including sign and hardware exponent. 4586 4587 " In this calling sequence x6 is the target type and the GENERIC form 4588 " is correctly stored in the work area. Store in target form and update 4589 " target pointer. 4590 4591 4592 005175 4593 generic_to_target: 005175 0a 000376 7210 16 4594 lxl1 target_type_map,x6 005176 aa 000000 7100 11 4595 tra 0,x1 " call for target conversion 4596 " GENERIC to Fixed Binary Target Conversion 4597 4598 4599 " GENERIC to Fixed Binary Target Conversion 4600 " Unsigned Cases and some Signed Cases 4601 005177 4602 put_fix_bin_1uns: 005177 aa 5 00004 2371 00 4603 ldaq work|fix_bin_generic " size the value 005200 aa 1 00000 7561 00 4604 stq target|0 " and put to target 005201 aa 5 00000 7221 00 4605 lxl2 work|target_precision " check overflow 005202 aa 000000 7730 12 4606 lrl 0,x2 005203 0a 006226 6010 00 4607 tnz size_error 005204 aa 1 00001 3515 00 4608 epp target,target|1 " update target pointer 005205 aa 7 00000 7101 00 4609 tra pr7|0 " return 4610 005206 4611 put_fix_bin_1: 005206 aa 5 00004 2371 00 4612 ldaq work|fix_bin_generic 005207 aa 1 00000 7561 00 4613 stq target|0 " and store 005210 aa 5 00000 7221 00 4614 lxl2 work|target_precision " check precision 005211 aa 777777 6620 03 4615 erx2 =o777777,du " -precision-1 005212 aa 000110 7370 12 4616 lls 72,x2 " 72-precision-sign 005213 0a 006226 6030 00 4617 trc size_error " too big 005214 aa 1 00001 3515 00 4618 epp target,target|1 " update target pointer 005215 aa 7 00000 7101 00 4619 tra pr7|0 " return 4620 005216 4621 put_fix_bin_2uns: 005216 aa 5 00004 2371 00 4622 ldaq work|fix_bin_generic 005217 aa 1 00000 7571 00 4623 staq target|0 " and store 005220 aa 5 00000 7221 00 4624 lxl2 work|target_precision " check overflow 005221 aa 000000 7730 12 4625 lrl 0,x2 005222 0a 006226 6010 00 4626 tnz size_error 005223 aa 1 00002 3515 00 4627 epp target,target|2 " update target pointer 005224 aa 7 00000 7101 00 4628 tra pr7|0 " return 4629 005225 4630 put_fix_bin_2: 005225 aa 5 00004 2371 00 4631 ldaq work|fix_bin_generic 005226 aa 1 00000 7571 00 4632 staq target|0 " and store 005227 aa 5 00000 7221 00 4633 lxl2 work|target_precision " check overflow 005230 aa 777777 6620 03 4634 erx2 =o777777,du " -precision-1 005231 aa 000110 7370 12 4635 lls 72,x2 " 72-precision-sign 005232 0a 006226 6030 00 4636 trc size_error " too big 005233 aa 1 00002 3515 00 4637 epp target,target|2 " update target pointer 005234 aa 7 00000 7101 00 4638 tra pr7|0 " return 4639 4640 " Calculate first bit position from: -(precision-72-1)-1 4641 005235 4642 put_fix_bin_1uns_packed: 005235 4643 put_fix_bin_2uns_packed: 005235 aa 5 00000 7231 00 4644 lxl3 work|target_precision 005236 aa 5 00004 2371 00 4645 ldaq work|fix_bin_generic 005237 aa 000000 7730 13 4646 lrl 0,x3 " check overflow 005240 0a 006226 6010 00 4647 tnz size_error " leftover bits 005241 aa 777667 6220 13 4648 eax2 -73,x3 " form start bit position 005242 aa 777777 6620 03 4649 erx2 =o777777,du 005243 aa 0 03140 0605 52 4650 csl (pr,rl,x2),(pr,rl),bool(move) 005244 aa 500004 000013 4651 descb work|fix_bin_generic,x3 005245 aa 100000 000013 4652 descb target|0,x3 005246 aa 1 00000 5035 13 4653 abd target|0,x3 " update target pointer 005247 aa 7 00000 7101 00 4654 tra pr7|0 " return 4655 4656 " Packed Signed Cases 4657 4658 " Calculate first bit position from: -((precision+1)-72-1)-1 4659 005250 4660 put_fix_bin_1_packed: 005250 4661 put_fix_bin_2_packed: 005250 aa 5 00000 7231 00 4662 lxl3 work|target_precision 005251 aa 000001 6230 13 4663 eax3 1,x3 " account for sign 005252 aa 5 00004 2371 00 4664 ldaq work|fix_bin_generic 005253 aa 777667 6220 13 4665 eax2 -73,x3 " form start bit position 005254 aa 777777 6620 03 4666 erx2 =o777777,du 005255 aa 000000 7370 12 4667 lls 0,x2 " check overflow 005256 0a 006226 6030 00 4668 trc size_error " sign change due to shift 005257 aa 0 03140 0605 52 4669 csl (pr,rl,x2),(pr,rl),bool(move) 005260 aa 500004 000013 4670 descb work|fix_bin_generic,x3 005261 aa 100000 000013 4671 descb target|0,x3 005262 aa 1 00000 5035 13 4672 abd target|0,x3 " update target pointer 005263 aa 7 00000 7101 00 4673 tra pr7|0 " return 4674 " GENERIC to Float Binary Target Conversion 4675 4676 " Rounding is done to the desired precision. 4677 005264 4678 put_flt_bin_1: 005264 aa 000033 2220 03 4679 ldx2 27,du " round precision 005265 0a 005333 7010 00 4680 tsx1 load_rounded_flt_bin 005266 aa 1 00000 4551 00 4681 fst target|0 " store away 005267 aa 1 00001 3515 00 4682 epp target,target|1 " update target pointer 005270 aa 7 00000 7101 00 4683 tra pr7|0 " return 4684 4685 005271 4686 put_flt_bin_2: " target store double precision 005271 aa 000077 2220 03 4687 ldx2 63,du " round precision 005272 0a 005333 7010 00 4688 tsx1 load_rounded_flt_bin 005273 aa 1 00000 4571 00 4689 dfst target|0 " store away 005274 aa 1 00002 3515 00 4690 epp target,target|2 " update target pointer 005275 aa 7 00000 7101 00 4691 tra pr7|0 " return 4692 4693 005276 4694 put_flt_bin_1_packed: 005276 4695 put_flt_bin_2_packed: 005276 aa 5 00000 7221 00 4696 lxl2 work|target_precision " get round precision 005277 0a 005333 7010 00 4697 tsx1 load_rounded_flt_bin 005300 aa 5 00006 4571 00 4698 dfst work|flt_bin_generic 4699 005301 aa 000011 6220 12 4700 eax2 8+1,x2 " account for sign and exp 005302 aa 0 03140 0605 40 4701 csl (pr,rl),(pr,rl),bool(move) " move to target 005303 aa 500006 000012 4702 descb work|flt_bin_generic,x2 005304 aa 100000 000012 4703 descb target|0,x2 005305 aa 1 00000 5035 12 4704 abd target|0,x2 " update target pointer 005306 aa 7 00000 7101 00 4705 tra pr7|0 " return 4706 4707 4708 4709 " Output float binary generic form. 4710 005307 4711 put_flt_bin_gen: 005307 aa 5 00012 2351 00 4712 lda work|flt_bin_generic_exp " move exponent 005310 aa 1 00002 7551 00 4713 sta target|2 005311 aa 5 00012 4501 00 4714 stz work|flt_bin_generic_exp " clear for load_round 005312 aa 5 00006 2371 00 4715 ldaq work|flt_bin_generic " check for zero 005313 0a 005326 6000 00 4716 tze put_flt_bin_gen.zero 4717 005314 aa 000077 2220 03 4718 ldx2 63,du " round to 63 005315 0a 005333 7010 00 4719 tsx1 load_rounded_flt_bin 005316 aa 5 00012 4561 00 4720 ste work|flt_bin_generic_exp 005317 aa 000000 4110 03 4721 lde 0,du " clear exponent 005320 aa 1 00000 4571 00 4722 dfst target|0 " move mantissa 005321 aa 5 00012 2351 00 4723 lda work|flt_bin_generic_exp 005322 aa 000034 7310 00 4724 ars 36-8 005323 aa 1 00002 0551 00 4725 asa target|2 005324 aa 1 00004 3515 00 4726 epp target,target|4 " update target pointer 005325 aa 7 00000 7101 00 4727 tra pr7|0 4728 005326 4729 put_flt_bin_gen.zero: 005326 aa 1 00000 4501 00 4730 stz target|0 " zero output 005327 aa 1 00001 4501 00 4731 stz target|1 005330 aa 1 00002 4501 00 4732 stz target|2 005331 aa 1 00004 3515 00 4733 epp target,target|4 " update target pointer 005332 aa 7 00000 7101 00 4734 tra pr7|0 4735 " Load the float bin generic to a true float bin and round to the 4736 " precision specified. 4737 4738 " Called with: 4739 " x1 = return address. 4740 " x2 = precision to round to. 4741 005333 4742 load_rounded_flt_bin: 005333 aa 5 00012 2351 00 4743 lda work|flt_bin_generic_exp 005334 aa 000034 7350 00 4744 als 36-8 " make short exponent 005335 0a 006233 6030 00 4745 trc flt_range_error " won't fit 005336 aa 5 00012 7551 00 4746 sta work|flt_bin_generic_exp 005337 aa 5 00006 2371 00 4747 ldaq work|flt_bin_generic " get mantissa 005340 aa 5 00012 4111 00 4748 lde work|flt_bin_generic_exp " get exponent 005341 aa 000000 5730 00 4749 fno " find 0.0 005342 aa 000000 6000 11 4750 tze 0,x1 " cannot round 005343 aa 000000 1050 03 4751 cmpx5 0,du 005344 aa 000000 6000 11 4752 tze 0,x1 " no round 4753 005345 aa 5 00012 7421 00 4754 stx2 work|flt_bin_generic_exp " two word mask entries 005346 aa 000000 6230 12 4755 eax3 0,x2 005347 aa 5 00012 0631 00 4756 adx3 work|flt_bin_generic_exp 005350 aa 000000 1150 03 4757 cmpa 0,du 005351 0a 005356 6040 00 4758 tmi load_rounded_flt_bin.negative 005352 0a 010410 0770 13 4759 adaq mask_table+2,x3 " round 4760 4761 " Normalize to recover any possible overflow situation. 4762 005353 aa 000000 5730 00 4763 fno 005354 aa 004000 6340 07 4764 ldi mask_faults,dl " clear possible overflow 005355 aa 000000 7100 11 4765 tra 0,x1 4766 005356 4767 load_rounded_flt_bin.negative: 005356 aa 000000 5130 00 4768 fneg 005357 0a 010410 0770 13 4769 adaq mask_table+2,x3 " round 005360 aa 000000 5730 00 4770 fno " fix overflow 005361 aa 5 00004 7571 00 4771 staq work|fix_bin_generic " temp save 005362 aa 004000 6340 07 4772 ldi mask_faults,dl " clear possible overflow 005363 aa 400000 2350 03 4773 lda =o400000,du " generate mask 005364 aa 000000 2360 07 4774 ldq =0,dl 005365 aa 000000 7330 12 4775 lrs 0,x2 " mask for precision+sign 005366 aa 5 00004 3771 00 4776 anaq work|fix_bin_generic 005367 aa 000000 5130 00 4777 fneg 005370 aa 000000 7100 11 4778 tra 0,x1 4779 " GENERIC to Float Hexadecimal Target Conversion 4780 4781 " Here we must convert the generic flt_bin value to hexadecimal and 4782 " output it to the target. We will do a round here, since hex round is 4783 " different that normal binary round and therefore must be an additional 4784 " treatment. 4785 005371 4786 put_flt_hex_1: 005371 aa 000033 2220 03 4787 ldx2 27,du " do single prec round 005372 0a 005414 7010 00 4788 tsx1 convert_flt_bin_to_flt_hex " common conversion 005373 aa 1 00000 4551 00 4789 fst target|0 005374 aa 1 00001 3515 00 4790 epp target,target|1 " update target pointer 005375 aa 7 00000 7101 00 4791 tra pr7|0 " return 4792 4793 005376 4794 put_flt_hex_2: 005376 aa 000077 2220 03 4795 ldx2 63,du " do double prec round 005377 0a 005414 7010 00 4796 tsx1 convert_flt_bin_to_flt_hex " common conversion 005400 aa 1 00000 4571 00 4797 dfst target|0 005401 aa 1 00002 3515 00 4798 epp target,target|2 " update target pointer 005402 aa 7 00000 7101 00 4799 tra pr7|0 " return 4800 4801 005403 4802 put_flt_hex_1_packed: 005403 4803 put_flt_hex_2_packed: 005403 aa 5 00000 7221 00 4804 lxl2 work|target_precision 005404 0a 005414 7010 00 4805 tsx1 convert_flt_bin_to_flt_hex " common conversion 005405 aa 5 00006 4571 00 4806 dfst work|flt_bin_generic 005406 aa 000011 6220 12 4807 eax2 8+1,x2 " account for sign and exp 005407 aa 0 03140 0605 40 4808 csl (pr,rl),(pr,rl),bool(move) 005410 aa 500006 000012 4809 descb work|flt_bin_generic,x2 005411 aa 100000 000012 4810 descb target|0,x2 005412 aa 1 00000 5035 12 4811 abd target|0,x2 " update target pointer 005413 aa 7 00000 7101 00 4812 tra pr7|0 4813 " Convert float bin generic to rounded float hexadecimal. 4814 4815 " Common conversion routine since there are four calls to convert bin to 4816 " hex. Converts in place in the flt_bin_generic. Rounding is done if 4817 " requested by X5^=0. X2 has rounding precision. 4818 " Result after round is left normalized. 4819 " 4820 " Called by: 4821 " tsx1 convert_flt_bin_to_flt_hex 4822 " 4823 " Leaves double float hex value in EAQ. 4824 005414 4825 convert_flt_bin_to_flt_hex: 005414 aa 5 00012 3351 00 4826 lca work|flt_bin_generic_exp " form shift in x3 005415 aa 000003 3750 07 4827 ana =3,dl " mask for count 0-3 005416 aa 000000 6230 05 4828 eax3 0,al 005417 aa 5 00012 2351 00 4829 lda work|flt_bin_generic_exp " form hex exp 005420 aa 000003 0750 07 4830 ada =3,dl " correct exp ceiling 005421 aa 000002 7310 00 4831 ars 2 " divide by 4 005422 aa 000034 7350 00 4832 als 36-8 " shift to check range 005423 0a 006233 6030 00 4833 trc flt_range_error " too big 005424 aa 5 00012 7551 00 4834 sta work|flt_bin_generic_exp 005425 aa 5 00006 2371 00 4835 ldaq work|flt_bin_generic " get value 005426 0a 005445 6000 00 4836 tze c_flt_bin_to_flt_hex.zero " get normalized zero 005427 aa 000000 7330 13 4837 lrs 0,3 " hex normalize 005430 aa 5 00012 4111 00 4838 lde work|flt_bin_generic_exp " form full hex with exp 4839 4840 " Rounding is done according to PL/I rules. Round up for positive, round 4841 " down for negative. Result is left normalized. 4842 005431 aa 000000 1050 03 4843 cmpx5 0,du " see if rounding 005432 aa 000000 6000 11 4844 tze 0,x1 " none - return 005433 aa 5 00012 7421 00 4845 stx2 work|flt_bin_generic_exp " 2 word mask entries 005434 aa 000000 6230 12 4846 eax3 0,x2 005435 aa 5 00012 0631 00 4847 adx3 work|flt_bin_generic_exp 005436 0a 010410 3170 13 4848 canaq mask_table+2,x3 " if zero bits, then won't round 005437 aa 000000 6000 11 4849 tze 0,x1 005440 aa 000000 1150 07 4850 cmpa =0,dl " determine sign of mantissa 005441 0a 005447 6040 00 4851 tmi c_flt_bin_to_flt_hex.neg 4852 005442 0a 010410 0770 13 4853 adaq mask_table+2,x3 " round AQ 005443 0a 005465 6170 00 4854 tov c_flt_bin_to_flt_hex.norm_pos " normalize needed 005444 aa 000000 7100 11 4855 tra 0,x1 " return to put routine 4856 005445 4857 c_flt_bin_to_flt_hex.zero: 005445 aa 400000 4310 03 4858 fld =0.0,du " load normalized 0.0 005446 aa 000000 7100 11 4859 tra 0,x1 " return to put routine 4860 005447 4861 c_flt_bin_to_flt_hex.neg: " round down 005447 aa 000000 5330 00 4862 negl 005450 0a 010410 0770 13 4863 adaq mask_table+2,x3 " 1 bit higher 005451 0a 005453 6170 00 4864 tov c_flt_bin_to_flt_hex.norm_neg " normalize needed 005452 0a 005456 7100 00 4865 tra c_flt_bin_to_flt_hex.normal 4866 4867 " Overflow bit indicates sign changed on positive mantissa. Thus the 4868 " Logical Right shift recovers the sign bit as the carry. 4869 005453 4870 c_flt_bin_to_flt_hex.norm_neg: " shift right 4 and gen sign 005453 aa 000004 7730 00 4871 lrl 4 005454 aa 002000 4150 03 4872 ade =1b25,du " adjust exponent 005455 0a 006233 6140 00 4873 teo flt_range_error " too big rounded 005456 4874 c_flt_bin_to_flt_hex.normal: 005456 aa 5 00004 7571 00 4875 staq work|fix_bin_generic " temp save 005457 aa 400000 2350 03 4876 lda =o400000,du " generate mask 005460 aa 000000 2360 07 4877 ldq =0,dl 005461 aa 000000 7330 12 4878 lrs 0,x2 " mask for precision+sign 005462 aa 5 00004 3771 00 4879 anaq work|fix_bin_generic 005463 aa 000000 5330 00 4880 negl 005464 aa 000000 7100 11 4881 tra 0,x1 " return to put routine 4882 005465 4883 c_flt_bin_to_flt_hex.norm_pos: " shift right 4 and inc exp 005465 aa 000004 7730 00 4884 lrl 4 005466 aa 002000 4150 03 4885 ade =1b25,du 005467 0a 006233 6140 00 4886 teo flt_range_error " too big rounded 005470 aa 000000 7100 11 4887 tra 0,x1 " return to put routine 4888 " GENERIC to Float Decimal 9 Target Conversion 4889 " On entry X3 holds the length of the floating decimal number, including 4890 " sign and exponent byte. 4891 005471 4892 put_flt_dec_9: 005471 4893 put_flt_dec_9_packed: 005471 aa 5 00000 7221 00 4894 lxl2 work|target_precision 005472 aa 000002 6220 12 4895 eax2 2,x2 " form true target length 005473 aa 5 00013 2351 00 4896 lda work|flt_dec_generic_exp " range the exponent 005474 aa 000034 7350 00 4897 als 36-8 005475 0a 006252 6030 00 4898 trc decimal_range_error 005476 aa 0 00113 1005 00 4899 mlr (pr),(pr,x3) " move to generic 005477 aa 500013 600001 4900 desc9a work|flt_dec_generic_exp(3),1 005500 aa 500013 600001 4901 desc9a work|flt_dec_generic-1(3),1 005501 0a 000104 7160 15 4902 xec mvn.pr_rl.pr_rl,x5 " move and round mantissa 005502 aa 500014 000013 4903 desc9fl work|flt_dec_generic,x3 005503 aa 100000 000012 4904 desc9fl target|0,x2 005504 0a 006254 6140 00 4905 teo decimal_overflow " blew up 005505 0a 006261 6150 00 4906 teu decimal_underflow " blew up 005506 aa 1 00000 5005 12 4907 a9bd target|0,x2 " update target pointer 005507 aa 7 00000 7101 00 4908 tra pr7|0 4909 005510 4910 put_flt_dec_ext: " Float Decimal Extended Case 005510 4911 put_flt_dec_ext_packed: 005510 aa 5 00000 7221 00 4912 lxl2 work|target_precision 005511 aa 000002 6220 12 4913 eax2 2,x2 " form true target length 005512 aa 000001 1630 03 4914 sbx3 1,du " form lead sign source len 005513 0a 000104 7160 15 4915 xec mvn.pr_rl.pr_rl,x5 " move and round mantissa 005514 aa 500014 010013 4916 desc9ls work|flt_dec_generic,x3 005515 aa 100000 000012 4917 desc9fl target|0,x2 005516 0a 005534 6000 00 4918 tze put_flt_dec_ext.zero_exp 4919 4920 " Update the true exponent, account for target exponent changes due to 4921 " rounding and truncation/expansion of the mantissa. 4922 005517 aa 0 00100 1005 12 4923 mlr (pr,x2),(pr) 005520 aa 177777 600001 4924 desc9a target|-1(3),1 005521 aa 500014 000001 4925 desc9a work|flt_dec_generic,1 " RE-USE mantissa 005522 aa 5 00014 2351 00 4926 lda work|flt_dec_generic " sign extend exp 005523 aa 000001 7350 00 4927 als 1 005524 aa 000034 7310 00 4928 ars 36-8 005525 aa 5 00013 0751 00 4929 ada work|flt_dec_generic_exp " integrate with big exp 005526 aa 000033 7350 00 4930 als 36-9 " use 9-bit exponent 005527 0a 006252 6030 00 4931 trc decimal_range_error " test after exp is valid 005530 aa 5 00013 7551 00 4932 sta work|flt_dec_generic_exp 005531 aa 0 00112 1005 00 4933 mlr (pr),(pr,x2) " implant exponent 005532 aa 500013 000001 4934 desc9a work|flt_dec_generic_exp,1 005533 aa 177777 600001 4935 desc9a target|-1(3),1 005534 4936 put_flt_dec_ext.zero_exp: " take exponent planted 005534 aa 1 00000 5005 12 4937 a9bd target|0,x2 " update target pointer 005535 aa 7 00000 7101 00 4938 tra pr7|0 4939 4940 " Float Decimal 9-bit generic Case. Has leading 36-bit exponent. 4941 005536 4942 put_flt_dec_gen: 005536 aa 5 00000 7221 00 4943 lxl2 work|target_precision 005537 aa 000002 0620 03 4944 adx2 2,du " account for sign and exp 005540 aa 000001 1630 03 4945 sbx3 1,du " form lead sign source len 005541 0a 000104 7160 15 4946 xec mvn.pr_rl.pr_rl,x5 " move and round 005542 aa 500014 010013 4947 desc9ls work|flt_dec_generic,x3 " collapse/expand to target 005543 aa 500014 000012 4948 desc9fl work|flt_dec_generic,x2 005544 0a 005546 6010 00 4949 tnz put_flt_dec_gen.non_zero 005545 aa 5 00013 4501 00 4950 stz work|flt_dec_generic_exp " zero exponent 005546 4951 put_flt_dec_gen.non_zero: 005546 aa 0 00100 1005 12 4952 mlr (pr,x2),(pr) " update exponent for length 005547 aa 500013 600001 4953 desc9a work|flt_dec_generic-1(3),1 005550 aa 500004 000001 4954 desc9a work|fix_bin_generic,1 005551 aa 000001 1620 03 4955 sbx2 1,du " correct for no exponent 005552 aa 0 00140 1005 40 4956 mlr (pr,rl),(pr,rl) " move mantissa to target 005553 aa 500014 000012 4957 desc9a work|flt_dec_generic,x2 005554 aa 100001 000012 4958 desc9a target|1,x2 005555 aa 5 00004 2351 00 4959 lda work|fix_bin_generic " sign extend corrector 005556 aa 000001 7350 00 4960 als 1 005557 aa 000034 7310 00 4961 ars 36-8 005560 aa 5 00013 0751 00 4962 ada work|flt_dec_generic_exp " get exponent 005561 aa 1 00000 7551 00 4963 sta target|0 005562 aa 000003 6220 12 4964 eax2 3,x2 " set round of mantissa 005563 aa 1 00000 5005 12 4965 a9bd target|0,x2 " increment and round 005564 aa 000001 0510 03 4966 adwp target,1,du 005565 aa 7 00000 7101 00 4967 tra pr7|0 " return to call GENERIC to Float Decimal 4 Target Conversion 4968 4969 " On entry X3 holds the length of the floating decimal number, including 4970 " sign and exponent byte. The hardware exponent byte (8-bit) is 0. 4971 005566 4972 put_flt_dec_4: 005566 4973 put_flt_dec_4_packed: 005566 aa 5 00000 7221 00 4974 lxl2 work|target_precision 005567 aa 000003 6220 12 4975 eax2 3,x2 " form true target length 005570 aa 5 00013 2351 00 4976 lda work|flt_dec_generic_exp " range the exponent 005571 aa 000034 7350 00 4977 als 36-8 005572 0a 006252 6030 00 4978 trc decimal_range_error 005573 aa 0 00113 1005 00 4979 mlr (pr),(pr,x3) " move to generic 005574 aa 500013 600001 4980 desc9a work|flt_dec_generic_exp(3),1 005575 aa 500013 600001 4981 desc9a work|flt_dec_generic-1(3),1 005576 0a 000104 7160 15 4982 xec mvn.pr_rl.pr_rl,x5 " move and round mantissa 005577 aa 500014 000013 4983 desc9fl work|flt_dec_generic,x3 005600 aa 100000 040012 4984 desc4fl target|0,x2 005601 0a 006254 6140 00 4985 teo decimal_overflow " blew up 005602 0a 006254 6150 00 4986 teu decimal_overflow " blew up 005603 aa 000001 6220 12 4987 eax2 1,x2 " byte align target 005604 aa 777776 3620 03 4988 anx2 =o777776,du 005605 aa 1 00000 5025 12 4989 a4bd target|0,x2 " update target pointer 005606 aa 7 00000 7101 00 4990 tra pr7|0 4991 " GENERIC to Fixed Decimal (9-bit) Target Conversion 4992 4993 " For these conversions X3 holds the length of the float decimal number, 4994 " including the exponent and sign. 4995 " 4996 " Fixed decimal target capacity depends upon scale and precision. 4997 " We preset the floating decimal exponent to account for the fixed decimal 4998 " scale factor then do the move. If we overflow the move, then a 4999 " size is generated. 5000 5001 " 9-bit Leading Sign Case 5002 005607 5003 put_fix_dec_9ls: 005607 5004 put_fix_dec_9ls_packed: 005607 0a 005767 7020 00 5005 tsx2 load_flt_dec.target " load for conversion 005610 aa 000001 6210 11 5006 eax1 1,x1 " count in sign 005611 0a 000104 7160 15 5007 xec mvn.pr_rl.pr_rl,x5 005612 aa 500014 000013 5008 desc9fl work|flt_dec_generic,x3 005613 aa 100000 010011 5009 desc9ls target|0,x1 005614 0a 006226 6170 00 5010 tov size_error " did not fit 005615 aa 1 00000 5005 11 5011 a9bd target|0,x1 " update target pointer 005616 aa 7 00000 7101 00 5012 tra pr7|0 5013 5014 5015 " 9-bit Un-signed Case 5016 005617 5017 put_fix_dec_9uns: 005617 5018 put_fix_dec_9uns_packed: 005617 0a 005767 7020 00 5019 tsx2 load_flt_dec.target " load for conversion 005620 aa 0 55000 1065 00 5020 cmpc (pr),(),fill(minus_sign) " see if negative 005621 aa 500014 000001 5021 desc9a work|flt_dec_generic,1 005622 aa 000000 000000 5022 zero 005623 0a 006226 6000 00 5023 tze size_error " cannot put -ve in uns 005624 0a 000104 7160 15 5024 xec mvn.pr_rl.pr_rl,x5 005625 aa 500014 000013 5025 desc9fl work|flt_dec_generic,x3 005626 aa 100000 030011 5026 desc9ns target|0,x1 005627 0a 006226 6170 00 5027 tov size_error " did not fit 005630 aa 1 00000 5005 11 5028 a9bd target|0,x1 " update target pointer 005631 aa 7 00000 7101 00 5029 tra pr7|0 5030 5031 5032 5033 " 9-bit Trailing Sign Case 5034 005632 5035 put_fix_dec_9ts: 005632 5036 put_fix_dec_9ts_packed: 005632 0a 005767 7020 00 5037 tsx2 load_flt_dec.target " load for conversion 5038 005633 aa 000001 6210 11 5039 eax1 1,x1 " length of signed result 005634 0a 000104 7160 15 5040 xec mvn.pr_rl.pr_rl,x5 005635 aa 500014 000013 5041 desc9fl work|flt_dec_generic,x3 005636 aa 100000 020011 5042 desc9ts target|0,x1 005637 0a 006226 6170 00 5043 tov size_error " did not fit 005640 aa 1 00000 5005 11 5044 a9bd target|0,x1 " update target pointer 005641 aa 7 00000 7101 00 5045 tra pr7|0 5046 " GENERIC to Fixed Decimal Target Conversion (overpunched sign 9-bit) 5047 5048 5049 " Conversion of leading sign overpunched value is done by making the float 5050 " decimal generic a positive, and then moving unsigned to the high part of 5051 " the fixed_decimal value, then moving the overpunched sign to the leading 5052 " character position. 5053 " 5054 " NOTE. This uses flt_dec_generic_exp to store the original sign. 5055 " This uses fix_bin_generic to store the digit/sign index. 5056 005642 5057 put_fix_dec_9ls_ovrp: 005642 5058 put_fix_dec_9ls_ovrp_packed: 005642 0a 005767 7020 00 5059 tsx2 load_flt_dec.target " load for conversion 005643 aa 0 00100 1005 00 5060 mlr (pr),(pr) " save true sign 005644 aa 500014 000001 5061 desc9a work|flt_dec_generic,1 005645 aa 500013 000001 5062 desc9a work|flt_dec_generic_exp,1 005646 aa 053100 1004 00 5063 mlr (),(pr),fill(plus_sign) " make flt_dec positive 005647 aa 000000 000000 5064 zero 005650 aa 500014 000001 5065 desc9a work|flt_dec_generic,1 5066 005651 0a 000104 7160 15 5067 xec mvn.pr_rl.pr_rl,x5 005652 aa 500014 000013 5068 desc9fl work|flt_dec_generic,x3 005653 aa 100000 030011 5069 desc9ns target|0,x1 005654 0a 006226 6170 00 5070 tov size_error " did not fit 5071 5072 " Determine the leading digit and the sign. 5073 005655 aa 000100 1244 00 5074 scm (),(pr),mask(000) 005656 0a 001126 000012 5075 desc9a overpunch_9_digits,10 005657 aa 100000 000001 5076 desc9a target|0,1 005660 aa 5 00004 0001 00 5077 arg work|fix_bin_generic " holds value 005661 aa 5 00004 2351 00 5078 lda work|fix_bin_generic 005662 aa 0 55000 1065 00 5079 cmpc (pr),(),fill(minus_sign) " determine sign 005663 aa 500013 000001 5080 desc9a work|flt_dec_generic_exp,1 005664 aa 000000 000000 5081 zero 005665 0a 005667 6010 00 5082 tnz put_fix_dec_9ls_ovrp.pos " positive, digit as index 005666 aa 000012 0750 07 5083 ada =10,dl " increment index to negative 005667 5084 put_fix_dec_9ls_ovrp.pos: 005667 aa 000100 1004 05 5085 mlr (al),(pr) " move in overpunch sign 005670 0a 001114 000001 5086 desc9a overpunch_9_source,1 005671 aa 100000 000001 5087 desc9a target|0,1 005672 aa 1 00000 5005 11 5088 a9bd target|0,x1 " update target pointer 005673 aa 7 00000 7101 00 5089 tra pr7|0 5090 " Conversion of trailing sign overpunched value is done by making the float 5091 " decimal generic a positive, and then moving unsigned to the high part of 5092 " the fixed_decimal value, then moving the overpunched sign to the trailing 5093 " character position. 5094 " 5095 " NOTE. This uses flt_dec_generic_exp to store the original sign. 5096 " This uses fix_bin_generic to store the digit/sign index. 5097 005674 5098 put_fix_dec_9ts_ovrp: 005674 5099 put_fix_dec_9ts_ovrp_packed: 005674 0a 005767 7020 00 5100 tsx2 load_flt_dec.target " load for conversion 005675 aa 0 00100 1005 00 5101 mlr (pr),(pr) " save true sign 005676 aa 500014 000001 5102 desc9a work|flt_dec_generic,1 005677 aa 500013 000001 5103 desc9a work|flt_dec_generic_exp,1 005700 aa 053100 1004 00 5104 mlr (),(pr),fill(plus_sign) " make flt_dec positive 005701 aa 000000 000000 5105 zero 005702 aa 500014 000001 5106 desc9a work|flt_dec_generic,1 5107 005703 0a 000104 7160 15 5108 xec mvn.pr_rl.pr_rl,x5 005704 aa 500014 000013 5109 desc9fl work|flt_dec_generic,x3 005705 aa 100000 030011 5110 desc9ns target|0,x1 005706 0a 006226 6170 00 5111 tov size_error " did not fit 5112 5113 " Determine the trailing digit and the sign. 5114 005707 aa 000111 1244 00 5115 scm (),(pr,x1),mask(000) 005710 0a 001126 000012 5116 desc9a overpunch_9_digits,10 005711 aa 177777 600001 5117 desc9a target|-1(3),1 005712 aa 5 00004 0001 00 5118 arg work|fix_bin_generic " holds value 005713 aa 5 00004 2351 00 5119 lda work|fix_bin_generic 005714 aa 0 55000 1065 00 5120 cmpc (pr),(),fill(minus_sign) " determine sign 005715 aa 500013 000001 5121 desc9a work|flt_dec_generic_exp,1 005716 aa 000000 000000 5122 zero 005717 0a 005721 6010 00 5123 tnz put_fix_dec_9ts_ovrp.pos " positive, digit as index 005720 aa 000012 0750 07 5124 ada =10,dl " increment index to negative 005721 5125 put_fix_dec_9ts_ovrp.pos: 005721 aa 000111 1004 05 5126 mlr (al),(pr,x1) " move in overpunch sign 005722 0a 001114 000001 5127 desc9a overpunch_9_source,1 005723 aa 177777 600001 5128 desc9a target|-1(3),1 005724 aa 1 00000 5005 11 5129 a9bd target|0,x1 " update target pointer 005725 aa 7 00000 7101 00 5130 tra pr7|0 5131 " GENERIC to Fixed Decimal (4-bit) Target Conversion 5132 5133 " For these conversions X3 holds the length of the float decimal number, 5134 " including the exponent and sign. 5135 " 5136 " Fixed decimal target capacity depends upon scale and precision. 5137 " We preset the floating decimal exponent to account for the fixed decimal 5138 " scale factor then do the move. If we overflow the move, then a 5139 " size is generated. 5140 5141 " 4-bit Leading Sign Case 5142 005726 5143 put_fix_dec_4ls: 005726 5144 put_fix_dec_4ls_packed: 005726 0a 005767 7020 00 5145 tsx2 load_flt_dec.target " load for conversion 005727 aa 000001 6210 11 5146 eax1 1,x1 " count in sign 005730 0a 000104 7160 15 5147 xec mvn.pr_rl.pr_rl,x5 005731 aa 500014 000013 5148 desc9fl work|flt_dec_generic,x3 005732 aa 100000 050011 5149 desc4ls target|0,x1 005733 0a 006226 6170 00 5150 tov size_error " did not fit 005734 aa 000001 6210 11 5151 eax1 1,x1 " byte align target 005735 aa 777776 3610 03 5152 anx1 =o777776,du 005736 aa 1 00000 5025 11 5153 a4bd target|0,x1 " update target pointer 005737 aa 7 00000 7101 00 5154 tra pr7|0 5155 5156 " 4-bit Un-signed Case 5157 005740 5158 put_fix_dec_4uns: 005740 5159 put_fix_dec_4uns_packed: 005740 0a 005767 7020 00 5160 tsx2 load_flt_dec.target " load for conversion 005741 aa 0 55000 1065 00 5161 cmpc (pr),(),fill(minus_sign) " see if negative 005742 aa 500014 000001 5162 desc9a work|flt_dec_generic,1 005743 aa 000000 000000 5163 zero 005744 0a 006226 6000 00 5164 tze size_error " cannot put -ve in uns 005745 0a 000104 7160 15 5165 xec mvn.pr_rl.pr_rl,x5 005746 aa 500014 000013 5166 desc9fl work|flt_dec_generic,x3 005747 aa 100000 070011 5167 desc4ns target|0,x1 005750 0a 006226 6170 00 5168 tov size_error " did not fit 005751 aa 000001 6210 11 5169 eax1 1,x1 " byte align target 005752 aa 777776 3610 03 5170 anx1 =o777776,du 005753 aa 1 00000 5025 11 5171 a4bd target|0,x1 " update target pointer 005754 aa 7 00000 7101 00 5172 tra pr7|0 5173 5174 " 4-bit Trailing Sign Case 5175 5176 005755 5177 put_fix_dec_4ts: 005755 5178 put_fix_dec_4ts_packed: 005755 0a 005767 7020 00 5179 tsx2 load_flt_dec.target " load for conversion 005756 aa 000001 6210 11 5180 eax1 1,x1 " account for sign 005757 0a 000104 7160 15 5181 xec mvn.pr_rl.pr_rl,x5 005760 aa 500014 000013 5182 desc9fl work|flt_dec_generic,x3 005761 aa 100000 060011 5183 desc4ts target|0,x1 005762 0a 006226 6170 00 5184 tov size_error " did not fit 005763 aa 000001 6210 11 5185 eax1 1,x1 " byte align target 005764 aa 777776 3610 03 5186 anx1 =o777776,du 005765 aa 1 00000 5025 11 5187 a4bd target|0,x1 " update target pointer 005766 aa 7 00000 7101 00 5188 tra pr7|0 5189 " Load and start conversion of flt_dec_generic to fixed decimal target 5190 5191 5192 " Load float decimal information and setup precision of target. 5193 " Precurser of most float to fixed target routines. 5194 " 5195 " Calling sequence: 5196 " tsx2 load_flt_dec.target 5197 " 5198 " Returns: 5199 " 1. True scaled exponent for floating decimal number in the hardware 5200 " exponent field of the flt_dec_generic variable. This has the 5201 " exponent adjusted for the scale of the target fixed decimal. 5202 " 2. X1 holds to target precision (does not include sign). 5203 " 3. X3 holds length of flt_dec_generic, including sign and exponent. 5204 005767 5205 load_flt_dec.target: 005767 aa 5 00000 2351 00 5206 lda work|target_scale " setup scale offset 005770 aa 000022 7310 00 5207 ars 18 005771 aa 5 00013 0751 00 5208 ada work|flt_dec_generic_exp " get exponent range 005772 aa 5 00013 7551 00 5209 sta work|flt_dec_generic_exp " save for testing 005773 aa 000034 7350 00 5210 als 36-8 " fit to normal 8-bit 005774 0a 006004 6030 00 5211 trc load_flt_dec.range " exponent won't fit 005775 aa 000001 7710 00 5212 arl 1 005776 5213 load_flt_dec.range_continue: " re-enter with max neg exp 005776 aa 5 00013 7551 00 5214 sta work|flt_dec_generic_exp 005777 aa 0 00113 1005 00 5215 mlr (pr),(pr,x3) " plant true scaled exp 006000 aa 500013 000001 5216 desc9a work|flt_dec_generic_exp,1 006001 aa 500013 600001 5217 desc9a work|flt_dec_generic-1(3),1 " as hardware exponent 006002 aa 5 00000 7211 00 5218 lxl1 work|target_precision 006003 aa 000000 7100 12 5219 tra 0,x2 5220 5221 " Exponent won't fit in 7-bits, see if too big or too small. 5222 006004 5223 load_flt_dec.range: 006004 aa 777777 6210 13 5224 eax1 -1,x3 " size less exponent 006005 aa 0 00000 3035 40 5225 cmpn (pr,rl),() " Is number zero? 006006 aa 500014 010011 5226 desc9ls work|flt_dec_generic,x1 " If so good by definition 006007 0a 003231 010002 5227 desc9ls char_zero,2 006010 0a 006013 6000 00 5228 tze load_flt_dec.range.fix " No: edit number with mvne 006011 aa 5 00013 2351 00 5229 lda work|flt_dec_generic_exp " get exponent 006012 0a 006226 6050 00 5230 tpl size_error " it was too big 006013 5231 load_flt_dec.range.fix: 006013 aa 400000 2350 03 5232 lda =o400000,du " force max neg exponent 006014 0a 005776 7100 00 5233 tra load_flt_dec.range_continue 5234 " GENERIC to Bit Target Conversion 5235 5236 " Bit to target conversion. Expects pointer to bit string in generic and 5237 " length in X3. 5238 " 5239 " For varying bit, the target pointer is one beyond the length word, 5240 " so we negative index to the length word. 5241 " 5242 5243 " NOTE. In all cases we return immediately to the user after unmasking. 5244 006015 5245 put_varying_bit: 006015 aa 000000 6350 13 5246 eaa 0,x3 " get length of bits 006016 aa 000022 7310 00 5247 ars 18 " position to DL 006017 aa 1 77777 7551 00 5248 sta target|-1 " save varying length 006020 aa 5 00000 7221 00 5249 lxl2 work|target_precision 006021 aa 5 00000 7421 00 5250 stx2 work|target_precision 006022 aa 5 00000 1031 00 5251 cmpx3 work|target_precision " take min (length, prec) 006023 0a 006027 6044 00 5252 tmoz put_bit " have min 006024 aa 5 00000 7221 00 5253 lxl2 work|target_precision " get min 006025 aa 1 77777 4421 00 5254 sxl2 target|-1 " save target length 006026 0a 006030 7100 00 5255 tra put_bit.common.aligned " copy all 5256 006027 5257 put_bit: " determine max copy length 006027 aa 5 00000 7221 00 5258 lxl2 work|target_precision 5259 006030 5260 put_bit.common.aligned: " Remove padded reference 006030 aa 1 00000 4501 00 5261 stz target|0 " pre-clear 1st word 006031 aa 000044 1020 03 5262 cmpx2 36,du 006032 0a 006036 6044 00 5263 tmoz put_bit.common " if one word or less 006033 aa 1 00001 4501 00 5264 stz target|1 " pre_clear 2nd word 006034 0a 006036 7100 00 5265 tra put_bit.common 5266 006035 5267 put_bit_packed: 006035 aa 5 00000 7221 00 5268 lxl2 work|target_precision 006036 5269 put_bit.common: 006036 aa 0 03140 0605 40 5270 csl (pr,rl),(pr,rl),bool(move),fill(0) 006037 aa 200000 000013 5271 descb generic|0,x3 006040 aa 100000 000012 5272 descb target|0,x2 006041 0a 000056 7100 00 5273 tra unmask_exit " return to user 5274 " GENERIC to Character Target Conversion 5275 5276 " Character target routine. Expects pointer to source in generic and 5277 " length in X3. These routines return directly to the user. 5278 006042 5279 put_varying_char: 006042 aa 777777 2350 07 5280 lda =o777777,dl " mask for string length 006043 aa 5 00000 3551 00 5281 ansa work|target_precision 006044 aa 000000 6350 13 5282 eaa 0,x3 006045 aa 000022 7310 00 5283 ars 18 006046 aa 5 00000 1151 00 5284 cmpa work|target_precision " limit to length of target 006047 0a 006051 6044 00 5285 tmoz put_varying_char.in_range 006050 aa 5 00000 2351 00 5286 lda work|target_precision 006051 5287 put_varying_char.in_range: 006051 aa 1 77777 7551 00 5288 sta target|-1 " save string length 006052 0a 006055 7100 00 5289 tra put_char.common " move and fill all 5290 5291 " Put simple fixed length character string. 5292 006053 5293 put_char: 006053 5294 put_char_packed: 006053 aa 5 00000 2351 00 5295 lda work|target_precision 006054 aa 777777 3750 07 5296 ana =o777777,dl " mask for just length 5297 5298 " Copy string to target, filling with spaces. 5299 006055 5300 put_char.common: 006055 aa 0 40140 1005 40 5301 mlr (pr,rl),(pr,rl),fill(blank) " move to target 006056 aa 200000 000013 5302 desc9a generic|0,x3 006057 aa 100000 000005 5303 desc9a target|0,al 006060 0a 000056 7100 00 5304 tra unmask_exit " return direct to user 5305 " ERROR BRANCHES 5306 5307 " The following branches all signal the conversion 5308 " condition. On entry, the Q contains the current 5309 " index into the string being converted. 5310 5311 " oncodes are documented and determined according to the ASCII segment 5312 " >sss>oncode_messages_ 5313 006061 5314 error_191: 006061 aa 000277 2350 07 5315 lda 191,dl " Bin digit not 0 or 1 006062 0a 006064 7100 00 5316 tra error_xxx 5317 006063 5318 error_201: 006063 aa 000311 2350 07 5319 lda 201,dl " no digit after d/e/f 5320 006064 5321 error_xxx: 006064 aa 000001 0760 07 5322 adq 1,dl " get pl1 index 006065 aa 5 00001 4501 00 5323 stz work|source_string_length " restore string length 006066 aa 5 00150 7221 00 5324 lxl2 work|original_source_length 006067 aa 5 00001 4421 00 5325 sxl2 work|source_string_length 006070 0a 006124 7010 00 5326 tsx1 conversion_error 006071 0a 003521 7100 00 5327 tra char_to_arithmetic_restart 5328 006072 5329 error_202: 006072 aa 000312 2350 07 5330 lda 202,dl " no digit in a numeric field 006073 0a 006064 7100 00 5331 tra error_xxx 5332 006074 5333 error_203: 006074 aa 000313 2350 07 5334 lda 203,dl " illegal char after numeric field 006075 0a 006064 7100 00 5335 tra error_xxx 5336 006076 5337 error_204: 006076 aa 000314 2350 07 5338 lda 204,dl " too many decimal points 006077 0a 006064 7100 00 5339 tra error_xxx 5340 006100 5341 error_205: 006100 aa 000400 2350 07 5342 lda 256,dl " force to 256 character limit 006101 aa 5 00150 7551 00 5343 sta work|original_source_length " save for conversion error 006102 aa 000315 2350 07 5344 lda 205,dl " >256 chars to convert 006103 0a 006064 7100 00 5345 tra error_xxx 5346 006104 5347 error_207: 006104 aa 000317 2350 07 5348 lda 207,dl " too many exponents 006105 0a 006064 7100 00 5349 tra error_xxx 5350 006106 5351 error_208: 006106 aa 000320 2350 07 5352 lda 208,dl " scale factor too big 006107 0a 006064 7100 00 5353 tra error_xxx 5354 006110 5355 error_209: 006110 aa 000321 2350 07 5356 lda 209,dl " scale factor too small 006111 0a 006064 7100 00 5357 tra error_xxx 5358 006112 5359 error_211: 006112 aa 000323 2350 07 5360 lda 211,dl " wrong character after "i" 006113 0a 006064 7100 00 5361 tra error_xxx 5362 006114 5363 error_213: 006114 aa 000325 2350 07 5364 lda 213,dl " too many digits in exponent 006115 0a 006064 7100 00 5365 tra error_xxx 5366 006116 5367 error_214: 006116 aa 000326 2350 07 5368 lda 214,dl " no digits in mantissa 006117 0a 006064 7100 00 5369 tra error_xxx 5370 006120 5371 error_218: 006120 aa 000332 2350 07 5372 lda 218,dl " prec > dec(59) or bin(71) 006121 0a 006064 7100 00 5373 tra error_xxx 5374 006122 5375 error_219: 006122 aa 000333 2350 07 5376 lda 219,dl " 2nd half of complex number must be imaginary 006123 0a 006064 7100 00 5377 tra error_xxx 5378 " SIGNALLING SUBROUTINES 5379 " 5380 " subroutine to signal conversion conditions 5381 " calling sequence is 5382 " epp generic,character_string 5383 " lda oncode 5384 " ldq onchar_index 5385 " tsx1 conversion_error 5386 " 5387 " Presumes work|source_string_length is length of string of error 5388 " Presumes availability of work|original_source pointer area. 5389 " work|source_string_length is fixed bin (35) length. 5390 " 5391 " When returns, source pointer is changed to point to onsource area 5392 " of stack extension, to permit user to change it. 5393 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " 5394 006124 5395 conversion_error: 006124 aa 5 00044 6535 00 5396 spri7 work|error_return " save return ptr 006125 aa 6 00000 3731 00 5397 epbp7 sp|0 " so we can get ptr to stack base again 006126 aa 6 00037 4401 00 5398 sxl0 sp|stack_frame.operator_ret_ptr " save x0 for default_error_handler_ 006127 aa 5 00002 2341 00 5399 szn work|original_source " already extended? 006130 0a 006144 6010 00 5400 tnz have_extension " yes - use it 006131 aa 7 00024 3701 20 5401 epp4 sb|stack_header.stack_end_ptr,* 006132 aa 4 00200 3701 00 5402 epp4 pr4|error_extension " extend stack 006133 aa 7 00024 6501 00 5403 spri4 sb|stack_header.stack_end_ptr 006134 aa 6 00022 6501 00 5404 spri4 sp|stack_frame.next_sp 006135 aa 4 77600 3701 00 5405 epp4 pr4|-error_extension 006136 aa 5 00001 7201 00 5406 lxl0 work|source_string_length " make copy of source for signalling 006137 aa 0 00140 1005 40 5407 mlr (pr,rl),(pr,rl) 006140 aa 200000 000010 5408 desc9a generic|0,x0 006141 aa 400100 000010 5409 desc9a pr4|onsource,x0 006142 aa 5 00002 5441 00 5410 sprp4 work|original_source " remember ptr to extension 006143 aa 4 00100 3521 00 5411 epp generic,pr4|onsource " change onsource ptr 006144 5412 have_extension: 006144 aa 5 00001 1161 00 5413 cmpq work|source_string_length " make sure onindex is in range 006145 0a 006147 6044 00 5414 tmoz conversion_error.in_range 006146 aa 5 00001 2361 00 5415 ldq work|source_string_length 5416 006147 5417 conversion_error.in_range: 006147 aa 5 00002 7641 00 5418 lprp4 work|original_source " get ptr to old extension 006150 aa 4 00000 2541 00 5419 spri pr4|save_ptrs " now save ptrs 006151 aa 4 00020 7531 00 5420 sreg pr4|save_regs " and registers 5421 006152 0a 006344 3500 00 5422 epp0 null " build arg list 006153 aa 4 00034 2501 00 5423 spri0 pr4|arglist+2 " ARG 1 - null 006154 0a 006352 3500 00 5424 epp0 my_name 006155 aa 4 00036 2501 00 5425 spri0 pr4|arglist+4 " ARG 2 - ptr to "any_to_any_" 006156 aa 4 00024 3501 00 5426 epp0 pr4|oncode 006157 aa 4 00040 2501 00 5427 spri0 pr4|arglist+6 " ARG 3 - oncode 006160 aa 4 00004 3501 00 5428 epp0 pr4|onsource_ptr 006161 aa 4 00042 2501 00 5429 spri0 pr4|arglist+8 " ARG 4 - ptr to source string 006162 0a 010752 3500 00 5430 epp0 =1 006163 aa 4 00044 2501 00 5431 spri0 pr4|arglist+10 " ARG 5 - start character (1) 006164 aa 5 00001 3501 00 5432 epp0 work|source_string_length 006165 aa 4 00046 2501 00 5433 spri0 pr4|arglist+12 " ARG 6 - len of source string 006166 aa 4 00025 3501 00 5434 epp0 pr4|onchar_index 006167 aa 4 00050 2501 00 5435 spri0 pr4|arglist+14 " ARG 7 - index of char error 5436 006170 0a 006360 3500 00 5437 epp0 pointer_desc " fill in descriptors 006171 aa 4 00052 2501 00 5438 spri0 pr4|arglist+16 " ARG 1 - pointer 006172 aa 4 00060 2501 00 5439 spri0 pr4|arglist+22 " ARG 4 - pointer 006173 0a 006361 3500 00 5440 epp0 my_name_desc 006174 aa 4 00054 2501 00 5441 spri0 pr4|arglist+18 " ARG 2 - character (11) packed 006175 0a 006355 3500 00 5442 epp0 fixbin_15_desc 006176 aa 4 00056 2501 00 5443 spri0 pr4|arglist+20 " ARG 3 - fixed bin (15) 006177 aa 4 00062 2501 00 5444 spri0 pr4|arglist+24 " ARG 5 - fixed bin (15) 006200 aa 4 00064 2501 00 5445 spri0 pr4|arglist+26 " ARG 6 - fixed bin (15) 006201 aa 4 00066 2501 00 5446 spri0 pr4|arglist+28 " ARG 7 - fixed bin (15) 006202 0a 006350 2370 00 5447 ldaq conversion_arg_header " 7 arguments, 7 descriptors 006203 2a 000010 6200 00 5448 eax0 ce_link " get routine to call 006204 aa 4 00000 3521 00 5449 epp2 pr4|0 " use PR2 for rest 5450 006205 5451 call_it: 006205 aa 000004 2750 07 5452 ora =4,dl 006206 aa 2 00032 7571 00 5453 staq pr2|arglist " comple arglist 006207 0a 006207 2130 00 5454 epaq * " get our linkage ptr 006210 aa 7 00026 7641 61 5455 lprplp sb|stack_header.lot_ptr,*au 006211 aa 2 00032 3501 00 5456 epp0 pr2|arglist 006212 aa 6 00024 3571 00 5457 stcd sp|stack_frame.return_ptr 006213 aa 4 00000 7131 30 5458 callsp lp|0,0* " call error routine 5459 " 006214 aa 6 00046 3525 20 5460 epbp2 sp|tbp,* " restore original value 006215 aa 6 00024 2521 00 5461 spri2 sp|stack_frame.return_ptr " of return pointer 006216 aa 7 00024 3521 20 5462 epp2 sb|stack_header.stack_end_ptr,* " get ptr to extension 006217 aa 2 77600 3521 00 5463 epp2 pr2|-error_extension 006220 aa 2 00020 0731 00 5464 lreg pr2|save_regs 006221 aa 2 00000 1731 00 5465 lpri pr2|save_ptrs " restores generic ptr 006222 aa 5 00044 3735 20 5466 epp7 work|error_return,* 006223 aa 6 00037 7201 00 5467 lxl0 sp|stack_frame.operator_ret_ptr " restore x0 006224 aa 6 00037 4501 00 5468 stz sp|stack_frame.operator_ret_ptr " and clear switch 006225 aa 000000 7100 11 5469 tra 0,1 5470 " 5471 " signal size error 5472 " 006226 5473 size_error: 006226 aa 001277 2350 07 5474 lda =703,dl " size condition raised 006227 aa 000004 2360 07 5475 ldq =4,dl 006230 0a 006363 3700 00 5476 epp4 size_name 006231 0a 006300 7010 00 5477 tsx1 signal_from_ops 006232 aa 7 00000 7101 00 5478 tra 7|0 5479 5480 5481 " Floating point range errors. 5482 006233 5483 flt_range_error: 006233 aa 5 00012 2351 00 5484 lda work|flt_bin_generic_exp " see if positive or negative 006234 0a 006242 6040 00 5485 tmi underflow_error " underflow 5486 " tra overflow_error " overflow 5487 5488 " signal overflow error 5489 " 006235 5490 overflow_error: 006235 aa 001301 2350 07 5491 lda =705,dl " overflow condition raised 006236 aa 000010 2360 07 5492 ldq =8,dl 006237 0a 006364 3700 00 5493 epp4 overflow_name 006240 0a 006300 7010 00 5494 tsx1 signal_from_ops 006241 0a 006246 7100 00 5495 tra store_float_bin_zero 5496 " 5497 " signal underflow condition 5498 " 006242 5499 underflow_error: 006242 aa 001302 2350 07 5500 lda =706,dl " underflow condition raised 006243 aa 000011 2360 07 5501 ldq =9,dl 006244 0a 006366 3700 00 5502 epp4 underflow_name 006245 0a 006300 7010 00 5503 tsx1 signal_from_ops 006246 5504 store_float_bin_zero: " zero float bin and finish 006246 aa 5 00012 4501 00 5505 stz work|flt_bin_generic_exp 006247 aa 5 00006 4501 00 5506 stz work|flt_bin_generic 006250 aa 5 00007 4501 00 5507 stz work|flt_bin_generic+1 006251 0a 001600 7100 00 5508 tra flt_bin_generic_conversion 5509 5510 5511 5512 " Decimal fixed/float range errors. 5513 006252 5514 decimal_range_error: 006252 aa 5 00013 2351 00 5515 lda work|flt_dec_generic_exp " see if positive or negative 006253 0a 006261 6040 00 5516 tmi decimal_underflow " underflow 5517 " tra decimal_overflow " overflow 5518 5519 " 5520 " signal overflow for conversion to decimal 5521 " 006254 5522 decimal_overflow: 006254 aa 001301 2350 07 5523 lda =705,dl " overflow condition raised 006255 aa 000010 2360 07 5524 ldq =8,dl 006256 0a 006364 3700 00 5525 epp4 overflow_name 006257 0a 006300 7010 00 5526 tsx1 signal_from_ops 006260 0a 006265 7100 00 5527 tra force_zero 5528 " 5529 " signal underflow for conversion to decimal 5530 " 006261 5531 decimal_underflow: 006261 aa 001302 2350 07 5532 lda =706,dl underflow condition raised 006262 aa 000011 2360 07 5533 ldq =9,dl 006263 0a 006366 3700 00 5534 epp4 underflow_name 006264 0a 006300 7010 00 5535 tsx1 signal_from_ops 006265 5536 force_zero: " Zero GENERIC float decimal 006265 aa 000012 2230 03 5537 ldx3 default_flt_dec_p,du " length of decimal 006266 aa 000140 3004 00 5538 mvn (),(pr,rl) 006267 0a 000103 010002 5539 desc9ls dec_zero,2 006270 aa 500014 000013 5540 desc9fl work|flt_dec_generic,x3 006271 aa 5 00013 4501 00 5541 stz work|flt_dec_generic_exp 006272 0a 002004 7100 00 5542 tra flt_dec_generic_conversion 5543 5544 " 5545 " signal error condition for unimplemented conversion 5546 " 006273 5547 get_ERROR: 006273 5548 get_ERROR_packed: 006273 5549 put_ERROR: 006273 5550 put_ERROR_packed: 5551 5552 " Bad data types. 5553 006273 5554 get_varying_char_packed: 006273 5555 get_varying_bit_packed: 006273 5556 put_varying_char_packed: 006273 5557 put_varying_bit_packed: 006273 5558 get_flt_dec_gen_packed: 006273 5559 put_flt_dec_gen_packed: 006273 5560 get_flt_bin_gen_packed: 006273 5561 put_flt_bin_gen_packed: 5562 006273 5563 error_bad_type: 006273 aa 000637 2350 07 5564 lda =415,dl attempted invalid or unimp conversion 006274 aa 000005 2360 07 5565 ldq =5,dl = length ("error") 006275 0a 006371 3700 00 5566 epp4 error_name 006276 0a 006300 7010 00 5567 tsx1 signal_from_ops do it 006277 aa 7 00000 7101 00 5568 tra pr7|0 standard action is to ignore conversion Signal an error condition from the operators. 5569 5570 " All conditions other than conversion error come through here. 5571 " We do an error extension of the stack to create an argument/descriptor 5572 " area for the call. Descriptors are filled in to make trace-stack 5573 " cleaner. 5574 006300 5575 signal_from_ops: 006300 aa 6 00037 4401 00 5576 sxl0 sp|stack_frame.operator_ret_ptr " x0 for default_error_handler 006301 aa 5 00044 6535 00 5577 spri7 work|error_return 5578 5579 " Error extension of stack for ERROR_EXTENSION words. 5580 006302 aa 6 00000 3731 00 5581 epbp7 sp|0 " get stack header 006303 aa 7 00024 3521 20 5582 epp2 sb|stack_header.stack_end_ptr,* 006304 aa 2 00200 3521 00 5583 epp2 pr2|error_extension 006305 aa 7 00024 2521 00 5584 spri2 sb|stack_header.stack_end_ptr 006306 aa 6 00022 2521 00 5585 spri2 sp|stack_frame.next_sp 006307 aa 2 77600 3521 00 5586 epp2 pr2|-error_extension " save end of stack ptr 5587 5588 " Save all registers and pick up arguments from them. 5589 006310 aa 2 00000 2541 00 5590 spri pr2|save_ptrs 006311 aa 2 00020 7531 00 5591 sreg pr2|save_regs 5592 5593 " Create argument list. 5594 006312 aa 2 00034 6501 00 5595 spri4 pr2|arglist+2 " ARG 1 - ptr to condition name 006313 aa 2 00025 3501 00 5596 epp0 pr2|name_length 006314 aa 2 00036 2501 00 5597 spri0 pr2|arglist+4 " ARG 2 - len of condition name 006315 aa 6 00046 3501 70 5598 epp0 sp|tbp,*0 006316 aa 0 77777 3501 00 5599 epp0 0|-1 006317 aa 2 00030 2501 00 5600 spri0 pr2|call_ptr 006320 aa 2 00030 3501 00 5601 epp0 pr2|call_ptr 006321 aa 2 00040 2501 00 5602 spri0 pr2|arglist+6 " ARG 3 - ptr to caller 006322 aa 2 00024 3501 00 5603 epp0 pr2|oncode 006323 aa 2 00042 2501 00 5604 spri0 pr2|arglist+8 " ARG 4 - oncode value 006324 0a 006344 3500 00 5605 epp0 null 006325 aa 2 00044 2501 00 5606 spri0 pr2|arglist+10 " ARG 5 - null 5607 5608 " Build descriptors. 5609 006326 0a 006362 0760 00 5610 adq string_desc " form character descriptor 006327 aa 2 00062 7561 00 5611 stq pr2|arglist+24 " store away 006330 aa 2 00062 3501 00 5612 epp0 pr2|arglist+24 006331 aa 2 00046 2501 00 5613 spri0 pr2|arglist+12 " ARG 1 - character (n) 006332 0a 006356 3500 00 5614 epp0 fixbin_17_desc 006333 aa 2 00050 2501 00 5615 spri0 pr2|arglist+14 " ARG 2 - condition string len 006334 0a 006357 3500 00 5616 epp0 fixbin_35_desc 006335 aa 2 00054 2501 00 5617 spri0 pr2|arglist+18 " ARG 4 - oncode 006336 0a 006360 3500 00 5618 epp0 pointer_desc 006337 aa 2 00052 2501 00 5619 spri0 pr2|arglist+16 " ARG 3 - pointer 006340 aa 2 00056 2501 00 5620 spri0 pr2|arglist+20 " ARG 5 - pointer 006341 0a 006346 2370 00 5621 ldaq ops_arg_header " 5 arguments, 5 descriptors 006342 2a 000012 6200 00 5622 eax0 fo_link " get routine to call 006343 0a 006205 7100 00 5623 tra call_it 5624 " Error call tables and data. 5625 5626 " Various constants required for setting up pointers, descriptors and 5627 " character strings for error calls. 5628 5629 even 006344 aa 077777 000043 5630 null: its -1,1,n 006345 aa 000001 000000 006346 5631 ops_arg_header: 006346 aa 000012 000000 5632 vfd 17/5,1/0,18/0 " 5 args, call type filled later 006347 aa 000012 000000 5633 vfd 17/5,19/0 " 5 descriptors 006350 5634 conversion_arg_header: 006350 aa 000016 000000 5635 vfd 17/7,1/0,18/0 " 7 args, call type filled later 006351 aa 000016 000000 5636 vfd 17/7,19/0 " 7 descriptors 5637 " 006352 aa 141 156 171 137 5638 my_name: aci "any_to_any_" 006353 aa 164 157 137 141 006354 aa 156 171 137 000 5639 " 006355 5640 fixbin_15_desc: 006355 aa 404000 000017 5641 oct 404000000017 " fix bin 15 006356 5642 fixbin_17_desc: 006356 aa 404000 000021 5643 oct 404000000021 " fix bin 17 006357 5644 fixbin_35_desc: 006357 aa 404000 000043 5645 oct 404000000043 " fix bin 35 006360 5646 pointer_desc: 006360 aa 464000 000000 5647 oct 464000000000 " pointer 006361 5648 my_name_desc: 006361 aa 526000 000013 5649 oct 526000000013 " char 11 006362 5650 string_desc: 006362 aa 526000 000000 5651 oct 526000000000 " string (*) desc len=0 5652 " 006363 5653 size_name: 006363 aa 163 151 172 145 5654 aci "size" 006364 5655 overflow_name: 006364 aa 157 166 145 162 5656 aci "overflow" 006365 aa 146 154 157 167 006366 5657 underflow_name: 006366 aa 165 156 144 145 5658 aci "underflow" 006367 aa 162 146 154 157 006370 aa 167 000 000 000 006371 5659 error_name: 006371 aa 145 162 162 157 5660 aci "error" 006372 aa 162 000 000 000 5661 " 000010 5662 link ce_link,pl1_signal_conversion_$pl1_signal_conversion_ 000012 5663 link fo_link,|[pl1_signal_from_ops_] 5664 " Two table for fixed binary conversion. 5665 5666 5667 include two_table 006373 aa 020 000 000 000 5-1 two_0: ac4 "1" 006374 aa 040 000 000 000 5-2 two_1: ac4 "2" 006375 aa 100 000 000 000 5-3 two_2: ac4 "4" 006376 aa 200 000 000 000 5-4 two_3: ac4 "8" 006377 aa 026 000 000 000 5-5 two_4: ac4 "16" 006400 aa 062 000 000 000 5-6 two_5: ac4 "32" 006401 aa 144 000 000 000 5-7 two_6: ac4 "64" 006402 aa 022 200 000 000 5-8 two_7: ac4 "128" 006403 aa 045 140 000 000 5-9 two_8: ac4 "256" 006404 aa 121 040 000 000 5-10 two_9: ac4 "512" 006405 aa 020 044 000 000 5-11 two_10: ac4 "1024" 006406 aa 040 110 000 000 5-12 two_11: ac4 "2048" 006407 aa 100 226 000 000 5-13 two_12: ac4 "4096" 006410 aa 201 222 000 000 5-14 two_13: ac4 "8192" 006411 aa 026 070 100 000 5-15 two_14: ac4 "16384" 006412 aa 062 166 200 000 5-16 two_15: ac4 "32768" 006413 aa 145 123 140 000 5-17 two_16: ac4 "65536" 006414 aa 023 020 162 000 5-18 two_17: ac4 "131072" 006415 aa 046 041 104 000 5-19 two_18: ac4 "262144" 006416 aa 122 102 210 000 5-20 two_19: ac4 "524288" 006417 aa 020 110 127 140 5-21 two_20: ac4 "1048576" 006420 aa 040 227 025 040 5-22 two_21: ac4 "2097152" 006421 aa 101 224 060 100 5-23 two_22: ac4 "4194304" 006422 aa 203 210 140 200 5-24 two_23: ac4 "8388608" 006423 aa 026 167 162 026 5-25 two_24: ac4 "16777216" 006424 aa 063 125 104 062 5-26 two_25: ac4 "33554432" 006425 aa 147 020 210 144 5-27 two_26: ac4 "67108864" 006426 aa 023 102 027 162 5-28 two_27: ac4 "134217728" 006427 aa 200 000 000 000 006430 aa 046 204 065 105 5-29 two_28: ac4 "268435456" 006431 aa 140 000 000 000 006432 aa 123 150 160 221 5-30 two_29: ac4 "536870912" 006433 aa 040 000 000 000 006434 aa 020 163 164 030 5-31 two_30: ac4 "1073741824" 006435 aa 044 000 000 000 006436 aa 041 107 110 066 5-32 two_31: ac4 "2147483648" 006437 aa 110 000 000 000 006440 aa 102 224 226 162 5-33 two_32: ac4 "4294967296" 006441 aa 226 000 000 000 006442 aa 205 211 223 105 5-34 two_33: ac4 "8589934592" 006443 aa 222 000 000 000 006444 aa 027 027 230 151 5-35 two_34: ac4 "17179869184" 006445 aa 030 100 000 000 006446 aa 064 065 227 070 5-36 two_35: ac4 "34359738368" 006447 aa 066 200 000 000 006450 aa 150 161 224 166 5-37 two_36: ac4 "68719476736" 006451 aa 163 140 000 000 006452 aa 023 164 070 225 5-38 two_37: ac4 "137438953472" 006453 aa 064 162 000 000 006454 aa 047 110 167 220 5-39 two_38: ac4 "274877906944" 006455 aa 151 104 000 000 006456 aa 124 227 125 201 5-40 two_39: ac4 "549755813888" 006457 aa 070 210 000 000 006460 aa 020 231 121 026 5-41 two_40: ac4 "1099511627776" 006461 aa 047 167 140 000 006462 aa 041 231 002 062 5-42 two_41: ac4 "2199023255552" 006463 aa 125 125 040 000 006464 aa 103 230 004 145 5-43 two_42: ac4 "4398046511104" 006465 aa 021 020 100 000 006466 aa 207 226 011 060 5-44 two_43: ac4 "8796093022208" 006467 aa 042 040 200 000 006470 aa 027 131 041 206 5-45 two_44: ac4 "17592186044416" 006471 aa 004 104 026 000 006472 aa 065 030 103 162 5-46 two_45: ac4 "35184372088832" 006473 aa 010 210 062 000 006474 aa 160 066 207 104 5-47 two_46: ac4 "70368744177664" 006475 aa 027 166 144 000 006476 aa 024 007 067 110 5-48 two_47: ac4 "140737488355328" 006477 aa 203 125 062 200 006500 aa 050 024 164 227 5-49 two_48: ac4 "281474976710656" 006501 aa 147 020 145 140 006502 aa 126 051 111 225 5-50 two_49: ac4 "562949953421312" 006503 aa 064 041 061 040 006504 aa 021 045 211 231 5-51 two_50: ac4 "1125899906842624" 006505 aa 006 204 046 044 006506 aa 042 121 171 230 5-52 two_51: ac4 "2251799813685248" 006507 aa 023 150 122 110 006510 aa 105 003 131 226 5-53 two_52: ac4 "4503599627370496" 006511 aa 047 067 004 226 006512 aa 220 007 031 222 5-54 two_53: ac4 "9007199254740992" 006513 aa 124 164 011 222 006514 aa 030 001 103 230 5-55 two_54: ac4 "18014398509481984" 006515 aa 120 224 201 230 006516 aa 100 000 000 000 006517 aa 066 002 207 227 5-56 two_55: ac4 "36028797018963968" 006520 aa 001 211 143 226 006521 aa 200 000 000 000 006522 aa 162 005 165 224 5-57 two_56: ac4 "72057594037927936" 006523 aa 003 171 047 223 006524 aa 140 000 000 000 006525 aa 024 101 025 030 5-58 two_57: ac4 "144115188075855872" 006526 aa 200 165 205 130 006527 aa 162 000 000 000 006530 aa 050 202 060 067 5-59 two_58: ac4 "288230376151711744" 006531 aa 141 121 161 027 006532 aa 104 000 000 000 006533 aa 127 144 140 165 5-60 two_59: ac4 "576460752303423488" 006534 aa 043 003 102 064 006535 aa 210 000 000 000 006536 aa 021 122 222 025 5-61 two_60: ac4 "1152921504606846976" 006537 aa 004 140 150 106 006540 aa 227 140 000 000 006541 aa 043 005 204 060 5-62 two_61: ac4 "2305843009213693952" 006542 aa 011 041 066 223 006543 aa 225 040 000 000 006544 aa 106 021 150 140 5-63 two_62: ac4 "4611686018427387904" 006545 aa 030 102 163 207 006546 aa 220 100 000 000 006547 aa 222 043 067 040 5-64 two_63: ac4 "9223372036854775808" 006550 aa 066 205 107 165 006551 aa 200 200 000 000 006552 aa 030 104 147 104 5-65 two_64: ac4 "18446744073709551616" 006553 aa 007 067 011 125 006554 aa 026 026 000 000 006555 aa 066 211 064 210 5-66 two_65: ac4 "36893488147419103232" 006556 aa 024 164 031 020 006557 aa 062 062 000 000 006560 aa 163 170 151 166 5-67 two_66: ac4 "73786976294838206464" 006561 aa 051 110 070 040 006562 aa 144 144 000 000 006563 aa 024 165 163 225 5-68 two_67: ac4 "147573952589676412928" 006564 aa 045 211 147 144 006565 aa 022 222 200 000 006566 aa 051 121 107 220 5-69 two_68: ac4 "295147905179352825856" 006567 aa 121 171 065 050 006570 aa 045 205 140 000 006571 aa 131 002 225 201 5-70 two_69: ac4 "590295810358705651712" 006572 aa 003 130 160 126 006573 aa 121 161 040 000 006574 aa 021 200 131 026 5-71 two_70: ac4 "1180591620717411303424" 006575 aa 040 161 164 021 006576 aa 060 064 044 000 006577 aa 043 141 030 062 5-72 two_71: ac4 "2361183241434822606848" 006600 aa 101 103 110 042 006601 aa 140 150 110 000 006602 aa 107 042 066 144 5-73 two_72: ac4 "4722366482869645213696" 006603 aa 202 206 226 105 006604 aa 041 066 226 000 006605 aa 224 104 163 051 5-74 two_73: ac4 "9444732965739290427392" 006606 aa 145 163 222 220 006607 aa 102 163 222 000 006610 aa 030 210 224 145 5-75 two_74: ac4 "18889465931478580854784" 006611 aa 223 024 170 130 006612 aa 010 124 170 100 006613 aa 067 167 211 061 5-76 two_75: ac4 "37778931862957161709568" 006614 aa 206 051 127 026 006615 aa 027 011 126 200 006616 aa 165 125 170 143 5-77 two_76: ac4 "75557863725914323419136" 006617 aa 162 131 024 062 006620 aa 064 031 023 140 006621 aa 025 021 025 162 5-78 two_77: ac4 "151115727451828646838272" 006622 aa 164 121 202 206 006623 aa 106 203 202 162 006624 aa 060 042 061 105 5-79 two_78: ac4 "302231454903657293676544" 006625 aa 111 003 145 162 006626 aa 223 147 145 104 006627 aa 140 104 142 220 5-80 two_79: ac4 "604462909807314587353088" 006630 aa 230 007 061 105 006631 aa 207 065 060 210 006632 aa 022 010 222 130 5-81 two_80: ac4 "1208925819614629174706176" 006633 aa 031 141 106 051 006634 aa 027 107 006 027 006635 aa 140 000 000 000 006636 aa 044 027 205 026 5-82 two_81: ac4 "2417851639229258349412352" 006637 aa 071 042 222 130 006640 aa 064 224 022 065 006641 aa 040 000 000 000 006642 aa 110 065 160 062 5-83 two_82: ac4 "4835703278458516698824704" 006643 aa 170 105 205 026 006644 aa 151 210 044 160 006645 aa 100 000 000 000 006646 aa 226 161 100 145 5-84 two_83: ac4 "9671406556917033397649408" 006647 aa 126 221 160 063 006650 aa 071 166 111 100 006651 aa 200 000 000 000 006652 aa 031 064 050 023 5-85 two_84: ac4 "19342813113834066795298816" 006653 aa 021 070 064 006 006654 aa 147 225 051 210 006655 aa 026 000 000 000 006656 aa 070 150 126 046 5-86 two_85: ac4 "38685626227668133590597632" 006657 aa 042 166 150 023 006660 aa 065 220 131 166 006661 aa 062 000 000 000 006662 aa 167 067 022 122 5-87 two_86: ac4 "77371252455336267181195264" 006663 aa 105 123 066 046 006664 aa 161 201 031 122 006665 aa 144 000 000 000 006666 aa 025 107 102 120 5-88 two_87: ac4 "154742504910672534362390528" 006667 aa 111 020 147 045 006670 aa 064 066 043 220 006671 aa 122 200 000 000 006672 aa 060 224 205 000 5-89 two_88: ac4 "309485009821345068724781056" 006673 aa 230 041 064 120 006674 aa 150 162 107 201 006675 aa 005 140 000 000 006676 aa 141 211 160 001 5-90 two_89: ac4 "618970019642690137449562112" 006677 aa 226 102 151 001 006700 aa 067 104 225 142 006701 aa 021 040 000 000 006702 aa 022 067 224 000 5-91 two_90: ac4 "1237940039285380274899124224" 006703 aa 071 050 123 200 006704 aa 047 110 231 022 006705 aa 102 044 000 000 006706 aa 044 165 210 000 5-92 two_91: ac4 "2475880078570760549798248448" 006707 aa 170 127 007 140 006710 aa 124 227 230 044 006711 aa 204 110 000 000 006712 aa 111 121 166 001 5-93 two_92: ac4 "4951760157141521099596496896" 006713 aa 127 024 025 041 006714 aa 011 225 226 111 006715 aa 150 226 000 000 006716 aa 231 003 122 003 5-94 two_93: ac4 "9903520314283042199192993792" 006717 aa 024 050 060 102 006720 aa 031 221 222 231 006721 aa 067 222 000 000 006722 aa 031 200 160 100 5-95 two_94: ac4 "19807040628566084398385987584" 006723 aa 142 205 146 010 006724 aa 103 230 070 131 006725 aa 207 130 100 000 006726 aa 071 141 100 201 5-96 two_95: ac4 "39614081257132168796771975168" 006727 aa 045 161 062 026 006730 aa 207 226 167 031 006731 aa 165 026 200 000 006732 aa 171 042 201 142 5-97 two_96: ac4 "79228162514264337593543950336" 006733 aa 121 102 144 063 006734 aa 165 223 124 071 006735 aa 120 063 140 000 006736 aa 025 204 126 062 5-98 two_97: ac4 "158456325028528675187087900672" 006737 aa 120 050 122 206 006740 aa 165 030 160 207 006741 aa 220 006 162 000 006742 aa 061 151 022 145 5-99 two_98: ac4 "316912650057057350374175801344" 006743 aa 000 127 005 163 006744 aa 120 067 101 165 006745 aa 200 023 104 000 006746 aa 143 070 045 060 5-100 two_99: ac4 "633825300114114700748351602688" 006747 aa 001 024 021 107 006750 aa 000 164 203 121 006751 aa 140 046 210 000 006752 aa 022 147 145 006 5-101 two_100: ac4 "1267650600228229401496703205376" 006753 aa 000 042 202 051 006754 aa 100 024 226 160 006755 aa 062 005 067 140 006756 aa 045 065 060 022 5-102 two_101: ac4 "2535301200456458802993406410752" 006757 aa 000 105 144 130 006760 aa 200 051 223 100 006761 aa 144 020 165 040 006762 aa 120 160 140 044 5-103 two_102: ac4 "5070602400912917605986812821504" 006763 aa 000 221 051 027 006764 aa 140 131 206 201 006765 aa 050 041 120 100 006766 aa 020 024 022 004 5-104 two_103: ac4 "10141204801825835211973625643008" 006767 aa 200 030 045 203 006770 aa 122 021 227 066 006771 aa 045 144 060 010 006772 aa 040 050 044 011 5-105 two_104: ac4 "20282409603651670423947251286016" 006773 aa 140 066 121 147 006774 aa 004 043 224 162 006775 aa 121 050 140 026 006776 aa 100 126 110 031 5-106 two_105: ac4 "40564819207303340847894502572032" 006777 aa 040 163 003 064 007000 aa 010 107 211 105 007001 aa 002 127 040 062 007002 aa 201 022 226 070 5-107 two_106: ac4 "81129638414606681695789005144064" 007003 aa 101 106 006 150 007004 aa 026 225 170 220 007005 aa 005 024 100 144 007006 aa 026 042 131 047 5-108 two_107: ac4 "162259276829213363391578010288128" 007007 aa 150 051 041 063 007010 aa 143 071 025 170 007011 aa 001 002 210 022 007012 aa 200 000 000 000 007013 aa 062 105 030 125 5-109 two_108: ac4 "324518553658426726783156020576256" 007014 aa 066 130 102 147 007015 aa 046 170 061 126 007016 aa 002 005 166 045 007017 aa 140 000 000 000 007020 aa 144 220 067 020 5-110 two_109: ac4 "649037107316853453566312041152512" 007021 aa 163 026 205 064 007022 aa 123 126 143 022 007023 aa 004 021 122 121 007024 aa 040 000 000 000 007025 aa 022 230 007 102 5-111 two_110: ac4 "1298074214633706907132624082305024" 007026 aa 024 143 067 006 007027 aa 220 161 062 142 007030 aa 100 202 060 120 007031 aa 044 000 000 000 007032 aa 045 226 024 204 5-112 two_111: ac4 "2596148429267413814265248164610048" 007033 aa 051 046 164 023 007034 aa 201 102 145 044 007035 aa 201 144 141 000 007036 aa 110 000 000 000 007037 aa 121 222 051 150 5-113 two_112: ac4 "5192296858534827628530496329220096" 007040 aa 130 123 110 047 007041 aa 142 205 060 111 007042 aa 143 051 042 000 007043 aa 226 000 000 000 007044 aa 020 070 105 223 5-114 two_113: ac4 "10384593717069655257060992658440192" 007045 aa 161 160 151 145 007046 aa 122 127 006 011 007047 aa 222 145 204 100 007050 aa 031 040 000 000 007051 aa 040 166 221 207 5-115 two_114: ac4 "20769187434139310514121985316880384" 007052 aa 103 101 071 061 007053 aa 005 024 022 031 007054 aa 205 061 150 200 007055 aa 070 100 000 000 007056 aa 101 123 203 164 5-116 two_115: ac4 "41538374868278621028243970633760768" 007057 aa 206 202 170 142 007060 aa 020 050 044 071 007061 aa 160 143 067 140 007062 aa 166 200 000 000 007063 aa 203 007 147 111 5-117 two_116: ac4 "83076749736557242056487941267521536" 007064 aa 163 145 127 044 007065 aa 040 126 110 171 007066 aa 101 046 165 041 007067 aa 123 140 000 000 007070 aa 026 141 123 111 5-118 two_117: ac4 "166153499473114484112975882535043072" 007071 aa 224 163 021 104 007072 aa 204 021 051 165 007073 aa 210 045 065 004 007074 aa 060 162 000 000 007075 aa 063 043 006 231 5-119 two_118: ac4 "332306998946228968225951765070086144" 007076 aa 211 106 042 211 007077 aa 150 042 131 121 007100 aa 166 120 160 010 007101 aa 141 104 000 000 007102 aa 146 106 023 231 5-120 two_119: ac4 "664613997892457936451903530140172288" 007103 aa 170 222 105 171 007104 aa 066 105 031 003 007105 aa 123 001 100 027 007106 aa 042 210 000 000 007107 aa 023 051 042 171 5-121 two_120: ac4 "1329227995784915872903807060280344576" 007110 aa 225 170 111 025 007111 aa 207 051 003 200 007112 aa 160 140 050 003 007113 aa 104 127 140 000 007114 aa 046 130 105 131 5-122 two_121: ac4 "2658455991569831745807614120560689152" 007115 aa 221 126 230 061 007116 aa 164 130 007 141 007117 aa 101 040 126 006 007120 aa 211 025 040 000 007121 aa 123 026 221 031 5-123 two_122: ac4 "5316911983139663491615228241121378304" 007122 aa 203 023 226 143 007123 aa 111 026 025 042 007124 aa 202 101 022 023 007125 aa 170 060 100 000 007126 aa 020 143 070 043 5-124 two_123: ac4 "10633823966279326983230456482242756608" 007127 aa 226 142 171 062 007130 aa 151 203 043 004 007131 aa 126 110 042 102 007132 aa 165 146 010 000 007133 aa 041 046 166 107 5-125 two_124: ac4 "21267647932558653966460912964485513216" 007134 aa 223 045 130 145 007135 aa 071 146 106 011 007136 aa 022 226 104 205 007137 aa 121 062 026 000 007140 aa 102 123 122 225 5-126 two_125: ac4 "42535295865117307932921825928971026432" 007141 aa 206 121 027 060 007142 aa 171 062 222 030 007143 aa 045 222 211 161 007144 aa 002 144 062 000 007145 aa 205 007 005 221 5-127 two_126: ac4 "85070591730234615865843651857942052864" 007146 aa 163 002 064 141 007147 aa 130 145 204 066 007150 aa 121 205 171 102 007151 aa 005 050 144 000 007152 aa 027 001 101 030 5-128 two_127: ac4 "170141183460469231731687303715884105728" 007153 aa 064 140 106 222 007154 aa 061 163 026 207 007155 aa 060 067 025 210 007156 aa 101 005 162 200 007157 aa 064 002 202 066 5-129 two_128: ac4 "340282366920938463463374607431768211456" 007160 aa 151 040 223 204 007161 aa 143 106 063 164 007162 aa 140 164 061 166 007163 aa 202 021 105 140 007164 aa 150 005 144 163 5-130 two_129: ac4 "680564733841876926926749214863536422912" 007165 aa 070 101 207 151 007166 aa 046 222 147 111 007167 aa 041 110 143 123 007170 aa 144 042 221 040 007171 aa 023 141 022 224 5-131 two_130: ac4 "1361129467683753853853498429727072845824" 007172 aa 147 150 067 123 007173 aa 205 070 123 111 007174 aa 204 051 162 160 007175 aa 162 204 130 044 007176 aa 047 042 045 211 5-132 two_131: ac4 "2722258935367507707706996859454145691648" 007177 aa 065 066 165 007 007200 aa 160 167 006 231 007201 aa 150 131 105 101 007202 aa 105 151 026 110 007203 aa 124 104 121 170 5-133 two_132: ac4 "5444517870735015415413993718908291383296" 007204 aa 160 163 120 025 007205 aa 101 124 023 231 007206 aa 067 030 220 202 007207 aa 221 070 062 226 007210 aa 020 210 220 065 5-134 two_133: ac4 "10889035741470030830827987437816582766592" 007211 aa 164 024 160 003 007212 aa 010 060 202 171 007213 aa 207 103 170 026 007214 aa 130 047 146 131 007215 aa 040 000 000 000 007216 aa 041 167 200 161 5-135 two_134: ac4 "21778071482940061661655974875633165533184" 007217 aa 110 051 100 006 007220 aa 026 141 145 131 007221 aa 164 207 126 063 007222 aa 026 125 063 030 007223 aa 100 000 000 000 007224 aa 103 125 141 102 5-136 two_135: ac4 "43556142965880123323311949751266331066368" 007225 aa 226 130 200 022 007226 aa 063 043 061 031 007227 aa 111 165 022 146 007230 aa 063 020 146 066 007231 aa 200 000 000 000 007232 aa 207 021 042 205 5-137 two_136: ac4 "87112285931760246646623899502532662132736" 007233 aa 223 027 140 044 007234 aa 146 106 142 070 007235 aa 231 120 045 062 007236 aa 146 041 062 163 007237 aa 140 000 000 000 007240 aa 027 102 044 127 5-138 two_137: ac4 "174224571863520493293247799005065324265472" 007241 aa 030 143 122 004 007242 aa 223 051 062 107 007243 aa 171 220 005 006 007244 aa 123 044 046 124 007245 aa 162 000 000 000 007246 aa 064 204 111 024 5-139 two_138: ac4 "348449143727040986586495598010130648530944" 007247 aa 067 047 004 011 007250 aa 206 130 144 225 007251 aa 131 200 020 023 007252 aa 006 110 123 011 007253 aa 104 000 000 000 007254 aa 151 150 230 050 5-140 two_139: ac4 "696898287454081973172991196020261297061888" 007255 aa 164 124 010 031 007256 aa 163 027 051 221 007257 aa 031 140 040 046 007260 aa 022 227 006 030 007261 aa 210 000 000 000 007262 aa 023 223 171 145 5-141 two_140: ac4 "1393796574908163946345982392040522594123776" 007263 aa 164 220 201 143 007264 aa 224 143 105 230 007265 aa 043 222 004 005 007266 aa 042 131 101 043 007267 aa 167 140 000 000 007270 aa 047 207 131 061 5-142 two_141: ac4 "2787593149816327892691964784081045188247552" 007271 aa 111 201 143 047 007272 aa 211 046 221 226 007273 aa 107 204 010 020 007274 aa 105 030 202 107 007275 aa 125 040 000 000 007276 aa 125 165 030 142 5-143 two_142: ac4 "5575186299632655785383929568162090376495104" 007277 aa 231 143 046 125 007300 aa 170 123 203 222 007301 aa 225 150 026 040 007302 aa 220 067 144 225 007303 aa 020 100 000 000 007304 aa 021 025 003 162 5-144 two_143: ac4 "11150372599265311570767859136324180752990208" 007305 aa 131 222 145 061 007306 aa 025 160 166 170 007307 aa 131 023 143 044 007310 aa 030 007 122 231 007311 aa 002 010 000 000 007312 aa 042 060 007 105 5-145 two_144: ac4 "22300745198530623141535718272648361505980416" 007313 aa 031 205 060 142 007314 aa 061 101 123 127 007315 aa 030 047 046 110 007316 aa 066 025 005 230 007317 aa 004 026 000 000 007320 aa 104 140 024 220 5-146 two_145: ac4 "44601490397061246283071436545296723011960832" 007321 aa 071 160 141 044 007322 aa 142 203 007 024 007323 aa 066 124 122 226 007324 aa 162 060 021 226 007325 aa 010 062 000 000 007326 aa 211 040 051 200 5-147 two_146: ac4 "89202980794122492566142873090593446023921664" 007327 aa 171 101 042 111 007330 aa 045 146 024 050 007331 aa 163 011 005 223 007332 aa 104 140 043 222 007333 aa 026 144 000 000 007334 aa 027 204 005 226 5-148 two_147: ac4 "178405961588244985132285746181186892047843328" 007335 aa 025 210 044 111 007336 aa 205 023 042 205 007337 aa 164 141 201 030 007340 aa 150 222 004 170 007341 aa 103 062 200 000 007342 aa 065 150 021 222 5-149 two_148: ac4 "356811923176489970264571492362373784095686656" 007343 aa 061 166 110 231 007344 aa 160 046 105 161 007345 aa 111 043 142 067 007346 aa 067 204 011 126 007347 aa 206 145 140 000 007350 aa 161 066 043 204 5-150 two_149: ac4 "713623846352979940529142984724747568191373312" 007351 aa 143 122 227 231 007352 aa 100 122 221 102 007353 aa 230 107 044 164 007354 aa 165 150 031 023 007355 aa 163 061 040 000 007356 aa 024 047 044 166 5-151 two_150: ac4 "1427247692705959881058285969449495136382746624" 007357 aa 222 160 131 131 007360 aa 210 020 130 050 007361 aa 131 151 104 224 007362 aa 225 023 143 202 007363 aa 164 146 044 000 007364 aa 050 124 111 123 5-152 two_151: ac4 "2854495385411919762116571938898990272765493248" 007365 aa 205 101 031 031 007366 aa 166 041 026 127 007367 aa 031 070 211 211 007370 aa 220 047 047 145 007371 aa 111 062 110 000 007372 aa 127 010 231 007 5-153 two_152: ac4 "5708990770823839524233143877797980545530986496" 007373 aa 160 202 070 071 007374 aa 122 102 063 024 007375 aa 070 167 171 171 007376 aa 200 124 125 060 007377 aa 230 144 226 000 007400 aa 021 101 171 201 5-154 two_153: ac4 "11417981541647679048466287755595961091061972992" 007401 aa 124 026 107 147 007402 aa 220 110 106 142 007403 aa 207 165 125 225 007404 aa 226 020 221 006 007405 aa 031 162 231 040 007406 aa 042 203 131 143 5-155 two_154: ac4 "22835963083295358096932575511191922182123945984" 007407 aa 010 062 225 065 007410 aa 200 226 223 045 007411 aa 165 121 021 221 007412 aa 222 041 202 022 007413 aa 071 105 230 100 007414 aa 105 147 031 046 5-156 two_155: ac4 "45671926166590716193865151022383844364247891968" 007415 aa 026 145 220 161 007416 aa 141 223 206 121 007417 aa 121 002 043 203 007420 aa 204 103 144 044 007421 aa 170 221 226 200 007422 aa 221 064 070 122 5-157 two_156: ac4 "91343852333181432387730302044767688728495783936" 007423 aa 063 061 201 103 007424 aa 043 207 163 003 007425 aa 002 004 107 147 007426 aa 150 207 050 111 007427 aa 127 203 223 140 007430 aa 030 046 207 160 5-158 two_157: ac4 "182687704666362864775460604089535377456991567872" 007431 aa 106 146 066 050 007432 aa 144 167 124 140 007433 aa 140 100 211 123 007434 aa 123 167 105 151 007435 aa 221 126 170 162 007436 aa 066 123 165 100 5-159 two_158: ac4 "365375409332725729550921208179070754913983135744" 007437 aa 223 062 162 127 007440 aa 051 125 011 041 007441 aa 040 201 171 007 007442 aa 007 124 221 071 007443 aa 203 023 127 104 007444 aa 163 007 120 201 5-160 two_159: ac4 "730750818665451459101842416358141509827966271488" 007445 aa 206 145 105 024 007446 aa 131 020 030 102 007447 aa 101 143 130 024 007450 aa 025 011 202 171 007451 aa 146 047 024 210 007452 aa 024 141 120 026 5-161 two_160: ac4 "1461501637330902918203684832716283019655932542976" 007453 aa 067 063 011 002 007454 aa 221 202 003 150 007455 aa 110 062 161 142 007456 aa 203 001 226 125 007457 aa 223 045 102 227 007460 aa 140 000 000 000 007461 aa 051 043 000 062 5-162 two_161: ac4 "2923003274661805836407369665432566039311865085952" 007462 aa 164 146 030 005 007463 aa 203 144 007 066 007464 aa 226 145 103 045 007465 aa 146 003 223 021 007466 aa 206 120 205 225 007467 aa 040 000 000 000 007470 aa 130 106 000 145 5-163 two_162: ac4 "5846006549323611672814739330865132078623730171904" 007471 aa 111 062 066 021 007472 aa 147 050 024 163 007473 aa 223 060 206 121 007474 aa 062 007 206 043 007475 aa 163 001 161 220 007476 aa 100 000 000 000 007477 aa 021 151 040 023 5-164 two_163: ac4 "11692013098647223345629478661730264157247460343808" 007500 aa 011 206 107 042 007501 aa 063 105 142 224 007502 aa 170 146 027 060 007503 aa 046 101 127 044 007504 aa 164 140 064 070 007505 aa 010 000 000 000 007506 aa 043 070 100 046 5-165 two_164: ac4 "23384026197294446691258957323460528314494920687616" 007507 aa 031 162 224 104 007510 aa 146 221 045 211 007511 aa 127 062 064 140 007512 aa 122 203 024 111 007513 aa 111 040 150 166 007514 aa 026 000 000 000 007515 aa 106 166 200 122 5-166 two_165: ac4 "46768052394588893382517914646921056628989841375232" 007516 aa 071 105 210 211 007517 aa 063 202 121 171 007520 aa 024 144 151 041 007521 aa 005 146 050 230 007522 aa 230 101 067 122 007523 aa 062 000 000 000 007524 aa 223 123 141 004 5-167 two_166: ac4 "93536104789177786765035829293842113257979682750464" 007525 aa 170 221 167 170 007526 aa 147 145 003 130 007527 aa 051 051 070 102 007530 aa 021 062 127 227 007531 aa 226 202 165 004 007532 aa 144 000 000 000 007533 aa 030 160 162 040 5-168 two_167: ac4 "187072209578355573530071658587684226515959365500928" 007534 aa 225 170 065 125 007535 aa 163 123 000 161 007536 aa 145 205 207 150 007537 aa 102 046 121 131 007540 aa 131 066 125 000 007541 aa 222 200 000 000 007542 aa 067 101 104 101 5-169 two_168: ac4 "374144419156711147060143317175368453031918731001856" 007543 aa 221 126 161 021 007544 aa 107 006 001 103 007545 aa 061 161 165 066 007546 aa 204 123 003 031 007547 aa 030 163 020 001 007550 aa 205 140 000 000 007551 aa 164 202 210 203 5-170 two_169: ac4 "748288838313422294120286634350736906063837462003712" 007552 aa 203 023 102 042 007553 aa 224 022 002 206 007554 aa 143 103 120 163 007555 aa 151 006 006 070 007556 aa 067 106 040 003 007557 aa 161 040 000 000 007560 aa 024 226 127 166 5-171 two_170: ac4 "1496577676626844588240573268701473812127674924007424" 007561 aa 166 142 150 104 007562 aa 130 202 100 127 007563 aa 062 150 160 024 007564 aa 163 201 041 047 007565 aa 147 111 044 000 007566 aa 164 044 000 000 007567 aa 051 223 025 123 5-172 two_171: ac4 "2993155353253689176481146537402947624255349848014848" 007570 aa 123 045 066 211 007571 aa 027 144 201 024 007572 aa 145 067 100 051 007573 aa 107 142 102 125 007574 aa 064 230 110 001 007575 aa 110 110 000 000 007576 aa 131 206 061 007 5-173 two_172: ac4 "5986310706507378352962293074805895248510699696029696" 007577 aa 006 120 163 170 007600 aa 065 051 142 051 007601 aa 060 164 200 130 007602 aa 225 044 205 020 007603 aa 151 226 226 002 007604 aa 226 226 000 000 007605 aa 021 227 046 041 5-174 two_173: ac4 "11972621413014756705924586149611790497021399392059392" 007606 aa 101 060 024 165 007607 aa 147 005 222 105 007610 aa 206 024 226 021 007611 aa 171 004 227 002 007612 aa 023 231 071 040 007613 aa 131 071 040 000 007614 aa 043 224 122 102 5-175 two_174: ac4 "23945242826029513411849172299223580994042798784118784" 007615 aa 202 140 051 121 007616 aa 064 021 204 221 007617 aa 162 051 222 043 007620 aa 130 011 224 004 007621 aa 047 230 170 101 007622 aa 030 170 100 000 007623 aa 107 211 004 205 5-176 two_175: ac4 "47890485652059026823698344598447161988085597568237568" 007624 aa 145 040 131 002 007625 aa 150 043 151 203 007626 aa 104 131 204 107 007627 aa 026 031 210 010 007630 aa 125 227 126 202 007631 aa 067 126 200 000 007632 aa 225 170 011 161 5-177 two_176: ac4 "95780971304118053647396689196894323976171195136475136" 007633 aa 060 101 030 005 007634 aa 066 107 071 146 007635 aa 211 031 150 224 007636 aa 062 071 166 027 007637 aa 021 225 023 144 007640 aa 165 023 140 000 007641 aa 031 025 141 224 5-178 two_177: ac4 "191561942608236107294793378393788647952342390272950272" 007642 aa 046 010 043 141 007643 aa 007 051 107 223 007644 aa 067 203 223 170 007645 aa 206 107 225 043 007646 aa 102 071 002 162 007647 aa 225 002 162 000 007650 aa 070 061 043 210 5-179 two_178: ac4 "383123885216472214589586756787577295904684780545900544" 007651 aa 122 026 107 042 007652 aa 024 130 225 206 007653 aa 165 147 207 127 007654 aa 162 225 220 106 007655 aa 204 170 005 105 007656 aa 220 005 104 000 007657 aa 166 142 107 167 5-180 two_179: ac4 "766247770432944429179173513575154591809369561091801088" 007660 aa 004 062 224 104 007661 aa 051 027 221 163 007662 aa 121 065 165 025 007663 aa 105 221 200 223 007664 aa 151 126 020 221 007665 aa 200 020 210 000 007666 aa 025 062 111 125 5-181 two_180: ac4 "1532495540865888858358347027150309183618739122183602176" 007667 aa 100 206 130 210 007670 aa 205 203 130 064 007671 aa 160 047 025 003 007672 aa 011 030 066 030 007673 aa 163 221 042 030 007674 aa 066 002 027 140 007675 aa 060 144 231 020 5-182 two_181: ac4 "3064991081731777716716694054300618367237478244367204352" 007676 aa 201 163 027 167 007677 aa 161 147 026 151 007700 aa 100 124 060 006 007701 aa 030 066 162 067 007702 aa 107 202 104 066 007703 aa 162 004 065 040 007704 aa 141 051 230 041 5-183 two_182: ac4 "6129982163463555433433388108601236734474956488734408704" 007705 aa 143 106 065 125 007706 aa 103 064 063 070 007707 aa 201 010 140 022 007710 aa 066 163 104 164 007711 aa 225 144 210 163 007712 aa 104 010 160 100 007713 aa 022 045 231 144 5-184 two_183: ac4 "12259964326927110866866776217202473468949912977468817408" 007714 aa 062 151 047 021 007715 aa 010 146 206 147 007716 aa 166 041 162 002 007717 aa 107 064 150 224 007720 aa 231 022 227 164 007721 aa 150 201 164 010 007722 aa 044 121 231 050 5-185 two_184: ac4 "24519928653854221733733552434404946937899825954937634816" 007723 aa 145 070 124 042 007724 aa 027 063 163 065 007725 aa 122 103 104 004 007726 aa 224 151 067 211 007727 aa 230 045 225 111 007730 aa 067 143 110 026 007731 aa 111 003 230 127 5-186 two_185: ac4 "49039857307708443467467104868809893875799651909875269632" 007732 aa 060 167 010 104 007733 aa 064 147 106 161 007734 aa 004 206 210 011 007735 aa 211 070 165 171 007736 aa 226 121 220 230 007737 aa 165 046 226 062 007740 aa 230 007 227 024 5-187 two_186: ac4 "98079714615416886934934209737619787751599303819750539264" 007741 aa 141 124 026 210 007742 aa 151 064 223 102 007743 aa 011 163 166 031 007744 aa 170 167 121 131 007745 aa 223 003 201 227 007746 aa 120 123 222 144 007747 aa 031 141 131 102 5-188 two_187: ac4 "196159429230833773869868419475239575503198607639501078528" 007750 aa 222 060 203 067 007751 aa 163 206 230 150 007752 aa 101 224 165 043 007753 aa 225 165 120 061 007754 aa 230 140 166 071 007755 aa 120 020 170 122 007756 aa 200 000 000 000 007757 aa 071 043 030 205 5-189 two_188: ac4 "392318858461667547739736838950479151006397215279002157056" 007760 aa 204 141 146 165 007761 aa 107 163 227 066 007762 aa 203 211 120 107 007763 aa 221 121 000 143 007764 aa 227 041 122 171 007765 aa 000 041 127 005 007766 aa 140 000 000 000 007767 aa 170 106 067 161 5-190 two_189: ac4 "784637716923335095479473677900958302012794430558004314112" 007770 aa 151 043 063 120 007771 aa 225 107 224 163 007772 aa 147 171 000 225 007773 aa 203 002 001 047 007774 aa 224 103 005 130 007775 aa 000 103 024 021 007776 aa 040 000 000 000 007777 aa 025 151 047 124 5-191 two_190: ac4 "1569275433846670190958947355801916604025588861116008628224" 010000 aa 063 204 146 160 010001 aa 031 011 130 224 010002 aa 163 125 200 031 010003 aa 026 140 100 045 010004 aa 130 210 141 021 010005 aa 140 010 142 202 010006 aa 044 000 000 000 010007 aa 061 070 125 010 5-192 two_191: ac4 "3138550867693340381917894711603833208051177722232017256448" 010010 aa 147 151 063 100 010011 aa 070 031 027 211 010012 aa 107 021 140 070 010013 aa 063 040 200 121 010014 aa 027 167 042 043 010015 aa 040 027 045 144 010016 aa 110 000 000 000 010017 aa 142 167 020 027 5-193 two_192: ac4 "6277101735386680763835789423207666416102355444464034512896" 010020 aa 065 070 146 200 010021 aa 166 070 065 170 010022 aa 224 043 040 166 010023 aa 146 101 141 002 010024 aa 065 124 104 106 010025 aa 100 064 121 050 010026 aa 226 000 000 000 010027 aa 022 125 102 003 5-194 two_193: ac4 "12554203470773361527671578846415332832204710888928069025792" 010030 aa 107 007 163 066 010031 aa 025 047 147 025 010032 aa 170 204 144 025 010033 aa 063 050 062 040 010034 aa 107 020 210 211 010035 aa 050 006 220 045 010036 aa 171 040 000 000 010037 aa 045 020 204 006 5-195 two_194: ac4 "25108406941546723055343157692830665664409421777856138051584" 010040 aa 224 025 106 162 010041 aa 060 125 064 061 010042 aa 127 151 050 060 010043 aa 146 126 144 100 010044 aa 224 041 167 170 010045 aa 126 023 200 121 010046 aa 130 100 000 000 010047 aa 120 041 150 023 5-196 two_195: ac4 "50216813883093446110686315385661331328818843555712276103168" 010050 aa 210 060 223 104 010051 aa 141 020 150 143 010052 aa 025 070 126 141 010053 aa 063 023 050 201 010054 aa 210 103 125 127 010055 aa 022 047 141 003 010056 aa 026 200 000 000 010057 aa 020 004 063 142 5-197 two_196: ac4 "100433627766186892221372630771322662657637687111424552206336" 010060 aa 167 146 030 150 010061 aa 222 042 023 162 010062 aa 143 007 161 062 010063 aa 046 142 145 166 010064 aa 067 150 161 021 010065 aa 102 105 122 040 010066 aa 143 066 000 000 010067 aa 040 010 147 045 5-198 two_197: ac4 "200867255532373784442745261542645325315275374222849104412672" 010070 aa 125 062 067 067 010071 aa 204 104 047 105 010072 aa 046 025 102 144 010073 aa 123 045 061 122 010074 aa 165 067 102 042 010075 aa 204 221 004 101 010076 aa 046 162 000 000 010077 5-199 two_table: 010077 0a 006373 070001 5-200 desc4ns two_0,1 010100 0a 006374 070001 5-201 desc4ns two_1,1 010101 0a 006375 070001 5-202 desc4ns two_2,1 010102 0a 006376 070001 5-203 desc4ns two_3,1 010103 0a 006377 070002 5-204 desc4ns two_4,2 010104 0a 006400 070002 5-205 desc4ns two_5,2 010105 0a 006401 070002 5-206 desc4ns two_6,2 010106 0a 006402 070003 5-207 desc4ns two_7,3 010107 0a 006403 070003 5-208 desc4ns two_8,3 010110 0a 006404 070003 5-209 desc4ns two_9,3 010111 0a 006405 070004 5-210 desc4ns two_10,4 010112 0a 006406 070004 5-211 desc4ns two_11,4 010113 0a 006407 070004 5-212 desc4ns two_12,4 010114 0a 006410 070004 5-213 desc4ns two_13,4 010115 0a 006411 070005 5-214 desc4ns two_14,5 010116 0a 006412 070005 5-215 desc4ns two_15,5 010117 0a 006413 070005 5-216 desc4ns two_16,5 010120 0a 006414 070006 5-217 desc4ns two_17,6 010121 0a 006415 070006 5-218 desc4ns two_18,6 010122 0a 006416 070006 5-219 desc4ns two_19,6 010123 0a 006417 070007 5-220 desc4ns two_20,7 010124 0a 006420 070007 5-221 desc4ns two_21,7 010125 0a 006421 070007 5-222 desc4ns two_22,7 010126 0a 006422 070007 5-223 desc4ns two_23,7 010127 0a 006423 070010 5-224 desc4ns two_24,8 010130 0a 006424 070010 5-225 desc4ns two_25,8 010131 0a 006425 070010 5-226 desc4ns two_26,8 010132 0a 006426 070011 5-227 desc4ns two_27,9 010133 0a 006430 070011 5-228 desc4ns two_28,9 010134 0a 006432 070011 5-229 desc4ns two_29,9 010135 0a 006434 070012 5-230 desc4ns two_30,10 010136 0a 006436 070012 5-231 desc4ns two_31,10 010137 0a 006440 070012 5-232 desc4ns two_32,10 010140 0a 006442 070012 5-233 desc4ns two_33,10 010141 0a 006444 070013 5-234 desc4ns two_34,11 010142 0a 006446 070013 5-235 desc4ns two_35,11 010143 0a 006450 070013 5-236 desc4ns two_36,11 010144 0a 006452 070014 5-237 desc4ns two_37,12 010145 0a 006454 070014 5-238 desc4ns two_38,12 010146 0a 006456 070014 5-239 desc4ns two_39,12 010147 0a 006460 070015 5-240 desc4ns two_40,13 010150 0a 006462 070015 5-241 desc4ns two_41,13 010151 0a 006464 070015 5-242 desc4ns two_42,13 010152 0a 006466 070015 5-243 desc4ns two_43,13 010153 0a 006470 070016 5-244 desc4ns two_44,14 010154 0a 006472 070016 5-245 desc4ns two_45,14 010155 0a 006474 070016 5-246 desc4ns two_46,14 010156 0a 006476 070017 5-247 desc4ns two_47,15 010157 0a 006500 070017 5-248 desc4ns two_48,15 010160 0a 006502 070017 5-249 desc4ns two_49,15 010161 0a 006504 070020 5-250 desc4ns two_50,16 010162 0a 006506 070020 5-251 desc4ns two_51,16 010163 0a 006510 070020 5-252 desc4ns two_52,16 010164 0a 006512 070020 5-253 desc4ns two_53,16 010165 0a 006514 070021 5-254 desc4ns two_54,17 010166 0a 006517 070021 5-255 desc4ns two_55,17 010167 0a 006522 070021 5-256 desc4ns two_56,17 010170 0a 006525 070022 5-257 desc4ns two_57,18 010171 0a 006530 070022 5-258 desc4ns two_58,18 010172 0a 006533 070022 5-259 desc4ns two_59,18 010173 0a 006536 070023 5-260 desc4ns two_60,19 010174 0a 006541 070023 5-261 desc4ns two_61,19 010175 0a 006544 070023 5-262 desc4ns two_62,19 010176 0a 006547 070023 5-263 desc4ns two_63,19 010177 0a 006552 070024 5-264 desc4ns two_64,20 010200 0a 006555 070024 5-265 desc4ns two_65,20 010201 0a 006560 070024 5-266 desc4ns two_66,20 010202 0a 006563 070025 5-267 desc4ns two_67,21 010203 0a 006566 070025 5-268 desc4ns two_68,21 010204 0a 006571 070025 5-269 desc4ns two_69,21 010205 0a 006574 070026 5-270 desc4ns two_70,22 010206 0a 006577 070026 5-271 desc4ns two_71,22 010207 0a 006602 070026 5-272 desc4ns two_72,22 010210 0a 006605 070026 5-273 desc4ns two_73,22 010211 0a 006610 070027 5-274 desc4ns two_74,23 010212 0a 006613 070027 5-275 desc4ns two_75,23 010213 0a 006616 070027 5-276 desc4ns two_76,23 010214 0a 006621 070030 5-277 desc4ns two_77,24 010215 0a 006624 070030 5-278 desc4ns two_78,24 010216 0a 006627 070030 5-279 desc4ns two_79,24 010217 0a 006632 070031 5-280 desc4ns two_80,25 010220 0a 006636 070031 5-281 desc4ns two_81,25 010221 0a 006642 070031 5-282 desc4ns two_82,25 010222 0a 006646 070031 5-283 desc4ns two_83,25 010223 0a 006652 070032 5-284 desc4ns two_84,26 010224 0a 006656 070032 5-285 desc4ns two_85,26 010225 0a 006662 070032 5-286 desc4ns two_86,26 010226 0a 006666 070033 5-287 desc4ns two_87,27 010227 0a 006672 070033 5-288 desc4ns two_88,27 010230 0a 006676 070033 5-289 desc4ns two_89,27 010231 0a 006702 070034 5-290 desc4ns two_90,28 010232 0a 006706 070034 5-291 desc4ns two_91,28 010233 0a 006712 070034 5-292 desc4ns two_92,28 010234 0a 006716 070034 5-293 desc4ns two_93,28 010235 0a 006722 070035 5-294 desc4ns two_94,29 010236 0a 006726 070035 5-295 desc4ns two_95,29 010237 0a 006732 070035 5-296 desc4ns two_96,29 010240 0a 006736 070036 5-297 desc4ns two_97,30 010241 0a 006742 070036 5-298 desc4ns two_98,30 010242 0a 006746 070036 5-299 desc4ns two_99,30 010243 0a 006752 070037 5-300 desc4ns two_100,31 010244 0a 006756 070037 5-301 desc4ns two_101,31 010245 0a 006762 070037 5-302 desc4ns two_102,31 010246 0a 006766 070040 5-303 desc4ns two_103,32 010247 0a 006772 070040 5-304 desc4ns two_104,32 010250 0a 006776 070040 5-305 desc4ns two_105,32 010251 0a 007002 070040 5-306 desc4ns two_106,32 010252 0a 007006 070041 5-307 desc4ns two_107,33 010253 0a 007013 070041 5-308 desc4ns two_108,33 010254 0a 007020 070041 5-309 desc4ns two_109,33 010255 0a 007025 070042 5-310 desc4ns two_110,34 010256 0a 007032 070042 5-311 desc4ns two_111,34 010257 0a 007037 070042 5-312 desc4ns two_112,34 010260 0a 007044 070043 5-313 desc4ns two_113,35 010261 0a 007051 070043 5-314 desc4ns two_114,35 010262 0a 007056 070043 5-315 desc4ns two_115,35 010263 0a 007063 070043 5-316 desc4ns two_116,35 010264 0a 007070 070044 5-317 desc4ns two_117,36 010265 0a 007075 070044 5-318 desc4ns two_118,36 010266 0a 007102 070044 5-319 desc4ns two_119,36 010267 0a 007107 070045 5-320 desc4ns two_120,37 010270 0a 007114 070045 5-321 desc4ns two_121,37 010271 0a 007121 070045 5-322 desc4ns two_122,37 010272 0a 007126 070046 5-323 desc4ns two_123,38 010273 0a 007133 070046 5-324 desc4ns two_124,38 010274 0a 007140 070046 5-325 desc4ns two_125,38 010275 0a 007145 070046 5-326 desc4ns two_126,38 010276 0a 007152 070047 5-327 desc4ns two_127,39 010277 0a 007157 070047 5-328 desc4ns two_128,39 010300 0a 007164 070047 5-329 desc4ns two_129,39 010301 0a 007171 070050 5-330 desc4ns two_130,40 010302 0a 007176 070050 5-331 desc4ns two_131,40 010303 0a 007203 070050 5-332 desc4ns two_132,40 010304 0a 007210 070051 5-333 desc4ns two_133,41 010305 0a 007216 070051 5-334 desc4ns two_134,41 010306 0a 007224 070051 5-335 desc4ns two_135,41 010307 0a 007232 070051 5-336 desc4ns two_136,41 010310 0a 007240 070052 5-337 desc4ns two_137,42 010311 0a 007246 070052 5-338 desc4ns two_138,42 010312 0a 007254 070052 5-339 desc4ns two_139,42 010313 0a 007262 070053 5-340 desc4ns two_140,43 010314 0a 007270 070053 5-341 desc4ns two_141,43 010315 0a 007276 070053 5-342 desc4ns two_142,43 010316 0a 007304 070054 5-343 desc4ns two_143,44 010317 0a 007312 070054 5-344 desc4ns two_144,44 010320 0a 007320 070054 5-345 desc4ns two_145,44 010321 0a 007326 070054 5-346 desc4ns two_146,44 010322 0a 007334 070055 5-347 desc4ns two_147,45 010323 0a 007342 070055 5-348 desc4ns two_148,45 010324 0a 007350 070055 5-349 desc4ns two_149,45 010325 0a 007356 070056 5-350 desc4ns two_150,46 010326 0a 007364 070056 5-351 desc4ns two_151,46 010327 0a 007372 070056 5-352 desc4ns two_152,46 010330 0a 007400 070057 5-353 desc4ns two_153,47 010331 0a 007406 070057 5-354 desc4ns two_154,47 010332 0a 007414 070057 5-355 desc4ns two_155,47 010333 0a 007422 070057 5-356 desc4ns two_156,47 010334 0a 007430 070060 5-357 desc4ns two_157,48 010335 0a 007436 070060 5-358 desc4ns two_158,48 010336 0a 007444 070060 5-359 desc4ns two_159,48 010337 0a 007452 070061 5-360 desc4ns two_160,49 010340 0a 007461 070061 5-361 desc4ns two_161,49 010341 0a 007470 070061 5-362 desc4ns two_162,49 010342 0a 007477 070062 5-363 desc4ns two_163,50 010343 0a 007506 070062 5-364 desc4ns two_164,50 010344 0a 007515 070062 5-365 desc4ns two_165,50 010345 0a 007524 070062 5-366 desc4ns two_166,50 010346 0a 007533 070063 5-367 desc4ns two_167,51 010347 0a 007542 070063 5-368 desc4ns two_168,51 010350 0a 007551 070063 5-369 desc4ns two_169,51 010351 0a 007560 070064 5-370 desc4ns two_170,52 010352 0a 007567 070064 5-371 desc4ns two_171,52 010353 0a 007576 070064 5-372 desc4ns two_172,52 010354 0a 007605 070065 5-373 desc4ns two_173,53 010355 0a 007614 070065 5-374 desc4ns two_174,53 010356 0a 007623 070065 5-375 desc4ns two_175,53 010357 0a 007632 070065 5-376 desc4ns two_176,53 010360 0a 007641 070066 5-377 desc4ns two_177,54 010361 0a 007650 070066 5-378 desc4ns two_178,54 010362 0a 007657 070066 5-379 desc4ns two_179,54 010363 0a 007666 070067 5-380 desc4ns two_180,55 010364 0a 007675 070067 5-381 desc4ns two_181,55 010365 0a 007704 070067 5-382 desc4ns two_182,55 010366 0a 007713 070070 5-383 desc4ns two_183,56 010367 0a 007722 070070 5-384 desc4ns two_184,56 010370 0a 007731 070070 5-385 desc4ns two_185,56 010371 0a 007740 070070 5-386 desc4ns two_186,56 010372 0a 007747 070071 5-387 desc4ns two_187,57 010373 0a 007757 070071 5-388 desc4ns two_188,57 010374 0a 007767 070071 5-389 desc4ns two_189,57 010375 0a 007777 070072 5-390 desc4ns two_190,58 010376 0a 010007 070072 5-391 desc4ns two_191,58 010377 0a 010017 070072 5-392 desc4ns two_192,58 010400 0a 010027 070073 5-393 desc4ns two_193,59 010401 0a 010037 070073 5-394 desc4ns two_194,59 010402 0a 010047 070073 5-395 desc4ns two_195,59 010403 0a 010057 070074 5-396 desc4ns two_196,60 010404 0a 010067 070074 5-397 desc4ns two_197,60 5668 " Table of mask constants for precision masking and generation. 5669 010405 aa 000000 0110 03 5670 even " table must be double aligned 5671 010406 5672 mask_table: 010406 aa 377777 777777 5673 oct 377777777777,777777777777 010407 aa 777777 777777 010410 aa 177777 777777 5674 oct 177777777777,777777777777 010411 aa 777777 777777 010412 aa 077777 777777 5675 oct 077777777777,777777777777 010413 aa 777777 777777 010414 aa 037777 777777 5676 oct 037777777777,777777777777 010415 aa 777777 777777 010416 aa 017777 777777 5677 oct 017777777777,777777777777 010417 aa 777777 777777 010420 aa 007777 777777 5678 oct 007777777777,777777777777 010421 aa 777777 777777 010422 aa 003777 777777 5679 oct 003777777777,777777777777 010423 aa 777777 777777 010424 aa 001777 777777 5680 oct 001777777777,777777777777 010425 aa 777777 777777 010426 aa 000777 777777 5681 oct 000777777777,777777777777 010427 aa 777777 777777 010430 aa 000377 777777 5682 oct 000377777777,777777777777 010431 aa 777777 777777 010432 aa 000177 777777 5683 oct 000177777777,777777777777 010433 aa 777777 777777 010434 aa 000077 777777 5684 oct 000077777777,777777777777 010435 aa 777777 777777 010436 aa 000037 777777 5685 oct 000037777777,777777777777 010437 aa 777777 777777 010440 aa 000017 777777 5686 oct 000017777777,777777777777 010441 aa 777777 777777 010442 aa 000007 777777 5687 oct 000007777777,777777777777 010443 aa 777777 777777 010444 aa 000003 777777 5688 oct 000003777777,777777777777 010445 aa 777777 777777 010446 aa 000001 777777 5689 oct 000001777777,777777777777 010447 aa 777777 777777 010450 aa 000000 777777 5690 oct 000000777777,777777777777 010451 aa 777777 777777 010452 aa 000000 377777 5691 oct 000000377777,777777777777 010453 aa 777777 777777 010454 aa 000000 177777 5692 oct 000000177777,777777777777 010455 aa 777777 777777 010456 aa 000000 077777 5693 oct 000000077777,777777777777 010457 aa 777777 777777 010460 aa 000000 037777 5694 oct 000000037777,777777777777 010461 aa 777777 777777 010462 aa 000000 017777 5695 oct 000000017777,777777777777 010463 aa 777777 777777 010464 aa 000000 007777 5696 oct 000000007777,777777777777 010465 aa 777777 777777 010466 aa 000000 003777 5697 oct 000000003777,777777777777 010467 aa 777777 777777 010470 aa 000000 001777 5698 oct 000000001777,777777777777 010471 aa 777777 777777 010472 aa 000000 000777 5699 oct 000000000777,777777777777 010473 aa 777777 777777 010474 aa 000000 000377 5700 oct 000000000377,777777777777 010475 aa 777777 777777 010476 aa 000000 000177 5701 oct 000000000177,777777777777 010477 aa 777777 777777 010500 aa 000000 000077 5702 oct 000000000077,777777777777 010501 aa 777777 777777 010502 aa 000000 000037 5703 oct 000000000037,777777777777 010503 aa 777777 777777 010504 aa 000000 000017 5704 oct 000000000017,777777777777 010505 aa 777777 777777 010506 aa 000000 000007 5705 oct 000000000007,777777777777 010507 aa 777777 777777 010510 aa 000000 000003 5706 oct 000000000003,777777777777 010511 aa 777777 777777 010512 aa 000000 000001 5707 oct 000000000001,777777777777 010513 aa 777777 777777 010514 aa 000000 000000 5708 oct 000000000000,777777777777 010515 aa 777777 777777 010516 aa 000000 000000 5709 oct 000000000000,377777777777 010517 aa 377777 777777 010520 aa 000000 000000 5710 oct 000000000000,177777777777 010521 aa 177777 777777 010522 aa 000000 000000 5711 oct 000000000000,077777777777 010523 aa 077777 777777 010524 aa 000000 000000 5712 oct 000000000000,037777777777 010525 aa 037777 777777 010526 aa 000000 000000 5713 oct 000000000000,017777777777 010527 aa 017777 777777 010530 aa 000000 000000 5714 oct 000000000000,007777777777 010531 aa 007777 777777 010532 aa 000000 000000 5715 oct 000000000000,003777777777 010533 aa 003777 777777 010534 aa 000000 000000 5716 oct 000000000000,001777777777 010535 aa 001777 777777 010536 aa 000000 000000 5717 oct 000000000000,000777777777 010537 aa 000777 777777 010540 aa 000000 000000 5718 oct 000000000000,000377777777 010541 aa 000377 777777 010542 aa 000000 000000 5719 oct 000000000000,000177777777 010543 aa 000177 777777 010544 aa 000000 000000 5720 oct 000000000000,000077777777 010545 aa 000077 777777 010546 aa 000000 000000 5721 oct 000000000000,000037777777 010547 aa 000037 777777 010550 aa 000000 000000 5722 oct 000000000000,000017777777 010551 aa 000017 777777 010552 aa 000000 000000 5723 oct 000000000000,000007777777 010553 aa 000007 777777 010554 aa 000000 000000 5724 oct 000000000000,000003777777 010555 aa 000003 777777 010556 aa 000000 000000 5725 oct 000000000000,000001777777 010557 aa 000001 777777 010560 aa 000000 000000 5726 oct 000000000000,000000777777 010561 aa 000000 777777 010562 aa 000000 000000 5727 oct 000000000000,000000377777 010563 aa 000000 377777 010564 aa 000000 000000 5728 oct 000000000000,000000177777 010565 aa 000000 177777 010566 aa 000000 000000 5729 oct 000000000000,000000077777 010567 aa 000000 077777 010570 aa 000000 000000 5730 oct 000000000000,000000037777 010571 aa 000000 037777 010572 aa 000000 000000 5731 oct 000000000000,000000017777 010573 aa 000000 017777 010574 aa 000000 000000 5732 oct 000000000000,000000007777 010575 aa 000000 007777 010576 aa 000000 000000 5733 oct 000000000000,000000003777 010577 aa 000000 003777 010600 aa 000000 000000 5734 oct 000000000000,000000001777 010601 aa 000000 001777 010602 aa 000000 000000 5735 oct 000000000000,000000000777 010603 aa 000000 000777 010604 aa 000000 000000 5736 oct 000000000000,000000000377 010605 aa 000000 000377 010606 aa 000000 000000 5737 oct 000000000000,000000000177 010607 aa 000000 000177 010610 aa 000000 000000 5738 oct 000000000000,000000000077 010611 aa 000000 000077 010612 aa 000000 000000 5739 oct 000000000000,000000000037 010613 aa 000000 000037 010614 aa 000000 000000 5740 oct 000000000000,000000000017 010615 aa 000000 000017 010616 aa 000000 000000 5741 oct 000000000000,000000000007 010617 aa 000000 000007 010620 aa 000000 000000 5742 oct 000000000000,000000000003 010621 aa 000000 000003 010622 aa 000000 000000 5743 oct 000000000000,000000000001 010623 aa 000000 000001 5744 " Precision Conversion Table 5745 5746 " Convert binary precision to necessary decimal precision, including 5747 " sign and hardware exponent. DU has decimal precision for indexed 5748 " binary precision. DL has number of bytes of binary source for that 5749 " binary precision. 5750 010624 5751 bin_prec_to_dec_prec: 010624 aa 000002 000000 5752 vfd 18/2,18/0 " binary prec 0 010625 aa 000003 000001 5753 vfd 18/3,18/1 " binary prec 1 010626 aa 000003 000001 5754 vfd 18/3,18/1 " binary prec 2 010627 aa 000003 000001 5755 vfd 18/3,18/1 " binary prec 3 010630 aa 000004 000001 5756 vfd 18/4,18/1 " binary prec 4 010631 aa 000004 000001 5757 vfd 18/4,18/1 " binary prec 5 010632 aa 000004 000001 5758 vfd 18/4,18/1 " binary prec 6 010633 aa 000005 000001 5759 vfd 18/5,18/1 " binary prec 7 010634 aa 000005 000001 5760 vfd 18/5,18/1 " binary prec 8 010635 aa 000005 000001 5761 vfd 18/5,18/1 " binary prec 9 010636 aa 000006 000002 5762 vfd 18/6,18/2 " binary prec 10 010637 aa 000006 000002 5763 vfd 18/6,18/2 " binary prec 11 010640 aa 000006 000002 5764 vfd 18/6,18/2 " binary prec 12 010641 aa 000006 000002 5765 vfd 18/6,18/2 " binary prec 13 010642 aa 000007 000002 5766 vfd 18/7,18/2 " binary prec 14 010643 aa 000007 000002 5767 vfd 18/7,18/2 " binary prec 15 010644 aa 000007 000002 5768 vfd 18/7,18/2 " binary prec 16 010645 aa 000010 000002 5769 vfd 18/8,18/2 " binary prec 17 010646 aa 000010 000002 5770 vfd 18/8,18/2 " binary prec 18 010647 aa 000010 000003 5771 vfd 18/8,18/3 " binary prec 19 010650 aa 000011 000003 5772 vfd 18/9,18/3 " binary prec 20 010651 aa 000011 000003 5773 vfd 18/9,18/3 " binary prec 21 010652 aa 000011 000003 5774 vfd 18/9,18/3 " binary prec 22 010653 aa 000011 000003 5775 vfd 18/9,18/3 " binary prec 23 010654 aa 000012 000003 5776 vfd 18/10,18/3 " binary prec 24 010655 aa 000012 000003 5777 vfd 18/10,18/3 " binary prec 25 010656 aa 000012 000003 5778 vfd 18/10,18/3 " binary prec 26 010657 aa 000013 000003 5779 vfd 18/11,18/3 " binary prec 27 010660 aa 000013 000004 5780 vfd 18/11,18/4 " binary prec 28 010661 aa 000013 000004 5781 vfd 18/11,18/4 " binary prec 29 010662 aa 000014 000004 5782 vfd 18/12,18/4 " binary prec 30 010663 aa 000014 000004 5783 vfd 18/12,18/4 " binary prec 31 010664 aa 000014 000004 5784 vfd 18/12,18/4 " binary prec 32 010665 aa 000014 000004 5785 vfd 18/12,18/4 " binary prec 33 010666 aa 000015 000004 5786 vfd 18/13,18/4 " binary prec 34 010667 aa 000015 000004 5787 vfd 18/13,18/4 " binary prec 35 010670 aa 000015 000004 5788 vfd 18/13,18/4 " binary prec 36 010671 aa 000016 000005 5789 vfd 18/14,18/5 " binary prec 37 010672 aa 000016 000005 5790 vfd 18/14,18/5 " binary prec 38 010673 aa 000016 000005 5791 vfd 18/14,18/5 " binary prec 39 010674 aa 000017 000005 5792 vfd 18/15,18/5 " binary prec 40 010675 aa 000017 000005 5793 vfd 18/15,18/5 " binary prec 41 010676 aa 000017 000005 5794 vfd 18/15,18/5 " binary prec 42 010677 aa 000017 000005 5795 vfd 18/15,18/5 " binary prec 43 010700 aa 000020 000005 5796 vfd 18/16,18/5 " binary prec 44 010701 aa 000020 000005 5797 vfd 18/16,18/5 " binary prec 45 010702 aa 000020 000006 5798 vfd 18/16,18/6 " binary prec 46 010703 aa 000021 000006 5799 vfd 18/17,18/6 " binary prec 47 010704 aa 000021 000006 5800 vfd 18/17,18/6 " binary prec 48 010705 aa 000021 000006 5801 vfd 18/17,18/6 " binary prec 49 010706 aa 000022 000006 5802 vfd 18/18,18/6 " binary prec 50 010707 aa 000022 000006 5803 vfd 18/18,18/6 " binary prec 51 010710 aa 000022 000006 5804 vfd 18/18,18/6 " binary prec 52 010711 aa 000022 000006 5805 vfd 18/18,18/6 " binary prec 53 010712 aa 000023 000006 5806 vfd 18/19,18/6 " binary prec 54 010713 aa 000023 000007 5807 vfd 18/19,18/7 " binary prec 55 010714 aa 000023 000007 5808 vfd 18/19,18/7 " binary prec 56 010715 aa 000024 000007 5809 vfd 18/20,18/7 " binary prec 57 010716 aa 000024 000007 5810 vfd 18/20,18/7 " binary prec 58 010717 aa 000024 000007 5811 vfd 18/20,18/7 " binary prec 59 010720 aa 000025 000007 5812 vfd 18/21,18/7 " binary prec 60 010721 aa 000025 000007 5813 vfd 18/21,18/7 " binary prec 61 010722 aa 000025 000007 5814 vfd 18/21,18/7 " binary prec 62 010723 aa 000025 000007 5815 vfd 18/21,18/7 " binary prec 63 010724 aa 000026 000010 5816 vfd 18/22,18/8 " binary prec 64 010725 aa 000026 000010 5817 vfd 18/22,18/8 " binary prec 65 010726 aa 000026 000010 5818 vfd 18/22,18/8 " binary prec 66 010727 aa 000027 000010 5819 vfd 18/23,18/8 " binary prec 67 010730 aa 000027 000010 5820 vfd 18/23,18/8 " binary prec 68 010731 aa 000027 000010 5821 vfd 18/23,18/8 " binary prec 69 010732 aa 000030 000010 5822 vfd 18/24,18/8 " binary prec 70 010733 aa 000030 000010 5823 vfd 18/24,18/8 " binary prec 71 010734 aa 000030 000010 5824 vfd 18/24,18/8 " binary prec 72 5825 5826 5827 " Convert decimal digit to binary precision needed to hold it. 5828 " Used by flt_dec_to_flt_bin to maintain maximum converison precision. 5829 010735 5830 digit_to_prec: 010735 aa 000001 000000 5831 zero 1,0 " digit 0.0-0.99... 010736 aa 000002 000000 5832 zero 2,0 " digit 1.0-1.99... 010737 aa 000003 000000 5833 zero 3,0 " digit 2.0-2.99... 010740 aa 000003 000000 5834 zero 3,0 " digit 3.0-3.99... 010741 aa 000004 000000 5835 zero 4,0 " digit 4.0-4.99... 010742 aa 000004 000000 5836 zero 4,0 " digit 5.0-5.99... 010743 aa 000004 000000 5837 zero 4,0 " digit 6.0-6.99... 010744 aa 000004 000000 5838 zero 4,0 " digit 7.0-7.99... 010745 aa 000005 000000 5839 zero 5,0 " digit 8.0-8.99... 010746 aa 000005 000000 5840 zero 5,0 " digit 9.0-9.99... 5841 end LITERALS 010750 aa 232157 173225 010751 aa 232157 052606 010752 aa 000000 000001 NAME DEFINITIONS FOR ENTRY POINTS AND SEGDEFS 010753 5a 000003 000000 010754 5a 000107 600000 010755 aa 000000 000000 010756 55 000011 000002 010757 5a 000002 400003 010760 55 000006 000011 010761 aa 013 141 156 171 010762 aa 137 164 157 137 010763 aa 141 156 171 137 010764 55 000021 000003 010765 0a 000071 400000 010766 55 000014 000003 010767 aa 020 143 150 141 char_to_numeric_ 010770 aa 162 137 164 157 010771 aa 137 156 165 155 010772 aa 145 162 151 143 010773 aa 137 000 000 000 010774 55 000032 000011 010775 0a 000000 400000 010776 55 000024 000003 010777 aa 024 141 156 171 any_to_any_truncate_ 011000 aa 137 164 157 137 011001 aa 141 156 171 137 011002 aa 164 162 165 156 011003 aa 143 141 164 145 011004 aa 137 000 000 000 011005 55 000042 000021 011006 0a 000006 400000 011007 55 000035 000003 011010 aa 021 141 156 171 any_to_any_round_ 011011 aa 137 164 157 137 011012 aa 141 156 171 137 011013 aa 162 157 165 156 011014 aa 144 137 000 000 011015 55 000050 000032 011016 0a 000002 400000 011017 55 000045 000003 011020 aa 013 141 156 171 any_to_any_ 011021 aa 137 164 157 137 011022 aa 141 156 171 137 011023 55 000061 000042 011024 0a 000000 400000 011025 55 000053 000003 011026 aa 026 162 145 141 real_to_real_truncate_ 011027 aa 154 137 164 157 011030 aa 137 162 145 141 011031 aa 154 137 164 162 011032 aa 165 156 143 141 011033 aa 164 145 137 000 011034 55 000071 000050 011035 0a 000006 400000 011036 55 000064 000003 011037 aa 023 162 145 141 real_to_real_round_ 011040 aa 154 137 164 157 011041 aa 137 162 145 141 011042 aa 154 137 162 157 011043 aa 165 156 144 137 011044 55 000100 000061 011045 0a 000002 400000 011046 55 000074 000003 011047 aa 015 162 145 141 real_to_real_ 011050 aa 154 137 164 157 011051 aa 137 162 145 141 011052 aa 154 137 000 000 011053 55 000002 000071 011054 6a 000000 400002 011055 55 000103 000003 011056 aa 014 163 171 155 symbol_table 011057 aa 142 157 154 137 011060 aa 164 141 142 154 011061 aa 145 000 000 000 DEFINITIONS HASH TABLE 011062 aa 000000 000015 011063 aa 000000 000000 011064 5a 000050 000000 011065 aa 000000 000000 011066 5a 000061 000000 011067 aa 000000 000000 011070 aa 000000 000000 011071 5a 000021 000000 011072 5a 000071 000000 011073 5a 000032 000000 011074 5a 000011 000000 011075 5a 000100 000000 011076 aa 000000 000000 011077 5a 000042 000000 EXTERNAL NAMES 011100 aa 024 160 154 061 pl1_signal_from_ops_ 011101 aa 137 163 151 147 011102 aa 156 141 154 137 011103 aa 146 162 157 155 011104 aa 137 157 160 163 011105 aa 137 000 000 000 011106 aa 026 160 154 061 pl1_signal_conversion_ 011107 aa 137 163 151 147 011110 aa 156 141 154 137 011111 aa 143 157 156 166 011112 aa 145 162 163 151 011113 aa 157 156 137 000 NO TRAP POINTER WORDS TYPE PAIR BLOCKS 011114 aa 000004 000000 011115 55 000125 000125 011116 aa 000004 000000 011117 55 000133 000133 011120 aa 000001 000000 011121 aa 000000 000000 INTERNAL EXPRESSION WORDS 011122 5a 000141 000000 011123 5a 000143 000000 LINKAGE INFORMATION 000000 aa 000000 000000 000001 0a 010753 000000 000002 aa 000000 000000 000003 aa 000000 000000 000004 aa 000000 000000 000005 aa 000000 000000 000006 22 000010 000014 000007 a2 000000 000000 000010 9a 777770 0000 46 pl1_signal_conversion_|pl1_signal_conversion_ 000011 5a 000150 0000 00 000012 9a 777766 0000 46 pl1_signal_from_ops_|pl1_signal_from_ops_ 000013 5a 000147 0000 00 SYMBOL INFORMATION SYMBOL TABLE HEADER 000000 aa 000000 000001 000001 aa 163171 155142 000002 aa 164162 145145 000003 aa 000000 000010 000004 aa 000000 117244 000005 aa 361023 525721 000006 aa 000000 120376 000007 aa 774456 157540 000010 aa 141154 155040 000011 aa 040040 040040 000012 aa 000024 000040 000013 aa 000034 000040 000014 aa 000044 000100 000015 aa 000002 000002 000016 aa 000064 000000 000017 aa 000000 001063 000020 aa 000000 000202 000021 aa 001032 001026 000022 aa 001051 000202 000023 aa 000064 000000 000024 aa 101114 115040 000025 aa 126145 162163 000026 aa 151157 156040 000027 aa 070056 061064 000030 aa 040115 141162 000031 aa 143150 040061 000032 aa 071070 071040 000033 aa 040040 040040 000034 aa 106165 144147 000035 aa 145056 123171 000036 aa 163115 141151 000037 aa 156164 056141 000040 aa 040040 040040 000041 aa 040040 040040 000042 aa 040040 040040 000043 aa 040040 040040 000044 aa 055164 141162 000045 aa 147145 164040 000046 aa 154066 070040 000047 aa 040040 040040 000050 aa 040040 040040 000051 aa 040040 040040 000052 aa 040040 040040 000053 aa 040040 040040 000054 aa 040040 040040 000055 aa 040040 040040 000056 aa 040154 151163 000057 aa 164040 163171 000060 aa 155142 157154 000061 aa 163040 040040 000062 aa 040040 040040 000063 aa 040040 040040 000064 aa 000000 000001 000065 aa 000000 000006 000066 aa 000116 000042 000067 aa 203576 723405 000070 aa 000000 120376 000071 aa 774457 200000 000072 aa 000127 000043 000073 aa 176620 610622 000074 aa 000000 101621 000075 aa 351624 000000 000076 aa 000140 000040 000077 aa 176620 612573 000100 aa 000000 104574 000101 aa 400471 200000 000102 aa 000150 000042 000103 aa 176620 613311 000104 aa 000000 115000 000105 aa 507463 000000 000106 aa 000161 000041 000107 aa 176620 613303 000110 aa 000000 105272 000111 aa 317215 400000 000112 aa 000172 000037 000113 aa 176620 613647 000114 aa 000000 104574 000115 aa 400471 200000 000116 aa 076163 160145 >spec>install>1035>any_to_any_.alm 000117 aa 143076 151156 000120 aa 163164 141154 000121 aa 154076 061060 000122 aa 063065 076141 000123 aa 156171 137164 000124 aa 157137 141156 000125 aa 171137 056141 000126 aa 154155 040040 000127 aa 076154 144144 >ldd>include>eis_micro_ops.incl.alm 000130 aa 076151 156143 000131 aa 154165 144145 000132 aa 076145 151163 000133 aa 137155 151143 000134 aa 162157 137157 000135 aa 160163 056151 000136 aa 156143 154056 000137 aa 141154 155040 000140 aa 076154 144144 >ldd>include>pl1_system.incl.alm 000141 aa 076151 156143 000142 aa 154165 144145 000143 aa 076160 154061 000144 aa 137163 171163 000145 aa 164145 155056 000146 aa 151156 143154 000147 aa 056141 154155 000150 aa 076154 144144 >ldd>include>stack_header.incl.alm 000151 aa 076151 156143 000152 aa 154165 144145 000153 aa 076163 164141 000154 aa 143153 137150 000155 aa 145141 144145 000156 aa 162056 151156 000157 aa 143154 056141 000160 aa 154155 040040 000161 aa 076154 144144 >ldd>include>stack_frame.incl.alm 000162 aa 076151 156143 000163 aa 154165 144145 000164 aa 076163 164141 000165 aa 143153 137146 000166 aa 162141 155145 000167 aa 056151 156143 000170 aa 154056 141154 000171 aa 155040 040040 000172 aa 076154 144144 >ldd>include>two_table.incl.alm 000173 aa 076151 156143 000174 aa 154165 144145 000175 aa 076164 167157 000176 aa 137164 141142 000177 aa 154145 056151 000200 aa 156143 154056 000201 aa 141154 155040 MULTICS ASSEMBLY CROSS REFERENCE LISTING Value Symbol Source file Line number 2 any_to_any_ any_to_any_: 91, 378. 6 any_to_any_round_ any_to_any_: 92, 385. 0 any_to_any_truncate_ any_to_any_: 93, 373. 32 arglist any_to_any_: 111, 5423, 5425, 5427, 5429, 5431, 5433, 5435, 5438, 5439, 5441, 5443, 5444, 5445, 5446, 5453, 5456, 5595, 5597, 5602, 5604, 5606, 5611, 5612, 5613, 5615, 5617, 5619, 5620. 3710 as_is any_to_any_: 3633, 3751, 3752, 3753, 3758, 3759, 3760, 3765, 3768, 3769, 3772, 3775, 3776. 1420 binary_round any_to_any_: 1474, 1494, 1503, 1639, 1649, 2428, 2580. 10624 bin_prec_to_dec_prec any_to_any_: 1562, 1563, 1800, 1801, 1971, 2101, 2244, 2510, 2511, 5751. 5 BIT any_to_any_: 610, 640, 641, 732, 733. 2720 bit.char.done_digit any_to_any_: 2710, 2717. 2731 bit.char.exit any_to_any_: 2723, 2732. 2726 bit.char.fill_blank any_to_any_: 2720, 2727. 2705 bit.char.loop any_to_any_: 2693, 2698, 2702, 2722. 2715 bit.char.zero any_to_any_: 2706, 2712. 10 bits_per_binary_exponent pl1_system: 38. 11 bits_per_character pl1_system: 35. 11 bits_per_decimal_digit pl1_system: 37. 110 bits_per_double pl1_system: 31. 22 bits_per_half pl1_system: 36. 44 bits_per_packed_ptr pl1_system: 39. 44 bits_per_word pl1_system: 30. 14 bit_generic any_to_any_: 172, 1666, 2586, 2672, 2673, 2800, 2813, 2817. 2631 bit_generic_case any_to_any_: 2611, 2613. 2626 bit_generic_conversion any_to_any_: 1360, 2608. 5147 bit_tab any_to_any_: 4541, 4545. 5133 bit_test any_to_any_: 4329, 4339, 4545. 2665 bit_to_bit any_to_any_: 2619, 2668. 2673 bit_to_char any_to_any_: 2620, 2687. 2640 bit_to_fix_bin any_to_any_: 2615, 2626. 2653 bit_to_fix_bin_uns any_to_any_: 2618, 2648. 2640 bit_to_flt_bin any_to_any_: 2616, 2627. 2640 bit_to_flt_dec any_to_any_: 2617, 2628. 40 blank any_to_any_: 196, 2728, 3007, 3019, 3060, 3070, 3125, 3131, 3148, 3155, 3175, 3222, 3325, 5301. 6 blank_class any_to_any_: 215, 4362. 5114 blank_skip any_to_any_: 3460, 3479, 3557, 4536. 5124 blank_tab any_to_any_: 4524, 4536. 3 b_class any_to_any_: 212. 4111 calculate_precision any_to_any_: 3635, 3874. 4116 calculate_type any_to_any_: 3642, 3884. 6205 call_it any_to_any_: 5451, 5623. 1170 call_offset stack_header: 80. 30 call_ptr any_to_any_: 110, 5600, 5601. 10 ce_link any_to_any_: 5448, 5662. 6 CHAR any_to_any_: 611, 642, 643, 734, 735. 3613 char.arith.blank_imag any_to_any_: 3511, 3518. 3636 char.arith.check_blank any_to_any_: 3520, 3554. 3643 char.arith.end_of_input any_to_any_: 3495, 3551, 3563. 3540 char.arith.good_string any_to_any_: 3449, 3457. 3615 char.arith.got_imag_part any_to_any_: 3510, 3525. 3627 char.arith.have_imag_part any_to_any_: 3529, 3545. 3621 char.arith.have_real_part any_to_any_: 3506, 3533. 3577 char.arith.more_input any_to_any_: 3493, 3500. 3745 char.arith.real_return any_to_any_: 3660, 3671. 3715 char.arith.real_type any_to_any_: 3637, 3639. 3526 char.arith.save_len any_to_any_: 3425, 3434, 3439. 3706 char.arith.save_prec any_to_any_: 3621, 3623, 3627. 3722 char.arith.set_round any_to_any_: 3643, 3646. 3730 char.arith.supplied any_to_any_: 3565, 3650, 3656. 3771 char.arith.zero any_to_any_: 3422, 3432, 3466, 3483, 3700. 3775 char.arith.zero_char any_to_any_: 3701, 3706. 3014 char.bit.01 any_to_any_: 2782, 2822, 4087. 3011 char.bit.exit any_to_any_: 2806, 2815. 3006 char.bit.fill_0 any_to_any_: 2779, 2803, 2810. 2775 char.bit.good any_to_any_: 2785, 2797. 2763 char.bit.loop any_to_any_: 2780, 2805. 2761 char.bit.loop.enter any_to_any_: 2768, 2773, 2777. 2746 char.bit.restart any_to_any_: 2761, 2793. 4230 char.gen.fixbin.exit any_to_any_: 3999, 4005. 4226 char.gen.fixbin.exit_1 any_to_any_: 3995, 4001. 4220 char.gen.fixbin.int any_to_any_: 3985, 3993. 4301 char.gen.fltbin.exit any_to_any_: 4057, 4063. 4277 char.gen.fltbin.exit_1 any_to_any_: 4053, 4059. 4271 char.gen.fltbin.int any_to_any_: 4043, 4051. 10 characters_per_double pl1_system: 34. 2 characters_per_half pl1_system: 32. 4 characters_per_word pl1_system: 33. 110 char_flt_dec_gen any_to_any_: 184, 2858, 2889, 2926. 50 char_generic any_to_any_: 183, 2709, 2715, 2730, 2734, 2986, 3032. 2737 char_generic_case any_to_any_: 2740, 2742. 3511 char_to_arithmetic any_to_any_: 504, 2744, 2745, 2746, 2747, 3417. 3521 char_to_arithmetic_restart any_to_any_: 3430, 3704, 5327. 2746 char_to_bit any_to_any_: 2748, 2760. 3015 char_to_char any_to_any_: 2749, 2830. 2734 char_to_generic any_to_any_: 1389, 2737. 4177 char_to_generic.fixbin any_to_any_: 3908, 3971. 4141 char_to_generic.fixdec any_to_any_: 3910, 3922. 4244 char_to_generic.fltbin any_to_any_: 3909, 4025. 4141 char_to_generic.fltdec any_to_any_: 3911, 3923. 4132 char_to_generic.zero_dec any_to_any_: 3907, 3913, 3928. 71 char_to_numeric_ any_to_any_: 94, 499. 3231 char_zero any_to_any_: 3050, 3073, 3074, 3078, 3098, 3126, 3173, 5227. 420 cht eis_micro_ops: 17. 200000 complex any_to_any_: 417, 424, 585, 626, 627, 628, 629, 632, 633, 658, 666, 667, 670, 671, 703, 705, 707, 718, 719, 720, 721, 724, 725, 750, 758, 759, 762, 763, 795, 797, 799, 2916, 2995, 3674. 6350 conversion_arg_header any_to_any_: 5447, 5634. 6124 conversion_error any_to_any_: 2792, 5326, 5395. 6147 conversion_error.in_range any_to_any_: 5414, 5417. 54 convert_complex any_to_any_: 425, 438, 445, 456. 5414 convert_flt_bin_to_flt_hex any_to_any_: 4788, 4796, 4805, 4825. 5 cplx_fix_bin_1 any_to_any_: 3784, 3799. 6 cplx_fix_bin_2 any_to_any_: 3785, 3799. 13 cplx_fix_dec_9bit_ls any_to_any_: 3790, 3801. 7 cplx_flt_bin_1 any_to_any_: 3786, 3800. 10 cplx_flt_bin_2 any_to_any_: 3787, 3800. 14 cplx_flt_dec_9bit any_to_any_: 3791, 3802. 124 cplx_flt_dec_generic any_to_any_: 259. 5447 c_flt_bin_to_flt_hex.neg any_to_any_: 4851, 4861. 5456 c_flt_bin_to_flt_hex.normal any_to_any_: 4865, 4874. 5453 c_flt_bin_to_flt_hex.norm_neg any_to_any_: 4864, 4870. 5465 c_flt_bin_to_flt_hex.norm_pos any_to_any_: 4854, 4883. 5445 c_flt_bin_to_flt_hex.zero any_to_any_: 4836, 4857. 6254 decimal_overflow any_to_any_: 4905, 4985, 4986, 5522. 6252 decimal_range_error any_to_any_: 2020, 2290, 2329, 4898, 4931, 4978, 5514. 6261 decimal_underflow any_to_any_: 4906, 5516, 5531. 3675 dec_to_bin.prec any_to_any_: 3591, 3595, 3606, 3610, 3614. 3665 dec_to_bin.scale any_to_any_: 3587, 3603. 103 dec_zero any_to_any_: 450, 521, 3918, 5539. 2000 default_area_size pl1_system: 53. 21 default_fix_bin_p pl1_system: 55. 7 default_fix_dec_p pl1_system: 57. 33 default_flt_bin_p pl1_system: 54. 12 default_flt_dec_p any_to_any_: 448, 5537, pl1_system: 56. 4 de_class any_to_any_: 213. 60 digit_0 any_to_any_: 200, 2713, 3252, 3295, 3298, 3951, 3959. 61 digit_1 any_to_any_: 201, 2707. 7 digit_class any_to_any_: 216. 5071 digit_skip any_to_any_: 4141, 4205, 4269, 4286, 4519. 5101 digit_tab any_to_any_: 4507, 4519. 10735 digit_to_prec any_to_any_: 2129, 5830. 3776 dominant_type any_to_any_: 3569, 3738. 106 dv3d.id.pr.pr_rl any_to_any_: 532. 114 dv3d.id.pr_rl.pr any_to_any_: 544, 2207. 110 dv3d.id.pr_rl.pr_rl any_to_any_: 536, 1580, 2527. 1203 end_get_fix_dec.normalize any_to_any_: 1048, 1078, 1110, 1230. 1207 end_get_fix_dec.normalized any_to_any_: 1124, 1139, 1180, 1197, 1214, 1246. 740 end_get_flt_bin any_to_any_: 934, 945, 952. 777 end_get_flt_hex any_to_any_: 990, 1001, 1008. 40 enf any_to_any_: 3155, eis_micro_ops: 2. 1174 entry_offset stack_header: 84. 3466 eplus any_to_any_: 3299, 3318. 6061 error_191 any_to_any_: 4331, 4341, 5314. 6063 error_201 any_to_any_: 4252, 4266, 4272, 4289, 5318. 6072 error_202 any_to_any_: 4133, 4198, 5329. 6074 error_203 any_to_any_: 3455, 3501, 3505, 3507, 3508, 3509, 3512, 3513, 4179, 4230, 4311, 5333. 6076 error_204 any_to_any_: 4232, 4313, 5337. 6100 error_205 any_to_any_: 3424, 5341. 6104 error_207 any_to_any_: 4315, 4319, 5347. 6106 error_208 any_to_any_: 4385, 4404, 5351. 6110 error_209 any_to_any_: 4387, 4394, 5355. 6112 error_211 any_to_any_: 3552, 5359. 6114 error_213 any_to_any_: 4274, 4291, 5363. 6116 error_214 any_to_any_: 4249, 5367. 6120 error_218 any_to_any_: 3930, 3978, 4031, 5371. 6122 error_219 any_to_any_: 3540, 3548, 5375. 6273 error_bad_type any_to_any_: 397, 399, 510, 1069, 1099, 1398, 1694, 1959, 2376, 2614, 2743, 2932, 2937, 2938, 3875, 3885, 5563. 200 error_extension any_to_any_: 107, 469, 5402, 5405, 5463, 5583, 5586. 6371 error_name any_to_any_: 5566, 5659. 44 error_return any_to_any_: 180, 5396, 5466, 5577. 4656 error_table any_to_any_: 3447, 4412. 6064 error_xxx any_to_any_: 5316, 5321, 5331, 5335, 5339, 5345, 5349, 5353, 5357, 5361, 5365, 5369, 5373, 5377. 66 exit.1 any_to_any_: 465, 476. 3 exponent_part any_to_any_: 131. 4027 final_type any_to_any_: 3640, 3644, 3793. 1 FIXED_BIN any_to_any_: 605, 622, 623, 626, 627, 714, 715, 718, 719. 4 FIXED_BIN_UNS any_to_any_: 608, 654, 655, 746, 747. 10000 fix any_to_any_: 589, 622, 623, 626, 627, 630, 632, 650, 651, 654, 655, 656, 657, 658, 659, 660, 661, 662, 664, 666, 2861, 2892, 2959. 1 fixbin any_to_any_: 3404, 3751, 3752, 3754, 3766, 4377. 6355 fixbin_15_desc any_to_any_: 5442, 5640. 6356 fixbin_17_desc any_to_any_: 5614, 5642. 6357 fixbin_35_desc any_to_any_: 5616, 5644. 4003 fixbin_type any_to_any_: 3740, 3750. 3 fixdec any_to_any_: 3406, 3765, 3768, 4113, 4379. 4015 fixdec_type any_to_any_: 3739, 3742, 3764. 3303 fixed_edit any_to_any_: 3144, 3145, 3147. 3301 fixed_edit_desc any_to_any_: 3102, 3143. 4040 fixed_prec_and_scale any_to_any_: 3811, 3876, 3878. 4065 fixed_prec_and_scale.real any_to_any_: 3813, 3837. 1516 fix_bin.bit.flt any_to_any_: 1612, 1935. 1571 fix_bin.bit.non_null any_to_any_: 1671, 1675. 1535 fix_bin.bit.noround any_to_any_: 1626, 1630, 1633. 1545 fix_bin.bit.right.ovfl any_to_any_: 1637, 1643. 1547 fix_bin.bit.scale.pos any_to_any_: 1635, 1647. 1520 fix_bin.bit.scale_left any_to_any_: 1616. 1526 fix_bin.bit.scale_right any_to_any_: 1614, 1624. 1360 fix_bin.fix_bin.flt any_to_any_: 1439, 1753. 1344 fix_bin.fix_bin_uns.flt any_to_any_: 1415, 1728. 1442 fix_bin.flt.zero any_to_any_: 1527, 1537. 1376 fix_bin.noround any_to_any_: 1456, 1460, 1462. 1414 fix_bin.noscale any_to_any_: 1431, 1447, 1477, 1490, 1496. 1407 fix_bin.right.ovfl any_to_any_: 1472, 1488. 1411 fix_bin.scale.pos any_to_any_: 1464, 1492. 1362 fix_bin.scale_left any_to_any_: 1443. 1366 fix_bin.scale_right any_to_any_: 1417, 1441, 1453. 4 fix_bin_generic any_to_any_: 164, 435, 436, 869, 879, 881, 884, 890, 903, 914, 916, 919, 925, 1411, 1426, 1429, 1444, 1459, 1463, 1497, 1524, 1552, 1567, 1617, 1629, 1634, 1658, 1659, 1663, 1680, 1709, 1735, 1845, 1847, 1899, 1901, 1922, 2032, 2044, 2077, 2082, 2083, 2087, 2110, 2127, 2128, 2130, 2131, 2132, 2134, 2168, 2172, 2173, 2181, 2224, 2226, 2228, 2230, 2305, 2317, 2340, 2360, 2393, 2406, 2409, 2422, 2426, 2430, 2455, 2484, 2489, 2493, 2515, 2557, 2574, 2578, 2585, 2601, 2629, 2635, 2651, 2690, 2697, 2699, 2733, 2765, 2772, 2774, 2784, 2799, 2816, 3008, 3011, 3012, 3206, 3208, 3240, 3243, 3257, 3268, 3274, 3277, 3279, 3286, 3287, 3461, 3462, 3480, 3481, 3482, 3487, 3558, 3980, 4013, 4016, 4142, 4143, 4164, 4165, 4166, 4174, 4176, 4206, 4207, 4215, 4216, 4217, 4225, 4227, 4255, 4258, 4270, 4271, 4287, 4288, 4297, 4298, 4299, 4306, 4308, 4330, 4340, 4353, 4355, 4603, 4612, 4622, 4631, 4645, 4651, 4664, 4670, 4771, 4776, 4875, 4879, 4954, 4959, 5077, 5078, 5118, 5119. 1331 fix_bin_generic_case any_to_any_: 1395, 1397. 1326 fix_bin_generic_conversion any_to_any_: 437, 905, 920, 927, 1392, 2636, 2642, 3666, 3692. 1515 fix_bin_to_bit any_to_any_: 1403, 1610. 3017 fix_bin_to_char any_to_any_: 1404, 2841. 1356 fix_bin_to_fix_bin any_to_any_: 1399, 1436. 1340 fix_bin_to_fix_bin_uns any_to_any_: 1402, 1410. 1422 fix_bin_to_flt_bin any_to_any_: 1400, 1517. 1446 fix_bin_to_flt_dec any_to_any_: 1401, 1551, 2842. 1505 fix_bin_to_flt_dec.common any_to_any_: 1584, 1594. 1477 fix_bin_to_flt_dec.neg_scale any_to_any_: 1574, 1586. 2616 fix_bin_uns.bit.non_null any_to_any_: 2591, 2595. 2602 fix_bin_uns.bit.noround any_to_any_: 2571, 2575, 2577. 2566 fix_bin_uns.bit.scale_left any_to_any_: 2562. 2573 fix_bin_uns.bit.scale_right any_to_any_: 2560, 2569. 2444 fix_bin_uns.check_target any_to_any_: 2396, 2435. 2473 fix_bin_uns.flt.zero any_to_any_: 2462, 2471. 2552 fix_bin_uns.flt_dec.common any_to_any_: 2531, 2541. 2531 fix_bin_uns.flt_dec.long any_to_any_: 2499, 2518. 2544 fix_bin_uns.flt_dec.neg_scale any_to_any_: 2524, 2533. 2515 fix_bin_uns.flt_dec.short any_to_any_: 2487, 2504. 2440 fix_bin_uns.noround any_to_any_: 2419, 2423, 2425. 2443 fix_bin_uns.noscale any_to_any_: 2411, 2429. 2462 fix_bin_uns.positive any_to_any_: 2456, 2459. 2421 fix_bin_uns.scale_left any_to_any_: 2403. 2430 fix_bin_uns.scale_right any_to_any_: 2397, 2416. 2405 fix_bin_uns_generic_case any_to_any_: 2373, 2375. 2402 fix_bin_uns_generic_conversion any_to_any_: 871, 885, 892, 2370, 2652, 2658. 2562 fix_bin_uns_to_bit any_to_any_: 2381, 2556. 3036 fix_bin_uns_to_char any_to_any_: 2382, 2866. 2414 fix_bin_uns_to_fix_bin any_to_any_: 2377, 2391. 2414 fix_bin_uns_to_fix_bin_uns any_to_any_: 2380, 2392. 2450 fix_bin_uns_to_flt_bin any_to_any_: 2378, 2448. 2477 fix_bin_uns_to_flt_dec any_to_any_: 2379, 2483, 2867. 14 fix_dec_generic any_to_any_: 171, 1061, 1075, 1091, 1104, 1107, 3251, 3254, 3261. 22 fix_dec_type any_to_any_: 253, 2863, 2894. 777700 flag_mask any_to_any_: 598. 2 FLOAT_BIN any_to_any_: 606, 624, 625, 628, 629, 668, 669, 670, 671, 706, 707, 716, 717, 720, 721, 760, 761, 762, 763, 798, 799. 3 FLOAT_DEC any_to_any_: 607, 630, 631, 632, 633, 650, 651, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 702, 703, 704, 705, 722, 723, 724, 725, 742, 743, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 794, 795, 796, 797. 3471 float_edit any_to_any_: 3321, 3322, 3324. 3467 float_edit_desc any_to_any_: 3262, 3320. 4073 float_prec any_to_any_: 3852, 3877, 3879. 4102 float_prec.real any_to_any_: 3855, 3860. 2 fltbin any_to_any_: 3405, 3753, 3755, 3758, 3759, 3760, 3761, 3762, 3767, 3773, 3774. 4010 fltbin_type any_to_any_: 3741, 3757. 4 fltdec any_to_any_: 3407, 3769, 3772, 3775, 3776, 4243. 4022 fltdec_type any_to_any_: 3743, 3771. 1747 flt_bin.flt_dec.neg_continue any_to_any_: 1884, 1888. 1752 flt_bin.flt_dec.neg_done any_to_any_: 1886, 1896. 1737 flt_bin.flt_dec.set_neg any_to_any_: 1875, 1878. 1710 flt_bin.flt_dec.set_pos any_to_any_: 1832, 1835. 1734 flt_bin.flt_dec.start_neg any_to_any_: 1826, 1873, 1912. 1705 flt_bin.flt_dec.start_pos any_to_any_: 1824, 1830, 1860. 1732 flt_bin.flt_dec.to_target any_to_any_: 1823, 1862. 6 flt_bin_generic any_to_any_: 166, 442, 443, 942, 943, 955, 956, 961, 978, 998, 999, 1011, 1012, 1024, 1529, 1539, 1540, 1559, 1560, 1707, 1734, 1785, 1791, 1811, 1921, 2104, 2105, 2217, 2225, 2229, 2464, 2473, 2474, 2507, 2508, 3448, 3453, 4037, 4071, 4074, 4153, 4154, 4155, 4157, 4158, 4698, 4702, 4715, 4747, 4806, 4809, 4835, 5506, 5507. 1603 flt_bin_generic_case any_to_any_: 1691, 1693. 1600 flt_bin_generic_conversion any_to_any_: 444, 957, 965, 983, 1013, 1031, 1688, 3667, 3693, 5508. 12 flt_bin_generic_exp any_to_any_: 167, 441, 954, 960, 962, 964, 981, 1010, 1019, 1025, 1027, 1030, 1523, 1525, 1528, 1530, 1532, 1538, 1714, 1740, 1822, 1927, 2008, 2009, 2113, 2232, 2278, 2279, 2454, 2457, 2460, 2463, 2465, 2467, 2472, 4036, 4077, 4119, 4123, 4712, 4714, 4720, 4723, 4743, 4746, 4748, 4754, 4756, 4826, 4829, 4834, 4838, 4845, 4847, 5484, 5505. 1770 flt_bin_to_bit any_to_any_: 1699, 1920. 3021 flt_bin_to_char any_to_any_: 1700, 2845. 1632 flt_bin_to_fix_bin any_to_any_: 1695, 1733. 1612 flt_bin_to_fix_bin_uns any_to_any_: 1698, 1706. 1650 flt_bin_to_flt_dec any_to_any_: 1697, 1784, 2846. 1660 flt_bin_to_flt_dec.go any_to_any_: 1794, 1799. 2373 flt_dec.bit.ceil any_to_any_: 2352, 2354. 2376 flt_dec.bit.min any_to_any_: 2356, 2358. 2044 flt_dec.fix_bin.exp_change any_to_any_: 1982, 2004. 2035 flt_dec.fix_bin.neg_scale any_to_any_: 1974, 1992. 2054 flt_dec.fix_bin.no_scale any_to_any_: 1973, 2017. 2073 flt_dec.fix_bin.ovfl any_to_any_: 2033, 2038. 2062 flt_dec.fix_bin.zero any_to_any_: 1990, 2025. 2033 flt_dec.fix_bin.zero_fix any_to_any_: 1988, 1999. 2305 flt_dec.fix_bin_uns.exp_change any_to_any_: 2255, 2274. 2276 flt_dec.fix_bin_uns.neg_scale any_to_any_: 2247, 2264. 2315 flt_dec.fix_bin_uns.no_scale any_to_any_: 2246, 2287. 2334 flt_dec.fix_bin_uns.ovfl any_to_any_: 2306, 2311. 2323 flt_dec.fix_bin_uns.zero any_to_any_: 2262, 2295. 2274 flt_dec.fix_bin_uns.zero_fix any_to_any_: 2260, 2271. 2201 flt_dec.flt_bin.done any_to_any_: 2149, 2166. 2230 flt_dec.flt_bin.dwn.final any_to_any_: 2139, 2202. 2136 flt_dec.flt_bin.max_prec any_to_any_: 2106, 2109. 2155 flt_dec.flt_bin.scale_dwn any_to_any_: 2137, 2183. 2171 flt_dec.flt_bin.scale_up any_to_any_: 2135, 2152, 2182. 2237 flt_dec.flt_bin.up.enter any_to_any_: 2197, 2214. 2220 flt_dec.flt_bin.up.final any_to_any_: 2155, 2188. 14 flt_dec_generic any_to_any_: 170, 451, 1076, 1108, 1122, 1137, 1176, 1193, 1210, 1234, 1249, 1266, 1269, 1287, 1289, 1308, 1331, 1568, 1582, 1583, 1591, 1592, 1596, 1812, 1816, 1838, 1839, 1844, 1859, 1881, 1882, 1890, 1891, 1898, 1911, 1948, 1980, 1981, 1997, 1998, 2007, 2023, 2028, 2029, 2031, 2040, 2075, 2126, 2143, 2144, 2146, 2147, 2159, 2160, 2171, 2180, 2191, 2195, 2196, 2205, 2209, 2210, 2216, 2240, 2253, 2254, 2269, 2270, 2277, 2293, 2298, 2299, 2304, 2313, 2332, 2336, 2337, 2339, 2494, 2498, 2516, 2529, 2530, 2538, 2539, 2543, 3919, 3945, 3953, 3961, 4901, 4903, 4916, 4925, 4926, 4947, 4948, 4953, 4957, 4981, 4983, 5008, 5021, 5025, 5041, 5061, 5065, 5068, 5102, 5106, 5109, 5148, 5162, 5166, 5182, 5217, 5226, 5540. 2012 flt_dec_generic_case any_to_any_: 1952, 1958. 2004 flt_dec_generic_conversion any_to_any_: 453, 1256, 1276, 1298, 1319, 1335, 1945, 3665, 3668, 3669, 3691, 3694, 3695, 5542. 13 flt_dec_generic_exp any_to_any_: 169, 452, 1022, 1028, 1068, 1071, 1098, 1101, 1247, 1250, 1255, 1270, 1271, 1274, 1290, 1291, 1294, 1314, 1315, 1317, 1325, 1569, 1597, 1598, 1601, 1806, 1850, 1904, 2012, 2018, 2022, 2084, 2176, 2190, 2204, 2282, 2288, 2292, 2327, 2331, 2519, 2544, 2545, 2548, 3917, 3936, 4089, 4091, 4896, 4900, 4929, 4932, 4934, 4950, 4962, 4976, 4980, 5062, 5080, 5103, 5121, 5208, 5209, 5214, 5216, 5229, 5515, 5541. 2344 flt_dec_to_bit any_to_any_: 1964, 2326. 3023 flt_dec_to_char any_to_any_: 1965, 2853. 2021 flt_dec_to_fix_bin any_to_any_: 1960, 1969. 2256 flt_dec_to_fix_bin_uns any_to_any_: 1963, 2238. 2106 flt_dec_to_flt_bin any_to_any_: 1961, 2072. 246 flt_dec_type any_to_any_: 254, 2859, 2890. 6233 flt_range_error any_to_any_: 4745, 4833, 4873, 4886, 5483. 6265 force_zero any_to_any_: 1553, 1786, 2485, 5527, 5536. 3114 format_fix any_to_any_: 2933, 2936, 2944. 3232 format_fixed any_to_any_: 2948, 2974, 3090. 3274 format_fixed.no_lead_digits any_to_any_: 3095, 3136. 3247 format_fixed.right any_to_any_: 3107, 3128, 3134, 3141. 3260 format_fixed.zero any_to_any_: 3099, 3120. 3270 format_fixed.zero_pos any_to_any_: 3124, 3130. 3360 format_float any_to_any_: 2981, 3236. 3136 format_flt_bin any_to_any_: 2934, 2960, 2980. 3121 format_flt_dec any_to_any_: 2935, 2957. 3202 format_integer any_to_any_: 2945, 2962, 3045. 3216 format_integer.zero any_to_any_: 3051, 3059. 3310 format_scaled any_to_any_: 2968, 3169. 3356 format_scaled.edit any_to_any_: 3218, 3219, 3221. 3354 format_scaled.edit_desc any_to_any_: 3185, 3217. 3341 format_scaled.have_length any_to_any_: 3198, 3201, 3204. 3321 format_scaled.nonzero any_to_any_: 3174, 3182. 3325 format_scaled.scale_factor any_to_any_: 3178, 3190. 12 fo_link any_to_any_: 5622, 5663. 2 fractional_part any_to_any_: 130. 10 f_class any_to_any_: 217. 2 generic any_to_any_: 222, 503, 1046, 1076, 1108, 1233, 1359, 1384, 1666, 1681, 2586, 2602, 2634, 2639, 2650, 2655, 2671, 2673, 2704, 2734, 2783, 2817, 2986, 2998, 3006, 3015, 3016, 3021, 3032, 3055, 3062, 3103, 3112, 3127, 3133, 3140, 3177, 3186, 3193, 3209, 3263, 3266, 3269, 3272, 3284, 3285, 3297, 3300, 3446, 3459, 3478, 3556, 3569, 3570, 3571, 3657, 3683, 3701, 3944, 3952, 3960, 4010, 4068, 4088, 4118, 4140, 4151, 4173, 4204, 4224, 4254, 4268, 4285, 4293, 4305, 4328, 4338, 4352, 5271, 5302, 5408, 5411. 77 generic_mask any_to_any_: 431, 599, 1394, 1690, 1951, 2372, 2610, 2739, 2928. 40 generic_ptr any_to_any_: 178, 3443, 3657, 3683. 5175 generic_to_target any_to_any_: 1416, 1440, 1498, 1533, 1541, 1573, 1602, 1673, 1682, 1696, 1855, 1864, 1907, 1962, 2034, 2046, 2233, 2307, 2319, 2439, 2468, 2475, 2523, 2549, 2593, 2603, 2674, 2735, 2818, 2832, 2854, 3034, 4593. 1313 get_bit any_to_any_: 640, 1352. 1314 get_bit.set_source any_to_any_: 1350, 1358. 1313 get_bit_packed any_to_any_: 640, 1353. 1320 get_char any_to_any_: 642, 1382. 1320 get_char_packed any_to_any_: 642, 1383. 6273 get_ERROR any_to_any_: 621, 634, 635, 636, 637, 638, 639, 644, 645, 646, 647, 648, 649, 652, 653, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 5547. 6273 get_ERROR_packed any_to_any_: 621, 634, 635, 636, 637, 638, 639, 644, 645, 646, 647, 648, 649, 652, 653, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 5548. 677 get_fix_bin_1 any_to_any_: 622, 626, 900. 654 get_fix_bin_1uns any_to_any_: 654, 866. 661 get_fix_bin_1uns_packed any_to_any_: 654, 874. 704 get_fix_bin_1_packed any_to_any_: 622, 626, 908. 717 get_fix_bin_2 any_to_any_: 623, 627, 923. 673 get_fix_bin_2uns any_to_any_: 655, 888. 661 get_fix_bin_2uns_packed any_to_any_: 655, 875. 704 get_fix_bin_2_packed any_to_any_: 623, 627, 909. 1145 get_fix_dec_4ls any_to_any_: 662, 664, 666, 1169. 1145 get_fix_dec_4ls_packed any_to_any_: 662, 664, 666, 1170. 1171 get_fix_dec_4ts any_to_any_: 660, 1203. 1171 get_fix_dec_4ts_packed any_to_any_: 660, 1204. 1157 get_fix_dec_4uns any_to_any_: 659, 661, 1186. 1157 get_fix_dec_4uns_packed any_to_any_: 659, 661, 1187. 1021 get_fix_dec_9ls any_to_any_: 630, 632, 1042. 1026 get_fix_dec_9ls_ovrp any_to_any_: 650, 1052. 1026 get_fix_dec_9ls_ovrp_packed any_to_any_: 650, 1053. 1021 get_fix_dec_9ls_packed any_to_any_: 630, 632, 1043. 1104 get_fix_dec_9ts any_to_any_: 657, 658, 1130. 1050 get_fix_dec_9ts_ovrp any_to_any_: 651, 1082. 1050 get_fix_dec_9ts_ovrp_packed any_to_any_: 651, 1083. 1104 get_fix_dec_9ts_packed any_to_any_: 657, 658, 1131. 1074 get_fix_dec_9uns any_to_any_: 656, 1115. 1074 get_fix_dec_9uns_packed any_to_any_: 656, 1116. 745 get_flt_bin.zero any_to_any_: 953, 959. 723 get_flt_bin_1 any_to_any_: 624, 628, 931. 726 get_flt_bin_1_packed any_to_any_: 624, 628, 936. 736 get_flt_bin_2 any_to_any_: 625, 629, 947. 726 get_flt_bin_2_packed any_to_any_: 625, 629, 937. 753 get_flt_bin_gen any_to_any_: 706, 707, 976. 6273 get_flt_bin_gen_packed any_to_any_: 706, 707, 5560. 1236 get_flt_dec_4 any_to_any_: 663, 665, 667, 1280. 1236 get_flt_dec_4_packed any_to_any_: 663, 665, 667, 1281. 1220 get_flt_dec_9 any_to_any_: 631, 633, 1260. 1220 get_flt_dec_9_packed any_to_any_: 631, 633, 1261. 1257 get_flt_dec_ext any_to_any_: 702, 703, 1302. 1257 get_flt_dec_ext_packed any_to_any_: 702, 703, 1303. 1274 get_flt_dec_gen any_to_any_: 704, 705, 1323. 6273 get_flt_dec_gen_packed any_to_any_: 704, 705, 5558. 1004 get_flt_hex.nz any_to_any_: 1009, 1018. 762 get_flt_hex_1 any_to_any_: 668, 670, 987. 765 get_flt_hex_1_packed any_to_any_: 668, 670, 992. 775 get_flt_hex_2 any_to_any_: 669, 671, 1003. 765 get_flt_hex_2_packed any_to_any_: 669, 671, 993. 1310 get_varying_bit any_to_any_: 641, 1347. 6273 get_varying_bit_packed any_to_any_: 641, 5555. 1316 get_varying_char any_to_any_: 643, 1378. 6273 get_varying_char_packed any_to_any_: 643, 5554. 6144 have_extension any_to_any_: 5400, 5412. 10 if0 eis_micro_ops: 19. 4 if1 eis_micro_ops: 20. 2 if2 eis_micro_ops: 21. 1 if3 eis_micro_ops: 22. 300 ign eis_micro_ops: 12. 0 illegal_class any_to_any_: 209. 163 imag.exponent.value any_to_any_: 190, 4278, 4294, 4383, 4390. 162 imag.fraction.index any_to_any_: 190, 4212, 4336. 162 imag.fraction.length any_to_any_: 190, 4213, 4214, 4334, 4365, 4369, 4371. 161 imag.integer.index any_to_any_: 190, 4162, 4326. 161 imag.integer.length any_to_any_: 190, 4163, 4324, 4364, 4368. 165 imag.prec any_to_any_: 190, 3594, 3819, 3856, 3857, 4370. 165 imag.scale any_to_any_: 190, 3598, 3820, 3827, 3829, 4372, 4391, 4397, 4405. 160 imag.sign.index any_to_any_: 190, 4129. 160 imag.sign.length any_to_any_: 190, 4131. 164 imag.term any_to_any_: 190, 3546, 4367. 164 imag.type any_to_any_: 190, 3494, 3519, 3568, 3636, 3812, 3854, 4366. 160 imag_token any_to_any_: 190, 3476, 3490, 3536, 3680. 3465 imag_zero_fl any_to_any_: 3312, 3316. 100000 ind_carry any_to_any_: 236. 20000 ind_exp_overflow any_to_any_: 238. 10000 ind_exp_underflow any_to_any_: 239. 200000 ind_negative any_to_any_: 235. 40000 ind_overflow any_to_any_: 237. 4000 ind_overflow_mask any_to_any_: 240, 244. 400000 ind_zero any_to_any_: 234. 220 insa eis_micro_ops: 9. 200 insb any_to_any_: 3155, 3325, eis_micro_ops: 8. 20 insm any_to_any_: 3070, 3148, eis_micro_ops: 1. 240 insn eis_micro_ops: 10. 260 insp eis_micro_ops: 11. 1 integer_part any_to_any_: 129. 3225 int_edit any_to_any_: 3067, 3068, 3070. 3223 int_edit_desc any_to_any_: 3054, 3066. 5 i_class any_to_any_: 214, 3547. 3662 i_dec_to_bin any_to_any_: 3593, 3755, 3761, 3762. 3664 i_dec_to_xbin any_to_any_: 3597, 3754. 145 letter_e any_to_any_: 203, 3264. 146 letter_f any_to_any_: 204, 3191. 111 letter_I any_to_any_: 202. 151 letter_i any_to_any_: 205, 3014. 4 linkage any_to_any_: 224. 6004 load_flt_dec.range any_to_any_: 5211, 5223. 6013 load_flt_dec.range.fix any_to_any_: 5228, 5231. 5776 load_flt_dec.range_continue any_to_any_: 5213, 5233. 5767 load_flt_dec.target any_to_any_: 5005, 5019, 5037, 5059, 5100, 5145, 5160, 5179, 5205. 5333 load_rounded_flt_bin any_to_any_: 4680, 4688, 4697, 4719, 4742. 5356 load_rounded_flt_bin.negative any_to_any_: 4758, 4767. 2401 log2.10 any_to_any_: 2111, 2349, 2366, 3607, 3618. 400 lte any_to_any_: 3070, 3148, 3155, 3222, 3325, eis_micro_ops: 16. 4000 mask_faults any_to_any_: 244, 404, 407, 457, 500, 1657, 2045, 2318, 2912, 2920, 3672, 4764, 4772. 10406 mask_table any_to_any_: 4759, 4769, 4848, 4853, 4863, 5672. 0 max_area_size pl1_system: 22. 0 max_bit_string pl1_system: 20. 375 max_bit_string_constant pl1_system: 24. 0 max_char_string pl1_system: 21. 376 max_char_string_constant pl1_system: 25. 2103 max_fix_bin.dec any_to_any_: 2041, 2048. 400 max_identifier_length pl1_system: 26. 777777 max_index_register_value pl1_system: 52. 30 max_length_precision pl1_system: 27. 30 max_offset_precision pl1_system: 28. 107 max_p_bin_or_dec pl1_system: 17. 73 max_p_dec any_to_any_: 3929, pl1_system: 16. 43 max_p_fix_bin_1 pl1_system: 14. 107 max_p_fix_bin_2 any_to_any_: 3977, pl1_system: 15. 33 max_p_flt_bin_1 pl1_system: 12. 77 max_p_flt_bin_2 any_to_any_: 4030, pl1_system: 13. 177 max_scale any_to_any_: 4403, pl1_system: 19. 0 max_words_per_variable pl1_system: 29. 160 mflc eis_micro_ops: 7. 140 mfls any_to_any_: 3070, 3148, 3222, 3325, eis_micro_ops: 6. 55 minus_sign any_to_any_: 198, 5020, 5079, 5120, 5161. 34 min_area_size pl1_system: 23. 777600 min_scale any_to_any_: 4393, pl1_system: 18. 360 mors eis_micro_ops: 15. 3 move any_to_any_: 103, 877, 912, 940, 996, 1679, 2600, 2633, 2649, 2670, 2798, 2811, 4090, 4650, 4669, 4701, 4808, 5270. 4320 move_char_to_bit_right any_to_any_: 3989, 3998, 4047, 4056, 4084, 4095. 4123 move_char_to_generic any_to_any_: 3658, 3684, 3904. 116 mp3d.id.pr_rl.pr any_to_any_: 548, 2193. 112 mp3d.id.pr_rl.pr_rl any_to_any_: 540, 1589, 1836, 2157, 2536. 340 mses eis_micro_ops: 14. 320 mvc any_to_any_: 3325, eis_micro_ops: 13. 104 mvn.pr_rl.pr_rl any_to_any_: 528, 1232, 1889, 2027, 2145, 2297, 2335, 4902, 4915, 4946, 4982, 5007, 5024, 5040, 5067, 5108, 5147, 5165, 5181. 120 mvza eis_micro_ops: 5. 100 mvzb eis_micro_ops: 4. 6352 my_name any_to_any_: 5424, 5638. 6361 my_name_desc any_to_any_: 5440, 5648. 25 name_length any_to_any_: 114, 5596. 3307 no_leading_edit any_to_any_: 3151, 3152, 3154. 3305 no_leading_edit_desc any_to_any_: 3139, 3150. 6344 null any_to_any_: 5422, 5605, 5630. 25 onchar_index any_to_any_: 113, 5434. 24 oncode any_to_any_: 112, 5426, 5603. 1416 one any_to_any_: 1457, 1501, 1627, 2420, 2572. 100 onsource any_to_any_: 116, 5409, 5411. 4 onsource_ptr any_to_any_: 115, 5428. 6346 ops_arg_header any_to_any_: 5621, 5631. 2 original_source any_to_any_: 160, 403, 464, 3418, 5399, 5410, 5418. 150 original_source_length any_to_any_: 185, 3440, 3465, 5324, 5343. 6235 overflow_error any_to_any_: 5490. 6364 overflow_name any_to_any_: 5493, 5525, 5655. 1133 overpunch_9_chars any_to_any_: 1074, 1158. 1126 overpunch_9_digits any_to_any_: 1106, 1155, 5075, 5116. 1121 overpunch_9_signs any_to_any_: 1103, 1152. 1114 overpunch_9_source any_to_any_: 1066, 1096, 1147, 5086, 5127. 56 period any_to_any_: 199, 3110. 2 period_class any_to_any_: 211. pl1_signal_conversion_ any_to_any_: 5662. pl1_signal_from_ops_ any_to_any_: 5663. 53 plus_sign any_to_any_: 197, 2239, 3121, 3943, 4009, 4067, 5063, 5104. 6360 pointer_desc any_to_any_: 5437, 5618, 5646. 5 prec_part any_to_any_: 133. 1171 push_offset stack_header: 81. 6027 put_bit any_to_any_: 732, 5252, 5257. 6036 put_bit.common any_to_any_: 5263, 5265, 5269. 6030 put_bit.common.aligned any_to_any_: 5255, 5260. 6035 put_bit_packed any_to_any_: 732, 5267. 6053 put_char any_to_any_: 734, 5293. 6055 put_char.common any_to_any_: 5289, 5300. 6053 put_char_packed any_to_any_: 734, 5294. 6273 put_ERROR any_to_any_: 713, 726, 727, 728, 729, 730, 731, 736, 737, 738, 739, 740, 741, 744, 745, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 5549. 6273 put_ERROR_packed any_to_any_: 713, 726, 727, 728, 729, 730, 731, 736, 737, 738, 739, 740, 741, 744, 745, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 5550. 5206 put_fix_bin_1 any_to_any_: 714, 718, 4611. 5177 put_fix_bin_1uns any_to_any_: 746, 4602. 5235 put_fix_bin_1uns_packed any_to_any_: 746, 4642. 5250 put_fix_bin_1_packed any_to_any_: 714, 718, 4660. 5225 put_fix_bin_2 any_to_any_: 715, 719, 4630. 5216 put_fix_bin_2uns any_to_any_: 747, 4621. 5235 put_fix_bin_2uns_packed any_to_any_: 747, 4643. 5250 put_fix_bin_2_packed any_to_any_: 715, 719, 4661. 5726 put_fix_dec_4ls any_to_any_: 754, 756, 758, 5143. 5726 put_fix_dec_4ls_packed any_to_any_: 754, 756, 758, 5144. 5755 put_fix_dec_4ts any_to_any_: 752, 5177. 5755 put_fix_dec_4ts_packed any_to_any_: 752, 5178. 5740 put_fix_dec_4uns any_to_any_: 751, 753, 5158. 5740 put_fix_dec_4uns_packed any_to_any_: 751, 753, 5159. 5607 put_fix_dec_9ls any_to_any_: 722, 724, 5003. 5642 put_fix_dec_9ls_ovrp any_to_any_: 742, 5057. 5667 put_fix_dec_9ls_ovrp.pos any_to_any_: 5082, 5084. 5642 put_fix_dec_9ls_ovrp_packed any_to_any_: 742, 5058. 5607 put_fix_dec_9ls_packed any_to_any_: 722, 724, 5004. 5632 put_fix_dec_9ts any_to_any_: 749, 750, 5035. 5674 put_fix_dec_9ts_ovrp any_to_any_: 743, 5098. 5721 put_fix_dec_9ts_ovrp.pos any_to_any_: 5123, 5125. 5674 put_fix_dec_9ts_ovrp_packed any_to_any_: 743, 5099. 5632 put_fix_dec_9ts_packed any_to_any_: 749, 750, 5036. 5617 put_fix_dec_9uns any_to_any_: 748, 5017. 5617 put_fix_dec_9uns_packed any_to_any_: 748, 5018. 5264 put_flt_bin_1 any_to_any_: 716, 720, 4678. 5276 put_flt_bin_1_packed any_to_any_: 716, 720, 4694. 5271 put_flt_bin_2 any_to_any_: 717, 721, 4686. 5276 put_flt_bin_2_packed any_to_any_: 717, 721, 4695. 5307 put_flt_bin_gen any_to_any_: 798, 799, 4711. 5326 put_flt_bin_gen.zero any_to_any_: 4716, 4729. 6273 put_flt_bin_gen_packed any_to_any_: 798, 799, 5561. 5566 put_flt_dec_4 any_to_any_: 755, 757, 759, 4972. 5566 put_flt_dec_4_packed any_to_any_: 755, 757, 759, 4973. 5471 put_flt_dec_9 any_to_any_: 723, 725, 4892. 5471 put_flt_dec_9_packed any_to_any_: 723, 725, 4893. 5510 put_flt_dec_ext any_to_any_: 794, 795, 4910. 5534 put_flt_dec_ext.zero_exp any_to_any_: 4918, 4936. 5510 put_flt_dec_ext_packed any_to_any_: 794, 795, 4911. 5536 put_flt_dec_gen any_to_any_: 796, 797, 4942. 5546 put_flt_dec_gen.non_zero any_to_any_: 4949, 4951. 6273 put_flt_dec_gen_packed any_to_any_: 796, 797, 5559. 5371 put_flt_hex_1 any_to_any_: 760, 762, 4786. 5403 put_flt_hex_1_packed any_to_any_: 760, 762, 4802. 5376 put_flt_hex_2 any_to_any_: 761, 763, 4794. 5403 put_flt_hex_2_packed any_to_any_: 761, 763, 4803. 6015 put_varying_bit any_to_any_: 733, 5245. 6273 put_varying_bit_packed any_to_any_: 733, 5557. 6042 put_varying_char any_to_any_: 735, 5279. 6051 put_varying_char.in_range any_to_any_: 5285, 5287. 6273 put_varying_char_packed any_to_any_: 735, 5556. 155 real.exponent.value any_to_any_: 189, 3934, 3935, 4035. 154 real.fraction.index any_to_any_: 189, 3957, 3987, 4040, 4045. 154 real.fraction.length any_to_any_: 189, 3927, 3932, 3958, 3975, 3984, 3988, 4027, 4042, 4046. 153 real.integer.index any_to_any_: 189, 3950, 3996, 4054. 153 real.integer.length any_to_any_: 189, 3926, 3949, 3976, 3994, 3997, 4029, 4033, 4041, 4052, 4055. 157 real.prec any_to_any_: 189, 3590, 3661, 3687, 3817, 3838, 3853, 3916, 4003, 4061. 157 real.scale any_to_any_: 189, 3586, 3818, 3826, 3973. 152 real.sign.index any_to_any_: 189, 3941, 4008, 4066. 152 real.sign.length any_to_any_: 189, 3940, 4006, 4064. 156 real.term any_to_any_: 189, 3503. 156 real.type any_to_any_: 189, 3567, 3663, 3689, 3905. 1 real_fix_bin_1 any_to_any_: 3780, 3795. 2 real_fix_bin_2 any_to_any_: 3781, 3794, 3795, 3972. 11 real_fix_dec_9bit_ls any_to_any_: 3788, 3797. 3 real_flt_bin_1 any_to_any_: 3782, 3796. 4 real_flt_bin_2 any_to_any_: 3783, 3796, 4026. 12 real_flt_dec_9bit any_to_any_: 3789, 3798. 123 real_flt_dec_generic any_to_any_: 258, 3925. 152 real_token any_to_any_: 189, 3473, 3491, 3528, 3681. 2 real_to_real_ any_to_any_: 88, 379. 6 real_to_real_round_ any_to_any_: 89, 386. 0 real_to_real_truncate_ any_to_any_: 90, 374. 3464 real_zero_fl any_to_any_: 3311, 3314. 4334 recognize any_to_any_: 3488, 3538, 4112. 4602 recognize.bin.frac any_to_any_: 4335, 4343. 4572 recognize.bin.int any_to_any_: 4325, 4333. 4536 recognize.common_exponent any_to_any_: 4279, 4296. 4605 recognize.end_of_input any_to_any_: 4350. 4637 recognize.finish_scale any_to_any_: 4384, 4389. 4615 recognize.finish_up any_to_any_: 4180, 4184, 4185, 4196, 4231, 4235, 4236, 4312, 4316, 4317, 4357, 4363. 4632 recognize.fix_scale any_to_any_: 4378, 4382. 4562 recognize.have_bin any_to_any_: 4182, 4233, 4314, 4323. 4445 recognize.no_fraction any_to_any_: 4208, 4222. 4401 recognize.no_integer any_to_any_: 4144, 4171. 4614 recognize.no_more_input any_to_any_: 4167, 4218, 4300, 4361. 4353 recognize.no_sign any_to_any_: 4125, 4138. 4650 recognize.scale_pos any_to_any_: 4392, 4400. 4430 recognize.scan_fraction any_to_any_: 4194, 4202. 4465 recognize.start_exponent_flt any_to_any_: 4183, 4234, 4242. 4421 recognize.start_fractional any_to_any_: 4181, 4191. 4466 recognize.start_scaled_fix any_to_any_: 4187, 4238, 4247. 4523 recognize.unsigned_exponent any_to_any_: 4260, 4283. 3502 restore_target any_to_any_: 3030, 3343. 34 return any_to_any_: 176, 3335, 3347. 1173 return_no_pop_offset stack_header: 83. 1172 return_offset stack_header: 82. 400000 round any_to_any_: 382, 584, 624, 625, 628, 629, 631, 633, 663, 665, 667, 668, 669, 670, 671, 702, 703, 704, 705, 706, 707, 716, 717, 720, 721, 723, 725, 755, 757, 759, 760, 761, 762, 763, 794, 795, 796, 797, 798, 799, 3649. 3660 r_dec_to_bin any_to_any_: 3589, 3767, 3773, 3774. 3656 r_dec_to_xbin any_to_any_: 3585, 3766. 42 save_pr4 any_to_any_: 179, 3336, 3348. 0 save_ptrs any_to_any_: 108, 115, 5419, 5465, 5590. 20 save_regs any_to_any_: 109, 112, 113, 114, 5420, 5464, 5591. 47 save_rounding any_to_any_: 182, 3419, 3647, 3652, 3659, 3685. 3473 save_target any_to_any_: 2855, 2870, 3331. 46 save_target_precision any_to_any_: 181, 2999, 3025, 3333, 3344. 36 save_target_ptr any_to_any_: 177, 3334, 3346. 151 save_target_type any_to_any_: 186, 3337, 3349. 0 scales any_to_any_: 154, 395. 60 ses eis_micro_ops: 3. 100000 short any_to_any_: 586, 716, 720. 6300 signal_from_ops any_to_any_: 5477, 5494, 5503, 5526, 5535, 5567, 5575. 1 sign_class any_to_any_: 210, 4122, 4257. 0 sign_part any_to_any_: 128. 20000 simple any_to_any_: 422, 588. 6226 size_error any_to_any_: 1412, 1427, 1446, 1475, 1495, 1621, 1640, 1650, 1662, 1677, 1708, 1715, 1719, 1721, 1741, 1744, 1746, 1928, 1931, 1933, 2042, 2242, 2315, 2341, 2407, 2438, 2566, 2598, 2641, 2657, 4015, 4607, 4617, 4626, 4636, 4647, 4668, 5010, 5023, 5027, 5043, 5070, 5111, 5150, 5164, 5168, 5184, 5230, 5473. 6363 size_name any_to_any_: 5476, 5653. 3 source any_to_any_: 223, 503, 867, 870, 878, 880, 889, 891, 901, 904, 913, 915, 924, 926, 932, 933, 941, 944, 948, 949, 977, 980, 982, 988, 989, 997, 1000, 1004, 1005, 1046, 1047, 1060, 1067, 1077, 1090, 1097, 1109, 1121, 1123, 1136, 1138, 1175, 1179, 1192, 1196, 1209, 1213, 1265, 1275, 1286, 1297, 1307, 1313, 1318, 1324, 1330, 1333, 1334, 1348, 1359, 1379, 1384, 2926, 3049, 3053, 3056, 3063, 3097, 3101, 3111, 3115, 3122, 3138, 3172, 3184, 3214, 3238, 3250, 3253, 3256, 3289, 3290, 3303, 3304, 3980, 3981, 3982, 4037, 4038, 4039, 4092, 4277. 256 source_map_size any_to_any_: 396, 709. 1 source_precision any_to_any_: 158, 876, 910, 938, 994, 1044, 1054, 1084, 1117, 1132, 1171, 1188, 1205, 1262, 1282, 1304, 1326, 1349, 1354, 1380, 1385, 1667, 2073, 2345, 2359, 2587, 2762, 2831, 2856, 2877, 2971, 3212, 3915, 3931, 3979, 4032. 1 source_scale any_to_any_: 157, 1252, 1414, 1438, 1518, 1572, 1611, 1668, 2346, 2395, 2449, 2522, 2558, 2588, 2896, 2946, 2963, 2972, 3194, 3924, 3974, 4028. 1 source_string_length any_to_any_: 159, 502, 1388, 3420, 3431, 3703, 5323, 5325, 5406, 5413, 5415, 5432. 120 source_type_map any_to_any_: 405, 420, 421, 430, 620, 709, 2860, 2891, 2915, 2918, 2927, 2958, 2994. 6 sp any_to_any_: 226. 73 stach_header.trace_top_ptr stack_header: 62. 32 stack_frame.arg_ptr stack_frame: 16. 100 stack_frame.condition_bit stack_frame: 32. 20 stack_frame.condition_word stack_frame: 9. 2000 stack_frame.crawl_out_bit stack_frame: 28. 26 stack_frame.entry_ptr stack_frame: 13. 20 stack_frame.flag_word stack_frame: 24. 400 stack_frame.link_trap_bit stack_frame: 30. 30 stack_frame.lp_ptr stack_frame: 15. 20000 stack_frame.main_proc_bit stack_frame: 25. 60 stack_frame.min_length stack_frame: 23. 22 stack_frame.next_sp any_to_any_: 471, 5404, 5585, stack_frame: 10. 36 stack_frame.on_unit_rel_ptrs stack_frame: 19. 30 stack_frame.operator_ptr stack_frame: 14. 37 stack_frame.operator_ret_ptr any_to_any_: 5398, 5467, 5468, 5576, stack_frame: 20. 20 stack_frame.prev_sp stack_frame: 8. 40 stack_frame.regs stack_frame: 22. 24 stack_frame.return_ptr any_to_any_: 5457, 5461, stack_frame: 12. 10000 stack_frame.run_unit_manager stack_frame: 26. 1000 stack_frame.signaller_bit stack_frame: 29. 22 stack_frame.signaller_word stack_frame: 11. 4000 stack_frame.signal_bit stack_frame: 27. 34 stack_frame.static_ptr stack_frame: 17. 200 stack_frame.support_bit stack_frame: 31. 35 stack_frame.support_ptr stack_frame: 18. 37 stack_frame.translator_id stack_frame: 21. 66 stack_header.assign_linkage_ptr stack_header: 59. 32 stack_header.bar_mode_sp stack_header: 42. 36 stack_header.call_op_ptr stack_header: 44. 10 stack_header.clr_ptr stack_header: 27. 6 stack_header.combined_stat_ptr stack_header: 25. 4 stack_header.cpm_data_ptr stack_header: 24. 13 stack_header.cpm_enabled stack_header: 32. 13 stack_header.cur_lot_size stack_header: 31. 64 stack_header.ect_ptr stack_header: 58. 46 stack_header.entry_op_ptr stack_header: 49. 70 stack_header.heap_header_ptr stack_header: 60. 74 stack_header.in_trace stack_header: 63. 52 stack_header.isot_ptr stack_header: 52. 26 stack_header.lot_ptr any_to_any_: 5455, stack_header: 39. 12 stack_header.main_proc_invoked stack_header: 29. 12 stack_header.max_lot_size stack_header: 28. 20 stack_header.parent_ptr stack_header: 36. 34 stack_header.pl1_operators_ptr stack_header: 43. 40 stack_header.push_op_ptr stack_header: 46. 42 stack_header.return_op_ptr stack_header: 47. 44 stack_header.ret_no_pop_op_ptr stack_header: 48. 62 stack_header.rnt_ptr stack_header: 57. 12 stack_header.run_unit_depth stack_header: 30. 54 stack_header.sct_ptr stack_header: 53. 30 stack_header.signal_ptr stack_header: 41. 22 stack_header.stack_begin_ptr stack_header: 37. 24 stack_header.stack_end_ptr any_to_any_: 468, 470, 5401, 5403, 5462, 5582, 5584, stack_header: 38. 14 stack_header.system_free_ptr stack_header: 33. 60 stack_header.sys_link_info_ptr stack_header: 56. 72 stack_header.trace_frames stack_header: 61. 50 stack_header.trans_op_tv_ptr stack_header: 51. 56 stack_header.unwinder_ptr stack_header: 54. 16 stack_header.user_free_ptr stack_header: 34. 100 stack_header_end stack_header: 64. 6246 store_float_bin_zero any_to_any_: 2078, 2088, 5495, 5504. 6362 string_desc any_to_any_: 5610, 5650. 1 target any_to_any_: 221, 2858, 2889, 4604, 4608, 4613, 4618, 4623, 4627, 4632, 4637, 4652, 4653, 4671, 4672, 4681, 4682, 4689, 4690, 4703, 4704, 4713, 4722, 4725, 4726, 4730, 4731, 4732, 4733, 4789, 4790, 4797, 4798, 4810, 4811, 4904, 4907, 4917, 4924, 4935, 4937, 4958, 4963, 4965, 4966, 4984, 4989, 5009, 5011, 5026, 5028, 5042, 5044, 5069, 5076, 5087, 5088, 5110, 5117, 5128, 5129, 5149, 5153, 5167, 5171, 5183, 5187, 5248, 5254, 5261, 5264, 5272, 5288, 5303. 256 target_map_size any_to_any_: 398, 801. 0 target_precision any_to_any_: 156, 477, 1678, 1802, 1970, 2100, 2243, 2436, 2596, 2599, 2669, 2688, 2763, 2857, 2885, 2895, 2988, 3001, 3247, 3332, 3345, 3641, 3821, 3822, 3832, 3834, 3839, 3842, 3861, 3863, 3864, 3866, 4605, 4614, 4624, 4633, 4644, 4662, 4696, 4804, 4894, 4912, 4943, 4974, 5218, 5249, 5250, 5251, 5253, 5258, 5268, 5281, 5284, 5286, 5295. 0 target_scale any_to_any_: 155, 1413, 1437, 1725, 1750, 1972, 1994, 2245, 2265, 2394, 2908, 3092, 3108, 3113, 3830, 3831, 5206. 376 target_type_map any_to_any_: 381, 416, 712, 801, 1393, 1689, 1950, 2371, 2609, 2691, 2738, 2766, 3648, 3673, 4594. 46 tbp any_to_any_: 230, 479, 5460, 5598. 30 token_length any_to_any_: 135, 3473, 3476, 3490, 3491, 3528, 3536, 3680, 3681. 6 token_size any_to_any_: 134, 135, 190. 1552 to_bit any_to_any_: 1613, 1622, 1641, 1645, 1656, 2361. 1561 to_bit.pos any_to_any_: 1660, 1665. 2605 to_bit_uns any_to_any_: 2559, 2567, 2584. 3137 to_char.call_format any_to_any_: 2947, 2949, 2964, 2969, 2973, 2975, 2985. 3176 to_char.copy_to_target any_to_any_: 2996, 3029. 3037 to_char.enter any_to_any_: 2843, 2847, 2869. 3071 to_char.float_type any_to_any_: 2862, 2864, 2893, 2901, 2910. 3105 to_char.formatter any_to_any_: 2929, 2931. 3174 to_char.no_fill any_to_any_: 3018, 3023. 3061 to_char.pos_scale any_to_any_: 2897, 2899. 3046 to_char.precision.ceil any_to_any_: 2881, 2884. 3067 to_char.scale.ceiling any_to_any_: 2904, 2906. 3101 to_char.simple_source any_to_any_: 2917, 2925. 0 trace_frames.count stack_header: 69. 1 trace_frames.top_ptr stack_header: 70. 5056 translate_tab any_to_any_: 4491, 4503. 5046 translate_table any_to_any_: 4120, 4175, 4226, 4256, 4307, 4354, 4503. 551 tv_offset stack_header: 75, 80, 81, 82, 83, 84. 6373 two_0 two_table: 1, 200. 6374 two_1 two_table: 2, 201. 6405 two_10 two_table: 11, 210. 6752 two_100 two_table: 101, 300. 6756 two_101 two_table: 102, 301. 6762 two_102 two_table: 103, 302. 6766 two_103 two_table: 104, 303. 6772 two_104 two_table: 105, 304. 6776 two_105 two_table: 106, 305. 7002 two_106 two_table: 107, 306. 7006 two_107 two_table: 108, 307. 7013 two_108 two_table: 109, 308. 7020 two_109 two_table: 110, 309. 6406 two_11 two_table: 12, 211. 7025 two_110 two_table: 111, 310. 7032 two_111 two_table: 112, 311. 7037 two_112 two_table: 113, 312. 7044 two_113 two_table: 114, 313. 7051 two_114 two_table: 115, 314. 7056 two_115 two_table: 116, 315. 7063 two_116 two_table: 117, 316. 7070 two_117 two_table: 118, 317. 7075 two_118 two_table: 119, 318. 7102 two_119 two_table: 120, 319. 6407 two_12 two_table: 13, 212. 7107 two_120 two_table: 121, 320. 7114 two_121 two_table: 122, 321. 7121 two_122 two_table: 123, 322. 7126 two_123 two_table: 124, 323. 7133 two_124 two_table: 125, 324. 7140 two_125 two_table: 126, 325. 7145 two_126 two_table: 127, 326. 7152 two_127 two_table: 128, 327. 7157 two_128 two_table: 129, 328. 7164 two_129 two_table: 130, 329. 6410 two_13 two_table: 14, 213. 7171 two_130 two_table: 131, 330. 7176 two_131 two_table: 132, 331. 7203 two_132 two_table: 133, 332. 7210 two_133 two_table: 134, 333. 7216 two_134 two_table: 135, 334. 7224 two_135 two_table: 136, 335. 7232 two_136 two_table: 137, 336. 7240 two_137 two_table: 138, 337. 7246 two_138 two_table: 139, 338. 7254 two_139 two_table: 140, 339. 6411 two_14 two_table: 15, 214. 7262 two_140 two_table: 141, 340. 7270 two_141 two_table: 142, 341. 7276 two_142 two_table: 143, 342. 7304 two_143 two_table: 144, 343. 7312 two_144 two_table: 145, 344. 7320 two_145 two_table: 146, 345. 7326 two_146 two_table: 147, 346. 7334 two_147 two_table: 148, 347. 7342 two_148 two_table: 149, 348. 7350 two_149 two_table: 150, 349. 6412 two_15 two_table: 16, 215. 7356 two_150 two_table: 151, 350. 7364 two_151 two_table: 152, 351. 7372 two_152 two_table: 153, 352. 7400 two_153 two_table: 154, 353. 7406 two_154 two_table: 155, 354. 7414 two_155 two_table: 156, 355. 7422 two_156 two_table: 157, 356. 7430 two_157 two_table: 158, 357. 7436 two_158 two_table: 159, 358. 7444 two_159 two_table: 160, 359. 6413 two_16 two_table: 17, 216. 7452 two_160 two_table: 161, 360. 7461 two_161 two_table: 162, 361. 7470 two_162 two_table: 163, 362. 7477 two_163 two_table: 164, 363. 7506 two_164 two_table: 165, 364. 7515 two_165 two_table: 166, 365. 7524 two_166 two_table: 167, 366. 7533 two_167 two_table: 168, 367. 7542 two_168 two_table: 169, 368. 7551 two_169 two_table: 170, 369. 6414 two_17 two_table: 18, 217. 7560 two_170 two_table: 171, 370. 7567 two_171 two_table: 172, 371. 7576 two_172 two_table: 173, 372. 7605 two_173 two_table: 174, 373. 7614 two_174 two_table: 175, 374. 7623 two_175 two_table: 176, 375. 7632 two_176 two_table: 177, 376. 7641 two_177 two_table: 178, 377. 7650 two_178 two_table: 179, 378. 7657 two_179 two_table: 180, 379. 6415 two_18 two_table: 19, 218. 7666 two_180 two_table: 181, 380. 7675 two_181 two_table: 182, 381. 7704 two_182 two_table: 183, 382. 7713 two_183 two_table: 184, 383. 7722 two_184 two_table: 185, 384. 7731 two_185 two_table: 186, 385. 7740 two_186 two_table: 187, 386. 7747 two_187 two_table: 188, 387. 7757 two_188 two_table: 189, 388. 7767 two_189 two_table: 190, 389. 6416 two_19 two_table: 20, 219. 7777 two_190 two_table: 191, 390. 10007 two_191 two_table: 192, 391. 10017 two_192 two_table: 193, 392. 10027 two_193 two_table: 194, 393. 10037 two_194 two_table: 195, 394. 10047 two_195 two_table: 196, 395. 10057 two_196 two_table: 197, 396. 10067 two_197 two_table: 198, 397. 6375 two_2 two_table: 3, 202. 6417 two_20 two_table: 21, 220. 6420 two_21 two_table: 22, 221. 6421 two_22 two_table: 23, 222. 6422 two_23 two_table: 24, 223. 6423 two_24 two_table: 25, 224. 6424 two_25 two_table: 26, 225. 6425 two_26 two_table: 27, 226. 6426 two_27 two_table: 28, 227. 6430 two_28 two_table: 29, 228. 6432 two_29 two_table: 30, 229. 6376 two_3 two_table: 4, 203. 6434 two_30 two_table: 31, 230. 6436 two_31 two_table: 32, 231. 6440 two_32 two_table: 33, 232. 6442 two_33 two_table: 34, 233. 6444 two_34 two_table: 35, 234. 6446 two_35 two_table: 36, 235. 6450 two_36 two_table: 37, 236. 6452 two_37 two_table: 38, 237. 6454 two_38 two_table: 39, 238. 6456 two_39 two_table: 40, 239. 6377 two_4 two_table: 5, 204. 6460 two_40 two_table: 41, 240. 6462 two_41 two_table: 42, 241. 6464 two_42 two_table: 43, 242. 6466 two_43 two_table: 44, 243. 6470 two_44 two_table: 45, 244. 6472 two_45 two_table: 46, 245. 6474 two_46 two_table: 47, 246. 6476 two_47 two_table: 48, 247. 6500 two_48 two_table: 49, 248. 6502 two_49 two_table: 50, 249. 6400 two_5 two_table: 6, 205. 6504 two_50 two_table: 51, 250. 6506 two_51 two_table: 52, 251. 6510 two_52 two_table: 53, 252. 6512 two_53 two_table: 54, 253. 6514 two_54 two_table: 55, 254. 6517 two_55 two_table: 56, 255. 6522 two_56 two_table: 57, 256. 6525 two_57 two_table: 58, 257. 6530 two_58 two_table: 59, 258. 6533 two_59 two_table: 60, 259. 6401 two_6 two_table: 7, 206. 6536 two_60 two_table: 61, 260. 6541 two_61 two_table: 62, 261. 6544 two_62 two_table: 63, 262. 6547 two_63 two_table: 64, 263. 6552 two_64 two_table: 65, 264. 6555 two_65 two_table: 66, 265. 6560 two_66 two_table: 67, 266. 6563 two_67 two_table: 68, 267. 6566 two_68 two_table: 69, 268. 6571 two_69 two_table: 70, 269. 6402 two_7 two_table: 8, 207. 6574 two_70 two_table: 71, 270. 6577 two_71 any_to_any_: 2497, two_table: 72, 271. 6602 two_72 any_to_any_: 2314, two_table: 73, 272. 6605 two_73 two_table: 74, 273. 6610 two_74 two_table: 75, 274. 6613 two_75 two_table: 76, 275. 6616 two_76 two_table: 77, 276. 6621 two_77 two_table: 78, 277. 6624 two_78 two_table: 79, 278. 6627 two_79 two_table: 80, 279. 6403 two_8 two_table: 9, 208. 6632 two_80 two_table: 81, 280. 6636 two_81 two_table: 82, 281. 6642 two_82 two_table: 83, 282. 6646 two_83 two_table: 84, 283. 6652 two_84 two_table: 85, 284. 6656 two_85 two_table: 86, 285. 6662 two_86 two_table: 87, 286. 6666 two_87 two_table: 88, 287. 6672 two_88 two_table: 89, 288. 6676 two_89 two_table: 90, 289. 6404 two_9 two_table: 10, 209. 6702 two_90 two_table: 91, 290. 6706 two_91 two_table: 92, 291. 6712 two_92 two_table: 93, 292. 6716 two_93 two_table: 94, 293. 6722 two_94 two_table: 95, 294. 6726 two_95 two_table: 96, 295. 6732 two_96 two_table: 97, 296. 6736 two_97 two_table: 98, 297. 6742 two_98 two_table: 99, 298. 6746 two_99 two_table: 100, 299. 10077 two_table any_to_any_: 1581, 1590, 1837, 1880, 1979, 1996, 2142, 2158, 2194, 2208, 2252, 2268, 2528, 2537, two_table: 199. 305 two_table_limit any_to_any_: 249, 1820, 1831, 1854, 1874, 1883, 1906, 2138, 2140, 2154, 2156. 777777 type_mask any_to_any_: 600. 4 type_part any_to_any_: 132. 6242 underflow_error any_to_any_: 5485, 5499. 6366 underflow_name any_to_any_: 5502, 5534, 5657. 56 unmask_exit any_to_any_: 418, 423, 462, 3675, 3686, 5273, 5304. 0 unmask_faults any_to_any_: 245, 463. 40000 varying any_to_any_: 587, 641, 643, 733, 735, 2692, 2767. 6 words_per_condition_var pl1_system: 51. 4 words_per_entry_var pl1_system: 48. 4 words_per_file_var pl1_system: 49. 1 words_per_fix_bin_1 pl1_system: 40. 2 words_per_fix_bin_2 pl1_system: 41. 1 words_per_flt_bin_1 pl1_system: 42. 2 words_per_flt_bin_2 pl1_system: 43. 4 words_per_format pl1_system: 50. 4 words_per_label_var pl1_system: 47. 1 words_per_offset pl1_system: 45. 2 words_per_pointer pl1_system: 46. 1 words_per_varying_string_header pl1_system: 44. 5 work any_to_any_: 225, 395, 403, 435, 436, 441, 442, 443, 451, 452, 464, 477, 502, 869, 876, 879, 881, 884, 890, 903, 910, 914, 916, 919, 925, 938, 942, 943, 954, 955, 956, 960, 961, 962, 964, 978, 981, 994, 998, 999, 1010, 1011, 1012, 1019, 1022, 1024, 1025, 1027, 1028, 1030, 1044, 1054, 1061, 1068, 1071, 1075, 1076, 1084, 1091, 1098, 1101, 1104, 1107, 1108, 1117, 1122, 1132, 1137, 1171, 1176, 1188, 1193, 1205, 1210, 1234, 1247, 1249, 1250, 1252, 1255, 1262, 1266, 1269, 1270, 1271, 1274, 1282, 1287, 1289, 1290, 1291, 1294, 1304, 1308, 1314, 1315, 1317, 1325, 1326, 1331, 1349, 1354, 1380, 1385, 1388, 1411, 1413, 1414, 1426, 1429, 1437, 1438, 1444, 1459, 1463, 1497, 1518, 1523, 1524, 1525, 1528, 1529, 1530, 1532, 1538, 1539, 1540, 1552, 1559, 1560, 1567, 1568, 1569, 1572, 1582, 1583, 1591, 1592, 1596, 1597, 1598, 1601, 1611, 1617, 1629, 1634, 1658, 1659, 1663, 1666, 1667, 1668, 1678, 1680, 1707, 1709, 1714, 1725, 1734, 1735, 1740, 1750, 1785, 1791, 1802, 1806, 1811, 1812, 1816, 1822, 1838, 1839, 1844, 1845, 1847, 1850, 1859, 1881, 1882, 1890, 1891, 1898, 1899, 1901, 1904, 1911, 1921, 1922, 1927, 1948, 1970, 1972, 1980, 1981, 1994, 1997, 1998, 2007, 2008, 2009, 2012, 2018, 2022, 2023, 2028, 2029, 2031, 2032, 2040, 2044, 2073, 2075, 2077, 2082, 2083, 2084, 2087, 2100, 2104, 2105, 2110, 2113, 2126, 2127, 2128, 2130, 2131, 2132, 2134, 2143, 2144, 2146, 2147, 2159, 2160, 2168, 2171, 2172, 2173, 2176, 2180, 2181, 2190, 2191, 2195, 2196, 2204, 2205, 2209, 2210, 2216, 2217, 2224, 2225, 2226, 2228, 2229, 2230, 2232, 2240, 2243, 2245, 2253, 2254, 2265, 2269, 2270, 2277, 2278, 2279, 2282, 2288, 2292, 2293, 2298, 2299, 2304, 2305, 2313, 2317, 2327, 2331, 2332, 2336, 2337, 2339, 2340, 2345, 2346, 2359, 2360, 2393, 2394, 2395, 2406, 2409, 2422, 2426, 2430, 2436, 2449, 2454, 2455, 2457, 2460, 2463, 2464, 2465, 2467, 2472, 2473, 2474, 2484, 2489, 2493, 2494, 2498, 2507, 2508, 2515, 2516, 2519, 2522, 2529, 2530, 2538, 2539, 2543, 2544, 2545, 2548, 2557, 2558, 2574, 2578, 2585, 2586, 2587, 2588, 2596, 2599, 2601, 2629, 2635, 2651, 2669, 2672, 2673, 2688, 2690, 2697, 2699, 2709, 2715, 2730, 2733, 2734, 2762, 2763, 2765, 2772, 2774, 2784, 2799, 2800, 2813, 2816, 2817, 2831, 2856, 2857, 2858, 2877, 2885, 2889, 2895, 2896, 2908, 2926, 2946, 2963, 2971, 2972, 2986, 2988, 2999, 3001, 3008, 3011, 3012, 3025, 3032, 3092, 3108, 3113, 3194, 3206, 3208, 3212, 3240, 3243, 3247, 3251, 3254, 3257, 3261, 3268, 3274, 3277, 3279, 3286, 3287, 3332, 3333, 3334, 3335, 3336, 3337, 3344, 3345, 3346, 3347, 3348, 3349, 3418, 3419, 3420, 3431, 3440, 3443, 3448, 3453, 3461, 3462, 3465, 3473, 3476, 3480, 3481, 3482, 3487, 3490, 3491, 3494, 3503, 3519, 3528, 3536, 3546, 3558, 3567, 3568, 3604, 3616, 3628, 3629, 3636, 3641, 3647, 3652, 3657, 3659, 3661, 3663, 3680, 3681, 3683, 3685, 3687, 3689, 3703, 3812, 3817, 3818, 3819, 3820, 3821, 3822, 3826, 3827, 3829, 3830, 3831, 3832, 3834, 3838, 3839, 3842, 3853, 3854, 3856, 3857, 3861, 3863, 3864, 3866, 3905, 3915, 3916, 3917, 3919, 3924, 3926, 3927, 3931, 3932, 3934, 3935, 3936, 3940, 3941, 3945, 3949, 3950, 3953, 3957, 3958, 3961, 3973, 3974, 3975, 3976, 3979, 3980, 3984, 3987, 3988, 3994, 3996, 3997, 4003, 4006, 4008, 4013, 4016, 4027, 4028, 4029, 4032, 4033, 4035, 4036, 4037, 4040, 4041, 4042, 4045, 4046, 4052, 4054, 4055, 4061, 4064, 4066, 4071, 4074, 4077, 4089, 4091, 4119, 4123, 4129, 4131, 4142, 4143, 4153, 4154, 4155, 4157, 4158, 4162, 4163, 4164, 4165, 4166, 4174, 4176, 4206, 4207, 4212, 4213, 4214, 4215, 4216, 4217, 4225, 4227, 4255, 4258, 4270, 4271, 4278, 4287, 4288, 4294, 4297, 4298, 4299, 4306, 4308, 4324, 4326, 4330, 4334, 4336, 4340, 4353, 4355, 4364, 4365, 4366, 4367, 4368, 4369, 4370, 4371, 4372, 4383, 4390, 4391, 4397, 4405, 4603, 4605, 4612, 4614, 4622, 4624, 4631, 4633, 4644, 4645, 4651, 4662, 4664, 4670, 4696, 4698, 4702, 4712, 4714, 4715, 4720, 4723, 4743, 4746, 4747, 4748, 4754, 4756, 4771, 4776, 4804, 4806, 4809, 4826, 4829, 4834, 4835, 4838, 4845, 4847, 4875, 4879, 4894, 4896, 4900, 4901, 4903, 4912, 4916, 4925, 4926, 4929, 4932, 4934, 4943, 4947, 4948, 4950, 4953, 4954, 4957, 4959, 4962, 4974, 4976, 4980, 4981, 4983, 5008, 5021, 5025, 5041, 5061, 5062, 5065, 5068, 5077, 5078, 5080, 5102, 5103, 5106, 5109, 5118, 5119, 5121, 5148, 5162, 5166, 5182, 5206, 5208, 5209, 5214, 5216, 5217, 5218, 5226, 5229, 5249, 5250, 5251, 5253, 5258, 5268, 5281, 5284, 5286, 5295, 5323, 5324, 5325, 5343, 5396, 5399, 5406, 5410, 5413, 5415, 5418, 5432, 5466, 5484, 5505, 5506, 5507, 5515, 5540, 5541, 5577. 7 xfer any_to_any_: 376, 383, 395. 3227 zero_field any_to_any_: 3061, 3072, 3132, 3176. 35 zero_fixed_bin any_to_any_: 434, 511, 514. 3446 zero_float any_to_any_: 3241, 3293. 41 zero_float_bin any_to_any_: 440, 512. 46 zero_float_dec any_to_any_: 447, 513. 3462 zero_fl_desc any_to_any_: 3296, 3310. 76 zero_generic any_to_any_: 432, 509. 5142 zero_skip any_to_any_: 2076, 3239, 3273, 4152, 4563. 5152 zero_tab any_to_any_: 4551, 4563. NO FATAL ERRORS ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved