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