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: 12/08/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 ; 01/03/2017 37 ; 16/10/2016 38 ; 29/04/2016 39 ; TRDOS 386 system calls (temporary list!) 40 _ver equ 0 41 _exit equ 1 42 _fork equ 2 43 _read equ 3 44 _write equ 4 45 _open equ 5 46 _close equ 6 47 _wait equ 7 48 _creat equ 8 49 _link equ 9 50 _unlink equ 10 51 _exec equ 11 52 _chdir equ 12 53 _time equ 13 54 _mkdir equ 14 55 _chmod equ 15 56 _chown equ 16 57 _break equ 17 58 _stat equ 18 59 _seek equ 19 60 _tell equ 20 61 _mount equ 21 62 _umount equ 22 63 _setuid equ 23 64 _getuid equ 24 65 _stime equ 25 66 _quit equ 26 67 _intr equ 27 68 _fstat equ 28 69 _emt equ 29 70 _mdate equ 30 71 _video equ 31 72 _audio equ 32 73 _timer equ 33 74 _sleep equ 34 75 _msg equ 35 76 _geterr equ 36 77 _fpsave equ 37 78 _pri equ 38 79 _rele equ 39 80 _fff equ 40 81 _fnf equ 41 82 _alloc equ 42 83 _dalloc equ 43 84 _calbac equ 44 85 86 [BITS 32] ; 80386 Protected Mode (32 bit) intructions 87 88 %macro sys 1-4 89 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 90 ; 03/09/2015 91 ; 13/04/2015 92 ; Retro UNIX 386 v1 system call. 93 %if %0 >= 2 94 mov ebx, %2 95 %if %0 >= 3 96 mov ecx, %3 97 %if %0 = 4 98 mov edx, %4 99 %endif 100 %endif 101 %endif 102 mov eax, %1 103 ;int 30h 104 int 40h ; TRDOS 386 (TRDOS v2.0) 105 %endmacro 106 107 ; TRDOS 386 (and Retro UNIX 386 v1) system call format: 108 ; sys systemcall (eax) , , 109 110 ; SNCOMNI.ASM 111 ; ΙΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝ» 112 ; Ί This file is generated by The Interactive Disassembler (IDA) Ί 113 ; Ί Copyright (c) 2010 by Hex-Rays SA, Ί 114 ; Ί Licensed to: Freeware version Ί 115 ; ΘΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΝΌ 116 ; 117 ; Input MD5 : 933E2716A5E585459024215F4468CDBC 118 119 ; File Name : C:\dosprogs\MEMDUMP.COM ; SNC_OMNI.COM UNPACKED! 120 ; Format : MS-DOS COM-file 121 ; Base Address: 0h Range: 100h-60100h Loaded length: 60000h 122 123 ; NASM version: Erdogan Tan, 14/08/2016 (Modified from MEMDUMP.ASM) 124 ; (SNC_OMNI.COM -> unpacking by using DosBox Debug -> MEMDUMP.COM -> 125 ; disassembling by using IDA Pro Free -> MEMDUMP.ASM -> converting to 126 ; NASM syntax (manual) -> test with DosBox -> correcting different code by 127 ; matching MEMDUMP.LST and SNCOMNI.LST files -> this file !!!) 128 129 ;============================================================================== 130 ; constants 131 ;============================================================================== 132 133 GMPort equ 0331h 134 CMD_NOTEON equ 090h 135 CMD_NOTEOFF equ 080h 136 CMD_CHANGEPARAM equ 0B0h 137 CMD_CHANGEPRG equ 0C0h 138 MOD_ALLNOTESOFF equ 07Bh 139 MAXFACES equ 400 140 MAXPOINTS equ 400 141 SONGSPEED equ 29 142 XMAX equ 320 143 YMIN equ 21 144 YMAX equ 179 145 SUBRANGE equ 16 146 %define ASPECT_RATIO 1.2 147 CENTERX equ 160 148 CENTERY equ 100 149 150 ;============================================================================== 151 ; structures 152 ;============================================================================== 153 154 struc channel 155 00000000 .del: resw 1 156 00000002 .trk: resb 1 157 00000003 .ln: resb 1 158 00000004 .adr: resw 1 159 endstruc 160 161 struc matrix 162 00000000 resd 9 163 .size: 164 endstruc 165 166 struc vector 167 00000000 .x: resd 1 168 00000004 .y: resd 1 169 00000008 .z: resd 1 170 .size: 171 endstruc 172 173 struc point 174 00000000 .x: resw 1 175 00000002 .y: resw 1 176 00000004 .z: resw 1 177 00000006 .s: resw 1 178 .size: 179 endstruc 180 181 struc face 182 00000000 resw 5 183 .size: 184 endstruc 185 186 ;struc object 187 ; .panz: resw 1 188 ; .fanz: resw 1 189 ; .p: resb point.size*MAXPOINTS 190 ; .f: resb face.size*MAXFACES 191 ; .size: 192 ;endstruc 193 194 struc edges 195 00000000 .x: resd 1 196 00000004 .u: resd 1 197 00000008 .v: resd 1 198 0000000C .w: resd 1 199 00000010 .s: resd 1 200 .size: 201 endstruc 202 203 struc edge 204 00000000 .p: resb vector.size 205 0000000C .py: resd 1 206 00000010 .e: resb edges.size 207 .size: 208 endstruc 209 210 struc poly 211 00000000 resb edge.size*5 212 .size: 213 endstruc 214 215 ;============================================================================== 216 ; %macros 217 ;============================================================================== 218 ;*********************************************** 219 ;* description : start timer interrupt 70/s * 220 ;* parameter : none * 221 ;* sideeffect : all * 222 ;* back : none * 223 ;*********************************************** 224 %macro startTimer 0 225 ;mov ax,03508h 226 ;int 21h 227 ;mov [word ptr Old08Irqseg],es 228 ;mov [word ptr Old08Irqofs],bx 229 ;mov ax,02508h 230 ;mov dx,offset irqHandler08 231 ;int 21h 232 233 mov bx, 3409 ; 1193180/3409 = 350 ticks per second (*!) 234 call setTimer 235 236 ; start timer event 237 mov ebx, 8400h ; Current Timer setup, Callback method 238 mov ecx, 1 ; 1 tick 239 mov edx, timer_callback ; timer callback service addr 240 mov eax, 33 ; 'systimer' 241 int 40h ; TRDOS 386 system call 242 jc loc_err_exit 243 244 mov [timer_event_number], al 245 %endmacro 246 247 ;*********************************************** 248 ;* description : stop timer interrupt * 249 ;* parameter : none * 250 ;* sideeffect : all * 251 ;* back : none * 252 ;*********************************************** 253 %macro stopTimer 0 254 ;push ds 255 ;xor bx,bx ; set timer to default 256 ;call setTimer ; 18.2 ticks per second 257 ;mov ax,02508h ; restore old IRQ-vector 258 ;lds dx,[Old08Irqptr] 259 ;int 21h 260 ;pop ds 261 262 xor bx, bx ; set timer to default (18.2 Hz) value 263 call setTimer 264 265 ; Stop timer event 266 movzx ebx, byte [timer_event_number] 267 ;and bl, bl 268 ;jz short r_t_m ; 0 = error (no timer event) 269 ; bh = 0 -> stop timer event 270 mov eax, 33 ; 'systimer' 271 int 40h ; TRDOS 386 system call 272 ;r_t_m: 273 %endmacro 274 275 ;*********************************************** 276 ;* description : start keyboard handler * 277 ;* parameter : none * 278 ;* sideeffect : all * 279 ;* back : none * 280 ;*********************************************** 281 %macro startKBDHandler 0 282 ;mov ax,03509h 283 ;int 21h 284 ;mov [word ptr Old09Irqseg],es 285 ;mov [word ptr Old09Irqofs],bx 286 ;mov ax,02509h 287 ;mov dx,offset irqHandler09 288 ;int 21h 289 290 ; TRDOS 386 already have a CRTL+BRK 291 ; preview feature to call 'sysexit' 292 ; /// nothing to do here ! /// 293 ; 10/12/2016 - Erdogan Tan 294 nop 295 %endmacro 296 297 ;*********************************************** 298 ;* description : stop keyboard handler * 299 ;* parameter : none * 300 ;* sideeffect : all * 301 ;* back : none * 302 ;*********************************************** 303 %macro stopKBDHandler 0 304 ;push ds 305 ;mov ax,02509h ; restore old IRQ-vector 306 ;lds dx,[Old09Irqptr] ; 307 ;int 21h 308 ;pop ds 309 310 ; TRDOS 386 already have a CRTL+BRK 311 ; preview feature to call 'sysexit' 312 ; /// nothing to do here ! /// 313 ; 10/12/2016 - Erdogan Tan 314 nop 315 %endmacro 316 317 ;*********************************************** 318 ;* description : zero null-initialized data * 319 ;* parameter : none * 320 ;* sideeffect : all * 321 ;* back : none * 322 ;*********************************************** 323 %macro nullData 0 324 ;mov di, nullstart 325 mov edi, nullstart 326 ;mov cx, nullend-nullstart 327 ;mov ecx, nullend-nullstart 328 xor eax, eax 329 ;rep stosb 330 ;mov ecx, (bss_end-nullstart)+3 ; 06/02/2017 331 ;shr cx, 2 332 ; 12/08/2017 333 mov ecx ((bss_end-nullstart)+3)/4 334 rep stosd 335 %endmacro 336 337 ;*********************************************** 338 ;* description : set textmode * 339 ;* parameter : none * 340 ;* sideeffect : all * 341 ;* back : none * 342 ;*********************************************** 343 %macro set80x25 0 344 mov ax, 3 345 ;int 10h ; - VIDEO - SET VIDEO MODE 346 ; AL = mode 347 int 31h ; TRDOS 386 Video interrupt 348 %endmacro 349 350 ;*********************************************** 351 ;* description : set gfx-mode 320x200 * 352 ;* parameter : none * 353 ;* sideeffect : all * 354 ;* back : none * 355 ;*********************************************** 356 %macro set320x200 0 357 mov ax, 13h 358 ;int 10h ; - VIDEO - SET VIDEO MODE 359 ; AL = mode 360 int 31h ; TRDOS 386 - Video interrupt 361 %endmacro 362 363 ;************************************************ 364 ;* description : calculate a smooth colorrange * 365 ;* parameter : none * 366 ;* sideeffect : all * 367 ;* back : none * 368 ;************************************************ 369 %macro makePalette 0 370 ;mov bx, 3 371 mov ebx, 3 372 mPcolor: 373 ;mov si, colors 374 mov esi, colors 375 mov edi, palette 376 xor dh, dh 377 lodsb 378 ;movzx cx, al 379 movzx ecx, al ; ?? 380 mPouter: 381 push ecx 382 mov cl, [esi] 383 mov ah, [ebx+esi] 384 sub ax, dx 385 push edx 386 cwd 387 idiv cx 388 pop edx 389 mPinner: 390 add dx, ax 391 mov [edi+ebx-1], dh 392 add di, 3 393 loop mPinner 394 add si, 4 395 pop ecx 396 loop mPouter 397 dec bx 398 jnz short mPcolor 399 %endmacro 400 401 ;************************************************** 402 ;* description : reset the GM-Port and switch to * 403 ;* UART mode. * 404 ;* parameter : none * 405 ;* sideeffect : dx,al * 406 ;* back : none * 407 ;************************************************** 408 %macro resetGM 0 409 mov dx, GMPort 410 mov al, 0FFh 411 ;out dx, al 412 413 mov ah, 1 ; out (byte) 414 int 34h ; TRDOS 386 - IOCTL interrupt 415 ; cl = 0 416 dec ah ; 0 417 ;sub cl, cl 418 resGMbusy1: 419 dec cl 420 jz short rGMerror ;{ timeout } 421 ;in al, dx ;{ read acknowledge } 422 423 ;mov ah, 0 ; in (byte) 424 int 34h ; TRDOS 386 - IOCTL interrupt 425 426 test al, 80h 427 jnz short resGMbusy1 428 dec dx 429 ;in al, dx 430 431 ;mov ah, 0 ; in (byte) 432 int 34h ; TRDOS 386 - IOCTL interrupt 433 434 cmp al, 0FEh 435 jne short rGMerror 436 inc dx ;{ switch into UART mode } 437 resGMbusy2: 438 ;in al, dx 439 440 ;mov ah, 0 ; in (byte) 441 int 34h ; TRDOS 386 - IOCTL interrupt 442 443 test al, 40h 444 jnz short resGMbusy2 445 mov al, 3Fh 446 ;out dx, al 447 448 ;mov ah, 1 ; out (byte) 449 inc ah ; 1 450 int 34h ; TRDOS 386 - IOCTL interrupt 451 rGMerror: 452 %endmacro 453 454 ;*********************************************** 455 ;* description : mute midi channels 0..15 * 456 ;* parameter : none * 457 ;* sideeffect : ax,cx * 458 ;* back : none * 459 ;*********************************************** 460 %macro silence 0 461 mov cx, 15 ; 0Fh 462 Siloop: 463 mov ax, cx 464 add al, CMD_CHANGEPARAM ; 0B0h 465 call writeGM 466 mov al, MOD_ALLNOTESOFF ; 7Bh 467 call writeGM 468 xor al, al 469 call writeGM 470 loop Siloop 471 Sinosound: 472 %endmacro 473 474 ;************************************************** 475 ;* description : create the reactor wall texture * 476 ;* parameter : none * 477 ;* sideeffect : ax,bx,cx,di,es * 478 ;* back : none * 479 ;* length : 45 bytes * 480 ;************************************************** 481 %macro reactorWall 0 482 ; 26/07/2017 483 movzx ebp, word [tseg] 484 shl ebp, 4 485 mov [_es], ebp 486 xor edi, edi 487 mov ecx, 4096 ; 1000h 488 rsmloop: 489 mov eax, edi 490 test al, 8 491 jle short rsnonot1 492 not al 493 rsnonot1: 494 and al, 15 ; 0Fh 495 mov ebx, eax 496 mov eax, edi 497 shr ax, 6 498 test al, 8 499 jle short rsnonot2 500 not al 501 rsnonot2: 502 and al, 15 ; 0Fh 503 cmp al, bl 504 jle short rstakeal 505 mov eax, ebx 506 rstakeal: 507 add al, 224 ; 0E0h 508 add edi, ebp 509 stosb 510 sub edi, ebp 511 loop rsmloop 512 %endmacro 513 514 ;*********************************************** 515 ;* description : calc background-fractal * 516 ;* parameter : none * 517 ;* sideeffect : ax,bx,cx,si,di,es * 518 ;* back : none * 519 ;*********************************************** 520 %macro createFrac2 0 521 ; 12/08/2017 522 ; 26/07/2017 523 movzx ebp, word [tseg+36] 524 shl ebp, 4 525 mov [_es], ebp 526 mov al, 20 ; 14h 527 call setFrac 528 mov edi, 64 529 ;mov ecx, 4096-64 ; 0FC0h 530 mov cx, 4096-64 531 mov ebx, 4 ; 16/12/2016 532 cF1loop: 533 ;mov bx, 4 534 call rnd 535 ; 12/08/2017 536 ;add edi, ebp 537 ;add al, [edi-64] ; byte [es:di-64] 538 ;add al, [edi-63] ; byte [es:di-63] 539 add al, [ebp+edi-64] 540 add al, [ebp+edi-63] 541 dec ax 542 shr ax, 1 543 ;stosb 544 ;sub edi, ebp 545 mov [ebp+edi], al 546 inc edi 547 loop cF1loop 548 %endmacro 549 550 ;*********************************************** 551 ;* description : calc random noise fractal * 552 ;* parameter : none * 553 ;* sideeffect : ax,bx,cx,si,di,es * 554 ;* back : none * 555 ;*********************************************** 556 %macro createFrac3 0 557 ; 26/07/2017 558 movzx ebp, word [tseg+38] 559 shl ebp, 4 560 mov [_es], ebp 561 mov al, 3 562 call setFrac 563 ;mov ecx, 4096 564 mov cx, 4096 ; 1000h 565 mov ebx, ecx 566 cF3loop: 567 ;mov bx, 4096 ; 1000h 568 call rnd 569 movzx edi, ax 570 inc byte [ebp+edi] 571 loop cF3loop 572 %endmacro 573 574 ;************************************************** 575 ;* description : init stars (positions and state)* 576 ;* parameter : none * 577 ;* sideeffect : eax,bx,cx,edx,si,di,es * 578 ;* back : none * 579 ;************************************************** 580 %macro initStars 0 581 ; 26/07/2017 582 ;mov cx, 30 ; 1Eh 583 ;mov ecx, 30 ; 584 mov cl, 30 585 mov edi, stars 586 xor ebx, ebx 587 mov [_es], ebx ; 0 588 iSloop: 589 mov bx, 256 ; 100h 590 call rnd 591 stosb 592 mov bx, 4096-(64*5) ; 0EC0h 593 add bx, 128 ; 80h 594 call rnd 595 add ax, 64 ; 40h 596 stosw 597 loop iSloop 598 %endmacro 599 600 ;*********************************************** 601 ;* description : add effects to fractals * 602 ;* parameter : none * 603 ;* sideeffect : ax,bx,cx,di,es * 604 ;* back : none * 605 ;*********************************************** 606 %macro effects 0 607 ; 26/07/2017 608 ; effects 609 ;mov cx, 26 ; 1Ah 610 ;mov ecx, 26 ; 611 mov cl, 26 612 mov esi, aE 613 ;mov si, aE 614 xor ebx, ebx 615 xor edi, edi 616 effmloop: 617 push ecx 618 mov bl, [esi] ; mseg+effect 619 mov dl, bl 620 shr dl, 4 621 and bl, 0Fh ; 15 622 ; 11/02/2017 623 shl bl, 1 624 ; 26/07/2017 625 movzx ebp, word [ebx+tseg] 626 shl ebp, 4 627 mov [_es], ebp 628 ; 629 movzx ecx, byte [esi+2] ; y1 630 effyloop: 631 movzx ebx, byte [esi+1] ; x1 632 effxloop: 633 mov edi, ecx 634 shl di, 6 635 ;add di, bx 636 add edi, ebx 637 mov al, dl 638 dec al 639 jz short effect1 640 dec al 641 jz short effect2 642 ;mov ax, bx 643 mov eax, ebx 644 ;add ax, cx 645 add eax, ecx 646 and al, 4 647 ;jz short effdonot 648 jz short effect1 649 mov al, 152 ; 98h 650 effdonot: 651 jmp short effect1 652 effect2: 653 mov al, [ebp+edi] ; 16/12/2016 654 effect1: 655 add al, [esi+5] ; value 656 mov [ebp+edi], al ; 16/12/2016 657 inc bl 658 cmp bl, [esi+3] ; x2 659 jle short effxloop 660 ;inc cx 661 inc cl 662 cmp cl, [esi+4] ; y2 663 jle short effyloop 664 add si, 6 665 pop ecx 666 loop effmloop 667 %endmacro 668 669 ;*********************************************** 670 ;* description : copy fractals and add value * 671 ;* parameter : none * 672 ;* sideeffect : al,cx,di,es,fs * 673 ;* back : none * 674 ;*********************************************** 675 %macro addFractals 0 676 ; 26/07/2017 677 ;mov si, aF 678 mov esi, aF 679 mov dl, 4 680 aFloop: 681 movzx ebx, dl 682 movzx ebp, word [ebx+tseg] ; es: 683 shl ebp, 4 684 mov [_es], ebp 685 xor edi, edi 686 lodsw 687 mov bl, al 688 ; 689 movzx ebp, word [ebx+tseg] ; fs: 690 shl ebp, 4 691 mov [_fs], ebp 692 ; 693 mov cx, 4096 ; 1000h 694 ;mov ecx, 4096 ; 695 mov ebx, [_es] 696 aFiloop: 697 mov al, [ebp+edi] ; [fs:di] 698 add al, ah 699 ;stosb 700 mov [ebx+edi], al 701 inc edi 702 loop aFiloop 703 ; 704 inc dl 705 inc dl 706 cmp dl, 30 707 jle short aFloop 708 %endmacro 709 710 ;*************************************************** 711 ;* description : calculate and initalize textures * 712 ;* parameter : none * 713 ;* sideeffect : al,cx,di,es,fs * 714 ;* back : none * 715 ;*************************************************** 716 %macro addLava 0 717 ; 28/07/2017 718 ; 26/07/2017 719 movzx ebp, word [tseg+22] 720 shl ebp, 4 721 mov [_es], ebp 722 ; 723 mov edi, 4095 ; 0FFFh 724 ;mov cx, 20 ; 14h 725 ;mov ecx, 20 ; 726 mov cl, 20 727 ;mov al, 94 ; 5Eh 728 mov eax, 94 729 aLyloop: 730 push ecx 731 shl cx, 3 732 aLxloop: 733 push edi 734 push eax 735 ;mov bx, 64 ; 40h 736 mov ebx, 64 737 call rnd 738 sub di, ax 739 ;sub edi, eax 740 pop eax 741 mov [ebp+edi], al ; 17/01/2017 742 pop edi 743 loop aLxloop 744 pop ecx 745 dec al 746 sub di, 64 ; 40h 747 loop aLyloop 748 %endmacro 749 750 ;*************************************************** 751 ;* description : calculate and initalize textures * 752 ;* parameter : none * 753 ;* sideeffect : al,cx,di,es,fs * 754 ;* back : none * 755 ;*************************************************** 756 %macro initTextures 0 757 ; 26/07/2017 758 ;mov bx, 34 ; 22h 759 mov ebx, 34 760 push 800 ; 320h 761 push 5 762 call createFrac1 763 ;mov bx, 32 ; 20h 764 mov ebx, 32 765 push 112 ; 70h 766 push 15 ; 0Fh 767 call createFrac1 768 createFrac2 769 createFrac3 770 initStars 771 reactorWall 772 addFractals 773 effects 774 addLava 775 %endmacro 776 777 ;************************************************** 778 ;* description : cycle "range" colors at "base" * 779 ;* parameter : none * 780 ;* sideeffect : ax,(bl),cx,si,di,es * 781 ;* back : none * 782 ;************************************************** 783 %macro colorCycle 0 784 ; 26/07/2017 785 786 base equ 6*32 787 range equ 32 788 789 mov dword [_es], 0 ; es = ds 790 791 mov edi, palette+(base*3) 792 mov esi, edi 793 lodsw 794 ;mov bl, [esi] ; works only with fire (no blue) 795 inc esi 796 ;mov cx, (range*3-3) 797 mov ecx, (range*3-3) 798 rep movsb 799 stosw 800 ;mov [edi], bl ; works only with fire (no blue) 801 %endmacro 802 803 ;*********************************************** 804 ;* description : animate the stars * 805 ;* parameter : none * 806 ;* sideeffect : ax,bx,cx,dl,si,di,es * 807 ;* back : none * 808 ;*********************************************** 809 %macro animStars 0 810 ; 26/07/2017 811 812 _base equ 7*32 813 814 movzx ebp, word [tseg+2] 815 shl ebp, 4 816 mov [_es], ebp 817 818 call clearFrac 819 820 ;mov ecx, 30 821 mov cl, 30 ; 1Eh 822 823 ;mov bx, stars 824 mov ebx, stars 825 aSoloop: 826 dec byte [ebx] 827 mov ah, [ebx] 828 and ah, 63 ; 3Fh 829 cmp ah, 31 ; 1Fh 830 jbe short aSnonot 831 not ah 832 and ah, 31 ; 1Fh 833 aSnonot: 834 shr ah, 1 835 ; 05/02/2017 836 movzx edi, word [ebx+1] 837 838 push ecx 839 push ebx 840 841 mov edx, 64-5 ; 3Bh 842 mov cx, _base*256+0 ; 0E000h 843 ; 26/07/2017 844 ;ebp = [_es] 845 call setstarbob 846 847 pop ebx 848 pop ecx 849 850 add bx, 3 851 loop aSoloop 852 %endmacro 853 854 ;*********************************************** 855 ;* description : calculate shading tab * 856 ;* parameter : none * 857 ;* sideeffect : ax,bl,cx,di,es * 858 ;* back : none * 859 ;*********************************************** 860 %macro calcShadeTab 0 861 ; 26/07/2017 862 mov dword [_es], 0 ; es = ds 863 864 mov edi, shadetab 865 xor bl, bl 866 cSolp: 867 inc bl 868 ;xor cx, cx 869 xor ecx, ecx 870 cSilp1: 871 mov al, cl 872 and al, 31 ; 1Fh 873 mul bl 874 add ax, ax 875 mov al, cl 876 and al, 224 ; 0E0h 877 add al, ah 878 stosb 879 inc cl 880 cmp cl, 192 ; 0C0h 881 jne short cSilp1 882 cSilp2: 883 mov al, cl 884 stosb 885 inc cl 886 jnz short cSilp2 887 cmp bl, 128 ; 80h 888 jne short cSolp 889 %endmacro 890 891 ;*********************************************** 892 ;* description : expand a song * 893 ;* parameter : si:song base adress * 894 ;* sideeffect : ax,bx,cx,dx,si,di * 895 ;* back : none * 896 ;*********************************************** 897 %macro expandSong 0 898 mov esi, credits 899 mov ebx, channels 900 mov edi, songdata 901 EPSwhile: lodsw 902 dec al 903 js short EPSendwhile 904 mov [ebx+channel.trk], al ; [ebx+2] 905 add al, CMD_CHANGEPRG ; 0C0h 906 call setinstr 907 mov [ebx+channel.adr], di ; [ebx+4] 908 call expand 909 xor al, al 910 stosb 911 add bx, 6 912 inc word [tracks] 913 jmp short EPSwhile 914 EPSendwhile: 915 %endmacro 916 917 ;*************************************************** 918 ;* description : parse the script,rotate and move * 919 ;* parameter : none * 920 ;* sideeffect : all * 921 ;* back : none * 922 ;*************************************************** 923 %macro scriptIt 0 924 ; 11/08/2017 925 926 ; scriptIt 927 ;mov cx, [ticker] 928 movzx ecx, word [ticker] ; 22/01/2017 929 mov word [ticker], 0 930 or cx, cx 931 jz sItickerNull 932 sImloop: 933 push ecx 934 mov esi, zspeed 935 ;mov si, zspeed 936 ;dec word [esi+10] ; scriptanz 937 dec word [scriptanz] 938 jns short sIwaitTimer 939 ;mov bx, [esi+8] ; scriptptr 940 ;movzx ebx, word [esi+8] 941 movzx ebx, word [scriptptr] 942 mov al, [ebx+script] 943 or al, al 944 jz _exit_ 945 mov bx, ax 946 and bl, 7 947 ;mov [esi+12], bl ; scriptins 948 mov [scriptins], bl 949 dec bl 950 jnz short sInegateTurn 951 ; (cmd = NEG ZSTEP) 952 neg word [zstep] 953 sInegateTurn: 954 and ax, 0F8h 955 add ax, ax 956 ;mov [esi+10], ax ; scriptanz 957 mov [scriptanz], ax 958 ;inc word [esi+8] ; scriptptr 959 inc word [scriptptr] 960 sIwaitTimer: 961 ;mov al, [esi+12] ; scriptins 962 mov al, [scriptins] 963 cbw 964 sub ch, ch ; 23/01/2017 965 dec ax 966 jnz short sInoturn 967 ; (cmd = NEG ZSTEP) 968 mov bx, [zstep] 969 ;add [esi+6], bx ; ozw 970 add [ozw], bx 971 jmp short sI_1 ; 23/01/2017 972 sInoturn: 973 mov cl, 3 974 sIrotateLoop: 975 dec ax 976 jnz short sInoIncrement 977 ; (cmd = INC SPEED or INC XSTEP or INC YSTEP) 978 inc word [esi] ; zspeed, oxw, oyw 979 jmp short sI_1 ; 23/01/2017 980 sInoIncrement: 981 dec ax 982 jnz short sInoDecrement 983 ; (cmd = DEC SPEED or DEC XSTEP or DEC YSTEP) 984 dec word [esi] ; zspeed, oxw, oyw 985 jmp short sI_1 ; 23/01/2017 986 sInoDecrement: 987 inc esi 988 inc esi 989 loop sIrotateLoop 990 sI_1: ; 23/01/2017 991 ;mov si, zspeed+2 ; oxw 992 mov si, oxw 993 mov cl, 3 994 ; 11/08/2017 (16 bits pushes) 995 ;xor eax, eax 996 sIpushloop: 997 lodsw ; oxw, oyw, ozw 998 sar ax, 2 999 push ax ; 16 bits push !! (esp = esp - 2) 1000 loop sIpushloop 1001 1002 imul ax, word [si-4], 16 ; [oyw]*16 1003 1004 push ax ; 16 bits push !! (esp = esp - 2) 1005 1006 ; [esp] = [oyw]*16 ; angle or YSTEP * 16 ? 1007 ; [esp+2] = [ozw] ; ZSTEP 1008 ; [esp+4] = [oyw] ; YSTEP 1009 ; [esp+6] = [oxw] ; XSTEP 1010 1011 call calcRotMat 1012 1013 mov cl, 3 1014 xor esi, esi 1015 sImoveLoop: 1016 fld dword [esi+owmat+24] 1017 fimul word [zspeed] 1018 fidiv word [CONST1792] 1019 fadd dword [esi+ob] 1020 fstp dword [esi+ob] 1021 add si, 4 1022 loop sImoveLoop 1023 pop ecx 1024 ;dec cx 1025 dec ecx ; 26/07/2017 1026 jnz sImloop 1027 sItickerNull: 1028 %endmacro 1029 1030 ;************************************************** 1031 ;* description : rotate all points from o -> rp * 1032 ;* parameter : none * 1033 ;* sideeffect : all * 1034 ;* back : none * 1035 ;************************************************** 1036 %macro rotation 0 1037 ; 26/07/2017 1038 ;;mov cx, [o+object.panz] 1039 ;movzx ecx, word [o+object.panz] 1040 movzx ecx, word [object.panz] 1041 ;mov esi, o+object.p 1042 mov esi, object.p 1043 mov edi, rp 1044 rotmlp: 1045 ;mov bx, wmat 1046 mov ebx, wmat 1047 mov dx, 3 1048 rotilp: 1049 fild word [esi+0] ; point.x 1050 fsub dword [ob+vector.x] 1051 fmul dword [ebx+0] 1052 fild word [esi+2] ; point.y 1053 fsub dword [ob+vector.y] 1054 fmul dword [ebx+4] 1055 fild word [esi+4] ; point.z 1056 fsub dword [ob+vector.z] 1057 fmul dword [ebx+8] 1058 ;fadd 1059 ;fadd 1060 faddp 1061 faddp 1062 fstp dword [edi] 1063 add di, 4 1064 ;add edi, 4 1065 add bx, 12 ; 0Ch 1066 dec dx 1067 jnz short rotilp 1068 add si, 8 ; next point (29/01/2017) 1069 ;add esi, 8 1070 loop rotmlp 1071 %endmacro 1072 1073 ;*********************************************** 1074 ;* description : sort faces by z-koord * 1075 ;* parameter : none * 1076 ;* sideeffect : ax,bx,cx,dx,si,di,es * 1077 ;* back : none * 1078 ;*********************************************** 1079 %macro sortFaces 0 1080 ; 26/07/2017 1081 mov dword [_es], 0 ; es = ds 1082 1083 mov edi, facei 1084 push edi ; facei 1085 ;mov esi, o+object.f 1086 ;;mov si, o+object.f 1087 mov esi, object.f 1088 mov eax, esi ; pointer to faces 1089 ;;mov cx, [o+object.fanz] 1090 ;movzx ecx, word [o+object.fanz] 1091 movzx ecx, word [object.fanz] 1092 1093 xor ebx, ebx 1094 sFmloop: 1095 fldz 1096 push ecx 1097 mov cx, 4 1098 sFiloop: 1099 imul bx, word [esi], 12 ; number of points (of face) 1100 inc esi 1101 inc esi 1102 fsub dword [ebx+rp+vector.z] 1103 loop sFiloop 1104 pop ecx 1105 fistp word [edi] ; z distance (face total) (29/01/2017) 1106 inc edi 1107 inc edi 1108 ;stosw ; face address (in 'o+object.f') 1109 stosw ; face address (in 'object.f') 1110 add ax, 10 1111 inc esi 1112 inc esi 1113 loop sFmloop 1114 ;push edi ; facei+4*(o+object.fanz-1) 1115 push edi ; facei+4*(object.fanz-1) 1116 call qsort 1117 %endmacro 1118 1119 ;*********************************************** 1120 ;* description : animate the door * 1121 ;* parameter : none * 1122 ;* sideeffect : ax,cx,si,di,es * 1123 ;* back : none * 1124 ;*********************************************** 1125 %macro animDoor 0 1126 ; 12/08/2017 1127 ; 26/07/2017 1128 ;mov ax, [doortimer] 1129 movzx eax, word [doortimer] 1130 or ax, ax 1131 jns short aDnounder 1132 xor ax, ax 1133 jmp short alreadydrawed 1134 aDnounder: 1135 cmp byte [once], 0 1136 jne short alreadydrawed 1137 inc byte [once] 1138 push eax 1139 starbackground 1140 pop eax 1141 alreadydrawed: 1142 cmp ax, 24 1143 jle short aDnoover 1144 mov ax, 24 1145 aDnoover: 1146 shl ax, 6 1147 ; 26/07/2017 1148 ;push dword [_ds] 1149 movzx ebp, word [tseg+26] 1150 shl ebp, 4 1151 mov [_es], ebp 1152 movzx ebx, word [tseg+30] 1153 shl ebx, 4 1154 mov [_ds], ebx 1155 mov esi, ebx 1156 ;add si, ax ; 16/01/2017 1157 add esi, eax 1158 mov edi, ebp 1159 ;mov cx, 1024 1160 mov ecx, 1024 1161 rep movsw 1162 mov esi, 2048 1163 sub si, ax 1164 push esi 1165 add esi, ebx ; 12/08/2017 1166 mov ch, 4 ; cx = 1024 1167 rep movsw 1168 pop edi 1169 add edi, ebp 1170 mov cx, ax 1171 xor eax, eax ; 0 1172 rep stosw 1173 ;pop dword [_ds] 1174 mov [_ds], eax ; ds = cs 1175 %endmacro 1176 1177 ;*********************************************** 1178 ;* description : play a tick of the song * 1179 ;* parameter : none * 1180 ;* sideeffect : ax,bx,cx,dx,si * 1181 ;* back : none * 1182 ;*********************************************** 1183 %macro playsong 0 1184 ;mov cx, [tracks] 1185 movzx ecx, word [tracks] 1186 ;mov si, channels 1187 mov esi, channels 1188 PSmloop: 1189 dec word [esi+channel.del] 1190 jg short PSdelayed 1191 mov ax, [esi+channel.trk] 1192 add al, CMD_NOTEOFF ; 80h 1193 call setnote 1194 ;mov bx, [esi+channel.adr] 1195 movzx ebx, word [esi+channel.adr] 1196 mov ah, 127 ; 7Fh 1197 cmp byte [ebx], 0 1198 jz short PStrackend 1199 mov ah, [ebx] 1200 mov [esi+channel.ln], ah 1201 mov al, [esi+channel.trk] 1202 add al, CMD_NOTEON ; 90h 1203 call setnote 1204 mov al, [ebx+1] 1205 mov bl, SONGSPEED ; 1Dh 1206 mul bl 1207 PStrackend: 1208 mov [esi+channel.del], ax 1209 add word [esi+channel.adr], 2 1210 PSdelayed: 1211 add si, 6 1212 loop PSmloop 1213 PSnosound: 1214 %endmacro 1215 1216 ;*********************************************** 1217 ;* description : dump palette to CRT * 1218 ;* parameter : bl:intensity (0..255) * 1219 ;* sideeffect : ax,es,di,cx,dx * 1220 ;* back : none * 1221 ;*********************************************** 1222 %macro setPalette2 0 1223 xor al, al 1224 mov dx, 3C8h 1225 ;out dx, al 1226 1227 mov ah, 1 ; out (byte) 1228 int 34h ; TRDOS 386 - IOCTL interrupt 1229 1230 inc dx 1231 mov esi, palette 1232 ;mov cx, 768 ; 300h 1233 mov ecx, 768 1234 _sp2loop: 1235 ;rep outsb 1236 1237 lodsb 1238 ;mov ah, 1 ; out (byte) 1239 ;mov dx, 3C9h 1240 ;out dx, al 1241 int 34h ; TRDOS 386 - IOCTL interrupt 1242 loop _sp2loop 1243 %endmacro 1244 1245 ;*********************************************** 1246 ;* description : clear starbackground * 1247 ;* parameter : none * 1248 ;* sideeffect : ax,es,di,cx,dx * 1249 ;* back : none * 1250 ;*********************************************** 1251 %macro cls 0 1252 ; 26/07/2017 1253 movzx edi, word [bseg] 1254 shl edi, 4 1255 mov [_es], edi 1256 ; 1257 mov esi, 0A0000h + (320*5) ; 0A0640h 1258 ;mov cx, 32000 ; 7D00h 1259 mov ecx, 32000 ; 1260 clsloop: 1261 lodsb 1262 stosb 1263 stosb 1264 loop clsloop 1265 %endmacro 1266 1267 ;*********************************************** 1268 ;* description : draw starbackground * 1269 ;* parameter : none * 1270 ;* sideeffect : ax,es,di,cx,dx * 1271 ;* back : none * 1272 ;*********************************************** 1273 %macro starbackground 0 1274 ; 26/07/2017 1275 movzx ebp, word [bseg] 1276 shl ebp, 4 1277 mov [_es], ebp 1278 1279 ;mov cx, 100 ; 64h 1280 mov ecx, 100 1281 starbackloop: 1282 push ecx 1283 mov bx, 320*155 ; 0C1C0h 1284 ;mov ebx, 320*155 1285 call rnd 1286 add ax, 320*20 ; 1900h 1287 ; 05/02/2017 1288 movzx edi, ax 1289 and ah, 7 1290 ;mov dx, 320-5 ; 13Bh 1291 mov edx, 320-5 ; ?? 1292 mov cx, 2 1293 ; 26/07/2017 1294 ;ebp = [_es] 1295 call setstarbob 1296 pop ecx 1297 loop starbackloop 1298 %endmacro 1299 1300 ;*********************************************** 1301 ;* description : create identity matrix * 1302 ;* parameter : ds:di address * 1303 ;* sideeffect : cx,di * 1304 ;* back : none * 1305 ;*********************************************** 1306 %macro identityMat 0 1307 ; 11/08/2017 1308 ; nwmat: 1309 ; dd 1,0,0,0,1,0,0,0,1 1310 mov ch, 2 1311 iMolp: 1312 mov cl, 2 1313 iMilp: 1314 fldz 1315 cmp ch, cl 1316 jne short iMwritezero 1317 fstp st0 1318 fld1 1319 iMwritezero: 1320 fstp dword [edi] 1321 ;add di, 4 1322 add edi, 4 ; 26/07/2017 1323 dec cl 1324 jns short iMilp 1325 dec ch 1326 jns short iMolp 1327 %endmacro 1328 1329 ;============================================================================= 1330 ; entry point 1331 ;============================================================================= 1332 ;*********************************************** 1333 ;* description : entry point * 1334 ;* parameter : none * 1335 ;* sideeffect : all * 1336 ;* back : none * 1337 ;*********************************************** 1338 1339 [ORG 0] 1340 1341 start: 1342 ; DIRECT VGA MEMORY ACCESS 1343 ;xor ebx, ebx 1344 00000000 B705 mov bh, 5 ; Direct access/map to VGA memory (0A0000h) 1345 ;mov eax, _video ; 1Fh 1346 00000002 66B81F00 mov ax, 1Fh ; sys _video ; TRDOS 386 Video functions 1347 00000006 CD40 int 40h ; TRDOS 386 system call 1348 1349 ; eax = 0A0000h 1350 00000008 21C0 and eax, eax 1351 0000000A 0F84BE060000 jz terminate ; error (eax = 0) 1352 1353 ; clear bss (18/12/2016) 1354 ;mov edi, bss_start ; 1355 00000010 66BF[E617] mov di, bss_start 1356 00000014 66B96D32 mov cx, (bss_end - bss_start)/4 1357 ;mov ecx, (bss_end - bss_start)/4 1358 00000018 31C0 xor eax, eax 1359 0000001A F3AB rep stosd 1360 1361 ; 26/07/2017 1362 ;mov edi, vseg ; 1363 0000001C 66BF[6838] mov di, vseg 1364 00000020 66B80010 mov ax, 1000h 1365 00000024 66AB stosw ; vseg ; virtual screen address 1366 00000026 66050010 add ax, 1000h 1367 0000002A 66AB stosw ; bseg ; star background address 1368 0000002C 66050010 add ax, 1000h 1369 00000030 66B91400 mov cx, 20 1370 segloop: ; texture addresses 1371 00000034 66AB stosw ; tseg + 1372 ;add ax, 100h 1373 00000036 FEC4 inc ah 1374 00000038 E2FA loop segloop 1375 1376 ; 09/04/2017 1377 0000003A 29C0 sub eax, eax 1378 0000003C BF00000100 mov edi, 10000h 1379 00000041 B900D00000 mov ecx, (65536+65536+(20*4096))/4 1380 00000046 F3AB rep stosd 1381 1382 ; 22/01/2017 1383 00000048 DBE3 fninit 1384 1385 ;nullData 1386 resetGM 1387 0000004A 66BA3103 <1> mov dx, GMPort 1388 0000004E B0FF <1> mov al, 0FFh 1389 <1> 1390 <1> 1391 00000050 B401 <1> mov ah, 1 1392 00000052 CD34 <1> int 34h 1393 <1> 1394 00000054 FECC <1> dec ah 1395 <1> 1396 <1> resGMbusy1: 1397 00000056 FEC9 <1> dec cl 1398 00000058 741C <1> jz short rGMerror 1399 <1> 1400 <1> 1401 <1> 1402 0000005A CD34 <1> int 34h 1403 <1> 1404 0000005C A880 <1> test al, 80h 1405 0000005E 75F6 <1> jnz short resGMbusy1 1406 00000060 664A <1> dec dx 1407 <1> 1408 <1> 1409 <1> 1410 00000062 CD34 <1> int 34h 1411 <1> 1412 00000064 3CFE <1> cmp al, 0FEh 1413 00000066 750E <1> jne short rGMerror 1414 00000068 6642 <1> inc dx 1415 <1> resGMbusy2: 1416 <1> 1417 <1> 1418 <1> 1419 0000006A CD34 <1> int 34h 1420 <1> 1421 0000006C A840 <1> test al, 40h 1422 0000006E 75FA <1> jnz short resGMbusy2 1423 00000070 B03F <1> mov al, 3Fh 1424 <1> 1425 <1> 1426 <1> 1427 00000072 FEC4 <1> inc ah 1428 00000074 CD34 <1> int 34h 1429 <1> rGMerror: 1430 expandSong 1431 00000076 BE[1C120000] <1> mov esi, credits 1432 0000007B BB[421B0000] <1> mov ebx, channels 1433 00000080 BF[84530000] <1> mov edi, songdata 1434 00000085 66AD <1> EPSwhile: lodsw 1435 00000087 FEC8 <1> dec al 1436 00000089 7823 <1> js short EPSendwhile 1437 0000008B 884302 <1> mov [ebx+channel.trk], al 1438 0000008E 04C0 <1> add al, CMD_CHANGEPRG 1439 00000090 E811080000 <1> call setinstr 1440 00000095 66897B04 <1> mov [ebx+channel.adr], di 1441 00000099 E84B070000 <1> call expand 1442 0000009E 30C0 <1> xor al, al 1443 000000A0 AA <1> stosb 1444 000000A1 6683C306 <1> add bx, 6 1445 000000A5 66FF05[40180000] <1> inc word [tracks] 1446 000000AC EBD7 <1> jmp short EPSwhile 1447 <1> EPSendwhile: 1448 1449 000000AE E8690F0000 call createWorld 1450 1451 set320x200 1452 000000B3 66B81300 <1> mov ax, 13h 1453 <1> 1454 <1> 1455 000000B7 CD31 <1> int 31h 1456 1457 000000B9 86E0 xchg ah, al ; ah = write string = 13h, 1458 ; al = write mode = 0 1459 000000BB 66BB1C00 mov bx, 1Ch 1460 000000BF BD[9D170000] mov ebp, omniscent 1461 000000C4 66B90900 mov cx, omniend-omniscent ; 9 1462 000000C8 66BA0601 mov dx, 106h 1463 ;int 10h ; - VIDEO - WRITE STRING (AT,XT286,PS,EGA,VGA) 1464 ; AL = mode, BL = attribute if AL bit 1 clear, BH = display page number 1465 ; DH,DL = row,column of starting cursor position, CX = length of string 1466 ; ES:BP -> start of string 1467 000000CC CD31 int 31h ; TRDOS 386 - Video interrupt 1468 1469 000000CE 6601CD add bp, cx 1470 000000D1 B110 mov cl, sancend-sanction ; 11h 1471 000000D3 66BA010C mov dx, 0C01h 1472 ;int 10h ; - VIDEO - WRITE STRING (AT,XT286,PS,EGA,VGA) 1473 ; AL = mode, BL = attribute if AL bit 1 clear, BH = display page number 1474 ; DH,DL = row,column of starting cursor position, CX = length of string 1475 ; ES:BP -> start of string 1476 000000D7 CD31 int 31h ; TRDOS 386 - Video interrupt 1477 1478 makePalette 1479 <1> 1480 000000D9 BB03000000 <1> mov ebx, 3 1481 <1> mPcolor: 1482 <1> 1483 000000DE BE[61130000] <1> mov esi, colors 1484 000000E3 BF[42180000] <1> mov edi, palette 1485 000000E8 30F6 <1> xor dh, dh 1486 000000EA AC <1> lodsb 1487 <1> 1488 000000EB 0FB6C8 <1> movzx ecx, al 1489 <1> mPouter: 1490 000000EE 51 <1> push ecx 1491 000000EF 8A0E <1> mov cl, [esi] 1492 000000F1 8A2433 <1> mov ah, [ebx+esi] 1493 000000F4 6629D0 <1> sub ax, dx 1494 000000F7 52 <1> push edx 1495 000000F8 6699 <1> cwd 1496 000000FA 66F7F9 <1> idiv cx 1497 000000FD 5A <1> pop edx 1498 <1> mPinner: 1499 000000FE 6601C2 <1> add dx, ax 1500 00000101 88741FFF <1> mov [edi+ebx-1], dh 1501 00000105 6683C703 <1> add di, 3 1502 00000109 E2F3 <1> loop mPinner 1503 0000010B 6683C604 <1> add si, 4 1504 0000010F 59 <1> pop ecx 1505 00000110 E2DC <1> loop mPouter 1506 00000112 664B <1> dec bx 1507 00000114 75C8 <1> jnz short mPcolor 1508 1509 initTextures 1510 <1> 1511 <1> 1512 00000116 BB22000000 <1> mov ebx, 34 1513 0000011B 6820030000 <1> push 800 1514 00000120 6A05 <1> push 5 1515 00000122 E89C070000 <1> call createFrac1 1516 <1> 1517 00000127 BB20000000 <1> mov ebx, 32 1518 0000012C 6A70 <1> push 112 1519 0000012E 6A0F <1> push 15 1520 00000130 E88E070000 <1> call createFrac1 1521 <1> createFrac2 1522 <2> 1523 <2> 1524 00000135 0FB72D[90380000] <2> movzx ebp, word [tseg+36] 1525 0000013C C1E504 <2> shl ebp, 4 1526 0000013F 892D[78530000] <2> mov [_es], ebp 1527 00000145 B014 <2> mov al, 20 1528 00000147 E869070000 <2> call setFrac 1529 0000014C BF40000000 <2> mov edi, 64 1530 <2> 1531 00000151 66B9C00F <2> mov cx, 4096-64 1532 00000155 BB04000000 <2> mov ebx, 4 1533 <2> cF1loop: 1534 <2> 1535 0000015A E8F1060000 <2> call rnd 1536 <2> 1537 <2> 1538 <2> 1539 <2> 1540 0000015F 02443DC0 <2> add al, [ebp+edi-64] 1541 00000163 02443DC1 <2> add al, [ebp+edi-63] 1542 00000167 6648 <2> dec ax 1543 00000169 66D1E8 <2> shr ax, 1 1544 <2> 1545 <2> 1546 0000016C 88443D00 <2> mov [ebp+edi], al 1547 00000170 47 <2> inc edi 1548 00000171 E2E7 <2> loop cF1loop 1549 <1> createFrac3 1550 <2> 1551 00000173 0FB72D[92380000] <2> movzx ebp, word [tseg+38] 1552 0000017A C1E504 <2> shl ebp, 4 1553 0000017D 892D[78530000] <2> mov [_es], ebp 1554 00000183 B003 <2> mov al, 3 1555 00000185 E82B070000 <2> call setFrac 1556 <2> 1557 0000018A 66B90010 <2> mov cx, 4096 1558 0000018E 89CB <2> mov ebx, ecx 1559 <2> cF3loop: 1560 <2> 1561 00000190 E8BB060000 <2> call rnd 1562 00000195 0FB7F8 <2> movzx edi, ax 1563 00000198 FE443D00 <2> inc byte [ebp+edi] 1564 0000019C E2F2 <2> loop cF3loop 1565 <1> initStars 1566 <2> 1567 <2> 1568 <2> 1569 0000019E B11E <2> mov cl, 30 1570 000001A0 BF[0C380000] <2> mov edi, stars 1571 000001A5 31DB <2> xor ebx, ebx 1572 000001A7 891D[78530000] <2> mov [_es], ebx 1573 <2> iSloop: 1574 000001AD 66BB0001 <2> mov bx, 256 1575 000001B1 E89A060000 <2> call rnd 1576 000001B6 AA <2> stosb 1577 000001B7 66BBC00E <2> mov bx, 4096-(64*5) 1578 000001BB 6681C38000 <2> add bx, 128 1579 000001C0 E88B060000 <2> call rnd 1580 000001C5 6683C040 <2> add ax, 64 1581 000001C9 66AB <2> stosw 1582 000001CB E2E0 <2> loop iSloop 1583 <1> reactorWall 1584 <2> 1585 000001CD 0FB72D[6C380000] <2> movzx ebp, word [tseg] 1586 000001D4 C1E504 <2> shl ebp, 4 1587 000001D7 892D[78530000] <2> mov [_es], ebp 1588 000001DD 31FF <2> xor edi, edi 1589 000001DF B900100000 <2> mov ecx, 4096 1590 <2> rsmloop: 1591 000001E4 89F8 <2> mov eax, edi 1592 000001E6 A808 <2> test al, 8 1593 000001E8 7E02 <2> jle short rsnonot1 1594 000001EA F6D0 <2> not al 1595 <2> rsnonot1: 1596 000001EC 240F <2> and al, 15 1597 000001EE 89C3 <2> mov ebx, eax 1598 000001F0 89F8 <2> mov eax, edi 1599 000001F2 66C1E806 <2> shr ax, 6 1600 000001F6 A808 <2> test al, 8 1601 000001F8 7E02 <2> jle short rsnonot2 1602 000001FA F6D0 <2> not al 1603 <2> rsnonot2: 1604 000001FC 240F <2> and al, 15 1605 000001FE 38D8 <2> cmp al, bl 1606 00000200 7E02 <2> jle short rstakeal 1607 00000202 89D8 <2> mov eax, ebx 1608 <2> rstakeal: 1609 00000204 04E0 <2> add al, 224 1610 00000206 01EF <2> add edi, ebp 1611 00000208 AA <2> stosb 1612 00000209 29EF <2> sub edi, ebp 1613 0000020B E2D7 <2> loop rsmloop 1614 <1> addFractals 1615 <2> 1616 <2> 1617 0000020D BE[3E140000] <2> mov esi, aF 1618 00000212 B204 <2> mov dl, 4 1619 <2> aFloop: 1620 00000214 0FB6DA <2> movzx ebx, dl 1621 00000217 0FB7AB[6C380000] <2> movzx ebp, word [ebx+tseg] 1622 0000021E C1E504 <2> shl ebp, 4 1623 00000221 892D[78530000] <2> mov [_es], ebp 1624 00000227 31FF <2> xor edi, edi 1625 00000229 66AD <2> lodsw 1626 0000022B 88C3 <2> mov bl, al 1627 <2> 1628 0000022D 0FB7AB[6C380000] <2> movzx ebp, word [ebx+tseg] 1629 00000234 C1E504 <2> shl ebp, 4 1630 00000237 892D[7C530000] <2> mov [_fs], ebp 1631 <2> 1632 0000023D 66B90010 <2> mov cx, 4096 1633 <2> 1634 00000241 8B1D[78530000] <2> mov ebx, [_es] 1635 <2> aFiloop: 1636 00000247 8A443D00 <2> mov al, [ebp+edi] 1637 0000024B 00E0 <2> add al, ah 1638 <2> 1639 0000024D 88043B <2> mov [ebx+edi], al 1640 00000250 47 <2> inc edi 1641 00000251 E2F4 <2> loop aFiloop 1642 <2> 1643 00000253 FEC2 <2> inc dl 1644 00000255 FEC2 <2> inc dl 1645 00000257 80FA1E <2> cmp dl, 30 1646 0000025A 7EB8 <2> jle short aFloop 1647 <1> effects 1648 <2> 1649 <2> 1650 <2> 1651 <2> 1652 0000025C B11A <2> mov cl, 26 1653 0000025E BE[A2130000] <2> mov esi, aE 1654 <2> 1655 00000263 31DB <2> xor ebx, ebx 1656 00000265 31FF <2> xor edi, edi 1657 <2> effmloop: 1658 00000267 51 <2> push ecx 1659 00000268 8A1E <2> mov bl, [esi] 1660 0000026A 88DA <2> mov dl, bl 1661 0000026C C0EA04 <2> shr dl, 4 1662 0000026F 80E30F <2> and bl, 0Fh 1663 <2> 1664 00000272 D0E3 <2> shl bl, 1 1665 <2> 1666 00000274 0FB7AB[6C380000] <2> movzx ebp, word [ebx+tseg] 1667 0000027B C1E504 <2> shl ebp, 4 1668 0000027E 892D[78530000] <2> mov [_es], ebp 1669 <2> 1670 00000284 0FB64E02 <2> movzx ecx, byte [esi+2] 1671 <2> effyloop: 1672 00000288 0FB65E01 <2> movzx ebx, byte [esi+1] 1673 <2> effxloop: 1674 0000028C 89CF <2> mov edi, ecx 1675 0000028E 66C1E706 <2> shl di, 6 1676 <2> 1677 00000292 01DF <2> add edi, ebx 1678 00000294 88D0 <2> mov al, dl 1679 00000296 FEC8 <2> dec al 1680 00000298 7414 <2> jz short effect1 1681 0000029A FEC8 <2> dec al 1682 0000029C 740C <2> jz short effect2 1683 <2> 1684 0000029E 89D8 <2> mov eax, ebx 1685 <2> 1686 000002A0 01C8 <2> add eax, ecx 1687 000002A2 2404 <2> and al, 4 1688 <2> 1689 000002A4 7408 <2> jz short effect1 1690 000002A6 B098 <2> mov al, 152 1691 <2> effdonot: 1692 000002A8 EB04 <2> jmp short effect1 1693 <2> effect2: 1694 000002AA 8A443D00 <2> mov al, [ebp+edi] 1695 <2> effect1: 1696 000002AE 024605 <2> add al, [esi+5] 1697 000002B1 88443D00 <2> mov [ebp+edi], al 1698 000002B5 FEC3 <2> inc bl 1699 000002B7 3A5E03 <2> cmp bl, [esi+3] 1700 000002BA 7ED0 <2> jle short effxloop 1701 <2> 1702 000002BC FEC1 <2> inc cl 1703 000002BE 3A4E04 <2> cmp cl, [esi+4] 1704 000002C1 7EC5 <2> jle short effyloop 1705 000002C3 6683C606 <2> add si, 6 1706 000002C7 59 <2> pop ecx 1707 000002C8 E29D <2> loop effmloop 1708 <1> addLava 1709 <2> 1710 <2> 1711 000002CA 0FB72D[82380000] <2> movzx ebp, word [tseg+22] 1712 000002D1 C1E504 <2> shl ebp, 4 1713 000002D4 892D[78530000] <2> mov [_es], ebp 1714 <2> 1715 000002DA BFFF0F0000 <2> mov edi, 4095 1716 <2> 1717 <2> 1718 000002DF B114 <2> mov cl, 20 1719 <2> 1720 000002E1 B85E000000 <2> mov eax, 94 1721 <2> aLyloop: 1722 000002E6 51 <2> push ecx 1723 000002E7 66C1E103 <2> shl cx, 3 1724 <2> aLxloop: 1725 000002EB 57 <2> push edi 1726 000002EC 50 <2> push eax 1727 <2> 1728 000002ED BB40000000 <2> mov ebx, 64 1729 000002F2 E859050000 <2> call rnd 1730 000002F7 6629C7 <2> sub di, ax 1731 <2> 1732 000002FA 58 <2> pop eax 1733 000002FB 88443D00 <2> mov [ebp+edi], al 1734 000002FF 5F <2> pop edi 1735 00000300 E2E9 <2> loop aLxloop 1736 00000302 59 <2> pop ecx 1737 00000303 FEC8 <2> dec al 1738 00000305 6683EF40 <2> sub di, 64 1739 00000309 E2DB <2> loop aLyloop 1740 1741 calcShadeTab 1742 <1> 1743 0000030B C705[78530000]0000- <1> mov dword [_es], 0 1744 00000313 0000 <1> 1745 <1> 1746 00000315 BF[9C610000] <1> mov edi, shadetab 1747 0000031A 30DB <1> xor bl, bl 1748 <1> cSolp: 1749 0000031C FEC3 <1> inc bl 1750 <1> 1751 0000031E 31C9 <1> xor ecx, ecx 1752 <1> cSilp1: 1753 00000320 88C8 <1> mov al, cl 1754 00000322 241F <1> and al, 31 1755 00000324 F6E3 <1> mul bl 1756 00000326 6601C0 <1> add ax, ax 1757 00000329 88C8 <1> mov al, cl 1758 0000032B 24E0 <1> and al, 224 1759 0000032D 00E0 <1> add al, ah 1760 0000032F AA <1> stosb 1761 00000330 FEC1 <1> inc cl 1762 00000332 80F9C0 <1> cmp cl, 192 1763 00000335 75E9 <1> jne short cSilp1 1764 <1> cSilp2: 1765 00000337 88C8 <1> mov al, cl 1766 00000339 AA <1> stosb 1767 0000033A FEC1 <1> inc cl 1768 0000033C 75F9 <1> jnz short cSilp2 1769 0000033E 80FB80 <1> cmp bl, 128 1770 00000341 75D9 <1> jne short cSolp 1771 1772 00000343 8925[C8370000] mov [oldstack], esp 1773 1774 startTimer 1775 <1> 1776 <1> 1777 <1> 1778 <1> 1779 <1> 1780 <1> 1781 <1> 1782 <1> 1783 00000349 66BB510D <1> mov bx, 3409 1784 0000034D E813050000 <1> call setTimer 1785 <1> 1786 <1> 1787 00000352 BB00840000 <1> mov ebx, 8400h 1788 00000357 B901000000 <1> mov ecx, 1 1789 0000035C BA[D7060000] <1> mov edx, timer_callback 1790 00000361 B821000000 <1> mov eax, 33 1791 00000366 CD40 <1> int 40h 1792 00000368 0F8215030000 <1> jc loc_err_exit 1793 <1> 1794 0000036E A2[67380000] <1> mov [timer_event_number], al 1795 startKBDHandler 1796 <1> 1797 <1> 1798 <1> 1799 <1> 1800 <1> 1801 <1> 1802 <1> 1803 <1> 1804 <1> 1805 <1> 1806 <1> 1807 <1> 1808 00000373 90 <1> nop 1809 cls 1810 <1> 1811 00000374 0FB73D[6A380000] <1> movzx edi, word [bseg] 1812 0000037B C1E704 <1> shl edi, 4 1813 0000037E 893D[78530000] <1> mov [_es], edi 1814 <1> 1815 00000384 BE40060A00 <1> mov esi, 0A0000h + (320*5) 1816 <1> 1817 00000389 B9007D0000 <1> mov ecx, 32000 1818 <1> clsloop: 1819 0000038E AC <1> lodsb 1820 0000038F AA <1> stosb 1821 00000390 AA <1> stosb 1822 00000391 E2FB <1> loop clsloop 1823 mainloop: 1824 ; 12/08/2017 1825 00000393 803D[99610000]00 cmp byte [tstatus], 0 1826 0000039A 0F87D9020000 ja _check_kbdb 1827 1828 000003A0 C605[99610000]01 mov byte [tstatus], 1 1829 1830 ; 26/07/2017 1831 ;mov ah, 1 ; Check keyboard buffer 1832 ;;int 16h ; Keyboard interrupt 1833 ;int 32h ; TRDOS 386 - Jeyboard interrupt 1834 ;jnz _exit_ ; exit 1835 1836 setPalette2 1837 000003A7 30C0 <1> xor al, al 1838 000003A9 66BAC803 <1> mov dx, 3C8h 1839 <1> 1840 <1> 1841 000003AD B401 <1> mov ah, 1 1842 000003AF CD34 <1> int 34h 1843 <1> 1844 000003B1 6642 <1> inc dx 1845 000003B3 BE[42180000] <1> mov esi, palette 1846 <1> 1847 000003B8 B900030000 <1> mov ecx, 768 1848 <1> _sp2loop: 1849 <1> 1850 <1> 1851 000003BD AC <1> lodsb 1852 <1> 1853 <1> 1854 <1> 1855 000003BE CD34 <1> int 34h 1856 000003C0 E2FB <1> loop _sp2loop 1857 1858 scriptIt 1859 <1> 1860 <1> 1861 <1> 1862 <1> 1863 000003C2 0FB70D[3E180000] <1> movzx ecx, word [ticker] 1864 000003C9 66C705[3E180000]00- <1> mov word [ticker], 0 1865 000003D1 00 <1> 1866 000003D2 6609C9 <1> or cx, cx 1867 000003D5 0F84D1000000 <1> jz sItickerNull 1868 <1> sImloop: 1869 000003DB 51 <1> push ecx 1870 000003DC BE[30180000] <1> mov esi, zspeed 1871 <1> 1872 <1> 1873 000003E1 66FF0D[3A180000] <1> dec word [scriptanz] 1874 000003E8 7940 <1> jns short sIwaitTimer 1875 <1> 1876 <1> 1877 000003EA 0FB71D[38180000] <1> movzx ebx, word [scriptptr] 1878 000003F1 8A83[1C170000] <1> mov al, [ebx+script] 1879 000003F7 08C0 <1> or al, al 1880 000003F9 0F8484020000 <1> jz _exit_ 1881 000003FF 6689C3 <1> mov bx, ax 1882 00000402 80E307 <1> and bl, 7 1883 <1> 1884 00000405 881D[3C180000] <1> mov [scriptins], bl 1885 0000040B FECB <1> dec bl 1886 0000040D 7507 <1> jnz short sInegateTurn 1887 <1> 1888 0000040F 66F71D[99170000] <1> neg word [zstep] 1889 <1> sInegateTurn: 1890 00000416 6625F800 <1> and ax, 0F8h 1891 0000041A 6601C0 <1> add ax, ax 1892 <1> 1893 0000041D 66A3[3A180000] <1> mov [scriptanz], ax 1894 <1> 1895 00000423 66FF05[38180000] <1> inc word [scriptptr] 1896 <1> sIwaitTimer: 1897 <1> 1898 0000042A A0[3C180000] <1> mov al, [scriptins] 1899 0000042F 6698 <1> cbw 1900 00000431 28ED <1> sub ch, ch 1901 00000433 6648 <1> dec ax 1902 00000435 7510 <1> jnz short sInoturn 1903 <1> 1904 00000437 668B1D[99170000] <1> mov bx, [zstep] 1905 <1> 1906 0000043E 66011D[36180000] <1> add [ozw], bx 1907 00000445 EB18 <1> jmp short sI_1 1908 <1> sInoturn: 1909 00000447 B103 <1> mov cl, 3 1910 <1> sIrotateLoop: 1911 00000449 6648 <1> dec ax 1912 0000044B 7505 <1> jnz short sInoIncrement 1913 <1> 1914 0000044D 66FF06 <1> inc word [esi] 1915 00000450 EB0D <1> jmp short sI_1 1916 <1> sInoIncrement: 1917 00000452 6648 <1> dec ax 1918 00000454 7505 <1> jnz short sInoDecrement 1919 <1> 1920 00000456 66FF0E <1> dec word [esi] 1921 00000459 EB04 <1> jmp short sI_1 1922 <1> sInoDecrement: 1923 0000045B 46 <1> inc esi 1924 0000045C 46 <1> inc esi 1925 0000045D E2EA <1> loop sIrotateLoop 1926 <1> sI_1: 1927 <1> 1928 0000045F 66BE[3218] <1> mov si, oxw 1929 00000463 B103 <1> mov cl, 3 1930 <1> 1931 <1> 1932 <1> sIpushloop: 1933 00000465 66AD <1> lodsw 1934 00000467 66C1F802 <1> sar ax, 2 1935 0000046B 6650 <1> push ax 1936 0000046D E2F6 <1> loop sIpushloop 1937 <1> 1938 0000046F 66676B44FC10 <1> imul ax, word [si-4], 16 1939 <1> 1940 00000475 6650 <1> push ax 1941 <1> 1942 <1> 1943 <1> 1944 <1> 1945 <1> 1946 <1> 1947 00000477 E8F90A0000 <1> call calcRotMat 1948 <1> 1949 0000047C B103 <1> mov cl, 3 1950 0000047E 31F6 <1> xor esi, esi 1951 <1> sImoveLoop: 1952 00000480 D986[DA170000] <1> fld dword [esi+owmat+24] 1953 00000486 DE0D[30180000] <1> fimul word [zspeed] 1954 0000048C DE35[0E120000] <1> fidiv word [CONST1792] 1955 00000492 D886[B6170000] <1> fadd dword [esi+ob] 1956 00000498 D99E[B6170000] <1> fstp dword [esi+ob] 1957 0000049E 6683C604 <1> add si, 4 1958 000004A2 E2DC <1> loop sImoveLoop 1959 000004A4 59 <1> pop ecx 1960 <1> 1961 000004A5 49 <1> dec ecx 1962 000004A6 0F852FFFFFFF <1> jnz sImloop 1963 <1> sItickerNull: 1964 1965 animDoor 1966 <1> 1967 <1> 1968 <1> 1969 000004AC 0FB705[9B170000] <1> movzx eax, word [doortimer] 1970 000004B3 6609C0 <1> or ax, ax 1971 000004B6 7905 <1> jns short aDnounder 1972 000004B8 6631C0 <1> xor ax, ax 1973 000004BB EB4B <1> jmp short alreadydrawed 1974 <1> aDnounder: 1975 000004BD 803D[3D180000]00 <1> cmp byte [once], 0 1976 000004C4 7542 <1> jne short alreadydrawed 1977 000004C6 FE05[3D180000] <1> inc byte [once] 1978 000004CC 50 <1> push eax 1979 <1> starbackground 1980 <2> 1981 000004CD 0FB72D[6A380000] <2> movzx ebp, word [bseg] 1982 000004D4 C1E504 <2> shl ebp, 4 1983 000004D7 892D[78530000] <2> mov [_es], ebp 1984 <2> 1985 <2> 1986 000004DD B964000000 <2> mov ecx, 100 1987 <2> starbackloop: 1988 000004E2 51 <2> push ecx 1989 000004E3 66BBC0C1 <2> mov bx, 320*155 1990 <2> 1991 000004E7 E864030000 <2> call rnd 1992 000004EC 66050019 <2> add ax, 320*20 1993 <2> 1994 000004F0 0FB7F8 <2> movzx edi, ax 1995 000004F3 80E407 <2> and ah, 7 1996 <2> 1997 000004F6 BA3B010000 <2> mov edx, 320-5 1998 000004FB 66B90200 <2> mov cx, 2 1999 <2> 2000 <2> 2001 000004FF E8BA020000 <2> call setstarbob 2002 00000504 59 <2> pop ecx 2003 00000505 E2DB <2> loop starbackloop 2004 00000507 58 <1> pop eax 2005 <1> alreadydrawed: 2006 00000508 6683F818 <1> cmp ax, 24 2007 0000050C 7E04 <1> jle short aDnoover 2008 0000050E 66B81800 <1> mov ax, 24 2009 <1> aDnoover: 2010 00000512 66C1E006 <1> shl ax, 6 2011 <1> 2012 <1> 2013 00000516 0FB72D[86380000] <1> movzx ebp, word [tseg+26] 2014 0000051D C1E504 <1> shl ebp, 4 2015 00000520 892D[78530000] <1> mov [_es], ebp 2016 00000526 0FB71D[8A380000] <1> movzx ebx, word [tseg+30] 2017 0000052D C1E304 <1> shl ebx, 4 2018 00000530 891D[74530000] <1> mov [_ds], ebx 2019 00000536 89DE <1> mov esi, ebx 2020 <1> 2021 00000538 01C6 <1> add esi, eax 2022 0000053A 89EF <1> mov edi, ebp 2023 <1> 2024 0000053C B900040000 <1> mov ecx, 1024 2025 00000541 F366A5 <1> rep movsw 2026 00000544 BE00080000 <1> mov esi, 2048 2027 00000549 6629C6 <1> sub si, ax 2028 0000054C 56 <1> push esi 2029 0000054D 01DE <1> add esi, ebx 2030 0000054F B504 <1> mov ch, 4 2031 00000551 F366A5 <1> rep movsw 2032 00000554 5F <1> pop edi 2033 00000555 01EF <1> add edi, ebp 2034 00000557 6689C1 <1> mov cx, ax 2035 0000055A 31C0 <1> xor eax, eax 2036 0000055C F366AB <1> rep stosw 2037 <1> 2038 0000055F A3[74530000] <1> mov [_ds], eax 2039 2040 ; 26/07/2017 2041 00000564 0FB73D[68380000] movzx edi, word [vseg] ; es = [vseg] 2042 0000056B C1E704 shl edi, 4 2043 0000056E 893D[78530000] mov [_es], edi 2044 00000574 0FB735[6A380000] movzx esi, word [bseg] ; ds = [bseg] 2045 0000057B C1E604 shl esi, 4 2046 0000057E 8935[74530000] mov [_ds], esi 2047 00000584 E858020000 call copyseg 2048 00000589 C705[74530000]0000- mov dword [_ds], 0 ; ds = cs 2049 00000591 0000 2050 2051 rotation 2052 <1> 2053 <1> 2054 <1> 2055 00000593 0FB70D[A21B0000] <1> movzx ecx, word [object.panz] 2056 <1> 2057 0000059A BE[A61B0000] <1> mov esi, object.p 2058 0000059F BF[743A0000] <1> mov edi, rp 2059 <1> rotmlp: 2060 <1> 2061 000005A4 BB[E8170000] <1> mov ebx, wmat 2062 000005A9 66BA0300 <1> mov dx, 3 2063 <1> rotilp: 2064 000005AD DF06 <1> fild word [esi+0] 2065 000005AF D825[B6170000] <1> fsub dword [ob+vector.x] 2066 000005B5 D80B <1> fmul dword [ebx+0] 2067 000005B7 DF4602 <1> fild word [esi+2] 2068 000005BA D825[BA170000] <1> fsub dword [ob+vector.y] 2069 000005C0 D84B04 <1> fmul dword [ebx+4] 2070 000005C3 DF4604 <1> fild word [esi+4] 2071 000005C6 D825[BE170000] <1> fsub dword [ob+vector.z] 2072 000005CC D84B08 <1> fmul dword [ebx+8] 2073 <1> 2074 <1> 2075 000005CF DEC1 <1> faddp 2076 000005D1 DEC1 <1> faddp 2077 000005D3 D91F <1> fstp dword [edi] 2078 000005D5 6683C704 <1> add di, 4 2079 <1> 2080 000005D9 6683C30C <1> add bx, 12 2081 000005DD 664A <1> dec dx 2082 000005DF 75CC <1> jnz short rotilp 2083 000005E1 6683C608 <1> add si, 8 2084 <1> 2085 000005E5 E2BD <1> loop rotmlp 2086 sortFaces 2087 <1> 2088 000005E7 C705[78530000]0000- <1> mov dword [_es], 0 2089 000005EF 0000 <1> 2090 <1> 2091 000005F1 BF[344D0000] <1> mov edi, facei 2092 000005F6 57 <1> push edi 2093 <1> 2094 <1> 2095 000005F7 BE[26280000] <1> mov esi, object.f 2096 000005FC 89F0 <1> mov eax, esi 2097 <1> 2098 <1> 2099 000005FE 0FB70D[A41B0000] <1> movzx ecx, word [object.fanz] 2100 <1> 2101 00000605 31DB <1> xor ebx, ebx 2102 <1> sFmloop: 2103 00000607 D9EE <1> fldz 2104 00000609 51 <1> push ecx 2105 0000060A 66B90400 <1> mov cx, 4 2106 <1> sFiloop: 2107 0000060E 666B1E0C <1> imul bx, word [esi], 12 2108 00000612 46 <1> inc esi 2109 00000613 46 <1> inc esi 2110 00000614 D8A3[7C3A0000] <1> fsub dword [ebx+rp+vector.z] 2111 0000061A E2F2 <1> loop sFiloop 2112 0000061C 59 <1> pop ecx 2113 0000061D DF1F <1> fistp word [edi] 2114 0000061F 47 <1> inc edi 2115 00000620 47 <1> inc edi 2116 <1> 2117 00000621 66AB <1> stosw 2118 00000623 6683C00A <1> add ax, 10 2119 00000627 46 <1> inc esi 2120 00000628 46 <1> inc esi 2121 00000629 E2DC <1> loop sFmloop 2122 <1> 2123 0000062B 57 <1> push edi 2124 0000062C E8DA010000 <1> call qsort 2125 2126 ;movzx ecx, word [o+object.fanz] 2127 00000631 0FB70D[A41B0000] movzx ecx, word [object.fanz] 2128 2129 00000638 BE[344D0000] mov esi, facei 2130 drawloop: 2131 ; 27/07/2017 2132 0000063D 66AD lodsw 2133 0000063F 66AD lodsw 2134 ;movzx ebx, ax ; face address in 'o+object.f' 2135 00000641 0FB7D8 movzx ebx, ax ; face address in 'object.f' 2136 ;pushad 2137 00000644 56 push esi 2138 00000645 51 push ecx 2139 00000646 E8A4060000 call drawclippedface 2140 0000064B 59 pop ecx 2141 0000064C 5E pop esi 2142 ;popad 2143 0000064D E2EE loop drawloop 2144 2145 0000064F 0FB735[68380000] movzx esi, word [vseg] ; ds = [vseg] 2146 00000656 C1E604 shl esi, 4 2147 00000659 8935[74530000] mov [_ds], esi 2148 2149 0000065F BF00000A00 mov edi, 0A0000h 2150 00000664 893D[78530000] mov [_es], edi ; es = 0A000h 2151 2152 0000066A E872010000 call copyseg 2153 2154 0000066F C705[74530000]0000- mov dword [_ds], 0 ; ds = cs ; 11/08/2017 2155 00000677 0000 2156 2157 _check_kbdb: 2158 00000679 B401 mov ah, 1 ; Check keyboard buffer 2159 0000067B CD32 int 32h ; TRDOS 386 Keyboard interrupt 2160 ;jnz _exit_ ; exit 2161 ;jmp mainloop 2162 0000067D 0F8410FDFFFF jz mainloop ; 11/02/2017 2163 loc_err_exit: 2164 _exit_: 2165 ; 26/07/2017 2166 00000683 C705[74530000]0000- mov dword [_ds], 0 ; ds = cs 2167 0000068B 0000 2168 0000068D 8B25[C8370000] mov esp, [oldstack] 2169 silence 2170 00000693 66B90F00 <1> mov cx, 15 2171 <1> Siloop: 2172 00000697 6689C8 <1> mov ax, cx 2173 0000069A 04B0 <1> add al, CMD_CHANGEPARAM 2174 0000069C E8DB010000 <1> call writeGM 2175 000006A1 B07B <1> mov al, MOD_ALLNOTESOFF 2176 000006A3 E8D4010000 <1> call writeGM 2177 000006A8 30C0 <1> xor al, al 2178 000006AA E8CD010000 <1> call writeGM 2179 000006AF E2E6 <1> loop Siloop 2180 <1> Sinosound: 2181 stopKBDHandler 2182 <1> 2183 <1> 2184 <1> 2185 <1> 2186 <1> 2187 <1> 2188 <1> 2189 <1> 2190 <1> 2191 <1> 2192 000006B1 90 <1> nop 2193 stopTimer 2194 <1> 2195 <1> 2196 <1> 2197 <1> 2198 <1> 2199 <1> 2200 <1> 2201 <1> 2202 000006B2 6631DB <1> xor bx, bx 2203 000006B5 E8AB010000 <1> call setTimer 2204 <1> 2205 <1> 2206 000006BA 0FB61D[67380000] <1> movzx ebx, byte [timer_event_number] 2207 <1> 2208 <1> 2209 <1> 2210 000006C1 B821000000 <1> mov eax, 33 2211 000006C6 CD40 <1> int 40h 2212 <1> 2213 ;restore_text_mode: 2214 set80x25 2215 000006C8 66B80300 <1> mov ax, 3 2216 <1> 2217 <1> 2218 000006CC CD31 <1> int 31h 2219 terminate: 2220 sys _exit ; INT 40h 2221 <1> 2222 <1> 2223 <1> 2224 <1> 2225 <1> %if %0 >= 2 2226 <1> mov ebx, %2 2227 <1> %if %0 >= 3 2228 <1> mov ecx, %3 2229 <1> %if %0 = 4 2230 <1> mov edx, %4 2231 <1> %endif 2232 <1> %endif 2233 <1> %endif 2234 000006CE B801000000 <1> mov eax, %1 2235 <1> 2236 000006D3 CD40 <1> int 40h 2237 here: 2238 000006D5 EBFE jmp short here 2239 2240 ;============================================================================== 2241 ; interrupt handler 2242 ;============================================================================== 2243 ;*********************************************** 2244 ;* description : timer routine * 2245 ;* parameter : none * 2246 ;* sideeffect : none * 2247 ;* back : none * 2248 ;*********************************************** 2249 2250 timer_callback: 2251 ; 12/08/2017 2252 ; 10/08/2017 2253 2254 playsong 2255 <1> 2256 000006D7 0FB70D[40180000] <1> movzx ecx, word [tracks] 2257 <1> 2258 000006DE BE[421B0000] <1> mov esi, channels 2259 <1> PSmloop: 2260 000006E3 66FF0E <1> dec word [esi+channel.del] 2261 000006E6 7F34 <1> jg short PSdelayed 2262 000006E8 668B4602 <1> mov ax, [esi+channel.trk] 2263 000006EC 0480 <1> add al, CMD_NOTEOFF 2264 000006EE E8A6010000 <1> call setnote 2265 <1> 2266 000006F3 0FB75E04 <1> movzx ebx, word [esi+channel.adr] 2267 000006F7 B47F <1> mov ah, 127 2268 000006F9 803B00 <1> cmp byte [ebx], 0 2269 000006FC 7416 <1> jz short PStrackend 2270 000006FE 8A23 <1> mov ah, [ebx] 2271 00000700 886603 <1> mov [esi+channel.ln], ah 2272 00000703 8A4602 <1> mov al, [esi+channel.trk] 2273 00000706 0490 <1> add al, CMD_NOTEON 2274 00000708 E88C010000 <1> call setnote 2275 0000070D 8A4301 <1> mov al, [ebx+1] 2276 00000710 B31D <1> mov bl, SONGSPEED 2277 00000712 F6E3 <1> mul bl 2278 <1> PStrackend: 2279 00000714 668906 <1> mov [esi+channel.del], ax 2280 00000717 6683460402 <1> add word [esi+channel.adr], 2 2281 <1> PSdelayed: 2282 0000071C 6683C606 <1> add si, 6 2283 00000720 E2C1 <1> loop PSmloop 2284 <1> PSnosound: 2285 2286 00000722 66FF05[3E180000] inc word [ticker] 2287 00000729 FE05[66380000] inc byte [twice] 2288 2289 ; 12/08/2017 2290 ;and byte [twice], 7 2291 ;jnz short tr_1 2292 2293 ; 12/08/2017 2294 ; (25 Hz is necessary for proper rendering...) 2295 ; (50 Hz was enough for DOS real mode 2296 ; but not enough for TRDOS 386 protected 2297 ; mode, for real computer and Virtual Box running.) 2298 2299 0000072F 8025[66380000]0F and byte [twice], 15 ; 23.333 Hz (350/15) 2300 00000736 756F jnz short tr_1 2301 2302 00000738 C605[99610000]00 mov byte [tstatus], 0 ; screen update (50 Hz) flag 2303 2304 colorCycle 2305 <1> 2306 <1> 2307 <1> base equ 6*32 2308 <1> range equ 32 2309 <1> 2310 0000073F C705[78530000]0000- <1> mov dword [_es], 0 2311 00000747 0000 <1> 2312 <1> 2313 00000749 BF[821A0000] <1> mov edi, palette+(base*3) 2314 0000074E 89FE <1> mov esi, edi 2315 00000750 66AD <1> lodsw 2316 <1> 2317 00000752 46 <1> inc esi 2318 <1> 2319 00000753 B95D000000 <1> mov ecx, (range*3-3) 2320 00000758 F3A4 <1> rep movsb 2321 0000075A 66AB <1> stosw 2322 <1> 2323 animStars 2324 <1> 2325 <1> 2326 <1> _base equ 7*32 2327 <1> 2328 0000075C 0FB72D[6E380000] <1> movzx ebp, word [tseg+2] 2329 00000763 C1E504 <1> shl ebp, 4 2330 00000766 892D[78530000] <1> mov [_es], ebp 2331 <1> 2332 0000076C E842010000 <1> call clearFrac 2333 <1> 2334 <1> 2335 00000771 B11E <1> mov cl, 30 2336 <1> 2337 <1> 2338 00000773 BB[0C380000] <1> mov ebx, stars 2339 <1> aSoloop: 2340 00000778 FE0B <1> dec byte [ebx] 2341 0000077A 8A23 <1> mov ah, [ebx] 2342 0000077C 80E43F <1> and ah, 63 2343 0000077F 80FC1F <1> cmp ah, 31 2344 00000782 7605 <1> jbe short aSnonot 2345 00000784 F6D4 <1> not ah 2346 00000786 80E41F <1> and ah, 31 2347 <1> aSnonot: 2348 00000789 D0EC <1> shr ah, 1 2349 <1> 2350 0000078B 0FB77B01 <1> movzx edi, word [ebx+1] 2351 <1> 2352 0000078F 51 <1> push ecx 2353 00000790 53 <1> push ebx 2354 <1> 2355 00000791 BA3B000000 <1> mov edx, 64-5 2356 00000796 66B900E0 <1> mov cx, _base*256+0 2357 <1> 2358 <1> 2359 0000079A E81F000000 <1> call setstarbob 2360 <1> 2361 0000079F 5B <1> pop ebx 2362 000007A0 59 <1> pop ecx 2363 <1> 2364 000007A1 6683C303 <1> add bx, 3 2365 000007A5 E2D1 <1> loop aSoloop 2366 2367 ;inc word [doortimer] 2368 tr_1: 2369 ; 12/08/2017 2370 ; (25 Hz is not ennough for final StarBackground) 2371 2372 000007A7 F605[66380000]07 test byte [twice], 7 ; 50 Hz 2373 000007AE 7507 jnz short tr_2 2374 2375 000007B0 66FF05[9B170000] inc word [doortimer] ; (animDoor, starbackground) 2376 tr_2: 2377 000007B7 B827000000 mov eax, 39 ; 'sysrele' 2378 000007BC CD40 int 40h ; TRDOS 386 system call 2379 2380 ;============================================================================== 2381 ; sub routines 2382 ;============================================================================== 2383 ;*********************************************** 2384 ;* description : draw a the starbob * 2385 ;* parameter : ds,es: source seg,dest seg * 2386 ;* sideeffect : ax,cx,si,di * 2387 ;* back : none * 2388 ;*********************************************** 2389 2390 setstarbob: 2391 ; 26/07/2017 2392 ;mov ebp, [_es] 2393 000007BE BE[5A140000] mov esi, bob 2394 000007C3 B305 mov bl, 5 2395 yloop: 2396 000007C5 B705 mov bh, 5 2397 xloop: 2398 000007C7 AC lodsb 2399 000007C8 28E0 sub al, ah 2400 000007CA 7E08 jle short aSnodraw 2401 000007CC 00E8 add al, ch 2402 000007CE D2E0 shl al, cl 2403 000007D0 88443D00 mov [ebp+edi], al ; mov [es:di], al 2404 aSnodraw: 2405 ;inc di 2406 000007D4 47 inc edi 2407 000007D5 FECF dec bh 2408 000007D7 75EE jnz short xloop 2409 000007D9 6601D7 add di, dx 2410 000007DC FECB dec bl 2411 000007DE 75E5 jnz short yloop 2412 000007E0 C3 retn 2413 2414 ;*********************************************** 2415 ;* description : copy 16000 longs ds --> es * 2416 ;* parameter : ds,es: source seg,dest seg * 2417 ;* sideeffect : ax,cx,si,di * 2418 ;* back : none * 2419 ;*********************************************** 2420 2421 copyseg: 2422 ;mov cx, 16000 ; 3E80h 2423 000007E1 B9803E0000 mov ecx, 16000 2424 000007E6 F3A5 rep movsd 2425 000007E8 C3 retn 2426 2427 ;*********************************************** 2428 ;* description : expand a part of the song * 2429 ;* parameter : si:base adress * 2430 ;* sideeffect : si,ax * 2431 ;* back : ax=si:new baseadress * 2432 ;*********************************************** 2433 2434 expand: 2435 000007E9 8A0E EPwhile: mov cl, [esi] 2436 000007EB 08C9 or cl, cl 2437 000007ED 7418 jz short EPendwhile 2438 000007EF 7912 jns short EPnote 2439 EPcall: 2440 000007F1 51 push ecx 2441 000007F2 56 push esi 2442 000007F3 46 inc esi 2443 000007F4 E8F0FFFFFF call expand 2444 000007F9 5E pop esi 2445 000007FA 59 pop ecx 2446 000007FB FEC1 inc cl 2447 000007FD 75F2 jnz short EPcall 2448 000007FF 89C6 mov esi, eax 2449 00000801 EBE6 jmp short EPwhile 2450 EPnote: 2451 00000803 66A5 movsw 2452 00000805 EBE2 jmp short EPwhile 2453 EPendwhile: 2454 00000807 46 inc esi 2455 00000808 89F0 mov eax, esi 2456 0000080A C3 retn 2457 2458 ;************************************************** 2459 ;* description : recursive index quicksort * 2460 ;* parameter : l,r:stack left and right border * 2461 ;* sideeffect : ax,bx,cx,dx,si,di * 2462 ;* back : none * 2463 ;************************************************** 2464 2465 qsort: 2466 ; 11/08/2017 2467 ; 07/04/2017 2468 ; 10/02/2017 2469 ; 29/01/2017 2470 2471 0000080B 58 pop eax ; get return address 2472 0000080C 59 pop ecx ; get 2. param r 2473 0000080D 5B pop ebx ; get 1. param l 2474 0000080E 50 push eax ; store return address 2475 2476 0000080F 39D9 cmp ecx, ebx 2477 00000811 7E3C jle short QSendrek 2478 00000813 89DE mov esi, ebx 2479 00000815 89CF mov edi, ecx 2480 00000817 668B16 mov dx, [esi] 2481 0000081A EB0A jmp short QSwhile2 2482 QSrepeat: 2483 0000081C 663916 QSwhile1: cmp [esi], dx 2484 0000081F 7E05 jle short QSwhile2 2485 00000821 83C604 add esi, 4 2486 00000824 EBF6 jmp short QSwhile1 2487 QSwhile2: 2488 00000826 663917 cmp [edi], dx 2489 00000829 7D05 jnl short QSwhile2e 2490 0000082B 83EF04 sub edi, 4 2491 0000082E EBF6 jmp short QSwhile2 2492 QSwhile2e: 2493 00000830 39FE cmp esi, edi 2494 ;jg short QSnoswap 2495 00000832 7F0D jg short _QSnoswap 2496 00000834 AD lodsd 2497 00000835 8707 xchg eax, [edi] 2498 00000837 8946FC mov [esi-4], eax 2499 0000083A 83EF04 sub edi, 4 2500 QSnoswap: 2501 0000083D 39FE cmp esi, edi 2502 0000083F 7EDB jle short QSrepeat 2503 _QSnoswap: 2504 00000841 56 push esi 2505 00000842 51 push ecx 2506 00000843 53 push ebx 2507 00000844 57 push edi 2508 00000845 E8C1FFFFFF call qsort 2509 0000084A E8BCFFFFFF call qsort 2510 QSendrek: 2511 0000084F C3 retn 2512 2513 ;************************************************* 2514 ;* description : returns a pseudo random number * 2515 ;* parameter : bx=range * 2516 ;* sideeffect : eax,edx,si * 2517 ;* back : ax=rnd(range) * 2518 ;************************************************* 2519 2520 rnd: 2521 00000850 BE[14120000] mov esi, randommul 2522 ;mov si, randommul 2523 00000855 AD lodsd 2524 00000856 F726 mul dword [esi] ; randomseed 2525 00000858 40 inc eax 2526 00000859 8906 mov [esi], eax ; randomseed 2527 0000085B 66AD lodsw 2528 0000085D 66AD lodsw 2529 0000085F 66F7E3 mul bx 2530 00000862 6692 xchg ax, dx 2531 00000864 C3 retn 2532 2533 ;************************************************ 2534 ;* description : set timer speed to 1193180/AX * 2535 ;* interrupts per second * 2536 ;* parameter : bx * 2537 ;* sideeffect : ax * 2538 ;* back : none * 2539 ;************************************************ 2540 2541 setTimer: ; set timer speed to 1193180/BX (TRDOS 386) 2542 00000865 B036 mov al, 36h 2543 ;out 43h, al ; Timer 8253-5 (AT: 8254.2). 2544 2545 00000867 B401 mov ah, 1 ; out (byte) 2546 00000869 66BA4300 mov dx, 43h 2547 0000086D CD34 int 34h ; TRDOS 386 - IOCTL interrupt 2548 2549 0000086F 88D8 mov al, bl 2550 ;out 40h, al ; Timer 8253-5 (AT: 8254.2). 2551 2552 00000871 66BA4000 mov dx, 40h 2553 ;mov ah, 1 ; out (byte) 2554 00000875 CD34 int 34h ; TRDOS 386 - IOCTL interrupt 2555 2556 00000877 88F8 mov al, bh 2557 ;out 40h, al ; Timer 8253-5 (AT: 8254.2). 2558 2559 ;mov ah, 1 ; out (byte) 2560 ;mov dx, 40h 2561 00000879 CD34 int 34h ; TRDOS 386 - IOCTL interrupt 2562 2563 0000087B C3 retn 2564 2565 ;*********************************************** 2566 ;* description : send a byte to the GM-Port * 2567 ;* parameter : al:midi command * 2568 ;* sideeffect : dx * 2569 ;* back : none * 2570 ;*********************************************** 2571 2572 writeGM: 2573 0000087C 66BA3103 mov dx, GMPort ; 331h 2574 00000880 51 push ecx 2575 00000881 50 push eax 2576 00000882 30C9 xor cl, cl 2577 busy: 2578 00000884 FEC9 dec cl 2579 00000886 7408 jz short timeOut 2580 ;in al, dx 2581 2582 00000888 B400 mov ah, 0 ; in (byte) 2583 0000088A CD34 int 34h ; TRDOS 386 - IOCTL interrupt 2584 2585 0000088C A840 test al, 40h 2586 0000088E 75F4 jnz short busy 2587 2588 timeOut: ; CODE XREF: writeGM+8j 2589 00000890 58 pop eax 2590 00000891 59 pop ecx 2591 00000892 664A dec dx 2592 ;out dx, al 2593 2594 00000894 B401 mov ah, 1 ; out (byte) 2595 00000896 CD34 int 34h ; TRDOS 386 - IOCTL interrupt 2596 2597 00000898 C3 retn 2598 2599 ;************************************************** 2600 ;* description : send NOTEON command, volume 127 * 2601 ;* parameter : al:channel;ah:note * 2602 ;* sideeffect : dx,al * 2603 ;* back : none * 2604 ;************************************************** 2605 2606 setnote: 2607 00000899 E808000000 call setinstr 2608 0000089E B07F mov al, 127 ; 7Fh 2609 000008A0 E8D7FFFFFF call writeGM 2610 000008A5 C3 retn 2611 2612 ;*********************************************** 2613 ;* description : send CHANGEPRG command * 2614 ;* parameter : al:channel;ah:instrument * 2615 ;* sideeffect : dx,al * 2616 ;* back : none * 2617 ;*********************************************** 2618 2619 setinstr: 2620 000008A6 E8D1FFFFFF call writeGM 2621 000008AB 88E0 mov al, ah 2622 000008AD E8CAFFFFFF call writeGM 2623 000008B2 C3 retn 2624 2625 ;************************************************** 2626 ;* description : clear/set the fractal es: to al * 2627 ;* parameter : al,es * 2628 ;* sideeffect : ax,cx,di,es * 2629 ;* back : none * 2630 ;************************************************** 2631 2632 clearFrac: 2633 000008B3 31C0 xor eax, eax 2634 setFrac: 2635 ; 26/07/2017 2636 ;xor di, di 2637 000008B5 8B3D[78530000] mov edi, [_es] 2638 ;mov cx, 4096 ; 1000h 2639 000008BB B900100000 mov ecx, 4096 2640 000008C0 F3AA rep stosb 2641 000008C2 C3 retn 2642 2643 ;*********************************************** 2644 ;* description : calc shade bob fractal * 2645 ;* parameter : es:seg;num,rad:stack * 2646 ;* sideeffect : all * 2647 ;* back : none * 2648 ;*********************************************** 2649 2650 createFrac1: 2651 ; 26/07/2017 2652 2653 ;; *mov ebx, 34 2654 ;; *push 800 ; 320h ; arg 2 2655 ;; *push 5 ; arg 1 2656 ;; *call createFrac1 2657 ;; *mov ebx, 32 ; 20h 2658 ;; *push 112 ; 70h ; arg 2 2659 ;; *push 15 ; 0Fh ; arg 1 2660 ;; *call createFrac1 2661 2662 rad equ 8 ; arg 1 in [esp+4] 2663 num equ 12 ; arg 2 in [esp+8] 2664 2665 000008C3 55 push ebp 2666 000008C4 89E5 mov ebp, esp 2667 ; 2668 ;movzx ebx, word [ebx+tseg] ; es: 2669 000008C6 668B9B[6C380000] mov bx, [ebx+tseg] 2670 000008CD C1E304 shl ebx, 4 2671 000008D0 891D[78530000] mov [_es], ebx 2672 000008D6 E8D8FFFFFF call clearFrac 2673 ;mov si, circletab 2674 000008DB BE[CC370000] mov esi, circletab 2675 ;mov dx, [ebp+rad] 2676 000008E0 8B5508 mov edx, [ebp+rad] 2677 ;movzx eax, dl 2678 ;mov eax, edx 2679 000008E3 88D0 mov al, dl 2680 000008E5 F6EA imul dl 2681 ;mov di, ax 2682 ;mov bx, ax 2683 000008E7 89C3 mov ebx, eax 2684 ;mov cx, dx 2685 ;add cx, cx 2686 000008E9 89D1 mov ecx, edx 2687 000008EB 01C9 add ecx, ecx 2688 CCTloop: 2689 000008ED 88D0 mov al, dl 2690 000008EF F6EA imul dl 2691 000008F1 66F7D8 neg ax 2692 ;add ax, di 2693 000008F4 6601D8 add ax, bx ; 16/01/2017 2694 000008F7 668906 mov [esi], ax 2695 000008FA DF06 fild word [esi] 2696 000008FC D9FA fsqrt 2697 000008FE DF1E fistp word [esi] 2698 00000900 46 inc esi 2699 00000901 46 inc esi 2700 00000902 664A dec dx 2701 00000904 E2E7 loop CCTloop 2702 2703 00000906 668B4D0C mov cx, [ebp+num] 2704 SBloop1: 2705 0000090A 51 push ecx 2706 ;mov ebx, 4096 ; 1000h 2707 0000090B 66BB0010 mov bx, 4096 2708 0000090F E83CFFFFFF call rnd 2709 00000914 0FB7F8 movzx edi, ax ; 05/02/2017 2710 ;mov esi, circletab 2711 00000917 66BE[CC37] mov si, circletab 2712 0000091B 668B4D08 mov cx, [ebp+rad] 2713 ;add cx, cx 2714 0000091F 01C9 add ecx, ecx 2715 00000921 8B1D[78530000] mov ebx, [_es] 2716 SBloop2: 2717 00000927 51 push ecx 2718 00000928 66AD lodsw 2719 0000092A 6689C1 mov cx, ax 2720 ;add cx, cx 2721 0000092D 01C9 add ecx, ecx 2722 0000092F 7410 jz short SBskip 2723 00000931 57 push edi 2724 00000932 6629C7 sub di, ax 2725 SBloop3: 2726 00000935 6681E7FF0F and di, 4095 ; 0FFFh 2727 0000093A FE043B inc byte [ebx+edi] ; 17/01/2017 2728 ;inc di 2729 0000093D 47 inc edi 2730 0000093E E2F5 loop SBloop3 2731 00000940 5F pop edi 2732 SBskip: 2733 00000941 6683C740 add di, 64 ; 40h 2734 00000945 59 pop ecx 2735 00000946 E2DF loop SBloop2 2736 00000948 59 pop ecx 2737 00000949 E2BF loop SBloop1 2738 0000094B 5D pop ebp 2739 0000094C C20800 ret 8 2740 2741 ;************************************************** 2742 ;* description : draw a perpective-texturemapped * 2743 ;* and g.-shaded n-sided polygon * 2744 ;* parameter : far ptr to poly, sides, textnum * 2745 ;* sideeffect : all * 2746 ;* back : none * 2747 ;* length : 700 bytes * 2748 ;************************************************** 2749 2750 scansubtextpoly: 2751 ; 12/08/2017 2752 ; 10/08/2017 2753 ; 26/07/2017 2754 ; 07/04/2017 2755 ; 30/01/2017 2756 2757 ;; *mov edi, dcf.p2 2758 ;; *push edi ; arg 3 ; 32 bits push ! 2759 ;; *push word [dcf.j] ; arg 2 ; 16 bits push !! 2760 ;; *push word [dcf.col] ; arg 1 ; 16 bits push !! 2761 ;; *call scansubtextpoly 2762 2763 ; 10/08/2017 (operand size bugfix, 8, 10, 12) 2764 col equ 8 ; arg 1, [esp+4] ; dcf.col value 2765 n equ 10 ; arg 2, [esp+6] ; dcf.j value 2766 pol equ 12 ; arg 3, [esp+8] ; dcf.p2 address 2767 2768 ; 12/08/2017 2769 ;enter 150, 0 ; 96h 2770 0000094F C8980000 enter 152, 0 ; 98h 2771 ; push ebp ; mov ebp, esp ; sub esp, 152 2772 2773 ; ebp - x 2774 sstp.edg equ -60 ; 90-150 ; edges * 3 2775 sstp.del equ -120 ; 30-150 ; edges * 3 2776 sstp.mx1 equ -122 ; 28-150 ; word 2777 sstp.mx2 equ -124 ; 26-150 ; word 2778 sstp.miny equ -126 ; 24-150 ; word 2779 sstp.maxy equ -128 ; 22-150 ; word 2780 sstp.y equ -130 ; 20-150 ; word 2781 sstp.l equ -132 ; 18-150 ; word 2782 sstp.r equ -134 ; 16-150 ; word 2783 sstp.uu1 equ -136 ; 14-150 ; word 2784 sstp.vv1 equ -138 ; 12-150 ; word 2785 sstp.uu2 equ -140 ; 10-150 ; word 2786 sstp.vv2 equ -142 ; 8-150 ; word 2787 sstp.ddu equ -144 ; 6-150 ; word 2788 sstp.ddv equ -146 ; 4-150 ; word 2789 ;sstp.dy equ -150 ; 0-150 ; dword 2790 sstp.dy equ -152 ; 0-152 ; dword 2791 ; 2792 2793 ; 21/01/2017 2794 00000953 B8FF7F0000 mov eax, 32767 2795 00000958 89C2 mov edx, eax 2796 0000095A 89C3 mov ebx, eax 2797 0000095C 66F7DB neg bx ; -32767 ; 8001h 2798 0000095F 89DE mov esi, ebx ; -32767 2799 2800 ;e di = 32 bit address (in stack) /// 18/01/2017 2801 00000961 8B7D0C mov edi, [ebp+pol] ; [ebp+12] ; dcf.p2 ; face structure 2802 2803 00000964 31C9 xor ecx, ecx 2804 minmax: 2805 00000966 663B4712 cmp ax, [edi+2+edge.e+edges.x] ; [edi+12h] 2806 0000096A 7E04 jle short noswap1 2807 0000096C 668B4712 mov ax, [edi+2+edge.e+edges.x] ; [edi+12h] 2808 noswap1: 2809 00000970 663B5F12 cmp bx, [edi+2+edge.e+edges.x] ; [edi+12h] 2810 00000974 7D04 jge short noswap2 2811 00000976 668B5F12 mov bx, [edi+2+edge.e+edges.x] ; [edi+12h] 2812 noswap2: 2813 0000097A 663B570C cmp dx, [edi+edge.py] ; [edi+0Ch] 2814 0000097E 7E12 jle short noswap3 2815 00000980 668B570C mov dx, [edi+edge.py] ; [edi+0Ch] 2816 00000984 66898D7CFFFFFF mov [ebp+sstp.l], cx 2817 0000098B 66898D7AFFFFFF mov [ebp+sstp.r], cx 2818 noswap3: 2819 00000992 663B770C cmp si, [edi+edge.py] ; [edi+0Ch] 2820 00000996 7D04 jge short noswap4 2821 00000998 668B770C mov si, [edi+edge.py] ; [edi+0Ch] 2822 noswap4: 2823 0000099C 6683C724 add di, 36 ; 24h 2824 ;inc cx 2825 ; 10/08/2017 2826 000009A0 41 inc ecx 2827 000009A1 663B4D0A cmp cx, [ebp+n] ; [ebp+10] 2828 ; dcf.j ; number of visible edges/points 2829 000009A5 75BF jne short minmax 2830 2831 000009A7 6683FB00 cmp bx, 0 2832 000009AB 0F8CE7020000 jl exitDraw 2833 000009B1 663D4001 cmp ax, XMAX ; 140h 2834 000009B5 0F8FDD020000 jg exitDraw 2835 2836 000009BB 6683FE15 cmp si, YMIN ; 15h 2837 000009BF 0F8CD3020000 jl exitDraw 2838 000009C5 6681FAB300 cmp dx, YMAX ; 0B3h 2839 000009CA 0F8FC8020000 jg exitDraw 2840 000009D0 66895582 mov [ebp+sstp.miny], dx 2841 000009D4 66897580 mov [ebp+sstp.maxy], si 2842 2843 ;{ down clipping } 2844 000009D8 66817D80B300 cmp word [ebp+sstp.maxy], YMAX ; 0B3h 2845 000009DE 7E06 jle short noclipdown 2846 000009E0 66C74580B300 mov word [ebp+sstp.maxy], YMAX ; 0B3h 2847 noclipdown: 2848 000009E6 668B4582 mov ax, [ebp+sstp.miny] 2849 000009EA 663B4580 cmp ax, [ebp+sstp.maxy] 2850 000009EE 0F84A4020000 je exitDraw 2851 000009F4 6689857EFFFFFF mov [ebp+sstp.y], ax 2852 ; 05/02/2017 2853 ;mov ebx, [ebp+col] ; [ebp+8] 2854 ; dcf.col ; shade/color index 2855 000009FB 668B5D08 mov bx, [ebp+col] ; 07/04/2017 2856 ; 26/07/2017 2857 000009FF 6601DB add bx, bx ; shl bx, 1 2858 ;movzx eax, word [vseg] 2859 00000A02 66A1[68380000] mov ax, [vseg] ; es = [vseg] 2860 00000A08 C1E004 shl eax, 4 2861 00000A0B A3[78530000] mov [_es], eax 2862 00000A10 0FB783[6C380000] movzx eax, word [ebx+tseg] ; fs = [ebx+tseg] 2863 00000A17 C1E004 shl eax, 4 2864 00000A1A A3[7C530000] mov [_fs], eax 2865 for: 2866 00000A1F 0FB7857EFFFFFF movzx eax, word [ebp+sstp.y] 2867 00000A26 663B4580 cmp ax, word [ebp+sstp.maxy] 2868 00000A2A 0F8F68020000 jg exitDraw 2869 00000A30 0F8487000000 je exitwhile2 2870 while1: 2871 ;mov ax, [ebp+sstp.y] 2872 ;cmp ax, [ebp+sstp.maxy] 2873 ;jge short while2 2874 ; 05/02/2017 2875 00000A36 666B9D7CFFFFFF24 imul bx, word [ebp+sstp.l], 36 2876 00000A3E 0FB7F3 movzx esi, bx 2877 00000A41 03750C add esi, [ebp+pol] ; [ebp+12] 2878 2879 00000A44 663B460C cmp ax, [esi+edge.py] ; [esi+0Ch] 2880 00000A48 752E jne short while2 2881 2882 00000A4A 668B9D7CFFFFFF mov bx, [ebp+sstp.l] 2883 00000A51 664B dec bx 2884 00000A53 7D06 jge short nounder 2885 00000A55 668B5D0A mov bx, [ebp+n] ; [ebp+10] 2886 ; dcf.j ; visible edges/points 2887 00000A59 664B dec bx 2888 nounder: 2889 00000A5B 66899D7CFFFFFF mov [ebp+sstp.l], bx 2890 00000A62 31FF xor edi, edi 2891 00000A64 E833020000 call calcDeltas 2892 00000A69 668B857EFFFFFF mov ax, [ebp+sstp.y] 2893 00000A70 663B4580 cmp ax, [ebp+sstp.maxy] 2894 00000A74 7D47 jge short exitwhile2 2895 00000A76 EBBE jmp short while1 2896 while2: 2897 ;mov ax, [ebp+sstp.y] 2898 00000A78 663B4580 cmp ax, [ebp+sstp.maxy] 2899 00000A7C 7D3F jge short exitwhile2 2900 ; 05/02/2017 2901 00000A7E 666B9D7AFFFFFF24 imul bx, word [ebp+sstp.r], 36 2902 00000A86 0FB7F3 movzx esi, bx 2903 00000A89 03750C add esi, [ebp+pol] ; [ebp+12] 2904 2905 00000A8C 663B460C cmp ax, [esi+edge.py] ; [esi+0Ch] 2906 00000A90 752B jne short exitwhile2 2907 2908 00000A92 668B9D7AFFFFFF mov bx, [ebp+sstp.r] 2909 00000A99 6643 inc bx 2910 00000A9B 663B5D0A cmp bx, [ebp+n] ; [ebp+10] 2911 00000A9F 7C02 jl short noover 2912 ;xor bx, bx 2913 00000AA1 31DB xor ebx, ebx 2914 noover: 2915 00000AA3 66899D7AFFFFFF mov [ebp+sstp.r], bx 2916 00000AAA BF14000000 mov edi, 20 ; 14h 2917 00000AAF E8E8010000 call calcDeltas 2918 ; 2919 00000AB4 668B857EFFFFFF mov ax, [ebp+sstp.y] 2920 00000ABB EBBB jmp short while2 2921 exitwhile2: 2922 ;{ up clipping } 2923 00000ABD 6683BD7EFFFFFF15 cmp word [ebp+sstp.y], YMIN ; 15h 2924 00000AC5 0F8CAE010000 jl clipup 2925 00000ACB 0FB75DC6 movzx ebx, word [ebp+sstp.edg+2+edges.x] 2926 00000ACF 66895D86 mov [ebp+sstp.mx1], bx 2927 00000AD3 0FB74DDA movzx ecx, word [ebp+sstp.edg+20+2+edges.x] 2928 00000AD7 66894D84 mov [ebp+sstp.mx2], cx 2929 00000ADB 6629D9 sub cx, bx 2930 00000ADE 0F8495010000 jz exitol 2931 00000AE4 66837D8400 cmp word [ebp+sstp.mx2], 0 2932 00000AE9 0F8E8A010000 jle exitol 2933 00000AEF 66817D864001 cmp word [ebp+sstp.mx1], XMAX ; 140h 2934 00000AF5 0F8F7E010000 jg exitol 2935 2936 00000AFB 66F7DB neg bx 2937 00000AFE 790B jns short myelse 2938 00000B00 6631DB xor bx, bx 2939 00000B03 EB0C jmp short myendif 2940 _nodivbyzero: 2941 00000B05 8B443DB0 mov eax, [ebp+edi+sstp.del+40] 2942 00000B09 EB1D jmp short nodivbyzero 2943 myelse: 2944 00000B0B 66C745860000 mov word [ebp+sstp.mx1], 0 2945 myendif: 2946 00000B11 BF10000000 mov edi, 16 ; 10h 2947 addloop1: 2948 ;{ calculate deltas } 2949 00000B16 8B443DD8 mov eax, [ebp+edi+sstp.edg+20] 2950 00000B1A 2B443DC4 sub eax, [ebp+edi+sstp.edg] 2951 00000B1E 99 cdq 2952 ;jcxz nodivbyzero 2953 00000B1F 67E3E3 jcxz _nodivbyzero 2954 00000B22 F7F9 idiv ecx 2955 00000B24 89443DB0 mov [ebp+edi+sstp.del+40], eax 2956 nodivbyzero: 2957 ;{ left clipping } 2958 00000B28 8B443DB0 mov eax, [ebp+edi+sstp.del+40] 2959 00000B2C F7EB imul ebx 2960 00000B2E 03443DC4 add eax, [ebp+edi+sstp.edg] 2961 00000B32 89443DEC mov [ebp+edi+sstp.edg+40], eax 2962 00000B36 6683EF04 sub di, 4 2963 00000B3A 75DA jnz short addloop1 2964 2965 00000B3C 668B45C0 mov ax, [ebp+sstp.del+40+16] 2966 00000B40 66A3[BF110000] mov [dels_pos_w], ax 2967 2968 ;{ right clipping } 2969 00000B46 66817D844001 cmp word [ebp+sstp.mx2], XMAX 2970 00000B4C 7E06 jle short norightclip 2971 00000B4E 66C745844001 mov word [ebp+sstp.mx2], XMAX 2972 norightclip: 2973 00000B54 6669BD7EFFFFFF4001 imul di, word [ebp+sstp.y], 320 2974 00000B5D 66037D86 add di, [ebp+sstp.mx1] 2975 2976 00000B61 66BB0001 mov bx, 256 ; 100h 2977 00000B65 8B45F0 mov eax, [ebp+sstp.edg+40+edges.u] 2978 00000B68 F7EB imul ebx 2979 00000B6A F77DF8 idiv dword [ebp+sstp.edg+40+edges.w] 2980 00000B6D 66898574FFFFFF mov [ebp+sstp.uu2], ax 2981 00000B74 8B45F4 mov eax, [ebp+sstp.edg+40+edges.v] 2982 00000B77 F7EB imul ebx 2983 00000B79 F77DF8 idiv dword [ebp+sstp.edg+40+edges.w] 2984 00000B7C 66898572FFFFFF mov [ebp+sstp.vv2], ax 2985 outloop: 2986 00000B83 668B4D84 mov cx, [ebp+sstp.mx2] 2987 00000B87 662B4D86 sub cx, [ebp+sstp.mx1] 2988 00000B8B 0F8EE8000000 jle exitol 2989 00000B91 6683F910 cmp cx, SUBRANGE ; 10h 2990 00000B95 7E04 jle short lastSeg 2991 00000B97 66B91000 mov cx, SUBRANGE ; 10h 2992 lastSeg: 2993 ;{ uu1:=uu2 } 2994 ;{ vv1:=vv2 } 2995 00000B9B 8B8572FFFFFF mov eax, [ebp+sstp.vv2] 2996 00000BA1 898576FFFFFF mov [ebp+sstp.vv1], eax 2997 2998 00000BA7 8B45B4 mov eax, [ebp+sstp.del+40+edges.u] 2999 00000BAA F7E9 imul ecx 3000 00000BAC 0145F0 add [ebp+sstp.edg+40+edges.u], eax 3001 00000BAF 8B45B8 mov eax, [ebp+sstp.del+40+edges.v] 3002 00000BB2 F7E9 imul ecx 3003 00000BB4 0145F4 add [ebp+sstp.edg+40+edges.v], eax 3004 00000BB7 8B45BC mov eax, [ebp+sstp.del+40+edges.w] 3005 00000BBA F7E9 imul ecx 3006 00000BBC 0145F8 add [ebp+sstp.edg+40+edges.w], eax 3007 3008 00000BBF 66BB0001 mov bx, 256 ; 100h 3009 00000BC3 8B45F0 mov eax, [ebp+sstp.edg+40+edges.u] 3010 00000BC6 F7EB imul ebx 3011 00000BC8 F77DF8 idiv dword [ebp+sstp.edg+40+edges.w] 3012 00000BCB 66898574FFFFFF mov [ebp+sstp.uu2], ax 3013 00000BD2 8B45F4 mov eax, [ebp+sstp.edg+40+edges.v] 3014 00000BD5 F7EB imul ebx 3015 00000BD7 F77DF8 idiv dword [ebp+sstp.edg+40+edges.w] 3016 00000BDA 66898572FFFFFF mov [ebp+sstp.vv2], ax 3017 3018 00000BE1 668B8574FFFFFF mov ax, [ebp+sstp.uu2] 3019 00000BE8 662B8578FFFFFF sub ax, [ebp+sstp.uu1] 3020 00000BEF 6699 cwd 3021 00000BF1 66F7F9 idiv cx 3022 00000BF4 66A3[C1110000] mov [ddu_pos_w], ax 3023 3024 00000BFA 668B8572FFFFFF mov ax, [ebp+sstp.vv2] 3025 00000C01 662B8576FFFFFF sub ax, [ebp+sstp.vv1] 3026 00000C08 6699 cwd 3027 00000C0A 66F7F9 idiv cx 3028 00000C0D 66A3[C3110000] mov [ddv_pos_w], ax 3029 3030 00000C13 668BB576FFFFFF mov si, [ebp+sstp.vv1] 3031 00000C1A 668B9578FFFFFF mov dx, [ebp+sstp.uu1] 3032 00000C21 668B45FC mov ax, [ebp+sstp.edg+40+16] 3033 innerloop: 3034 ; 05/02/2017 3035 00000C25 0FB7DE movzx ebx, si 3036 00000C28 30DB xor bl, bl 3037 00000C2A 66C1EB02 shr bx, 2 3038 00000C2E 00F3 add bl, dh 3039 00000C30 031D[7C530000] add ebx, [_fs] 3040 00000C36 0FB61B movzx ebx, byte [ebx] ; [fs:bx] 3041 00000C39 08DB or bl, bl 3042 00000C3B 7415 jz short dels_pos 3043 00000C3D 88E7 mov bh, ah 3044 00000C3F 8A9B[9C610000] mov bl, [ebx+shadetab] 3045 3046 00000C45 56 push esi 3047 00000C46 0FB7F7 movzx esi, di 3048 00000C49 0335[78530000] add esi, [_es] 3049 00000C4F 881E mov [esi], bl ; [es:di] 3050 00000C51 5E pop esi 3051 dels_pos: 3052 00000C52 660305[BF110000] add ax, [dels_pos_w] ;{word ptr dels} 3053 ddu_pos: 3054 00000C59 660315[C1110000] add dx, [ddu_pos_w] ;{word ptr ddu } 3055 ddv_pos: 3056 00000C60 660335[C3110000] add si, [ddv_pos_w] ;{word ptr ddv } 3057 3058 00000C67 6647 inc di 3059 00000C69 E2BA loop innerloop 3060 3061 00000C6B 668945FC mov [ebp+sstp.edg+40+16], ax 3062 00000C6F 6683458610 add word [ebp+sstp.mx1], SUBRANGE 3063 00000C74 E90AFFFFFF jmp outloop 3064 exitol: 3065 00000C79 BF24000000 clipup: mov edi, 36 ; 24h 3066 addloop: 3067 00000C7E 8B443D88 mov eax, [ebp+edi+sstp.del] 3068 00000C82 01443DC4 add [ebp+edi+sstp.edg], eax 3069 00000C86 6683EF04 sub di, 4 3070 00000C8A 79F2 jns short addloop 3071 00000C8C 66FF857EFFFFFF inc word [ebp+sstp.y] 3072 00000C93 E987FDFFFF jmp for 3073 exitDraw: 3074 ; 12/08/2017 3075 00000C98 C9 leave 3076 ; mov esp, ebp ; pop ebp 3077 ; 10/08/2017 3078 00000C99 C20800 ret 8 ; word, word, dword 3079 3080 ;*************************************************** 3081 ;* description : calc deltas for vertical interp. * 3082 ;* parameter : none * 3083 ;* sideeffect : all * 3084 ;*************************************************** 3085 3086 calcDeltas: 3087 ; 12/08/2017 3088 ; 26/07/2017 3089 00000C9C 666BD324 imul dx, bx, 36 3090 00000CA0 89F3 mov ebx, esi 3091 00000CA2 0FB7F2 movzx esi, dx 3092 00000CA5 03750C add esi, [ebp+pol] ; [ebp+12] 3093 ; 3094 00000CA8 668B460C mov ax, [esi+12] 3095 00000CAC 662B857EFFFFFF sub ax, [ebp+sstp.y] 3096 00000CB3 0FBFC0 movsx eax, ax 3097 00000CB6 898568FFFFFF mov [ebp+sstp.dy], eax 3098 ;mov ecx, 5 3099 00000CBC 66B90500 mov cx, 5 3100 cDloop: 3101 00000CC0 8B5310 mov edx, [ebx+16] 3102 00000CC3 89543DC4 mov [ebp+edi+sstp.edg], edx 3103 00000CC7 8B4610 mov eax, [esi+16] 3104 00000CCA 29D0 sub eax, edx 3105 00000CCC 99 cdq 3106 00000CCD 6683BD68FFFFFF00 cmp word [ebp+sstp.dy], 0 3107 00000CD5 740A je short cDskip 3108 00000CD7 F7BD68FFFFFF idiv dword [ebp+sstp.dy] 3109 00000CDD 89443D88 mov [ebp+edi+sstp.del], eax 3110 cDskip: 3111 ;mov dx, 4 3112 ;add di, dx 3113 ;add si, dx 3114 ;add bx, dx 3115 3116 00000CE1 BA04000000 mov edx, 4 3117 00000CE6 01D7 add edi, edx ; +4 3118 00000CE8 01D6 add esi, edx ; +4 3119 00000CEA 01D3 add ebx, edx ; +4 3120 3121 00000CEC E2D2 loop cDloop 3122 00000CEE C3 retn 3123 3124 ;************************************************ 3125 ;* description : clip a poly at the viewplane, * 3126 ;* project and draw it * 3127 ;* parameter : bx:adress of the face * 3128 ;* sideeffect : all * 3129 ;* back : none * 3130 ;************************************************ 3131 3132 drawclippedface: 3133 ; 11/08/2017 3134 ; 27/07/2017 3135 ; 06/02/2017 3136 3137 dcf.d equ -2 ; word 3138 dcf.h equ -4 ; word 3139 dcf.j equ -6 ; word 3140 dcf.col equ -8 ; word 3141 dcf.is_in equ -10 ; byte 3142 3143 dcf.p0 equ -192 ; poly (5*36 bytes) 3144 dcf.p2 equ -372 ; poly (5*36 bytes) 3145 3146 00000CEF C8740100 enter 372, 0 ; 174h 3147 ; push ebp ; mov ebp, esp ; sub esp, 372 3148 3149 ;mov si, uvtab 3150 00000CF3 BE[78140000] mov esi, uvtab 3151 00000CF8 31FF xor edi, edi 3152 ;mov ecx, 4 3153 00000CFA 66B90400 mov cx, 4 3154 dCFinitloop: 3155 ;push ebx ; face addr (in 'o+object.f')(29/01/2017) 3156 00000CFE 53 push ebx ; face addr (in 'object.f') 3157 ;movzx ebx, word [ebx] 3158 00000CFF 668B1B mov bx, [ebx] ; point index into 'rp:' ? (29/01/2017) 3159 3160 00000D02 53 push ebx 3161 00000D03 666BDB0C imul bx, bx, 12 ; (point vector size = 12 bytes) 3162 00000D07 81C3[743A0000] add ebx, rp ; addr of rotated point vects (29/01/2017) 3163 00000D0D 8B03 mov eax, [ebx] 3164 ; vector(4-cx).x 3165 00000D0F 89843D40FFFFFF mov [ebp+edi+dcf.p0+0], eax 3166 ; vector(4-cx).y 3167 00000D16 8B4304 mov eax, [ebx+4] 3168 00000D19 89843D44FFFFFF mov [ebp+edi+dcf.p0+4], eax 3169 3170 00000D20 D94308 fld dword [ebx+8] 3171 ; vector(4-cx).z 3172 00000D23 D9943D48FFFFFF fst dword [ebp+edi+dcf.p0+8] 3173 00000D2A DF5DFC fistp word [ebp+dcf.h] ; dcf.h = z distance 3174 00000D2D 5B pop ebx 3175 3176 00000D2E 668B45FC mov ax, [ebp+dcf.h] 3177 00000D32 66050002 add ax, 512 ; 200h 3178 00000D36 0F8874010000 js dCFbackclip ; not visible ? (29/01/2017) 3179 3180 00000D3C 663DFF01 cmp ax, 511 ; 1FFh 3181 00000D40 7E04 jle short intensityOK 3182 00000D42 66B8FF01 mov ax, 511 ; 1FFh ; maximum z distance (dept) ? 3183 intensityOK: 3184 00000D46 66C1E303 shl bx, 3 ; point index * 8 3185 00000D4A 31D2 xor edx, edx 3186 00000D4C 66C1E007 shl ax, 7 3187 ;mul word [ebx+o+6+object.p] ; [ebx+o+6+4] 3188 00000D50 66F7A3[AC1B0000] mul word [ebx+6+object.p] ; 10/02/2017 3189 ; edges(4-cx).s 3190 00000D57 89943D60FFFFFF mov [ebp+edi+dcf.p0+32], edx 3191 3192 00000D5E 30E4 xor ah, ah 3193 00000D60 8A4604 mov al, [esi+4] 3194 00000D63 C1E010 shl eax, 16 ; 10h 3195 ; edges(4-cx).v 3196 00000D66 89843D58FFFFFF mov [ebp+edi+dcf.p0+24], eax 3197 3198 00000D6D AC lodsb 3199 00000D6E C1E010 shl eax, 16 ; 10h 3200 ; edges(4-cx).u 3201 00000D71 89843D54FFFFFF mov [ebp+edi+dcf.p0+20], eax 3202 3203 00000D78 5B pop ebx 3204 ;inc bx 3205 ;inc bx 3206 00000D79 43 inc ebx 3207 00000D7A 43 inc ebx 3208 00000D7B 6683C724 add di, 36 ; 24h ; size of edge 3209 ;loop dCFinitloop 3210 ;dec cx 3211 00000D7F 49 dec ecx 3212 00000D80 0F8578FFFFFF jnz dCFinitloop 3213 3214 ; end of p1, p2, p3, p4 point dimensioning of face 3215 ; 3216 ; p1 ...... p2 3217 ; . . 3218 ; . shade . 3219 ; . . 3220 ; p3 ...... p4 3221 ; 3222 ; p1 (x,y,z) ... p4 (x,y,z) 3223 ; 3224 3225 00000D86 668B03 mov ax, [ebx] ; shade 3226 00000D89 668945F8 mov [ebp+dcf.col], ax 3227 3228 00000D8D 31DB xor ebx, ebx 3229 00000D8F 66895DFA mov [ebp+dcf.j], bx 3230 3231 ; vector(3).z 3232 00000D93 D945B4 fld dword [ebp+dcf.p0+108+8] 3233 00000D96 D9E4 ftst 3234 ;fstsw ax 3235 00000D98 DFE0 fnstsw ax 3236 00000D9A DDD8 fstp st0 3237 00000D9C 9E sahf 3238 00000D9D 7302 jae short isFalse 3239 00000D9F 664B dec bx 3240 isFalse: 3241 00000DA1 885DF6 mov [ebp+dcf.is_in], bl 3242 00000DA4 31F6 xor esi, esi 3243 00000DA6 31FF xor edi, edi 3244 forloop: 3245 ; vector(0-3).z 3246 00000DA8 D9843548FFFFFF fld dword [ebp+esi+dcf.p0+8] 3247 00000DAF D9E4 ftst 3248 ;fstsw ax 3249 00000DB1 DFE0 fnstsw ax 3250 00000DB3 DDD8 fstp st0 3251 00000DB5 9E sahf 3252 00000DB6 7331 jae short elseFall 3253 3254 00000DB8 807DF6FF cmp byte [ebp+dcf.is_in], 0FFh ; -1 ; true 3255 00000DBC 7408 je short inside 3256 00000DBE E8EF000000 call clipsub 3257 ; { OUT / IN } 3258 00000DC3 F655F6 not byte [ebp+dcf.is_in] 3259 inside: 3260 00000DC6 57 push edi 3261 00000DC7 56 push esi 3262 00000DC8 8DBC3D8CFEFFFF lea edi, [ebp+edi+dcf.p2] 3263 00000DCF 8DB43540FFFFFF lea esi, [ebp+esi+dcf.p0] 3264 ;add edi, dcf.p2 3265 ;add esi, dcf.p0 3266 3267 00000DD6 66B91200 mov cx, 18 ; 12h 3268 00000DDA F366A5 rep movsw ; { IN / IN } 3269 3270 00000DDD 5E pop esi 3271 00000DDE 5F pop edi 3272 00000DDF 6683C724 add di, 36 ; 24h 3273 00000DE3 66FF45FA inc word [ebp+dcf.j] 3274 00000DE7 EB0E jmp short dCFendif 3275 elseFall: 3276 00000DE9 807DF6FF cmp byte [ebp+dcf.is_in], 0FFh 3277 00000DED 7508 jne short outside 3278 00000DEF E8BE000000 call clipsub 3279 ; { IN / OUT } 3280 00000DF4 F655F6 not byte [ebp+dcf.is_in] 3281 outside: 3282 00000DF7 6683C624 dCFendif: add si, 36 ; 24h 3283 00000DFB 6681FE9000 cmp si, 4*36 ; 90h 3284 00000E00 75A6 jne short forloop 3285 3286 00000E02 668B4DFA mov cx, [ebp+dcf.j] 3287 00000E06 6683F902 cmp cx, 2 3288 00000E0A 0F8CA0000000 jl dCFnodraw 3289 00000E10 31FF xor edi, edi 3290 dCFloop: 3291 00000E12 DF05[08120000] fild word [CONST13] 3292 00000E18 D8A43D94FEFFFF fsub dword [ebp+edi+dcf.p2+8] 3293 00000E1F DE35[0C120000] fidiv word [CONST160] 3294 3295 00000E25 D9843D90FEFFFF fld dword [ebp+edi+dcf.p2+4] 3296 00000E2C D8F1 fdiv st0, st1 3297 00000E2E DE05[0A120000] fiadd word [CONST100] 3298 00000E34 DB9C3D98FEFFFF fistp dword [ebp+edi+dcf.p2+12] 3299 3300 00000E3B D9843D8CFEFFFF fld dword [ebp+edi+dcf.p2] 3301 00000E42 D80D[04120000] fmul dword [ASPECT_PLACE] 3302 00000E48 D8F1 fdiv st0, st1 3303 00000E4A DE05[0C120000] fiadd word [CONST160] 3304 00000E50 D9FC frndint 3305 00000E52 DA0D[10120000] fimul dword [CONST65536] 3306 00000E58 DB9C3D9CFEFFFF fistp dword [ebp+edi+dcf.p2+16] 3307 3308 00000E5F DB843DA0FEFFFF fild dword [ebp+edi+dcf.p2+20] 3309 00000E66 D8F1 fdiv st0, st1 3310 00000E68 DB9C3DA0FEFFFF fistp dword [ebp+edi+dcf.p2+20] 3311 3312 00000E6F DB843DA4FEFFFF fild dword [ebp+edi+dcf.p2+24] 3313 00000E76 D8F1 fdiv st0, st1 3314 00000E78 DB9C3DA4FEFFFF fistp dword [ebp+edi+dcf.p2+24] 3315 3316 00000E7F DB05[10120000] fild dword [CONST65536] 3317 00000E85 D8F1 fdiv st0, st1 3318 00000E87 DB9C3DA8FEFFFF fistp dword [ebp+edi+dcf.p2+28] 3319 3320 00000E8E DDD8 fstp st0 3321 00000E90 6683C724 add di, 36 ; 24h 3322 ;loop dCFloop 3323 00000E94 6649 dec cx 3324 00000E96 0F8576FFFFFF jnz dCFloop 3325 3326 00000E9C 8DBD8CFEFFFF lea edi, [ebp+dcf.p2] 3327 ; 10/08/2017 3328 00000EA2 57 push edi ; 32 bits push ! 3329 00000EA3 66FF75FA push word [ebp+dcf.j] ; 16 bits push !! 3330 00000EA7 66FF75F8 push word [ebp+dcf.col] ; 16 bits push !! 3331 00000EAB E89FFAFFFF call scansubtextpoly 3332 dCFnodraw: 3333 00000EB0 C9 dCFbackclip: leave 3334 ; mov esp, ebp ; pop ebp 3335 00000EB1 C3 retn 3336 3337 clipsub: 3338 ; 06/04/2017 3339 ; 05/02/2017 3340 00000EB2 56 push esi 3341 00000EB3 57 push edi 3342 ;lea ax, [esi-36] 3343 00000EB4 66678D44DC lea ax, [si-36] ; 11/08/2017 3344 00000EB9 6683F800 cmp ax, 0 3345 00000EBD 7D04 jge short cSnounder 3346 ;mov eax, 108 ; 6Ch 3347 00000EBF 66B86C00 mov ax, 108 3348 cSnounder: 3349 00000EC3 D9843548FFFFFF fld dword [ebp+esi+dcf.p0+8] 3350 00000ECA D9C0 fld st0 3351 00000ECC 6697 xchg ax, di 3352 00000ECE D8A43D48FFFFFF fsub dword [ebp+edi+dcf.p0+8] 3353 00000ED5 6697 xchg ax, di 3354 00000ED7 DEF9 fdivp st1, st0 3355 ;fdiv 3356 3357 00000ED9 BB[73140000] mov ebx, cliptab 3358 00000EDE 66B90600 mov cx, 6 3359 00000EE2 31D2 xor edx, edx 3360 dCFclipLoop2: 3361 00000EE4 6697 xchg ax, di 3362 00000EE6 D9843D40FFFFFF fld dword [ebp+edi+dcf.p0] 3363 00000EED 6697 xchg ax, di 3364 00000EEF D8A43540FFFFFF fsub dword [ebp+esi+dcf.p0] 3365 00000EF6 D8C9 fmul st0, st1 3366 00000EF8 D8843540FFFFFF fadd dword [ebp+esi+dcf.p0] 3367 00000EFF D99C3D8CFEFFFF fstp dword [ebp+edi+dcf.p2] 3368 3369 00000F06 8A13 mov dl, [ebx] 3370 00000F08 43 inc ebx 3371 00000F09 01D7 add edi, edx 3372 00000F0B 01D6 add esi, edx 3373 00000F0D 01D0 add eax, edx 3374 00000F0F E2D3 loop dCFclipLoop2 3375 00000F11 DDD8 fstp st0 3376 00000F13 5F pop edi 3377 00000F14 5E pop esi 3378 00000F15 66FF45FA inc word [ebp+dcf.j] 3379 ;add edi, 36 3380 00000F19 6683C724 add di, 36 ; 24h 3381 00000F1D C3 retn 3382 3383 3384 ;*************************************************** 3385 ;* description : rotate point over one axis * 3386 ;* parameter : st(0):angle, [ds:si] ptr to * 3387 ;* 1.koord.,[ds:bx] ptr to 2.koord. * 3388 ;* sideeffect : empty copro-stack * 3389 ;* back : none * 3390 ;*************************************************** 3391 3392 rotateAxis: 3393 00000F1E D9EB fldpi ;{ PI,a} 3394 00000F20 DEC9 fmulp st1, st0 ;{ PI*a} 3395 ;fmul 3396 00000F22 DA35[10120000] fidiv dword [CONST65536] ;{ PI*a/65536} 3397 00000F28 D9FB fsincos ;{ cos,sin} 3398 00000F2A D9C0 fld st0 ;{ cos,cos,sin} 3399 00000F2C D80E fmul dword [esi] ;{ y*cos,cos,sin} 3400 00000F2E D9C2 fld st2 ;{ sin,y*cos,cos,sin} 3401 00000F30 D80B fmul dword [ebx] ;{ z*sin,y*cos,cos,sin} 3402 00000F32 DEE9 fsubp st1, st0 ;{ y*cos-z*sin,cos,sin} 3403 00000F34 D9CA fxch st2 ;{ sin,cos,y*cos-z*sin} 3404 00000F36 D80E fmul dword [esi] ;{ y*sin,cos,y*cos-z*sin} 3405 00000F38 D9C9 fxch st1 ;{ cos,y*sin,y*cos-z*sin} 3406 00000F3A D80B fmul dword [ebx] ;{ z*cos,y*sin,y*cos-z*sin} 3407 00000F3C DEC1 faddp st1, st0 ;{ y*sin+z*cos,y*cos-z*sin} 3408 00000F3E D91B fstp dword [ebx] ;{ y*cos-z*sin} 3409 00000F40 D91E fstp dword [esi] ;{} 3410 00000F42 C3 retn 3411 3412 ;*********************************************** 3413 ;* description : rotate point * 3414 ;* parameter : a,b,c:angles,adr:address * 3415 ;* sideeffect : all * 3416 ;* back : none * 3417 ;*********************************************** 3418 3419 xyzRotate: 3420 ; 11/08/2017 3421 ;;push word [ebp+xw] ; a ; 16 bits push !! 3422 ;;push word [ebp+yw] ; b ; 16 bits push !! 3423 ;;push word [ebp+zw] ; c ; 16 bits push !! 3424 ;;add di, nwmat 3425 ;;push edi ; adr ; 32 bits push ! 3426 ;;call xyzRotate 3427 ;;pop edi 3428 3429 adr equ 8 ; arg 1, [esp+4] 3430 c equ 12 ; arg 2, [esp+8] 3431 b equ 14 ; arg 3, [esp+10] 3432 a equ 16 ; arg 4, [esp+12] 3433 3434 00000F43 55 push ebp 3435 00000F44 89E5 mov ebp, esp 3436 3437 00000F46 8B7D08 mov edi, [ebp+adr] ; nwmat+ 3438 3439 ; nwmat: ;;; edi +0 +4 +8 3440 ; loop 1 (nwmat) : dd 1, 0, 0 3441 ; loop 2 (nwmat+12) : dd 0, 1, 0 3442 ; loop 3 (nwmat+24) : dd 0, 0, 1 3443 3444 00000F49 DF4510 fild word [ebp+a] ; xw ; a (x angle) 3445 00000F4C 8D5F08 lea ebx, [edi+8] ; z (2. coordinate) 3446 00000F4F 8D7704 lea esi, [edi+4] ; y (1. coordinate) 3447 00000F52 E8C7FFFFFF call rotateAxis 3448 00000F57 DF450E fild word [ebp+b] ; yw ; a (y angle) 3449 00000F5A 8D1F lea ebx, [edi] ; z 3450 00000F5C 8D7708 lea esi, [edi+8] ; y 3451 00000F5F E8BAFFFFFF call rotateAxis 3452 00000F64 DF450C fild word [ebp+c] ; zw ; a (z angle) 3453 00000F67 8D5F04 lea ebx, [edi+4] ; z 3454 00000F6A 8D37 lea esi, [edi] ; y 3455 00000F6C E8ADFFFFFF call rotateAxis 3456 3457 00000F71 5D pop ebp 3458 ; 11/08/2017 3459 ; (pop dw, pop w, pop w, pop w) 3460 00000F72 C20A00 ret 10 3461 3462 ;*********************************************** 3463 ;* description : calculate world matrix * 3464 ;* parameter : x-,y-,z-angle,neig:stack * 3465 ;* sideeffect : all * 3466 ;* back : none * 3467 ;*********************************************** 3468 3469 calcRotMat: 3470 ; 11/08/2017 (16 bits pushes) 3471 3472 ; [esp] = [oyw]*16 ; angle or YSTEP * 16 ? 3473 ; [esp+2] = [ozw] ; ZSTEP 3474 ; [esp+4] = [oyw] ; YSTEP 3475 ; [esp+6] = [oxw] ; XSTEP 3476 3477 neig equ 8 ; arg 1, [esp+4] 3478 zw equ 10 ; arg 2, [esp+6] 3479 yw equ 12 ; arg 3, [esp+8] 3480 xw equ 14 ; arg 4, [esp+10] 3481 3482 00000F75 55 push ebp 3483 00000F76 89E5 mov ebp, esp 3484 3485 00000F78 BF[0C180000] mov edi, nwmat 3486 3487 identityMat 3488 <1> 3489 <1> 3490 <1> 3491 00000F7D B502 <1> mov ch, 2 3492 <1> iMolp: 3493 00000F7F B102 <1> mov cl, 2 3494 <1> iMilp: 3495 00000F81 D9EE <1> fldz 3496 00000F83 38CD <1> cmp ch, cl 3497 00000F85 7504 <1> jne short iMwritezero 3498 00000F87 DDD8 <1> fstp st0 3499 00000F89 D9E8 <1> fld1 3500 <1> iMwritezero: 3501 00000F8B D91F <1> fstp dword [edi] 3502 <1> 3503 00000F8D 83C704 <1> add edi, 4 3504 00000F90 FEC9 <1> dec cl 3505 00000F92 79ED <1> jns short iMilp 3506 00000F94 FECD <1> dec ch 3507 00000F96 79E7 <1> jns short iMolp 3508 3509 ; nwmat: 3510 ; dd 1,0,0 3511 ; dd 0,1,0 3512 ; dd 0,0,1 3513 3514 00000F98 31FF xor edi, edi 3515 cRMolp: 3516 00000F9A 57 push edi 3517 ; 11/07/2017 (16 bits pushes) 3518 00000F9B 66FF750E push word [ebp+xw] ; a (x angle) 3519 00000F9F 66FF750C push word [ebp+yw] ; b (y angle) 3520 00000FA3 66FF750A push word [ebp+zw] ; c (z angle) 3521 ;add edi, nwmat 3522 00000FA7 6681C7[0C18] add di, nwmat 3523 00000FAC 57 push edi ; 32 bits push ; adr 3524 00000FAD E891FFFFFF call xyzRotate 3525 00000FB2 5F pop edi 3526 00000FB3 31DB xor ebx, ebx 3527 cRMilp: 3528 00000FB5 D987[0C180000] fld dword [edi+nwmat] 3529 00000FBB D88B[C2170000] fmul dword [ebx+owmat] 3530 00000FC1 D987[10180000] fld dword [edi+nwmat+4] 3531 00000FC7 D88B[CE170000] fmul dword [ebx+owmat+12] 3532 00000FCD D987[14180000] fld dword [edi+nwmat+8] 3533 00000FD3 D88B[DA170000] fmul dword [ebx+owmat+24] 3534 00000FD9 DEC1 fadd 3535 00000FDB DEC1 fadd 3536 00000FDD D9943B[C2170000] fst dword [ebx+edi+owmat] 3537 00000FE4 D99C3B[E8170000] fstp dword [ebx+edi+wmat] 3538 00000FEB 6683C304 add bx, 4 3539 00000FEF 80FB0C cmp bl, 12 3540 00000FF2 75C1 jne short cRMilp 3541 00000FF4 6683C70C add di, 12 3542 00000FF8 6683FF24 cmp di, 36 3543 00000FFC 759C jne short cRMolp 3544 3545 00000FFE BE[E8170000] mov esi, wmat 3546 00001003 66B90300 mov cx, 3 3547 cRMneigloop: 3548 00001007 DF4508 fild word [ebp+neig] 3549 0000100A 8D5E0C lea ebx, [esi+12] 3550 0000100D E80CFFFFFF call rotateAxis 3551 00001012 6683C604 add si, 4 3552 00001016 E2EF loop cRMneigloop 3553 3554 00001018 5D pop ebp 3555 ; 11/08/2017 (16 bits pops) 3556 00001019 C20800 ret 8 3557 3558 ;*********************************************** 3559 ;* description : create the world * 3560 ;* parameter : none * 3561 ;* sideeffect : all * 3562 ;* back : none * 3563 ;*********************************************** 3564 3565 createWorld: 3566 ; 11/08/2017 3567 ; 10/08/2017 3568 ; 27/07/2017 3569 ; 06/02/2017 3570 0000101C BE[C5140000] mov esi, world 3571 ;mov cx, 4 3572 00001021 B904000000 mov ecx, 4 ; 3573 cWworldLoop: 3574 00001026 51 push ecx 3575 00001027 56 push esi 3576 00001028 BF[94380000] mov edi, p 3577 0000102D BB[0C390000] mov ebx, pr 3578 00001032 66BE[9814] mov si, print 3579 00001036 B10F mov cl, 15 ; 0Fh 3580 cWinitStartRoom: 3581 00001038 51 push ecx 3582 00001039 B103 mov cl, 3 3583 cWinnerLoop: 3584 0000103B AC lodsb ; byte data (to be converted to dword) from the 'print:' 3585 0000103C 6698 cbw ; convert byte to word with sign (0E0h -> FFE0h) 3586 0000103E 66AB stosw ; store world coordinate/dimension as integer (word), to 'p:' 3587 00001040 DF47FE fild word [edi-2] 3588 00001043 D91B fstp dword [ebx] ; store coordinate as floatpoint (29/01/2017) 3589 00001045 6683C304 add bx, 4 ; next dimension (x,y,z) in 'pr:' 3590 00001049 E2F0 loop cWinnerLoop 3591 0000104B 59 pop ecx 3592 0000104C 66B8007F mov ax, 127*256 ; 7F00h ; 4th dimension in 'p:' (29/01/2017) 3593 00001050 66AB stosw 3594 00001052 E2E4 loop cWinitStartRoom 3595 00001054 5E pop esi 3596 cWmainLoop: 3597 00001055 AC lodsb ; the byte from 'world:' for shade and direction (29/01/2017) 3598 00001056 3CFF cmp al, 255 ; 0FFh 3599 00001058 0F8457010000 je cWexit ; end of stage (1 to 4) (29/01/2017) 3600 3601 0000105E 88C7 mov bh, al ; High 4 bits for shading (29/01/2017) 3602 00001060 6681E30070 and bx, 7000h 3603 00001065 80C70F add bh, 15 ; 0Fh 3604 00001068 66891D[82530000] mov [cw.shade], bx 3605 0000106F 6683E00F and ax, 0Fh ; 15 ; Low 4 bits for direction (29/01/2017) 3606 00001073 66A3[80530000] mov [cw.direc], ax 3607 3608 00001079 31DB xor ebx, ebx 3609 0000107B EB0A jmp short cWfirstNibble ; 27/07/2017 3610 cWsideLoop: 3611 0000107D F6C304 test bl, 4 3612 00001080 7405 jz short cWfirstNibble 3613 00001082 AC lodsb 3614 00001083 240F and al, 0Fh ; 15 3615 00001085 EB05 jmp short cWsecondNibble 3616 cWfirstNibble: 3617 00001087 8A06 mov al, [esi] 3618 00001089 C0E804 shr al, 4 3619 cWsecondNibble: 3620 0000108C 31FF xor edi, edi ; 10/02/2017 (is this necessary?) 3621 0000108E 30E4 xor ah, ah 3622 00001090 6648 dec ax 3623 00001092 7866 js short cWnoWall ; ax = 0 -> ax = 0FFFFh (29/01/2017) 3624 ;imul di, word [o+object.fanz], 10 ; 0Ah 3625 00001094 666B3D[A41B0000]0A imul di, word [object.fanz], 10 ; 10/02/2017 3626 ;add di, o+object.f ; base address + offset 3627 ;add di, object.f ; base address + offset 3628 0000109C 81C7[26280000] add edi, object.f ; 10/02/2017 3629 ;inc word [o+object.fanz] ; faces = faces + 1 3630 000010A2 66FF05[A41B0000] inc word [object.fanz] ; faces = faces + 1 3631 000010A9 66894708 mov [edi+8], ax ; 4th word is shading value (29/01/2017) 3632 3633 000010AD 53 push ebx 3634 000010AE 56 push esi 3635 000010AF B104 mov cl, 4 3636 cWaddPointloop: 3637 ;movsx esi, byte [ebx+cube] ; cube coordinate offset (29/01/207) 3638 ;xor esi, esi ; 10/02/2017 3639 ;movsx si, byte [ebx+cube] 3640 000010B1 0FB6B3[80140000] movzx esi, byte [ebx+cube] ; 11/02/2017 3641 000010B8 81C6[94380000] add esi, p ; + base address (p:) (29/01/2017) 3642 3643 000010BE 57 push edi 3644 ;mov edi, o+object.p ; p area of object structure (in o:) 3645 000010BF BF[A61B0000] mov edi, object.p ; 10/02/2017 3646 000010C4 51 push ecx 3647 ;mov cx, [o+object.panz] ; number of points (for object.p) 3648 000010C5 668B0D[A21B0000] mov cx, [object.panz] ; 10/02/2017 3649 ;xor ax, ax 3650 000010CC 31C0 xor eax, eax 3651 000010CE 67E317 jcxz cWfirstPoint 3652 cWsearchPointLoop: ; check point coordinates are same or not (29/01/2017) 3653 000010D1 8B16 mov edx, [esi] 3654 000010D3 3B17 cmp edx, [edi] 3655 000010D5 750A jne short cWdifferent 3656 000010D7 668B5604 mov dx, [esi+4] 3657 000010DB 663B5704 cmp dx, [edi+4] 3658 000010DF 7410 je short cWpointExists 3659 cWdifferent: 3660 ;inc ax ; number of different points (of object) 3661 000010E1 40 inc eax 3662 000010E2 6683C708 add di, 8 3663 000010E6 E2E9 loop cWsearchPointLoop 3664 cWfirstPoint: 3665 000010E8 A5 movsd 3666 000010E9 A5 movsd 3667 ;inc word [o+object.panz] ; points = points + 1 3668 000010EA 66FF05[A21B0000] inc word [object.panz] ; 10/02/2017 3669 cWpointExists: 3670 000010F1 59 pop ecx 3671 000010F2 5F pop edi 3672 000010F3 66AB stosw ; store number of different points (29/01/2017) 3673 ; in the Xth word of face structure (5 words) 3674 ; (Xth word of 'object.f', X = 4-CL) 3675 000010F5 43 inc ebx 3676 000010F6 E2B9 loop cWaddPointloop 3677 000010F8 5E pop esi 3678 000010F9 5B pop ebx 3679 cWnoWall: 3680 ; 27/07/2017 3681 ;add bx, 4 3682 000010FA 80C304 add bl, 4 3683 ;cmp bx, 24 ; 18h 3684 000010FD 80FB18 cmp bl, 24 3685 ;jne cWsideLoop 3686 00001100 0F8277FFFFFF jb cWsideLoop ; 10/08/2017 3687 3688 ;xor edi, edi ; 10/02/2017 3689 00001106 666B3D[80530000]0C imul di, word [cw.direc], 12 3690 ;movsx edi, di ; 05/02/2017 3691 0000110E B103 mov cl, 3 3692 ;mov ebx, pr+96 3693 00001110 66BB[6C39] mov bx, pr+96 ; 24th dword of 'pr:' 3694 cWaddStepLoop: 3695 00001114 D94348 fld dword [ebx+72] ; [ebx+48h] 3696 00001117 D8043B fadd dword [ebx+edi] 3697 0000111A D95B48 fstp dword [ebx+72] 3698 0000111D 6683C304 add bx, 4 3699 00001121 E2F1 loop cWaddStepLoop 3700 3701 00001123 807EFC00 cmp byte [esi-4], 0 3702 00001127 7D28 jge short cWsimpleRoom 3703 3704 00001129 66BB[0C39] mov bx, pr 3705 0000112D B10E mov cl, 14 ; 0Eh 3706 cWrotloop: 3707 0000112F 60 pushad 3708 00001130 B103 mov cl, 3 3709 00001132 8A16 mov dl, [esi] 3710 cWpushLoop: 3711 00001134 31C0 xor eax, eax 3712 00001136 D0EA shr dl, 1 3713 00001138 7305 jnc short cWnoRot 3714 0000113A 8A26 mov ah, [esi] 3715 ;and ax, 0F000h 3716 0000113C 80E4F0 and ah, 0F0h 3717 ;push ax 3718 ;jmp short cWendIf 3719 cWnoRot: 3720 ;push 0 ; arg 2 (c), arg 3 (b), arg 4 (a) 3721 ; 11/08/2017 3722 0000113F 6650 push ax ; 16 bits push !! 3723 cWendIf: 3724 00001141 E2F1 loop cWpushLoop 3725 ; 11/08/2017 3726 00001143 53 push ebx ; arg 1 (addr) ; 32 bits push ! 3727 00001144 E8FAFDFFFF call xyzRotate 3728 00001149 61 popad 3729 0000114A 6683C30C add bx, 12 ; 0Ch 3730 0000114E E2DF loop cWrotloop 3731 00001150 46 inc esi 3732 cWsimpleRoom: 3733 00001151 668B1D[80530000] mov bx, [cw.direc] 3734 00001158 66C1E302 shl bx, 2 3735 0000115C B104 mov cl, 4 3736 cWpointCopyLoop: 3737 0000115E 60 pushad 3738 ;movsx esi, byte [ebx+cube] 3739 ;xor esi, esi ; 10/02/2017 3740 ;movsx si, byte [ebx+cube] 3741 0000115F 0FB6B3[80140000] movzx esi, byte [ebx+cube] ; 11/02/2017 3742 00001166 89F0 mov eax, esi 3743 00001168 81C6[94380000] add esi, p ; + base address of 'p:' 3744 0000116E 80F307 xor bl, 7 3745 ;movsx edi, byte [ebx+cube] 3746 ;xor edi, edi ; 10/02/2017 3747 00001171 0FB6BB[80140000] movzx edi, byte [ebx+cube] 3748 00001178 81C7[94380000] add edi, p ; + base address of 'p:' 3749 0000117E 56 push esi 3750 0000117F A5 movsd 3751 00001180 A5 movsd 3752 00001181 5E pop esi 3753 3754 00001182 89C3 mov ebx, eax 3755 ;shr ebx, 1 3756 00001184 66D1EB shr bx, 1 3757 00001187 01C3 add ebx, eax 3758 00001189 BF[0C390000] mov edi, pr ; + base address of 'pr:' 3759 0000118E B103 mov cl, 3 3760 cWSround: 3761 00001190 D9043B fld dword [ebx+edi] 3762 00001193 D887A8000000 fadd dword [edi+168] ; [edi+0A8h] 3763 00001199 DF1E fistp word [esi] ; world coordinate/dimension 3764 0000119B 6683C704 add di, 4 3765 0000119F 46 inc esi 3766 000011A0 46 inc esi 3767 000011A1 E2ED loop cWSround 3768 000011A3 66A1[82530000] mov ax, [cw.shade] 3769 000011A9 668906 mov [esi], ax ; 4th word 3770 000011AC 61 popad 3771 000011AD 43 inc ebx 3772 000011AE E2AE loop cWpointCopyLoop 3773 000011B0 E9A0FEFFFF jmp cWmainLoop 3774 cWexit: 3775 000011B5 59 pop ecx 3776 ;dec cx 3777 000011B6 FEC9 dec cl ; 27/07/2017 3778 000011B8 0F8568FEFFFF jnz cWworldLoop 3779 000011BE C3 retn 3780 3781 ; 17/01/2017 3782 000011BF 1111 dels_pos_w: dw 1111h 3783 000011C1 1111 ddu_pos_w: dw 1111h 3784 000011C3 1111 ddv_pos_w: dw 1111h 3785 3786 prg_msg: 3787 000011C5 4552444F47414E2054- db 'ERDOGAN TAN - TRDOS 386 VGA Test - SNCOMNI.PRG' 3788 000011CE 414E202D205452444F- 3789 000011D7 532033383620564741- 3790 000011E0 2054657374202D2053- 3791 000011E9 4E434F4D4E492E5052- 3792 000011F2 47 3793 000011F3 0D0A db 0Dh, 0Ah 3794 000011F5 31322F30382F323031- db '12/08/2017' 3795 000011FE 37 3796 000011FF 0D0A db 0Dh, 0Ah 3797 00001201 00 db 0 3798 3799 00001202 90 align 4 3800 3801 ;============================================================================= 3802 ; preinitialized data 3803 ;============================================================================= 3804 3805 00001204 9A99993F ASPECT_PLACE: dd ASPECT_RATIO ; 1.2 3806 00001208 0D00 CONST13: dw 13 ; 000Dh 3807 0000120A 6400 CONST100: dw CENTERY ; 0064h 3808 0000120C A000 CONST160: dw CENTERX ; 00A0h 3809 0000120E 0007 CONST1792: dw 1792 ; 0700h 3810 00001210 00000100 CONST65536: dd 65536 ; 00010000h 3811 00001214 05840808 randommul: dd 134775813 ; 08088405h 3812 00001218 FB100000 randomseed: dd 4347 ; 000010FBh 3813 credits: 3814 0000121C 0250FB db 2, 80,-5 3815 0000121F FE320445023E024502- db -2,50,4,69,2,62,2,69,2,81,2,62,2,69,2,79,2,62,2,69,2 3816 00001228 51023E0245024F023E- 3817 00001231 024502 3818 00001234 51023E0245024F0251- db 81,2,62,2,69,2,79,2,81,2,0 ; { pat 0,2,4,6,8 } 3819 0000123D 0200 3820 0000123F FE320446023E024602- db -2,50,4,70,2,62,2,70,2,81,2,62,2,70,2,79,2,62,2,70,2 3821 00001248 51023E0246024F023E- 3822 00001251 024602 3823 00001254 52023E0246024F0252- db 82,2,62,2,70,2,79,2,82,2,0 ; { pat 1,3,5,7,9 } 3824 0000125D 0200 3825 0000125F 00 db 0 3826 00001260 37203820 db 55,32,56,32 ; { pat 10 } 3827 00001264 332035183708 db 51,32,53,24,55,8 ; { pat 11 } 3828 0000126A 39203220 db 57,32,50,32 ; { pat 12 } 3829 0000126E 3C303A083908 db 60,48,58,8,57,8 ; { pat 13 } 3830 00001274 3740 db 55,64 ; { pat 14 } 3831 00001276 FE43103E1045104610- db -2,67,16,62,16,69,16,70,16,0 ; { pat 15 } 3832 0000127F 00 3833 00001280 FE461045103E104110- db -2,70,16,69,16,62,16,65,16,0 ; { pat 16 } 3834 00001289 00 3835 0000128A 00 db 0 3836 0000128B 043201800180 db 4, 50,1,128,1,128 ;{ pat 0-3 } 3837 00001291 411C4002410240103E- db 65,28,64,2,65,2,64,16,62,8,60,8 ;{ pat 4 } 3838 0000129A 083C08 3839 0000129D 431C41043C10410840- db 67,28,65,4,60,16,65,8,64,8 ;{ pat 5 } 3840 000012A6 08 3841 000012A7 3E20321040084108 db 62,32,50,16,64,8,65,8 ;{ pat 6 } 3842 000012AF 43203C103E084008 db 67,32,60,16,62,8,64,8 ;{ pat 7 } 3843 000012B7 3E80 db 62,128 ;{ pat 8,9 } 3844 000012B9 4380 db 67,128 ;{ pat 10,11 } 3845 000012BB 431040104210400842- db 67,16,64,16,66,16,64,8,66,8 ;{ pat 12 } 3846 000012C4 08 3847 000012C5 48304610 db 72,48,70,16 ;{ pat 13 } 3848 000012C9 43203720 db 67,32,55,32 ;{ pat 14 } 3849 000012CD FE1F20372000 db -2,31,32,55,32,0 ;{ pat 15 } 3850 000012D3 FE1A20322000 db -2,26,32,50,32,0 ;{ pat 16 } 3851 000012D9 00 db 0 3852 000012DA 0559FB018000 db 5, 89,-5,1,128,0 ;{ pat 0-9 } 3853 000012E0 43084A1844084B18 db 67,8,74,24,68,8,75,24 ;{ pat 10 } 3854 000012E8 3F0846183C08451043- db 63,8,70,24,60,8,69,16,67,8 ;{ pat 11 } 3855 000012F1 08 3856 000012F2 3E08451043083E0842- db 62,8,69,16,67,8,62,8,66,24 ;{ pat 12 } 3857 000012FB 18 3858 000012FC 3F0843183C08431045- db 63,8,67,24,60,8,67,16,69,8 ;{ pat 13 } 3859 00001305 08 3860 00001306 370843182B083218 db 55,8,67,24,43,8,50,24 ;{ pat 14 } 3861 0000130E FE1F01263F00 db -2,31,1,38,63,0 ;{ pat 15 } 3862 00001314 FE1A01213F00 db -2,26,1,33,63,0 ;{ pat 16 } 3863 0000131A 00 db 0 3864 0000131B 0A00F02A022A022A02- db 10, 0,-16,42,2,42,2,42,2,42,1,42,1,0 ;{ pat 0,1 } 3865 00001324 2A012A0100 3866 00001329 F024022A022A022A01- db -16,36,2,42,2,42,2,42,1,42,1,0 ;{ pat 2,3 } 3867 00001332 2A0100 3868 00001335 E224022A022E022401- db -30,36,2,42,2,46,2,36,1,42,1,38,2 3869 0000133E 2A012602 3870 00001342 2A022E0226012A01 db 42,2,46,2,38,1,42,1 ;{ pat 4-16 } 3871 0000134A 2402260224022A012A- db 36,2,38,2,36,2,42,1,42,1,38,2,42,2,46,2,38,1,42,1,0 3872 00001353 0126022A022E022601- 3873 0000135C 2A0100 3874 0000135F 00 db 0 3875 00001360 00 db 0 3876 3877 ; colortable 65 bytes 3878 00001361 10 colors db 16 3879 00001362 1F3F3F3F db 31,63,63,63 3880 00001366 01000000 db 1, 0, 0, 0 3881 0000136A 1F28203F db 31,40,32,63 3882 0000136E 01000000 db 1, 0, 0, 0 3883 00001372 1F3F0000 db 31,63, 0, 0 3884 00001376 01060100 db 1, 6, 1, 0 3885 0000137A 1F3F2914 db 31,63,41,20 3886 0000137E 01000000 db 1, 0, 0, 0 3887 00001382 1F3F3F08 db 31,63,63, 8 3888 00001386 01000000 db 1, 0, 0, 0 3889 0000138A 1F38383F db 31,56,56,63 3890 0000138E 013F0000 db 1,63, 0, 0 3891 00001392 103F3F00 db 16,63,63, 0 3892 00001396 103F0000 db 16,63, 0, 0 3893 0000139A 01160500 db 1,22, 5, 0 3894 0000139E 073F3811 db 7,63,56,17 3895 3896 ; parameter for the texture effects 156 bytes 3897 000013A2 130F0F31310A aE db 013h,15,15,49,49,10 3898 000013A8 131010303011 db 013h,16,16,48,48,17 3899 000013AE 1311112F2F18 db 013h,17,17,47,47,24 3900 000013B4 1312122E2EBE db 013h,18,18,46,46,190 3901 000013BA 1315152B2B1E db 013h,21,21,43,43,30 3902 000013C0 2500003E1E03 db 025h,0,0,62,30,3 3903 000013C6 2503033E1E07 db 025h,3,3,62,30,7 3904 000013CC 2503033B1BFC db 025h,3,3,59,27,0FCh 3905 000013D2 2500203E3E03 db 025h,0,32,62,62,3 3906 000013D8 2503233E3E07 db 025h,3,35,62,62,7 3907 000013DE 2503233B3BFC db 025h,3,35,59,59,0FCh 3908 000013E4 2500003F3FFE db 025h,0,0,63,63,0FEh 3909 000013EA 2C000A3F0FF6 db 02Ch,0,10,63,15,0F6h 3910 000013F0 2C000B3F1004 db 02Ch,0,11,63,16,4 3911 000013F6 2C002F3F34F6 db 02Ch,0,47,63,52,0F6h 3912 000013FC 2C00303F3504 db 02Ch,0,48,63,53,4 3913 00001402 2E13182C2705 db 02Eh,19,24,44,39,5 3914 00001408 2E14192C27F4 db 02Eh,20,25,44,39,0F4h 3915 0000140E 2E14192B2607 db 02Eh,20,25,43,38,7 3916 00001414 3E14192B2606 db 03Eh,20,25,43,38,6 3917 0000141A 2F00183F1E06 db 02Fh,0,24,63,30,6 3918 00001420 2F00193F1FFA db 02Fh,0,25,63,31,0FAh 3919 00001426 3F00193F1E06 db 03Fh,0,25,63,30,6 3920 0000142C 2F00203F2606 db 02Fh,0,32,63,38,6 3921 00001432 2F00213F27FA db 02Fh,0,33,63,39,0FAh 3922 00001438 3F00213F2606 db 03Fh,0,33,63,38,6 3923 3924 ; parameter for fractaladd 28 bytes 3925 0000143E 22C026012601260020- aF: db 34,192,38,1,38,1,38,0,32,0,32,32,32,64 3926 00001447 0020202040 3927 0000144C 226024002260240024- db 34,96,36,0,34,96,36,0,36,0,36,0,36,0 3928 00001455 0024002400 3929 3930 ; star bob for the sparcling stars texture 25 bytes 3931 0000145A 0000030000 bob: db 0,0,3,0,0 3932 0000145F 0002050200 db 0,2,5,2,0 3933 00001464 0305070503 db 3,5,7,5,3 3934 00001469 0002050200 db 0,2,5,2,0 3935 0000146E 0000030000 db 0,0,3,0,0 3936 3937 00001473 04040C0408 cliptab: db 4,4,12,4,8 3938 3939 00001478 00003F3F3F00003F uvtab: db 0,0,63,63,63,0,0,63 3940 3941 00001480 08283010 cube: db 1*8,5*8,6*8,2*8 3942 00001484 18382000 db 3*8,7*8,4*8,0*8 3943 00001488 10303818 db 2*8,6*8,7*8,3*8 3944 0000148C 00202808 db 0*8,4*8,5*8,1*8 3945 00001490 38302820 db 7*8,6*8,5*8,4*8 3946 00001494 00081018 db 0*8,1*8,2*8,3*8 3947 3948 00001498 E0E0E0 print: db -32,-32,-32 3949 0000149B 20E0E0 db 32,-32,-32 3950 0000149E 2020E0 db 32, 32,-32 3951 000014A1 E020E0 db -32, 32,-32 3952 000014A4 E0E020 db -32,-32, 32 3953 000014A7 20E020 db 32,-32, 32 3954 000014AA 202020 db 32, 32, 32 3955 000014AD E02020 db -32, 32, 32 3956 000014B0 400000 db 64, 0, 0 3957 000014B3 C00000 db -64, 0, 0 3958 000014B6 004000 db 0, 64, 0 3959 000014B9 00C000 db 0,-64, 0 3960 000014BC 000040 db 0, 0, 64 3961 000014BF 0000C0 db 0, 0,-64 3962 000014C2 000000 db 0, 0, 0 3963 3964 ; world contruction data 599 bytes 3965 000014C5 71700006 world: db 071h,070h,000h,006h 3966 000014C9 72000006 db 072h,000h,000h,006h 3967 000014CD 71007006 db 071h,000h,070h,006h 3968 000014D1 73077006 db 073h,007h,070h,006h 3969 000014D5 73070006 db 073h,007h,000h,006h 3970 000014D9 70070706 db 070h,007h,007h,006h 3971 000014DD 74000706 db 074h,000h,007h,006h 3972 000014E1 70000740 db 070h,000h,007h,040h 3973 000014E5 72700750 db 072h,070h,007h,050h 3974 000014E9 72700050 db 072h,070h,000h,050h 3975 000014ED 71707050 db 071h,070h,070h,050h 3976 000014F1 73007040 db 073h,000h,070h,040h 3977 000014F5 71000040 db 071h,000h,000h,040h 3978 000014F9 72000050 db 072h,000h,000h,050h 3979 000014FD 71007050 db 071h,000h,070h,050h 3980 00001501 73077046 db 073h,007h,070h,046h 3981 00001505 73000046 db 073h,000h,000h,046h 3982 00001509 70070746 db 070h,007h,007h,046h 3983 0000150D 72000750 db 072h,000h,007h,050h 3984 00001511 71000000 db 071h,000h,000h,000h 3985 00001515 71000000 db 071h,000h,000h,000h 3986 00001519 7100BB56 db 071h,000h,0BBh,056h 3987 0000151D 700FBB46 db 070h,00Fh,0BBh,046h 3988 00001521 FF db 0FFh 3989 00001522 33000000 db 033h,000h,000h,000h 3990 00001526 F0000706E4 db 0F0h,000h,007h,006h,0E4h 3991 0000152B B000BB46E4 db 0B0h,000h,0BBh,046h,0E4h 3992 00001530 9000BB56E4 db 090h,000h,0BBh,056h,0E4h 3993 00001535 9000BB56E4 db 090h,000h,0BBh,056h,0E4h 3994 0000153A 3000BB56 db 030h,000h,0BBh,056h 3995 0000153E F000BB5611 db 0F0h,000h,0BBh,056h,011h 3996 00001543 F000BB4611 db 0F0h,000h,0BBh,046h,011h 3997 00001548 B000BB5611 db 0B0h,000h,0BBh,056h,011h 3998 0000154D 9000BB5611 db 090h,000h,0BBh,056h,011h 3999 00001552 B000BB5611 db 0B0h,000h,0BBh,056h,011h 4000 00001557 F000BB5611 db 0F0h,000h,0BBh,056h,011h 4001 0000155C F000BB4611 db 0F0h,000h,0BBh,046h,011h 4002 00001561 B000BB5611 db 0B0h,000h,0BBh,056h,011h 4003 00001566 3000BB56 db 030h,000h,0BBh,056h 4004 0000156A 1000BB56 db 010h,000h,0BBh,056h 4005 4006 0000156E 34000000 db 034h,000h,000h,000h 4007 00001572 32050080 db 032h,005h,000h,080h 4008 00001576 35058080 db 035h,005h,080h,080h 4009 0000157A 35058000 db 035h,005h,080h,000h 4010 0000157E 33058008 db 033h,005h,080h,008h 4011 00001582 33050008 db 033h,005h,000h,008h 4012 00001586 74050808 db 074h,005h,008h,008h 4013 0000158A 74050000 db 074h,005h,000h,000h 4014 0000158E 73050880 db 073h,005h,008h,080h 4015 00001592 75000000 db 075h,000h,000h,000h 4016 00001596 75050888 db 075h,005h,008h,088h 4017 0000159A 70000000 db 070h,000h,000h,000h 4018 0000159E 74640808 db 074h,064h,008h,008h 4019 000015A2 74600800 db 074h,060h,008h,000h 4020 000015A6 72640880 db 072h,064h,008h,080h 4021 000015AA 05600080 db 005h,060h,000h,080h 4022 000015AE 05600000 db 005h,060h,000h,000h 4023 000015B2 02600008 db 002h,060h,000h,008h 4024 000015B6 34600008 db 034h,060h,000h,008h 4025 000015BA 34600000 db 034h,060h,000h,000h 4026 000015BE 32600080 db 032h,060h,000h,080h 4027 000015C2 35600080 db 035h,060h,000h,080h 4028 000015C6 35600000 db 035h,060h,000h,000h 4029 000015CA 32600008 db 032h,060h,000h,008h 4030 000015CE 34350008 db 034h,035h,000h,008h 4031 000015D2 14650000 db 014h,065h,000h,000h 4032 000015D6 32350080 db 032h,035h,000h,080h 4033 000015DA 35350080 db 035h,035h,000h,080h 4034 000015DE 15650000 db 015h,065h,000h,000h 4035 000015E2 32350008 db 032h,035h,000h,008h 4036 000015E6 34358008 db 034h,035h,080h,008h 4037 000015EA 14650000 db 014h,065h,000h,000h 4038 000015EE 32358080 db 032h,035h,080h,080h 4039 000015F2 75000000 db 075h,000h,000h,000h 4040 000015F6 5265E077 db 052h,065h,0E0h,077h 4041 000015FA 32640E77 db 032h,064h,00Eh,077h 4042 000015FE 12650077 db 012h,065h,000h,077h 4043 00001602 00650077 db 000h,065h,000h,077h 4044 00001606 FF db 0FFh 4045 00001607 32000000 db 032h,000h,000h,000h 4046 0000160B F000000014 db 0F0h,000h,000h,000h,014h 4047 00001610 B000000014 db 0B0h,000h,000h,000h,014h 4048 00001615 30000000 db 030h,000h,000h,000h 4049 00001619 F0000000F4 db 0F0h,000h,000h,000h,0F4h 4050 0000161E F000DD56F4 db 0F0h,000h,0DDh,056h,0F4h 4051 00001623 3000DD46 db 030h,000h,0DDh,046h 4052 00001627 3000DD56 db 030h,000h,0DDh,056h 4053 0000162B 3000DD56 db 030h,000h,0DDh,056h 4054 0000162F 32000050 db 032h,000h,000h,050h 4055 00001633 300AA050 db 030h,00Ah,0A0h,050h 4056 00001637 3300A050 db 033h,000h,0A0h,050h 4057 0000163B 30000050 db 030h,000h,000h,050h 4058 0000163F 32700050 db 032h,070h,000h,050h 4059 00001643 3000A050 db 030h,000h,0A0h,050h 4060 00001647 33A0A750 db 033h,0A0h,0A7h,050h 4061 0000164B 33000000 db 033h,000h,000h,000h 4062 0000164F 31A07A50 db 031h,0A0h,07Ah,050h 4063 00001653 31000A50 db 031h,000h,00Ah,050h 4064 00001657 31000A50 db 031h,000h,00Ah,050h 4065 0000165B 320A0A50 db 032h,00Ah,00Ah,050h 4066 0000165F 35000000 db 035h,000h,000h,000h 4067 00001663 720A0000 db 072h,00Ah,000h,000h 4068 00001667 700AA000 db 070h,00Ah,0A0h,000h 4069 0000166B 7300A000 db 073h,000h,0A0h,000h 4070 0000166F 70000000 db 070h,000h,000h,000h 4071 00001673 72000000 db 072h,000h,000h,000h 4072 00001677 7000A000 db 070h,000h,0A0h,000h 4073 0000167B 73A0A000 db 073h,0A0h,0A0h,000h 4074 0000167F 73A00099 db 073h,0A0h,000h,099h 4075 00001683 71A00A00 db 071h,0A0h,00Ah,000h 4076 00001687 71000A00 db 071h,000h,00Ah,000h 4077 0000168B 71000A00 db 071h,000h,00Ah,000h 4078 0000168F 750A0A00 db 075h,00Ah,00Ah,000h 4079 00001693 700C0C03 db 070h,00Ch,00Ch,003h 4080 00001697 70000C03 db 070h,000h,00Ch,003h 4081 0000169B 70000C03 db 070h,000h,00Ch,003h 4082 0000169F 72C07C03 db 072h,0C0h,07Ch,003h 4083 000016A3 72000000 db 072h,000h,000h,000h 4084 000016A7 71C0C703 db 071h,0C0h,0C7h,003h 4085 000016AB 7300C003 db 073h,000h,0C0h,003h 4086 000016AF 71700003 db 071h,070h,000h,003h 4087 000016B3 72000003 db 072h,000h,000h,003h 4088 000016B7 7100C003 db 071h,000h,0C0h,003h 4089 000016BB 730CC003 db 073h,00Ch,0C0h,003h 4090 000016BF 71000003 db 071h,000h,000h,003h 4091 000016C3 310CCCA3 db 031h,00Ch,0CCh,0A3h 4092 000016C7 FF db 0FFh 4093 000016C8 32000000 db 032h,000h,000h,000h 4094 000016CC F000700614 db 0F0h,000h,070h,006h,014h 4095 000016D1 B000DD4614 db 0B0h,000h,0DDh,046h,014h 4096 000016D6 3000DD56 db 030h,000h,0DDh,056h 4097 000016DA B2000D56C4 db 0B2h,000h,00Dh,056h,0C4h 4098 000016DF 32DD0056 db 032h,0DDh,000h,056h 4099 000016E3 32DD0056 db 032h,0DDh,000h,056h 4100 000016E7 32DD0056 db 032h,0DDh,000h,056h 4101 000016EB 7000F056 db 070h,000h,0F0h,056h 4102 000016EF 7000BB56 db 070h,000h,0BBh,056h 4103 000016F3 32B00B46 db 032h,0B0h,00Bh,046h 4104 000016F7 72BB0056 db 072h,0BBh,000h,056h 4105 000016FB 71B0B056 db 071h,0B0h,0B0h,056h 4106 000016FF 71021156 db 071h,002h,011h,056h 4107 00001703 71221156 db 071h,022h,011h,056h 4108 00001707 31201156 db 031h,020h,011h,056h 4109 0000170B 730BB056 db 073h,00Bh,0B0h,056h 4110 0000170F 73BB0056 db 073h,0BBh,000h,056h 4111 00001713 300B0B46 db 030h,00Bh,00Bh,046h 4112 00001717 3000BB56 db 030h,000h,0BBh,056h 4113 0000171B FF db 0FFh 4114 4115 ; flying script 126 bytes 4116 script: 4117 ; 7 6 5 4 3 2 1 0 4118 ; v v v v v c c c 4119 ; 4120 ; v = VALUE 4121 ; c = COMMAND 4122 ; 4123 ; 0 = NOP 4124 ; 1 = NEG ZSTEP 4125 ; 2 = INC SPEED 4126 ; 3 = DEC SPEED 4127 ; 4 = INC XSTEP 4128 ; 5 = DEC XSTEP 4129 ; 6 = INC YSTEP 4130 ; 7 = INC YSTEP 4131 4132 0000171C A1F8F898A1A6 db 0A1h,0f8h,0f8h,098h,0a1h,0A6h 4133 00001722 F0A7B3371036 db 0F0h,0A7h,0B3h,037h,010h,036h 4134 00001728 5084858584F0 db 050h,084h,085h,085h,084h,0F0h 4135 0000172E F0B2A7A6A6A7 db 0F0h,0B2h,0A7h,0A6h,0A6h,0A7h 4136 00001734 F32670278044 db 0f3h,026h,070h,027h,080h,044h 4137 0000173A 457776A6B061 db 045h,077h,076h,0a6h,0b0h,061h 4138 00001740 6152A7773076 db 061h,052h,0a7h,077h,030h,076h 4139 00001746 80A201414101 db 080h,0a2H,001h,041h,041h,001h 4140 0000174C F530F4B3A4F8 db 0f5h,030h,0f4h,0b3h,0a4h,0f8h 4141 00001752 A5D04746F0A6 db 0a5h,0D0h,047h,046h,0F0h,0A6h 4142 00001758 80A770A710A6 db 080h,0A7h,070h,0A7h,010h,0A6h 4143 0000175E 8EF0508FB2F8 db 08eh,0f0h,050h,08fh,0b2h,0f8h 4144 00001764 A3808EF0508F db 0a3h,080h,08eh,0f0h,050h,08fh 4145 0000176A B710B6F080A6 db 0b7h,010h,0b6h,0f0h,080h,0a6h 4146 00001770 A7F087F07086 db 0a7h,0f0h,087h,0F0h,070h,086h 4147 00001776 36F0F0903783 db 036h,0f0h,0f0h,090h,037h,083h 4148 0000177C 2CF0F0F0302D db 02ch,0f0h,0f0h,0f0h,030h,02dh 4149 00001782 8230B5B4F2A6 db 082h,030h,0b5h,0b4h,0f2h,0a6h 4150 00001788 30A78383A6F0 db 030h,0a7h,083h,083h,0a6h,0f0h 4151 0000178E 58A77776F0F0 db 058h,0a7h,077h,076h,0f0h,0f0h 4152 00001794 F0F0F8F800 db 0f0h,0f0h,0f8h,0f8h,000h 4153 4154 00001799 0100 zstep: dw 1 4155 0000179B 66EF doortimer dw -4250 ; 0EF66h 4156 0000179D 4F4D4E495343454E54 omniscent db "OMNISCENT" 4157 omniend: 4158 000017A6 284329204449524B20- sanction db "(C) DIRK KšPPERS" 4159 000017AF 4B9A5050455253 4160 sancend: 4161 000017B6 0000A5C3 ob: dd -330.0 ; vector.x 4162 000017BA 00000000 dd 0.0 ; vector.y 4163 000017BE 00008042 dd 64.0 ; vector.z 4164 owmat: 4165 000017C2 00000000 dd 0.0 ; vector.x 4166 000017C6 000080BF dd -1.0 ; vector.y 4167 000017CA 00000000 dd 0.0 ; vector.z 4168 ;owmat+12: 4169 000017CE 00000000 dd 0.0 ; vector.x 4170 000017D2 00000000 dd 0.0 ; vector.y 4171 000017D6 000080BF dd -1.0 ; vector.z 4172 ;owmat+24: 4173 000017DA 0000803F dd 1.0 ; vector.x 4174 000017DE 00000000 dd 0.0 ; vector.y 4175 000017E2 00000000 dd 0.0 ; vector.z 4176 4177 bss_start: 4178 4179 ABSOLUTE bss_start 4180 4181 000017E6 alignb 4 4182 4183 ; 05/02/2017 (32 bit -> 16 bit) 4184 4185 ;============================================================================= 4186 ; null-initialized data 4187 ;============================================================================= 4188 4189 nullstart: 4190 000017E8 wmat: resb matrix.size ; 36 4191 0000180C nwmat: resb matrix.size ; 36 4192 00001830 zspeed: resw 1 4193 00001832 oxw: resw 1 4194 00001834 oyw: resw 1 4195 00001836 ozw: resw 1 4196 00001838 scriptptr: resw 1 4197 0000183A scriptanz: resw 1 4198 0000183C scriptins: resb 1 4199 0000183D once: resb 1 4200 0000183E ticker: resw 1 4201 00001840 tracks: resw 1 4202 00001842 palette: resb 768 4203 00001B42 channels: resb 16*6 4204 ;o: resb object.size ; 7204 4205 ; 10/02/2017 4206 00001BA2 object.panz: resw 1 4207 00001BA4 object.fanz: resw 1 4208 00001BA6 object.p: resb point.size*MAXPOINTS 4209 00002826 object.f: resb face.size*MAXFACES 4210 nullend: 4211 4212 ;============================================================================= 4213 ; uninitialized data 4214 ;============================================================================= 4215 4216 000037C6 alignb 4 ; 10/08/2017 4217 4218 000037C8 oldstack: resw 1 4219 ;Old08IrqPtr: 4220 ;Old08Irqofs: resw 1 4221 ;Old08Irqseg: resw 1 4222 ;Old09IrqPtr: 4223 ;Old09Irqofs: resw 1 4224 ;Old09Irqseg: resw 1 4225 ;songdata: resb 3605 4226 ; resb 1 4227 000037CA root: resw 1 4228 000037CC circletab: resw 32 4229 0000380C stars: resb 90 4230 00003866 twice: resb 1 4231 00003867 timer_event_number: resb 1 ; 06/02/2017 4232 ; 25/07/2017 4233 ; 11/02/2017 4234 00003868 vseg: resw 1 4235 0000386A bseg: resw 1 4236 0000386C tseg: resw 20 4237 ; 4238 ;shadetab: resb 256*128 4239 00003894 p: resw 4*15 4240 0000390C pr: resd 3*15 4241 000039C0 po: resb poly.size ; 5*36 4242 00003A74 rp: resd 3*MAXPOINTS ; 3*400 4243 00004D34 facei: resd MAXFACES ; 400 4244 4245 alignb 4 4246 ; 26/07/2017 4247 00005374 _ds: resd 1 4248 00005378 _es: resd 1 4249 0000537C _fs: resd 1 4250 4251 ; 11/08/2017 4252 ; 06/02/2017 4253 00005380 cw.direc: resw 1 ; word 4254 00005382 cw.shade: resw 1 ; word 4255 ; 4256 ; 12/08/2017 4257 00005384 songdata: resb 3605 4258 00006199 tstatus: resb 1 ; timer (screen update) flag 4259 4260 0000619A alignb 4 4261 4262 ; 12/08/2017 4263 0000619C shadetab: resb 256*128 4264 4265 bss_end: