Subversion Repositories Kolibri OS

Rev

Rev 4914 | Rev 5206 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4914 Rev 4924
Line 52... Line 52...
52
        COLOR_TXT_HEX             = COLOR_TXT_NORMAL
52
        COLOR_TXT_HEX             = COLOR_TXT_NORMAL
53
        COLOR_TXT_BREAKPOINT      = COLOR_TXT_NORMAL
53
        COLOR_TXT_BREAKPOINT      = COLOR_TXT_NORMAL
Line 54... Line 54...
54
 
54
 
Line -... Line 55...
-
 
55
end if
-
 
56
 
-
 
57
struc fpcvt
-
 
58
{
-
 
59
  .str_buf  rb 32
-
 
60
  .cvt_buf  rb 16
-
 
61
  .bcd_man  rb 10
-
 
62
  .bcd_exp  rb 10
-
 
63
  .exp      rd 1
-
 
64
  .digits   rq 1
-
 
65
  .sizeof:
-
 
66
}
-
 
67
 
55
end if
68
 
Line 56... Line 69...
56
 
69
 
57
;-----------------------------------------------------------------------------
70
;-----------------------------------------------------------------------------
58
 
71
 
Line 746... Line 759...
746
        pop     edx
759
        pop     edx
747
        pop     esi
760
        pop     esi
748
        add     edx, ecx
761
        add     edx, ecx
749
        ret
762
        ret
Line -... Line 763...
-
 
763
 
-
 
764
 
-
 
765
; in: edi=cvt buffer, st0 = value
-
 
766
 
-
 
767
;align 4
-
 
768
;fp2str:
-
 
769
 
-
 
770
 
750
 
771
 
751
;-----------------------------------------------------------------------------
772
;-----------------------------------------------------------------------------
752
;                  Display FPU register (ST0 - ST7) content
773
;                  Display FPU register (ST0 - ST7) content
753
;
774
;
Line 774... Line 795...
774
        stosd
795
        stosd
775
        stosd
796
        stosd
776
        stosd
797
        stosd
777
        stosd
798
        stosd
Line 778... Line -...
778
 
-
 
779
        ;int3
-
 
780
        ;nop
-
 
781
 
799
 
782
        movzx   eax, word [_fsw]
800
        movzx   eax, word [_fsw]
783
        shr     eax, 11
801
        shr     eax, 11
784
        add     eax, ebp
802
        add     eax, ebp
785
        shr     ebp, 12
803
        shr     ebp, 12
786
        and     eax, 7
804
        and     eax, 7
787
        bt      dword [_ftw], eax
805
        bt      dword [_ftw], eax
Line 788... Line 806...
788
        jc     .A6M
806
        jc     .exam
789
 
807
 
790
        mov     dword [.str_buf+8],' emp'
808
        mov     dword [.str_buf+8],' emp'
Line -... Line 809...
-
 
809
        mov     word [.str_buf+8+4],'ty'
791
        mov     word [.str_buf+8+4],'ty'
810
        jmp     .display
-
 
811
 
-
 
812
.exam:
-
 
813
        fld     tword [_st0+ebp]
-
 
814
        fxam
-
 
815
        fstsw   ax
792
        jmp     .display
816
        fstp    st1
793
 
817
        sahf
Line 794... Line 818...
794
        mov     cx, [_st0+ebp+8]
818
 
795
        and     cx, 0x7FFF              ;clear sign flag
819
        jz      .c3
Line -... Line 820...
-
 
820
        jp      .c2
796
        jz      .A6M
821
 
797
 
822
;C0 leaf
798
        cmp     cx, 0x7FFF
823
        jc      .nan
Line -... Line 824...
-
 
824
 
799
        jne     .decode
825
; C3 = 0 C2 = 0 C0 = 0 - invalid
-
 
826
        mov     dword [.str_buf+6], ' inv'
-
 
827
        mov     dword [.str_buf+6+4], 'alid'
Line -... Line 828...
-
 
828
        jmp     .display
-
 
829
 
-
 
830
; C3 = 0 C2 = 0 C0 = 1 - Not a Number
-
 
831
.nan:
-
 
832
        mov     dword [.str_buf+10], ' NaN'
-
 
833
        jmp     .display
-
 
834
 
-
 
835
;C2 leaf - valid or infinity
-
 
836
 
-
 
837
.c2:
-
 
838
; C3 = 0 C2 = 1 C0 = 0 - valid number
-
 
839
 
800
 
840
        jnc     .decode
-
 
841
 
-
 
842
; C3 = 0 C2 = 1 C0 = 1 - Infinty
801
        mov     dword [.str_buf+6], ' inv'
843
 
-
 
844
;check sign flag
-
 
845
        test    ah, 0x02
-
 
846
        jnz     @F
802
        mov     dword [.str_buf+6+4], 'alid'
847
        mov     dword [.str_buf+10], '+Inf'
-
 
848
        jmp     .display
-
 
849
@@:
-
 
850
        mov     dword [.str_buf+10], '-Inf'
Line 803... Line 851...
803
        jmp     .display
851
        jmp     .display
804
 
852
 
Line -... Line 853...
-
 
853
.c3:
-
 
854
        jp      .denormal
-
 
855
        jc      .empty
-
 
856
 
-
 
857
; C3 = 1 C2 = 1 C0 = 0 - Zero
-
 
858
 
-
 
859
        mov     dword [.str_buf+10], ' 0.0'
-
 
860
        jmp     .display
-
 
861
 
-
 
862
.empty:
-
 
863
        mov     dword [.str_buf+8],' emp'
-
 
864
        mov     word [.str_buf+8+4],'ty'
-
 
865
        jmp     .display
-
 
866
 
-
 
867
; C3 = 1 C2 = 1 C0 = 0 - Denormal number
-
 
868
 
-
 
869
.denormal:
-
 
870
        test    ah, 0x02
-
 
871
        jnz     @F
805
.A6M:
872
 
806
 
873
        mov     dword [.str_buf+6], '+den'
807
        mov     eax, dword [_st0+ebp]
874
        mov     dword [.str_buf+6+4], 'orm '
808
        or      eax, dword [_st0+ebp+4]
875
        jmp     .display
809
        jnz     .decode
876
@@:
Line 1057... Line 1124...
1057
        push    ebp
1124
        push    ebp
1058
        push    8
1125
        push    8
1059
        xor     ebp, ebp
1126
        xor     ebp, ebp
1060
        mov     ebx, [registers_x_pos_dd]
1127
        mov     ebx, [registers_x_pos_dd]
1061
        add     ebx, 2*10000h+registers_y_pos+142
1128
        add     ebx, 2*10000h+registers_y_pos+142
1062
        mov     edi, COLOR_BG_NORMAL
-
 
1063
.draw_regs:
1129
.draw_regs:
1064
        call    draw_fpu_register_2
1130
        call    draw_fpu_register_2
1065
        add     ebx, 10
1131
        add     ebx, 10
1066
        inc     ebp
1132
        inc     ebp
1067
        dec     dword [esp]
1133
        dec     dword [esp]
Line 1075... Line 1141...
1075
        push    ebp
1141
        push    ebp
1076
        push    8
1142
        push    8
1077
        xor     ebp, ebp
1143
        xor     ebp, ebp
1078
        mov     ebx, [registers_x_pos_dd]
1144
        mov     ebx, [registers_x_pos_dd]
1079
        add     ebx, 2*10000h+registers_y_pos+142
1145
        add     ebx, 2*10000h+registers_y_pos+142
1080
;        mov     edi, COLOR_BG_NORMAL
-
 
1081
.draw_regs:
1146
.draw_regs:
1082
        call    draw_mmx_register_2
1147
        call    draw_mmx_register_2
1083
        add     ebx, 10
1148
        add     ebx, 10
1084
        inc     ebp
1149
        inc     ebp
1085
        dec     dword [esp]
1150
        dec     dword [esp]
1086
        jnz     .draw_regs
1151
        jnz     .draw_regs
1087
        pop     eax
1152
        pop     eax
1088
        pop     ebp
1153
        pop     ebp
1089
        ret
1154
        ret
Line -... Line 1155...
-
 
1155
 
-
 
1156
align 4
-
 
1157
draw_sse_regs:
-
 
1158
        push    ebp
-
 
1159
        push    8
-
 
1160
        xor     ebp, ebp
-
 
1161
        mov     ebx, [registers_x_pos_dd]
-
 
1162
        add     ebx, 2*10000h+registers_y_pos+232
-
 
1163
.draw_regs:
1090
 
1164
     ;   call    draw_sse_register
-
 
1165
        add     ebx, 10
-
 
1166
        inc     ebp
-
 
1167
        dec     dword [esp]
-
 
1168
        jnz     .draw_regs
-
 
1169
        pop     eax
-
 
1170
        pop     ebp
-
 
1171
        ret
1091
; TODO add SSE registers
1172
 
Line 1092... Line 1173...
1092
; TODO add AVX registers
1173
; TODO add AVX registers
1093
 
1174
 
1094
;-----------------------------------------------------------------------------
1175
;-----------------------------------------------------------------------------