-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxdec_06.a80
153 lines (134 loc) · 3.99 KB
/
xdec_06.a80
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
//Original by BusySoft
MODULE xdec_06
;Prevod bin->dec bez znamienka
; in: bin
;out: dec
z
bindec ld hl,zzdec ;Vynulovanie buffera dec
ld bc,lldec*#0100
cls1 ld (hl),c
inc hl
djnz cls1
ld c,8*llbin ;Opakuj pre kazdy bit bin:
bndc0 call binx2 ;vyrotovanie bitu z bin
ld hl,eedec
ld b,lldec ;a zarotovanie toho bitu do dec
bndc2 dec hl
ld a,(hl)
adc a,a
cp #0a
jr c,bndc3
sub #0a
bndc3 ld (hl),a
ccf
djnz bndc2
dec c
jr nz,bndc0
ret
;Prevod dec->bin bez znamienka
; in: dec
;out: bin
decbin ld hl,zzbin ; Vynulovanie bin
ld bc,llbin*#0100
cls2 ld (hl),c
inc hl
djnz cls2 ;Vynasobenie bin desiatimi,
ld ix,zzdec ;a to takto:
ld c,lldec ;Najprv to vynasobime dvomi
dcbn0 call binx2
ld hl,zzbin
ld de,zzbuf ;Potom to presunieme
ld b,llbin ;do pomocneho buffera
dcbn1 ld a,(hl)
ld (de),a
inc hl
inc de
djnz dcbn1
call binx2 ;Vynasobime styrmi
call binx2 ;(cize dva krat dvomi)
ld hl,zzbin
ld de,zzbuf
ld b,llbin ;A potom k tomu pripocitame
xor a ;to z pomocneho buffera
dcbn2 ld a,(de)
adc a,(hl)
ld (hl),a
inc de
inc hl
djnz dcbn2 ;A je to.
ld hl,zzbin
ld b,llbin-1 ;Este pripocitame
ld a,(ix+#00) ;jednu cislicu z dec
add a,(hl)
ld (hl),a
dcbn3 inc hl
ld a,#00
adc a,(hl)
ld (hl),a
djnz dcbn3
inc ix
dec c ;a opakujeme pre
jr nz,dcbn0 ;kazdu cislicu z dec
ret
;Nejake podprogramy
binx2 ld hl,zzbin ;Nasobenie bin dvomi
ld b,llbin
xor a
bnxx2 rl (hl)
inc hl
djnz bnxx2
ret
binneg ld hl,zzbin ;Negacia bin
ld b,llbin
scf
bnngx ld a,(hl)
cpl
adc a,#00
ld (hl),a
inc hl
djnz bnngx
ret
;Prevod bin-dec so znamienkom
; in: bin v doplnkovom formate
;out: dec + znamienko
zbndec ld a,(eebin-1)
bit 7,a ;znamienkovy bit
ld a,'+'
jr z,zbn1
call binneg
ld a,'-'
zbn1 ld (sign),a ;zapis znamienka
jp bindec
;Prevod dec->bin so znamienkom
; in: dec + znamienko
;out: bin v doplnkovom formate
zdcbin call decbin
ld a,(sign)
cp '-' ;Ak to nie minus,
ret nz ;tak nic
jr binneg ;ak je minus, tak negacia
k
l = k-z
; org #6000
;Buffery systemu - pre ulozenie vstupov a vystupov rutiniek
;BIN ... binarna hodnota cisla
; najprv ide nizsi bajt
; a po nom vyssie bajty
zzbin db #ff,#ff,#ff,#ff
eebin
llbin = eebin-zzbin
;DEC ... postupnost desiatkovych cislic
; najprv idu najvyssie rady
; a po nich nizsie desiatkove rady
; Dlzka buffera musi byt taka aby sa do nej mestilo cislo z bin
; V pripade prevodov so znamienkom sa pouziva aj znamienko
sign db '+'
zzdec db 0,0,0,0,0
db 6,5,5,3,5
eedec
lldec = eedec-zzdec
;Pomocny buffer pouzity pre nasobenie desiatimi,
;struktura dat taka ista ako BIN
zzbuf db #55,#55,#55,#55
eebuf
ENDMODULE