?login_element?

Subversion Repositories NedoOS

Rev

Rev 1240 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. DAAal
  2.         ex af,af' ;'
  3.        push af
  4.        pop bc
  5.        res 1,c ;reset N flag
  6. DAAq
  7.        push bc
  8.        pop af
  9.         ld a,(_AL)
  10.         daa
  11.         ld (_AL),a
  12.         ex af,af' ;'
  13.        _Loop_
  14.  
  15. DASal
  16.         ex af,af' ;'
  17.        push af
  18.        pop bc
  19.        set 1,c ;set N flag
  20.         jr DAAq
  21.  
  22. AAAal ;labir
  23.         ex af,af' ;'
  24.         ld a,(_AL)
  25.         cp 10
  26.         ccf
  27.         jr nc,$+4
  28.         sub 10
  29.         ld (_AL),a
  30.         ex af,af' ;'
  31.        _Loop_
  32.  
  33. AASal
  34.         ex af,af' ;'
  35.         ld a,(_AL)
  36.         rla
  37.         rra
  38.         jr nc,$+4
  39.         add a,10
  40.         ld (_AL),a
  41.         ex af,af' ;'
  42.        _Loop_
  43.  
  44. AAMer
  45. ;aam i8 ;ASCII коррекция после умножения
  46. ;ah <= al/i8
  47. ;al <= al mod i8
  48. ;[костыль для para512: ah <= al/0x10, al <= al&0x0f]
  49.         get
  50.         next
  51.         ld l,a
  52.         ld h,-1
  53.         ld a,(_AL)
  54. _AAMer0
  55.         inc h
  56.         sub l
  57.         jr nc,_AAMer0
  58.         add a,l ;a=остаток, h=частное
  59.         ld l,a
  60.         ld (_AX),hl
  61.        _Loop_
  62.  
  63. AADer
  64. ;aad i8
  65. ;ASCII Adjust AX Before Division
  66. ;sets the value in the AL register to (AL + (10 * AH)), and then clears the AH register to 00H. TODO
  67. ;пока костыль для megapole: ax=ah+al
  68.         get
  69.         next
  70.         ld hl,(_AX)
  71.         ld a,h
  72.         add a,l
  73.         ld l,a
  74.         ld h,0
  75.         ld (_AX),hl
  76.        _Loop_
  77.  
  78.  
  79. ;cbw ;Expand AL to AX
  80. CBWer
  81.         ld a,(_AL);l ;al
  82.         rla
  83.         sbc a,a
  84.         ld (_AH),a;h,a ;ah
  85.        _Loop_
  86.  
  87. ;cwd ;Expand AX to DX:AX
  88. CWDer
  89.         ld a,(_AH);h ;ah
  90.         rla
  91.         sbc a,a
  92.         ld h,a
  93.         ld l,a
  94.         ld (_DX),hl
  95.        _Loop_
  96.  
  97. ADDali8
  98.         get
  99.         next
  100.         ld hl,_AL
  101.         add a,(hl)
  102. keephlflagsfroma_loop
  103.         ld (hl),a
  104. keepflagsfroma_loop
  105.         KEEPHFCFPARITYOVERFLOW_FROMA
  106.        _Loop_
  107. SUBali8
  108.         get
  109.         next
  110.         ld c,a
  111.         ld hl,_AL
  112.         ld a,(hl)
  113.         sub c
  114.         jr keephlflagsfroma_loop
  115.         ;ld (hl),a
  116.         ;KEEPCFPARITYOVERFLOW_FROMA
  117.        ;_Loop_
  118. ADCali8
  119.         ex af,af' ;'
  120.         get
  121.         next
  122.         ld hl,_AL
  123.         adc a,(hl)
  124.         jr keephlflagsfroma_loop
  125.         ;ld (hl),a
  126.         ;KEEPCFPARITYOVERFLOW_FROMA
  127.        ;_Loop_
  128. SBBali8
  129.         ex af,af' ;'
  130.         get
  131.         next
  132.         ld c,a
  133.         ld hl,_AL
  134.         ld a,(hl)
  135.         sbc a,c
  136.         jr keephlflagsfroma_loop
  137.         ;ld (hl),a
  138.         ;KEEPCFPARITYOVERFLOW_FROMA
  139.        ;_Loop_
  140. CMPali8
  141.         get
  142.         next
  143.         ld c,a
  144.         ld a,(_AL)
  145.         sub c
  146.         jr keepflagsfroma_loop
  147.         ;KEEPCFPARITYOVERFLOW_FROMA
  148.        ;_Loop_
  149.  
  150. ADDaxi16
  151.         or a
  152.         ex af,af' ;'
  153. ADCaxi16
  154.         getBC
  155.         ld hl,(_AX)
  156.         ex af,af' ;'
  157.         ADCHLBC_KEEPCFPARITYOVERFLOW_FROMHL
  158. keepaxfromhl_loop
  159.         ld (_AX),hl
  160.        _Loop_
  161. SUBaxi16
  162.         or a
  163.         ex af,af' ;'
  164. SBBaxi16
  165.         getBC
  166.         ld hl,(_AX)
  167.         ex af,af' ;'
  168.         SBCHLBC_KEEPCFPARITYOVERFLOW_FROMHL
  169.         jr keepaxfromhl_loop
  170.         ;ld (_AX),hl
  171.        ;_Loop_
  172. CMPaxi16
  173.         getBC
  174.         ld hl,(_AX)
  175.         or a
  176.         SBCHLBC_KEEPCFPARITYOVERFLOW_FROMHL
  177.        _Loop_
  178.  
  179. IMUL_bc_de_to_hlde
  180.         call MUL16SIGNED ;HLDE=DE*BC
  181.         ld a,d
  182.         rla ;LSW sign
  183.         jr c,IMULCX_NEG
  184.         ld a,h
  185.         or l
  186.         add a,255 ;set CF if LSW sign != HSW (result >=32768 or < -32768)
  187.         jp IMULCX_NEGQ
  188. IMULCX_NEG
  189.         ld a,h
  190.         and l
  191.         sub 255 ;set CF if LSW sign != HSW (result >=32768 or < -32768)
  192. IMULCX_NEGQ
  193.         sbc a,a ;keep CF
  194.         srl a ;keep CF
  195.         exx
  196.         ld e,a ;overflow (d7 != d6) if CF
  197.         exx
  198.         ex af,af' ;'
  199.         ret
  200.  
  201. ;HLDE=DE*BC
  202. MUL16SIGNED
  203.         bit 7,d
  204.         jr nz,MUL16SIGNED_NEGDE
  205.         bit 7,b
  206.         jp z,MUL16
  207. MUL16SIGNED_NEGBC
  208.         xor a
  209.         sub c
  210.         ld c,a
  211.         sbc a,b
  212.         sub c
  213.         ld b,a
  214.         jp MUL16NEGHLDE
  215. MUL16SIGNED_NEGDE
  216.         xor a
  217.         sub e
  218.         ld e,a
  219.         sbc a,d
  220.         sub e
  221.         ld d,a
  222.         bit 7,b
  223.         jr nz,MUL16SIGNED_NEGDE_NEGBC
  224. MUL16NEGHLDE
  225.         call MUL16
  226.         xor a
  227.         sub e
  228.         ld e,a
  229.         ld a,0
  230.         sbc a,d
  231.         ld d,a
  232.         ld a,0
  233.         sbc a,l
  234.         ld l,a
  235.         ld a,0
  236.         sbc a,h
  237.         ld h,a
  238.         ret
  239. MUL16SIGNED_NEGDE_NEGBC
  240.         xor a
  241.         sub c
  242.         ld c,a
  243.         sbc a,b
  244.         sub c
  245.         ld b,a
  246. ;HLDE=DE*BC
  247. MUL16
  248.         ld hl,0
  249.         dup 16
  250.         rr d
  251.         rr e
  252.         jr nc,$+3
  253.         add hl,bc
  254.         rr h
  255.         rr l
  256.         edup
  257.         rr d
  258.         rr e
  259.         ret
  260.  
  261. ;BC = HLBC/DE, HL = HLBC%DE
  262. DIV32SIGNED
  263.         bit 7,h
  264.         jr nz,DIV32SIGNED_NEGHLBC
  265.         bit 7,d
  266.         ;jr nz,DIV32SIGNED_NEGDE
  267.         jp z,DIV32
  268. DIV32SIGNED_NEGDE
  269.         xor a
  270.         sub e
  271.         ld e,a
  272.         sbc a,d
  273.         sub e
  274.         ld d,a
  275.         call DIV32
  276.         xor a
  277.         sub c
  278.         ld c,a
  279.         sbc a,b
  280.         sub c
  281.         ld b,a ;neg result
  282.         ret
  283. DIV32SIGNED_NEGHLBC
  284.         xor a
  285.         sub c
  286.         ld c,a
  287.         ld a,0
  288.         sbc a,b
  289.         ld b,a
  290.         ld a,0
  291.         sbc a,l
  292.         ld l,a
  293.         ld a,0
  294.         sbc a,h
  295.         ld h,a
  296.         bit 7,d
  297.         jr nz,DIV32SIGNED_NEGHLBC_NEGDE
  298.         call DIV32
  299.         xor a
  300.         sub c
  301.         ld c,a
  302.         sbc a,b
  303.         sub c
  304.         ld b,a ;neg result
  305.         xor a
  306.         sub l
  307.         ld l,a
  308.         sbc a,h
  309.         sub l
  310.         ld h,a ;знак остатка равен знаку делимого
  311.         ret    
  312. DIV32SIGNED_NEGHLBC_NEGDE
  313.         xor a
  314.         sub e
  315.         ld e,a
  316.         sbc a,d
  317.         sub e
  318.         ld d,a
  319.         call DIV32
  320.         xor a
  321.         sub l
  322.         ld l,a
  323.         sbc a,h
  324.         sub l
  325.         ld h,a ;знак остатка равен знаку делимого
  326.         ret
  327.  
  328. ;BC = HLBC/DE, HL = HLBC%DE ;ffff ffff/ffff почему-то остаток 8000!? TODO FIX
  329. DIV32
  330.         ld a,b
  331.         call DIV32_8
  332.         push af
  333.         ld a,c
  334.         call DIV32_8
  335.         pop bc
  336.         ld c,a
  337.         ret
  338. ;A = HLA/DE, HL = HLA%DE
  339. DIV32_8
  340.         ld b,8
  341. DIV321
  342.         add a,a
  343.         adc hl,hl
  344.         jr c,DIV322
  345.         sbc hl,de
  346.         jr nc,DIV323
  347.         add hl,de
  348.         djnz DIV321
  349.         ret
  350. DIV322
  351.         ccf
  352.         sbc hl,de
  353. DIV323
  354.         inc a
  355.         djnz DIV321
  356.         ret
  357.  
  358. FPU3er
  359. ;DB /0 = FILD m32int ;Push m32int onto the FPU register stack ;DB F0+i = FCOMI ST, ST(i) ;Compare ST(0) with ST(i) and set status flags accordingly ;DB E3 finit
  360. ;TODO
  361.         next
  362.         _Loop_
  363.