Subversion Repositories Kolibri OS

Rev

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

Rev 2564 Rev 2736
Line 1... Line 1...
1
; application : View3ds ver. 0.060 - tiny .3ds files viewer.
1
; application : View3ds ver. 0.061 - tiny .3ds files viewer.
2
; compiler    : FASM
2
; compiler    : FASM
3
; system      : KolibriOS
3
; system      : KolibriOS
4
; author      : Macgub aka Maciej Guba
4
; author      : Macgub aka Maciej Guba
5
; email       : macgub3@wp.pl
5
; email       : macgub3@wp.pl
6
; web         : www.macgub.hekko.pl
6
; web         : www.macgub.hekko.pl
Line 33... Line 33...
33
NON   =   0				       ;     -/  \-
33
NON   =   0				     ;     -/  \-
34
MMX   =   1
34
MMX   =   1
35
SSE   =   2
35
SSE   =   2
36
SSE2  =   3
36
SSE2  =   3
37
Ext   =   MMX		   ;Ext={ NON | MMX | SSE | SSE2 }
37
Ext   =   SSE2		    ;Ext={ NON | MMX | SSE | SSE2 }
38
 
38
 
Line 39... Line 39...
39
; 0 for short names (Menuet-compatible), 1 for long names (Kolibri features)
39
; 0 for short names (Menuet-compatible), 1 for long names (Kolibri features)
40
USE_LFN = 1
40
USE_LFN = 1
Line 41... Line 41...
41
 
41
 
Line 91... Line 91...
91
	call   calc_bumpmap
91
	call   calc_bumpmap
92
	call   calc_bumpmap_coords   ; bump and texture mapping
92
	call   calc_bumpmap_coords   ; bump and texture mapping
93
	call   draw_window
93
	call   draw_window
94
 
94
 
Line 95... Line -...
95
 
-
 
96
still:
95
still:
Line 97... Line 96...
97
 
96
 
98
	mov	eax,23		; wait here for event with timeout
97
	mov	eax,23		; wait here for event with timeout
99
	mov	ebx,TIMEOUT
98
	mov	ebx,TIMEOUT
Line 455... Line 454...
455
 
454
 
Line 456... Line 455...
456
      @@:
455
      @@:
Line -... Line 456...
-
 
456
 
-
 
457
 
-
 
458
    cmp     [inc_bright_flag],0 	  ; increase brightness
-
 
459
    je	    .no_inc_bright
-
 
460
    movzx   ebx,[inc_bright_flag]
-
 
461
    shl     ebx,4
-
 
462
    mov     esi,screen
-
 
463
    mov     ecx,SIZE_X*SIZE_Y*3
-
 
464
if (Ext = MMX)|(Ext = SSE)
-
 
465
    mov      bh,bl
-
 
466
    push     bx
-
 
467
    shl      ebx,16
-
 
468
    pop      bx
-
 
469
    push     ebx
-
 
470
    push     ebx
-
 
471
    movq     mm0,[esp]
-
 
472
    add      esp,8
-
 
473
else if Ext >= SSE2
-
 
474
    mov      bh,bl
-
 
475
    push     bx
-
 
476
    shl      ebx,16
-
 
477
    pop      bx
-
 
478
    movd     xmm0,ebx
-
 
479
    shufps   xmm0,xmm0,0
-
 
480
end if
-
 
481
  .oop:
-
 
482
if Ext=NON
-
 
483
    lodsb
-
 
484
    add     al,bl
-
 
485
    jnc     @f
-
 
486
    mov     byte[esi-1],255
-
 
487
    loop    .oop
-
 
488
   @@:
-
 
489
    mov     [esi-1],al
-
 
490
    loop    .oop
-
 
491
else if (Ext=MMX)|(Ext=SSE)
-
 
492
    movq    mm1,[esi]
-
 
493
    movq    mm2,[esi+8]
-
 
494
    paddusb mm1,mm0
-
 
495
    paddusb mm2,mm0
-
 
496
    movq    [esi],mm1
-
 
497
    movq    [esi+8],mm2
-
 
498
    add     esi,16
-
 
499
    sub     ecx,16
-
 
500
    jnz     .oop
-
 
501
else
-
 
502
    movaps  xmm1,[esi]
-
 
503
    paddusb xmm1,xmm0
-
 
504
    movaps  [esi],xmm1
-
 
505
    add     esi,16
-
 
506
    sub     ecx,16
-
 
507
    jnz     .oop
-
 
508
end if
-
 
509
 
-
 
510
.no_inc_bright:
-
 
511
 
-
 
512
 
-
 
513
    cmp     [dec_bright_flag],0
-
 
514
    je	    .no_dec_bright
-
 
515
    movzx   ebx,[dec_bright_flag]
-
 
516
    shl     ebx,4
-
 
517
    mov     esi,screen
-
 
518
    mov     ecx,SIZE_X*SIZE_Y*3
-
 
519
if (Ext = MMX)|(Ext = SSE)
-
 
520
    mov      bh,bl
-
 
521
    push     bx
-
 
522
    shl      ebx,16
-
 
523
    pop      bx
-
 
524
    push     ebx
-
 
525
    push     ebx
-
 
526
    movq     mm0,[esp]
-
 
527
    add      esp,8
-
 
528
else if Ext >=SSE2
-
 
529
    mov      bh,bl
-
 
530
    push     bx
-
 
531
    shl      ebx,16
-
 
532
    pop      bx
-
 
533
    movd     xmm0,ebx
-
 
534
    shufps   xmm0,xmm0,0
-
 
535
end if
-
 
536
 .oop1:
-
 
537
if Ext=NON
-
 
538
    lodsb
-
 
539
    sub     al,bl
-
 
540
    jb	    @f
-
 
541
    mov     [esi-1],al
-
 
542
    loop    .oop1
-
 
543
   @@:
-
 
544
    mov     byte[esi-1],0
-
 
545
    loop    .oop1
-
 
546
else if (Ext = MMX)|(Ext=SSE)
-
 
547
    movq    mm1,[esi]
-
 
548
    psubusb mm1,mm0
-
 
549
    movq    [esi],mm1
-
 
550
    add     esi,8
-
 
551
    sub     ecx,8
-
 
552
    jnz     .oop1
-
 
553
else
-
 
554
    movaps  xmm1,[esi]
-
 
555
    psubusb xmm1,xmm0
-
 
556
    movaps  [esi],xmm1
-
 
557
    add     esi,16
-
 
558
    sub     ecx,16
-
 
559
    jnz     .oop1
-
 
560
end if
-
 
561
  .no_dec_bright:
-
 
562
;======================================commmented====================
-
 
563
if 0
-
 
564
if Ext >= SSE
-
 
565
    cmp     [max_flag],0
-
 
566
    je	    .no_max
-
 
567
    ;movzx   ebx,[max_flag]
-
 
568
 .again_max:
-
 
569
;    push       ecx
-
 
570
    mov        edi,screen
-
 
571
    mov        ecx,SIZE_X*3/4
-
 
572
  ;   ;    pxor       mm5,mm5
-
 
573
    xor        eax,eax
-
 
574
    rep        stosd
-
 
575
 
-
 
576
    mov        ecx,(SIZE_X*(SIZE_Y-3))*3/8
-
 
577
  .calc_max:
-
 
578
  @@:
-
 
579
    movq       mm0,[edi+SIZE_X*3]
-
 
580
    movq       mm1,[edi-SIZE_X*3]
-
 
581
    movq       mm2,[edi-3]
-
 
582
    movq       mm3,[edi+3]
-
 
583
 
-
 
584
    pmaxub	mm0,mm1
-
 
585
    pmaxub	mm2,mm3
-
 
586
    pmaxub	mm0,mm2
-
 
587
 
-
 
588
    movq       [edi],mm0
-
 
589
    add 	edi,8
-
 
590
    loop	@b
-
 
591
 
-
 
592
    xor        eax,eax
-
 
593
    mov        ecx,SIZE_X*3/4
-
 
594
    rep        stosd
-
 
595
end if
-
 
596
 
-
 
597
.no_max:
-
 
598
 
-
 
599
if Ext >= SSE
-
 
600
    cmp     [min_flag],0
-
 
601
    je	    .no_min
-
 
602
;    push       ecx
-
 
603
    mov        edi,screen
-
 
604
    mov        ecx,SIZE_X*3/4
-
 
605
  ;   ;    pxor       mm5,mm5
-
 
606
    xor        eax,eax
-
 
607
    rep        stosd
-
 
608
 
-
 
609
    mov        ecx,(SIZE_X*(SIZE_Y-3))*3/8
-
 
610
  @@:
-
 
611
    movq       mm0,[edi+SIZE_X*3]
-
 
612
    movq       mm1,[edi-SIZE_X*3]
-
 
613
    movq       mm2,[edi-3]
-
 
614
    movq       mm3,[edi+3]
-
 
615
 
-
 
616
    pminub	mm0,mm1
-
 
617
    pminub	mm2,mm3
-
 
618
    pminub	mm0,mm2
-
 
619
 
-
 
620
    movq       [edi],mm0
-
 
621
    add 	edi,8
-
 
622
    loop	@b
-
 
623
 
-
 
624
    xor        eax,eax
-
 
625
 
-
 
626
    mov        ecx,SIZE_X*3/4
-
 
627
    rep        stosd
-
 
628
end if
-
 
629
.no_min:
457
 
630
end if
458
 
631
;========================commented=====================================
459
    RDTSC
632
    RDTSC
460
    sub eax,[esp]
633
    sub eax,[esp]
Line 476... Line 649...
476
    mov     ecx,SIZE_X shl 16 + SIZE_Y
649
    mov     ecx,SIZE_X shl 16 + SIZE_Y
477
    mov     edx,5 shl 16 + 23
650
    mov     edx,5 shl 16 + 23
478
    int     0x40
651
    int     0x40
479
 
652
 
Line -... Line 653...
-
 
653
	mov  eax,13
-
 
654
    mov  ebx,530*65536+60
-
 
655
    mov  ecx,510*65536+9
-
 
656
    xor  edx,edx
-
 
657
    int  40h
Line 480... Line 658...
480
 
658
	
481
    mov  eax,4			   ; function 4 : write text to window
659
    mov  eax,4			   ; function 4 : write text to window
482
    mov  ebx,5*65536+23 	   ; [x start] *65536 + [y start]
660
    mov  ebx,530*65536+510 	   ; [x start] *65536 + [y start]
483
    mov  ecx,0x00ffffff	;-1
661
    mov  ecx,0x00888888
484
    mov  edx,STRdata		   ; pointer to text beginning
662
    mov  edx,STRdata		   ; pointer to text beginning
485
    mov  esi,10 		   ; text length
663
    mov  esi,10 		   ; text length
Line 506... Line 684...
506
include "BUMP_TEX.INC"
684
include "BUMP_TEX.INC"
507
include "GRD_TEX.INC"
685
include "GRD_TEX.INC"
508
include "TWO_TEX.INC"
686
include "TWO_TEX.INC"
509
 
687
 
Line -... Line 688...
-
 
688
 
510
alloc_buffer_mem:
689
alloc_buffer_mem:
511
    movzx    ecx,[size_x]
690
    movzx    ecx,[size_x]
512
    movzx    eax,[size_y]
691
    movzx    eax,[size_y]
513
    mul      ecx
692
    mul      ecx
514
    lea      ecx,[eax*3]
693
    lea      ecx,[eax*3]