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