1 ; **************************************************************************** 2 ; sncomni.s (TRDOS 386, TRDOS v2.0 - sample binary file, 'sncomni.prg') 3 ; ---------------------------------------------------------------------------- 4 ; SNCOMNI.PRG ! TEST program ! TRDOS 386 VGA Functionality test ! 5 ; 6 ; 02/09/2016 7 ; 8 ; [ Last Modification: 11/02/2017 ] 9 ; 10 ; Derived from source code of 'OMNISCENT.ASM' by Dirk Kόppers 11 ; SNC_OMNI.COM (MSDOS) intro file, 1997 12 ; 13 ; Assembler: NASM 2.11 14 15 ; (Original TASM -msdos- code has been modifed for TRDOS 386 system calls and 16 ; other protected mode (TRDOS 386) interrupts.) 17 ; **************************************************************************** 18 19 ; ----====> Omniscent <====---- 20 ; 21 ; Omniscent was done by Pinker of SANCTION for the Mekka '97. The song 22 ; was written by Nyphton. It place XXX out of XXX. 23 ; 24 ; Special thanks in alphabetical order : 25 ; 26 ; Andreas Mautsch (beta testing) 27 ; Axel Scheel Meyer (MACM sources, nice IRC chat's) 28 ; Christian Cohnen (for his help on perspective texture mapping and 29 ; designing world and script) 30 ; Daniel Weinand (song) 31 ; Funk (for give me the idea trying a 4K Descent) 32 ; Stephanie Schepers (moral and food support ;-) ) 33 ; 34 ; and all other SANCTION dudes for supporting this product ! 35 36 ; 16/10/2016 37 ; 29/04/2016 38 ; TRDOS 386 system calls (temporary list!) 39 _ver equ 0 40 _exit equ 1 41 _fork equ 2 42 _read equ 3 43 _write equ 4 44 _open equ 5 45 _close equ 6 46 _wait equ 7 47 _creat equ 8 48 _link equ 9 49 _unlink equ 10 50 _exec equ 11 51 _chdir equ 12 52 _time equ 13 53 _mkdir equ 14 54 _chmod equ 15 55 _chown equ 16 56 _break equ 17 57 _stat equ 18 58 _seek equ 19 59 _tell equ 20 60 _mount equ 21 61 _umount equ 22 62 _setuid equ 23 63 _getuid equ 24 64 _stime equ 25 65 _quit equ 26 66 _intr equ 27 67 _fstat equ 28 68 _emt equ 29 69 _mdate equ 30 70 _video equ 31 71 _audio equ 32 72 _timer equ 33 73 _sleep equ 34 74 _msg equ 35 75 _geterr equ 36 76 _rsvd1 equ 37 77 _pri equ 38 78 _rele equ 39 79 _fff equ 40 80 _fnf equ 41 81 82 %macro sys 1-4 83 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 84 ; 03/09/2015 85 ; 13/04/2015 86 ; Retro UNIX 386 v1 system call. 87 %if %0 >= 2 88 mov ebx, %2 89 %if %0 >= 3 90 mov ecx, %3 91 %if %0 = 4 92 mov edx, %4 93 %endif 94 %endif 95 %endif 96 mov eax, %1 97 ;int 30h 98 int 40h ; TRDOS 386 (TRDOS v2.0) 99 %endmacro 100 101 ; TRDOS 386 (and Retro UNIX 386 v1) system call format: 102 ; sys systemcall (eax) , , 103 104 ; SNCOMNI.ASM 105 ; ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ» 106 ; Ί This file is generated by The Interactive Disassembler (IDA) Ί 107 ; Ί Copyright (c) 2010 by Hex-Rays SA, Ί 108 ; Ί Licensed to: Freeware version Ί 109 ; ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ 110 ; 111 ; Input MD5 : 933E2716A5E585459024215F4468CDBC 112 113 ; File Name : C:\dosprogs\MEMDUMP.COM ; SNC_OMNI.COM UNPACKED! 114 ; Format : MS-DOS COM-file 115 ; Base Address: 0h Range: 100h-60100h Loaded length: 60000h 116 117 ; NASM version: Erdogan Tan, 14/08/2016 (Modified from MEMDUMP.ASM) 118 ; (SNC_OMNI.COM -> unpacking by using DosBox Debug -> MEMDUMP.COM -> 119 ; disassembling by using IDA Pro Free -> MEMDUMP.ASM -> converting to 120 ; NASM syntax (manual) -> test with DosBox -> correcting different code by 121 ; matching MEMDUMP.LST and SNCOMNI.LST files -> this file !!!) 122 123 ;============================================================================== 124 ; constants 125 ;============================================================================== 126 127 GMPort equ 0331h 128 CMD_NOTEON equ 090h 129 CMD_NOTEOFF equ 080h 130 CMD_CHANGEPARAM equ 0B0h 131 CMD_CHANGEPRG equ 0C0h 132 MOD_ALLNOTESOFF equ 07Bh 133 MAXFACES equ 400 134 MAXPOINTS equ 400 135 SONGSPEED equ 29 136 XMAX equ 320 137 YMIN equ 21 138 YMAX equ 179 139 SUBRANGE equ 16 140 %define ASPECT_RATIO 1.2 141 CENTERX equ 160 142 CENTERY equ 100 143 144 ;============================================================================== 145 ; structures 146 ;============================================================================== 147 148 struc channel 149 00000000 .del: resw 1 150 00000002 .trk: resb 1 151 00000003 .ln: resb 1 152 00000004 .adr: resw 1 153 endstruc 154 155 struc matrix 156 00000000 resd 9 157 .size: 158 endstruc 159 160 struc vector 161 00000000 .x: resd 1 162 00000004 .y: resd 1 163 00000008 .z: resd 1 164 .size: 165 endstruc 166 167 struc point 168 00000000 .x: resw 1 169 00000002 .y: resw 1 170 00000004 .z: resw 1 171 00000006 .s: resw 1 172 .size: 173 endstruc 174 175 struc face 176 00000000 resw 5 177 .size: 178 endstruc 179 180 ;struc object 181 ; .panz: resw 1 182 ; .fanz: resw 1 183 ; .p: resb point.size*MAXPOINTS 184 ; .f: resb face.size*MAXFACES 185 ; .size: 186 ;endstruc 187 188 struc edges 189 00000000 .x: resd 1 190 00000004 .u: resd 1 191 00000008 .v: resd 1 192 0000000C .w: resd 1 193 00000010 .s: resd 1 194 .size: 195 endstruc 196 197 struc edge 198 00000000 .p: resb 12 ; vector.size 199 0000000C .py: resd 1 200 00000010 .e: resb 20 ; edges.size 201 .size: 202 endstruc 203 204 struc poly 205 00000000 resb 36*5 ; edge.size*5 206 .size: 207 endstruc 208 209 ;============================================================================== 210 ; %macros 211 ;============================================================================== 212 ;*********************************************** 213 ;* descript. : start timer interrupt 70/s * 214 ;* parameter : none * 215 ;* sideeffect: all * 216 ;* back : none * 217 ;*********************************************** 218 %macro startTimer 0 219 ;mov ax,03508h 220 ;int 21h 221 ;mov [word ptr Old08Irqseg],es 222 ;mov [word ptr Old08Irqofs],bx 223 ;mov ax,02508h 224 ;mov dx,offset irqHandler08 225 ;int 21h 226 227 ;mov bx, 3409 ; 1193180/3409 = 350 ticks per second (*!) 228 ;call setTimer 229 230 ;; start timer event 231 ;mov ebx, 8400h ; Current Timer setup, Callback method 232 ;mov ecx, 1 ; 1 tick 233 ;mov edx, timer_callback ; timer callback service addr 234 ;mov eax, 33 ; 'systimer' 235 ;int 40h ; TRDOS 386 system call 236 ;jc loc_err_exit 237 238 ;mov [timer_event_number], al 239 240 ; temporary, 11/02/2017 241 ; start (PIT) timer function 242 mov bl, 0FFh ; signal return (response) byte 243 mov bh, 4 ; 1 tick (for currrent timer setup) 244 mov ecx, 1 245 ;mov cl, 1 246 mov edx, timer_event ; signal return (response) address 247 mov eax, 33 ; 'systimer' 248 int 40h ; TRDOS 386 system call 249 jc loc_err_exit 250 mov [timer_event_number], al 251 252 %endmacro 253 254 ;*********************************************** 255 ;* descript. : stop timer interrupt * 256 ;* parameter : none * 257 ;* sideeffect: all * 258 ;* back : none * 259 ;*********************************************** 260 %macro stopTimer 0 261 ;push ds 262 ;xor bx,bx ; set timer to default 263 ;call setTimer ; 18.2 ticks per second 264 ;mov ax,02508h ; restore old IRQ-vector 265 ;lds dx,[Old08Irqptr] 266 ;int 21h 267 ;pop ds 268 269 ;xor bx, bx ; set timer to default (18.2 Hz) value 270 ;call setTimer 271 272 ; Stop timer event 273 movzx ebx, byte [timer_event_number] 274 ;and bl, bl 275 ;jz short r_t_m ; 0 = error (no timer event) 276 ; bh = 0 -> stop timer event 277 mov eax, 33 ; 'systimer' 278 int 40h ; TRDOS 386 system call 279 ;r_t_m: 280 %endmacro 281 282 ;*********************************************** 283 ;* descript. : start keyboard handler * 284 ;* parameter : none * 285 ;* sideeffect: all * 286 ;* back : none * 287 ;*********************************************** 288 %macro startKBDHandler 0 289 ;mov ax,03509h 290 ;int 21h 291 ;mov [word ptr Old09Irqseg],es 292 ;mov [word ptr Old09Irqofs],bx 293 ;mov ax,02509h 294 ;mov dx,offset irqHandler09 295 ;int 21h 296 297 ; TRDOS 386 already have a CRTL+BRK 298 ; preview feature to call 'sysexit' 299 ; /// nothing to do here ! /// 300 ; 10/12/2016 - Erdogan Tan 301 nop 302 %endmacro 303 304 ;*********************************************** 305 ;* descript. : stop keyboard handler * 306 ;* parameter : none * 307 ;* sideeffect: all * 308 ;* back : none * 309 ;*********************************************** 310 %macro stopKBDHandler 0 311 ;push ds 312 ;mov ax,02509h ; restore old IRQ-vector 313 ;lds dx,[Old09Irqptr] ; 314 ;int 21h 315 ;pop ds 316 317 ; TRDOS 386 already have a CRTL+BRK 318 ; preview feature to call 'sysexit' 319 ; /// nothing to do here ! /// 320 ; 10/12/2016 - Erdogan Tan 321 nop 322 %endmacro 323 324 ;*********************************************** 325 ;* descript. : zero null-initialized data * 326 ;* parameter : none * 327 ;* sideeffect: all * 328 ;* back : none * 329 ;*********************************************** 330 %macro nullData 0 331 ;mov di, nullstart 332 mov edi, nullstart 333 ;mov cx, nullend-nullstart 334 ;mov ecx, nullend-nullstart ; ?? 335 xor eax, eax 336 ;rep stosb 337 mov ecx, (bss_end-nullstart)+3 ; 06/02/2017 338 shr cx, 2 339 rep stosd 340 %endmacro 341 342 ;*********************************************** 343 ;* descript. : set textmode * 344 ;* parameter : none * 345 ;* sideeffect: all * 346 ;* back : none * 347 ;*********************************************** 348 %macro set80x25 0 349 mov ax, 3 350 ;int 10h ; - VIDEO - SET VIDEO MODE 351 ; AL = mode 352 int 31h ; TRDOS 386 Video interrupt 353 %endmacro 354 355 ;*********************************************** 356 ;* descript. : set gfx-mode 320x200 * 357 ;* parameter : none * 358 ;* sideeffect: all * 359 ;* back : none * 360 ;*********************************************** 361 %macro set320x200 0 362 mov ax, 13h 363 ;int 10h ; - VIDEO - SET VIDEO MODE 364 ; AL = mode 365 int 31h ; TRDOS 386 - Video interrupt 366 %endmacro 367 368 ;*********************************************** 369 ;* descript. : calculate a smooth colorrange * 370 ;* parameter : none * 371 ;* sideeffect: all * 372 ;* back : none * 373 ;*********************************************** 374 %macro makePalette 0 375 ;mov bx, 3 376 mov ebx, 3 377 mPcolor: 378 ;mov si, colors 379 mov esi, colors 380 mov edi, palette 381 xor dh, dh 382 lodsb 383 ;movzx cx, al 384 movzx ecx, al ; ?? 385 mPouter: 386 push ecx 387 mov cl, [esi] 388 mov ah, [ebx+esi] 389 sub ax, dx 390 push edx 391 cwd 392 idiv cx 393 pop edx 394 mPinner: 395 add dx, ax 396 mov [edi+ebx-1], dh 397 add di, 3 398 loop mPinner 399 add si, 4 400 pop ecx 401 loop mPouter 402 dec bx 403 jnz short mPcolor 404 %endmacro 405 406 ;*********************************************** 407 ;* descript. : reset the GM-Port and switch to * 408 ;* UART mode. * 409 ;* parameter : none * 410 ;* sideeffect: dx,al * 411 ;* back : none * 412 ;*********************************************** 413 %macro resetGM 0 414 mov dx, GMPort 415 mov al, 0FFh 416 ;out dx, al 417 418 mov ah, 1 ; out (byte) 419 int 34h ; TRDOS 386 - IOCTL interrupt 420 ; cl = 0 421 dec ah ; 0 422 ;sub cl, cl 423 resGMbusy1: 424 dec cl 425 jz short rGMerror ;{ timeout } 426 ;in al, dx ;{ read acknowledge } 427 428 ;mov ah, 0 ; in (byte) 429 int 34h ; TRDOS 386 - IOCTL interrupt 430 431 test al, 80h 432 jnz short resGMbusy1 433 dec dx 434 ;in al, dx 435 436 ;mov ah, 0 ; in (byte) 437 int 34h ; TRDOS 386 - IOCTL interrupt 438 439 cmp al, 0FEh 440 jne short rGMerror 441 inc dx ;{ switch into UART mode } 442 resGMbusy2: 443 ;in al, dx 444 445 ;mov ah, 0 ; in (byte) 446 int 34h ; TRDOS 386 - IOCTL interrupt 447 448 test al, 40h 449 jnz short resGMbusy2 450 mov al, 3Fh 451 ;out dx, al 452 453 ;mov ah, 1 ; out (byte) 454 inc ah ; 1 455 int 34h ; TRDOS 386 - IOCTL interrupt 456 rGMerror: 457 %endmacro 458 459 ;*********************************************** 460 ;* descript. : mute midi channels 0..15 * 461 ;* parameter : none * 462 ;* sideeffect: ax,cx * 463 ;* back : none * 464 ;*********************************************** 465 %macro silence 0 466 mov cx, 15 ; 0Fh 467 Siloop: 468 mov ax, cx 469 add al, CMD_CHANGEPARAM ; 0B0h 470 call writeGM 471 mov al, MOD_ALLNOTESOFF ; 7Bh 472 call writeGM 473 xor al, al 474 call writeGM 475 loop Siloop 476 Sinosound: 477 %endmacro 478 479 ;*********************************************** 480 ;* descript. : create the reactor wall texture * 481 ;* parameter : none * 482 ;* sideeffect: ax,bx,cx,di,es * 483 ;* back : none * 484 ;* length : 45 bytes * 485 ;*********************************************** 486 %macro reactorWall 0 487 mov edi, dword [tseg] ; 11/02/2017 488 mov cx, 4096 ; 1000h 489 rsmloop: 490 mov ax, di 491 ;and ax, 0FFFh 492 test al, 8 493 jle short rsnonot1 494 not al 495 rsnonot1: 496 and al, 15 ; 0Fh 497 mov bx, ax 498 mov ax, di 499 and ax, 0FFFh ; 18/12/2016 500 shr ax, 6 501 test al, 8 502 jle short rsnonot2 503 not al 504 rsnonot2: 505 and al, 15 ; 0Fh 506 cmp al, bl 507 jle short rstakeal 508 mov ax, bx 509 rstakeal: 510 add al, 224 ; 0E0h 511 stosb 512 loop rsmloop 513 %endmacro 514 515 ;*********************************************** 516 ;* descript. : calc background-fractal * 517 ;* parameter : none * 518 ;* sideeffect: ax,bx,cx,si,di,es * 519 ;* back : none * 520 ;*********************************************** 521 %macro createFrac2 0 522 mov edi, dword [tseg+72] ; 11/02/2017 523 mov ebx, edi 524 mov al, 20 ; 14h 525 call setFrac 526 mov edi, ebx 527 add di, 64 ; 16/01/2017 528 ;mov cx, 4096-64 ; 0FC0h 529 mov ecx, 4096-64 ; ?? 530 mov ebx, 4 ; 16/12/2016 531 cF1loop: 532 ;mov bx, 4 533 call rnd 534 add al, [edi-64] ; byte [es:di-64] (*) 16 bit 535 add al, [edi-63] ; byte [es:di-63] (*) 536 dec ax 537 shr ax, 1 538 stosb 539 loop cF1loop 540 %endmacro 541 542 ;*********************************************** 543 ;* descript. : calc random noise fractal * 544 ;* parameter : none * 545 ;* sideeffect: ax,bx,cx,si,di,es * 546 ;* back : none * 547 ;*********************************************** 548 %macro createFrac3 0 549 mov edi, dword [tseg+76] ; 11/02/2017 550 mov dword [es_], edi ; 06/02/2017 551 mov al, 3 552 call setFrac 553 ;mov cx, 4096 ; 1000h 554 mov ecx, 4096 ; ?? 555 mov ebx, ecx 556 cF3loop: 557 ;mov bx, 4096 ; 1000h 558 call rnd 559 mov edi, dword [es_] ; 06/02/2017 560 add di, ax ; 16/01/2017 561 inc byte [edi] 562 loop cF3loop 563 %endmacro 564 565 ;*********************************************** 566 ;* descript. : init stars (positions and state)* 567 ;* parameter : none * 568 ;* sideeffect: eax,bx,cx,edx,si,di,es * 569 ;* back : none * 570 ;*********************************************** 571 %macro initStars 0 572 ;mov cx, 30 ; 1Eh 573 mov ecx, 30 ; ?? 574 mov edi, stars 575 xor ebx, ebx ; ? 18/12/2016 576 iSloop: 577 mov bx, 256 ; 100h 578 call rnd 579 stosb 580 mov bx, 4096-(64*5) ; 0EC0h 581 add bx, 128 ; 80h 582 call rnd 583 add ax, 64 ; 40h 584 stosw 585 loop iSloop 586 %endmacro 587 588 ;*********************************************** 589 ;* descript. : add effects to fractals * 590 ;* parameter : none * 591 ;* sideeffect: ax,bx,cx,di,es * 592 ;* back : none * 593 ;*********************************************** 594 %macro effects 0 595 ; effects 596 ;mov cx, 26 ; 1Ah 597 mov ecx, 26 ; ?? 598 mov esi, aE 599 ;mov si, aE 600 xor ebx, ebx 601 xor edi, edi 602 effmloop: 603 push cx 604 mov bl, byte [esi] ; mseg+effect 605 mov dl, bl 606 shr dl, 4 607 and bl, 0Fh ; 15 608 ; 11/02/2017 609 shl bl, 2 ; *4 610 mov ebp, dword [ebx+tseg] 611 ; 612 movzx cx, byte [esi+2] ; y1 613 effyloop: 614 movzx bx, byte [esi+1] ; x1 615 effxloop: 616 mov di, cx 617 shl di, 6 618 add di, bx 619 mov al, dl 620 dec al 621 jz short effect1 622 dec al 623 jz short effect2 624 mov ax, bx 625 add ax, cx 626 and al, 4 627 ;jz short effdonot 628 jz short effect1 629 mov al, 152 ; 98h 630 effdonot: 631 jmp short effect1 632 effect2: 633 mov al, byte [ebp+edi] ; 16/12/2016 634 effect1: 635 add al, byte [esi+5] ; value 636 mov byte [ebp+edi], al ; 16/12/2016 637 inc bl 638 cmp bl, byte [esi+3] ; x2 639 jle short effxloop 640 inc cx 641 cmp cl, byte [esi+4] ; y2 642 jle short effyloop 643 add si, 6 644 pop cx 645 loop effmloop 646 %endmacro 647 648 ;*********************************************** 649 ;* descript. : copy fractals and add value * 650 ;* parameter : none * 651 ;* sideeffect: al,cx,di,es,fs * 652 ;* back : none * 653 ;*********************************************** 654 %macro addFractals 0 655 mov esi, aF 656 ;mov si, aF 657 mov dl, 8 ; 11/02/2017 658 xor ebx, ebx 659 aFloop: 660 mov bl, dl 661 ; 11/02/2017 662 mov edi, dword [ebx+tseg] ; es: 663 lodsw 664 mov bl, al ; 16 bit offset (original) 665 shl bl, 1 ; 32 bit offset 666 ; 667 mov ebp, dword [ebx+tseg] ; fs: 668 ; 669 ;mov cx, 4096 ; 1000h 670 mov ecx, 4096 ; ?? 671 aFiloop: 672 mov al, [ebp] ; [fs:di] 673 add al, ah 674 stosb 675 inc ebp 676 loop aFiloop 677 ; 11/02/2017 678 add dl, 4 679 cmp dl, 60 680 jle short aFloop 681 %endmacro 682 683 ;*********************************************** 684 ;* descript. : calculate and initalize textures* 685 ;* parameter : none * 686 ;* sideeffect: al,cx,di,es,fs * 687 ;* back : none * 688 ;*********************************************** 689 %macro addLava 0 690 mov ebp, dword [tseg+44] ; 11/02/2017 691 ; 692 mov edi, 4095 ; 0FFFh 693 ;mov cx, 20 ; 14h 694 mov ecx, 20 ; ?? 695 mov al, 94 ; 5Eh 696 aLyloop: 697 push ecx 698 shl cx, 3 699 aLxloop: 700 push edi 701 push eax 702 ;mov bx, 64 ; 40h 703 mov ebx, 64 704 call rnd 705 sub di, ax 706 pop eax 707 mov [ebp+edi], al ; 17/01/2017 708 pop edi 709 loop aLxloop 710 pop ecx 711 dec al 712 sub di, 64 ; 40h 713 loop aLyloop 714 %endmacro 715 716 ;*********************************************** 717 ;* descript. : calculate and initalize textures* 718 ;* parameter : none * 719 ;* sideeffect: al,cx,di,es,fs * 720 ;* back : none * 721 ;*********************************************** 722 %macro initTextures 0 723 ;mov bx, 34 ; 22h 724 mov ebx, 68 ; 11/02/2017 725 push 800 ; 320h 726 push 5 727 call createFrac1 728 ;mov bx, 32 ; 20h 729 mov ebx, 64 ; 11/02/2017 730 push 112 ; 70h 731 push 15 ; 0Fh 732 call createFrac1 733 createFrac2 734 createFrac3 735 initStars 736 reactorWall 737 addFractals 738 effects 739 addLava 740 %endmacro 741 742 ;*********************************************** 743 ;* descript. : cycle "range" colors at "base" * 744 ;* parameter : none * 745 ;* sideeffect: ax,(bl),cx,si,di,es * 746 ;* back : none * 747 ;*********************************************** 748 %macro colorCycle 0 749 base equ 6*32 750 range equ 32 751 752 mov edi, palette+(base*3) 753 mov esi, edi 754 lodsw 755 ;mov bl,[esi] ; works only with fire (no blue) 756 inc esi 757 ;mov cx, (range*3-3) 758 mov ecx, (range*3-3) ; ?? 759 rep movsb 760 stosw 761 ;mov [edi],bl ; works only with fire (no blue) 762 %endmacro 763 764 ;*********************************************** 765 ;* descript. : animate the stars * 766 ;* parameter : none * 767 ;* sideeffect: ax,bx,cx,dl,si,di,es * 768 ;* back : none * 769 ;*********************************************** 770 %macro animStars 0 771 _base equ 7*32 772 773 mov edi, dword [tseg+4] ; 11/02/2017 774 mov ebp, edi 775 call clearFrac 776 777 ;mov ecx, 30 778 ;mov cl, 30 ; 1Eh 779 mov ecx, 30 ; ?? 780 mov ebx, stars 781 ;mov bx, stars 782 aSoloop: 783 dec byte [ebx] 784 mov ah, [ebx] 785 and ah, 63 ; 3Fh 786 cmp ah, 31 ; 1Fh 787 jbe short aSnonot 788 not ah 789 and ah, 31 ; 1Fh 790 aSnonot: 791 shr ah, 1 792 ; 05/02/2017 793 movzx edi, word [ebx+1] 794 add edi, ebp 795 796 push ecx 797 push ebx 798 799 mov edx, 64-5 ; 3Bh 800 mov cx, _base*256+0 ; 0E000h 801 call setstarbob 802 803 pop ebx 804 pop ecx 805 add bx, 3 806 loop aSoloop 807 %endmacro 808 809 ;*********************************************** 810 ;* descript. : calculate shading tab * 811 ;* parameter : none * 812 ;* sideeffect: ax,bl,cx,di,es * 813 ;* back : none * 814 ;*********************************************** 815 %macro calcShadeTab 0 816 mov edi, shadetab 817 xor bl, bl 818 cSolp: 819 inc bl 820 ;xor cx, cx 821 xor ecx, ecx ; ?? 822 cSilp1: 823 mov al, cl 824 and al, 31 ; 1Fh 825 mul bl 826 add ax, ax 827 mov al, cl 828 and al, 224 ; 0E0h 829 add al, ah 830 stosb 831 inc cl 832 cmp cl, 192 ; 0C0h 833 jne short cSilp1 834 cSilp2: 835 mov al, cl 836 stosb 837 inc cl 838 jnz short cSilp2 839 cmp bl, 128 ; 80h 840 jne short cSolp 841 %endmacro 842 843 ;*********************************************** 844 ;* descript. : expand a song * 845 ;* parameter : si:song base adress * 846 ;* sideeffect: ax,bx,cx,dx,si,di * 847 ;* back : none * 848 ;*********************************************** 849 %macro expandSong 0 850 mov esi, credits 851 mov ebx, channels 852 mov edi, songdata 853 EPSwhile: lodsw 854 dec al 855 js short EPSendwhile 856 mov [ebx+channel.trk], al ; [ebx+2] 857 add al, CMD_CHANGEPRG ; 0C0h 858 call setinstr 859 mov [ebx+channel.adr], di ; [ebx+4] 860 call expand 861 xor al, al 862 stosb 863 add bx, 6 864 inc word [tracks] 865 jmp short EPSwhile 866 EPSendwhile: 867 %endmacro 868 869 ;*********************************************** 870 ;* descript. : parse the script,rotate and move* 871 ;* parameter : none * 872 ;* sideeffect: all * 873 ;* back : none * 874 ;*********************************************** 875 %macro scriptIt 0 876 ; scriptIt 877 ;mov cx, [ticker] 878 movzx ecx, word [ticker] ; 22/01/2017 879 mov word [ticker], 0 880 or cx, cx 881 jz sItickerNull 882 sImloop: 883 push ecx 884 mov esi, zspeed 885 ;mov si, zspeed 886 ;dec word [esi+10] ; scriptanz 887 dec word [scriptanz] 888 jns short sIwaitTimer 889 ;mov bx, [esi+8] ; scriptptr 890 ;movzx ebx, word [esi+8] 891 movzx ebx, word [scriptptr] 892 mov al, [ebx+script] 893 or al, al 894 jz _exit_ 895 mov bx, ax 896 and bl, 7 897 ;mov [esi+12], bl ; scriptins 898 mov [scriptins], bl 899 dec bl 900 jnz short sInegateTurn 901 ; (cmd = NEG ZSTEP) 902 neg word [zstep] 903 sInegateTurn: 904 and ax, 0F8h 905 add ax, ax 906 ;mov [esi+10], ax ; scriptanz 907 mov [scriptanz], ax 908 ;inc word [esi+8] ; scriptptr 909 inc word [scriptptr] 910 sIwaitTimer: 911 ;mov al, [esi+12] ; scriptins 912 mov al, [scriptins] 913 cbw 914 sub ch, ch ; 23/01/2017 915 dec ax 916 jnz short sInoturn 917 ; (cmd = NEG ZSTEP) 918 mov bx, [zstep] 919 ;add [esi+6], bx ; ozw 920 add [ozw], bx 921 jmp short sI_1 ; 23/01/2017 922 sInoturn: 923 mov cl, 3 924 sIrotateLoop: 925 dec ax 926 jnz short sInoIncrement 927 ; (cmd = INC SPEED or INC XSTEP or INC YSTEP) 928 inc word [esi] ; zspeed, oxw, oyw 929 jmp short sI_1 ; 23/01/2017 930 sInoIncrement: 931 dec ax 932 jnz short sInoDecrement 933 ; (cmd = DEC SPEED or DEC XSTEP or DEC YSTEP) 934 dec word [esi] ; zspeed, oxw, oyw 935 jmp short sI_1 ; 23/01/2017 936 sInoDecrement: 937 inc esi 938 inc esi 939 loop sIrotateLoop 940 sI_1: ; 23/01/2017 941 ;mov si, zspeed+2 ; oxw 942 mov si, oxw 943 mov cl, 3 944 xor eax, eax 945 sIpushloop: 946 lodsw ; oxw, oyw, ozw 947 sar ax, 2 948 push eax 949 loop sIpushloop 950 951 imul ax, [si-4], 16 ; [oyw]*16 952 push eax 953 call calcRotMat 954 955 mov cl, 3 956 xor esi, esi 957 sImoveLoop: 958 fld dword [esi+owmat+24] 959 fimul word [zspeed] 960 fidiv word [CONST1792] 961 fadd dword [esi+ob] 962 fstp dword [esi+ob] 963 add si, 4 964 loop sImoveLoop 965 pop ecx 966 dec cx 967 jnz sImloop 968 sItickerNull: 969 %endmacro 970 971 ;*********************************************** 972 ;* descript. : rotate all points from o -> rp * 973 ;* parameter : none * 974 ;* sideeffect: all * 975 ;* back : none * 976 ;*********************************************** 977 %macro rotation 0 978 ;;mov cx, [o+object.panz] 979 ;movzx ecx, word [o+object.panz] ; ?? 980 movzx ecx, word [object.panz] 981 ;mov esi, o+object.p 982 mov esi, object.p 983 mov edi, rp 984 rotmlp: 985 ;mov bx, wmat 986 mov ebx, wmat 987 mov dx, 3 988 rotilp: 989 fild word [esi+0] ; point.x 990 fsub dword [ob+vector.x] 991 fmul dword [ebx+0] 992 fild word [esi+2] ; point.y 993 fsub dword [ob+vector.y] 994 fmul dword [ebx+4] 995 fild word [esi+4] ; point.z 996 fsub dword [ob+vector.z] 997 fmul dword [ebx+8] 998 fadd 999 fadd 1000 ;faddp 1001 ;faddp 1002 fstp dword [edi] 1003 add di, 4 1004 ;add edi, 4 1005 add bx, 12 ; 0Ch 1006 dec dx 1007 jnz short rotilp 1008 add si, 8 ; next point (29/01/2017) 1009 ;add esi, 8 1010 loop rotmlp 1011 %endmacro 1012 1013 ;*********************************************** 1014 ;* descript. : sort faces by z-koord * 1015 ;* parameter : none * 1016 ;* sideeffect: ax,bx,cx,dx,si,di,es * 1017 ;* back : none * 1018 ;*********************************************** 1019 %macro sortFaces 0 1020 mov edi, facei 1021 push edi ; facei 1022 ;mov esi, o+object.f 1023 ;;mov si, o+object.f 1024 mov esi, object.f 1025 mov eax, esi ; pointer to faces 1026 ;;mov cx, [o+object.fanz] 1027 ;movzx ecx, word [o+object.fanz] ; ?? 1028 movzx ecx, word [object.fanz] 1029 1030 xor ebx, ebx ; ? 1031 sFmloop: 1032 fldz 1033 push ecx 1034 mov cx, 4 1035 sFiloop: 1036 imul bx, [esi], 12 ; number of points (of face) 1037 inc esi 1038 inc esi 1039 fsub dword [ebx+rp+vector.z] 1040 loop sFiloop 1041 pop ecx 1042 fistp word [edi] ; z distance (face total) (29/01/2017) 1043 inc edi 1044 inc edi 1045 ;stosw ; face address (in 'o+object.f') 1046 stosw ; face address (in 'object.f') 1047 add ax, 10 1048 inc esi 1049 inc esi 1050 loop sFmloop 1051 ;push edi ; facei+4*(o+object.fanz-1) 1052 push edi ; facei+4*(object.fanz-1) 1053 call qsort 1054 %endmacro 1055 1056 ;*********************************************** 1057 ;* descript. : animate the door * 1058 ;* parameter : none * 1059 ;* sideeffect: ax,cx,si,di,es * 1060 ;* back : none * 1061 ;*********************************************** 1062 %macro animDoor 0 1063 ;mov ax, [doortimer] 1064 movzx eax, word [doortimer] 1065 or ax, ax 1066 jns short aDnounder 1067 xor ax, ax 1068 jmp short alreadydrawed 1069 aDnounder: 1070 cmp byte [once], 0 1071 jne short alreadydrawed 1072 inc byte [once] 1073 push ax 1074 starbackground 1075 pop ax 1076 alreadydrawed: 1077 cmp ax, 24 1078 jle short aDnoover 1079 mov ax, 24 1080 aDnoover: 1081 shl ax, 6 1082 ; 11/02/2017 1083 mov edi, dword [tseg+52] 1084 mov ebp, edi 1085 mov esi, dword [tseg+60] 1086 mov ebx, esi 1087 add si, ax ; 16/01/2017 1088 ;mov cx, 1024 1089 mov ecx, 1024 ; ?? 1090 rep movsw 1091 mov esi, ebx 1092 add si, 2048 ; 16/01/2017 1093 sub si, ax 1094 push si 1095 mov ch, 4 ; cx = 1024 1096 rep movsw 1097 ; 16/01/2017 1098 pop cx 1099 and cx, 4095 ; 0FFFh 1100 mov edi, ebp ; 05/02/2017 1101 add di, cx 1102 ; 1103 mov cx, ax 1104 xor ax, ax 1105 rep stosw 1106 %endmacro 1107 1108 ;*********************************************** 1109 ;* descript. : play a tick of the song * 1110 ;* parameter : none * 1111 ;* sideeffect: ax,bx,cx,dx,si * 1112 ;* back : none * 1113 ;*********************************************** 1114 %macro playsong 0 1115 ;mov cx, [tracks] 1116 movzx ecx, word [tracks] ; ?? 1117 ;mov si, channels 1118 mov esi, channels 1119 PSmloop: 1120 dec word [esi+channel.del] 1121 jg short PSdelayed 1122 mov ax, [esi+channel.trk] 1123 add al, CMD_NOTEOFF ; 80h 1124 call setnote 1125 ;mov bx, [esi+channel.adr] 1126 movzx ebx, word [esi+channel.adr] ; ?? 1127 mov ah, 127 ; 7Fh 1128 cmp byte [ebx], 0 1129 jz short PStrackend 1130 mov ah, [ebx] 1131 mov [esi+channel.ln], ah 1132 mov al, [esi+channel.trk] 1133 add al, CMD_NOTEON ; 90h 1134 call setnote 1135 mov al, [ebx+1] 1136 mov bl, SONGSPEED ; 1Dh 1137 mul bl 1138 PStrackend: 1139 mov [esi+channel.del], ax 1140 add word [esi+channel.adr], 2 1141 PSdelayed: 1142 add si, 6 1143 loop PSmloop 1144 PSnosound: 1145 %endmacro 1146 1147 ;*********************************************** 1148 ;* descript. : dump palette to CRT * 1149 ;* parameter : bl:intensity (0..255) * 1150 ;* sideeffect: ax,es,di,cx,dx * 1151 ;* back : none * 1152 ;*********************************************** 1153 %macro setPalette2 0 1154 xor al, al 1155 mov dx, 3C8h 1156 ;out dx, al 1157 1158 mov ah, 1 ; out (byte) 1159 int 34h ; TRDOS 386 - IOCTL interrupt 1160 1161 inc dx 1162 mov esi, palette 1163 ;mov cx, 768 ; 300h 1164 mov ecx, 768 ; ?? 1165 _sp2loop: 1166 ;rep outsb 1167 1168 lodsb 1169 ;mov ah, 1 ; out (byte) 1170 ;mov dx, 3C9h 1171 ;out dx, al 1172 int 34h ; TRDOS 386 - IOCTL interrupt 1173 loop _sp2loop 1174 %endmacro 1175 1176 ;*********************************************** 1177 ;* descript. : clear starbackground * 1178 ;* parameter : none * 1179 ;* sideeffect: ax,es,di,cx,dx * 1180 ;* back : none * 1181 ;*********************************************** 1182 %macro cls 0 1183 mov edi, dword [bseg] ; 11/02/2017 1184 ; 1185 mov esi, 0A0000h + (320*5) ; 0A0640h 1186 ;mov cx, 32000 ; 7D00h 1187 mov ecx, 32000 ; ?? 1188 clsloop: 1189 lodsb 1190 stosb 1191 stosb 1192 loop clsloop 1193 %endmacro 1194 1195 ;*********************************************** 1196 ;* descript. : draw starbackground * 1197 ;* parameter : none * 1198 ;* sideeffect: ax,es,di,cx,dx * 1199 ;* back : none * 1200 ;*********************************************** 1201 %macro starbackground 0 1202 mov edi, dword [bseg] ; 11/02/2017 1203 ; 1204 mov ebp, edi 1205 ;mov cx, 100 ; 64h 1206 mov ecx, 100 ; ?? 1207 starbackloop: 1208 push cx 1209 ;mov bx, 320*155 ; 0C1C0h 1210 mov ebx, 320*155 ; ?? 1211 call rnd 1212 add ax, 320*20 ; 1900h 1213 ; 05/02/2017 1214 movzx edi, ax 1215 add edi, ebp 1216 and ah, 7 1217 ;mov dx, 320-5 ; 13Bh 1218 mov edx, 320-5 ; ?? 1219 mov cx, 2 1220 call setstarbob 1221 pop cx 1222 loop starbackloop 1223 %endmacro 1224 1225 ;*********************************************** 1226 ;* descript. : create identity matrix * 1227 ;* parameter : ds:di address * 1228 ;* sideeffect: cx,di * 1229 ;* back : none * 1230 ;*********************************************** 1231 %macro identityMat 0 1232 mov ch, 2 1233 iMolp: 1234 mov cl, 2 1235 iMilp: 1236 fldz 1237 cmp ch, cl 1238 jne short iMwritezero 1239 fstp st0 1240 fld1 1241 iMwritezero: 1242 fstp dword [edi] 1243 add di, 4 1244 dec cl 1245 jns short iMilp 1246 dec ch 1247 jns short iMolp 1248 %endmacro 1249 1250 ;============================================================================= 1251 ; entry point 1252 ;============================================================================= 1253 ;*********************************************** 1254 ;* descript. : entry point * 1255 ;* parameter : none * 1256 ;* sideeffect: all * 1257 ;* back : none * 1258 ;*********************************************** 1259 1260 [BITS 32] ; 80386 Protected Mode (32 bit) intructions 1261 1262 [ORG 0] 1263 1264 start: 1265 ; DIRECT VGA MEMORY ACCESS 1266 ;xor ebx, ebx 1267 00000000 B705 mov bh, 5 ; Direct access/map to VGA memory (0A0000h) 1268 ;mov eax, _video ; 1Fh 1269 00000002 66B81F00 mov ax, 1Fh ; sys _video ; TRDOS 386 Video functions 1270 00000006 CD40 int 40h ; TRDOS 386 system call 1271 1272 ; eax = 0A0000h 1273 00000008 21C0 and eax, eax 1274 0000000A 0F8484050000 jz terminate ; error (eax = 0) 1275 1276 ; clear bss (18/12/2016) 1277 ;mov edi, bss_start ; ?? 1278 00000010 66BF[1C15] mov di, bss_start 1279 00000014 66B9742F mov cx, (bss_end - bss_start)/4 1280 ;mov ecx, (bss_end - bss_start)/4 1281 00000018 31C0 xor eax, eax 1282 0000001A F3AB rep stosd 1283 1284 ; 11/02/2017 1285 ;mov edi, vseg ; ?? 1286 0000001C 66BF[9E35] mov di, vseg 1287 00000020 B800000100 mov eax, 10000h 1288 00000025 AB stosd ; virtual screen address 1289 00000026 0500000100 add eax, 10000h 1290 0000002B AB stosd ; star background address 1291 0000002C 0500000100 add eax, 10000h 1292 00000031 66B91400 mov cx, 20 1293 segloop: ; texture addresses 1294 00000035 AB stosd 1295 00000036 0500100000 add eax, 1000h 1296 0000003B E2F8 loop segloop 1297 1298 ; 22/01/2017 1299 ;fninit 1300 1301 ;nullData 1302 ;resetGM 1303 ;expandSong 1304 1305 0000003D E8580E0000 call createWorld 1306 1307 set320x200 1307 00000042 66B81300 <1> mov ax, 13h 1307 <1> 1307 <1> 1307 00000046 CD31 <1> int 31h 1308 1309 00000048 86E0 xchg ah, al ; ah = write string = 13h, 1310 ; al = write mode = 0 1311 0000004A 66BB1C00 mov bx, 1Ch 1312 0000004E BD[90140000] mov ebp, omniscent 1313 00000053 66B90900 mov cx, omniend-omniscent ; 9 1314 00000057 66BA0601 mov dx, 106h 1315 ;int 10h ; - VIDEO - WRITE STRING (AT,XT286,PS,EGA,VGA) 1316 ; AL = mode, BL = attribute if AL bit 1 clear, BH = display page number 1317 ; DH,DL = row,column of starting cursor position, CX = length of string 1318 ; ES:BP -> start of string 1319 0000005B CD31 int 31h ; TRDOS 386 - Video interrupt 1320 1321 0000005D 6601CD add bp, cx 1322 00000060 B110 mov cl, sancend-sanction ; 11h 1323 00000062 66BA010C mov dx, 0C01h 1324 ;int 10h ; - VIDEO - WRITE STRING (AT,XT286,PS,EGA,VGA) 1325 ; AL = mode, BL = attribute if AL bit 1 clear, BH = display page number 1326 ; DH,DL = row,column of starting cursor position, CX = length of string 1327 ; ES:BP -> start of string 1328 00000066 CD31 int 31h ; TRDOS 386 - Video interrupt 1329 1330 makePalette 1330 <1> 1330 00000068 BB03000000 <1> mov ebx, 3 1330 <1> mPcolor: 1330 <1> 1330 0000006D BE[54100000] <1> mov esi, colors 1330 00000072 BF[76150000] <1> mov edi, palette 1330 00000077 30F6 <1> xor dh, dh 1330 00000079 AC <1> lodsb 1330 <1> 1330 0000007A 0FB6C8 <1> movzx ecx, al 1330 <1> mPouter: 1330 0000007D 51 <1> push ecx 1330 0000007E 8A0E <1> mov cl, [esi] 1330 00000080 8A2433 <1> mov ah, [ebx+esi] 1330 00000083 6629D0 <1> sub ax, dx 1330 00000086 52 <1> push edx 1330 00000087 6699 <1> cwd 1330 00000089 66F7F9 <1> idiv cx 1330 0000008C 5A <1> pop edx 1330 <1> mPinner: 1330 0000008D 6601C2 <1> add dx, ax 1330 00000090 88741FFF <1> mov [edi+ebx-1], dh 1330 00000094 6683C703 <1> add di, 3 1330 00000098 E2F3 <1> loop mPinner 1330 0000009A 6683C604 <1> add si, 4 1330 0000009E 59 <1> pop ecx 1330 0000009F E2DC <1> loop mPouter 1330 000000A1 664B <1> dec bx 1330 000000A3 75C8 <1> jnz short mPcolor 1331 1332 initTextures 1332 <1> 1332 000000A5 BB44000000 <1> mov ebx, 68 1332 000000AA 6820030000 <1> push 800 1332 000000AF 6A05 <1> push 5 1332 000000B1 E8F7050000 <1> call createFrac1 1332 <1> 1332 000000B6 BB40000000 <1> mov ebx, 64 1332 000000BB 6A70 <1> push 112 1332 000000BD 6A0F <1> push 15 1332 000000BF E8E9050000 <1> call createFrac1 1332 <1> createFrac2 1332 000000C4 8B3D[EE350000] <2> mov edi, dword [tseg+72] 1332 000000CA 89FB <2> mov ebx, edi 1332 000000CC B014 <2> mov al, 20 1332 000000CE E8D2050000 <2> call setFrac 1332 000000D3 89DF <2> mov edi, ebx 1332 000000D5 6683C740 <2> add di, 64 1332 <2> 1332 000000D9 B9C00F0000 <2> mov ecx, 4096-64 1332 000000DE BB04000000 <2> mov ebx, 4 1332 <2> cF1loop: 1332 <2> 1332 000000E3 E88F050000 <2> call rnd 1332 000000E8 0247C0 <2> add al, [edi-64] 1332 000000EB 0247C1 <2> add al, [edi-63] 1332 000000EE 6648 <2> dec ax 1332 000000F0 66D1E8 <2> shr ax, 1 1332 000000F3 AA <2> stosb 1332 000000F4 E2ED <2> loop cF1loop 1332 <1> createFrac3 1332 000000F6 8B3D[F2350000] <2> mov edi, dword [tseg+76] 1332 000000FC 893D[D8D00000] <2> mov dword [es_], edi 1332 00000102 B003 <2> mov al, 3 1332 00000104 E89C050000 <2> call setFrac 1332 <2> 1332 00000109 B900100000 <2> mov ecx, 4096 1332 0000010E 89CB <2> mov ebx, ecx 1332 <2> cF3loop: 1332 <2> 1332 00000110 E862050000 <2> call rnd 1332 00000115 8B3D[D8D00000] <2> mov edi, dword [es_] 1332 0000011B 6601C7 <2> add di, ax 1332 0000011E FE07 <2> inc byte [edi] 1332 00000120 E2EE <2> loop cF3loop 1332 <1> initStars 1332 <2> 1332 00000122 B91E000000 <2> mov ecx, 30 1332 00000127 BF[42350000] <2> mov edi, stars 1332 0000012C 31DB <2> xor ebx, ebx 1332 <2> iSloop: 1332 0000012E 66BB0001 <2> mov bx, 256 1332 00000132 E840050000 <2> call rnd 1332 00000137 AA <2> stosb 1332 00000138 66BBC00E <2> mov bx, 4096-(64*5) 1332 0000013C 6681C38000 <2> add bx, 128 1332 00000141 E831050000 <2> call rnd 1332 00000146 6683C040 <2> add ax, 64 1332 0000014A 66AB <2> stosw 1332 0000014C E2E0 <2> loop iSloop 1332 <1> reactorWall 1332 0000014E 8B3D[A6350000] <2> mov edi, dword [tseg] 1332 00000154 66B90010 <2> mov cx, 4096 1332 <2> rsmloop: 1332 00000158 6689F8 <2> mov ax, di 1332 <2> 1332 0000015B A808 <2> test al, 8 1332 0000015D 7E02 <2> jle short rsnonot1 1332 0000015F F6D0 <2> not al 1332 <2> rsnonot1: 1332 00000161 240F <2> and al, 15 1332 00000163 6689C3 <2> mov bx, ax 1332 00000166 6689F8 <2> mov ax, di 1332 00000169 6625FF0F <2> and ax, 0FFFh 1332 0000016D 66C1E806 <2> shr ax, 6 1332 00000171 A808 <2> test al, 8 1332 00000173 7E02 <2> jle short rsnonot2 1332 00000175 F6D0 <2> not al 1332 <2> rsnonot2: 1332 00000177 240F <2> and al, 15 1332 00000179 38D8 <2> cmp al, bl 1332 0000017B 7E03 <2> jle short rstakeal 1332 0000017D 6689D8 <2> mov ax, bx 1332 <2> rstakeal: 1332 00000180 04E0 <2> add al, 224 1332 00000182 AA <2> stosb 1332 00000183 E2D3 <2> loop rsmloop 1332 <1> addFractals 1332 00000185 BE[31110000] <2> mov esi, aF 1332 <2> 1332 0000018A B208 <2> mov dl, 8 1332 0000018C 31DB <2> xor ebx, ebx 1332 <2> aFloop: 1332 0000018E 88D3 <2> mov bl, dl 1332 <2> 1332 00000190 8BBB[A6350000] <2> mov edi, dword [ebx+tseg] 1332 00000196 66AD <2> lodsw 1332 00000198 88C3 <2> mov bl, al 1332 0000019A D0E3 <2> shl bl, 1 1332 <2> 1332 0000019C 8BAB[A6350000] <2> mov ebp, dword [ebx+tseg] 1332 <2> 1332 <2> 1332 000001A2 B900100000 <2> mov ecx, 4096 1332 <2> aFiloop: 1332 000001A7 8A4500 <2> mov al, [ebp] 1332 000001AA 00E0 <2> add al, ah 1332 000001AC AA <2> stosb 1332 000001AD 45 <2> inc ebp 1332 000001AE E2F7 <2> loop aFiloop 1332 <2> 1332 000001B0 80C204 <2> add dl, 4 1332 000001B3 80FA3C <2> cmp dl, 60 1332 000001B6 7ED6 <2> jle short aFloop 1332 <1> effects 1332 <2> 1332 <2> 1332 000001B8 B91A000000 <2> mov ecx, 26 1332 000001BD BE[95100000] <2> mov esi, aE 1332 <2> 1332 000001C2 31DB <2> xor ebx, ebx 1332 000001C4 31FF <2> xor edi, edi 1332 <2> effmloop: 1332 000001C6 6651 <2> push cx 1332 000001C8 8A1E <2> mov bl, byte [esi] 1332 000001CA 88DA <2> mov dl, bl 1332 000001CC C0EA04 <2> shr dl, 4 1332 000001CF 80E30F <2> and bl, 0Fh 1332 <2> 1332 000001D2 C0E302 <2> shl bl, 2 1332 000001D5 8BAB[A6350000] <2> mov ebp, dword [ebx+tseg] 1332 <2> 1332 000001DB 660FB64E02 <2> movzx cx, byte [esi+2] 1332 <2> effyloop: 1332 000001E0 660FB65E01 <2> movzx bx, byte [esi+1] 1332 <2> effxloop: 1332 000001E5 6689CF <2> mov di, cx 1332 000001E8 66C1E706 <2> shl di, 6 1332 000001EC 6601DF <2> add di, bx 1332 000001EF 88D0 <2> mov al, dl 1332 000001F1 FEC8 <2> dec al 1332 000001F3 7416 <2> jz short effect1 1332 000001F5 FEC8 <2> dec al 1332 000001F7 740E <2> jz short effect2 1332 000001F9 6689D8 <2> mov ax, bx 1332 000001FC 6601C8 <2> add ax, cx 1332 000001FF 2404 <2> and al, 4 1332 <2> 1332 00000201 7408 <2> jz short effect1 1332 00000203 B098 <2> mov al, 152 1332 <2> effdonot: 1332 00000205 EB04 <2> jmp short effect1 1332 <2> effect2: 1332 00000207 8A443D00 <2> mov al, byte [ebp+edi] 1332 <2> effect1: 1332 0000020B 024605 <2> add al, byte [esi+5] 1332 0000020E 88443D00 <2> mov byte [ebp+edi], al 1332 00000212 FEC3 <2> inc bl 1332 00000214 3A5E03 <2> cmp bl, byte [esi+3] 1332 00000217 7ECC <2> jle short effxloop 1332 00000219 6641 <2> inc cx 1332 0000021B 3A4E04 <2> cmp cl, byte [esi+4] 1332 0000021E 7EC0 <2> jle short effyloop 1332 00000220 6683C606 <2> add si, 6 1332 00000224 6659 <2> pop cx 1332 00000226 E29E <2> loop effmloop 1332 <1> addLava 1332 00000228 8B2D[D2350000] <2> mov ebp, dword [tseg+44] 1332 <2> 1332 0000022E BFFF0F0000 <2> mov edi, 4095 1332 <2> 1332 00000233 B914000000 <2> mov ecx, 20 1332 00000238 B05E <2> mov al, 94 1332 <2> aLyloop: 1332 0000023A 51 <2> push ecx 1332 0000023B 66C1E103 <2> shl cx, 3 1332 <2> aLxloop: 1332 0000023F 57 <2> push edi 1332 00000240 50 <2> push eax 1332 <2> 1332 00000241 BB40000000 <2> mov ebx, 64 1332 00000246 E82C040000 <2> call rnd 1332 0000024B 6629C7 <2> sub di, ax 1332 0000024E 58 <2> pop eax 1332 0000024F 88443D00 <2> mov [ebp+edi], al 1332 00000253 5F <2> pop edi 1332 00000254 E2E9 <2> loop aLxloop 1332 00000256 59 <2> pop ecx 1332 00000257 FEC8 <2> dec al 1332 00000259 6683EF40 <2> sub di, 64 1332 0000025D E2DB <2> loop aLyloop 1333 1334 calcShadeTab 1334 0000025F BF[F6350000] <1> mov edi, shadetab 1334 00000264 30DB <1> xor bl, bl 1334 <1> cSolp: 1334 00000266 FEC3 <1> inc bl 1334 <1> 1334 00000268 31C9 <1> xor ecx, ecx 1334 <1> cSilp1: 1334 0000026A 88C8 <1> mov al, cl 1334 0000026C 241F <1> and al, 31 1334 0000026E F6E3 <1> mul bl 1334 00000270 6601C0 <1> add ax, ax 1334 00000273 88C8 <1> mov al, cl 1334 00000275 24E0 <1> and al, 224 1334 00000277 00E0 <1> add al, ah 1334 00000279 AA <1> stosb 1334 0000027A FEC1 <1> inc cl 1334 0000027C 80F9C0 <1> cmp cl, 192 1334 0000027F 75E9 <1> jne short cSilp1 1334 <1> cSilp2: 1334 00000281 88C8 <1> mov al, cl 1334 00000283 AA <1> stosb 1334 00000284 FEC1 <1> inc cl 1334 00000286 75F9 <1> jnz short cSilp2 1334 00000288 80FB80 <1> cmp bl, 128 1334 0000028B 75D9 <1> jne short cSolp 1335 1336 0000028D 8925[FA340000] mov dword [oldstack], esp 1337 1338 startTimer 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 <1> 1338 00000293 B3FF <1> mov bl, 0FFh 1338 00000295 B704 <1> mov bh, 4 1338 00000297 B901000000 <1> mov ecx, 1 1338 <1> 1338 0000029C BA[9B050000] <1> mov edx, timer_event 1338 000002A1 B821000000 <1> mov eax, 33 1338 000002A6 CD40 <1> int 40h 1338 000002A8 0F82CB020000 <1> jc loc_err_exit 1338 000002AE A2[9D350000] <1> mov [timer_event_number], al 1338 <1> 1339 startKBDHandler 1339 <1> 1339 <1> 1339 <1> 1339 <1> 1339 <1> 1339 <1> 1339 <1> 1339 <1> 1339 <1> 1339 <1> 1339 <1> 1339 <1> 1339 000002B3 90 <1> nop 1340 cls 1340 000002B4 8B3D[A2350000] <1> mov edi, dword [bseg] 1340 <1> 1340 000002BA BE40060A00 <1> mov esi, 0A0000h + (320*5) 1340 <1> 1340 000002BF B9007D0000 <1> mov ecx, 32000 1340 <1> clsloop: 1340 000002C4 AC <1> lodsb 1340 000002C5 AA <1> stosb 1340 000002C6 AA <1> stosb 1340 000002C7 E2FB <1> loop clsloop 1341 mainloop: 1342 000002C9 803D[9B050000]FF cmp byte [timer_event], 0FFh 1343 000002D0 740E je short _1 1344 000002D2 90 nop 1345 000002D3 B401 mov ah, 1 ; Check keyboard buffer 1346 000002D5 CD32 int 32h ; TRDOS 386 Keyboard interrupt 1347 000002D7 0F859C020000 jnz _exit_ ; exit 1348 000002DD 90 nop 1349 000002DE EBE9 jmp short mainloop 1350 _1: 1351 000002E0 E8B7020000 call timer_callback 1352 _2: 1353 setPalette2 1353 000002E5 30C0 <1> xor al, al 1353 000002E7 66BAC803 <1> mov dx, 3C8h 1353 <1> 1353 <1> 1353 000002EB B401 <1> mov ah, 1 1353 000002ED CD34 <1> int 34h 1353 <1> 1353 000002EF 6642 <1> inc dx 1353 000002F1 BE[76150000] <1> mov esi, palette 1353 <1> 1353 000002F6 B900030000 <1> mov ecx, 768 1353 <1> _sp2loop: 1353 <1> 1353 <1> 1353 000002FB AC <1> lodsb 1353 <1> 1353 <1> 1353 <1> 1353 000002FC CD34 <1> int 34h 1353 000002FE E2FB <1> loop _sp2loop 1354 1355 scriptIt 1355 <1> 1355 <1> 1355 00000300 0FB70D[72150000] <1> movzx ecx, word [ticker] 1355 00000307 66C705[72150000]00- <1> mov word [ticker], 0 1355 0000030F 00 <1> 1355 00000310 6609C9 <1> or cx, cx 1355 00000313 0F84D2000000 <1> jz sItickerNull 1355 <1> sImloop: 1355 00000319 51 <1> push ecx 1355 0000031A BE[64150000] <1> mov esi, zspeed 1355 <1> 1355 <1> 1355 0000031F 66FF0D[6E150000] <1> dec word [scriptanz] 1355 00000326 7940 <1> jns short sIwaitTimer 1355 <1> 1355 <1> 1355 00000328 0FB71D[6C150000] <1> movzx ebx, word [scriptptr] 1355 0000032F 8A83[0F140000] <1> mov al, [ebx+script] 1355 00000335 08C0 <1> or al, al 1355 00000337 0F843C020000 <1> jz _exit_ 1355 0000033D 6689C3 <1> mov bx, ax 1355 00000340 80E307 <1> and bl, 7 1355 <1> 1355 00000343 881D[70150000] <1> mov [scriptins], bl 1355 00000349 FECB <1> dec bl 1355 0000034B 7507 <1> jnz short sInegateTurn 1355 <1> 1355 0000034D 66F71D[8C140000] <1> neg word [zstep] 1355 <1> sInegateTurn: 1355 00000354 6625F800 <1> and ax, 0F8h 1355 00000358 6601C0 <1> add ax, ax 1355 <1> 1355 0000035B 66A3[6E150000] <1> mov [scriptanz], ax 1355 <1> 1355 00000361 66FF05[6C150000] <1> inc word [scriptptr] 1355 <1> sIwaitTimer: 1355 <1> 1355 00000368 A0[70150000] <1> mov al, [scriptins] 1355 0000036D 6698 <1> cbw 1355 0000036F 28ED <1> sub ch, ch 1355 00000371 6648 <1> dec ax 1355 00000373 7510 <1> jnz short sInoturn 1355 <1> 1355 00000375 668B1D[8C140000] <1> mov bx, [zstep] 1355 <1> 1355 0000037C 66011D[6A150000] <1> add [ozw], bx 1355 00000383 EB18 <1> jmp short sI_1 1355 <1> sInoturn: 1355 00000385 B103 <1> mov cl, 3 1355 <1> sIrotateLoop: 1355 00000387 6648 <1> dec ax 1355 00000389 7505 <1> jnz short sInoIncrement 1355 <1> 1355 0000038B 66FF06 <1> inc word [esi] 1355 0000038E EB0D <1> jmp short sI_1 1355 <1> sInoIncrement: 1355 00000390 6648 <1> dec ax 1355 00000392 7505 <1> jnz short sInoDecrement 1355 <1> 1355 00000394 66FF0E <1> dec word [esi] 1355 00000397 EB04 <1> jmp short sI_1 1355 <1> sInoDecrement: 1355 00000399 46 <1> inc esi 1355 0000039A 46 <1> inc esi 1355 0000039B E2EA <1> loop sIrotateLoop 1355 <1> sI_1: 1355 <1> 1355 0000039D 66BE[6615] <1> mov si, oxw 1355 000003A1 B103 <1> mov cl, 3 1355 000003A3 31C0 <1> xor eax, eax 1355 <1> sIpushloop: 1355 000003A5 66AD <1> lodsw 1355 000003A7 66C1F802 <1> sar ax, 2 1355 000003AB 50 <1> push eax 1355 000003AC E2F7 <1> loop sIpushloop 1355 <1> 1355 000003AE 66676B44FC10 <1> imul ax, [si-4], 16 1355 000003B4 50 <1> push eax 1355 000003B5 E83B0A0000 <1> call calcRotMat 1355 <1> 1355 000003BA B103 <1> mov cl, 3 1355 000003BC 31F6 <1> xor esi, esi 1355 <1> sImoveLoop: 1355 000003BE D986[CD140000] <1> fld dword [esi+owmat+24] 1355 000003C4 DE0D[64150000] <1> fimul word [zspeed] 1355 000003CA DE35[46100000] <1> fidiv word [CONST1792] 1355 000003D0 D886[A9140000] <1> fadd dword [esi+ob] 1355 000003D6 D99E[A9140000] <1> fstp dword [esi+ob] 1355 000003DC 6683C604 <1> add si, 4 1355 000003E0 E2DC <1> loop sImoveLoop 1355 000003E2 59 <1> pop ecx 1355 000003E3 6649 <1> dec cx 1355 000003E5 0F852EFFFFFF <1> jnz sImloop 1355 <1> sItickerNull: 1356 1357 animDoor 1357 <1> 1357 000003EB 0FB705[8E140000] <1> movzx eax, word [doortimer] 1357 000003F2 6609C0 <1> or ax, ax 1357 000003F5 7905 <1> jns short aDnounder 1357 000003F7 6631C0 <1> xor ax, ax 1357 000003FA EB4A <1> jmp short alreadydrawed 1357 <1> aDnounder: 1357 000003FC 803D[71150000]00 <1> cmp byte [once], 0 1357 00000403 7541 <1> jne short alreadydrawed 1357 00000405 FE05[71150000] <1> inc byte [once] 1357 0000040B 6650 <1> push ax 1357 <1> starbackground 1357 0000040D 8B3D[A2350000] <2> mov edi, dword [bseg] 1357 <2> 1357 00000413 89FD <2> mov ebp, edi 1357 <2> 1357 00000415 B964000000 <2> mov ecx, 100 1357 <2> starbackloop: 1357 0000041A 6651 <2> push cx 1357 <2> 1357 0000041C BBC0C10000 <2> mov ebx, 320*155 1357 00000421 E851020000 <2> call rnd 1357 00000426 66050019 <2> add ax, 320*20 1357 <2> 1357 0000042A 0FB7F8 <2> movzx edi, ax 1357 0000042D 01EF <2> add edi, ebp 1357 0000042F 80E407 <2> and ah, 7 1357 <2> 1357 00000432 BA3B010000 <2> mov edx, 320-5 1357 00000437 66B90200 <2> mov cx, 2 1357 0000043B E8CC010000 <2> call setstarbob 1357 00000440 6659 <2> pop cx 1357 00000442 E2D6 <2> loop starbackloop 1357 00000444 6658 <1> pop ax 1357 <1> alreadydrawed: 1357 00000446 6683F818 <1> cmp ax, 24 1357 0000044A 7E04 <1> jle short aDnoover 1357 0000044C 66B81800 <1> mov ax, 24 1357 <1> aDnoover: 1357 00000450 66C1E006 <1> shl ax, 6 1357 <1> 1357 00000454 8B3D[DA350000] <1> mov edi, dword [tseg+52] 1357 0000045A 89FD <1> mov ebp, edi 1357 0000045C 8B35[E2350000] <1> mov esi, dword [tseg+60] 1357 00000462 89F3 <1> mov ebx, esi 1357 00000464 6601C6 <1> add si, ax 1357 <1> 1357 00000467 B900040000 <1> mov ecx, 1024 1357 0000046C F366A5 <1> rep movsw 1357 0000046F 89DE <1> mov esi, ebx 1357 00000471 6681C60008 <1> add si, 2048 1357 00000476 6629C6 <1> sub si, ax 1357 00000479 6656 <1> push si 1357 0000047B B504 <1> mov ch, 4 1357 0000047D F366A5 <1> rep movsw 1357 <1> 1357 00000480 6659 <1> pop cx 1357 00000482 6681E1FF0F <1> and cx, 4095 1357 00000487 89EF <1> mov edi, ebp 1357 00000489 6601CF <1> add di, cx 1357 <1> 1357 0000048C 6689C1 <1> mov cx, ax 1357 0000048F 6631C0 <1> xor ax, ax 1357 00000492 F366AB <1> rep stosw 1358 1359 ; 11/02/2017 1360 00000495 8B3D[9E350000] mov edi, dword [vseg] 1361 0000049B 8B35[A2350000] mov esi, dword [bseg] 1362 000004A1 E886010000 call copyseg 1363 1364 rotation 1364 <1> 1364 <1> 1364 000004A6 0FB70D[D6180000] <1> movzx ecx, word [object.panz] 1364 <1> 1364 000004AD BE[DA180000] <1> mov esi, object.p 1364 000004B2 BF[D6B70000] <1> mov edi, rp 1364 <1> rotmlp: 1364 <1> 1364 000004B7 BB[1C150000] <1> mov ebx, wmat 1364 000004BC 66BA0300 <1> mov dx, 3 1364 <1> rotilp: 1364 000004C0 DF06 <1> fild word [esi+0] 1364 000004C2 D825[A9140000] <1> fsub dword [ob+vector.x] 1364 000004C8 D80B <1> fmul dword [ebx+0] 1364 000004CA DF4602 <1> fild word [esi+2] 1364 000004CD D825[AD140000] <1> fsub dword [ob+vector.y] 1364 000004D3 D84B04 <1> fmul dword [ebx+4] 1364 000004D6 DF4604 <1> fild word [esi+4] 1364 000004D9 D825[B1140000] <1> fsub dword [ob+vector.z] 1364 000004DF D84B08 <1> fmul dword [ebx+8] 1364 000004E2 DEC1 <1> fadd 1364 000004E4 DEC1 <1> fadd 1364 <1> 1364 <1> 1364 000004E6 D91F <1> fstp dword [edi] 1364 000004E8 6683C704 <1> add di, 4 1364 <1> 1364 000004EC 6683C30C <1> add bx, 12 1364 000004F0 664A <1> dec dx 1364 000004F2 75CC <1> jnz short rotilp 1364 000004F4 6683C608 <1> add si, 8 1364 <1> 1364 000004F8 E2BD <1> loop rotmlp 1365 sortFaces 1365 000004FA BF[96CA0000] <1> mov edi, facei 1365 000004FF 57 <1> push edi 1365 <1> 1365 <1> 1365 00000500 BE[5A250000] <1> mov esi, object.f 1365 00000505 89F0 <1> mov eax, esi 1365 <1> 1365 <1> 1365 00000507 0FB70D[D8180000] <1> movzx ecx, word [object.fanz] 1365 <1> 1365 0000050E 31DB <1> xor ebx, ebx 1365 <1> sFmloop: 1365 00000510 D9EE <1> fldz 1365 00000512 51 <1> push ecx 1365 00000513 66B90400 <1> mov cx, 4 1365 <1> sFiloop: 1365 00000517 666B1E0C <1> imul bx, [esi], 12 1365 0000051B 46 <1> inc esi 1365 0000051C 46 <1> inc esi 1365 0000051D D8A3[DEB70000] <1> fsub dword [ebx+rp+vector.z] 1365 00000523 E2F2 <1> loop sFiloop 1365 00000525 59 <1> pop ecx 1365 00000526 DF1F <1> fistp word [edi] 1365 00000528 47 <1> inc edi 1365 00000529 47 <1> inc edi 1365 <1> 1365 0000052A 66AB <1> stosw 1365 0000052C 6683C00A <1> add ax, 10 1365 00000530 46 <1> inc esi 1365 00000531 46 <1> inc esi 1365 00000532 E2DC <1> loop sFmloop 1365 <1> 1365 00000534 57 <1> push edi 1365 00000535 E8FA000000 <1> call qsort 1366 1367 0000053A EB1D jmp short xyz 1368 1369 0000053C 31C0 xor eax, eax 1370 ;movzx ecx, word [o+object.fanz] 1371 0000053E 0FB70D[D8180000] movzx ecx, word [object.fanz] 1372 1373 00000545 BE[96CA0000] mov esi, facei 1374 drawloop: 1375 0000054A 66AD lodsw 1376 0000054C 66AD lodsw 1377 ;mov ebx, eax ; face address in 'o+object.f' 1378 0000054E 89C3 mov ebx, eax ; face address in 'object.f' 1379 00000550 60 pushad 1380 00000551 E816060000 call drawclippedface 1381 00000556 61 popad 1382 00000557 E2F1 loop drawloop 1383 1384 xyz: 1385 00000559 8B35[9E350000] mov esi, dword [vseg] ; 11/02/2017 1386 1387 0000055F 8B35[A6350000] mov esi, dword [tseg] 1388 1389 00000565 BF00000A00 mov edi, 0A0000h 1390 0000056A E8BD000000 call copyseg 1391 1392 0000056F B401 mov ah, 1 ; Check keyboard buffer 1393 00000571 CD32 int 32h ; TRDOS 386 Keyboard interrupt 1394 ;jnz _exit_ ; exit 1395 ;jmp mainloop 1396 00000573 0F8450FDFFFF jz mainloop ; 11/02/2017 1397 1398 loc_err_exit: 1399 _exit_: 1400 00000579 8B25[FA340000] mov esp, dword [oldstack] 1401 ;silence 1402 stopKBDHandler 1402 <1> 1402 <1> 1402 <1> 1402 <1> 1402 <1> 1402 <1> 1402 <1> 1402 <1> 1402 <1> 1402 <1> 1402 0000057F 90 <1> nop 1403 stopTimer 1403 <1> 1403 <1> 1403 <1> 1403 <1> 1403 <1> 1403 <1> 1403 <1> 1403 <1> 1403 <1> 1403 <1> 1403 <1> 1403 <1> 1403 00000580 0FB61D[9D350000] <1> movzx ebx, byte [timer_event_number] 1403 <1> 1403 <1> 1403 <1> 1403 00000587 B821000000 <1> mov eax, 33 1403 0000058C CD40 <1> int 40h 1403 <1> 1404 ;restore_text_mode: 1405 set80x25 1405 0000058E 66B80300 <1> mov ax, 3 1405 <1> 1405 <1> 1405 00000592 CD31 <1> int 31h 1406 terminate: 1407 sys _exit ; INT 40h 1407 <1> 1407 <1> 1407 <1> 1407 <1> 1407 <1> %if %0 >= 2 1407 <1> mov ebx, %2 1407 <1> %if %0 >= 3 1407 <1> mov ecx, %3 1407 <1> %if %0 = 4 1407 <1> mov edx, %4 1407 <1> %endif 1407 <1> %endif 1407 <1> %endif 1407 00000594 B801000000 <1> mov eax, %1 1407 <1> 1407 00000599 CD40 <1> int 40h 1408 ;here: 1409 ; jmp short here 1410 1411 ;============================================================================== 1412 ; interrupt handler 1413 ;============================================================================== 1414 ;*********************************************** 1415 ;* descript. : timer routine * 1416 ;* parameter : none * 1417 ;* sideeffect: none * 1418 ;* back : none * 1419 ;*********************************************** 1420 1421 timer_event: 1422 0000059B 00 db 0 1423 1424 timer_callback: 1425 ;playsong 1426 1427 0000059C 66FF05[72150000] inc word [ticker] 1428 000005A3 FE05[9C350000] inc byte [twice] 1429 ;and byte [twice], 7 1430 ;jnz short tr_1 1431 1432 colorCycle 1432 <1> base equ 6*32 1432 <1> range equ 32 1432 <1> 1432 000005A9 BF[B6170000] <1> mov edi, palette+(base*3) 1432 000005AE 89FE <1> mov esi, edi 1432 000005B0 66AD <1> lodsw 1432 <1> 1432 000005B2 46 <1> inc esi 1432 <1> 1432 000005B3 B95D000000 <1> mov ecx, (range*3-3) 1432 000005B8 F3A4 <1> rep movsb 1432 000005BA 66AB <1> stosw 1432 <1> 1433 animStars 1433 <1> _base equ 7*32 1433 <1> 1433 000005BC 8B3D[AA350000] <1> mov edi, dword [tseg+4] 1433 000005C2 89FD <1> mov ebp, edi 1433 000005C4 E8DA000000 <1> call clearFrac 1433 <1> 1433 <1> 1433 <1> 1433 000005C9 B91E000000 <1> mov ecx, 30 1433 000005CE BB[42350000] <1> mov ebx, stars 1433 <1> 1433 <1> aSoloop: 1433 000005D3 FE0B <1> dec byte [ebx] 1433 000005D5 8A23 <1> mov ah, [ebx] 1433 000005D7 80E43F <1> and ah, 63 1433 000005DA 80FC1F <1> cmp ah, 31 1433 000005DD 7605 <1> jbe short aSnonot 1433 000005DF F6D4 <1> not ah 1433 000005E1 80E41F <1> and ah, 31 1433 <1> aSnonot: 1433 000005E4 D0EC <1> shr ah, 1 1433 <1> 1433 000005E6 0FB77B01 <1> movzx edi, word [ebx+1] 1433 000005EA 01EF <1> add edi, ebp 1433 <1> 1433 000005EC 51 <1> push ecx 1433 000005ED 53 <1> push ebx 1433 <1> 1433 000005EE BA3B000000 <1> mov edx, 64-5 1433 000005F3 66B900E0 <1> mov cx, _base*256+0 1433 000005F7 E810000000 <1> call setstarbob 1433 <1> 1433 000005FC 5B <1> pop ebx 1433 000005FD 59 <1> pop ecx 1433 000005FE 6683C303 <1> add bx, 3 1433 00000602 E2CF <1> loop aSoloop 1434 1435 00000604 66FF05[8E140000] inc word [doortimer] 1436 tr_1: 1437 0000060B C3 retn 1438 ; mov eax, 39 ; 'sysrele' 1439 ; int 40h ; TRDOS 386 system call 1440 1441 ;============================================================================== 1442 ; sub routines 1443 ;============================================================================== 1444 ;*********************************************** 1445 ;* descript. : draw a the starbob * 1446 ;* parameter : ds,es: source seg,dest seg * 1447 ;* sideeffect: ax,cx,si,di * 1448 ;* back : none * 1449 ;*********************************************** 1450 1451 setstarbob: 1452 0000060C BE[4D110000] mov esi, bob 1453 00000611 B305 mov bl, 5 1454 yloop: 1455 00000613 B705 mov bh, 5 1456 xloop: 1457 00000615 AC lodsb 1458 00000616 28E0 sub al, ah 1459 00000618 7E06 jle short aSnodraw 1460 0000061A 00E8 add al, ch 1461 0000061C D2E0 shl al, cl 1462 0000061E 8807 mov byte [edi], al 1463 aSnodraw: 1464 ;inc di 1465 00000620 47 inc edi 1466 00000621 FECF dec bh 1467 00000623 75F0 jnz short xloop 1468 00000625 01D7 add edi, edx ; 05/02/2017 1469 00000627 FECB dec bl 1470 00000629 75E8 jnz short yloop 1471 0000062B C3 retn 1472 1473 ;*********************************************** 1474 ;* descript. : copy 16000 longs ds --> es * 1475 ;* parameter : ds,es: source seg,dest seg * 1476 ;* sideeffect: ax,cx,si,di * 1477 ;* back : none * 1478 ;*********************************************** 1479 1480 copyseg: 1481 ;mov cx, 16000 ; 3E80h 1482 0000062C B9803E0000 mov ecx, 16000 ; ?? 1483 00000631 F3A5 rep movsd 1484 00000633 C3 retn 1485 1486 ;*********************************************** 1487 ;* descript. : expand a part of the song * 1488 ;* parameter : si:base adress * 1489 ;* sideeffect: si,ax * 1490 ;* back : ax=si:new baseadress * 1491 ;*********************************************** 1492 1493 ;expand: 1494 ;EPwhile: mov cl, byte [esi] 1495 ; or cl, cl 1496 ; jz short EPendwhile 1497 ; jns short EPnote 1498 ;EPcall: 1499 ; push ecx 1500 ; push esi 1501 ; inc esi 1502 ; call expand 1503 ; pop esi 1504 ; pop ecx 1505 ; inc cl 1506 ; jnz short EPcall 1507 ; mov esi, eax 1508 ; jmp short EPwhile 1509 ;EPnote: 1510 ; movsw 1511 ; jmp short EPwhile 1512 ;EPendwhile: 1513 ; inc esi 1514 ; mov eax, esi 1515 ; retn 1516 1517 ;*********************************************** 1518 ;* descript. : recursive index quicksort * 1519 ;* parameter : l,r:stack left and right border * 1520 ;* sideeffect: ax,bx,cx,dx,si,di * 1521 ;* back : none * 1522 ;*********************************************** 1523 1524 qsort: 1525 00000634 58 pop eax ; get address 1526 00000635 59 pop ecx ; get 2. param r 1527 00000636 5B pop ebx ; get 1. param l 1528 00000637 50 push eax ; store address 1529 1530 00000638 39D9 cmp ecx, ebx 1531 ;jle short QSendrek 1532 0000063A 763A jna short QSendrek 1533 0000063C 89DE mov esi, ebx 1534 0000063E 89CF mov edi, ecx 1535 00000640 668B16 mov dx, word [esi] 1536 QSrepeat: 1537 00000643 663916 QSwhile1: cmp word [esi], dx 1538 00000646 7E05 jle short QSwhile2 1539 00000648 83C604 add esi, 4 1540 0000064B EBF6 jmp short QSwhile1 1541 QSwhile2: 1542 0000064D 663917 cmp word [edi], dx 1543 00000650 7D05 jnl short QSwhile2e 1544 00000652 83EF04 sub edi, 4 1545 00000655 EBF6 jmp short QSwhile2 1546 QSwhile2e: 1547 00000657 39FE cmp esi, edi 1548 ;jg short QSnoswap 1549 ;jg short _QSnoswap ; 29/01/2017 1550 00000659 770D ja short _QSnoswap ; 10/02/2017 1551 0000065B AD lodsd 1552 0000065C 8707 xchg eax, dword [edi] 1553 0000065E 8946FC mov dword [esi-4], eax 1554 00000661 83EF04 sub edi, 4 1555 QSnoswap: 1556 00000664 39FE cmp esi, edi 1557 ;jle short QSrepeat 1558 00000666 76DB jna short QSrepeat 1559 _QSnoswap: ; 29/01/2017 1560 00000668 56 push esi 1561 00000669 51 push ecx 1562 0000066A 53 push ebx 1563 0000066B 57 push edi 1564 0000066C E8C3FFFFFF call qsort 1565 00000671 E8BEFFFFFF call qsort 1566 QSendrek: 1567 00000676 C3 retn 1568 1569 ;*********************************************** 1570 ;* descript. : returns a pseudo random number * 1571 ;* parameter : bx=range * 1572 ;* sideeffect: eax,edx,si * 1573 ;* back : ax=rnd(range) * 1574 ;*********************************************** 1575 1576 rnd: 1577 00000677 BE[4C100000] mov esi, randommul 1578 ;mov si, randommul 1579 0000067C AD lodsd 1580 0000067D F726 mul dword [esi] ; randomseed 1581 0000067F 40 inc eax 1582 00000680 8906 mov [esi], eax ; randomseed 1583 00000682 66AD lodsw 1584 00000684 66AD lodsw 1585 00000686 66F7E3 mul bx 1586 00000689 6692 xchg ax, dx 1587 0000068B C3 retn 1588 1589 ;*********************************************** 1590 ;* descript. : set timer speed to 1193180/AX * 1591 ;* interrupts per second * 1592 ;* parameter : bx * 1593 ;* sideeffect: ax * 1594 ;* back : none * 1595 ;*********************************************** 1596 1597 setTimer: ; set timer speed to 1193180/BX (TRDOS 386) 1598 0000068C B036 mov al, 36h 1599 ;out 43h, al ; Timer 8253-5 (AT: 8254.2). 1600 1601 0000068E B401 mov ah, 1 ; out (byte) 1602 00000690 66BA4300 mov dx, 43h 1603 00000694 CD34 int 34h ; TRDOS 386 - IOCTL interrupt 1604 1605 00000696 88D8 mov al, bl 1606 ;out 40h, al ; Timer 8253-5 (AT: 8254.2). 1607 1608 00000698 66BA4000 mov dx, 40h 1609 ;mov ah, 1 ; out (byte) 1610 0000069C CD34 int 34h ; TRDOS 386 - IOCTL interrupt 1611 1612 0000069E 88F8 mov al, bh 1613 ;out 40h, al ; Timer 8253-5 (AT: 8254.2). 1614 1615 ;mov ah, 1 ; out (byte) 1616 ;mov dx, 40h 1617 000006A0 CD34 int 34h ; TRDOS 386 - IOCTL interrupt 1618 1619 000006A2 C3 retn 1620 1621 ;*********************************************** 1622 ;* descript. : send a byte to the GM-Port * 1623 ;* parameter : al:midi command * 1624 ;* sideeffect: dx * 1625 ;* back : none * 1626 ;*********************************************** 1627 1628 ;writeGM: 1629 ; mov dx, GMPort ; 331h 1630 ; push cx 1631 ; push ax 1632 ; xor cl, cl 1633 ;busy: 1634 ; dec cl 1635 ; jz short timeOut 1636 ; ;in al, dx 1637 ; 1638 ; mov ah, 0 ; in (byte) 1639 ; int 34h ; TRDOS 386 - IOCTL interrupt 1640 ; 1641 ; test al, 40h 1642 ; jnz short busy 1643 ; 1644 ;timeOut: ; CODE XREF: writeGM+8j 1645 ; pop ax 1646 ; pop cx 1647 ; dec dx 1648 ; ;out dx, al 1649 ; 1650 ; mov ah, 1 ; out (byte) 1651 ; int 34h ; TRDOS 386 - IOCTL interrupt 1652 ; 1653 ; retn 1654 1655 ;*********************************************** 1656 ;* descript. : send NOTEON command, volume 127 * 1657 ;* parameter : al:channel;ah:note * 1658 ;* sideeffect: dx,al * 1659 ;* back : none * 1660 ;*********************************************** 1661 1662 ;setnote: 1663 ; call setinstr 1664 ; mov al, 127 ; 7Fh 1665 ; call writeGM 1666 ; retn 1667 1668 ;*********************************************** 1669 ;* descript. : send CHANGEPRG command * 1670 ;* parameter : al:channel;ah:instrument * 1671 ;* sideeffect: dx,al * 1672 ;* back : none * 1673 ;*********************************************** 1674 1675 ;setinstr: 1676 ; call writeGM 1677 ; mov al, ah 1678 ; call writeGM 1679 ; retn 1680 1681 ;*********************************************** 1682 ;* descript. : clear/set the fractal es: to al * 1683 ;* parameter : al,es * 1684 ;* sideeffect: ax,cx,di,es * 1685 ;* back : none * 1686 ;*********************************************** 1687 1688 clearFrac: 1689 000006A3 31C0 xor eax, eax 1690 setFrac: 1691 ;mov cx, 4096 ; 1000h 1692 000006A5 B900100000 mov ecx, 4096 ; ?? 1693 000006AA F3AA rep stosb 1694 000006AC C3 retn 1695 1696 ;*********************************************** 1697 ;* descript. : calc shade bob fractal * 1698 ;* parameter : es:seg;num,rad:stack * 1699 ;* sideeffect: all * 1700 ;* back : none * 1701 ;*********************************************** 1702 1703 createFrac1: 1704 rad equ 8 ; arg 1 in [esp+4] 1705 num equ 12 ; arg 2 in [esp+8] 1706 1707 000006AD 55 push ebp 1708 000006AE 89E5 mov ebp, esp 1709 ; 1710 ; 11/02/2017 1711 000006B0 8BBB[A6350000] mov edi, dword [ebx+tseg] ; es: 1712 000006B6 893D[D8D00000] mov dword [es_], edi ; 16/01/2017 1713 000006BC E8E2FFFFFF call clearFrac 1714 ;mov si, circletab 1715 000006C1 BE[02350000] mov esi, circletab 1716 ;mov dx, word [ebp+rad] 1717 000006C6 8B5508 mov edx, dword [ebp+rad] 1718 000006C9 88D0 mov al, dl 1719 000006CB F6EA imul dl 1720 ;mov di, ax 1721 000006CD 6689C3 mov bx, ax ; 16/01/2017 1722 ;mov cx, dx 1723 ;add cx, cx 1724 000006D0 89D1 mov ecx, edx ; ?? 1725 000006D2 01C9 add ecx, ecx ; ?? 1726 CCTloop: 1727 000006D4 88D0 mov al, dl 1728 000006D6 F6EA imul dl 1729 000006D8 66F7D8 neg ax 1730 ;add ax, di 1731 000006DB 6601D8 add ax, bx ; 16/01/2017 1732 000006DE 668906 mov word [esi], ax 1733 000006E1 DF06 fild word [esi] 1734 000006E3 D9FA fsqrt 1735 000006E5 DF1E fistp word [esi] 1736 000006E7 46 inc esi 1737 000006E8 46 inc esi 1738 000006E9 664A dec dx 1739 000006EB E2E7 loop CCTloop 1740 1741 000006ED 668B4D0C mov cx, word [ebp+num] 1742 SBloop1: 1743 000006F1 51 push ecx 1744 000006F2 BB00100000 mov ebx, 4096 ; 1000h 1745 000006F7 E87BFFFFFF call rnd 1746 000006FC 0FB7F8 movzx edi, ax ; 05/02/2017 1747 000006FF 66BE[0235] mov si, circletab 1748 00000703 668B4D08 mov cx, word [ebp+rad] 1749 ;add cx, cx 1750 00000707 01C9 add ecx, ecx ; ?? 1751 00000709 8B1D[D8D00000] mov ebx, dword [es_] 1752 SBloop2: 1753 0000070F 51 push ecx 1754 00000710 66AD lodsw 1755 00000712 6689C1 mov cx, ax 1756 00000715 6601C9 add cx, cx 1757 00000718 7410 jz short SBskip 1758 0000071A 57 push edi 1759 0000071B 6629C7 sub di, ax 1760 SBloop3: 1761 0000071E 6681E7FF0F and di, 4095 ; 0FFFh 1762 00000723 FE041F inc byte [edi+ebx] ; 17/01/2017 1763 00000726 47 inc edi 1764 00000727 E2F5 loop SBloop3 1765 00000729 5F pop edi 1766 SBskip: 1767 0000072A 6683C740 add di, 64 ; 40h 1768 0000072E 59 pop ecx 1769 0000072F E2DE loop SBloop2 1770 00000731 59 pop ecx 1771 00000732 E2BD loop SBloop1 1772 00000734 5D pop ebp 1773 00000735 C20800 ret 8 1774 1775 ;*********************************************** 1776 ;* descript. : draw a perpective-texturemapped * 1777 ;* and g.-shaded n-sided polygon * 1778 ;* parameter : far ptr to poly, sides, textnum * 1779 ;* sideeffect: all * 1780 ;* back : none * 1781 ;* length : 700 bytes * 1782 ;*********************************************** 1783 1784 scansubtextpoly: 1785 ; 30/01/2017 1786 col equ 8 ; arg 1, [esp+4] ; dcf.col value 1787 n equ 12 ; arg 2, [esp+8] ; dcf.j value 1788 pol equ 16 ; arg 3, [esp+12] ; dcf.p2 address 1789 1790 ; 06/02/2017 1791 00000738 55 push ebp 1792 00000739 89E5 mov ebp, esp 1793 1794 ; 21/01/2017 1795 0000073B B8FF7F0000 mov eax, 32767 1796 00000740 89C2 mov edx, eax 1797 00000742 89C3 mov ebx, eax 1798 00000744 66F7DB neg bx ; -32767 ; 8001h 1799 00000747 89DE mov esi, ebx ; -32767 1800 1801 ;edi = 32 bit address (in stack) /// 18/01/2017 1802 00000749 8B7D10 mov edi, dword [ebp+pol] ; [ebp+16] ; dcf.p2 ; face structure 1803 1804 0000074C 31C9 xor ecx, ecx 1805 minmax: 1806 0000074E 663B4712 cmp ax, word [edi+2+edge.e+edges.x] ; [edi+12h] 1807 00000752 7E04 jle short noswap1 1808 00000754 668B4712 mov ax, word [edi+2+edge.e+edges.x] ; [edi+12h] 1809 noswap1: 1810 00000758 663B5F12 cmp bx, word [edi+2+edge.e+edges.x] ; [edi+12h] 1811 0000075C 7D04 jge short noswap2 1812 0000075E 668B5F12 mov bx, word [edi+2+edge.e+edges.x] ; [edi+12h] 1813 noswap2: 1814 00000762 663B570C cmp dx, word [edi+edge.py] ; [edi+0Ch] 1815 00000766 7E12 jle short noswap3 1816 00000768 668B570C mov dx, word [edi+edge.py] ; [edi+0Ch] 1817 0000076C 66890D[D8D20000] mov word [sstp.l], cx 1818 00000773 66890D[DAD20000] mov word [sstp.r], cx 1819 noswap3: 1820 0000077A 663B770C cmp si, word [edi+edge.py] ; [edi+0Ch] 1821 0000077E 7D04 jge short noswap4 1822 00000780 668B770C mov si, word [edi+edge.py] ; [edi+0Ch] 1823 noswap4: 1824 00000784 6683C724 add di, 36 ; 24h 1825 00000788 6641 inc cx 1826 0000078A 663B4D0C cmp cx, word [ebp+n] ; [ebp+12] 1827 ; dcf.j ; number of visible edges/points 1828 0000078E 75BE jne short minmax 1829 1830 00000790 6683FB00 cmp bx, 0 1831 00000794 0F8C78030000 jl exitDraw 1832 0000079A 663D4001 cmp ax, XMAX ; 140h 1833 0000079E 0F8F6E030000 jg exitDraw 1834 1835 000007A4 6683FE15 cmp si, YMIN ; 15h 1836 000007A8 0F8C64030000 jl exitDraw 1837 000007AE 6681FAB300 cmp dx, YMAX ; 0B3h 1838 000007B3 0F8F59030000 jg exitDraw 1839 000007B9 668915[D2D20000] mov word [sstp.miny], dx 1840 000007C0 668935[D4D20000] mov word [sstp.maxy], si 1841 1842 ;{ down clipping } 1843 000007C7 66813D[D4D20000]B3- cmp word [sstp.maxy], YMAX ; 0B3h 1843 000007CF 00 1844 000007D0 7E09 jle short noclipdown 1845 000007D2 66C705[D4D20000]B3- mov word [sstp.maxy], YMAX ; 0B3h 1845 000007DA 00 1846 noclipdown: 1847 000007DB 66A1[D2D20000] mov ax, word [sstp.miny] 1848 000007E1 663B05[D4D20000] cmp ax, word [sstp.maxy] 1849 000007E8 0F8424030000 je exitDraw 1850 000007EE 66A3[D6D20000] mov word [sstp.y], ax 1851 ; 11/02/2017 1852 ;mov ebx, dword [ebp+col] 1853 000007F4 668B5D08 mov bx, word [ebp+col] ; [ebp+8] 1854 ; dcf.col ; shade/color index 1855 ; 11/02/2017 1856 000007F8 66C1E302 shl bx, 2 ; *4 1857 000007FC A1[9E350000] mov eax, dword [vseg] 1858 00000801 A3[D8D00000] mov dword [es_], eax 1859 00000806 8B83[A6350000] mov eax, dword [ebx+tseg] 1860 0000080C A3[DCD00000] mov dword [fs_], eax 1861 for: 1862 00000811 0FB705[D6D20000] movzx eax, word [sstp.y] 1863 00000818 663B05[D4D20000] cmp ax, word [sstp.maxy] 1864 0000081F 0F8FED020000 jg exitDraw 1865 00000825 0F84A3000000 je exitwhile2 1866 while1: 1867 0000082B FF0504000A00 inc dword [0A0004h] 1868 00000831 FF0544010A00 inc dword [0A0004h+320] 1869 1870 ;mov ax, word [sstp.y] 1871 ;cmp ax, word [sstp.maxy] 1872 ;jge short while2 1873 ; 05/02/2017 1874 00000837 666B1D[D8D20000]24 imul bx, [sstp.l], 36 1875 0000083F 0FB7F3 movzx esi, bx 1876 00000842 037510 add esi, dword [ebp+pol] ; [ebp+16] 1877 1878 00000845 663B460C cmp ax, word [esi+edge.py] ; [esi+0Ch] 1879 00000849 7530 jne short while2 1880 1881 0000084B 668B1D[D8D20000] mov bx, word [sstp.l] 1882 00000852 664B dec bx 1883 00000854 7D06 jge short nounder 1884 00000856 668B5D0C mov bx, word [ebp+n] ; [ebp+12] 1885 ; dcf.j ; visible edges/points 1886 0000085A 664B dec bx 1887 nounder: 1888 0000085C 66891D[D8D20000] mov word [sstp.l], bx 1889 00000863 31FF xor edi, edi 1890 00000865 E8AC020000 call calcDeltas 1891 0000086A 66A1[D6D20000] mov ax, word [sstp.y] 1892 00000870 663B05[D4D20000] cmp ax, word [sstp.maxy] 1893 00000877 7D55 jge short exitwhile2 1894 00000879 EBB0 jmp short while1 1895 while2: 1896 0000087B FF050A000A00 inc dword [0A000Ah] 1897 00000881 FF054A010A00 inc dword [0A000Ah+320] 1898 1899 ;mov ax, word [sstp.y] 1900 00000887 663B05[D4D20000] cmp ax, word [sstp.maxy] 1901 0000088E 7D3E jge short exitwhile2 1902 ; 05/02/2017 1903 00000890 666B1D[DAD20000]24 imul bx, [sstp.r], 36 1904 00000898 0FB7F3 movzx esi, bx 1905 0000089B 037510 add esi, dword [ebp+pol] ; [ebp+16] 1906 1907 0000089E 663B460C cmp ax, word [esi+edge.py] ; [esi+0Ch] 1908 000008A2 752A jne short exitwhile2 1909 1910 000008A4 668B1D[DAD20000] mov bx, word [sstp.r] 1911 000008AB 6643 inc bx 1912 000008AD 663B5D0C cmp bx, word [ebp+n] ; [ebp+12] 1913 000008B1 7C02 jl short noover 1914 ;xor bx, bx 1915 000008B3 31DB xor ebx, ebx 1916 noover: 1917 000008B5 66891D[DAD20000] mov word [sstp.r], bx 1918 000008BC BF14000000 mov edi, 20 ; 14h 1919 000008C1 E850020000 call calcDeltas 1920 ; 1921 000008C6 66A1[D6D20000] mov ax, word [sstp.y] 1922 000008CC EBAD jmp short while2 1923 exitwhile2: 1924 000008CE FF0540010A00 inc dword [0A0000h+320] 1925 000008D4 FF0580020A00 inc dword [0A0000h+640] 1926 1927 ;{ up clipping } 1928 000008DA 66833D[D6D20000]15 cmp word [sstp.y], YMIN ; 15h 1929 000008E2 0F8C07020000 jl clipup 1930 000008E8 31DB xor ebx, ebx 1931 000008EA 31C9 xor ecx, ecx 1932 000008EC 668B1D[58D20000] mov bx, word [sstp.edg+2+edges.x] 1933 000008F3 66891D[CED20000] mov word [sstp.mx1], bx 1934 000008FA 668B0D[6CD20000] mov cx, word [sstp.edg+20+2+edges.x] 1935 00000901 66890D[D0D20000] mov word [sstp.mx2], cx 1936 00000908 6629D9 sub cx, bx 1937 0000090B 0F84DE010000 jz exitol 1938 00000911 66833D[D0D20000]00 cmp word [sstp.mx2], 0 1939 00000919 0F8ED0010000 jle exitol 1940 0000091F 66813D[CED20000]40- cmp word [sstp.mx1], XMAX ; 140h 1940 00000927 01 1941 00000928 0F8FC1010000 jg exitol 1942 1943 0000092E 66F7DB neg bx 1944 00000931 790D jns short myelse 1945 00000933 6631DB xor bx, bx 1946 00000936 EB11 jmp short myendif 1947 _nodivbyzero: 1948 00000938 8B87[BAD20000] mov eax, dword [edi+sstp.del+40] 1949 0000093E EB25 jmp short nodivbyzero 1950 myelse: 1951 00000940 66C705[CED20000]00- mov word [sstp.mx1], 0 1951 00000948 00 1952 myendif: 1953 00000949 BF10000000 mov edi, 16 ; 10h 1954 addloop1: 1955 ;{ calculate deltas } 1956 0000094E 8B87[6AD20000] mov eax, dword [edi+sstp.edg+20] 1957 00000954 2B87[56D20000] sub eax, dword [edi+sstp.edg] 1958 0000095A 99 cdq 1959 ;jcxz nodivbyzero 1960 ;jcxz _nodivbyzero 1961 0000095B E3DB jecxz _nodivbyzero 1962 0000095D F7F9 idiv ecx 1963 0000095F 8987[BAD20000] mov dword [edi+sstp.del+40], eax 1964 nodivbyzero: 1965 ;{ left clipping } 1966 00000965 8B87[BAD20000] mov eax, dword [edi+sstp.del+40] 1967 0000096B F7EB imul ebx 1968 0000096D 0387[56D20000] add eax, dword [edi+sstp.edg] 1969 00000973 8987[7ED20000] mov dword [edi+sstp.edg+40], eax 1970 00000979 6683EF04 sub di, 4 1971 0000097D 75CF jnz short addloop1 1972 1973 0000097F 66A1[CAD20000] mov ax, word [sstp.del+40+16] 1974 00000985 66A3[D9140000] mov word [dels_pos_w], ax 1975 1976 ;{ right clipping } 1977 0000098B 66813D[D0D20000]40- cmp word [sstp.mx2], XMAX 1977 00000993 01 1978 00000994 7E09 jle short norightclip 1979 00000996 66C705[D0D20000]40- mov word [sstp.mx2], XMAX 1979 0000099E 01 1980 norightclip: 1981 0000099F 66693D[D6D20000]40- imul di, [sstp.y], 320 1981 000009A7 01 1982 000009A8 66033D[CED20000] add di, word [sstp.mx1] 1983 1984 000009AF 66BB0001 mov bx, 256 ; 100h 1985 000009B3 A1[82D20000] mov eax, dword [sstp.edg+40+edges.u] 1986 000009B8 F7EB imul ebx 1987 000009BA F73D[8AD20000] idiv dword [sstp.edg+40+edges.w] 1988 000009C0 66A3[E0D20000] mov word [sstp.uu2], ax 1989 000009C6 A1[86D20000] mov eax, dword [sstp.edg+40+edges.v] 1990 000009CB F7EB imul ebx 1991 000009CD F73D[8AD20000] idiv dword [sstp.edg+40+edges.w] 1992 000009D3 66A3[E2D20000] mov word [sstp.vv2], ax 1993 outloop: 1994 000009D9 668B0D[D0D20000] mov cx, word [sstp.mx2] 1995 000009E0 662B0D[CED20000] sub cx, word [sstp.mx1] 1996 000009E7 0F8E02010000 jle exitol 1997 000009ED 6683F910 cmp cx, SUBRANGE ; 10h 1998 000009F1 7E04 jle short lastSeg 1999 000009F3 66B91000 mov cx, SUBRANGE ; 10h 2000 lastSeg: 2001 ;{ uu1:=uu2 } 2002 ;{ vv1:=vv2 } 2003 000009F7 A1[E2D20000] mov eax, dword [sstp.vv2] 2004 000009FC A3[DED20000] mov dword [sstp.vv1], eax 2005 2006 00000A01 A1[BED20000] mov eax, dword [sstp.del+40+edges.u] 2007 00000A06 F7E9 imul ecx 2008 00000A08 0105[82D20000] add dword [sstp.edg+40+edges.u], eax 2009 00000A0E A1[C2D20000] mov eax, dword [sstp.del+40+edges.v] 2010 00000A13 F7E9 imul ecx 2011 00000A15 0105[86D20000] add dword [sstp.edg+40+edges.v], eax 2012 00000A1B A1[C6D20000] mov eax, dword [sstp.del+40+edges.w] 2013 00000A20 F7E9 imul ecx 2014 00000A22 0105[8AD20000] add dword [sstp.edg+40+edges.w], eax 2015 2016 00000A28 66BB0001 mov bx, 256 ; 100h 2017 00000A2C A1[82D20000] mov eax, dword [sstp.edg+40+edges.u] 2018 00000A31 F7EB imul ebx 2019 00000A33 F73D[8AD20000] idiv dword [sstp.edg+40+edges.w] 2020 00000A39 66A3[E0D20000] mov word [sstp.uu2], ax 2021 00000A3F A1[86D20000] mov eax, dword [sstp.edg+40+edges.v] 2022 00000A44 F7EB imul ebx 2023 00000A46 F73D[8AD20000] idiv dword [sstp.edg+40+edges.w] 2024 00000A4C 66A3[E2D20000] mov word [sstp.vv2], ax 2025 2026 00000A52 66A1[E0D20000] mov ax, word [sstp.uu2] 2027 00000A58 662B05[DCD20000] sub ax, word [sstp.uu1] 2028 00000A5F 6699 cwd 2029 00000A61 66F7F9 idiv cx 2030 00000A64 66A3[DB140000] mov word [ddu_pos_w], ax 2031 2032 00000A6A 66A1[E2D20000] mov ax, word [sstp.vv2] 2033 00000A70 662B05[DED20000] sub ax, word [sstp.vv1] 2034 00000A77 6699 cwd 2035 00000A79 66F7F9 idiv cx 2036 00000A7C 66A3[DD140000] mov word [ddv_pos_w], ax 2037 2038 00000A82 668B35[DED20000] mov si, word [sstp.vv1] 2039 00000A89 668B15[DCD20000] mov dx, word [sstp.uu1] 2040 00000A90 66A1[8ED20000] mov ax, word [sstp.edg+40+16] 2041 innerloop: 2042 ; 05/02/2017 2043 00000A96 0FB7DE movzx ebx, si 2044 00000A99 30DB xor bl, bl 2045 00000A9B 66C1EB02 shr bx, 2 2046 00000A9F 00F3 add bl, dh 2047 00000AA1 031D[DCD00000] add ebx, dword [fs_] 2048 00000AA7 0FB61B movzx ebx, byte [ebx] ; [fs:bx] 2049 00000AAA 08DB or bl, bl 2050 00000AAC 7415 jz short dels_pos 2051 00000AAE 88E7 mov bh, ah 2052 00000AB0 8A9B[F6350000] mov bl, byte [ebx+shadetab] 2053 2054 00000AB6 56 push esi 2055 00000AB7 0FB7F7 movzx esi, di 2056 00000ABA 0335[D8D00000] add esi, dword [es_] 2057 00000AC0 881E mov byte [esi], bl ; [es:di] 2058 00000AC2 5E pop esi 2059 dels_pos: 2060 00000AC3 660305[D9140000] add ax, word [dels_pos_w] ;{word ptr dels} 2061 ddu_pos: 2062 00000ACA 660315[DB140000] add dx, word [ddu_pos_w] ;{word ptr ddu } 2063 ddv_pos: 2064 00000AD1 660335[DD140000] add si, word [ddv_pos_w] ;{word ptr ddv } 2065 2066 00000AD8 6647 inc di 2067 00000ADA E2BA loop innerloop 2068 2069 00000ADC 66A3[8ED20000] mov word [sstp.edg+40+16], ax 2070 00000AE2 668305[CED20000]10 add word [sstp.mx1], SUBRANGE 2071 00000AEA E9EAFEFFFF jmp outloop 2072 exitol: 2073 00000AEF BF24000000 clipup: mov edi, 36 ; 24h 2074 addloop: 2075 00000AF4 8B87[92D20000] mov eax, dword [edi+sstp.del] 2076 00000AFA 0187[56D20000] add dword [edi+sstp.edg], eax 2077 00000B00 6683EF04 sub di, 4 2078 00000B04 79EE jns short addloop 2079 00000B06 66FF05[D6D20000] inc word [sstp.y] 2080 00000B0D E9FFFCFFFF jmp for 2081 exitDraw: 2082 00000B12 5D pop ebp 2083 00000B13 C20C00 ret 12 2084 2085 ;*********************************************** 2086 ;* descript. : calc deltas for vertical interp.* 2087 ;* parameter : none * 2088 ;* sideeffect: all * 2089 ;*********************************************** 2090 2091 calcDeltas: 2092 00000B16 666BD324 imul dx, bx, 36 2093 00000B1A 89F3 mov ebx, esi 2094 00000B1C 0FB7F2 movzx esi, dx 2095 00000B1F 037510 add esi, dword [ebp+pol] ; [ebp+16] 2096 ; 2097 00000B22 668B460C mov ax, word [esi+12] 2098 00000B26 662B05[D6D20000] sub ax, word [sstp.y] 2099 00000B2D 0FBFC0 movsx eax, ax 2100 00000B30 A3[E8D20000] mov dword [sstp.dy], eax 2101 00000B35 66B90500 mov cx, 5 2102 cDloop: 2103 00000B39 8B5310 mov edx, dword [ebx+16] 2104 00000B3C 8997[56D20000] mov dword [edi+sstp.edg], edx 2105 00000B42 8B4610 mov eax, dword [esi+16] 2106 00000B45 29D0 sub eax, edx 2107 00000B47 99 cdq 2108 00000B48 66833D[E8D20000]00 cmp word [sstp.dy], 0 2109 00000B50 740C je short cDskip 2110 00000B52 F73D[E8D20000] idiv dword [sstp.dy] 2111 00000B58 8987[92D20000] mov dword [edi+sstp.del], eax 2112 cDskip: 2113 00000B5E BA04000000 mov edx, 4 2114 00000B63 01D7 add edi, edx ; +4 2115 00000B65 01D6 add esi, edx ; +4 2116 00000B67 01D3 add ebx, edx ; +4 2117 00000B69 E2CE loop cDloop 2118 00000B6B C3 retn 2119 2120 ;*********************************************** 2121 ;* descript. : clip a poly at the viewplane, * 2122 ;* project and draw it * 2123 ;* parameter : bx:adress of the face * 2124 ;* sideeffect: all * 2125 ;* back : none * 2126 ;*********************************************** 2127 2128 drawclippedface: 2129 ; 06/02/2017 2130 00000B6C BE[6B110000] mov esi, uvtab 2131 ;mov si, uvtab 2132 00000B71 31FF xor edi, edi 2133 ;mov ecx, 4 2134 00000B73 66B90400 mov cx, 4 2135 dCFinitloop: 2136 ;push ebx ; face addr (in 'o+object.f')(29/01/2017) 2137 00000B77 53 push ebx ; face addr (in 'object.f') 2138 ;movzx ebx, word [ebx] 2139 00000B78 668B1B mov bx, word [ebx] ; point index into 'rp:' ? (29/01/2017) 2140 2141 00000B7B 53 push ebx 2142 00000B7C 666BDB0C imul bx, bx, 12 ; (point vector size = 12 bytes) 2143 00000B80 81C3[D6B70000] add ebx, rp ; addr of rotated point vects (29/01/2017) 2144 00000B86 8B03 mov eax, dword [ebx] 2145 ; vector(4-cx).x 2146 00000B88 8987[EED00000] mov dword [edi+dcf.p0+0], eax 2147 ; vector(4-cx).y 2148 00000B8E 8B4304 mov eax, dword [ebx+4] 2149 00000B91 8987[F2D00000] mov dword [edi+dcf.p0+4], eax 2150 2151 00000B97 D94308 fld dword [ebx+8] 2152 ; vector(4-cx).z 2153 00000B9A D997[F6D00000] fst dword [edi+dcf.p0+8] 2154 00000BA0 DF1D[E6D00000] fistp word [dcf.h] ; dcf.h = z distance 2155 00000BA6 5B pop ebx 2156 2157 00000BA7 66A1[E6D00000] mov ax, word [dcf.h] 2158 00000BAD 66050002 add ax, 512 ; 200h 2159 00000BB1 0F8883010000 js dCFbackclip ; not visible ? (29/01/2017) 2160 2161 00000BB7 663DFF01 cmp ax, 511 ; 1FFh 2162 00000BBB 7E04 jle short intensityOK 2163 00000BBD 66B8FF01 mov ax, 511 ; 1FFh ; maximum z distance (dept) ? 2164 intensityOK: 2165 00000BC1 66C1E303 shl bx, 3 ; point index * 8 2166 00000BC5 31D2 xor edx, edx 2167 00000BC7 66C1E007 shl ax, 7 2168 ;mul word [ebx+o+6+object.p] ; [ebx+o+6+4] 2169 00000BCB 66F7A3[E0180000] mul word [ebx+6+object.p] ; 10/02/2017 2170 ; edges(4-cx).s 2171 00000BD2 8997[0ED10000] mov dword [edi+dcf.p0+32], edx 2172 2173 00000BD8 30E4 xor ah, ah 2174 00000BDA 8A4604 mov al, byte [esi+4] 2175 00000BDD C1E010 shl eax, 16 ; 10h 2176 ; edges(4-cx).v 2177 00000BE0 8987[06D10000] mov dword [edi+dcf.p0+24], eax 2178 2179 00000BE6 AC lodsb 2180 00000BE7 C1E010 shl eax, 16 ; 10h 2181 ; edges(4-cx).u 2182 00000BEA 8987[02D10000] mov dword [edi+dcf.p0+20], eax 2183 2184 00000BF0 5B pop ebx 2185 00000BF1 43 inc ebx 2186 00000BF2 43 inc ebx 2187 00000BF3 6683C724 add di, 36 ; 24h ; size of edge 2188 ;loop dCFinitloop 2189 00000BF7 6649 dec cx 2190 00000BF9 0F8578FFFFFF jnz dCFinitloop 2191 2192 ; end of p1, p2, p3, p4 point dimensioning of face 2193 ; 2194 ; p1 ...... p2 2195 ; . . 2196 ; . shade . 2197 ; . . 2198 ; p3 ...... p4 2199 ; 2200 ; p1 (x,y,z) ... p4 (x,y,z) 2201 ; 2202 2203 00000BFF 668B03 mov ax, word [ebx] ; shade 2204 00000C02 66A3[EAD00000] mov word [dcf.col], ax 2205 2206 00000C08 31DB xor ebx, ebx 2207 00000C0A 66891D[E8D00000] mov word [dcf.j], bx 2208 2209 ; vector(3).z 2210 00000C11 D905[62D10000] fld dword [dcf.p0+108+8] 2211 00000C17 D9E4 ftst 2212 00000C19 9BDFE0 fstsw ax 2213 ;fnstsw ax 2214 00000C1C DDD8 fstp st0 2215 00000C1E 9E sahf 2216 00000C1F 7302 jae short isFalse 2217 00000C21 664B dec bx 2218 isFalse: 2219 00000C23 881D[ECD00000] mov byte [dcf.is_in], bl 2220 00000C29 31F6 xor esi, esi 2221 00000C2B 31FF xor edi, edi 2222 forloop: 2223 ; vector(0-3).z 2224 00000C2D D986[F6D00000] fld dword [esi+dcf.p0+8] 2225 00000C33 D9E4 ftst 2226 00000C35 9BDFE0 fstsw ax 2227 ;fnstsw ax 2228 00000C38 DDD8 fstp st0 2229 00000C3A 9E sahf 2230 00000C3B 7338 jae short elseFall 2231 2232 00000C3D 803D[ECD00000]FF cmp byte [dcf.is_in], 0FFh ; -1 ; true 2233 00000C44 740B je short inside 2234 00000C46 E8F0000000 call clipsub 2235 ; { OUT / IN } 2236 00000C4B F615[ECD00000] not byte [dcf.is_in] 2237 inside: 2238 00000C51 57 push edi 2239 00000C52 56 push esi 2240 ;lea edi, [edi+dcf.p2] 2241 ;lea esi, [esi+dcf.p0] 2242 00000C53 81C7[A2D10000] add edi, dcf.p2 2243 00000C59 81C6[EED00000] add esi, dcf.p0 2244 2245 00000C5F 66B91200 mov cx, 18 ; 12h 2246 00000C63 F366A5 rep movsw ; { IN / IN } 2247 2248 00000C66 5E pop esi 2249 00000C67 5F pop edi 2250 00000C68 6683C724 add di, 36 ; 24h 2251 00000C6C 66FF05[E8D00000] inc word [dcf.j] 2252 00000C73 EB14 jmp short dCFendif 2253 elseFall: 2254 00000C75 803D[ECD00000]FF cmp byte [dcf.is_in], 0FFh 2255 00000C7C 750B jne short outside 2256 00000C7E E8B8000000 call clipsub 2257 ; { IN / OUT } 2258 00000C83 F615[ECD00000] not byte [dcf.is_in] 2259 outside: 2260 00000C89 6683C624 dCFendif: add si, 36 ; 24h 2261 00000C8D 6681FE9000 cmp si, 4*36 ; 90h 2262 00000C92 7599 jne short forloop 2263 2264 00000C94 668B0D[E8D00000] mov cx, word [dcf.j] 2265 00000C9B 6683F902 cmp cx, 2 2266 00000C9F 0F8C95000000 jl dCFnodraw 2267 00000CA5 31FF xor edi, edi 2268 dCFloop: 2269 00000CA7 DF05[40100000] fild word [CONST13] 2270 00000CAD D8A7[AAD10000] fsub dword [edi+dcf.p2+8] 2271 00000CB3 DE35[44100000] fidiv word [CONST160] 2272 2273 00000CB9 D987[A6D10000] fld dword [edi+dcf.p2+4] 2274 00000CBF D8F1 fdiv st0, st1 2275 00000CC1 DE05[42100000] fiadd word [CONST100] 2276 00000CC7 DB9F[AED10000] fistp dword [edi+dcf.p2+12] 2277 2278 00000CCD D987[A2D10000] fld dword [edi+dcf.p2] 2279 00000CD3 D80D[3C100000] fmul dword [ASPECT_PLACE] 2280 00000CD9 D8F1 fdiv st0, st1 2281 00000CDB DE05[44100000] fiadd word [CONST160] 2282 00000CE1 D9FC frndint 2283 00000CE3 DA0D[48100000] fimul dword [CONST65536] 2284 00000CE9 DB9F[B2D10000] fistp dword [edi+dcf.p2+16] 2285 2286 00000CEF DB87[B6D10000] fild dword [edi+dcf.p2+20] 2287 00000CF5 D8F1 fdiv st0, st1 2288 00000CF7 DB9F[B6D10000] fistp dword [edi+dcf.p2+20] 2289 2290 00000CFD DB87[BAD10000] fild dword [edi+dcf.p2+24] 2291 00000D03 D8F1 fdiv st0, st1 2292 00000D05 DB9F[BAD10000] fistp dword [edi+dcf.p2+24] 2293 2294 00000D0B DB05[48100000] fild dword [CONST65536] 2295 00000D11 D8F1 fdiv st0, st1 2296 00000D13 DB9F[BED10000] fistp dword [edi+dcf.p2+28] 2297 2298 00000D19 DDD8 fstp st0 2299 00000D1B 6683C724 add di, 36 ; 24h 2300 00000D1F E286 loop dCFloop 2301 ;dec cx 2302 ;jnz dCFloop 2303 2304 ;lea edi, [dcf.p2] 2305 00000D21 BF[A2D10000] mov edi, dcf.p2 2306 00000D26 57 push edi 2307 00000D27 66FF35[E8D00000] push word [dcf.j] 2308 00000D2E 66FF35[EAD00000] push word [dcf.col] 2309 00000D35 E8FEF9FFFF call scansubtextpoly 2310 dCFnodraw: 2311 dCFbackclip: 2312 00000D3A C3 retn 2313 2314 clipsub: 2315 ; 05/02/2017 2316 00000D3B 56 push esi 2317 00000D3C 57 push edi 2318 00000D3D 8D46DC lea eax, [esi-36] 2319 00000D40 83F800 cmp eax, 0 2320 00000D43 7D05 jge short cSnounder 2321 00000D45 B86C000000 mov eax, 108 ; 6Ch 2322 cSnounder: 2323 00000D4A D986[F6D00000] fld dword [esi+dcf.p0+8] 2324 00000D50 D9C0 fld st0 2325 00000D52 97 xchg eax, edi 2326 00000D53 D8A7[F6D00000] fsub dword [edi+dcf.p0+8] 2327 00000D59 97 xchg eax, edi 2328 00000D5A DEF9 fdivp st1, st0 2329 ;fdiv 2330 2331 00000D5C BB[66110000] mov ebx, cliptab 2332 00000D61 66B90600 mov cx, 6 2333 00000D65 31D2 xor edx, edx 2334 dCFclipLoop2: 2335 00000D67 97 xchg eax, edi 2336 00000D68 D987[EED00000] fld dword [edi+dcf.p0] 2337 00000D6E 97 xchg eax, edi 2338 00000D6F D8A6[EED00000] fsub dword [esi+dcf.p0] 2339 00000D75 D8C9 fmul st0, st1 2340 00000D77 D886[EED00000] fadd dword [esi+dcf.p0] 2341 00000D7D D99F[A2D10000] fstp dword [edi+dcf.p2] 2342 2343 00000D83 8A13 mov dl, byte [ebx] 2344 00000D85 43 inc ebx 2345 00000D86 01D7 add edi, edx 2346 00000D88 01D6 add esi, edx 2347 00000D8A 01D0 add eax, edx 2348 00000D8C E2D9 loop dCFclipLoop2 2349 00000D8E DDD8 fstp st0 2350 00000D90 5F pop edi 2351 00000D91 5E pop esi 2352 00000D92 66FF05[E8D00000] inc word [dcf.j] 2353 ;add edi, 36 2354 00000D99 6683C724 add di, 36 ; 24h 2355 00000D9D C3 retn 2356 2357 2358 ;*********************************************** 2359 ;* descript. : rotate point over one axis * 2360 ;* parameter : st(0):angle, [ds:si] ptr to * 2361 ;* 1.koord.,[ds:bx] ptr to 2.koord.* 2362 ;* sideeffect: empty copro-stack * 2363 ;* back : none * 2364 ;*********************************************** 2365 2366 rotateAxis: 2367 00000D9E D9EB fldpi ;{ PI,a} 2368 00000DA0 DEC9 fmulp st1, st0 ;{ PI*a} 2369 ;fmul 2370 00000DA2 DA35[48100000] fidiv dword [CONST65536] ;{ PI*a/65536} 2371 00000DA8 D9FB fsincos ;{ cos,sin} 2372 00000DAA D9C0 fld st0 ;{ cos,cos,sin} 2373 00000DAC D80E fmul dword [esi] ;{ y*cos,cos,sin} 2374 00000DAE D9C2 fld st2 ;{ sin,y*cos,cos,sin} 2375 00000DB0 D80B fmul dword [ebx] ;{ z*sin,y*cos,cos,sin} 2376 00000DB2 DEE9 fsubp st1, st0 ;{ y*cos-z*sin,cos,sin} 2377 00000DB4 D9CA fxch st2 ;{ sin,cos,y*cos-z*sin} 2378 00000DB6 D80E fmul dword [esi] ;{ y*sin,cos,y*cos-z*sin} 2379 00000DB8 D9C9 fxch st1 ;{ cos,y*sin,y*cos-z*sin} 2380 00000DBA D80B fmul dword [ebx] ;{ z*cos,y*sin,y*cos-z*sin} 2381 00000DBC DEC1 faddp st1, st0 ;{ y*sin+z*cos,y*cos-z*sin} 2382 00000DBE D91B fstp dword [ebx] ;{ y*cos-z*sin} 2383 00000DC0 D91E fstp dword [esi] ;{} 2384 00000DC2 C3 retn 2385 2386 ;*********************************************** 2387 ;* descript. : rotate point * 2388 ;* parameter : a,b,c:angles,adr:address * 2389 ;* sideeffect: all * 2390 ;* back : none * 2391 ;*********************************************** 2392 2393 xyzRotate: 2394 adr equ 8 ; arg 1, [esp+4] 2395 c equ 12 ; arg 2, [esp+8] 2396 b equ 16 ; arg 3, [esp+12] 2397 a equ 20 ; arg 4, [esp+16] 2398 2399 00000DC3 55 push ebp 2400 00000DC4 89E5 mov ebp, esp 2401 2402 00000DC6 8B7D08 mov edi, [ebp+adr] 2403 00000DC9 DF4514 fild word [ebp+a] 2404 00000DCC 8D5F08 lea ebx, [edi+8] 2405 00000DCF 8D7704 lea esi, [edi+4] 2406 00000DD2 E8C7FFFFFF call rotateAxis 2407 00000DD7 DF4510 fild word [ebp+b] 2408 00000DDA 8D1F lea ebx, [edi] 2409 00000DDC 8D7708 lea esi, [edi+8] 2410 00000DDF E8BAFFFFFF call rotateAxis 2411 00000DE4 DF450C fild word [ebp+c] 2412 00000DE7 8D5F04 lea ebx, [edi+4] 2413 00000DEA 8D37 lea esi, [edi] 2414 00000DEC E8ADFFFFFF call rotateAxis 2415 2416 00000DF1 5D pop ebp 2417 00000DF2 C21000 ret 16 2418 2419 ;*********************************************** 2420 ;* descript. : calculate world matrix * 2421 ;* parameter : x-,y-,z-angle,neig:stack * 2422 ;* sideeffect: all * 2423 ;* back : none * 2424 ;*********************************************** 2425 2426 calcRotMat: 2427 neig equ 8 ; arg 1, [esp+4] 2428 zw equ 12 ; arg 2, [esp+8] 2429 yw equ 16 ; arg 3, [esp+12] 2430 xw equ 20 ; arg 4, [esp+16] 2431 2432 00000DF5 55 push ebp 2433 00000DF6 89E5 mov ebp, esp 2434 2435 00000DF8 BF[40150000] mov edi, nwmat 2436 identityMat 2436 00000DFD B502 <1> mov ch, 2 2436 <1> iMolp: 2436 00000DFF B102 <1> mov cl, 2 2436 <1> iMilp: 2436 00000E01 D9EE <1> fldz 2436 00000E03 38CD <1> cmp ch, cl 2436 00000E05 7504 <1> jne short iMwritezero 2436 00000E07 DDD8 <1> fstp st0 2436 00000E09 D9E8 <1> fld1 2436 <1> iMwritezero: 2436 00000E0B D91F <1> fstp dword [edi] 2436 00000E0D 6683C704 <1> add di, 4 2436 00000E11 FEC9 <1> dec cl 2436 00000E13 79EC <1> jns short iMilp 2436 00000E15 FECD <1> dec ch 2436 00000E17 79E6 <1> jns short iMolp 2437 00000E19 31FF xor edi, edi 2438 cRMolp: 2439 00000E1B 57 push edi 2440 00000E1C FF7514 push dword [ebp+xw] 2441 00000E1F FF7510 push dword [ebp+yw] 2442 00000E22 FF750C push dword [ebp+zw] 2443 ;add edi, nwmat 2444 00000E25 6681C7[4015] add di, nwmat 2445 00000E2A 57 push edi 2446 00000E2B E893FFFFFF call xyzRotate 2447 00000E30 5F pop edi 2448 00000E31 31DB xor ebx, ebx 2449 cRMilp: 2450 00000E33 D987[40150000] fld dword [edi+nwmat] 2451 00000E39 D88B[B5140000] fmul dword [ebx+owmat] 2452 00000E3F D987[44150000] fld dword [edi+nwmat+4] 2453 00000E45 D88B[C1140000] fmul dword [ebx+owmat+12] 2454 00000E4B D987[48150000] fld dword [edi+nwmat+8] 2455 00000E51 D88B[CD140000] fmul dword [ebx+owmat+24] 2456 00000E57 DEC1 fadd 2457 00000E59 DEC1 fadd 2458 00000E5B D9943B[B5140000] fst dword [ebx+edi+owmat] 2459 00000E62 D99C3B[1C150000] fstp dword [ebx+edi+wmat] 2460 00000E69 6683C304 add bx, 4 2461 00000E6D 80FB0C cmp bl, 12 2462 00000E70 75C1 jne short cRMilp 2463 00000E72 6683C70C add di, 12 2464 00000E76 6683FF24 cmp di, 36 2465 00000E7A 759F jne short cRMolp 2466 2467 00000E7C BE[1C150000] mov esi, wmat 2468 00000E81 66B90300 mov cx, 3 2469 cRMneigloop: 2470 00000E85 DF4508 fild word [ebp+neig] 2471 00000E88 8D5E0C lea ebx, [esi+12] 2472 00000E8B E80EFFFFFF call rotateAxis 2473 00000E90 6683C604 add si, 4 2474 00000E94 E2EF loop cRMneigloop 2475 2476 00000E96 5D pop ebp 2477 00000E97 C21000 ret 16 2478 2479 ;*********************************************** 2480 ;* descript. : create the world * 2481 ;* parameter : none * 2482 ;* sideeffect: all * 2483 ;* back : none * 2484 ;*********************************************** 2485 2486 createWorld: 2487 ; 06/02/2017 2488 00000E9A BE[B8110000] mov esi, world 2489 ;mov cx, 4 2490 00000E9F B904000000 mov ecx, 4 ; ?? 2491 cWworldLoop: 2492 00000EA4 51 push ecx 2493 00000EA5 56 push esi 2494 00000EA6 BF[F6B50000] mov edi, p 2495 00000EAB BB[6EB60000] mov ebx, pr 2496 00000EB0 66BE[8B11] mov si, print 2497 00000EB4 B10F mov cl, 15 ; 0Fh 2498 cWinitStartRoom: 2499 00000EB6 51 push ecx 2500 00000EB7 B103 mov cl, 3 2501 cWinnerLoop: 2502 00000EB9 AC lodsb ; byte data (to be converted to dword) from the 'print:' 2503 00000EBA 6698 cbw ; convert byte to word with sign (0E0h -> FFE0h) 2504 00000EBC 66AB stosw ; store world coordinate/dimension as integer (word), to 'p:' 2505 00000EBE DF47FE fild word [edi-2] 2506 00000EC1 D91B fstp dword [ebx] ; store coordinate as floatpoint (29/01/2017) 2507 00000EC3 6683C304 add bx, 4 ; next dimension (x,y,z) in 'pr:' 2508 00000EC7 E2F0 loop cWinnerLoop 2509 00000EC9 59 pop ecx 2510 00000ECA 66B8007F mov ax, 127*256 ; 7F00h ; 4th dimension in 'p:' (29/01/2017) 2511 00000ECE 66AB stosw 2512 00000ED0 E2E4 loop cWinitStartRoom 2513 00000ED2 5E pop esi 2514 cWmainLoop: 2515 00000ED3 AC lodsb ; the byte from 'world:' for shade and direction ( 29/01/2017) 2516 00000ED4 3CFF cmp al, 255 ; 0FFh 2517 00000ED6 0F8456010000 je cWexit ; end of stage (1 to 4) (29/01/2017) 2518 2519 00000EDC 88C7 mov bh, al ; High 4 bits for shading (29/01/2017) 2520 00000EDE 6681E30070 and bx, 7000h 2521 00000EE3 80C70F add bh, 15 ; 0Fh 2522 00000EE6 66891D[E2D00000] mov word [cw.shade], bx 2523 00000EED 6683E00F and ax, 0Fh ; 15 ; Low 4 bits for direction (29/01/2017) 2524 00000EF1 66A3[E0D00000] mov word [cw.direc], ax 2525 2526 00000EF7 31DB xor ebx, ebx 2527 cWsideLoop: 2528 00000EF9 F6C304 test bl, 4 2529 00000EFC 7405 jz short cWfirstNibble 2530 00000EFE AC lodsb 2531 00000EFF 240F and al, 0Fh ; 15 2532 00000F01 EB05 jmp short cWsecondNibble 2533 cWfirstNibble: 2534 00000F03 8A06 mov al, byte [esi] 2535 00000F05 C0E804 shr al, 4 2536 cWsecondNibble: 2537 00000F08 31FF xor edi, edi ; 10/02/2017 (is this necessary?) 2538 00000F0A 30E4 xor ah, ah 2539 00000F0C 6648 dec ax 2540 00000F0E 7867 js short cWnoWall ; ax = 0 -> ax = 0FFFFh (29/01/2017) 2541 ;imul di, [o+object.fanz], 10 ; 0Ah 2542 00000F10 666B3D[D8180000]0A imul di, [object.fanz], 10 ; 10/02/2017 2543 ;add di, o+object.f ; base address + offset 2544 ;add di, object.f ; base address + offset 2545 00000F18 81C7[5A250000] add edi, object.f ; 10/02/2017 2546 ;inc word [o+object.fanz] ; faces = faces + 1 2547 00000F1E 66FF05[D8180000] inc word [object.fanz] ; faces = faces + 1 2548 00000F25 66894708 mov word [edi+8], ax ; 4th word is shading value (29/01/2017) 2549 2550 00000F29 53 push ebx 2551 00000F2A 56 push esi 2552 00000F2B B104 mov cl, 4 2553 cWaddPointloop: 2554 ;movsx esi, byte [ebx+cube] ; cube coordinate offset (29/01/207) 2555 ;xor esi, esi ; 10/02/2017 2556 ;movsx si, byte [ebx+cube] 2557 00000F2D 0FB6B3[73110000] movzx esi, byte [ebx+cube] ; 11/02/2017 2558 00000F34 81C6[F6B50000] add esi, p ; + base address (p:) (29/01/2017) 2559 2560 00000F3A 57 push edi 2561 ;mov edi, o+object.p ; p area of object structure (in o:) 2562 00000F3B BF[DA180000] mov edi, object.p ; 10/02/2017 2563 00000F40 51 push ecx 2564 ;mov cx, word [o+object.panz] ; number of points (for object.p) 2565 00000F41 668B0D[D6180000] mov cx, word [object.panz] ; 10/02/2017 2566 00000F48 6631C0 xor ax, ax 2567 ;jcxz cWfirstPoint 2568 00000F4B E318 jecxz cWfirstPoint 2569 cWsearchPointLoop: ; check point coordinates are same or not (29/01/2017) 2570 00000F4D 8B16 mov edx, dword [esi] 2571 00000F4F 3B17 cmp edx, dword [edi] 2572 00000F51 750A jne short cWdifferent 2573 00000F53 668B5604 mov dx, word [esi+4] 2574 00000F57 663B5704 cmp dx, word [edi+4] 2575 00000F5B 7411 je short cWpointExists 2576 cWdifferent: 2577 00000F5D 6640 inc ax ; number of different points (of object) 2578 00000F5F 6683C708 add di, 8 2579 00000F63 E2E8 loop cWsearchPointLoop 2580 cWfirstPoint: 2581 00000F65 A5 movsd 2582 00000F66 A5 movsd 2583 ;inc word [o+object.panz] ; points = points + 1 2584 00000F67 66FF05[D6180000] inc word [object.panz] ; 10/02/2017 2585 cWpointExists: 2586 00000F6E 59 pop ecx 2587 00000F6F 5F pop edi 2588 00000F70 66AB stosw ; store num of different points (29/01/2017) 2589 ; in the Xth word of face structure (5 words) 2590 ; (Xth word of 'object.f', X = 4-CL) 2591 00000F72 43 inc ebx 2592 00000F73 E2B8 loop cWaddPointloop 2593 00000F75 5E pop esi 2594 00000F76 5B pop ebx 2595 cWnoWall: 2596 00000F77 6683C304 add bx, 4 2597 00000F7B 6683FB18 cmp bx, 24 ; 18h 2598 00000F7F 0F8574FFFFFF jne cWsideLoop 2599 2600 ;xor edi, edi ; 10/02/2017 2601 00000F85 666B3D[E0D00000]0C imul di, [cw.direc], 12 2602 ;movsx edi, di ; 11/02/2017 2603 00000F8D B103 mov cl, 3 2604 ;mov ebx, pr+96 2605 00000F8F 66BB[CEB6] mov bx, pr+96 ; 24th dword of 'pr:' 2606 cWaddStepLoop: 2607 00000F93 D94348 fld dword [ebx+72] ; [ebx+48h] 2608 00000F96 D8043B fadd dword [ebx+edi] 2609 00000F99 D95B48 fstp dword [ebx+72] 2610 00000F9C 6683C304 add bx, 4 2611 00000FA0 E2F1 loop cWaddStepLoop 2612 2613 ;xor edi, edi ; 11/02/2017 2614 2615 00000FA2 807EFC00 cmp byte [esi-4], 0 2616 00000FA6 7D27 jge short cWsimpleRoom 2617 2618 00000FA8 66BB[6EB6] mov bx, pr 2619 00000FAC B10E mov cl, 14 ; 0Eh 2620 cWrotloop: 2621 00000FAE 60 pushad 2622 00000FAF B103 mov cl, 3 2623 00000FB1 8A16 mov dl, byte [esi] 2624 cWpushLoop: 2625 00000FB3 31C0 xor eax, eax 2626 00000FB5 D0EA shr dl, 1 2627 00000FB7 7305 jnc short cWnoRot 2628 00000FB9 8A26 mov ah, byte [esi] 2629 ;and ax, 0F000h 2630 00000FBB 80E4F0 and ah, 0F0h 2631 ;push ax 2632 ;jmp short cWendIf 2633 cWnoRot: 2634 ;push 0 ; arg 2 (c), arg 3 (b), arg 4 (a) 2635 00000FBE 50 push eax 2636 cWendIf: 2637 00000FBF E2F2 loop cWpushLoop 2638 00000FC1 53 push ebx ; arg 1 (addr) 2639 00000FC2 E8FCFDFFFF call xyzRotate 2640 00000FC7 61 popad 2641 00000FC8 6683C30C add bx, 12 ; 0Ch 2642 00000FCC E2E0 loop cWrotloop 2643 00000FCE 46 inc esi 2644 cWsimpleRoom: 2645 00000FCF 668B1D[E0D00000] mov bx, word [cw.direc] 2646 00000FD6 66C1E302 shl bx, 2 2647 00000FDA B104 mov cl, 4 2648 cWpointCopyLoop: 2649 00000FDC 60 pushad 2650 ;movsx esi, byte [ebx+cube] 2651 ;xor esi, esi ; 10/02/2017 2652 ;movsx si, byte [ebx+cube] 2653 00000FDD 0FB6B3[73110000] movzx esi, byte [ebx+cube] ; 11/02/2017 2654 00000FE4 89F0 mov eax, esi 2655 00000FE6 81C6[F6B50000] add esi, p ; + base address of 'p:' 2656 00000FEC 80F307 xor bl, 7 2657 ;movsx edi, byte [ebx+cube] 2658 ;xor edi, edi ; 10/02/2017 2659 ;movsx di, byte [ebx+cube] 2660 00000FEF 0FB6BB[73110000] movzx edi, byte [ebx+cube] 2661 00000FF6 81C7[F6B50000] add edi, p ; + base address of 'p:' 2662 00000FFC 56 push esi 2663 00000FFD A5 movsd 2664 00000FFE A5 movsd 2665 00000FFF 5E pop esi 2666 2667 00001000 89C3 mov ebx, eax 2668 00001002 D1EB shr ebx, 1 2669 00001004 01C3 add ebx, eax 2670 00001006 BF[6EB60000] mov edi, pr ; + base address of 'pr:' 2671 0000100B B103 mov cl, 3 2672 cWSround: 2673 0000100D D9043B fld dword [ebx+edi] 2674 00001010 D887A8000000 fadd dword [edi+168] ; [edi+0A8h] 2675 00001016 DF1E fistp word [esi] ; world coordinate/dimension 2676 00001018 6683C704 add di, 4 2677 0000101C 46 inc esi 2678 0000101D 46 inc esi 2679 0000101E E2ED loop cWSround 2680 00001020 66A1[E2D00000] mov ax, word [cw.shade] 2681 00001026 668906 mov word [esi], ax ; 4th word 2682 00001029 61 popad 2683 0000102A 43 inc ebx 2684 0000102B E2AF loop cWpointCopyLoop 2685 0000102D E9A1FEFFFF jmp cWmainLoop 2686 cWexit: 2687 00001032 59 pop ecx 2688 00001033 6649 dec cx 2689 00001035 0F8569FEFFFF jnz cWworldLoop 2690 0000103B C3 retn 2691 2692 align 4 2693 2694 ;============================================================================= 2695 ; preinitialized data 2696 ;============================================================================= 2697 2698 0000103C 9A99993F ASPECT_PLACE: dd ASPECT_RATIO ; 1.2 2699 00001040 0D00 CONST13: dw 13 ; 000Dh 2700 00001042 6400 CONST100: dw CENTERY ; 0064h 2701 00001044 A000 CONST160: dw CENTERX ; 00A0h 2702 00001046 0007 CONST1792: dw 1792 ; 0700h 2703 00001048 00000100 CONST65536: dd 65536 ; 00010000h 2704 0000104C 05840808 randommul: dd 134775813 ; 08088405h 2705 00001050 FB100000 randomseed: dd 4347 ; 000010FBh 2706 ;credits: 2707 ; db 2, 80,-5 2708 ; db -2,50,4,69,2,62,2,69,2,81,2,62,2,69,2,79,2,62,2,69,2 2709 ; db 81,2,62,2,69,2,79,2,81,2,0 ; { pat 0,2,4,6,8 } 2710 ; db -2,50,4,70,2,62,2,70,2,81,2,62,2,70,2,79,2,62,2,70,2 2711 ; db 82,2,62,2,70,2,79,2,82,2,0 ; { pat 1,3,5,7,9 } 2712 ; db 0 2713 ; db 55,32,56,32 ; { pat 10 } 2714 ; db 51,32,53,24,55,8 ; { pat 11 } 2715 ; db 57,32,50,32 ; { pat 12 } 2716 ; db 60,48,58,8,57,8 ; { pat 13 } 2717 ; db 55,64 ; { pat 14 } 2718 ; db -2,67,16,62,16,69,16,70,16,0 ; { pat 15 } 2719 ; db -2,70,16,69,16,62,16,65,16,0 ; { pat 16 } 2720 ; db 0 2721 ; db 4, 50,1,128,1,128 ;{ pat 0-3 } 2722 ; db 65,28,64,2,65,2,64,16,62,8,60,8 ;{ pat 4 } 2723 ; db 67,28,65,4,60,16,65,8,64,8 ;{ pat 5 } 2724 ; db 62,32,50,16,64,8,65,8 ;{ pat 6 } 2725 ; db 67,32,60,16,62,8,64,8 ;{ pat 7 } 2726 ; db 62,128 ;{ pat 8,9 } 2727 ; db 67,128 ;{ pat 10,11 } 2728 ; db 67,16,64,16,66,16,64,8,66,8 ;{ pat 12 } 2729 ; db 72,48,70,16 ;{ pat 13 } 2730 ; db 67,32,55,32 ;{ pat 14 } 2731 ; db -2,31,32,55,32,0 ;{ pat 15 } 2732 ; db -2,26,32,50,32,0 ;{ pat 16 } 2733 ; db 0 2734 ; db 5, 89,-5,1,128,0 ;{ pat 0-9 } 2735 ; db 67,8,74,24,68,8,75,24 ;{ pat 10 } 2736 ; db 63,8,70,24,60,8,69,16,67,8 ;{ pat 11 } 2737 ; db 62,8,69,16,67,8,62,8,66,24 ;{ pat 12 } 2738 ; db 63,8,67,24,60,8,67,16,69,8 ;{ pat 13 } 2739 ; db 55,8,67,24,43,8,50,24 ;{ pat 14 } 2740 ; db -2,31,1,38,63,0 ;{ pat 15 } 2741 ; db -2,26,1,33,63,0 ;{ pat 16 } 2742 ; db 0 2743 ; db 10, 0,-16,42,2,42,2,42,2,42,1,42,1,0 ;{ pat 0,1 } 2744 ; db -16,36,2,42,2,42,2,42,1,42,1,0 ;{ pat 2,3 } 2745 ; db -30,36,2,42,2,46,2,36,1,42,1,38,2 2746 ; db 42,2,46,2,38,1,42,1 ;{ pat 4-16 } 2747 ; db 36,2,38,2,36,2,42,1,42,1,38,2,42,2,46,2,38,1,42,1,0 2748 ; db 0 2749 ; db 0 2750 2751 ; colortable 65 bytes 2752 00001054 10 colors db 16 2753 00001055 1F3F3F3F db 31,63,63,63 2754 00001059 01000000 db 1, 0, 0, 0 2755 0000105D 1F28203F db 31,40,32,63 2756 00001061 01000000 db 1, 0, 0, 0 2757 00001065 1F3F0000 db 31,63, 0, 0 2758 00001069 01060100 db 1, 6, 1, 0 2759 0000106D 1F3F2914 db 31,63,41,20 2760 00001071 01000000 db 1, 0, 0, 0 2761 00001075 1F3F3F08 db 31,63,63, 8 2762 00001079 01000000 db 1, 0, 0, 0 2763 0000107D 1F38383F db 31,56,56,63 2764 00001081 013F0000 db 1,63, 0, 0 2765 00001085 103F3F00 db 16,63,63, 0 2766 00001089 103F0000 db 16,63, 0, 0 2767 0000108D 01160500 db 1,22, 5, 0 2768 00001091 073F3811 db 7,63,56,17 2769 2770 ; parameter for the texture effects 156 bytes 2771 00001095 130F0F31310A aE db 013h,15,15,49,49,10 2772 0000109B 131010303011 db 013h,16,16,48,48,17 2773 000010A1 1311112F2F18 db 013h,17,17,47,47,24 2774 000010A7 1312122E2EBE db 013h,18,18,46,46,190 2775 000010AD 1315152B2B1E db 013h,21,21,43,43,30 2776 000010B3 2500003E1E03 db 025h,0,0,62,30,3 2777 000010B9 2503033E1E07 db 025h,3,3,62,30,7 2778 000010BF 2503033B1BFC db 025h,3,3,59,27,0FCh 2779 000010C5 2500203E3E03 db 025h,0,32,62,62,3 2780 000010CB 2503233E3E07 db 025h,3,35,62,62,7 2781 000010D1 2503233B3BFC db 025h,3,35,59,59,0FCh 2782 000010D7 2500003F3FFE db 025h,0,0,63,63,0FEh 2783 000010DD 2C000A3F0FF6 db 02Ch,0,10,63,15,0F6h 2784 000010E3 2C000B3F1004 db 02Ch,0,11,63,16,4 2785 000010E9 2C002F3F34F6 db 02Ch,0,47,63,52,0F6h 2786 000010EF 2C00303F3504 db 02Ch,0,48,63,53,4 2787 000010F5 2E13182C2705 db 02Eh,19,24,44,39,5 2788 000010FB 2E14192C27F4 db 02Eh,20,25,44,39,0F4h 2789 00001101 2E14192B2607 db 02Eh,20,25,43,38,7 2790 00001107 3E14192B2606 db 03Eh,20,25,43,38,6 2791 0000110D 2F00183F1E06 db 02Fh,0,24,63,30,6 2792 00001113 2F00193F1FFA db 02Fh,0,25,63,31,0FAh 2793 00001119 3F00193F1E06 db 03Fh,0,25,63,30,6 2794 0000111F 2F00203F2606 db 02Fh,0,32,63,38,6 2795 00001125 2F00213F27FA db 02Fh,0,33,63,39,0FAh 2796 0000112B 3F00213F2606 db 03Fh,0,33,63,38,6 2797 2798 ; parameter for fractaladd 28 bytes 2799 00001131 22C026012601260020- aF: db 34,192,38,1,38,1,38,0,32,0,32,32,32,64 2799 0000113A 0020202040 2800 0000113F 226024002260240024- db 34,96,36,0,34,96,36,0,36,0,36,0,36,0 2800 00001148 0024002400 2801 2802 ; star bob for the sparcling stars texture 25 bytes 2803 0000114D 0000030000 bob: db 0,0,3,0,0 2804 00001152 0002050200 db 0,2,5,2,0 2805 00001157 0305070503 db 3,5,7,5,3 2806 0000115C 0002050200 db 0,2,5,2,0 2807 00001161 0000030000 db 0,0,3,0,0 2808 2809 00001166 04040C0408 cliptab: db 4,4,12,4,8 2810 2811 0000116B 00003F3F3F00003F uvtab: db 0,0,63,63,63,0,0,63 2812 2813 00001173 08283010 cube: db 1*8,5*8,6*8,2*8 2814 00001177 18382000 db 3*8,7*8,4*8,0*8 2815 0000117B 10303818 db 2*8,6*8,7*8,3*8 2816 0000117F 00202808 db 0*8,4*8,5*8,1*8 2817 00001183 38302820 db 7*8,6*8,5*8,4*8 2818 00001187 00081018 db 0*8,1*8,2*8,3*8 2819 2820 0000118B E0E0E0 print: db -32,-32,-32 2821 0000118E 20E0E0 db 32,-32,-32 2822 00001191 2020E0 db 32, 32,-32 2823 00001194 E020E0 db -32, 32,-32 2824 00001197 E0E020 db -32,-32, 32 2825 0000119A 20E020 db 32,-32, 32 2826 0000119D 202020 db 32, 32, 32 2827 000011A0 E02020 db -32, 32, 32 2828 000011A3 400000 db 64, 0, 0 2829 000011A6 C00000 db -64, 0, 0 2830 000011A9 004000 db 0, 64, 0 2831 000011AC 00C000 db 0,-64, 0 2832 000011AF 000040 db 0, 0, 64 2833 000011B2 0000C0 db 0, 0,-64 2834 000011B5 000000 db 0, 0, 0 2835 2836 ; world contruction data 599 bytes 2837 000011B8 71700006 world: db 071h,070h,000h,006h 2838 000011BC 72000006 db 072h,000h,000h,006h 2839 000011C0 71007006 db 071h,000h,070h,006h 2840 000011C4 73077006 db 073h,007h,070h,006h 2841 000011C8 73070006 db 073h,007h,000h,006h 2842 000011CC 70070706 db 070h,007h,007h,006h 2843 000011D0 74000706 db 074h,000h,007h,006h 2844 000011D4 70000740 db 070h,000h,007h,040h 2845 000011D8 72700750 db 072h,070h,007h,050h 2846 000011DC 72700050 db 072h,070h,000h,050h 2847 000011E0 71707050 db 071h,070h,070h,050h 2848 000011E4 73007040 db 073h,000h,070h,040h 2849 000011E8 71000040 db 071h,000h,000h,040h 2850 000011EC 72000050 db 072h,000h,000h,050h 2851 000011F0 71007050 db 071h,000h,070h,050h 2852 000011F4 73077046 db 073h,007h,070h,046h 2853 000011F8 73000046 db 073h,000h,000h,046h 2854 000011FC 70070746 db 070h,007h,007h,046h 2855 00001200 72000750 db 072h,000h,007h,050h 2856 00001204 71000000 db 071h,000h,000h,000h 2857 00001208 71000000 db 071h,000h,000h,000h 2858 0000120C 7100BB56 db 071h,000h,0BBh,056h 2859 00001210 700FBB46 db 070h,00Fh,0BBh,046h 2860 00001214 FF db 0FFh 2861 00001215 33000000 db 033h,000h,000h,000h 2862 00001219 F0000706E4 db 0F0h,000h,007h,006h,0E4h 2863 0000121E B000BB46E4 db 0B0h,000h,0BBh,046h,0E4h 2864 00001223 9000BB56E4 db 090h,000h,0BBh,056h,0E4h 2865 00001228 9000BB56E4 db 090h,000h,0BBh,056h,0E4h 2866 0000122D 3000BB56 db 030h,000h,0BBh,056h 2867 00001231 F000BB5611 db 0F0h,000h,0BBh,056h,011h 2868 00001236 F000BB4611 db 0F0h,000h,0BBh,046h,011h 2869 0000123B B000BB5611 db 0B0h,000h,0BBh,056h,011h 2870 00001240 9000BB5611 db 090h,000h,0BBh,056h,011h 2871 00001245 B000BB5611 db 0B0h,000h,0BBh,056h,011h 2872 0000124A F000BB5611 db 0F0h,000h,0BBh,056h,011h 2873 0000124F F000BB4611 db 0F0h,000h,0BBh,046h,011h 2874 00001254 B000BB5611 db 0B0h,000h,0BBh,056h,011h 2875 00001259 3000BB56 db 030h,000h,0BBh,056h 2876 0000125D 1000BB56 db 010h,000h,0BBh,056h 2877 2878 00001261 34000000 db 034h,000h,000h,000h 2879 00001265 32050080 db 032h,005h,000h,080h 2880 00001269 35058080 db 035h,005h,080h,080h 2881 0000126D 35058000 db 035h,005h,080h,000h 2882 00001271 33058008 db 033h,005h,080h,008h 2883 00001275 33050008 db 033h,005h,000h,008h 2884 00001279 74050808 db 074h,005h,008h,008h 2885 0000127D 74050000 db 074h,005h,000h,000h 2886 00001281 73050880 db 073h,005h,008h,080h 2887 00001285 75000000 db 075h,000h,000h,000h 2888 00001289 75050888 db 075h,005h,008h,088h 2889 0000128D 70000000 db 070h,000h,000h,000h 2890 00001291 74640808 db 074h,064h,008h,008h 2891 00001295 74600800 db 074h,060h,008h,000h 2892 00001299 72640880 db 072h,064h,008h,080h 2893 0000129D 05600080 db 005h,060h,000h,080h 2894 000012A1 05600000 db 005h,060h,000h,000h 2895 000012A5 02600008 db 002h,060h,000h,008h 2896 000012A9 34600008 db 034h,060h,000h,008h 2897 000012AD 34600000 db 034h,060h,000h,000h 2898 000012B1 32600080 db 032h,060h,000h,080h 2899 000012B5 35600080 db 035h,060h,000h,080h 2900 000012B9 35600000 db 035h,060h,000h,000h 2901 000012BD 32600008 db 032h,060h,000h,008h 2902 000012C1 34350008 db 034h,035h,000h,008h 2903 000012C5 14650000 db 014h,065h,000h,000h 2904 000012C9 32350080 db 032h,035h,000h,080h 2905 000012CD 35350080 db 035h,035h,000h,080h 2906 000012D1 15650000 db 015h,065h,000h,000h 2907 000012D5 32350008 db 032h,035h,000h,008h 2908 000012D9 34358008 db 034h,035h,080h,008h 2909 000012DD 14650000 db 014h,065h,000h,000h 2910 000012E1 32358080 db 032h,035h,080h,080h 2911 000012E5 75000000 db 075h,000h,000h,000h 2912 000012E9 5265E077 db 052h,065h,0E0h,077h 2913 000012ED 32640E77 db 032h,064h,00Eh,077h 2914 000012F1 12650077 db 012h,065h,000h,077h 2915 000012F5 00650077 db 000h,065h,000h,077h 2916 000012F9 FF db 0FFh 2917 000012FA 32000000 db 032h,000h,000h,000h 2918 000012FE F000000014 db 0F0h,000h,000h,000h,014h 2919 00001303 B000000014 db 0B0h,000h,000h,000h,014h 2920 00001308 30000000 db 030h,000h,000h,000h 2921 0000130C F0000000F4 db 0F0h,000h,000h,000h,0F4h 2922 00001311 F000DD56F4 db 0F0h,000h,0DDh,056h,0F4h 2923 00001316 3000DD46 db 030h,000h,0DDh,046h 2924 0000131A 3000DD56 db 030h,000h,0DDh,056h 2925 0000131E 3000DD56 db 030h,000h,0DDh,056h 2926 00001322 32000050 db 032h,000h,000h,050h 2927 00001326 300AA050 db 030h,00Ah,0A0h,050h 2928 0000132A 3300A050 db 033h,000h,0A0h,050h 2929 0000132E 30000050 db 030h,000h,000h,050h 2930 00001332 32700050 db 032h,070h,000h,050h 2931 00001336 3000A050 db 030h,000h,0A0h,050h 2932 0000133A 33A0A750 db 033h,0A0h,0A7h,050h 2933 0000133E 33000000 db 033h,000h,000h,000h 2934 00001342 31A07A50 db 031h,0A0h,07Ah,050h 2935 00001346 31000A50 db 031h,000h,00Ah,050h 2936 0000134A 31000A50 db 031h,000h,00Ah,050h 2937 0000134E 320A0A50 db 032h,00Ah,00Ah,050h 2938 00001352 35000000 db 035h,000h,000h,000h 2939 00001356 720A0000 db 072h,00Ah,000h,000h 2940 0000135A 700AA000 db 070h,00Ah,0A0h,000h 2941 0000135E 7300A000 db 073h,000h,0A0h,000h 2942 00001362 70000000 db 070h,000h,000h,000h 2943 00001366 72000000 db 072h,000h,000h,000h 2944 0000136A 7000A000 db 070h,000h,0A0h,000h 2945 0000136E 73A0A000 db 073h,0A0h,0A0h,000h 2946 00001372 73A00099 db 073h,0A0h,000h,099h 2947 00001376 71A00A00 db 071h,0A0h,00Ah,000h 2948 0000137A 71000A00 db 071h,000h,00Ah,000h 2949 0000137E 71000A00 db 071h,000h,00Ah,000h 2950 00001382 750A0A00 db 075h,00Ah,00Ah,000h 2951 00001386 700C0C03 db 070h,00Ch,00Ch,003h 2952 0000138A 70000C03 db 070h,000h,00Ch,003h 2953 0000138E 70000C03 db 070h,000h,00Ch,003h 2954 00001392 72C07C03 db 072h,0C0h,07Ch,003h 2955 00001396 72000000 db 072h,000h,000h,000h 2956 0000139A 71C0C703 db 071h,0C0h,0C7h,003h 2957 0000139E 7300C003 db 073h,000h,0C0h,003h 2958 000013A2 71700003 db 071h,070h,000h,003h 2959 000013A6 72000003 db 072h,000h,000h,003h 2960 000013AA 7100C003 db 071h,000h,0C0h,003h 2961 000013AE 730CC003 db 073h,00Ch,0C0h,003h 2962 000013B2 71000003 db 071h,000h,000h,003h 2963 000013B6 310CCCA3 db 031h,00Ch,0CCh,0A3h 2964 000013BA FF db 0FFh 2965 000013BB 32000000 db 032h,000h,000h,000h 2966 000013BF F000700614 db 0F0h,000h,070h,006h,014h 2967 000013C4 B000DD4614 db 0B0h,000h,0DDh,046h,014h 2968 000013C9 3000DD56 db 030h,000h,0DDh,056h 2969 000013CD B2000D56C4 db 0B2h,000h,00Dh,056h,0C4h 2970 000013D2 32DD0056 db 032h,0DDh,000h,056h 2971 000013D6 32DD0056 db 032h,0DDh,000h,056h 2972 000013DA 32DD0056 db 032h,0DDh,000h,056h 2973 000013DE 7000F056 db 070h,000h,0F0h,056h 2974 000013E2 7000BB56 db 070h,000h,0BBh,056h 2975 000013E6 32B00B46 db 032h,0B0h,00Bh,046h 2976 000013EA 72BB0056 db 072h,0BBh,000h,056h 2977 000013EE 71B0B056 db 071h,0B0h,0B0h,056h 2978 000013F2 71021156 db 071h,002h,011h,056h 2979 000013F6 71221156 db 071h,022h,011h,056h 2980 000013FA 31201156 db 031h,020h,011h,056h 2981 000013FE 730BB056 db 073h,00Bh,0B0h,056h 2982 00001402 73BB0056 db 073h,0BBh,000h,056h 2983 00001406 300B0B46 db 030h,00Bh,00Bh,046h 2984 0000140A 3000BB56 db 030h,000h,0BBh,056h 2985 0000140E FF db 0FFh 2986 2987 ; flying script 126 bytes 2988 script: 2989 ; 7 6 5 4 3 2 1 0 2990 ; v v v v v c c c 2991 ; 2992 ; v = VALUE 2993 ; c = COMMAND 2994 ; 2995 ; 0 = NOP 2996 ; 1 = NEG ZSTEP 2997 ; 2 = INC SPEED 2998 ; 3 = DEC SPEED 2999 ; 4 = INC XSTEP 3000 ; 5 = DEC XSTEP 3001 ; 6 = INC YSTEP 3002 ; 7 = INC YSTEP 3003 3004 0000140F A1F8F898A1A6 db 0A1h,0f8h,0f8h,098h,0a1h,0A6h 3005 00001415 F0A7B3371036 db 0F0h,0A7h,0B3h,037h,010h,036h 3006 0000141B 5084858584F0 db 050h,084h,085h,085h,084h,0F0h 3007 00001421 F0B2A7A6A6A7 db 0F0h,0B2h,0A7h,0A6h,0A6h,0A7h 3008 00001427 F32670278044 db 0f3h,026h,070h,027h,080h,044h 3009 0000142D 457776A6B061 db 045h,077h,076h,0a6h,0b0h,061h 3010 00001433 6152A7773076 db 061h,052h,0a7h,077h,030h,076h 3011 00001439 80A201414101 db 080h,0a2H,001h,041h,041h,001h 3012 0000143F F530F4B3A4F8 db 0f5h,030h,0f4h,0b3h,0a4h,0f8h 3013 00001445 A5D04746F0A6 db 0a5h,0D0h,047h,046h,0F0h,0A6h 3014 0000144B 80A770A710A6 db 080h,0A7h,070h,0A7h,010h,0A6h 3015 00001451 8EF0508FB2F8 db 08eh,0f0h,050h,08fh,0b2h,0f8h 3016 00001457 A3808EF0508F db 0a3h,080h,08eh,0f0h,050h,08fh 3017 0000145D B710B6F080A6 db 0b7h,010h,0b6h,0f0h,080h,0a6h 3018 00001463 A7F087F07086 db 0a7h,0f0h,087h,0F0h,070h,086h 3019 00001469 36F0F0903783 db 036h,0f0h,0f0h,090h,037h,083h 3020 0000146F 2CF0F0F0302D db 02ch,0f0h,0f0h,0f0h,030h,02dh 3021 00001475 8230B5B4F2A6 db 082h,030h,0b5h,0b4h,0f2h,0a6h 3022 0000147B 30A78383A6F0 db 030h,0a7h,083h,083h,0a6h,0f0h 3023 00001481 58A77776F0F0 db 058h,0a7h,077h,076h,0f0h,0f0h 3024 00001487 F0F0F8F800 db 0f0h,0f0h,0f8h,0f8h,000h 3025 3026 0000148C 0100 zstep: dw 1 3027 0000148E 66EF doortimer dw -4250 ; 0EF66h 3028 00001490 4F4D4E495343454E54 omniscent db "OMNISCENT" 3029 omniend: 3030 00001499 284329204449524B20- sanction db "(C) DIRK KšPPERS" 3030 000014A2 4B9A5050455253 3031 sancend: 3032 000014A9 0000A5C3 ob: dd -330.0 ; vector.x 3033 000014AD 00000000 dd 0.0 ; vector.y 3034 000014B1 00008042 dd 64.0 ; vector.z 3035 owmat: 3036 000014B5 00000000 dd 0.0 ; vector.x 3037 000014B9 000080BF dd -1.0 ; vector.y 3038 000014BD 00000000 dd 0.0 ; vector.z 3039 ;owmat+12: 3040 000014C1 00000000 dd 0.0 ; vector.x 3041 000014C5 00000000 dd 0.0 ; vector.y 3042 000014C9 000080BF dd -1.0 ; vector.z 3043 ;owmat+24: 3044 000014CD 0000803F dd 1.0 ; vector.x 3045 000014D1 00000000 dd 0.0 ; vector.y 3046 000014D5 00000000 dd 0.0 ; vector.z 3047 3048 ; 17/01/2017 3049 000014D9 1111 dels_pos_w: dw 1111h 3050 000014DB 1111 ddu_pos_w: dw 1111h 3051 000014DD 1111 ddv_pos_w: dw 1111h 3052 3053 prg_msg: 3054 000014DF 4552444F47414E2054- db 'ERDOGAN TAN - TRDOS 386 VGA Test - SNCOMNI.PRG' 3054 000014E8 414E202D205452444F- 3054 000014F1 532033383620564741- 3054 000014FA 2054657374202D2053- 3054 00001503 4E434F4D4E492E5052- 3054 0000150C 47 3055 0000150D 0D0A db 0Dh, 0Ah 3056 0000150F 31312F30322F323031- db '11/02/2017' 3056 00001518 37 3057 00001519 0D0A db 0Dh, 0Ah 3058 0000151B 00 db 0 3059 3060 bss_start: 3061 3062 ABSOLUTE bss_start 3063 3064 alignb 4 3065 3066 ; 05/02/2017 (32 bit -> 16 bit) 3067 3068 ;============================================================================= 3069 ; null-initialized data 3070 ;============================================================================= 3071 3072 nullstart: 3073 0000151C wmat: resb matrix.size ; 36 3074 00001540 nwmat: resb matrix.size ; 36 3075 00001564 zspeed: resw 1 3076 00001566 oxw: resw 1 3077 00001568 oyw: resw 1 3078 0000156A ozw: resw 1 3079 0000156C scriptptr: resw 1 3080 0000156E scriptanz: resw 1 3081 00001570 scriptins: resb 1 3082 00001571 once: resb 1 3083 00001572 ticker: resw 1 3084 00001574 tracks: resw 1 3085 00001576 palette: resb 768 3086 00001876 channels: resb 16*6 3087 ;o: resb object.size ; 7204 3088 ; 10/02/2017 3089 000018D6 object.panz: resw 1 3090 000018D8 object.fanz: resw 1 3091 000018DA object.p: resb point.size*MAXPOINTS 3092 0000255A object.f: resb face.size*MAXFACES 3093 nullend: 3094 3095 ;============================================================================= 3096 ; uninitialized data 3097 ;============================================================================= 3098 000034FA oldstack resw 1 3099 Old08IrqPtr: 3100 000034FC Old08Irqofs: resw 1 3101 000034FE Old08Irqseg: resw 1 3102 ;Old09IrqPtr: 3103 ;Old09Irqofs: resw 1 3104 ;Old09Irqseg: resw 1 3105 ;songdata: resb 3605 3106 00003500 root: resw 1 3107 00003502 circletab: resw 32 3108 00003542 stars: resb 90 3109 0000359C twice: resb 1 3110 0000359D timer_event_number: resb 1 ; 06/02/2017 3111 ; 11/02/2017 3112 0000359E vseg: resd 1 3113 000035A2 bseg: resd 1 3114 000035A6 tseg: resd 20 3115 ; 3116 000035F6 shadetab: resb 256*128 3117 0000B5F6 p: resw 4*15 3118 0000B66E pr: resd 3*15 3119 0000B722 po: resb poly.size ; 5*36 3120 0000B7D6 rp: resd 3*MAXPOINTS ; 3*400 3121 0000CA96 facei: resd MAXFACES ; 400 3122 3123 0000D0D6 alignb 4 3124 0000D0D8 es_: resd 1 ; 16/01/2017 3125 0000D0DC fs_: resd 1 ; 16/01/2017 3126 3127 ; 06/02/2017 3128 0000D0E0 cw.direc: resw 1 ; word 3129 0000D0E2 cw.shade: resw 1 ; word 3130 ; 3131 0000D0E4 dcf.d: resw 1 ; word 3132 0000D0E6 dcf.h: resw 1 ; word 3133 0000D0E8 dcf.j: resw 1 ; word 3134 0000D0EA dcf.col: resw 1 ; word 3135 0000D0EC dcf.is_in: resb 1 ; byte 3136 0000D0ED resb 1 3137 0000D0EE dcf.p0: resb poly.size ; 5*36 bytes 3138 0000D1A2 dcf.p2: resb poly.size ; 5*36 bytes 3139 ; 3140 0000D256 sstp.edg: resb edges.size * 3 ; 60 bytes 3141 0000D292 sstp.del: resb edges.size * 3 ; 60 bytes 3142 0000D2CE sstp.mx1: resw 1 ; word 3143 0000D2D0 sstp.mx2: resw 1 ; word 3144 0000D2D2 sstp.miny: resw 1 ; word 3145 0000D2D4 sstp.maxy: resw 1 ; word 3146 0000D2D6 sstp.y: resw 1 ; word 3147 0000D2D8 sstp.l: resw 1 ; word 3148 0000D2DA sstp.r: resw 1 ; word 3149 0000D2DC sstp.uu1: resw 1 ; word 3150 0000D2DE sstp.vv1: resw 1 ; word 3151 0000D2E0 sstp.uu2: resw 1 ; word 3152 0000D2E2 sstp.vv2: resw 1 ; word 3153 0000D2E4 sstp.ddu: resw 1 ; word 3154 0000D2E6 sstp.ddv: resw 1 ; word 3155 0000D2E8 sstp.dy: resd 1 ; dword 3156 3157 alignb 4 3158 3159 bss_end: