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