Subversion Repositories Kolibri OS

Rev

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

Rev 205 Rev 382
Line 1... Line 1...
1
;;   Calculator for MenuetOS (original version)
1
;;   Calculator for MenuetOS (c) Ville Turjanmaa
2
;;  (c)Ville Turjanmaa
2
;;  
3
;;   Compile with FASM for Menuet
3
;;   Compile with FASM for Menuet
4
;;   
4
;;   
-
 
5
;;  Pavel Rymovski (Heavyiron) - kolibri version
5
;;What's new:
6
;; What's new:
6
;;   Calc 1.1
7
;;   Calc 1.1
7
;;           1)changed design
8
;;           1) changed design
8
;;           2)new procedure of draw window (10 decimal digits, 23 binary, "+" not displayed now)
9
;;           2) new procedure of draw window (10 decimal digits, 23 binary, "+" not displayed now)
9
;;           3)window with skin
10
;;           3) window with skin
10
;;           4)I had used macroses
11
;;           4) used macroses
11
;;   Calc 1.2
12
;;   Calc 1.2
12
;;           1)added some useful functions, such as arcsin, arccos, arctg, 1/x, x^2
13
;;           1)added some useful functions, such as arcsin, arccos, arctg, 1/x, x^2
13
;;   Calc 1.31
14
;;   Calc 1.31
14
;;           1)optimised program
15
;;           1)optimised program
15
;;           2)new type of window (you need kernel 114 revision or higher)
16
;;           2)new type of window (you need kernel 114 revision or higher)
-
 
17
;;   Calc 1.32
16
;;  Pavel Rymovski (Heavyiron)
18
;;           1)fixed arccos
-
 
19
 
Line 17... Line 20...
17
 
20
 
18
appname equ 'Calc '
21
appname equ 'Calc '
Line 19... Line 22...
19
version equ '1.31'
22
version    equ '1.32'
20
 
23
 
21
use32
24
use32
22
               org    0x0
25
               org    0x0
Line 30... Line 33...
30
 
33
 
Line 31... Line 34...
31
include 'macros.inc'
34
include 'macros.inc'
Line -... Line 35...
-
 
35
 
-
 
36
START:
-
 
37
 
-
 
38
    mov  eax,48
-
 
39
    mov  ebx,3
-
 
40
    mov  ecx,sc
32
 
41
    mov  edx,sizeof.system_colors
33
START:
42
    int  0x40
Line 34... Line 43...
34
 
43
 
35
red:
44
red:
Line 113... Line 122...
113
    mov  eax,[display_type]
122
    mov  eax,[display_type]
114
    mov  eax,[multipl+eax*4]
123
    mov  eax,[multipl+eax*4]
115
    mov  [entry_multiplier],eax
124
    mov  [entry_multiplier],eax
116
    call print_display
125
    call print_display
117
    jmp  still
126
    jmp  still
118
  multipl:  dd 10,16,2
-
 
Line 119... Line 127...
119
 
127
 
120
  no_display_change:
128
  no_display_change:
121
    cmp  eax,6
129
    cmp  eax,6
122
    jb   no_a_f
130
    jb   no_a_f
Line 210... Line 218...
210
  
218
  
211
  no_cos:
219
  no_cos:
212
    cmp  eax,25
220
    cmp  eax,25
213
    jne  no_acos
221
    jne  no_acos
-
 
222
    fld  [trans1]
-
 
223
    fld st0
214
    fld  [trans1]
224
    fmul st,st1
215
    fld1
225
    fld1
216
    fsub st,st1
-
 
217
    fsqrt
-
 
218
    fld1
-
 
219
    fadd st,st2
226
    fsubrp st1,st0
-
 
227
    fsqrt
220
    fsqrt
228
    fxch st1
221
    fpatan
-
 
222
    fadd st,st0
229
    fpatan
Line 223... Line 230...
223
    jmp  show_result
230
    jmp  show_result
224
  
231
  
225
  no_acos:   
232
  no_acos:   
Line 439... Line 446...
439
    mov  [new_dec],100000
446
    mov  [new_dec],100000
440
    mov  [sign],byte '+'
447
    mov  [sign],byte '+'
441
    popa
448
    popa
442
    ret
449
    ret
Line 443... Line -...
443
 
-
 
444
ten          dd  10.0,0
-
 
445
tmp          dw  1,0
-
 
446
sign         db  1,0
-
 
447
tmp2         dq  0x0,0
-
 
448
exp          dd  0x0,0
-
 
449
new_dec      dd  100000,0
-
 
450
id           db  0x0,0
-
 
451
res          dd  0
-
 
452
trans1       dq  0
-
 
453
trans2       dq  0
-
 
Line 454... Line 450...
454
controlWord  dw  1
450
 
455
 
451
 
456
ftoa:                         ; fpu st0 -> [integer],[decimal]
452
ftoa:                         ; fpu st0 -> [integer],[decimal]
457
    pusha
453
    pusha
Line 469... Line 465...
469
    jne    no_neg
465
    jne    no_neg
470
    mov    [sign],1
466
    mov    [sign],1
Line 471... Line 467...
471
  
467
  
472
  no_neg:
468
  no_neg:
473
    fld    [tmp2]
469
    fld    [tmp2]
474
    fistp  [integer]
-
 
475
    fld    [tmp2]
470
    fist   [integer]
476
    fisub  [integer]
471
    fisub  [integer]
477
    fldcw  [controlWord]
472
    fldcw  [controlWord]
478
    cmp    byte [sign], 0     ; change fraction to positive
473
    cmp    byte [sign], 0     ; change fraction to positive
479
    je     no_neg2
474
    je     no_neg2
Line 560... Line 555...
560
    mov bh, 0    ; Set bh to indicate the string is a valid number.
555
    mov bh, 0    ; Set bh to indicate the string is a valid number.
561
    jmp .exit
556
    jmp .exit
Line 562... Line 557...
562
 
557
 
563
  .error:
558
  .error:
564
    mov bh, 1    ; Set error code.
559
    mov bh, 1    ; Set error code.
Line 565... Line 560...
565
    fstp st0    ; Pop top of fpu stack.
560
   ; fstp st0    ; Pop top of fpu stack.
566
 
561
 
567
  .exit:
562
  .exit:
568
    pop di
563
    pop di
Line 650... Line 645...
650
;   ******* WINDOW DEFINITIONS AND DRAW *********
645
;   ******* WINDOW DEFINITIONS AND DRAW *********
651
;   *********************************************
646
;   *********************************************
Line 652... Line 647...
652
 
647
 
Line 653... Line -...
653
draw_window:
-
 
654
    
-
 
655
    mov  eax,48
-
 
656
    mov  ebx,3
-
 
657
    mov  ecx,sc
-
 
658
    mov  edx,sizeof.system_colors
-
 
659
    int  0x40
648
draw_window:
660
 
649
    
661
    mov  eax,12
650
    mov  eax,12
Line 662... Line 651...
662
    mov  ebx,1
651
    mov  ebx,1
Line 863... Line 852...
863
dot     db  '.'
852
dot           db  '.'
864
calc    db  ' '
853
calc         db  ' '
865
integer dd    0
854
integer    dd    0
866
decimal dd    0
855
decimal   dd    0
867
kymppi  dd   10
856
kymppi    dd   10
-
 
857
ten           dd  10.0,0
-
 
858
tmp          dw  1,0
-
 
859
sign         db  1,0
-
 
860
tmp2        dq  0x0,0
-
 
861
exp          dd  0x0,0
-
 
862
new_dec  dd  100000,0
-
 
863
id             db  0x0,0
-
 
864
res           dd  0
-
 
865
trans1      dq  0
-
 
866
trans2      dq  0
-
 
867
controlWord  dw  1
-
 
868
multipl:    dd 10,16,2
Line 868... Line 869...
868
 
869
 
869
dsign:
870
dsign:
870
muuta1  db   '+0000000000.000000'
871
muuta1  db   '+0000000000.000000'
871
muuta2  db   '+0000000000.000000'
872
muuta2  db   '+0000000000.000000'