Subversion Repositories pentevo

Rev

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