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 0F845A060000 jz terminate ; error (eax = 0) 1352 1353 ; clear bss (18/12/2016) 1354 ;mov edi, bss_start ; 1355 00000010 66BF[AA17] mov di, bss_start 1356 00000014 66B90E2F 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[2C38] 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 ;expandSong 1388 1389 0000004A E8910F0000 call createWorld 1390 1391 set320x200 1392 0000004F 66B81300 <1> mov ax, 13h 1393 <1> 1394 <1> 1395 00000053 CD31 <1> int 31h 1396 1397 00000055 86E0 xchg ah, al ; ah = write string = 13h, 1398 ; al = write mode = 0 1399 00000057 66BB1C00 mov bx, 1Ch 1400 0000005B BD[61170000] mov ebp, omniscent 1401 00000060 66B90900 mov cx, omniend-omniscent ; 9 1402 00000064 66BA0601 mov dx, 106h 1403 ;int 10h ; - VIDEO - WRITE STRING (AT,XT286,PS,EGA,VGA) 1404 ; AL = mode, BL = attribute if AL bit 1 clear, BH = display page number 1405 ; DH,DL = row,column of starting cursor position, CX = length of string 1406 ; ES:BP -> start of string 1407 00000068 CD31 int 31h ; TRDOS 386 - Video interrupt 1408 1409 0000006A 6601CD add bp, cx 1410 0000006D B110 mov cl, sancend-sanction ; 11h 1411 0000006F 66BA010C mov dx, 0C01h 1412 ;int 10h ; - VIDEO - WRITE STRING (AT,XT286,PS,EGA,VGA) 1413 ; AL = mode, BL = attribute if AL bit 1 clear, BH = display page number 1414 ; DH,DL = row,column of starting cursor position, CX = length of string 1415 ; ES:BP -> start of string 1416 00000073 CD31 int 31h ; TRDOS 386 - Video interrupt 1417 1418 makePalette 1419 <1> 1420 00000075 BB03000000 <1> mov ebx, 3 1421 <1> mPcolor: 1422 <1> 1423 0000007A BE[25130000] <1> mov esi, colors 1424 0000007F BF[06180000] <1> mov edi, palette 1425 00000084 30F6 <1> xor dh, dh 1426 00000086 AC <1> lodsb 1427 <1> 1428 00000087 0FB6C8 <1> movzx ecx, al 1429 <1> mPouter: 1430 0000008A 51 <1> push ecx 1431 0000008B 8A0E <1> mov cl, [esi] 1432 0000008D 8A2433 <1> mov ah, [ebx+esi] 1433 00000090 6629D0 <1> sub ax, dx 1434 00000093 52 <1> push edx 1435 00000094 6699 <1> cwd 1436 00000096 66F7F9 <1> idiv cx 1437 00000099 5A <1> pop edx 1438 <1> mPinner: 1439 0000009A 6601C2 <1> add dx, ax 1440 0000009D 88741FFF <1> mov [edi+ebx-1], dh 1441 000000A1 6683C703 <1> add di, 3 1442 000000A5 E2F3 <1> loop mPinner 1443 000000A7 6683C604 <1> add si, 4 1444 000000AB 59 <1> pop ecx 1445 000000AC E2DC <1> loop mPouter 1446 000000AE 664B <1> dec bx 1447 000000B0 75C8 <1> jnz short mPcolor 1448 1449 initTextures 1450 <1> 1451 <1> 1452 000000B2 BB22000000 <1> mov ebx, 34 1453 000000B7 6820030000 <1> push 800 1454 000000BC 6A05 <1> push 5 1455 000000BE E851070000 <1> call createFrac1 1456 <1> 1457 000000C3 BB20000000 <1> mov ebx, 32 1458 000000C8 6A70 <1> push 112 1459 000000CA 6A0F <1> push 15 1460 000000CC E843070000 <1> call createFrac1 1461 <1> createFrac2 1462 <2> 1463 <2> 1464 000000D1 0FB72D[54380000] <2> movzx ebp, word [tseg+36] 1465 000000D8 C1E504 <2> shl ebp, 4 1466 000000DB 892D[3C530000] <2> mov [_es], ebp 1467 000000E1 B014 <2> mov al, 20 1468 000000E3 E81E070000 <2> call setFrac 1469 000000E8 BF40000000 <2> mov edi, 64 1470 <2> 1471 000000ED 66B9C00F <2> mov cx, 4096-64 1472 000000F1 BB04000000 <2> mov ebx, 4 1473 <2> cF1loop: 1474 <2> 1475 000000F6 E8A6060000 <2> call rnd 1476 <2> 1477 <2> 1478 <2> 1479 <2> 1480 000000FB 02443DC0 <2> add al, [ebp+edi-64] 1481 000000FF 02443DC1 <2> add al, [ebp+edi-63] 1482 00000103 6648 <2> dec ax 1483 00000105 66D1E8 <2> shr ax, 1 1484 <2> 1485 <2> 1486 00000108 88443D00 <2> mov [ebp+edi], al 1487 0000010C 47 <2> inc edi 1488 0000010D E2E7 <2> loop cF1loop 1489 <1> createFrac3 1490 <2> 1491 0000010F 0FB72D[56380000] <2> movzx ebp, word [tseg+38] 1492 00000116 C1E504 <2> shl ebp, 4 1493 00000119 892D[3C530000] <2> mov [_es], ebp 1494 0000011F B003 <2> mov al, 3 1495 00000121 E8E0060000 <2> call setFrac 1496 <2> 1497 00000126 66B90010 <2> mov cx, 4096 1498 0000012A 89CB <2> mov ebx, ecx 1499 <2> cF3loop: 1500 <2> 1501 0000012C E870060000 <2> call rnd 1502 00000131 0FB7F8 <2> movzx edi, ax 1503 00000134 FE443D00 <2> inc byte [ebp+edi] 1504 00000138 E2F2 <2> loop cF3loop 1505 <1> initStars 1506 <2> 1507 <2> 1508 <2> 1509 0000013A B11E <2> mov cl, 30 1510 0000013C BF[D0370000] <2> mov edi, stars 1511 00000141 31DB <2> xor ebx, ebx 1512 00000143 891D[3C530000] <2> mov [_es], ebx 1513 <2> iSloop: 1514 00000149 66BB0001 <2> mov bx, 256 1515 0000014D E84F060000 <2> call rnd 1516 00000152 AA <2> stosb 1517 00000153 66BBC00E <2> mov bx, 4096-(64*5) 1518 00000157 6681C38000 <2> add bx, 128 1519 0000015C E840060000 <2> call rnd 1520 00000161 6683C040 <2> add ax, 64 1521 00000165 66AB <2> stosw 1522 00000167 E2E0 <2> loop iSloop 1523 <1> reactorWall 1524 <2> 1525 00000169 0FB72D[30380000] <2> movzx ebp, word [tseg] 1526 00000170 C1E504 <2> shl ebp, 4 1527 00000173 892D[3C530000] <2> mov [_es], ebp 1528 00000179 31FF <2> xor edi, edi 1529 0000017B B900100000 <2> mov ecx, 4096 1530 <2> rsmloop: 1531 00000180 89F8 <2> mov eax, edi 1532 00000182 A808 <2> test al, 8 1533 00000184 7E02 <2> jle short rsnonot1 1534 00000186 F6D0 <2> not al 1535 <2> rsnonot1: 1536 00000188 240F <2> and al, 15 1537 0000018A 89C3 <2> mov ebx, eax 1538 0000018C 89F8 <2> mov eax, edi 1539 0000018E 66C1E806 <2> shr ax, 6 1540 00000192 A808 <2> test al, 8 1541 00000194 7E02 <2> jle short rsnonot2 1542 00000196 F6D0 <2> not al 1543 <2> rsnonot2: 1544 00000198 240F <2> and al, 15 1545 0000019A 38D8 <2> cmp al, bl 1546 0000019C 7E02 <2> jle short rstakeal 1547 0000019E 89D8 <2> mov eax, ebx 1548 <2> rstakeal: 1549 000001A0 04E0 <2> add al, 224 1550 000001A2 01EF <2> add edi, ebp 1551 000001A4 AA <2> stosb 1552 000001A5 29EF <2> sub edi, ebp 1553 000001A7 E2D7 <2> loop rsmloop 1554 <1> addFractals 1555 <2> 1556 <2> 1557 000001A9 BE[02140000] <2> mov esi, aF 1558 000001AE B204 <2> mov dl, 4 1559 <2> aFloop: 1560 000001B0 0FB6DA <2> movzx ebx, dl 1561 000001B3 0FB7AB[30380000] <2> movzx ebp, word [ebx+tseg] 1562 000001BA C1E504 <2> shl ebp, 4 1563 000001BD 892D[3C530000] <2> mov [_es], ebp 1564 000001C3 31FF <2> xor edi, edi 1565 000001C5 66AD <2> lodsw 1566 000001C7 88C3 <2> mov bl, al 1567 <2> 1568 000001C9 0FB7AB[30380000] <2> movzx ebp, word [ebx+tseg] 1569 000001D0 C1E504 <2> shl ebp, 4 1570 000001D3 892D[40530000] <2> mov [_fs], ebp 1571 <2> 1572 000001D9 66B90010 <2> mov cx, 4096 1573 <2> 1574 000001DD 8B1D[3C530000] <2> mov ebx, [_es] 1575 <2> aFiloop: 1576 000001E3 8A443D00 <2> mov al, [ebp+edi] 1577 000001E7 00E0 <2> add al, ah 1578 <2> 1579 000001E9 88043B <2> mov [ebx+edi], al 1580 000001EC 47 <2> inc edi 1581 000001ED E2F4 <2> loop aFiloop 1582 <2> 1583 000001EF FEC2 <2> inc dl 1584 000001F1 FEC2 <2> inc dl 1585 000001F3 80FA1E <2> cmp dl, 30 1586 000001F6 7EB8 <2> jle short aFloop 1587 <1> effects 1588 <2> 1589 <2> 1590 <2> 1591 <2> 1592 000001F8 B11A <2> mov cl, 26 1593 000001FA BE[66130000] <2> mov esi, aE 1594 <2> 1595 000001FF 31DB <2> xor ebx, ebx 1596 00000201 31FF <2> xor edi, edi 1597 <2> effmloop: 1598 00000203 51 <2> push ecx 1599 00000204 8A1E <2> mov bl, [esi] 1600 00000206 88DA <2> mov dl, bl 1601 00000208 C0EA04 <2> shr dl, 4 1602 0000020B 80E30F <2> and bl, 0Fh 1603 <2> 1604 0000020E D0E3 <2> shl bl, 1 1605 <2> 1606 00000210 0FB7AB[30380000] <2> movzx ebp, word [ebx+tseg] 1607 00000217 C1E504 <2> shl ebp, 4 1608 0000021A 892D[3C530000] <2> mov [_es], ebp 1609 <2> 1610 00000220 0FB64E02 <2> movzx ecx, byte [esi+2] 1611 <2> effyloop: 1612 00000224 0FB65E01 <2> movzx ebx, byte [esi+1] 1613 <2> effxloop: 1614 00000228 89CF <2> mov edi, ecx 1615 0000022A 66C1E706 <2> shl di, 6 1616 <2> 1617 0000022E 01DF <2> add edi, ebx 1618 00000230 88D0 <2> mov al, dl 1619 00000232 FEC8 <2> dec al 1620 00000234 7414 <2> jz short effect1 1621 00000236 FEC8 <2> dec al 1622 00000238 740C <2> jz short effect2 1623 <2> 1624 0000023A 89D8 <2> mov eax, ebx 1625 <2> 1626 0000023C 01C8 <2> add eax, ecx 1627 0000023E 2404 <2> and al, 4 1628 <2> 1629 00000240 7408 <2> jz short effect1 1630 00000242 B098 <2> mov al, 152 1631 <2> effdonot: 1632 00000244 EB04 <2> jmp short effect1 1633 <2> effect2: 1634 00000246 8A443D00 <2> mov al, [ebp+edi] 1635 <2> effect1: 1636 0000024A 024605 <2> add al, [esi+5] 1637 0000024D 88443D00 <2> mov [ebp+edi], al 1638 00000251 FEC3 <2> inc bl 1639 00000253 3A5E03 <2> cmp bl, [esi+3] 1640 00000256 7ED0 <2> jle short effxloop 1641 <2> 1642 00000258 FEC1 <2> inc cl 1643 0000025A 3A4E04 <2> cmp cl, [esi+4] 1644 0000025D 7EC5 <2> jle short effyloop 1645 0000025F 6683C606 <2> add si, 6 1646 00000263 59 <2> pop ecx 1647 00000264 E29D <2> loop effmloop 1648 <1> addLava 1649 <2> 1650 <2> 1651 00000266 0FB72D[46380000] <2> movzx ebp, word [tseg+22] 1652 0000026D C1E504 <2> shl ebp, 4 1653 00000270 892D[3C530000] <2> mov [_es], ebp 1654 <2> 1655 00000276 BFFF0F0000 <2> mov edi, 4095 1656 <2> 1657 <2> 1658 0000027B B114 <2> mov cl, 20 1659 <2> 1660 0000027D B85E000000 <2> mov eax, 94 1661 <2> aLyloop: 1662 00000282 51 <2> push ecx 1663 00000283 66C1E103 <2> shl cx, 3 1664 <2> aLxloop: 1665 00000287 57 <2> push edi 1666 00000288 50 <2> push eax 1667 <2> 1668 00000289 BB40000000 <2> mov ebx, 64 1669 0000028E E80E050000 <2> call rnd 1670 00000293 6629C7 <2> sub di, ax 1671 <2> 1672 00000296 58 <2> pop eax 1673 00000297 88443D00 <2> mov [ebp+edi], al 1674 0000029B 5F <2> pop edi 1675 0000029C E2E9 <2> loop aLxloop 1676 0000029E 59 <2> pop ecx 1677 0000029F FEC8 <2> dec al 1678 000002A1 6683EF40 <2> sub di, 64 1679 000002A5 E2DB <2> loop aLyloop 1680 1681 calcShadeTab 1682 <1> 1683 000002A7 C705[3C530000]0000- <1> mov dword [_es], 0 1684 000002AF 0000 <1> 1685 <1> 1686 000002B1 BF[E4530000] <1> mov edi, shadetab 1687 000002B6 30DB <1> xor bl, bl 1688 <1> cSolp: 1689 000002B8 FEC3 <1> inc bl 1690 <1> 1691 000002BA 31C9 <1> xor ecx, ecx 1692 <1> cSilp1: 1693 000002BC 88C8 <1> mov al, cl 1694 000002BE 241F <1> and al, 31 1695 000002C0 F6E3 <1> mul bl 1696 000002C2 6601C0 <1> add ax, ax 1697 000002C5 88C8 <1> mov al, cl 1698 000002C7 24E0 <1> and al, 224 1699 000002C9 00E0 <1> add al, ah 1700 000002CB AA <1> stosb 1701 000002CC FEC1 <1> inc cl 1702 000002CE 80F9C0 <1> cmp cl, 192 1703 000002D1 75E9 <1> jne short cSilp1 1704 <1> cSilp2: 1705 000002D3 88C8 <1> mov al, cl 1706 000002D5 AA <1> stosb 1707 000002D6 FEC1 <1> inc cl 1708 000002D8 75F9 <1> jnz short cSilp2 1709 000002DA 80FB80 <1> cmp bl, 128 1710 000002DD 75D9 <1> jne short cSolp 1711 1712 000002DF 8925[8C370000] mov [oldstack], esp 1713 1714 startTimer 1715 <1> 1716 <1> 1717 <1> 1718 <1> 1719 <1> 1720 <1> 1721 <1> 1722 <1> 1723 000002E5 66BB510D <1> mov bx, 3409 1724 000002E9 E8C8040000 <1> call setTimer 1725 <1> 1726 <1> 1727 000002EE BB00840000 <1> mov ebx, 8400h 1728 000002F3 B901000000 <1> mov ecx, 1 1729 000002F8 BA[73060000] <1> mov edx, timer_callback 1730 000002FD B821000000 <1> mov eax, 33 1731 00000302 CD40 <1> int 40h 1732 00000304 0F8215030000 <1> jc loc_err_exit 1733 <1> 1734 0000030A A2[2B380000] <1> mov [timer_event_number], al 1735 startKBDHandler 1736 <1> 1737 <1> 1738 <1> 1739 <1> 1740 <1> 1741 <1> 1742 <1> 1743 <1> 1744 <1> 1745 <1> 1746 <1> 1747 <1> 1748 0000030F 90 <1> nop 1749 cls 1750 <1> 1751 00000310 0FB73D[2E380000] <1> movzx edi, word [bseg] 1752 00000317 C1E704 <1> shl edi, 4 1753 0000031A 893D[3C530000] <1> mov [_es], edi 1754 <1> 1755 00000320 BE40060A00 <1> mov esi, 0A0000h + (320*5) 1756 <1> 1757 00000325 B9007D0000 <1> mov ecx, 32000 1758 <1> clsloop: 1759 0000032A AC <1> lodsb 1760 0000032B AA <1> stosb 1761 0000032C AA <1> stosb 1762 0000032D E2FB <1> loop clsloop 1763 mainloop: 1764 ; 12/08/2017 1765 0000032F 803D[E0530000]00 cmp byte [tstatus], 0 1766 00000336 0F87D9020000 ja _check_kbdb 1767 1768 0000033C C605[E0530000]01 mov byte [tstatus], 1 1769 1770 ; 26/07/2017 1771 ;mov ah, 1 ; Check keyboard buffer 1772 ;;int 16h ; Keyboard interrupt 1773 ;int 32h ; TRDOS 386 - Jeyboard interrupt 1774 ;jnz _exit_ ; exit 1775 1776 setPalette2 1777 00000343 30C0 <1> xor al, al 1778 00000345 66BAC803 <1> mov dx, 3C8h 1779 <1> 1780 <1> 1781 00000349 B401 <1> mov ah, 1 1782 0000034B CD34 <1> int 34h 1783 <1> 1784 0000034D 6642 <1> inc dx 1785 0000034F BE[06180000] <1> mov esi, palette 1786 <1> 1787 00000354 B900030000 <1> mov ecx, 768 1788 <1> _sp2loop: 1789 <1> 1790 <1> 1791 00000359 AC <1> lodsb 1792 <1> 1793 <1> 1794 <1> 1795 0000035A CD34 <1> int 34h 1796 0000035C E2FB <1> loop _sp2loop 1797 1798 scriptIt 1799 <1> 1800 <1> 1801 <1> 1802 <1> 1803 0000035E 0FB70D[02180000] <1> movzx ecx, word [ticker] 1804 00000365 66C705[02180000]00- <1> mov word [ticker], 0 1805 0000036D 00 <1> 1806 0000036E 6609C9 <1> or cx, cx 1807 00000371 0F84D1000000 <1> jz sItickerNull 1808 <1> sImloop: 1809 00000377 51 <1> push ecx 1810 00000378 BE[F4170000] <1> mov esi, zspeed 1811 <1> 1812 <1> 1813 0000037D 66FF0D[FE170000] <1> dec word [scriptanz] 1814 00000384 7940 <1> jns short sIwaitTimer 1815 <1> 1816 <1> 1817 00000386 0FB71D[FC170000] <1> movzx ebx, word [scriptptr] 1818 0000038D 8A83[E0160000] <1> mov al, [ebx+script] 1819 00000393 08C0 <1> or al, al 1820 00000395 0F8484020000 <1> jz _exit_ 1821 0000039B 6689C3 <1> mov bx, ax 1822 0000039E 80E307 <1> and bl, 7 1823 <1> 1824 000003A1 881D[00180000] <1> mov [scriptins], bl 1825 000003A7 FECB <1> dec bl 1826 000003A9 7507 <1> jnz short sInegateTurn 1827 <1> 1828 000003AB 66F71D[5D170000] <1> neg word [zstep] 1829 <1> sInegateTurn: 1830 000003B2 6625F800 <1> and ax, 0F8h 1831 000003B6 6601C0 <1> add ax, ax 1832 <1> 1833 000003B9 66A3[FE170000] <1> mov [scriptanz], ax 1834 <1> 1835 000003BF 66FF05[FC170000] <1> inc word [scriptptr] 1836 <1> sIwaitTimer: 1837 <1> 1838 000003C6 A0[00180000] <1> mov al, [scriptins] 1839 000003CB 6698 <1> cbw 1840 000003CD 28ED <1> sub ch, ch 1841 000003CF 6648 <1> dec ax 1842 000003D1 7510 <1> jnz short sInoturn 1843 <1> 1844 000003D3 668B1D[5D170000] <1> mov bx, [zstep] 1845 <1> 1846 000003DA 66011D[FA170000] <1> add [ozw], bx 1847 000003E1 EB18 <1> jmp short sI_1 1848 <1> sInoturn: 1849 000003E3 B103 <1> mov cl, 3 1850 <1> sIrotateLoop: 1851 000003E5 6648 <1> dec ax 1852 000003E7 7505 <1> jnz short sInoIncrement 1853 <1> 1854 000003E9 66FF06 <1> inc word [esi] 1855 000003EC EB0D <1> jmp short sI_1 1856 <1> sInoIncrement: 1857 000003EE 6648 <1> dec ax 1858 000003F0 7505 <1> jnz short sInoDecrement 1859 <1> 1860 000003F2 66FF0E <1> dec word [esi] 1861 000003F5 EB04 <1> jmp short sI_1 1862 <1> sInoDecrement: 1863 000003F7 46 <1> inc esi 1864 000003F8 46 <1> inc esi 1865 000003F9 E2EA <1> loop sIrotateLoop 1866 <1> sI_1: 1867 <1> 1868 000003FB 66BE[F617] <1> mov si, oxw 1869 000003FF B103 <1> mov cl, 3 1870 <1> 1871 <1> 1872 <1> sIpushloop: 1873 00000401 66AD <1> lodsw 1874 00000403 66C1F802 <1> sar ax, 2 1875 00000407 6650 <1> push ax 1876 00000409 E2F6 <1> loop sIpushloop 1877 <1> 1878 0000040B 66676B44FC10 <1> imul ax, word [si-4], 16 1879 <1> 1880 00000411 6650 <1> push ax 1881 <1> 1882 <1> 1883 <1> 1884 <1> 1885 <1> 1886 <1> 1887 00000413 E8210B0000 <1> call calcRotMat 1888 <1> 1889 00000418 B103 <1> mov cl, 3 1890 0000041A 31F6 <1> xor esi, esi 1891 <1> sImoveLoop: 1892 0000041C D986[9E170000] <1> fld dword [esi+owmat+24] 1893 00000422 DE0D[F4170000] <1> fimul word [zspeed] 1894 00000428 DE35[D2110000] <1> fidiv word [CONST1792] 1895 0000042E D886[7A170000] <1> fadd dword [esi+ob] 1896 00000434 D99E[7A170000] <1> fstp dword [esi+ob] 1897 0000043A 6683C604 <1> add si, 4 1898 0000043E E2DC <1> loop sImoveLoop 1899 00000440 59 <1> pop ecx 1900 <1> 1901 00000441 49 <1> dec ecx 1902 00000442 0F852FFFFFFF <1> jnz sImloop 1903 <1> sItickerNull: 1904 1905 animDoor 1906 <1> 1907 <1> 1908 <1> 1909 00000448 0FB705[5F170000] <1> movzx eax, word [doortimer] 1910 0000044F 6609C0 <1> or ax, ax 1911 00000452 7905 <1> jns short aDnounder 1912 00000454 6631C0 <1> xor ax, ax 1913 00000457 EB4B <1> jmp short alreadydrawed 1914 <1> aDnounder: 1915 00000459 803D[01180000]00 <1> cmp byte [once], 0 1916 00000460 7542 <1> jne short alreadydrawed 1917 00000462 FE05[01180000] <1> inc byte [once] 1918 00000468 50 <1> push eax 1919 <1> starbackground 1920 <2> 1921 00000469 0FB72D[2E380000] <2> movzx ebp, word [bseg] 1922 00000470 C1E504 <2> shl ebp, 4 1923 00000473 892D[3C530000] <2> mov [_es], ebp 1924 <2> 1925 <2> 1926 00000479 B964000000 <2> mov ecx, 100 1927 <2> starbackloop: 1928 0000047E 51 <2> push ecx 1929 0000047F 66BBC0C1 <2> mov bx, 320*155 1930 <2> 1931 00000483 E819030000 <2> call rnd 1932 00000488 66050019 <2> add ax, 320*20 1933 <2> 1934 0000048C 0FB7F8 <2> movzx edi, ax 1935 0000048F 80E407 <2> and ah, 7 1936 <2> 1937 00000492 BA3B010000 <2> mov edx, 320-5 1938 00000497 66B90200 <2> mov cx, 2 1939 <2> 1940 <2> 1941 0000049B E86F020000 <2> call setstarbob 1942 000004A0 59 <2> pop ecx 1943 000004A1 E2DB <2> loop starbackloop 1944 000004A3 58 <1> pop eax 1945 <1> alreadydrawed: 1946 000004A4 6683F818 <1> cmp ax, 24 1947 000004A8 7E04 <1> jle short aDnoover 1948 000004AA 66B81800 <1> mov ax, 24 1949 <1> aDnoover: 1950 000004AE 66C1E006 <1> shl ax, 6 1951 <1> 1952 <1> 1953 000004B2 0FB72D[4A380000] <1> movzx ebp, word [tseg+26] 1954 000004B9 C1E504 <1> shl ebp, 4 1955 000004BC 892D[3C530000] <1> mov [_es], ebp 1956 000004C2 0FB71D[4E380000] <1> movzx ebx, word [tseg+30] 1957 000004C9 C1E304 <1> shl ebx, 4 1958 000004CC 891D[38530000] <1> mov [_ds], ebx 1959 000004D2 89DE <1> mov esi, ebx 1960 <1> 1961 000004D4 01C6 <1> add esi, eax 1962 000004D6 89EF <1> mov edi, ebp 1963 <1> 1964 000004D8 B900040000 <1> mov ecx, 1024 1965 000004DD F366A5 <1> rep movsw 1966 000004E0 BE00080000 <1> mov esi, 2048 1967 000004E5 6629C6 <1> sub si, ax 1968 000004E8 56 <1> push esi 1969 000004E9 01DE <1> add esi, ebx 1970 000004EB B504 <1> mov ch, 4 1971 000004ED F366A5 <1> rep movsw 1972 000004F0 5F <1> pop edi 1973 000004F1 01EF <1> add edi, ebp 1974 000004F3 6689C1 <1> mov cx, ax 1975 000004F6 31C0 <1> xor eax, eax 1976 000004F8 F366AB <1> rep stosw 1977 <1> 1978 000004FB A3[38530000] <1> mov [_ds], eax 1979 1980 ; 26/07/2017 1981 00000500 0FB73D[2C380000] movzx edi, word [vseg] ; es = [vseg] 1982 00000507 C1E704 shl edi, 4 1983 0000050A 893D[3C530000] mov [_es], edi 1984 00000510 0FB735[2E380000] movzx esi, word [bseg] ; ds = [bseg] 1985 00000517 C1E604 shl esi, 4 1986 0000051A 8935[38530000] mov [_ds], esi 1987 00000520 E80D020000 call copyseg 1988 00000525 C705[38530000]0000- mov dword [_ds], 0 ; ds = cs 1989 0000052D 0000 1990 1991 rotation 1992 <1> 1993 <1> 1994 <1> 1995 0000052F 0FB70D[661B0000] <1> movzx ecx, word [object.panz] 1996 <1> 1997 00000536 BE[6A1B0000] <1> mov esi, object.p 1998 0000053B BF[383A0000] <1> mov edi, rp 1999 <1> rotmlp: 2000 <1> 2001 00000540 BB[AC170000] <1> mov ebx, wmat 2002 00000545 66BA0300 <1> mov dx, 3 2003 <1> rotilp: 2004 00000549 DF06 <1> fild word [esi+0] 2005 0000054B D825[7A170000] <1> fsub dword [ob+vector.x] 2006 00000551 D80B <1> fmul dword [ebx+0] 2007 00000553 DF4602 <1> fild word [esi+2] 2008 00000556 D825[7E170000] <1> fsub dword [ob+vector.y] 2009 0000055C D84B04 <1> fmul dword [ebx+4] 2010 0000055F DF4604 <1> fild word [esi+4] 2011 00000562 D825[82170000] <1> fsub dword [ob+vector.z] 2012 00000568 D84B08 <1> fmul dword [ebx+8] 2013 <1> 2014 <1> 2015 0000056B DEC1 <1> faddp 2016 0000056D DEC1 <1> faddp 2017 0000056F D91F <1> fstp dword [edi] 2018 00000571 6683C704 <1> add di, 4 2019 <1> 2020 00000575 6683C30C <1> add bx, 12 2021 00000579 664A <1> dec dx 2022 0000057B 75CC <1> jnz short rotilp 2023 0000057D 6683C608 <1> add si, 8 2024 <1> 2025 00000581 E2BD <1> loop rotmlp 2026 sortFaces 2027 <1> 2028 00000583 C705[3C530000]0000- <1> mov dword [_es], 0 2029 0000058B 0000 <1> 2030 <1> 2031 0000058D BF[F84C0000] <1> mov edi, facei 2032 00000592 57 <1> push edi 2033 <1> 2034 <1> 2035 00000593 BE[EA270000] <1> mov esi, object.f 2036 00000598 89F0 <1> mov eax, esi 2037 <1> 2038 <1> 2039 0000059A 0FB70D[681B0000] <1> movzx ecx, word [object.fanz] 2040 <1> 2041 000005A1 31DB <1> xor ebx, ebx 2042 <1> sFmloop: 2043 000005A3 D9EE <1> fldz 2044 000005A5 51 <1> push ecx 2045 000005A6 66B90400 <1> mov cx, 4 2046 <1> sFiloop: 2047 000005AA 666B1E0C <1> imul bx, word [esi], 12 2048 000005AE 46 <1> inc esi 2049 000005AF 46 <1> inc esi 2050 000005B0 D8A3[403A0000] <1> fsub dword [ebx+rp+vector.z] 2051 000005B6 E2F2 <1> loop sFiloop 2052 000005B8 59 <1> pop ecx 2053 000005B9 DF1F <1> fistp word [edi] 2054 000005BB 47 <1> inc edi 2055 000005BC 47 <1> inc edi 2056 <1> 2057 000005BD 66AB <1> stosw 2058 000005BF 6683C00A <1> add ax, 10 2059 000005C3 46 <1> inc esi 2060 000005C4 46 <1> inc esi 2061 000005C5 E2DC <1> loop sFmloop 2062 <1> 2063 000005C7 57 <1> push edi 2064 000005C8 E88F010000 <1> call qsort 2065 2066 ;movzx ecx, word [o+object.fanz] 2067 000005CD 0FB70D[681B0000] movzx ecx, word [object.fanz] 2068 2069 000005D4 BE[F84C0000] mov esi, facei 2070 drawloop: 2071 ; 27/07/2017 2072 000005D9 66AD lodsw 2073 000005DB 66AD lodsw 2074 ;movzx ebx, ax ; face address in 'o+object.f' 2075 000005DD 0FB7D8 movzx ebx, ax ; face address in 'object.f' 2076 ;pushad 2077 000005E0 56 push esi 2078 000005E1 51 push ecx 2079 000005E2 E8CC060000 call drawclippedface 2080 000005E7 59 pop ecx 2081 000005E8 5E pop esi 2082 ;popad 2083 000005E9 E2EE loop drawloop 2084 2085 000005EB 0FB735[2C380000] movzx esi, word [vseg] ; ds = [vseg] 2086 000005F2 C1E604 shl esi, 4 2087 000005F5 8935[38530000] mov [_ds], esi 2088 2089 000005FB BF00000A00 mov edi, 0A0000h 2090 00000600 893D[3C530000] mov [_es], edi ; es = 0A000h 2091 2092 00000606 E827010000 call copyseg 2093 2094 0000060B C705[38530000]0000- mov dword [_ds], 0 ; ds = cs ; 11/08/2017 2095 00000613 0000 2096 2097 _check_kbdb: 2098 00000615 B401 mov ah, 1 ; Check keyboard buffer 2099 00000617 CD32 int 32h ; TRDOS 386 Keyboard interrupt 2100 ;jnz _exit_ ; exit 2101 ;jmp mainloop 2102 00000619 0F8410FDFFFF jz mainloop ; 11/02/2017 2103 loc_err_exit: 2104 _exit_: 2105 ; 26/07/2017 2106 0000061F C705[38530000]0000- mov dword [_ds], 0 ; ds = cs 2107 00000627 0000 2108 00000629 8B25[8C370000] mov esp, [oldstack] 2109 silence 2110 0000062F 66B90F00 <1> mov cx, 15 2111 <1> Siloop: 2112 00000633 6689C8 <1> mov ax, cx 2113 00000636 04B0 <1> add al, CMD_CHANGEPARAM 2114 00000638 E890010000 <1> call writeGM 2115 0000063D B07B <1> mov al, MOD_ALLNOTESOFF 2116 0000063F E889010000 <1> call writeGM 2117 00000644 30C0 <1> xor al, al 2118 00000646 E882010000 <1> call writeGM 2119 0000064B E2E6 <1> loop Siloop 2120 <1> Sinosound: 2121 stopKBDHandler 2122 <1> 2123 <1> 2124 <1> 2125 <1> 2126 <1> 2127 <1> 2128 <1> 2129 <1> 2130 <1> 2131 <1> 2132 0000064D 90 <1> nop 2133 stopTimer 2134 <1> 2135 <1> 2136 <1> 2137 <1> 2138 <1> 2139 <1> 2140 <1> 2141 <1> 2142 0000064E 6631DB <1> xor bx, bx 2143 00000651 E860010000 <1> call setTimer 2144 <1> 2145 <1> 2146 00000656 0FB61D[2B380000] <1> movzx ebx, byte [timer_event_number] 2147 <1> 2148 <1> 2149 <1> 2150 0000065D B821000000 <1> mov eax, 33 2151 00000662 CD40 <1> int 40h 2152 <1> 2153 ;restore_text_mode: 2154 set80x25 2155 00000664 66B80300 <1> mov ax, 3 2156 <1> 2157 <1> 2158 00000668 CD31 <1> int 31h 2159 terminate: 2160 sys _exit ; INT 40h 2161 <1> 2162 <1> 2163 <1> 2164 <1> 2165 <1> %if %0 >= 2 2166 <1> mov ebx, %2 2167 <1> %if %0 >= 3 2168 <1> mov ecx, %3 2169 <1> %if %0 = 4 2170 <1> mov edx, %4 2171 <1> %endif 2172 <1> %endif 2173 <1> %endif 2174 0000066A B801000000 <1> mov eax, %1 2175 <1> 2176 0000066F CD40 <1> int 40h 2177 here: 2178 00000671 EBFE jmp short here 2179 2180 ;============================================================================== 2181 ; interrupt handler 2182 ;============================================================================== 2183 ;*********************************************** 2184 ;* description : timer routine * 2185 ;* parameter : none * 2186 ;* sideeffect : none * 2187 ;* back : none * 2188 ;*********************************************** 2189 2190 timer_callback: 2191 ; 12/08/2017 2192 ; 10/08/2017 2193 2194 ;playsong 2195 2196 00000673 66FF05[02180000] inc word [ticker] 2197 0000067A FE05[2A380000] inc byte [twice] 2198 2199 ; 12/08/2017 2200 ;and byte [twice], 7 2201 ;jnz short tr_1 2202 2203 ; 12/08/2017 2204 ; (25 Hz is necessary for proper rendering...) 2205 ; (50 Hz was enough for DOS real mode 2206 ; but not enough for TRDOS 386 protected 2207 ; mode, for real computer and Virtual Box running.) 2208 2209 00000680 8025[2A380000]0F and byte [twice], 15 ; 23.333 Hz (350/15) 2210 00000687 756F jnz short tr_1 2211 2212 00000689 C605[E0530000]00 mov byte [tstatus], 0 ; screen update (50 Hz) flag 2213 2214 colorCycle 2215 <1> 2216 <1> 2217 <1> base equ 6*32 2218 <1> range equ 32 2219 <1> 2220 00000690 C705[3C530000]0000- <1> mov dword [_es], 0 2221 00000698 0000 <1> 2222 <1> 2223 0000069A BF[461A0000] <1> mov edi, palette+(base*3) 2224 0000069F 89FE <1> mov esi, edi 2225 000006A1 66AD <1> lodsw 2226 <1> 2227 000006A3 46 <1> inc esi 2228 <1> 2229 000006A4 B95D000000 <1> mov ecx, (range*3-3) 2230 000006A9 F3A4 <1> rep movsb 2231 000006AB 66AB <1> stosw 2232 <1> 2233 animStars 2234 <1> 2235 <1> 2236 <1> _base equ 7*32 2237 <1> 2238 000006AD 0FB72D[32380000] <1> movzx ebp, word [tseg+2] 2239 000006B4 C1E504 <1> shl ebp, 4 2240 000006B7 892D[3C530000] <1> mov [_es], ebp 2241 <1> 2242 000006BD E842010000 <1> call clearFrac 2243 <1> 2244 <1> 2245 000006C2 B11E <1> mov cl, 30 2246 <1> 2247 <1> 2248 000006C4 BB[D0370000] <1> mov ebx, stars 2249 <1> aSoloop: 2250 000006C9 FE0B <1> dec byte [ebx] 2251 000006CB 8A23 <1> mov ah, [ebx] 2252 000006CD 80E43F <1> and ah, 63 2253 000006D0 80FC1F <1> cmp ah, 31 2254 000006D3 7605 <1> jbe short aSnonot 2255 000006D5 F6D4 <1> not ah 2256 000006D7 80E41F <1> and ah, 31 2257 <1> aSnonot: 2258 000006DA D0EC <1> shr ah, 1 2259 <1> 2260 000006DC 0FB77B01 <1> movzx edi, word [ebx+1] 2261 <1> 2262 000006E0 51 <1> push ecx 2263 000006E1 53 <1> push ebx 2264 <1> 2265 000006E2 BA3B000000 <1> mov edx, 64-5 2266 000006E7 66B900E0 <1> mov cx, _base*256+0 2267 <1> 2268 <1> 2269 000006EB E81F000000 <1> call setstarbob 2270 <1> 2271 000006F0 5B <1> pop ebx 2272 000006F1 59 <1> pop ecx 2273 <1> 2274 000006F2 6683C303 <1> add bx, 3 2275 000006F6 E2D1 <1> loop aSoloop 2276 2277 ;inc word [doortimer] 2278 tr_1: 2279 ; 12/08/2017 2280 ; (25 Hz is not ennough for final StarBackground) 2281 2282 000006F8 F605[2A380000]07 test byte [twice], 7 ; 50 Hz 2283 000006FF 7507 jnz short tr_2 2284 2285 00000701 66FF05[5F170000] inc word [doortimer] ; (animDoor, starbackground) 2286 tr_2: 2287 00000708 B827000000 mov eax, 39 ; 'sysrele' 2288 0000070D CD40 int 40h ; TRDOS 386 system call 2289 2290 ;============================================================================== 2291 ; sub routines 2292 ;============================================================================== 2293 ;*********************************************** 2294 ;* description : draw a the starbob * 2295 ;* parameter : ds,es: source seg,dest seg * 2296 ;* sideeffect : ax,cx,si,di * 2297 ;* back : none * 2298 ;*********************************************** 2299 2300 setstarbob: 2301 ; 26/07/2017 2302 ;mov ebp, [_es] 2303 0000070F BE[1E140000] mov esi, bob 2304 00000714 B305 mov bl, 5 2305 yloop: 2306 00000716 B705 mov bh, 5 2307 xloop: 2308 00000718 AC lodsb 2309 00000719 28E0 sub al, ah 2310 0000071B 7E08 jle short aSnodraw 2311 0000071D 00E8 add al, ch 2312 0000071F D2E0 shl al, cl 2313 00000721 88443D00 mov [ebp+edi], al ; mov [es:di], al 2314 aSnodraw: 2315 ;inc di 2316 00000725 47 inc edi 2317 00000726 FECF dec bh 2318 00000728 75EE jnz short xloop 2319 0000072A 6601D7 add di, dx 2320 0000072D FECB dec bl 2321 0000072F 75E5 jnz short yloop 2322 00000731 C3 retn 2323 2324 ;*********************************************** 2325 ;* description : copy 16000 longs ds --> es * 2326 ;* parameter : ds,es: source seg,dest seg * 2327 ;* sideeffect : ax,cx,si,di * 2328 ;* back : none * 2329 ;*********************************************** 2330 2331 copyseg: 2332 ;mov cx, 16000 ; 3E80h 2333 00000732 B9803E0000 mov ecx, 16000 2334 00000737 F3A5 rep movsd 2335 00000739 C3 retn 2336 2337 ;*********************************************** 2338 ;* description : expand a part of the song * 2339 ;* parameter : si:base adress * 2340 ;* sideeffect : si,ax * 2341 ;* back : ax=si:new baseadress * 2342 ;*********************************************** 2343 2344 expand: 2345 0000073A 8A0E EPwhile: mov cl, [esi] 2346 0000073C 08C9 or cl, cl 2347 0000073E 7418 jz short EPendwhile 2348 00000740 7912 jns short EPnote 2349 EPcall: 2350 00000742 51 push ecx 2351 00000743 56 push esi 2352 00000744 46 inc esi 2353 00000745 E8F0FFFFFF call expand 2354 0000074A 5E pop esi 2355 0000074B 59 pop ecx 2356 0000074C FEC1 inc cl 2357 0000074E 75F2 jnz short EPcall 2358 00000750 89C6 mov esi, eax 2359 00000752 EBE6 jmp short EPwhile 2360 EPnote: 2361 00000754 66A5 movsw 2362 00000756 EBE2 jmp short EPwhile 2363 EPendwhile: 2364 00000758 46 inc esi 2365 00000759 89F0 mov eax, esi 2366 0000075B C3 retn 2367 2368 ;************************************************** 2369 ;* description : recursive index quicksort * 2370 ;* parameter : l,r:stack left and right border * 2371 ;* sideeffect : ax,bx,cx,dx,si,di * 2372 ;* back : none * 2373 ;************************************************** 2374 2375 qsort: 2376 ; 11/08/2017 2377 ; 07/04/2017 2378 ; 10/02/2017 2379 ; 29/01/2017 2380 2381 0000075C 58 pop eax ; get return address 2382 0000075D 59 pop ecx ; get 2. param r 2383 0000075E 5B pop ebx ; get 1. param l 2384 0000075F 50 push eax ; store return address 2385 2386 00000760 39D9 cmp ecx, ebx 2387 00000762 7E3C jle short QSendrek 2388 00000764 89DE mov esi, ebx 2389 00000766 89CF mov edi, ecx 2390 00000768 668B16 mov dx, [esi] 2391 0000076B EB0A jmp short QSwhile2 2392 QSrepeat: 2393 0000076D 663916 QSwhile1: cmp [esi], dx 2394 00000770 7E05 jle short QSwhile2 2395 00000772 83C604 add esi, 4 2396 00000775 EBF6 jmp short QSwhile1 2397 QSwhile2: 2398 00000777 663917 cmp [edi], dx 2399 0000077A 7D05 jnl short QSwhile2e 2400 0000077C 83EF04 sub edi, 4 2401 0000077F EBF6 jmp short QSwhile2 2402 QSwhile2e: 2403 00000781 39FE cmp esi, edi 2404 ;jg short QSnoswap 2405 00000783 7F0D jg short _QSnoswap 2406 00000785 AD lodsd 2407 00000786 8707 xchg eax, [edi] 2408 00000788 8946FC mov [esi-4], eax 2409 0000078B 83EF04 sub edi, 4 2410 QSnoswap: 2411 0000078E 39FE cmp esi, edi 2412 00000790 7EDB jle short QSrepeat 2413 _QSnoswap: 2414 00000792 56 push esi 2415 00000793 51 push ecx 2416 00000794 53 push ebx 2417 00000795 57 push edi 2418 00000796 E8C1FFFFFF call qsort 2419 0000079B E8BCFFFFFF call qsort 2420 QSendrek: 2421 000007A0 C3 retn 2422 2423 ;************************************************* 2424 ;* description : returns a pseudo random number * 2425 ;* parameter : bx=range * 2426 ;* sideeffect : eax,edx,si * 2427 ;* back : ax=rnd(range) * 2428 ;************************************************* 2429 2430 rnd: 2431 000007A1 BE[D8110000] mov esi, randommul 2432 ;mov si, randommul 2433 000007A6 AD lodsd 2434 000007A7 F726 mul dword [esi] ; randomseed 2435 000007A9 40 inc eax 2436 000007AA 8906 mov [esi], eax ; randomseed 2437 000007AC 66AD lodsw 2438 000007AE 66AD lodsw 2439 000007B0 66F7E3 mul bx 2440 000007B3 6692 xchg ax, dx 2441 000007B5 C3 retn 2442 2443 ;************************************************ 2444 ;* description : set timer speed to 1193180/AX * 2445 ;* interrupts per second * 2446 ;* parameter : bx * 2447 ;* sideeffect : ax * 2448 ;* back : none * 2449 ;************************************************ 2450 2451 setTimer: ; set timer speed to 1193180/BX (TRDOS 386) 2452 000007B6 B036 mov al, 36h 2453 ;out 43h, al ; Timer 8253-5 (AT: 8254.2). 2454 2455 000007B8 B401 mov ah, 1 ; out (byte) 2456 000007BA 66BA4300 mov dx, 43h 2457 000007BE CD34 int 34h ; TRDOS 386 - IOCTL interrupt 2458 2459 000007C0 88D8 mov al, bl 2460 ;out 40h, al ; Timer 8253-5 (AT: 8254.2). 2461 2462 000007C2 66BA4000 mov dx, 40h 2463 ;mov ah, 1 ; out (byte) 2464 000007C6 CD34 int 34h ; TRDOS 386 - IOCTL interrupt 2465 2466 000007C8 88F8 mov al, bh 2467 ;out 40h, al ; Timer 8253-5 (AT: 8254.2). 2468 2469 ;mov ah, 1 ; out (byte) 2470 ;mov dx, 40h 2471 000007CA CD34 int 34h ; TRDOS 386 - IOCTL interrupt 2472 2473 000007CC C3 retn 2474 2475 ;*********************************************** 2476 ;* description : send a byte to the GM-Port * 2477 ;* parameter : al:midi command * 2478 ;* sideeffect : dx * 2479 ;* back : none * 2480 ;*********************************************** 2481 2482 writeGM: 2483 000007CD 66BA3103 mov dx, GMPort ; 331h 2484 000007D1 51 push ecx 2485 000007D2 50 push eax 2486 000007D3 30C9 xor cl, cl 2487 busy: 2488 000007D5 FEC9 dec cl 2489 000007D7 7408 jz short timeOut 2490 ;in al, dx 2491 2492 000007D9 B400 mov ah, 0 ; in (byte) 2493 000007DB CD34 int 34h ; TRDOS 386 - IOCTL interrupt 2494 2495 000007DD A840 test al, 40h 2496 000007DF 75F4 jnz short busy 2497 2498 timeOut: ; CODE XREF: writeGM+8j 2499 000007E1 58 pop eax 2500 000007E2 59 pop ecx 2501 000007E3 664A dec dx 2502 ;out dx, al 2503 2504 000007E5 B401 mov ah, 1 ; out (byte) 2505 000007E7 CD34 int 34h ; TRDOS 386 - IOCTL interrupt 2506 2507 000007E9 C3 retn 2508 2509 ;************************************************** 2510 ;* description : send NOTEON command, volume 127 * 2511 ;* parameter : al:channel;ah:note * 2512 ;* sideeffect : dx,al * 2513 ;* back : none * 2514 ;************************************************** 2515 2516 setnote: 2517 000007EA E808000000 call setinstr 2518 000007EF B07F mov al, 127 ; 7Fh 2519 000007F1 E8D7FFFFFF call writeGM 2520 000007F6 C3 retn 2521 2522 ;*********************************************** 2523 ;* description : send CHANGEPRG command * 2524 ;* parameter : al:channel;ah:instrument * 2525 ;* sideeffect : dx,al * 2526 ;* back : none * 2527 ;*********************************************** 2528 2529 setinstr: 2530 000007F7 E8D1FFFFFF call writeGM 2531 000007FC 88E0 mov al, ah 2532 000007FE E8CAFFFFFF call writeGM 2533 00000803 C3 retn 2534 2535 ;************************************************** 2536 ;* description : clear/set the fractal es: to al * 2537 ;* parameter : al,es * 2538 ;* sideeffect : ax,cx,di,es * 2539 ;* back : none * 2540 ;************************************************** 2541 2542 clearFrac: 2543 00000804 31C0 xor eax, eax 2544 setFrac: 2545 ; 26/07/2017 2546 ;xor di, di 2547 00000806 8B3D[3C530000] mov edi, [_es] 2548 ;mov cx, 4096 ; 1000h 2549 0000080C B900100000 mov ecx, 4096 2550 00000811 F3AA rep stosb 2551 00000813 C3 retn 2552 2553 ;*********************************************** 2554 ;* description : calc shade bob fractal * 2555 ;* parameter : es:seg;num,rad:stack * 2556 ;* sideeffect : all * 2557 ;* back : none * 2558 ;*********************************************** 2559 2560 createFrac1: 2561 ; 26/07/2017 2562 2563 ;; *mov ebx, 34 2564 ;; *push 800 ; 320h ; arg 2 2565 ;; *push 5 ; arg 1 2566 ;; *call createFrac1 2567 ;; *mov ebx, 32 ; 20h 2568 ;; *push 112 ; 70h ; arg 2 2569 ;; *push 15 ; 0Fh ; arg 1 2570 ;; *call createFrac1 2571 2572 rad equ 8 ; arg 1 in [esp+4] 2573 num equ 12 ; arg 2 in [esp+8] 2574 2575 00000814 55 push ebp 2576 00000815 89E5 mov ebp, esp 2577 ; 2578 ;movzx ebx, word [ebx+tseg] ; es: 2579 00000817 668B9B[30380000] mov bx, [ebx+tseg] 2580 0000081E C1E304 shl ebx, 4 2581 00000821 891D[3C530000] mov [_es], ebx 2582 00000827 E8D8FFFFFF call clearFrac 2583 ;mov si, circletab 2584 0000082C BE[90370000] mov esi, circletab 2585 ;mov dx, [ebp+rad] 2586 00000831 8B5508 mov edx, [ebp+rad] 2587 ;movzx eax, dl 2588 ;mov eax, edx 2589 00000834 88D0 mov al, dl 2590 00000836 F6EA imul dl 2591 ;mov di, ax 2592 ;mov bx, ax 2593 00000838 89C3 mov ebx, eax 2594 ;mov cx, dx 2595 ;add cx, cx 2596 0000083A 89D1 mov ecx, edx 2597 0000083C 01C9 add ecx, ecx 2598 CCTloop: 2599 0000083E 88D0 mov al, dl 2600 00000840 F6EA imul dl 2601 00000842 66F7D8 neg ax 2602 ;add ax, di 2603 00000845 6601D8 add ax, bx ; 16/01/2017 2604 00000848 668906 mov [esi], ax 2605 0000084B DF06 fild word [esi] 2606 0000084D D9FA fsqrt 2607 0000084F DF1E fistp word [esi] 2608 00000851 46 inc esi 2609 00000852 46 inc esi 2610 00000853 664A dec dx 2611 00000855 E2E7 loop CCTloop 2612 2613 00000857 668B4D0C mov cx, [ebp+num] 2614 SBloop1: 2615 0000085B 51 push ecx 2616 ;mov ebx, 4096 ; 1000h 2617 0000085C 66BB0010 mov bx, 4096 2618 00000860 E83CFFFFFF call rnd 2619 00000865 0FB7F8 movzx edi, ax ; 05/02/2017 2620 ;mov esi, circletab 2621 00000868 66BE[9037] mov si, circletab 2622 0000086C 668B4D08 mov cx, [ebp+rad] 2623 ;add cx, cx 2624 00000870 01C9 add ecx, ecx 2625 00000872 8B1D[3C530000] mov ebx, [_es] 2626 SBloop2: 2627 00000878 51 push ecx 2628 00000879 66AD lodsw 2629 0000087B 6689C1 mov cx, ax 2630 ;add cx, cx 2631 0000087E 01C9 add ecx, ecx 2632 00000880 7410 jz short SBskip 2633 00000882 57 push edi 2634 00000883 6629C7 sub di, ax 2635 SBloop3: 2636 00000886 6681E7FF0F and di, 4095 ; 0FFFh 2637 0000088B FE043B inc byte [ebx+edi] ; 17/01/2017 2638 ;inc di 2639 0000088E 47 inc edi 2640 0000088F E2F5 loop SBloop3 2641 00000891 5F pop edi 2642 SBskip: 2643 00000892 6683C740 add di, 64 ; 40h 2644 00000896 59 pop ecx 2645 00000897 E2DF loop SBloop2 2646 00000899 59 pop ecx 2647 0000089A E2BF loop SBloop1 2648 0000089C 5D pop ebp 2649 0000089D C20800 ret 8 2650 2651 ;************************************************** 2652 ;* description : draw a perpective-texturemapped * 2653 ;* and g.-shaded n-sided polygon * 2654 ;* parameter : far ptr to poly, sides, textnum * 2655 ;* sideeffect : all * 2656 ;* back : none * 2657 ;* length : 700 bytes * 2658 ;************************************************** 2659 2660 scansubtextpoly: 2661 ; 10/08/2017 2662 ; 26/07/2017 2663 ; 07/04/2017 2664 ; 30/01/2017 2665 2666 ;; *mov edi, dcf.p2 2667 ;; *push edi ; arg 3 ; 32 bits push ! 2668 ;; *push word [dcf.j] ; arg 2 ; 16 bits push !! 2669 ;; *push word [dcf.col] ; arg 1 ; 16 bits push !! 2670 ;; *call scansubtextpoly 2671 2672 ; 10/08/2017 (operand size bugfix, 8, 10, 12) 2673 col equ 8 ; arg 1, [esp+4] ; dcf.col value 2674 n equ 10 ; arg 2, [esp+6] ; dcf.j value 2675 pol equ 12 ; arg 3, [esp+8] ; dcf.p2 address 2676 2677 ; 06/02/2017 2678 000008A0 55 push ebp 2679 000008A1 89E5 mov ebp, esp 2680 2681 ; 21/01/2017 2682 000008A3 B8FF7F0000 mov eax, 32767 2683 000008A8 89C2 mov edx, eax 2684 000008AA 89C3 mov ebx, eax 2685 000008AC 66F7DB neg bx ; -32767 ; 8001h 2686 000008AF 89DE mov esi, ebx ; -32767 2687 2688 ;e di = 32 bit address (in stack) /// 18/01/2017 2689 000008B1 8B7D0C mov edi, [ebp+pol] ; [ebp+12] ; dcf.p2 ; face structure 2690 2691 000008B4 31C9 xor ecx, ecx 2692 minmax: 2693 000008B6 663B4712 cmp ax, [edi+2+edge.e+edges.x] ; [edi+12h] 2694 000008BA 7E04 jle short noswap1 2695 000008BC 668B4712 mov ax, [edi+2+edge.e+edges.x] ; [edi+12h] 2696 noswap1: 2697 000008C0 663B5F12 cmp bx, [edi+2+edge.e+edges.x] ; [edi+12h] 2698 000008C4 7D04 jge short noswap2 2699 000008C6 668B5F12 mov bx, [edi+2+edge.e+edges.x] ; [edi+12h] 2700 noswap2: 2701 000008CA 663B570C cmp dx, [edi+edge.py] ; [edi+0Ch] 2702 000008CE 7E12 jle short noswap3 2703 000008D0 668B570C mov dx, [edi+edge.py] ; [edi+0Ch] 2704 000008D4 66890D[5A530000] mov [sstp.l], cx 2705 000008DB 66890D[58530000] mov [sstp.r], cx 2706 noswap3: 2707 000008E2 663B770C cmp si, [edi+edge.py] ; [edi+0Ch] 2708 000008E6 7D04 jge short noswap4 2709 000008E8 668B770C mov si, [edi+edge.py] ; [edi+0Ch] 2710 noswap4: 2711 000008EC 6683C724 add di, 36 ; 24h 2712 ;inc cx 2713 ; 10/08/2017 2714 000008F0 41 inc ecx 2715 000008F1 663B4D0A cmp cx, [ebp+n] ; [ebp+10] 2716 ; dcf.j ; number of visible edges/points 2717 000008F5 75BF jne short minmax 2718 2719 000008F7 6683FB00 cmp bx, 0 2720 000008FB 0F8C58030000 jl exitDraw 2721 00000901 663D4001 cmp ax, XMAX ; 140h 2722 00000905 0F8F4E030000 jg exitDraw 2723 2724 0000090B 6683FE15 cmp si, YMIN ; 15h 2725 0000090F 0F8C44030000 jl exitDraw 2726 00000915 6681FAB300 cmp dx, YMAX ; 0B3h 2727 0000091A 0F8F39030000 jg exitDraw 2728 00000920 668915[60530000] mov [sstp.miny], dx 2729 00000927 668935[5E530000] mov [sstp.maxy], si 2730 2731 ;{ down clipping } 2732 0000092E 66813D[5E530000]B3- cmp word [sstp.maxy], YMAX ; 0B3h 2733 00000936 00 2734 00000937 7E09 jle short noclipdown 2735 00000939 66C705[5E530000]B3- mov word [sstp.maxy], YMAX ; 0B3h 2736 00000941 00 2737 noclipdown: 2738 00000942 66A1[60530000] mov ax, [sstp.miny] 2739 00000948 663B05[5E530000] cmp ax, [sstp.maxy] 2740 0000094F 0F8404030000 je exitDraw 2741 00000955 66A3[5C530000] mov [sstp.y], ax 2742 ; 05/02/2017 2743 ;mov ebx, [ebp+col] ; [ebp+8] 2744 ; dcf.col ; shade/color index 2745 0000095B 668B5D08 mov bx, [ebp+col] ; 07/04/2017 2746 ; 26/07/2017 2747 0000095F 6601DB add bx, bx ; shl bx, 1 2748 ;movzx eax, word [vseg] 2749 00000962 66A1[2C380000] mov ax, [vseg] ; es = [vseg] 2750 00000968 C1E004 shl eax, 4 2751 0000096B A3[3C530000] mov [_es], eax 2752 00000970 0FB783[30380000] movzx eax, word [ebx+tseg] ; fs = [ebx+tseg] 2753 00000977 C1E004 shl eax, 4 2754 0000097A A3[40530000] mov [_fs], eax 2755 for: 2756 0000097F 0FB705[5C530000] movzx eax, word [sstp.y] 2757 00000986 663B05[5E530000] cmp ax, word [sstp.maxy] 2758 0000098D 0F8FC6020000 jg exitDraw 2759 00000993 0F848B000000 je exitwhile2 2760 while1: 2761 ;mov ax, [sstp.y] 2762 ;cmp ax, [sstp.maxy] 2763 ;jge short while2 2764 ; 05/02/2017 2765 00000999 666B1D[5A530000]24 imul bx, word [sstp.l], 36 2766 000009A1 0FB7F3 movzx esi, bx 2767 000009A4 03750C add esi, [ebp+pol] ; [ebp+12] 2768 2769 000009A7 663B460C cmp ax, [esi+edge.py] ; [esi+0Ch] 2770 000009AB 7530 jne short while2 2771 2772 000009AD 668B1D[5A530000] mov bx, [sstp.l] 2773 000009B4 664B dec bx 2774 000009B6 7D06 jge short nounder 2775 000009B8 668B5D0A mov bx, [ebp+n] ; [ebp+10] 2776 ; dcf.j ; visible edges/points 2777 000009BC 664B dec bx 2778 nounder: 2779 000009BE 66891D[5A530000] mov [sstp.l], bx 2780 000009C5 31FF xor edi, edi 2781 000009C7 E891020000 call calcDeltas 2782 000009CC 66A1[5C530000] mov ax, [sstp.y] 2783 000009D2 663B05[5E530000] cmp ax, [sstp.maxy] 2784 000009D9 7D49 jge short exitwhile2 2785 000009DB EBBC jmp short while1 2786 while2: 2787 ;mov ax, [sstp.y] 2788 000009DD 663B05[5E530000] cmp ax, [sstp.maxy] 2789 000009E4 7D3E jge short exitwhile2 2790 ; 05/02/2017 2791 000009E6 666B1D[58530000]24 imul bx, word [sstp.r], 36 2792 000009EE 0FB7F3 movzx esi, bx 2793 000009F1 03750C add esi, [ebp+pol] ; [ebp+12] 2794 2795 000009F4 663B460C cmp ax, [esi+edge.py] ; [esi+0Ch] 2796 000009F8 752A jne short exitwhile2 2797 2798 000009FA 668B1D[58530000] mov bx, [sstp.r] 2799 00000A01 6643 inc bx 2800 00000A03 663B5D0A cmp bx, [ebp+n] ; [ebp+10] 2801 00000A07 7C02 jl short noover 2802 ;xor bx, bx 2803 00000A09 31DB xor ebx, ebx 2804 noover: 2805 00000A0B 66891D[58530000] mov [sstp.r], bx 2806 00000A12 BF14000000 mov edi, 20 ; 14h 2807 00000A17 E841020000 call calcDeltas 2808 ; 2809 00000A1C 66A1[5C530000] mov ax, [sstp.y] 2810 00000A22 EBB9 jmp short while2 2811 exitwhile2: 2812 ;{ up clipping } 2813 00000A24 66833D[5C530000]15 cmp word [sstp.y], YMIN ; 15h 2814 00000A2C 0F8C04020000 jl clipup 2815 00000A32 0FB71D[A6530000] movzx ebx, word [sstp.edg+2+edges.x] 2816 00000A39 66891D[64530000] mov [sstp.mx1], bx 2817 00000A40 0FB70D[BA530000] movzx ecx, word [sstp.edg+20+2+edges.x] 2818 00000A47 66890D[62530000] mov [sstp.mx2], cx 2819 00000A4E 6629D9 sub cx, bx 2820 00000A51 0F84DF010000 jz exitol 2821 00000A57 66833D[62530000]00 cmp word [sstp.mx2], 0 2822 00000A5F 0F8ED1010000 jle exitol 2823 00000A65 66813D[64530000]40- cmp word [sstp.mx1], XMAX ; 140h 2824 00000A6D 01 2825 00000A6E 0F8FC2010000 jg exitol 2826 2827 00000A74 66F7DB neg bx 2828 00000A77 790D jns short myelse 2829 00000A79 6631DB xor bx, bx 2830 00000A7C EB11 jmp short myendif 2831 _nodivbyzero: 2832 00000A7E 8B87[90530000] mov eax, [edi+sstp.del+40] 2833 00000A84 EB26 jmp short nodivbyzero 2834 myelse: 2835 00000A86 66C705[64530000]00- mov word [sstp.mx1], 0 2836 00000A8E 00 2837 myendif: 2838 00000A8F BF10000000 mov edi, 16 ; 10h 2839 addloop1: 2840 ;{ calculate deltas } 2841 00000A94 8B87[B8530000] mov eax, [edi+sstp.edg+20] 2842 00000A9A 2B87[A4530000] sub eax, [edi+sstp.edg] 2843 00000AA0 99 cdq 2844 ;jcxz nodivbyzero 2845 00000AA1 67E3DA jcxz _nodivbyzero 2846 00000AA4 F7F9 idiv ecx 2847 00000AA6 8987[90530000] mov [edi+sstp.del+40], eax 2848 nodivbyzero: 2849 ;{ left clipping } 2850 00000AAC 8B87[90530000] mov eax, [edi+sstp.del+40] 2851 00000AB2 F7EB imul ebx 2852 00000AB4 0387[A4530000] add eax, [edi+sstp.edg] 2853 00000ABA 8987[CC530000] mov [edi+sstp.edg+40], eax 2854 00000AC0 6683EF04 sub di, 4 2855 00000AC4 75CE jnz short addloop1 2856 2857 00000AC6 66A1[A0530000] mov ax, [sstp.del+40+16] 2858 00000ACC 66A3[83110000] mov [dels_pos_w], ax 2859 2860 ;{ right clipping } 2861 00000AD2 66813D[62530000]40- cmp word [sstp.mx2], XMAX 2862 00000ADA 01 2863 00000ADB 7E09 jle short norightclip 2864 00000ADD 66C705[62530000]40- mov word [sstp.mx2], XMAX 2865 00000AE5 01 2866 norightclip: 2867 00000AE6 66693D[5C530000]40- imul di, word [sstp.y], 320 2868 00000AEE 01 2869 00000AEF 66033D[64530000] add di, [sstp.mx1] 2870 2871 00000AF6 66BB0001 mov bx, 256 ; 100h 2872 00000AFA A1[D0530000] mov eax, [sstp.edg+40+edges.u] 2873 00000AFF F7EB imul ebx 2874 00000B01 F73D[D8530000] idiv dword [sstp.edg+40+edges.w] 2875 00000B07 66A3[52530000] mov [sstp.uu2], ax 2876 00000B0D A1[D4530000] mov eax, [sstp.edg+40+edges.v] 2877 00000B12 F7EB imul ebx 2878 00000B14 F73D[D8530000] idiv dword [sstp.edg+40+edges.w] 2879 00000B1A 66A3[50530000] mov [sstp.vv2], ax 2880 outloop: 2881 00000B20 668B0D[62530000] mov cx, [sstp.mx2] 2882 00000B27 662B0D[64530000] sub cx, [sstp.mx1] 2883 00000B2E 0F8E02010000 jle exitol 2884 00000B34 6683F910 cmp cx, SUBRANGE ; 10h 2885 00000B38 7E04 jle short lastSeg 2886 00000B3A 66B91000 mov cx, SUBRANGE ; 10h 2887 lastSeg: 2888 ;{ uu1:=uu2 } 2889 ;{ vv1:=vv2 } 2890 00000B3E A1[50530000] mov eax, [sstp.vv2] 2891 00000B43 A3[54530000] mov [sstp.vv1], eax 2892 2893 00000B48 A1[94530000] mov eax, [sstp.del+40+edges.u] 2894 00000B4D F7E9 imul ecx 2895 00000B4F 0105[D0530000] add [sstp.edg+40+edges.u], eax 2896 00000B55 A1[98530000] mov eax, [sstp.del+40+edges.v] 2897 00000B5A F7E9 imul ecx 2898 00000B5C 0105[D4530000] add [sstp.edg+40+edges.v], eax 2899 00000B62 A1[9C530000] mov eax, [sstp.del+40+edges.w] 2900 00000B67 F7E9 imul ecx 2901 00000B69 0105[D8530000] add [sstp.edg+40+edges.w], eax 2902 2903 00000B6F 66BB0001 mov bx, 256 ; 100h 2904 00000B73 A1[D0530000] mov eax, [sstp.edg+40+edges.u] 2905 00000B78 F7EB imul ebx 2906 00000B7A F73D[D8530000] idiv dword [sstp.edg+40+edges.w] 2907 00000B80 66A3[52530000] mov [sstp.uu2], ax 2908 00000B86 A1[D4530000] mov eax, [sstp.edg+40+edges.v] 2909 00000B8B F7EB imul ebx 2910 00000B8D F73D[D8530000] idiv dword [sstp.edg+40+edges.w] 2911 00000B93 66A3[50530000] mov [sstp.vv2], ax 2912 2913 00000B99 66A1[52530000] mov ax, [sstp.uu2] 2914 00000B9F 662B05[56530000] sub ax, [sstp.uu1] 2915 00000BA6 6699 cwd 2916 00000BA8 66F7F9 idiv cx 2917 00000BAB 66A3[85110000] mov [ddu_pos_w], ax 2918 2919 00000BB1 66A1[50530000] mov ax, [sstp.vv2] 2920 00000BB7 662B05[54530000] sub ax, [sstp.vv1] 2921 00000BBE 6699 cwd 2922 00000BC0 66F7F9 idiv cx 2923 00000BC3 66A3[87110000] mov [ddv_pos_w], ax 2924 2925 00000BC9 668B35[54530000] mov si, [sstp.vv1] 2926 00000BD0 668B15[56530000] mov dx, [sstp.uu1] 2927 00000BD7 66A1[DC530000] mov ax, [sstp.edg+40+16] 2928 innerloop: 2929 ; 05/02/2017 2930 00000BDD 0FB7DE movzx ebx, si 2931 00000BE0 30DB xor bl, bl 2932 00000BE2 66C1EB02 shr bx, 2 2933 00000BE6 00F3 add bl, dh 2934 00000BE8 031D[40530000] add ebx, [_fs] 2935 00000BEE 0FB61B movzx ebx, byte [ebx] ; [fs:bx] 2936 00000BF1 08DB or bl, bl 2937 00000BF3 7415 jz short dels_pos 2938 00000BF5 88E7 mov bh, ah 2939 00000BF7 8A9B[E4530000] mov bl, [ebx+shadetab] 2940 2941 00000BFD 56 push esi 2942 00000BFE 0FB7F7 movzx esi, di 2943 00000C01 0335[3C530000] add esi, [_es] 2944 00000C07 881E mov [esi], bl ; [es:di] 2945 00000C09 5E pop esi 2946 dels_pos: 2947 00000C0A 660305[83110000] add ax, [dels_pos_w] ;{word ptr dels} 2948 ddu_pos: 2949 00000C11 660315[85110000] add dx, [ddu_pos_w] ;{word ptr ddu } 2950 ddv_pos: 2951 00000C18 660335[87110000] add si, [ddv_pos_w] ;{word ptr ddv } 2952 2953 00000C1F 6647 inc di 2954 00000C21 E2BA loop innerloop 2955 2956 00000C23 66A3[DC530000] mov [sstp.edg+40+16], ax 2957 00000C29 668305[64530000]10 add word [sstp.mx1], SUBRANGE 2958 00000C31 E9EAFEFFFF jmp outloop 2959 exitol: 2960 00000C36 BF24000000 clipup: mov edi, 36 ; 24h 2961 addloop: 2962 00000C3B 8B87[68530000] mov eax, [edi+sstp.del] 2963 00000C41 0187[A4530000] add [edi+sstp.edg], eax 2964 00000C47 6683EF04 sub di, 4 2965 00000C4B 79EE jns short addloop 2966 00000C4D 66FF05[5C530000] inc word [sstp.y] 2967 00000C54 E926FDFFFF jmp for 2968 exitDraw: 2969 00000C59 5D pop ebp 2970 ; 10/08/2017 2971 00000C5A C20800 ret 8 ; word, word, dword 2972 2973 ;*************************************************** 2974 ;* description : calc deltas for vertical interp. * 2975 ;* parameter : none * 2976 ;* sideeffect : all * 2977 ;*************************************************** 2978 2979 calcDeltas: 2980 ; 26/07/2017 2981 00000C5D 666BD324 imul dx, bx, 36 2982 00000C61 89F3 mov ebx, esi 2983 00000C63 0FB7F2 movzx esi, dx 2984 00000C66 03750C add esi, [ebp+pol] ; [ebp+12] 2985 ; 2986 00000C69 668B460C mov ax, [esi+12] 2987 00000C6D 662B05[5C530000] sub ax, [sstp.y] 2988 00000C74 0FBFC0 movsx eax, ax 2989 00000C77 A3[48530000] mov [sstp.dy], eax 2990 ;mov ecx, 5 2991 00000C7C 66B90500 mov cx, 5 2992 cDloop: 2993 00000C80 8B5310 mov edx, [ebx+16] 2994 00000C83 8997[A4530000] mov [edi+sstp.edg], edx 2995 00000C89 8B4610 mov eax, [esi+16] 2996 00000C8C 29D0 sub eax, edx 2997 00000C8E 99 cdq 2998 00000C8F 66833D[48530000]00 cmp word [sstp.dy], 0 2999 00000C97 740C je short cDskip 3000 00000C99 F73D[48530000] idiv dword [sstp.dy] 3001 00000C9F 8987[68530000] mov [edi+sstp.del], eax 3002 cDskip: 3003 ;mov dx, 4 3004 ;add di, dx 3005 ;add si, dx 3006 ;add bx, dx 3007 3008 00000CA5 BA04000000 mov edx, 4 3009 00000CAA 01D7 add edi, edx ; +4 3010 00000CAC 01D6 add esi, edx ; +4 3011 00000CAE 01D3 add ebx, edx ; +4 3012 3013 00000CB0 E2CE loop cDloop 3014 00000CB2 C3 retn 3015 3016 ;************************************************ 3017 ;* description : clip a poly at the viewplane, * 3018 ;* project and draw it * 3019 ;* parameter : bx:adress of the face * 3020 ;* sideeffect : all * 3021 ;* back : none * 3022 ;************************************************ 3023 3024 drawclippedface: 3025 ; 11/08/2017 3026 ; 27/07/2017 3027 ; 06/02/2017 3028 3029 dcf.d equ -2 ; word 3030 dcf.h equ -4 ; word 3031 dcf.j equ -6 ; word 3032 dcf.col equ -8 ; word 3033 dcf.is_in equ -10 ; byte 3034 3035 dcf.p0 equ -192 ; poly (5*36 bytes) 3036 dcf.p2 equ -372 ; poly (5*36 bytes) 3037 3038 00000CB3 C8740100 enter 372, 0 ; 174h 3039 ; push ebp ; mov ebp, esp ; sub esp, 372 3040 3041 ;mov si, uvtab 3042 00000CB7 BE[3C140000] mov esi, uvtab 3043 00000CBC 31FF xor edi, edi 3044 ;mov ecx, 4 3045 00000CBE 66B90400 mov cx, 4 3046 dCFinitloop: 3047 ;push ebx ; face addr (in 'o+object.f')(29/01/2017) 3048 00000CC2 53 push ebx ; face addr (in 'object.f') 3049 ;movzx ebx, word [ebx] 3050 00000CC3 668B1B mov bx, [ebx] ; point index into 'rp:' ? (29/01/2017) 3051 3052 00000CC6 53 push ebx 3053 00000CC7 666BDB0C imul bx, bx, 12 ; (point vector size = 12 bytes) 3054 00000CCB 81C3[383A0000] add ebx, rp ; addr of rotated point vects (29/01/2017) 3055 00000CD1 8B03 mov eax, [ebx] 3056 ; vector(4-cx).x 3057 00000CD3 89843D40FFFFFF mov [ebp+edi+dcf.p0+0], eax 3058 ; vector(4-cx).y 3059 00000CDA 8B4304 mov eax, [ebx+4] 3060 00000CDD 89843D44FFFFFF mov [ebp+edi+dcf.p0+4], eax 3061 3062 00000CE4 D94308 fld dword [ebx+8] 3063 ; vector(4-cx).z 3064 00000CE7 D9943D48FFFFFF fst dword [ebp+edi+dcf.p0+8] 3065 00000CEE DF5DFC fistp word [ebp+dcf.h] ; dcf.h = z distance 3066 00000CF1 5B pop ebx 3067 3068 00000CF2 668B45FC mov ax, [ebp+dcf.h] 3069 00000CF6 66050002 add ax, 512 ; 200h 3070 00000CFA 0F8874010000 js dCFbackclip ; not visible ? (29/01/2017) 3071 3072 00000D00 663DFF01 cmp ax, 511 ; 1FFh 3073 00000D04 7E04 jle short intensityOK 3074 00000D06 66B8FF01 mov ax, 511 ; 1FFh ; maximum z distance (dept) ? 3075 intensityOK: 3076 00000D0A 66C1E303 shl bx, 3 ; point index * 8 3077 00000D0E 31D2 xor edx, edx 3078 00000D10 66C1E007 shl ax, 7 3079 ;mul word [ebx+o+6+object.p] ; [ebx+o+6+4] 3080 00000D14 66F7A3[701B0000] mul word [ebx+6+object.p] ; 10/02/2017 3081 ; edges(4-cx).s 3082 00000D1B 89943D60FFFFFF mov [ebp+edi+dcf.p0+32], edx 3083 3084 00000D22 30E4 xor ah, ah 3085 00000D24 8A4604 mov al, [esi+4] 3086 00000D27 C1E010 shl eax, 16 ; 10h 3087 ; edges(4-cx).v 3088 00000D2A 89843D58FFFFFF mov [ebp+edi+dcf.p0+24], eax 3089 3090 00000D31 AC lodsb 3091 00000D32 C1E010 shl eax, 16 ; 10h 3092 ; edges(4-cx).u 3093 00000D35 89843D54FFFFFF mov [ebp+edi+dcf.p0+20], eax 3094 3095 00000D3C 5B pop ebx 3096 ;inc bx 3097 ;inc bx 3098 00000D3D 43 inc ebx 3099 00000D3E 43 inc ebx 3100 00000D3F 6683C724 add di, 36 ; 24h ; size of edge 3101 ;loop dCFinitloop 3102 ;dec cx 3103 00000D43 49 dec ecx 3104 00000D44 0F8578FFFFFF jnz dCFinitloop 3105 3106 ; end of p1, p2, p3, p4 point dimensioning of face 3107 ; 3108 ; p1 ...... p2 3109 ; . . 3110 ; . shade . 3111 ; . . 3112 ; p3 ...... p4 3113 ; 3114 ; p1 (x,y,z) ... p4 (x,y,z) 3115 ; 3116 3117 00000D4A 668B03 mov ax, [ebx] ; shade 3118 00000D4D 668945F8 mov [ebp+dcf.col], ax 3119 3120 00000D51 31DB xor ebx, ebx 3121 00000D53 66895DFA mov [ebp+dcf.j], bx 3122 3123 ; vector(3).z 3124 00000D57 D945B4 fld dword [ebp+dcf.p0+108+8] 3125 00000D5A D9E4 ftst 3126 ;fstsw ax 3127 00000D5C DFE0 fnstsw ax 3128 00000D5E DDD8 fstp st0 3129 00000D60 9E sahf 3130 00000D61 7302 jae short isFalse 3131 00000D63 664B dec bx 3132 isFalse: 3133 00000D65 885DF6 mov [ebp+dcf.is_in], bl 3134 00000D68 31F6 xor esi, esi 3135 00000D6A 31FF xor edi, edi 3136 forloop: 3137 ; vector(0-3).z 3138 00000D6C D9843548FFFFFF fld dword [ebp+esi+dcf.p0+8] 3139 00000D73 D9E4 ftst 3140 ;fstsw ax 3141 00000D75 DFE0 fnstsw ax 3142 00000D77 DDD8 fstp st0 3143 00000D79 9E sahf 3144 00000D7A 7331 jae short elseFall 3145 3146 00000D7C 807DF6FF cmp byte [ebp+dcf.is_in], 0FFh ; -1 ; true 3147 00000D80 7408 je short inside 3148 00000D82 E8EF000000 call clipsub 3149 ; { OUT / IN } 3150 00000D87 F655F6 not byte [ebp+dcf.is_in] 3151 inside: 3152 00000D8A 57 push edi 3153 00000D8B 56 push esi 3154 00000D8C 8DBC3D8CFEFFFF lea edi, [ebp+edi+dcf.p2] 3155 00000D93 8DB43540FFFFFF lea esi, [ebp+esi+dcf.p0] 3156 ;add edi, dcf.p2 3157 ;add esi, dcf.p0 3158 3159 00000D9A 66B91200 mov cx, 18 ; 12h 3160 00000D9E F366A5 rep movsw ; { IN / IN } 3161 3162 00000DA1 5E pop esi 3163 00000DA2 5F pop edi 3164 00000DA3 6683C724 add di, 36 ; 24h 3165 00000DA7 66FF45FA inc word [ebp+dcf.j] 3166 00000DAB EB0E jmp short dCFendif 3167 elseFall: 3168 00000DAD 807DF6FF cmp byte [ebp+dcf.is_in], 0FFh 3169 00000DB1 7508 jne short outside 3170 00000DB3 E8BE000000 call clipsub 3171 ; { IN / OUT } 3172 00000DB8 F655F6 not byte [ebp+dcf.is_in] 3173 outside: 3174 00000DBB 6683C624 dCFendif: add si, 36 ; 24h 3175 00000DBF 6681FE9000 cmp si, 4*36 ; 90h 3176 00000DC4 75A6 jne short forloop 3177 3178 00000DC6 668B4DFA mov cx, [ebp+dcf.j] 3179 00000DCA 6683F902 cmp cx, 2 3180 00000DCE 0F8CA0000000 jl dCFnodraw 3181 00000DD4 31FF xor edi, edi 3182 dCFloop: 3183 00000DD6 DF05[CC110000] fild word [CONST13] 3184 00000DDC D8A43D94FEFFFF fsub dword [ebp+edi+dcf.p2+8] 3185 00000DE3 DE35[D0110000] fidiv word [CONST160] 3186 3187 00000DE9 D9843D90FEFFFF fld dword [ebp+edi+dcf.p2+4] 3188 00000DF0 D8F1 fdiv st0, st1 3189 00000DF2 DE05[CE110000] fiadd word [CONST100] 3190 00000DF8 DB9C3D98FEFFFF fistp dword [ebp+edi+dcf.p2+12] 3191 3192 00000DFF D9843D8CFEFFFF fld dword [ebp+edi+dcf.p2] 3193 00000E06 D80D[C8110000] fmul dword [ASPECT_PLACE] 3194 00000E0C D8F1 fdiv st0, st1 3195 00000E0E DE05[D0110000] fiadd word [CONST160] 3196 00000E14 D9FC frndint 3197 00000E16 DA0D[D4110000] fimul dword [CONST65536] 3198 00000E1C DB9C3D9CFEFFFF fistp dword [ebp+edi+dcf.p2+16] 3199 3200 00000E23 DB843DA0FEFFFF fild dword [ebp+edi+dcf.p2+20] 3201 00000E2A D8F1 fdiv st0, st1 3202 00000E2C DB9C3DA0FEFFFF fistp dword [ebp+edi+dcf.p2+20] 3203 3204 00000E33 DB843DA4FEFFFF fild dword [ebp+edi+dcf.p2+24] 3205 00000E3A D8F1 fdiv st0, st1 3206 00000E3C DB9C3DA4FEFFFF fistp dword [ebp+edi+dcf.p2+24] 3207 3208 00000E43 DB05[D4110000] fild dword [CONST65536] 3209 00000E49 D8F1 fdiv st0, st1 3210 00000E4B DB9C3DA8FEFFFF fistp dword [ebp+edi+dcf.p2+28] 3211 3212 00000E52 DDD8 fstp st0 3213 00000E54 6683C724 add di, 36 ; 24h 3214 ;loop dCFloop 3215 00000E58 6649 dec cx 3216 00000E5A 0F8576FFFFFF jnz dCFloop 3217 3218 00000E60 8DBD8CFEFFFF lea edi, [ebp+dcf.p2] 3219 ; 10/08/2017 3220 00000E66 57 push edi ; 32 bits push ! 3221 00000E67 66FF75FA push word [ebp+dcf.j] ; 16 bits push !! 3222 00000E6B 66FF75F8 push word [ebp+dcf.col] ; 16 bits push !! 3223 00000E6F E82CFAFFFF call scansubtextpoly 3224 dCFnodraw: 3225 00000E74 C9 dCFbackclip: leave 3226 ; mov esp, ebp ; pop ebp 3227 00000E75 C3 retn 3228 3229 clipsub: 3230 ; 06/04/2017 3231 ; 05/02/2017 3232 00000E76 56 push esi 3233 00000E77 57 push edi 3234 ;lea ax, [esi-36] 3235 00000E78 66678D44DC lea ax, [si-36] ; 11/08/2017 3236 00000E7D 6683F800 cmp ax, 0 3237 00000E81 7D04 jge short cSnounder 3238 ;mov eax, 108 ; 6Ch 3239 00000E83 66B86C00 mov ax, 108 3240 cSnounder: 3241 00000E87 D9843548FFFFFF fld dword [ebp+esi+dcf.p0+8] 3242 00000E8E D9C0 fld st0 3243 00000E90 6697 xchg ax, di 3244 00000E92 D8A43D48FFFFFF fsub dword [ebp+edi+dcf.p0+8] 3245 00000E99 6697 xchg ax, di 3246 00000E9B DEF9 fdivp st1, st0 3247 ;fdiv 3248 3249 00000E9D BB[37140000] mov ebx, cliptab 3250 00000EA2 66B90600 mov cx, 6 3251 00000EA6 31D2 xor edx, edx 3252 dCFclipLoop2: 3253 00000EA8 6697 xchg ax, di 3254 00000EAA D9843D40FFFFFF fld dword [ebp+edi+dcf.p0] 3255 00000EB1 6697 xchg ax, di 3256 00000EB3 D8A43540FFFFFF fsub dword [ebp+esi+dcf.p0] 3257 00000EBA D8C9 fmul st0, st1 3258 00000EBC D8843540FFFFFF fadd dword [ebp+esi+dcf.p0] 3259 00000EC3 D99C3D8CFEFFFF fstp dword [ebp+edi+dcf.p2] 3260 3261 00000ECA 8A13 mov dl, [ebx] 3262 00000ECC 43 inc ebx 3263 00000ECD 01D7 add edi, edx 3264 00000ECF 01D6 add esi, edx 3265 00000ED1 01D0 add eax, edx 3266 00000ED3 E2D3 loop dCFclipLoop2 3267 00000ED5 DDD8 fstp st0 3268 00000ED7 5F pop edi 3269 00000ED8 5E pop esi 3270 00000ED9 66FF45FA inc word [ebp+dcf.j] 3271 ;add edi, 36 3272 00000EDD 6683C724 add di, 36 ; 24h 3273 00000EE1 C3 retn 3274 3275 3276 ;*************************************************** 3277 ;* description : rotate point over one axis * 3278 ;* parameter : st(0):angle, [ds:si] ptr to * 3279 ;* 1.koord.,[ds:bx] ptr to 2.koord. * 3280 ;* sideeffect : empty copro-stack * 3281 ;* back : none * 3282 ;*************************************************** 3283 3284 rotateAxis: 3285 00000EE2 D9EB fldpi ;{ PI,a} 3286 00000EE4 DEC9 fmulp st1, st0 ;{ PI*a} 3287 ;fmul 3288 00000EE6 DA35[D4110000] fidiv dword [CONST65536] ;{ PI*a/65536} 3289 00000EEC D9FB fsincos ;{ cos,sin} 3290 00000EEE D9C0 fld st0 ;{ cos,cos,sin} 3291 00000EF0 D80E fmul dword [esi] ;{ y*cos,cos,sin} 3292 00000EF2 D9C2 fld st2 ;{ sin,y*cos,cos,sin} 3293 00000EF4 D80B fmul dword [ebx] ;{ z*sin,y*cos,cos,sin} 3294 00000EF6 DEE9 fsubp st1, st0 ;{ y*cos-z*sin,cos,sin} 3295 00000EF8 D9CA fxch st2 ;{ sin,cos,y*cos-z*sin} 3296 00000EFA D80E fmul dword [esi] ;{ y*sin,cos,y*cos-z*sin} 3297 00000EFC D9C9 fxch st1 ;{ cos,y*sin,y*cos-z*sin} 3298 00000EFE D80B fmul dword [ebx] ;{ z*cos,y*sin,y*cos-z*sin} 3299 00000F00 DEC1 faddp st1, st0 ;{ y*sin+z*cos,y*cos-z*sin} 3300 00000F02 D91B fstp dword [ebx] ;{ y*cos-z*sin} 3301 00000F04 D91E fstp dword [esi] ;{} 3302 00000F06 C3 retn 3303 3304 ;*********************************************** 3305 ;* description : rotate point * 3306 ;* parameter : a,b,c:angles,adr:address * 3307 ;* sideeffect : all * 3308 ;* back : none * 3309 ;*********************************************** 3310 3311 xyzRotate: 3312 ; 11/08/2017 3313 ;;push word [ebp+xw] ; a ; 16 bits push !! 3314 ;;push word [ebp+yw] ; b ; 16 bits push !! 3315 ;;push word [ebp+zw] ; c ; 16 bits push !! 3316 ;;add di, nwmat 3317 ;;push edi ; adr ; 32 bits push ! 3318 ;;call xyzRotate 3319 ;;pop edi 3320 3321 adr equ 8 ; arg 1, [esp+4] 3322 c equ 12 ; arg 2, [esp+8] 3323 b equ 14 ; arg 3, [esp+10] 3324 a equ 16 ; arg 4, [esp+12] 3325 3326 00000F07 55 push ebp 3327 00000F08 89E5 mov ebp, esp 3328 3329 00000F0A 8B7D08 mov edi, [ebp+adr] ; nwmat+ 3330 3331 ; nwmat: ;;; edi +0 +4 +8 3332 ; loop 1 (nwmat) : dd 1, 0, 0 3333 ; loop 2 (nwmat+12) : dd 0, 1, 0 3334 ; loop 3 (nwmat+24) : dd 0, 0, 1 3335 3336 00000F0D DF4510 fild word [ebp+a] ; xw ; a (x angle) 3337 00000F10 8D5F08 lea ebx, [edi+8] ; z (2. coordinate) 3338 00000F13 8D7704 lea esi, [edi+4] ; y (1. coordinate) 3339 00000F16 E8C7FFFFFF call rotateAxis 3340 00000F1B DF450E fild word [ebp+b] ; yw ; a (y angle) 3341 00000F1E 8D1F lea ebx, [edi] ; z 3342 00000F20 8D7708 lea esi, [edi+8] ; y 3343 00000F23 E8BAFFFFFF call rotateAxis 3344 00000F28 DF450C fild word [ebp+c] ; zw ; a (z angle) 3345 00000F2B 8D5F04 lea ebx, [edi+4] ; z 3346 00000F2E 8D37 lea esi, [edi] ; y 3347 00000F30 E8ADFFFFFF call rotateAxis 3348 3349 00000F35 5D pop ebp 3350 ; 11/08/2017 3351 ; (pop dw, pop w, pop w, pop w) 3352 00000F36 C20A00 ret 10 3353 3354 ;*********************************************** 3355 ;* description : calculate world matrix * 3356 ;* parameter : x-,y-,z-angle,neig:stack * 3357 ;* sideeffect : all * 3358 ;* back : none * 3359 ;*********************************************** 3360 3361 calcRotMat: 3362 ; 11/08/2017 (16 bits pushes) 3363 3364 ; [esp] = [oyw]*16 ; angle or YSTEP * 16 ? 3365 ; [esp+2] = [ozw] ; ZSTEP 3366 ; [esp+4] = [oyw] ; YSTEP 3367 ; [esp+6] = [oxw] ; XSTEP 3368 3369 neig equ 8 ; arg 1, [esp+4] 3370 zw equ 10 ; arg 2, [esp+6] 3371 yw equ 12 ; arg 3, [esp+8] 3372 xw equ 14 ; arg 4, [esp+10] 3373 3374 00000F39 55 push ebp 3375 00000F3A 89E5 mov ebp, esp 3376 3377 00000F3C BF[D0170000] mov edi, nwmat 3378 3379 identityMat 3380 <1> 3381 <1> 3382 <1> 3383 00000F41 B502 <1> mov ch, 2 3384 <1> iMolp: 3385 00000F43 B102 <1> mov cl, 2 3386 <1> iMilp: 3387 00000F45 D9EE <1> fldz 3388 00000F47 38CD <1> cmp ch, cl 3389 00000F49 7504 <1> jne short iMwritezero 3390 00000F4B DDD8 <1> fstp st0 3391 00000F4D D9E8 <1> fld1 3392 <1> iMwritezero: 3393 00000F4F D91F <1> fstp dword [edi] 3394 <1> 3395 00000F51 83C704 <1> add edi, 4 3396 00000F54 FEC9 <1> dec cl 3397 00000F56 79ED <1> jns short iMilp 3398 00000F58 FECD <1> dec ch 3399 00000F5A 79E7 <1> jns short iMolp 3400 3401 ; nwmat: 3402 ; dd 1,0,0 3403 ; dd 0,1,0 3404 ; dd 0,0,1 3405 3406 00000F5C 31FF xor edi, edi 3407 cRMolp: 3408 00000F5E 57 push edi 3409 ; 11/07/2017 (16 bits pushes) 3410 00000F5F 66FF750E push word [ebp+xw] ; a (x angle) 3411 00000F63 66FF750C push word [ebp+yw] ; b (y angle) 3412 00000F67 66FF750A push word [ebp+zw] ; c (z angle) 3413 ;add edi, nwmat 3414 00000F6B 6681C7[D017] add di, nwmat 3415 00000F70 57 push edi ; 32 bits push ; adr 3416 00000F71 E891FFFFFF call xyzRotate 3417 00000F76 5F pop edi 3418 00000F77 31DB xor ebx, ebx 3419 cRMilp: 3420 00000F79 D987[D0170000] fld dword [edi+nwmat] 3421 00000F7F D88B[86170000] fmul dword [ebx+owmat] 3422 00000F85 D987[D4170000] fld dword [edi+nwmat+4] 3423 00000F8B D88B[92170000] fmul dword [ebx+owmat+12] 3424 00000F91 D987[D8170000] fld dword [edi+nwmat+8] 3425 00000F97 D88B[9E170000] fmul dword [ebx+owmat+24] 3426 00000F9D DEC1 fadd 3427 00000F9F DEC1 fadd 3428 00000FA1 D9943B[86170000] fst dword [ebx+edi+owmat] 3429 00000FA8 D99C3B[AC170000] fstp dword [ebx+edi+wmat] 3430 00000FAF 6683C304 add bx, 4 3431 00000FB3 80FB0C cmp bl, 12 3432 00000FB6 75C1 jne short cRMilp 3433 00000FB8 6683C70C add di, 12 3434 00000FBC 6683FF24 cmp di, 36 3435 00000FC0 759C jne short cRMolp 3436 3437 00000FC2 BE[AC170000] mov esi, wmat 3438 00000FC7 66B90300 mov cx, 3 3439 cRMneigloop: 3440 00000FCB DF4508 fild word [ebp+neig] 3441 00000FCE 8D5E0C lea ebx, [esi+12] 3442 00000FD1 E80CFFFFFF call rotateAxis 3443 00000FD6 6683C604 add si, 4 3444 00000FDA E2EF loop cRMneigloop 3445 3446 00000FDC 5D pop ebp 3447 ; 11/08/2017 (16 bits pops) 3448 00000FDD C20800 ret 8 3449 3450 ;*********************************************** 3451 ;* description : create the world * 3452 ;* parameter : none * 3453 ;* sideeffect : all * 3454 ;* back : none * 3455 ;*********************************************** 3456 3457 createWorld: 3458 ; 11/08/2017 3459 ; 10/08/2017 3460 ; 27/07/2017 3461 ; 06/02/2017 3462 00000FE0 BE[89140000] mov esi, world 3463 ;mov cx, 4 3464 00000FE5 B904000000 mov ecx, 4 ; 3465 cWworldLoop: 3466 00000FEA 51 push ecx 3467 00000FEB 56 push esi 3468 00000FEC BF[58380000] mov edi, p 3469 00000FF1 BB[D0380000] mov ebx, pr 3470 00000FF6 66BE[5C14] mov si, print 3471 00000FFA B10F mov cl, 15 ; 0Fh 3472 cWinitStartRoom: 3473 00000FFC 51 push ecx 3474 00000FFD B103 mov cl, 3 3475 cWinnerLoop: 3476 00000FFF AC lodsb ; byte data (to be converted to dword) from the 'print:' 3477 00001000 6698 cbw ; convert byte to word with sign (0E0h -> FFE0h) 3478 00001002 66AB stosw ; store world coordinate/dimension as integer (word), to 'p:' 3479 00001004 DF47FE fild word [edi-2] 3480 00001007 D91B fstp dword [ebx] ; store coordinate as floatpoint (29/01/2017) 3481 00001009 6683C304 add bx, 4 ; next dimension (x,y,z) in 'pr:' 3482 0000100D E2F0 loop cWinnerLoop 3483 0000100F 59 pop ecx 3484 00001010 66B8007F mov ax, 127*256 ; 7F00h ; 4th dimension in 'p:' (29/01/2017) 3485 00001014 66AB stosw 3486 00001016 E2E4 loop cWinitStartRoom 3487 00001018 5E pop esi 3488 cWmainLoop: 3489 00001019 AC lodsb ; the byte from 'world:' for shade and direction (29/01/2017) 3490 0000101A 3CFF cmp al, 255 ; 0FFh 3491 0000101C 0F8457010000 je cWexit ; end of stage (1 to 4) (29/01/2017) 3492 3493 00001022 88C7 mov bh, al ; High 4 bits for shading (29/01/2017) 3494 00001024 6681E30070 and bx, 7000h 3495 00001029 80C70F add bh, 15 ; 0Fh 3496 0000102C 66891D[46530000] mov [cw.shade], bx 3497 00001033 6683E00F and ax, 0Fh ; 15 ; Low 4 bits for direction (29/01/2017) 3498 00001037 66A3[44530000] mov [cw.direc], ax 3499 3500 0000103D 31DB xor ebx, ebx 3501 0000103F EB0A jmp short cWfirstNibble ; 27/07/2017 3502 cWsideLoop: 3503 00001041 F6C304 test bl, 4 3504 00001044 7405 jz short cWfirstNibble 3505 00001046 AC lodsb 3506 00001047 240F and al, 0Fh ; 15 3507 00001049 EB05 jmp short cWsecondNibble 3508 cWfirstNibble: 3509 0000104B 8A06 mov al, [esi] 3510 0000104D C0E804 shr al, 4 3511 cWsecondNibble: 3512 00001050 31FF xor edi, edi ; 10/02/2017 (is this necessary?) 3513 00001052 30E4 xor ah, ah 3514 00001054 6648 dec ax 3515 00001056 7866 js short cWnoWall ; ax = 0 -> ax = 0FFFFh (29/01/2017) 3516 ;imul di, word [o+object.fanz], 10 ; 0Ah 3517 00001058 666B3D[681B0000]0A imul di, word [object.fanz], 10 ; 10/02/2017 3518 ;add di, o+object.f ; base address + offset 3519 ;add di, object.f ; base address + offset 3520 00001060 81C7[EA270000] add edi, object.f ; 10/02/2017 3521 ;inc word [o+object.fanz] ; faces = faces + 1 3522 00001066 66FF05[681B0000] inc word [object.fanz] ; faces = faces + 1 3523 0000106D 66894708 mov [edi+8], ax ; 4th word is shading value (29/01/2017) 3524 3525 00001071 53 push ebx 3526 00001072 56 push esi 3527 00001073 B104 mov cl, 4 3528 cWaddPointloop: 3529 ;movsx esi, byte [ebx+cube] ; cube coordinate offset (29/01/207) 3530 ;xor esi, esi ; 10/02/2017 3531 ;movsx si, byte [ebx+cube] 3532 00001075 0FB6B3[44140000] movzx esi, byte [ebx+cube] ; 11/02/2017 3533 0000107C 81C6[58380000] add esi, p ; + base address (p:) (29/01/2017) 3534 3535 00001082 57 push edi 3536 ;mov edi, o+object.p ; p area of object structure (in o:) 3537 00001083 BF[6A1B0000] mov edi, object.p ; 10/02/2017 3538 00001088 51 push ecx 3539 ;mov cx, [o+object.panz] ; number of points (for object.p) 3540 00001089 668B0D[661B0000] mov cx, [object.panz] ; 10/02/2017 3541 ;xor ax, ax 3542 00001090 31C0 xor eax, eax 3543 00001092 67E317 jcxz cWfirstPoint 3544 cWsearchPointLoop: ; check point coordinates are same or not (29/01/2017) 3545 00001095 8B16 mov edx, [esi] 3546 00001097 3B17 cmp edx, [edi] 3547 00001099 750A jne short cWdifferent 3548 0000109B 668B5604 mov dx, [esi+4] 3549 0000109F 663B5704 cmp dx, [edi+4] 3550 000010A3 7410 je short cWpointExists 3551 cWdifferent: 3552 ;inc ax ; number of different points (of object) 3553 000010A5 40 inc eax 3554 000010A6 6683C708 add di, 8 3555 000010AA E2E9 loop cWsearchPointLoop 3556 cWfirstPoint: 3557 000010AC A5 movsd 3558 000010AD A5 movsd 3559 ;inc word [o+object.panz] ; points = points + 1 3560 000010AE 66FF05[661B0000] inc word [object.panz] ; 10/02/2017 3561 cWpointExists: 3562 000010B5 59 pop ecx 3563 000010B6 5F pop edi 3564 000010B7 66AB stosw ; store number of different points (29/01/2017) 3565 ; in the Xth word of face structure (5 words) 3566 ; (Xth word of 'object.f', X = 4-CL) 3567 000010B9 43 inc ebx 3568 000010BA E2B9 loop cWaddPointloop 3569 000010BC 5E pop esi 3570 000010BD 5B pop ebx 3571 cWnoWall: 3572 ; 27/07/2017 3573 ;add bx, 4 3574 000010BE 80C304 add bl, 4 3575 ;cmp bx, 24 ; 18h 3576 000010C1 80FB18 cmp bl, 24 3577 ;jne cWsideLoop 3578 000010C4 0F8277FFFFFF jb cWsideLoop ; 10/08/2017 3579 3580 ;xor edi, edi ; 10/02/2017 3581 000010CA 666B3D[44530000]0C imul di, word [cw.direc], 12 3582 ;movsx edi, di ; 05/02/2017 3583 000010D2 B103 mov cl, 3 3584 ;mov ebx, pr+96 3585 000010D4 66BB[3039] mov bx, pr+96 ; 24th dword of 'pr:' 3586 cWaddStepLoop: 3587 000010D8 D94348 fld dword [ebx+72] ; [ebx+48h] 3588 000010DB D8043B fadd dword [ebx+edi] 3589 000010DE D95B48 fstp dword [ebx+72] 3590 000010E1 6683C304 add bx, 4 3591 000010E5 E2F1 loop cWaddStepLoop 3592 3593 000010E7 807EFC00 cmp byte [esi-4], 0 3594 000010EB 7D28 jge short cWsimpleRoom 3595 3596 000010ED 66BB[D038] mov bx, pr 3597 000010F1 B10E mov cl, 14 ; 0Eh 3598 cWrotloop: 3599 000010F3 60 pushad 3600 000010F4 B103 mov cl, 3 3601 000010F6 8A16 mov dl, [esi] 3602 cWpushLoop: 3603 000010F8 31C0 xor eax, eax 3604 000010FA D0EA shr dl, 1 3605 000010FC 7305 jnc short cWnoRot 3606 000010FE 8A26 mov ah, [esi] 3607 ;and ax, 0F000h 3608 00001100 80E4F0 and ah, 0F0h 3609 ;push ax 3610 ;jmp short cWendIf 3611 cWnoRot: 3612 ;push 0 ; arg 2 (c), arg 3 (b), arg 4 (a) 3613 ; 11/08/2017 3614 00001103 6650 push ax ; 16 bits push !! 3615 cWendIf: 3616 00001105 E2F1 loop cWpushLoop 3617 ; 11/08/2017 3618 00001107 53 push ebx ; arg 1 (addr) ; 32 bits push ! 3619 00001108 E8FAFDFFFF call xyzRotate 3620 0000110D 61 popad 3621 0000110E 6683C30C add bx, 12 ; 0Ch 3622 00001112 E2DF loop cWrotloop 3623 00001114 46 inc esi 3624 cWsimpleRoom: 3625 00001115 668B1D[44530000] mov bx, [cw.direc] 3626 0000111C 66C1E302 shl bx, 2 3627 00001120 B104 mov cl, 4 3628 cWpointCopyLoop: 3629 00001122 60 pushad 3630 ;movsx esi, byte [ebx+cube] 3631 ;xor esi, esi ; 10/02/2017 3632 ;movsx si, byte [ebx+cube] 3633 00001123 0FB6B3[44140000] movzx esi, byte [ebx+cube] ; 11/02/2017 3634 0000112A 89F0 mov eax, esi 3635 0000112C 81C6[58380000] add esi, p ; + base address of 'p:' 3636 00001132 80F307 xor bl, 7 3637 ;movsx edi, byte [ebx+cube] 3638 ;xor edi, edi ; 10/02/2017 3639 00001135 0FB6BB[44140000] movzx edi, byte [ebx+cube] 3640 0000113C 81C7[58380000] add edi, p ; + base address of 'p:' 3641 00001142 56 push esi 3642 00001143 A5 movsd 3643 00001144 A5 movsd 3644 00001145 5E pop esi 3645 3646 00001146 89C3 mov ebx, eax 3647 ;shr ebx, 1 3648 00001148 66D1EB shr bx, 1 3649 0000114B 01C3 add ebx, eax 3650 0000114D BF[D0380000] mov edi, pr ; + base address of 'pr:' 3651 00001152 B103 mov cl, 3 3652 cWSround: 3653 00001154 D9043B fld dword [ebx+edi] 3654 00001157 D887A8000000 fadd dword [edi+168] ; [edi+0A8h] 3655 0000115D DF1E fistp word [esi] ; world coordinate/dimension 3656 0000115F 6683C704 add di, 4 3657 00001163 46 inc esi 3658 00001164 46 inc esi 3659 00001165 E2ED loop cWSround 3660 00001167 66A1[46530000] mov ax, [cw.shade] 3661 0000116D 668906 mov [esi], ax ; 4th word 3662 00001170 61 popad 3663 00001171 43 inc ebx 3664 00001172 E2AE loop cWpointCopyLoop 3665 00001174 E9A0FEFFFF jmp cWmainLoop 3666 cWexit: 3667 00001179 59 pop ecx 3668 ;dec cx 3669 0000117A FEC9 dec cl ; 27/07/2017 3670 0000117C 0F8568FEFFFF jnz cWworldLoop 3671 00001182 C3 retn 3672 3673 ; 17/01/2017 3674 00001183 1111 dels_pos_w: dw 1111h 3675 00001185 1111 ddu_pos_w: dw 1111h 3676 00001187 1111 ddv_pos_w: dw 1111h 3677 3678 prg_msg: 3679 00001189 4552444F47414E2054- db 'ERDOGAN TAN - TRDOS 386 VGA Test - SNCOMNI.PRG' 3680 00001192 414E202D205452444F- 3681 0000119B 532033383620564741- 3682 000011A4 2054657374202D2053- 3683 000011AD 4E434F4D4E492E5052- 3684 000011B6 47 3685 000011B7 0D0A db 0Dh, 0Ah 3686 000011B9 31322F30382F323031- db '12/08/2017' 3687 000011C2 37 3688 000011C3 0D0A db 0Dh, 0Ah 3689 000011C5 00 db 0 3690 3691 000011C6 90 align 4 3692 3693 ;============================================================================= 3694 ; preinitialized data 3695 ;============================================================================= 3696 3697 000011C8 9A99993F ASPECT_PLACE: dd ASPECT_RATIO ; 1.2 3698 000011CC 0D00 CONST13: dw 13 ; 000Dh 3699 000011CE 6400 CONST100: dw CENTERY ; 0064h 3700 000011D0 A000 CONST160: dw CENTERX ; 00A0h 3701 000011D2 0007 CONST1792: dw 1792 ; 0700h 3702 000011D4 00000100 CONST65536: dd 65536 ; 00010000h 3703 000011D8 05840808 randommul: dd 134775813 ; 08088405h 3704 000011DC FB100000 randomseed: dd 4347 ; 000010FBh 3705 credits: 3706 000011E0 0250FB db 2, 80,-5 3707 000011E3 FE320445023E024502- db -2,50,4,69,2,62,2,69,2,81,2,62,2,69,2,79,2,62,2,69,2 3708 000011EC 51023E0245024F023E- 3709 000011F5 024502 3710 000011F8 51023E0245024F0251- db 81,2,62,2,69,2,79,2,81,2,0 ; { pat 0,2,4,6,8 } 3711 00001201 0200 3712 00001203 FE320446023E024602- db -2,50,4,70,2,62,2,70,2,81,2,62,2,70,2,79,2,62,2,70,2 3713 0000120C 51023E0246024F023E- 3714 00001215 024602 3715 00001218 52023E0246024F0252- db 82,2,62,2,70,2,79,2,82,2,0 ; { pat 1,3,5,7,9 } 3716 00001221 0200 3717 00001223 00 db 0 3718 00001224 37203820 db 55,32,56,32 ; { pat 10 } 3719 00001228 332035183708 db 51,32,53,24,55,8 ; { pat 11 } 3720 0000122E 39203220 db 57,32,50,32 ; { pat 12 } 3721 00001232 3C303A083908 db 60,48,58,8,57,8 ; { pat 13 } 3722 00001238 3740 db 55,64 ; { pat 14 } 3723 0000123A FE43103E1045104610- db -2,67,16,62,16,69,16,70,16,0 ; { pat 15 } 3724 00001243 00 3725 00001244 FE461045103E104110- db -2,70,16,69,16,62,16,65,16,0 ; { pat 16 } 3726 0000124D 00 3727 0000124E 00 db 0 3728 0000124F 043201800180 db 4, 50,1,128,1,128 ;{ pat 0-3 } 3729 00001255 411C4002410240103E- db 65,28,64,2,65,2,64,16,62,8,60,8 ;{ pat 4 } 3730 0000125E 083C08 3731 00001261 431C41043C10410840- db 67,28,65,4,60,16,65,8,64,8 ;{ pat 5 } 3732 0000126A 08 3733 0000126B 3E20321040084108 db 62,32,50,16,64,8,65,8 ;{ pat 6 } 3734 00001273 43203C103E084008 db 67,32,60,16,62,8,64,8 ;{ pat 7 } 3735 0000127B 3E80 db 62,128 ;{ pat 8,9 } 3736 0000127D 4380 db 67,128 ;{ pat 10,11 } 3737 0000127F 431040104210400842- db 67,16,64,16,66,16,64,8,66,8 ;{ pat 12 } 3738 00001288 08 3739 00001289 48304610 db 72,48,70,16 ;{ pat 13 } 3740 0000128D 43203720 db 67,32,55,32 ;{ pat 14 } 3741 00001291 FE1F20372000 db -2,31,32,55,32,0 ;{ pat 15 } 3742 00001297 FE1A20322000 db -2,26,32,50,32,0 ;{ pat 16 } 3743 0000129D 00 db 0 3744 0000129E 0559FB018000 db 5, 89,-5,1,128,0 ;{ pat 0-9 } 3745 000012A4 43084A1844084B18 db 67,8,74,24,68,8,75,24 ;{ pat 10 } 3746 000012AC 3F0846183C08451043- db 63,8,70,24,60,8,69,16,67,8 ;{ pat 11 } 3747 000012B5 08 3748 000012B6 3E08451043083E0842- db 62,8,69,16,67,8,62,8,66,24 ;{ pat 12 } 3749 000012BF 18 3750 000012C0 3F0843183C08431045- db 63,8,67,24,60,8,67,16,69,8 ;{ pat 13 } 3751 000012C9 08 3752 000012CA 370843182B083218 db 55,8,67,24,43,8,50,24 ;{ pat 14 } 3753 000012D2 FE1F01263F00 db -2,31,1,38,63,0 ;{ pat 15 } 3754 000012D8 FE1A01213F00 db -2,26,1,33,63,0 ;{ pat 16 } 3755 000012DE 00 db 0 3756 000012DF 0A00F02A022A022A02- db 10, 0,-16,42,2,42,2,42,2,42,1,42,1,0 ;{ pat 0,1 } 3757 000012E8 2A012A0100 3758 000012ED F024022A022A022A01- db -16,36,2,42,2,42,2,42,1,42,1,0 ;{ pat 2,3 } 3759 000012F6 2A0100 3760 000012F9 E224022A022E022401- db -30,36,2,42,2,46,2,36,1,42,1,38,2 3761 00001302 2A012602 3762 00001306 2A022E0226012A01 db 42,2,46,2,38,1,42,1 ;{ pat 4-16 } 3763 0000130E 2402260224022A012A- db 36,2,38,2,36,2,42,1,42,1,38,2,42,2,46,2,38,1,42,1,0 3764 00001317 0126022A022E022601- 3765 00001320 2A0100 3766 00001323 00 db 0 3767 00001324 00 db 0 3768 3769 ; colortable 65 bytes 3770 00001325 10 colors db 16 3771 00001326 1F3F3F3F db 31,63,63,63 3772 0000132A 01000000 db 1, 0, 0, 0 3773 0000132E 1F28203F db 31,40,32,63 3774 00001332 01000000 db 1, 0, 0, 0 3775 00001336 1F3F0000 db 31,63, 0, 0 3776 0000133A 01060100 db 1, 6, 1, 0 3777 0000133E 1F3F2914 db 31,63,41,20 3778 00001342 01000000 db 1, 0, 0, 0 3779 00001346 1F3F3F08 db 31,63,63, 8 3780 0000134A 01000000 db 1, 0, 0, 0 3781 0000134E 1F38383F db 31,56,56,63 3782 00001352 013F0000 db 1,63, 0, 0 3783 00001356 103F3F00 db 16,63,63, 0 3784 0000135A 103F0000 db 16,63, 0, 0 3785 0000135E 01160500 db 1,22, 5, 0 3786 00001362 073F3811 db 7,63,56,17 3787 3788 ; parameter for the texture effects 156 bytes 3789 00001366 130F0F31310A aE db 013h,15,15,49,49,10 3790 0000136C 131010303011 db 013h,16,16,48,48,17 3791 00001372 1311112F2F18 db 013h,17,17,47,47,24 3792 00001378 1312122E2EBE db 013h,18,18,46,46,190 3793 0000137E 1315152B2B1E db 013h,21,21,43,43,30 3794 00001384 2500003E1E03 db 025h,0,0,62,30,3 3795 0000138A 2503033E1E07 db 025h,3,3,62,30,7 3796 00001390 2503033B1BFC db 025h,3,3,59,27,0FCh 3797 00001396 2500203E3E03 db 025h,0,32,62,62,3 3798 0000139C 2503233E3E07 db 025h,3,35,62,62,7 3799 000013A2 2503233B3BFC db 025h,3,35,59,59,0FCh 3800 000013A8 2500003F3FFE db 025h,0,0,63,63,0FEh 3801 000013AE 2C000A3F0FF6 db 02Ch,0,10,63,15,0F6h 3802 000013B4 2C000B3F1004 db 02Ch,0,11,63,16,4 3803 000013BA 2C002F3F34F6 db 02Ch,0,47,63,52,0F6h 3804 000013C0 2C00303F3504 db 02Ch,0,48,63,53,4 3805 000013C6 2E13182C2705 db 02Eh,19,24,44,39,5 3806 000013CC 2E14192C27F4 db 02Eh,20,25,44,39,0F4h 3807 000013D2 2E14192B2607 db 02Eh,20,25,43,38,7 3808 000013D8 3E14192B2606 db 03Eh,20,25,43,38,6 3809 000013DE 2F00183F1E06 db 02Fh,0,24,63,30,6 3810 000013E4 2F00193F1FFA db 02Fh,0,25,63,31,0FAh 3811 000013EA 3F00193F1E06 db 03Fh,0,25,63,30,6 3812 000013F0 2F00203F2606 db 02Fh,0,32,63,38,6 3813 000013F6 2F00213F27FA db 02Fh,0,33,63,39,0FAh 3814 000013FC 3F00213F2606 db 03Fh,0,33,63,38,6 3815 3816 ; parameter for fractaladd 28 bytes 3817 00001402 22C026012601260020- aF: db 34,192,38,1,38,1,38,0,32,0,32,32,32,64 3818 0000140B 0020202040 3819 00001410 226024002260240024- db 34,96,36,0,34,96,36,0,36,0,36,0,36,0 3820 00001419 0024002400 3821 3822 ; star bob for the sparcling stars texture 25 bytes 3823 0000141E 0000030000 bob: db 0,0,3,0,0 3824 00001423 0002050200 db 0,2,5,2,0 3825 00001428 0305070503 db 3,5,7,5,3 3826 0000142D 0002050200 db 0,2,5,2,0 3827 00001432 0000030000 db 0,0,3,0,0 3828 3829 00001437 04040C0408 cliptab: db 4,4,12,4,8 3830 3831 0000143C 00003F3F3F00003F uvtab: db 0,0,63,63,63,0,0,63 3832 3833 00001444 08283010 cube: db 1*8,5*8,6*8,2*8 3834 00001448 18382000 db 3*8,7*8,4*8,0*8 3835 0000144C 10303818 db 2*8,6*8,7*8,3*8 3836 00001450 00202808 db 0*8,4*8,5*8,1*8 3837 00001454 38302820 db 7*8,6*8,5*8,4*8 3838 00001458 00081018 db 0*8,1*8,2*8,3*8 3839 3840 0000145C E0E0E0 print: db -32,-32,-32 3841 0000145F 20E0E0 db 32,-32,-32 3842 00001462 2020E0 db 32, 32,-32 3843 00001465 E020E0 db -32, 32,-32 3844 00001468 E0E020 db -32,-32, 32 3845 0000146B 20E020 db 32,-32, 32 3846 0000146E 202020 db 32, 32, 32 3847 00001471 E02020 db -32, 32, 32 3848 00001474 400000 db 64, 0, 0 3849 00001477 C00000 db -64, 0, 0 3850 0000147A 004000 db 0, 64, 0 3851 0000147D 00C000 db 0,-64, 0 3852 00001480 000040 db 0, 0, 64 3853 00001483 0000C0 db 0, 0,-64 3854 00001486 000000 db 0, 0, 0 3855 3856 ; world contruction data 599 bytes 3857 00001489 71700006 world: db 071h,070h,000h,006h 3858 0000148D 72000006 db 072h,000h,000h,006h 3859 00001491 71007006 db 071h,000h,070h,006h 3860 00001495 73077006 db 073h,007h,070h,006h 3861 00001499 73070006 db 073h,007h,000h,006h 3862 0000149D 70070706 db 070h,007h,007h,006h 3863 000014A1 74000706 db 074h,000h,007h,006h 3864 000014A5 70000740 db 070h,000h,007h,040h 3865 000014A9 72700750 db 072h,070h,007h,050h 3866 000014AD 72700050 db 072h,070h,000h,050h 3867 000014B1 71707050 db 071h,070h,070h,050h 3868 000014B5 73007040 db 073h,000h,070h,040h 3869 000014B9 71000040 db 071h,000h,000h,040h 3870 000014BD 72000050 db 072h,000h,000h,050h 3871 000014C1 71007050 db 071h,000h,070h,050h 3872 000014C5 73077046 db 073h,007h,070h,046h 3873 000014C9 73000046 db 073h,000h,000h,046h 3874 000014CD 70070746 db 070h,007h,007h,046h 3875 000014D1 72000750 db 072h,000h,007h,050h 3876 000014D5 71000000 db 071h,000h,000h,000h 3877 000014D9 71000000 db 071h,000h,000h,000h 3878 000014DD 7100BB56 db 071h,000h,0BBh,056h 3879 000014E1 700FBB46 db 070h,00Fh,0BBh,046h 3880 000014E5 FF db 0FFh 3881 000014E6 33000000 db 033h,000h,000h,000h 3882 000014EA F0000706E4 db 0F0h,000h,007h,006h,0E4h 3883 000014EF B000BB46E4 db 0B0h,000h,0BBh,046h,0E4h 3884 000014F4 9000BB56E4 db 090h,000h,0BBh,056h,0E4h 3885 000014F9 9000BB56E4 db 090h,000h,0BBh,056h,0E4h 3886 000014FE 3000BB56 db 030h,000h,0BBh,056h 3887 00001502 F000BB5611 db 0F0h,000h,0BBh,056h,011h 3888 00001507 F000BB4611 db 0F0h,000h,0BBh,046h,011h 3889 0000150C B000BB5611 db 0B0h,000h,0BBh,056h,011h 3890 00001511 9000BB5611 db 090h,000h,0BBh,056h,011h 3891 00001516 B000BB5611 db 0B0h,000h,0BBh,056h,011h 3892 0000151B F000BB5611 db 0F0h,000h,0BBh,056h,011h 3893 00001520 F000BB4611 db 0F0h,000h,0BBh,046h,011h 3894 00001525 B000BB5611 db 0B0h,000h,0BBh,056h,011h 3895 0000152A 3000BB56 db 030h,000h,0BBh,056h 3896 0000152E 1000BB56 db 010h,000h,0BBh,056h 3897 3898 00001532 34000000 db 034h,000h,000h,000h 3899 00001536 32050080 db 032h,005h,000h,080h 3900 0000153A 35058080 db 035h,005h,080h,080h 3901 0000153E 35058000 db 035h,005h,080h,000h 3902 00001542 33058008 db 033h,005h,080h,008h 3903 00001546 33050008 db 033h,005h,000h,008h 3904 0000154A 74050808 db 074h,005h,008h,008h 3905 0000154E 74050000 db 074h,005h,000h,000h 3906 00001552 73050880 db 073h,005h,008h,080h 3907 00001556 75000000 db 075h,000h,000h,000h 3908 0000155A 75050888 db 075h,005h,008h,088h 3909 0000155E 70000000 db 070h,000h,000h,000h 3910 00001562 74640808 db 074h,064h,008h,008h 3911 00001566 74600800 db 074h,060h,008h,000h 3912 0000156A 72640880 db 072h,064h,008h,080h 3913 0000156E 05600080 db 005h,060h,000h,080h 3914 00001572 05600000 db 005h,060h,000h,000h 3915 00001576 02600008 db 002h,060h,000h,008h 3916 0000157A 34600008 db 034h,060h,000h,008h 3917 0000157E 34600000 db 034h,060h,000h,000h 3918 00001582 32600080 db 032h,060h,000h,080h 3919 00001586 35600080 db 035h,060h,000h,080h 3920 0000158A 35600000 db 035h,060h,000h,000h 3921 0000158E 32600008 db 032h,060h,000h,008h 3922 00001592 34350008 db 034h,035h,000h,008h 3923 00001596 14650000 db 014h,065h,000h,000h 3924 0000159A 32350080 db 032h,035h,000h,080h 3925 0000159E 35350080 db 035h,035h,000h,080h 3926 000015A2 15650000 db 015h,065h,000h,000h 3927 000015A6 32350008 db 032h,035h,000h,008h 3928 000015AA 34358008 db 034h,035h,080h,008h 3929 000015AE 14650000 db 014h,065h,000h,000h 3930 000015B2 32358080 db 032h,035h,080h,080h 3931 000015B6 75000000 db 075h,000h,000h,000h 3932 000015BA 5265E077 db 052h,065h,0E0h,077h 3933 000015BE 32640E77 db 032h,064h,00Eh,077h 3934 000015C2 12650077 db 012h,065h,000h,077h 3935 000015C6 00650077 db 000h,065h,000h,077h 3936 000015CA FF db 0FFh 3937 000015CB 32000000 db 032h,000h,000h,000h 3938 000015CF F000000014 db 0F0h,000h,000h,000h,014h 3939 000015D4 B000000014 db 0B0h,000h,000h,000h,014h 3940 000015D9 30000000 db 030h,000h,000h,000h 3941 000015DD F0000000F4 db 0F0h,000h,000h,000h,0F4h 3942 000015E2 F000DD56F4 db 0F0h,000h,0DDh,056h,0F4h 3943 000015E7 3000DD46 db 030h,000h,0DDh,046h 3944 000015EB 3000DD56 db 030h,000h,0DDh,056h 3945 000015EF 3000DD56 db 030h,000h,0DDh,056h 3946 000015F3 32000050 db 032h,000h,000h,050h 3947 000015F7 300AA050 db 030h,00Ah,0A0h,050h 3948 000015FB 3300A050 db 033h,000h,0A0h,050h 3949 000015FF 30000050 db 030h,000h,000h,050h 3950 00001603 32700050 db 032h,070h,000h,050h 3951 00001607 3000A050 db 030h,000h,0A0h,050h 3952 0000160B 33A0A750 db 033h,0A0h,0A7h,050h 3953 0000160F 33000000 db 033h,000h,000h,000h 3954 00001613 31A07A50 db 031h,0A0h,07Ah,050h 3955 00001617 31000A50 db 031h,000h,00Ah,050h 3956 0000161B 31000A50 db 031h,000h,00Ah,050h 3957 0000161F 320A0A50 db 032h,00Ah,00Ah,050h 3958 00001623 35000000 db 035h,000h,000h,000h 3959 00001627 720A0000 db 072h,00Ah,000h,000h 3960 0000162B 700AA000 db 070h,00Ah,0A0h,000h 3961 0000162F 7300A000 db 073h,000h,0A0h,000h 3962 00001633 70000000 db 070h,000h,000h,000h 3963 00001637 72000000 db 072h,000h,000h,000h 3964 0000163B 7000A000 db 070h,000h,0A0h,000h 3965 0000163F 73A0A000 db 073h,0A0h,0A0h,000h 3966 00001643 73A00099 db 073h,0A0h,000h,099h 3967 00001647 71A00A00 db 071h,0A0h,00Ah,000h 3968 0000164B 71000A00 db 071h,000h,00Ah,000h 3969 0000164F 71000A00 db 071h,000h,00Ah,000h 3970 00001653 750A0A00 db 075h,00Ah,00Ah,000h 3971 00001657 700C0C03 db 070h,00Ch,00Ch,003h 3972 0000165B 70000C03 db 070h,000h,00Ch,003h 3973 0000165F 70000C03 db 070h,000h,00Ch,003h 3974 00001663 72C07C03 db 072h,0C0h,07Ch,003h 3975 00001667 72000000 db 072h,000h,000h,000h 3976 0000166B 71C0C703 db 071h,0C0h,0C7h,003h 3977 0000166F 7300C003 db 073h,000h,0C0h,003h 3978 00001673 71700003 db 071h,070h,000h,003h 3979 00001677 72000003 db 072h,000h,000h,003h 3980 0000167B 7100C003 db 071h,000h,0C0h,003h 3981 0000167F 730CC003 db 073h,00Ch,0C0h,003h 3982 00001683 71000003 db 071h,000h,000h,003h 3983 00001687 310CCCA3 db 031h,00Ch,0CCh,0A3h 3984 0000168B FF db 0FFh 3985 0000168C 32000000 db 032h,000h,000h,000h 3986 00001690 F000700614 db 0F0h,000h,070h,006h,014h 3987 00001695 B000DD4614 db 0B0h,000h,0DDh,046h,014h 3988 0000169A 3000DD56 db 030h,000h,0DDh,056h 3989 0000169E B2000D56C4 db 0B2h,000h,00Dh,056h,0C4h 3990 000016A3 32DD0056 db 032h,0DDh,000h,056h 3991 000016A7 32DD0056 db 032h,0DDh,000h,056h 3992 000016AB 32DD0056 db 032h,0DDh,000h,056h 3993 000016AF 7000F056 db 070h,000h,0F0h,056h 3994 000016B3 7000BB56 db 070h,000h,0BBh,056h 3995 000016B7 32B00B46 db 032h,0B0h,00Bh,046h 3996 000016BB 72BB0056 db 072h,0BBh,000h,056h 3997 000016BF 71B0B056 db 071h,0B0h,0B0h,056h 3998 000016C3 71021156 db 071h,002h,011h,056h 3999 000016C7 71221156 db 071h,022h,011h,056h 4000 000016CB 31201156 db 031h,020h,011h,056h 4001 000016CF 730BB056 db 073h,00Bh,0B0h,056h 4002 000016D3 73BB0056 db 073h,0BBh,000h,056h 4003 000016D7 300B0B46 db 030h,00Bh,00Bh,046h 4004 000016DB 3000BB56 db 030h,000h,0BBh,056h 4005 000016DF FF db 0FFh 4006 4007 ; flying script 126 bytes 4008 script: 4009 ; 7 6 5 4 3 2 1 0 4010 ; v v v v v c c c 4011 ; 4012 ; v = VALUE 4013 ; c = COMMAND 4014 ; 4015 ; 0 = NOP 4016 ; 1 = NEG ZSTEP 4017 ; 2 = INC SPEED 4018 ; 3 = DEC SPEED 4019 ; 4 = INC XSTEP 4020 ; 5 = DEC XSTEP 4021 ; 6 = INC YSTEP 4022 ; 7 = INC YSTEP 4023 4024 000016E0 A1F8F898A1A6 db 0A1h,0f8h,0f8h,098h,0a1h,0A6h 4025 000016E6 F0A7B3371036 db 0F0h,0A7h,0B3h,037h,010h,036h 4026 000016EC 5084858584F0 db 050h,084h,085h,085h,084h,0F0h 4027 000016F2 F0B2A7A6A6A7 db 0F0h,0B2h,0A7h,0A6h,0A6h,0A7h 4028 000016F8 F32670278044 db 0f3h,026h,070h,027h,080h,044h 4029 000016FE 457776A6B061 db 045h,077h,076h,0a6h,0b0h,061h 4030 00001704 6152A7773076 db 061h,052h,0a7h,077h,030h,076h 4031 0000170A 80A201414101 db 080h,0a2H,001h,041h,041h,001h 4032 00001710 F530F4B3A4F8 db 0f5h,030h,0f4h,0b3h,0a4h,0f8h 4033 00001716 A5D04746F0A6 db 0a5h,0D0h,047h,046h,0F0h,0A6h 4034 0000171C 80A770A710A6 db 080h,0A7h,070h,0A7h,010h,0A6h 4035 00001722 8EF0508FB2F8 db 08eh,0f0h,050h,08fh,0b2h,0f8h 4036 00001728 A3808EF0508F db 0a3h,080h,08eh,0f0h,050h,08fh 4037 0000172E B710B6F080A6 db 0b7h,010h,0b6h,0f0h,080h,0a6h 4038 00001734 A7F087F07086 db 0a7h,0f0h,087h,0F0h,070h,086h 4039 0000173A 36F0F0903783 db 036h,0f0h,0f0h,090h,037h,083h 4040 00001740 2CF0F0F0302D db 02ch,0f0h,0f0h,0f0h,030h,02dh 4041 00001746 8230B5B4F2A6 db 082h,030h,0b5h,0b4h,0f2h,0a6h 4042 0000174C 30A78383A6F0 db 030h,0a7h,083h,083h,0a6h,0f0h 4043 00001752 58A77776F0F0 db 058h,0a7h,077h,076h,0f0h,0f0h 4044 00001758 F0F0F8F800 db 0f0h,0f0h,0f8h,0f8h,000h 4045 4046 0000175D 0100 zstep: dw 1 4047 0000175F 66EF doortimer dw -4250 ; 0EF66h 4048 00001761 4F4D4E495343454E54 omniscent db "OMNISCENT" 4049 omniend: 4050 0000176A 284329204449524B20- sanction db "(C) DIRK KšPPERS" 4051 00001773 4B9A5050455253 4052 sancend: 4053 0000177A 0000A5C3 ob: dd -330.0 ; vector.x 4054 0000177E 00000000 dd 0.0 ; vector.y 4055 00001782 00008042 dd 64.0 ; vector.z 4056 owmat: 4057 00001786 00000000 dd 0.0 ; vector.x 4058 0000178A 000080BF dd -1.0 ; vector.y 4059 0000178E 00000000 dd 0.0 ; vector.z 4060 ;owmat+12: 4061 00001792 00000000 dd 0.0 ; vector.x 4062 00001796 00000000 dd 0.0 ; vector.y 4063 0000179A 000080BF dd -1.0 ; vector.z 4064 ;owmat+24: 4065 0000179E 0000803F dd 1.0 ; vector.x 4066 000017A2 00000000 dd 0.0 ; vector.y 4067 000017A6 00000000 dd 0.0 ; vector.z 4068 4069 bss_start: 4070 4071 ABSOLUTE bss_start 4072 4073 000017AA alignb 4 4074 4075 ; 05/02/2017 (32 bit -> 16 bit) 4076 4077 ;============================================================================= 4078 ; null-initialized data 4079 ;============================================================================= 4080 4081 nullstart: 4082 000017AC wmat: resb matrix.size ; 36 4083 000017D0 nwmat: resb matrix.size ; 36 4084 000017F4 zspeed: resw 1 4085 000017F6 oxw: resw 1 4086 000017F8 oyw: resw 1 4087 000017FA ozw: resw 1 4088 000017FC scriptptr: resw 1 4089 000017FE scriptanz: resw 1 4090 00001800 scriptins: resb 1 4091 00001801 once: resb 1 4092 00001802 ticker: resw 1 4093 00001804 tracks: resw 1 4094 00001806 palette: resb 768 4095 00001B06 channels: resb 16*6 4096 ;o: resb object.size ; 7204 4097 ; 10/02/2017 4098 00001B66 object.panz: resw 1 4099 00001B68 object.fanz: resw 1 4100 00001B6A object.p: resb point.size*MAXPOINTS 4101 000027EA object.f: resb face.size*MAXFACES 4102 nullend: 4103 4104 ;============================================================================= 4105 ; uninitialized data 4106 ;============================================================================= 4107 4108 0000378A alignb 4 ; 10/08/2017 4109 4110 0000378C oldstack: resw 1 4111 ;Old08IrqPtr: 4112 ;Old08Irqofs: resw 1 4113 ;Old08Irqseg: resw 1 4114 ;Old09IrqPtr: 4115 ;Old09Irqofs: resw 1 4116 ;Old09Irqseg: resw 1 4117 ;songdata: resb 3605 4118 ; resb 1 4119 0000378E root: resw 1 4120 00003790 circletab: resw 32 4121 000037D0 stars: resb 90 4122 0000382A twice: resb 1 4123 0000382B timer_event_number: resb 1 ; 06/02/2017 4124 ; 25/07/2017 4125 ; 11/02/2017 4126 0000382C vseg: resw 1 4127 0000382E bseg: resw 1 4128 00003830 tseg: resw 20 4129 ; 4130 ;shadetab: resb 256*128 4131 00003858 p: resw 4*15 4132 000038D0 pr: resd 3*15 4133 00003984 po: resb poly.size ; 5*36 4134 00003A38 rp: resd 3*MAXPOINTS ; 3*400 4135 00004CF8 facei: resd MAXFACES ; 400 4136 4137 alignb 4 4138 ; 26/07/2017 4139 00005338 _ds: resd 1 4140 0000533C _es: resd 1 4141 00005340 _fs: resd 1 4142 4143 ; 11/08/2017 4144 ; 06/02/2017 4145 00005344 cw.direc: resw 1 ; word 4146 00005346 cw.shade: resw 1 ; word 4147 ; 4148 00005348 sstp.dy: resd 1 ; dword 4149 0000534C sstp.ddv: resw 1 ; word 4150 0000534E sstp.ddu: resw 1 ; word 4151 00005350 sstp.vv2: resw 1 ; word 4152 00005352 sstp.uu2: resw 1 ; word 4153 00005354 sstp.vv1: resw 1 ; word 4154 00005356 sstp.uu1: resw 1 ; word 4155 00005358 sstp.r: resw 1 ; word 4156 0000535A sstp.l: resw 1 ; word 4157 0000535C sstp.y: resw 1 ; word 4158 0000535E sstp.maxy: resw 1 ; word 4159 00005360 sstp.miny: resw 1 ; word 4160 00005362 sstp.mx2: resw 1 ; word 4161 00005364 sstp.mx1: resw 1 ; word 4162 00005366 resw 1 4163 00005368 sstp.del: resb edges.size * 3 ; 60 bytes 4164 000053A4 sstp.edg: resb edges.size * 3 ; 60 bytes 4165 4166 ; 12/08/2017 4167 ;songdata: resb 3605 4168 000053E0 tstatus: resb 1 ; timer (screen update) flag 4169 4170 000053E1 alignb 4 4171 4172 ; 12/08/2017 4173 000053E4 shadetab: resb 256*128 4174 4175 bss_end: