;----------------------------------------------------------------------- ; Enin Anton, Anatoliy Belyanskiy ; A:HL':HL - чЈсЋЎ ЄЋя ЏЅрЅЂЎЄ  ; A:HL:DE - чЈсЋЎ ЄЋя ЏЅрЅЂЎЄ  ; BC - ЁуфЅр ЄЋя тЅЊстЎЂЎЉ стрЎЊЈ PRINT_5BYTES: PUSH BC ; PUSH HL EXX POP HL EXX EX DE,HL ; LD IX,L40BIT.Str ; "00" LD C,#17 EXX LD DE,#4876 EXX LD DE,#E800 ; C:DE':DE = 100,000,000,000 CALL GET_BIG_DIG LD C,#02 EXX LD DE,#540B EXX LD DE,#E400 ; C:DE':DE = 10,000,000,000 CALL GET_BIG_DIG LD C,#00 EXX LD DE,#3B9A EXX LD DE,#CA00 ; C:DE':DE = 1,000,000,000 CALL GET_BIG_DIG ; DE':DE = 100,000,000 CALL .skip_1 POP DE ; "000 000 000 000" LD HL,L40BIT.Str ; "0000000000" LDI LDI LD A,(HL) LDI CP " " JR Z,1F ; LD A,"," ; р ЇЄ. р ЇряЄЎЂ 1: LD (DE),A INC DE LDI LDI LD A,(HL) LDI CP " " JR Z,1F ; LD A,"," ; р ЇЄ. р ЇряЄЎЂ 1: LD (DE),A INC DE LDI LDI LD A,(HL) LDI CP " " JR Z,1F ; LD A,"," ; р ЇЄ. р ЇряЄЎЂ 1: LD (DE),A INC DE LDI LDI LDI ;SCF RET ; .skip_1: EXX LD DE,#05F5 EXX LD DE,#E100 ; DE':DE = 100,000,000 CALL GET_DIG ; 100,000,000...999,999,999 EXX LD DE,#98 EXX LD DE,#9680 ; DE':DE = 10,000,000 CALL GET_DIG ; 10,000,000...99,999,999 EXX LD DE,#0F EXX LD DE,#4240 ; DE':DE = 1,000,000 CALL GET_DIG ; 1,000,000...9,999,999 EXX LD DE,#01 EXX LD DE,#86A0 ; DE':DE = 100,000 CALL GET_DIG ; 100,000...999,999 EXX LD DE,#00 EXX LD DE,#2710 ; DE':DE = 10,000 CALL GET_DIG ; 10,000...99,999 EXX LD DE,#00 EXX LD DE,#03E8 ; DE':DE = 1,000 CALL GET_DIG ; 1,000...9,999 EXX LD DE,#00 EXX LD DE,#64 ; DE':DE = 100 CALL GET_DIG ; 100..999 EXX LD DE,#00 EXX LD DE,#0A ; DE':DE = 10 CALL GET_DIG ; 10..99 LD A,L ADD A,"0" LD (ix+0),A INC IX RET ; GET_DIG: LD A,"0"-1 AND A .loop: INC A SBC HL,DE EXX SBC HL,DE EXX JR NC,.loop ; ADD HL,DE EXX ADC HL,DE EXX CP "0" JR NZ,.putChar ; LD B,A LD A,(ix-1) CP " " JR Z,.putChar ; LD A,B .putChar: LD (ix+0),A INC IX RET ; GET_BIG_DIG: LD B,"0"-1 AND A .loop: INC B SBC HL,DE EXX SBC HL,DE EXX SBC A,C JR NC,.loop ; ADD HL,DE EXX ADC HL,DE EXX ADC A,C EX AF,AF' LD A,B CP "0" JR NZ,.putChar ; LD A,(ix-1) CP " " JR Z,.putChar ; LD A,B .putChar: LD (ix+0),A EX AF,AF' INC IX RET ; L40BIT: DB " " ; Ќ рЊЅр ЄЋя ix-1 .Str: DB " " ; 00 L32BIT_: DB " " ; 000000000 .end: DB "0" ; ; SIZE_BUFFER: db " " ; Ќ рЊЅр ЄЋя ix-1 ; .high db " " ; "00" ; .low: db " ",0,0 ; "0 000 000 000",0,0 ; .bytes equ SIZE_BUFFER - $ ;----------------------------------------------------------------------- ;----------------------------------------------------------------------- ; Enin Anton ;рЎцЅЄур  ЏрЅЎЁр ЇЎЂ ­Јя 8ЁЈтЎЂых чЈсЅЋ Ђ шЅст­ Єц. тЅЊст ;  ЂхЎЄ: ; HL -  ЄрЅс ЁуфЅр  ; € - Ё Љт ;  ЂыхЎЄ: ; ЁуфЅр с тЅЊст.чЈсЋЎЌ IFUSED PutHexNumb PutHexNumb: PUSH AF RRCA RRCA RRCA RRCA AND #0F ADD A,#90 DAA ADC A,#40 DAA LD (HL),A INC L POP AF AND #0F ADD A,#90 DAA ADC A,#40 DAA LD (HL),A INC L RET ENDIF ;----------------------------------------------------------------------- ;----------------------------------------------------------------------- ; HL - ‘трЎЊ  с ЋЈш­ЈЌЈ ЏрЎЁЅЋ ЌЈ ; DE - уфЅр ­ЎЂЎЉ стрЎЊЈ SKIP_DUBLESPACES: LD A,(HL) AND A RET Z ; SUB ' ' JR NZ,.loop ; INC HL JR SKIP_DUBLESPACES ; .loop LDI LD A,(HL) AND A RET Z ; SUB ' ' JR NZ,.loop LDI JR SKIP_DUBLESPACES ;----------------------------------------------------------------------- ;ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл ;ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл ;ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл ;----------------------------------------------------------------------- ; IN: DE - (string decimal) ; OUT: HL - string to word ; DE - addr next after string decimal ;!FIXIT ЏрЎЂЅрЊ  ­  Џустую стрЎЊу STR_TO_WORD: LD HL,0 .loop: LD B,H LD C,L ; ADD HL,HL ;x2 RET C ADD HL,HL ;x4 RET C ADD HL,BC ;x5 RET C ADD HL,HL ;x10 RET C ; LD B,0 LD C,A ADD HL,BC RET C ; LD A,(DE) OR A RET Z CP ' ' RET Z ; CP '9'+1 CCF RET C SUB '0' RET C ; INC DE JR .loop ;-----------------------------------------------------------------------