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] |