Subversion Repositories NedoOS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1. prdword ;для печати на экран
  2. ;hl'hl=num
  3.         ld de,prdwordbuf
  4.         push de
  5.         call prdword_de
  6.         pop de
  7.         ld hl,10
  8.         jp sendchars
  9.  
  10. prdword_de
  11. ;hl'hl=num
  12. ;de=buf
  13.         push hl
  14.         pop iy
  15.         exx
  16. ;hliy=num
  17. ;de'=buf addr
  18.         ld a,' '
  19.         ld (prnumdwordcmd_zero_sym),a
  20.         ld a,h
  21.         or l
  22.         jr z,prdword_skiphsw
  23.         ld bc,+(-1000000000>>16)
  24.         ld de,+(-1000000000&0xffff)
  25.         call prdig32bit
  26.         ld bc,+(-100000000>>16)
  27.         ld de,+(-100000000&0xffff)
  28.         call prdig32bit
  29.         ld bc,+(-10000000>>16)
  30.         ld de,+(-10000000&0xffff)
  31.         call prdig32bit
  32.         ld  c,+(-1000000>>16)
  33.         ld de,+(-1000000&0xffff)
  34.         call prdig32bit
  35.         ld  c,+(-100000>>16)
  36.         ld de,+(-100000&0xffff)
  37.         call prdig32bit
  38.         jp prword_hliy
  39. prdword_skiphsw
  40.         call prnumdwordcmd_azero
  41.         call prnumdwordcmd_azero_a
  42.         call prnumdwordcmd_azero_a
  43.         call prnumdwordcmd_azero_a
  44.         call prnumdwordcmd_azero_a
  45. prword_hliy
  46. ;hliy=num
  47. ;de'=buf addr
  48.         ld bc,+(-10000>>16)
  49.         ld de,+(-10000&0xffff)
  50.         call prdig32bit
  51.         push iy
  52.         pop hl
  53. ;hl=num
  54. ;de'=buf addr
  55.         ld bc,+(-1000&0xffff)
  56.         call prdig16bit
  57.         ld bc,+(-100&0xffff)
  58.         call prdig16bit
  59.         ld  c,+(-10&0xff)
  60.         call prdig16bit
  61.         ld a,l
  62.         add a,'0'
  63.         exx
  64.         ld (de),a
  65.         inc de
  66.         ret
  67. prdig16bit
  68. ;hl=num
  69. ;bc=-divisor
  70. ;de'=screen addr
  71.         ld a,'0'-1
  72. prdig16bit0
  73.         inc a
  74.        add hl,bc
  75.         jp c,prdig16bit0
  76.        sbc hl,bc
  77. prdword_digok
  78.         cp '0'
  79.         jr z,prnumdwordcmd_azero
  80.         exx
  81.         ld (de),a
  82.         inc de
  83.         exx
  84.         ld a,0x12 ;"ld (de),a"
  85.         ld (prnumdwordcmd_zero_lddea),a ;все последующие нули видимые
  86.         ld a,'0'
  87.         ld (prnumdwordcmd_zero_sym),a ;все последующие нули печатаем не пробелом, а нулём
  88.         ret
  89. prnumdwordcmd_azero ;печать нуля
  90. prnumdwordcmd_zero_sym=$+1
  91.         ld a,' '
  92. prnumdwordcmd_azero_a
  93.         exx
  94. prnumdwordcmd_zero_lddea=$ ;0: для вывода размера файла (не портит содержимое буфера под незначащими нулями) ;0x12 "ld (de),a": для вывода files, size
  95.         ld (de),a
  96.         inc de
  97.         exx
  98.         ret  
  99. prdig32bit
  100. ;hliy=num
  101. ;bcde=-divisor
  102. ;de'=buf addr
  103.         ld a,'0'-1
  104. prdig32bit0
  105.         inc a
  106.        add iy,de
  107.        adc hl,bc
  108.         jp c,prdig32bit0
  109.        ex af,af' ;'
  110.        ld a,ly
  111.        sub e
  112.        ld ly,a
  113.        ld a,hy
  114.        sbc a,d
  115.        ld hy,a
  116.        sbc hl,bc
  117.        ex af,af' ;'
  118.         jp prdword_digok
  119.  
  120. prdwordbuf
  121.         db "1234567890"
  122.