?login_element?

Subversion Repositories NedoOS

Rev

Rev 147 | Blame | Compare with Previous | Last modification | View Log | Download

  1. minhl_bc_tobc
  2.         or a
  3.         sbc hl,bc
  4.         add hl,bc
  5.         ret nc ;bc<=hl
  6.         ld b,h
  7.         ld c,l
  8.         ret
  9.  
  10. div4signedup
  11.         or a
  12.         jp m,$+5
  13.         add a,3
  14.         sra a
  15.         sra a
  16.         ret
  17.  
  18. subhldecheck0
  19.         xor a
  20.         sbc hl,de
  21.         ret nc
  22.         ld h,a
  23.         ld l,a
  24.         ret
  25.  
  26. ;bc * de результат в ahl
  27. mulbcde_ahl
  28.         xor a
  29.         ld h,a
  30.         ld l,a
  31.         dup 8
  32.         rlc b
  33.         jr nc,$+5 ; c - был перенос, nc - не было переноса    
  34.         add hl,de
  35.         adc a,0
  36.         add hl,hl
  37.         rla
  38.         edup
  39.         dup 7
  40.         rlc c
  41.         jr nc,$+5 ; c - был перенос, nc - не было переноса    
  42.         add hl,de
  43.         adc a,0
  44.         add hl,hl
  45.         rla
  46.         edup
  47.         rlc c
  48.         ret nc
  49.         add hl,de
  50.         adc a,0
  51.         ret
  52.  
  53. genmuldewid_ahl
  54.         ld de,(curbitmapwid_view)
  55.         ld hl,muldewid_ahl+3
  56.         ld a,d
  57.         or e
  58.         jr z,genmuldewid_ahlq ;иначе запорет начало процедуры
  59.         xor a
  60.         ld b,16
  61. genmuldewid_ahl_0
  62.         rl e
  63.         rl d
  64.         jr nc,genmuldewid_ahl_z
  65.         inc a
  66.         ld (hl),0x19 ;add hl,de
  67.         inc hl
  68.         ld (hl),0xce ;adc a,0
  69.         inc hl
  70.         ld (hl),0
  71.         inc hl
  72. genmuldewid_ahl_z
  73.         or a
  74.         jr z,genmuldewid_ahl_noadd
  75.         ld (hl),0x29 ;add hl,hl
  76.         inc hl
  77.         ld (hl),0x17 ;rla
  78.         inc hl
  79. genmuldewid_ahl_noadd
  80.         djnz genmuldewid_ahl_0
  81.         dec hl
  82.         dec hl
  83. genmuldewid_ahlq
  84.         ld (hl),0xc9 ;ret
  85.         ret
  86.  
  87. ;нельзя в pgshapes, т.к. нужно для bitmap        
  88. muldewid_ahl
  89. ;не портит bc
  90.         xor a
  91.         ld h,a
  92.         ld l,a
  93.         ds (5*16)
  94. ;[add hl,de:adc a,0]
  95. ;add hl,hl:rla ;начать только с бита, который установлен, и в конце не ставить
  96.  
  97. divhldesigned
  98.         ld a,h
  99.         xor d
  100.         push af
  101.         xor d
  102.         call m,neghl
  103.         ld a,d
  104.         or a
  105.         call m,negde
  106.         call divhlde
  107.         pop af
  108.         ret p ;одинаковые знаки
  109. neghl
  110.         xor a
  111.         sub l
  112.         ld l,a
  113.         sbc a,h
  114.         sub l
  115.         ld h,a
  116.         ret
  117. negde
  118.         xor a
  119.         sub e
  120.         ld e,a
  121.         sbc a,d
  122.         sub e
  123.         ld d,a
  124.         ret
  125.  
  126. ;hl / de результат в hl
  127. divhlde
  128.         ld c,h
  129.         ld a,l
  130.         ld hl,0
  131.         ld b,16
  132. ;don't mind carry
  133. _DIV0.
  134. ;shift left hlca
  135.         rla
  136.         rl c
  137.         adc hl,hl
  138. ;no carry
  139. ;try sub
  140.         sbc hl,de
  141.         jr nc,$+3
  142.         add hl,de
  143. ;carry = inverted bit of result
  144.         djnz _DIV0.
  145.         rla
  146.         cpl
  147.         ld l,a
  148.         ld a,c
  149.         rla
  150.         cpl
  151.         ld h,a
  152.         ret
  153.