Advertisement
Legomany3448

DEMultBC

Mar 28th, 2016
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; DEMultBC {
  2. ; Output in HL
  3. ; Destroys A
  4. ; Preserves everything else (except DE, if result is negative)
  5. DEMultBC:
  6.     call AbsDE
  7.     ld a,$B7
  8.     jp m,+_ ; Jump if BC was POSITIVE
  9.     xor a,%10000000
  10. _:  call AbsBC
  11.     jp m,+_ ; Jump if DE was POSITIVE
  12.     xor a,%10000000
  13. _:  ld (MultSMC),a
  14.     or a,a \ sbc hl,hl
  15.     dec sp \ push bc \ inc sp \ pop af
  16.                 rla \ jr nc,$+3 \ add hl,de
  17.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  18.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  19.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  20.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  21.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  22.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  23.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  24.     ld a,b
  25.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  26.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  27.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  28.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  29.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  30.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  31.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  32.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  33.     ld a,c
  34.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  35.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  36.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  37.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  38.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  39.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  40.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  41.     add hl,hl \ rla \ jr nc,$+3 \ add hl,de
  42.     res 7,a ; make sure the sign does not lie
  43.     push af \ inc sp \ push hl \ inc sp \ pop hl \ inc sp ; A -> HLu -> H -> L
  44. MultSMC:    or a,a
  45.     ret nc
  46.     ex de,hl
  47.     or a,a \ sbc hl,hl
  48.     sbc hl,de
  49.     ret
  50. ; }
  51.  
  52. ; Result in DE
  53. ; S flag is set to opposite of input sign
  54. AbsDE:
  55.     or a,a
  56.     sbc hl,hl
  57.     sbc hl,de
  58.     ret m ; If ( 0 - DE ) is negative, then DE is positive (so return)
  59.     ex de,hl
  60.     ret
  61.  
  62. ; Result in BC
  63. ; S flag is set to opposite of input sign
  64. AbsBC:
  65.     or a,a
  66.     sbc hl,hl
  67.     sbc hl,bc
  68.     ret m ; If ( 0 - BC ) is negative, then BC is positive (so return)
  69.     push hl \ pop bc
  70.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement