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 |