;DE-ben megadott 16 bites érték konvertálása a szövegpufferbe
;a bevezető nullákat levágja
;HL számpufferre mutat
lf1f4: XOR A
LD (HL),A ;számpuffer
DEC HL ;felső 16 bitje
LD (HL),A ;nullázva
DEC HL
LD (HL),D ;érték
DEC HL ;letárolva
LD (HL),E ;a számpufferbe
EX DE,HL ;DE mutat a számpufferre
;számpufferben megadott 32 bites érték konvertálása a szövegpufferbe
;a bevezető nullákat levágja
;DE számpufferre mutat
;A=bevezető karakter kódja, 00H esetén nem ír ki semmit
lf1fd: EXX
LD E,A ;0, jelzi, hogy nulla eredmény esetén
;még bevezető nulláról van szó
LD D,30H ;"0"
EXX
LD HL,lf233 ;számkonstansok táblázatára mutat
lf205: LD A,(HL)
DEC A ;=1? vagyis a táblázat legkisebb eleme?
JR NZ,LF20C ;ugrás ha nem
EXX ;ha igen
LD E,D ;E="0" mindenképpen kiírja a nulla eredményt is
EXX
;32 bites osztás (DE)/(HL)
;C=az osztás eredménye, (DE)=maradék
lf20c: XOR A ;C flag törlése
LD C,A ;C=0
;az osztást kivonással hajtja végre, amíg negatív nem lesz
lf20e: PUSH HL
PUSH DE
LD B,04H ;4 bájton kell elvégezni a műveletet
lf212: LD A,(DE) ;csökkentendő bájt
SBC A,(HL) ;kivonás
LD (DE),A ;letárolás
INC HL ;mutatók
INC DE ;növelése
DJNZ LF212 ;művelet elvégzése a többi bájton
POP DE ;eredeti mutatók
POP HL ;vissza
INC C ;eredmény növelése
JR NC,LF20E ;újabb kivonás, ha még nem negatív az eredmény
CALL LF254 ;(DE)+(HL), az utolsó kivonás visszacsinálása
;így (DE)-ben a maradék lesz
;HL=HL+4, a következő konstansra mutat
LD A,C ;eredmény A-ba
EXX
DEC A ;eredmény csökkentése eggyel
;a visszacsinált kivonás miatt
JR Z,LF229 ; (+03h)
ADD A,D ;A+"0", vagyis az eredmény ASCII
;karakterré konvertálása
LD E,D ;E="0", vagyis ha volt már egy értékes
;karakter, innentől kezdve kiírja a nulla
;karaktereket is, a szám elején lévő
;nullákat levágja
DB 2EH ;töltelék bájt az OR E átugrásához
LF229: OR E ;nullás eredmény esetén megvizsgálja, hogy
;bevezető nulláról, vagy már szám közben
;lévő nulláról van szó
CALL NZ,LF040 ;ha nem bevezető nulla, akkor karakter írása szövegpufferbe
EXX
LD A,(HL) ;táblázat következő eleme
INC A ;=255? azaz lista vége?
JR NZ,LF205 ;folytatás a következővel, ha még nincs vége
RET
lf233: DB 80H,96H,98H,00H ;00989680H=10000000
DB 40H,42H,0FH,00H ;000F4240H= 1000000
DB 0A0H,86H,01H,00H ;000186A0H= 100000
DB 10H,27H,00H,00H ;00002710H= 10000
DB 0E8H,03H,00H,00H ;000003E8H= 1000
DB 64H,00H,00H,00H ;00000064H= 100
DB 0AH,00H,00H,00H ;0000000AH= 10
DB 01H,00H,00H,00H ;00000001H= 1
DB 0FFH ;lista vége