Rev 952 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 952 | Rev 1186 | ||
|---|---|---|---|
| Line 1... | Line 1... | ||
| 1 | 1 | ||
| 2 | ;LAST UPDATE: 27.02.2021 savelij |
2 | ; LAST UPDATE: 06.02.2025 savelij |
| 3 | 3 | ||
| 4 | MATH CALL P5_READ_BYTE |
4 | MATH CALL P5_READ_BYTE |
| 5 | LD A,(NEXTBYTERST8) |
5 | LD A,(NEXTBYTERST8) |
| 6 | ADD A,A |
6 | ADD A,A |
| 7 | ADD A,LOW (.MATH_FUNC) |
7 | ADD A,LOW (.MATH_FUNC) |
| Line 24... | Line 24... | ||
| 24 | DW .XHEX1DEC |
24 | DW .XHEX1DEC |
| 25 | 25 | ||
| 26 | .XHEX4DEC LD BC,(RREG_C) |
26 | .XHEX4DEC LD BC,(RREG_C) |
| 27 | LD DE,(RREG_E) |
27 | LD DE,(RREG_E) |
| 28 | CALL .HEX4DEC |
28 | CALL .HEX4DEC |
| 29 | .LDIRSTRTEXT LD BC,CPU6 |
29 | .LDIRSTRTEXT LD BC,CPU2 |
| 30 | AND A |
30 | AND A |
| 31 | SBC HL,BC |
31 | SBC HL,BC |
| 32 | LD DE,(RREG_L) |
32 | LD DE,(RREG_L) |
| 33 | LD BC,STRLEN("4294967295\0") |
33 | LD BC,STRLEN("4294967295\0") |
| 34 | JP LDIR_BYTES |
34 | JP LDIR_BYTES |
| Line 83... | Line 83... | ||
| 83 | CALL .MULTIPLY |
83 | CALL .MULTIPLY |
| 84 | LD (RREG_C),HL ; = BC |
84 | LD (RREG_C),HL ; = BC |
| 85 | LD (RREG_E),DE ; DE |
85 | LD (RREG_E),DE ; DE |
| 86 | RET |
86 | RET |
| 87 | 87 | ||
| 88 | ;[деление bc=bc/de] |
88 | ; деление BC = BC / DE |
| 89 | .DIVIDE xor a |
89 | .DIVIDE xor a |
| 90 | ld h,a |
90 | ld h,a |
| 91 | ld l,a |
91 | ld l,a |
| 92 | ld a,10h |
92 | ld a,10h |
| 93 | .loc_3E29 ccf |
93 | .loc_3E29 ccf |
| Line 100... | Line 100... | ||
| 100 | jr nc,.loc_3E29 |
100 | jr nc,.loc_3E29 |
| 101 | add hl,de |
101 | add hl,de |
| 102 | or a |
102 | or a |
| 103 | jr .loc_3E2A |
103 | jr .loc_3E2A |
| 104 | 104 | ||
| 105 | ;[умножение hlde=bc*de] |
105 | ; умножение HLDE = BC * DE |
| 106 | .MULTIPLY push bc |
106 | .MULTIPLY push bc |
| 107 | ld a,b |
107 | ld a,b |
| 108 | ld hl,0 |
108 | ld hl,0 |
| 109 | ld b,10h |
109 | ld b,10h |
| 110 | .MULTIPLY2 add hl,hl |
110 | .MULTIPLY2 add hl,hl |
| Line 121... | Line 121... | ||
| 121 | ld l,c |
121 | ld l,c |
| 122 | ld h,a |
122 | ld h,a |
| 123 | pop bc |
123 | pop bc |
| 124 | ret |
124 | ret |
| 125 | 125 | ||
| 126 | ;[умножение DE'HL'DEHL=DEHL*BC] |
126 | ; умножение DE'HL'DEHL = DEHL * BC |
| 127 | .MUL_BC_DEHL XOR A |
127 | .MUL_BC_DEHL XOR A |
| 128 | LD H,A |
128 | LD H,A |
| 129 | LD L,A |
129 | LD L,A |
| 130 | LD D,A |
130 | LD D,A |
| 131 | LD E,A |
131 | LD E,A |
| 132 | EXX |
132 | EXX |
| 133 | LD B,A |
133 | LD B,A |
| 134 | LD C,A |
134 | LD C,A |
| 135 | LD A,0X20 |
135 | LD A,0x20 |
| 136 | .MUL1 EX AF,AF' |
136 | .MUL1 EX AF,AF' |
| 137 | EXX |
137 | EXX |
| 138 | ADD HL,HL |
138 | ADD HL,HL |
| 139 | EX DE,HL |
139 | EX DE,HL |
| 140 | ADC HL,HL |
140 | ADC HL,HL |
| Line 154... | Line 154... | ||
| 154 | DEC A |
154 | DEC A |
| 155 | JR NZ,.MUL1 |
155 | JR NZ,.MUL1 |
| 156 | EXX |
156 | EXX |
| 157 | RET |
157 | RET |
| 158 | 158 | ||
| 159 | ;[BCDE=BCDE/HL] |
159 | ; BCDE = BCDE / HL |
| 160 | .LDIV_HL EX DE,HL |
160 | .LDIV_HL EX DE,HL |
| 161 | PUSH BC |
161 | PUSH BC |
| 162 | EXX |
162 | EXX |
| 163 | POP HL |
163 | POP HL |
| 164 | LD DE,0 |
164 | LD DE,0 |
| 165 | JR .LDIV1 |
165 | JR .LDIV1 |
| 166 | 166 | ||
| 167 | ;[BCDE=(HL)/BCDE] |
167 | ; BCDE = (HL) / BCDE |
| 168 | .LDIV__HL_ PUSH BC ;DE' |
168 | .LDIV__HL_ PUSH BC ; DE' |
| 169 | LD C,(HL) |
169 | LD C,(HL) |
| 170 | INC HL |
170 | INC HL |
| 171 | LD B,(HL) ;HL |
171 | LD B,(HL) ; HL |
| 172 | INC HL |
172 | INC HL |
| Line 195... | Line 195... | ||
| 195 | ; функция состоит из двух частей: |
195 | ; функция состоит из двух частей: |
| 196 | ; 1. 32-разрядное делимое и 16-разрядный |
196 | ; 1. 32-разрядное делимое и 16-разрядный |
| 197 | ; делитель. |
197 | ; делитель. |
| 198 | ; 2. 32-раздядное делимое и 32-разрядный |
198 | ; 2. 32-раздядное делимое и 32-разрядный |
| 199 | ; делитель. |
199 | ; делитель. |
| 200 | ; hl'hl = hl'hl / de'de |
200 | ; HL'HL = HL'HL / DE'DE |
| 201 | ; de'de = hl'hl % de'de |
201 | ; DE'DE = HL'HL % DE'DE |
| 202 | .ldiv push hl |
202 | .ldiv push hl |
| 203 | xor a |
203 | xor a |
| 204 | ld l,a |
204 | ld l,a |
| 205 | ld h,a |
205 | ld h,a |
| 206 | sub e |
206 | sub e |
| Line 211... | Line 211... | ||
| 211 | exx |
211 | exx |
| 212 | pop bc |
212 | pop bc |
| 213 | ld a,0 |
213 | ld a,0 |
| 214 | sbc a,e |
214 | sbc a,e |
| 215 | ld e,a |
215 | ld e,a |
| 216 | sbc a,d ; de'de=0-divisor |
216 | sbc a,d ; DE'DE=0-divisor |
| 217 | sub e |
217 | sub e |
| 218 | ld d,a |
218 | ld d,a |
| 219 | and e |
219 | and e |
| 220 | inc a ; Z=short divisor |
220 | inc a ; Z=short divisor |
| 221 | push hl |
221 | push hl |
| 222 | ld hl,0 ; hl'hl=reminder |
222 | ld hl,0 ; HL'HL=reminder |
| 223 | exx |
223 | exx |
| 224 | pop bc |
224 | pop bc |
| 225 | ld a,b ; a,c,bc'=divident |
225 | ld a,b ; A,C,BC'=divident |
| 226 | jr nz,.ldiv_long |
226 | jr nz,.ldiv_long |
| 227 | 227 | ||
| 228 | ; divisor = -00de |
228 | ; divisor = -00DE |
| 229 | ld b,8 |
229 | ld b,8 |
| 230 | rla |
230 | rla |
| 231 | .ldivs0 rl l |
231 | .ldivs0 rl l |
| 232 | add hl,de |
232 | add hl,de |
| 233 | jr c,.ldivs1 |
233 | jr c,.ldivs1 |
| Line 245... | Line 245... | ||
| 245 | sbc hl,de |
245 | sbc hl,de |
| 246 | .ldivs3 rla |
246 | .ldivs3 rla |
| 247 | djnz .ldivs2 |
247 | djnz .ldivs2 |
| 248 | jr .ldiv_long1 |
248 | jr .ldiv_long1 |
| 249 | 249 | ||
| 250 | ; divisor=-de'de |
250 | ; divisor = -DE'DE |
| 251 | .ldiv_long call .ldiv_8 |
251 | .ldiv_long call .ldiv_8 |
| 252 | ld b,c |
252 | ld b,c |
| 253 | ld c,a |
253 | ld c,a |
| 254 | ld a,b |
254 | ld a,b |
| 255 | call .ldiv_8 |
255 | call .ldiv_8 |
| Line 267... | Line 267... | ||
| 267 | ex af,af' |
267 | ex af,af' |
| 268 | ld c,a |
268 | ld c,a |
| 269 | ex af,af' |
269 | ex af,af' |
| 270 | exx |
270 | exx |
| 271 | call .ldiv_8 |
271 | call .ldiv_8 |
| 272 | ; result=c,bc',a -> hl'hl |
272 | ; result = C,BC',A -> HL'HL |
| 273 | ; reminder=hl'hl -> de'de |
273 | ; reminder = HL'HL -> DE'DE |
| 274 | ex de,hl |
274 | ex de,hl |
| 275 | ld l,a |
275 | ld l,a |
| 276 | ld a,c |
276 | ld a,c |
| 277 | exx |
277 | exx |
| 278 | ex de,hl |
278 | ex de,hl |
| Line 281... | Line 281... | ||
| 281 | ld a,c |
281 | ld a,c |
| 282 | exx |
282 | exx |
| 283 | ld h,a |
283 | ld h,a |
| 284 | ret |
284 | ret |
| 285 | 285 | ||
| 286 | ; hl'hl=reminder |
286 | ; HL'HL = reminder |
| 287 | ; de'de=divisor |
287 | ; DE'DE = divisor |
| 288 | ; a=divident |
288 | ; A = divident |
| 289 | .ldiv_8 ld b, 8 |
289 | .ldiv_8 ld b, 8 |
| 290 | rla |
290 | rla |
| 291 | .ldiv_8_0 adc hl,hl |
291 | .ldiv_8_0 adc hl,hl |
| 292 | exx |
292 | exx |
| 293 | adc hl,hl |
293 | adc hl,hl |
| Line 303... | Line 303... | ||
| 303 | exx |
303 | exx |
| 304 | .ldiv_8_1 rla |
304 | .ldiv_8_1 rla |
| 305 | djnz .ldiv_8_0 |
305 | djnz .ldiv_8_0 |
| 306 | ret |
306 | ret |
| 307 | 307 | ||
| 308 | ;[HEX6DEC] |
308 | ; HEX6DEC |
| 309 | ;HLBCDE->текст |
309 | ; HLBCDE->текст |
| 310 | 310 | ||
| 311 | .HEX6DEC |
311 | .HEX6DEC |
| 312 | 312 | ||
| 313 | - | ||
| 314 | ;[HEX4DEC] |
313 | ; HEX4DEC |
| 315 | ;BCDE->текст |
314 | ; BCDE->текст |
| 316 | .HEX4DEC EXX |
315 | .HEX4DEC EXX |
| 317 | LD HL,VARS_TXT_DEC |
316 | LD HL,VARS_TXT_DEC |
| 318 | PUSH HL |
317 | PUSH HL |
| 319 | PUSH HL |
318 | PUSH HL |
| Line 340... | Line 339... | ||
| 340 | INC HL |
339 | INC HL |
| 341 | DJNZ .H2D2 |
340 | DJNZ .H2D2 |
| 342 | .H2D3 POP HL |
341 | .H2D3 POP HL |
| 343 | RET |
342 | RET |
| 344 | 343 | ||
| 345 | ;[HEX2DEC] |
344 | ; HEX2DEC |
| 346 | ;DE->текст |
345 | ; DE->текст |
| 347 | .HEX2DEC EXX |
346 | .HEX2DEC EXX |
| 348 | LD HL,VARS_TXT_DEC |
347 | LD HL,VARS_TXT_DEC |
| 349 | PUSH HL |
348 | PUSH HL |
| 350 | PUSH HL |
349 | PUSH HL |
| Line 352... | Line 351... | ||
| 352 | EXX |
351 | EXX |
| 353 | LD HL,.CHISLA2 |
352 | LD HL,.CHISLA2 |
| 354 | LD BC,0 |
353 | LD BC,0 |
| 355 | JR .H2D1-(4*3) |
354 | JR .H2D1-(4*3) |
| 356 | 355 | ||
| 357 | ;[HEX1DEC] |
356 | ; HEX1DEC |
| 358 | ;E->текст |
357 | ; E->текст |
| 359 | .HEX1DEC EXX |
358 | .HEX1DEC EXX |
| 360 | LD HL,VARS_TXT_DEC |
359 | LD HL,VARS_TXT_DEC |
| 361 | PUSH HL |
360 | PUSH HL |
| 362 | PUSH HL |
361 | PUSH HL |
| Line 382... | Line 381... | ||
| 382 | .CHISLA2 DD 10000 |
381 | .CHISLA2 DD 10000 |
| 383 | DD 1000 |
382 | DD 1000 |
| 384 | .CHISLA1 DD 100 |
383 | .CHISLA1 DD 100 |
| 385 | DD 10 |
384 | DD 10 |
| 386 | 385 | ||
| 387 | ;[BCDE-(ADR)=BCDE] |
386 | ; BCDE - (ADR) = BCDE |
| 388 | .BCDEMHL XOR A |
387 | .BCDEMHL XOR A |
| 389 | EX AF,AF' |
388 | EX AF,AF' |
| 390 | .BCDEMHL1 LD A,E |
389 | .BCDEMHL1 LD A,E |
| 391 | SUB (HL) |
390 | SUB (HL) |
| 392 | INC HL |
391 | INC HL |
| Line 407... | Line 406... | ||
| 407 | DEC HL |
406 | DEC HL |
| 408 | EX AF,AF' |
407 | EX AF,AF' |
| 409 | INC A |
408 | INC A |
| 410 | EX AF,AF' |
409 | EX AF,AF' |
| 411 | LD A,B |
410 | LD A,B |
| 412 | CP 0XC4 |
411 | CP 0xC4 |
| 413 | JR C,.BCDEMHL1 |
412 | JR C,.BCDEMHL1 |
| 414 | LD A,(HL) |
413 | LD A,(HL) |
| 415 | ADD A,E |
414 | ADD A,E |
| 416 | LD E,A |
415 | LD E,A |
| 417 | INC HL |
416 | INC HL |
| Line 440... | Line 439... | ||
| 440 | LD (HL),A |
439 | LD (HL),A |
| 441 | INC HL |
440 | INC HL |
| 442 | EXX |
441 | EXX |
| 443 | RET |
442 | RET |
| 444 | 443 | ||
| 445 | ;[BCDE=BCDE+HL] |
444 | ; BCDE = BCDE + HL |
| 446 | .BCDE_BCDE_HL ADD HL,DE |
445 | .BCDE_BCDE_HL ADD HL,DE |
| 447 | EX DE,HL |
446 | EX DE,HL |
| 448 | LD HL,0 |
447 | LD HL,0 |
| 449 | ADC HL,BC |
448 | ADC HL,BC |
| 450 | LD B,H |
449 | LD B,H |