     1                                  ; ****************************************************************************
     2                                  ; sinus11.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests
     3                                  ; ----------------------------------------------------------------------------
     4                                  ;
     5                                  ; 06/03/2021
     6                                  ;
     7                                  ; ****************************************************************************
     8                                  ; nasm sinus11.s -l sinus11.txt -o SINUS11.PRG -Z error.txt
     9                                  ; (modified from 'sinus9.s', 11/03/2021)
    10                                  
    11                                  ; Draw sinus wave/curve by using 'sysvideo' bx=0305h
    12                                  
    13                                  ; 14/07/2020
    14                                  ; 31/12/2017
    15                                  ; TRDOS 386 (v2.0) system calls
    16                                  _ver 	equ 0
    17                                  _exit 	equ 1
    18                                  _fork 	equ 2
    19                                  _read 	equ 3
    20                                  _write	equ 4
    21                                  _open	equ 5
    22                                  _close 	equ 6
    23                                  _wait 	equ 7
    24                                  _create	equ 8
    25                                  _rename	equ 9
    26                                  _delete	equ 10
    27                                  _exec	equ 11
    28                                  _chdir	equ 12
    29                                  _time 	equ 13
    30                                  _mkdir 	equ 14
    31                                  _chmod	equ 15
    32                                  _rmdir	equ 16
    33                                  _break	equ 17
    34                                  _drive	equ 18
    35                                  _seek	equ 19
    36                                  _tell 	equ 20
    37                                  _memory	equ 21
    38                                  _prompt	equ 22
    39                                  _path	equ 23
    40                                  _env	equ 24
    41                                  _stime	equ 25
    42                                  _quit	equ 26	
    43                                  _intr	equ 27
    44                                  _dir	equ 28
    45                                  _emt 	equ 29
    46                                  _ldrvt 	equ 30
    47                                  _video 	equ 31
    48                                  _audio	equ 32
    49                                  _timer	equ 33
    50                                  _sleep	equ 34
    51                                  _msg    equ 35
    52                                  _geterr	equ 36
    53                                  _fpstat	equ 37
    54                                  _pri	equ 38
    55                                  _rele	equ 39
    56                                  _fff	equ 40
    57                                  _fnf	equ 41
    58                                  _alloc	equ 42
    59                                  _dalloc equ 43
    60                                  _calbac equ 44
    61                                  _dma	equ 45	
    62                                  
    63                                  %macro sys 1-4
    64                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)	
    65                                      ; 03/09/2015	
    66                                      ; 13/04/2015
    67                                      ; Retro UNIX 386 v1 system call.		
    68                                      %if %0 >= 2   
    69                                          mov ebx, %2
    70                                          %if %0 >= 3    
    71                                              mov ecx, %3
    72                                              %if %0 = 4
    73                                                 mov edx, %4   
    74                                              %endif
    75                                          %endif
    76                                      %endif
    77                                      mov eax, %1
    78                                      ;int 30h
    79                                      int 40h ; TRDOS 386 (TRDOS v2.0)		   
    80                                  %endmacro
    81                                  
    82                                  ; Retro UNIX 386 v1 system call format:
    83                                  ; sys systemcall (eax) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
    84                                  
    85                                  [BITS 32] ; We need 32-bit intructions for protected mode
    86                                  
    87                                  [ORG 0] 
    88                                  
    89                                  START_CODE:
    90                                  	; clear bss
    91 00000000 BF[D40A0000]            	mov	edi, bss_start
    92 00000005 B900100000              	mov	ecx, (bss_end - bss_start)/4
    93                                  	;xor	eax, eax
    94 0000000A F3AB                    	rep	stosd
    95                                  
    96                                  	; program message
    97 0000000C BE[E4010000]            	mov	esi, program_msg
    98 00000011 E8C4000000              	call	print_msg
    99                                  
   100 00000016 30E4                    	xor	ah, ah
   101                                  	;int	16h	; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
   102                                  			; Return: AH = scan code, AL = character
   103 00000018 CD32                    	int	32h	; TRDOS 386 Keyboard interrupt 
   104                                  
   105                                  	; Get VESA VBE video bios number 
   106                                  	;	(vbe2 or vbe3, emulator or not)  
   107                                  	;mov	ebx, 0906h
   108                                  	;sys	_video
   109                                  
   110                                  	; get [truecolor] status (24bpp or 32bpp for VBE3 vbios)
   111 0000001A BB09090000              	mov	ebx, 0909h
   112                                  	sys	_video
    64                              <1> 
    65                              <1> 
    66                              <1> 
    67                              <1> 
    68                              <1>  %if %0 >= 2
    69                              <1>  mov ebx, %2
    70                              <1>  %if %0 >= 3
    71                              <1>  mov ecx, %3
    72                              <1>  %if %0 = 4
    73                              <1>  mov edx, %4
    74                              <1>  %endif
    75                              <1>  %endif
    76                              <1>  %endif
    77 0000001F B81F000000          <1>  mov eax, %1
    78                              <1> 
    79 00000024 CD40                <1>  int 40h
   113                                  
   114 00000026 B918010000              	mov	ecx, 118h ; VESA VBE video mode	(1024x768, 24bpp)
   115                                  	
   116                                  	;cmp	ah, 3
   117                                  	;je	short set_vmode
   118                                  	;cmp	ah, 2
   119                                  	;;jne	terminate ; invalid !?
   120                                  	;jne	short set_vmode
   121                                  	;and	al, al
   122                                  	;jz	short set_vmode ; invalid !? (AL must be >= C0h.)
   123                                  	
   124 0000002B 3C20                    	cmp	al, 32
   125 0000002D 7402                    	je	short set_vmode
   126                                  	
   127                                  	; VBE2 bios or default truecolor bpp is 24 bpp	
   128                                  	; so, we are using video mode 144h 
   129                                  	; (TRDOS 386 running in emulator or very old hardware!)
   130                                  	
   131                                  	; BOCHS/QEMU/VBOX emulator 
   132 0000002F B144                    	mov	cl, 44h ; Bochs/Plex86 video mode 144h
   133                                  			; (1024*768, 32bpp) 		
   134                                  
   135                                  	; Set Video Mode to 118h ; 1024*768, 32 bit true colors
   136                                  	;
   137                                  	; NOTE: NVIDIA GEFORCE FX 550 VIDEO BIOS uses 32bpp 
   138                                  	;       instead of 24bpp for same VBE video mode numbers. 
   139                                  	;       So, 118h is 1024*768, 24bpp for BOCHS/QEMU emulator
   140                                  	;	but, it is 1024*768, 32 bpp for real computer 
   141                                  	;	with NVIDIA graphics card and video bios. 
   142                                  	; (Also it is -it must be- 32bpp for other new hardware.)	  	
   143                                  
   144                                  	;sys	_video, 08FFh, 118h
   145                                  set_vmode:
   146                                  	; ecx = VESA VBE video mode
   147                                  	sys	_video, 08FFh
    64                              <1> 
    65                              <1> 
    66                              <1> 
    67                              <1> 
    68                              <1>  %if %0 >= 2
    69 00000031 BBFF080000          <1>  mov ebx, %2
    70                              <1>  %if %0 >= 3
    71                              <1>  mov ecx, %3
    72                              <1>  %if %0 = 4
    73                              <1>  mov edx, %4
    74                              <1>  %endif
    75                              <1>  %endif
    76                              <1>  %endif
    77 00000036 B81F000000          <1>  mov eax, %1
    78                              <1> 
    79 0000003B CD40                <1>  int 40h
   148 0000003D 09C0                    	or	eax, eax
   149                                  	;jz	short terminate
   150                                  	;mov	[LFB_ADDR], edx ; pointer to LFB info table/structure
   151 0000003F 7513                    	jnz	short set_vesa_mode_118h_ok
   152                                  
   153                                  terminate:
   154 00000041 E85C010000              	call	set_text_mode
   155 00000046 E85E010000              	call	write_pixel_count
   156                                  	sys	_exit
    64                              <1> 
    65                              <1> 
    66                              <1> 
    67                              <1> 
    68                              <1>  %if %0 >= 2
    69                              <1>  mov ebx, %2
    70                              <1>  %if %0 >= 3
    71                              <1>  mov ecx, %3
    72                              <1>  %if %0 = 4
    73                              <1>  mov edx, %4
    74                              <1>  %endif
    75                              <1>  %endif
    76                              <1>  %endif
    77 0000004B B801000000          <1>  mov eax, %1
    78                              <1> 
    79 00000050 CD40                <1>  int 40h
   157                                  halt:
   158 00000052 EBFE                    	jmp	short halt
   159                                  
   160                                  set_vesa_mode_118h_ok:
   161 00000054 C705[C80A0000]0000-     	mov	dword [color], 0FF0000h ; initial pixel color
   161 0000005C FF00               
   162                                  _0:
   163 0000005E E888000000              	call	drawsinewave
   164                                  waitforkey:
   165                                  	;mov	ah, 1
   166                                  	;int	32h
   167                                  	;jz	short getkey
   168                                  	;inc	word [counter]
   169                                  	;nop
   170                                  	;nop
   171                                  	;nop
   172                                  	;jmp	short waitforkey
   173                                  getkey:
   174 00000063 30E4                    	xor	ah, ah
   175 00000065 CD32                    	int	32h
   176                                  
   177 00000067 663D032E                	cmp	ax, 2E03h
   178 0000006B 74D4                    	je	short terminate
   179 0000006D 3C1B                    	cmp	al, 1Bh ; ESC key
   180 0000006F 74D0                    	je	short terminate	
   181                                  
   182 00000071 3C2B                    	cmp	al, '+'
   183 00000073 7509                    	jne	short _1
   184                                  	
   185 00000075 8305[C80A0000]20        	add	dword [color], 20h
   186 0000007C EBE0                    	jmp	short _0
   187                                  _1:
   188 0000007E 3C2D                    	cmp	al, '-'
   189 00000080 7509                    	jne	short _2
   190                                  
   191 00000082 832D[C80A0000]20        	sub	dword [color], 20h
   192 00000089 EBD3                    	jmp	short _0
   193                                  _2:
   194 0000008B 3C20                    	cmp	al, 20h  ; space
   195 0000008D 750C                    	jne	short _3
   196 0000008F 8105[C80A0000]2020-     	add	dword [color], 2020h 	
   196 00000097 0000               
   197 00000099 EBC3                    	jmp	short _0
   198                                  _3:
   199 0000009B 80FC4B                  	cmp	ah, 4Bh
   200 0000009E 7507                    	jne	short _5
   201                                  	; left arrow
   202                                  _4:
   203 000000A0 E8EB000000              	call	beep
   204 000000A5 EBBC                    	jmp	waitforkey
   205                                  _5:
   206 000000A7 80FC4D                  	cmp	ah, 4Dh
   207 000000AA 7502                    	jne	short _6
   208                                  
   209                                  	; right arrow
   210 000000AC EBF2                    	jmp	short _4
   211                                  _6:
   212 000000AE 80FC50                  	cmp	ah, 50h
   213 000000B1 7502                    	jne	short _7
   214                                  	; down arrow
   215 000000B3 EBEB                    	jmp	short _4
   216                                  _7:
   217 000000B5 80FC48                  	cmp	ah, 48h
   218 000000B8 7502                    	jne	short _8
   219                                  	; up arrow
   220 000000BA EBE4                    	jmp	short _4
   221                                  _8:	
   222 000000BC 663D0D1C                	cmp	ax, 1C0Dh
   223 000000C0 7511                    	jne	short _9
   224 000000C2 E8C9000000              	call	beep
   225 000000C7 8105[C80A0000]1010-     	add	dword [color], 1010h
   225 000000CF 0000               
   226 000000D1 EB8B                    	jmp	short _0
   227                                  _9:	
   228 000000D3 E8B8000000              	call	beep
   229 000000D8 EB89                    	jmp	waitforkey
   230                                  
   231                                  print_msg:
   232 000000DA B40E                    	mov	ah, 0Eh
   233 000000DC BB07000000              	mov	ebx, 7
   234                                  	;mov	bl, 7 ; char attribute & color
   235                                  p_next_chr:
   236 000000E1 AC                      	lodsb
   237 000000E2 08C0                    	or	al, al
   238 000000E4 7404                    	jz	short p_retn ; retn	
   239 000000E6 CD31                    	int	31h
   240 000000E8 EBF7                    	jmp	short p_next_chr
   241                                  p_retn:
   242 000000EA C3                      	retn
   243                                  
   244                                  drawsinewave:
   245                                  	; INPUT:
   246                                  	;	sinustable
   247                                  	;
   248                                  	; Modified registers: esi, edi, eax, ecx, ebx, edx
   249                                  
   250                                  	; fill _fx table by using sine wave table
   251                                  	; x = 0 to 1023
   252                                  	; y = +256 to -256
   253                                  	; +256 --> 511 -> screen row position = (512-511)+127 = 128
   254                                  	; -256 --> 0 -> screen row position = (512-0)+127 = 639
   255                                  
   256 000000EB BE[C5020000]            	mov	esi, sinustable
   257 000000F0 BF[D40A0000]            	mov	edi, _fx
   258 000000F5 31C0                    	xor	eax, eax
   259 000000F7 29DB                    	sub	ebx, ebx ; 0 ; x 
   260 000000F9 31ED                    	xor	ebp, ebp ; pixel count
   261 000000FB 66AD                    	lodsw
   262 000000FD EB45                    	jmp	short _dsw_5
   263                                  _dsw_0:
   264 000000FF 66AD                    	lodsw	; ax = 512-y value
   265                                  	;
   266 00000101 6639C8                  	cmp	ax, cx ; [prevy]
   267 00000104 743E                    	je	short _dsw_5
   268 00000106 7218                    	jb	short _dsw_3
   269                                  _dsw_1:
   270 00000108 6641                    	inc	cx ; previous 512-y
   271 0000010A 6639C8                  	cmp	ax, cx
   272 0000010D 7635                    	jna	short _dsw_5
   273                                  	; ebx = x
   274                                  	; eax = 512 - y
   275 0000010F E81A000000              	call	_dsw_4
   276 00000114 EBF2                    	jmp	short _dsw_1
   277                                  _dsw_2:
   278 00000116 50                      	push	eax
   279 00000117 E85E000000              	call	getpixeloffset
   280 0000011C AB                      	stosd
   281                                  
   282                                  	; temporary - 06/03/2021
   283                                  	;cmp eax, [pcount] ; max. value of pixel offset
   284                                  	;jna short _dsw2_0
   285                                  	;mov [pcount], eax
   286                                  
   287                                  ;_dsw2_0:	
   288 0000011D 58                      	pop	eax
   289 0000011E 45                      	inc	ebp ; increase pixel count
   290 0000011F C3                      	retn
   291                                  _dsw_3:
   292 00000120 6649                    	dec	cx ; previous 512-y
   293 00000122 6639C8                  	cmp	ax, cx
   294 00000125 731D                    	jnb	short _dsw_5
   295                                  	; ebx = x
   296                                  	; eax = 512 - y
   297 00000127 E802000000              	call	_dsw_4
   298 0000012C EBF2                    	jmp	short _dsw_3
   299                                  _dsw_4:
   300 0000012E 53                      	push	ebx
   301 0000012F 8B1D[CC0A0000]          	mov	ebx, [prevx]
   302 00000135 91                      	xchg	eax, ecx ; [prevy]
   303 00000136 E8DBFFFFFF              	call	_dsw_2
   304 0000013B 91                      	xchg	ecx, eax
   305 0000013C 5B                      	pop	ebx
   306 0000013D FF05[CC0A0000]          	inc	dword [prevx]
   307 00000143 C3                      	retn
   308                                  _dsw_5:
   309 00000144 891D[CC0A0000]          	mov	[prevx], ebx ; previous x value 
   310 0000014A 89C1                    	mov	ecx, eax ; previous 512-y value
   311 0000014C E8C5FFFFFF              	call	_dsw_2
   312 00000151 43                      	inc	ebx
   313 00000152 81FB00040000            	cmp	ebx, 1024
   314 00000158 72A5                    	jb	short _dsw_0
   315                                  
   316                                  	; pixel count to be written
   317 0000015A 892D[D00A0000]          	mov	[pcount], ebp ; 06/03/2021
   318                                  
   319 00000160 BE[D40A0000]            	mov	esi, _fx
   320                                  	;mov	edx, ebp
   321                                  	;
   322                                  	; edx = pixel count
   323                                  	; esi = user's single color pixel buffer address
   324                                  	sys	_video, 0305h, [color], ebp
    64                              <1> 
    65                              <1> 
    66                              <1> 
    67                              <1> 
    68                              <1>  %if %0 >= 2
    69 00000165 BB05030000          <1>  mov ebx, %2
    70                              <1>  %if %0 >= 3
    71 0000016A 8B0D[C80A0000]      <1>  mov ecx, %3
    72                              <1>  %if %0 = 4
    73 00000170 89EA                <1>  mov edx, %4
    74                              <1>  %endif
    75                              <1>  %endif
    76                              <1>  %endif
    77 00000172 B81F000000          <1>  mov eax, %1
    78                              <1> 
    79 00000177 CD40                <1>  int 40h
   325                                  
   326 00000179 C3                      	retn
   327                                  	
   328                                  getpixeloffset:
   329                                  	; 32 bit true color pixel offset
   330                                  	; ebx = x position
   331                                  	; eax = 512-y position (<= 512)
   332                                  	; Note: 06/03/2021 modifcation is for QEMU (Bochs) 32bpp
   333                                  	;	bug check for vesa vbe mode 144h (1024*768, 32bpp)
   334                                  	;	(display page size: 2359296 or 3145728 ?)
   335 0000017A BA3F020000              	mov	edx, 512+63 ; 575 ; 06/03/2021 (sinus11.s) ; 575*1024*3
   336                                  	;mov	edx, 512+127 ; 639 ; 02/03/2021 (sinus9.s) ; 639*1024*4
   337 0000017F 29C2                    	sub	edx, eax ; convert row position from 512-y
   338                                  	; row = y+127
   339 00000181 B800100000              	mov	eax, 1024*4 ; screen width
   340 00000186 F7E2                    	mul	edx
   341 00000188 53                      	push	ebx
   342 00000189 C1E302                  	shl	ebx, 2
   343 0000018C 01D8                     	add	eax, ebx ; add x to y*1024
   344 0000018E 5B                      	pop	ebx	
   345                                  	; eax = pixel offset on display page
   346 0000018F C3                      	retn
   347                                  beep:
   348                                  	; call beep function (16/64 second, 886Hz)
   349                                  	sys	_audio, 16, 1331
    64                              <1> 
    65                              <1> 
    66                              <1> 
    67                              <1> 
    68                              <1>  %if %0 >= 2
    69 00000190 BB10000000          <1>  mov ebx, %2
    70                              <1>  %if %0 >= 3
    71 00000195 B933050000          <1>  mov ecx, %3
    72                              <1>  %if %0 = 4
    73                              <1>  mov edx, %4
    74                              <1>  %endif
    75                              <1>  %endif
    76                              <1>  %endif
    77 0000019A B820000000          <1>  mov eax, %1
    78                              <1> 
    79 0000019F CD40                <1>  int 40h
   350 000001A1 C3                      	retn
   351                                  
   352                                  set_text_mode:
   353 000001A2 30E4                    	xor    ah, ah
   354 000001A4 B003                    	mov    al, 3                        
   355                                   	;int   10h ; al = 03h text mode, int 10 video
   356 000001A6 CD31                    	int    31h ; TRDOS 386 - Video interrupt
   357 000001A8 C3                      	retn
   358                                  
   359                                  write_pixel_count:
   360                                  	; 06/03/2021
   361 000001A9 A1[D00A0000]            	mov	eax, [pcount]
   362 000001AE 09C0                    	or	eax, eax
   363 000001B0 7431                    	jz	short wpc_ok
   364 000001B2 BF[BD020000]            	mov	edi, pixcstr
   365 000001B7 B90A000000              	mov	ecx, 10
   366 000001BC 89E5                    	mov	ebp, esp
   367                                  wpc_0:
   368 000001BE 31D2                    	xor	edx, edx
   369 000001C0 F7F1                    	div	ecx
   370 000001C2 52                      	push	edx
   371 000001C3 21C0                    	and	eax, eax
   372 000001C5 75F7                    	jnz	short wpc_0
   373                                  wpc_1:	
   374 000001C7 58                      	pop	eax
   375 000001C8 0430                    	add	al, '0'
   376 000001CA AA                      	stosb
   377 000001CB 39E5                    	cmp	ebp, esp
   378 000001CD 77F8                    	ja	short wpc_1
   379                                  	
   380 000001CF BE[AA020000]            	mov	esi, wpixels_msg
   381 000001D4 E801FFFFFF              	call	print_msg
   382 000001D9 BE[A7020000]            	mov	esi, nextline
   383 000001DE E9F7FEFFFF              	jmp	print_msg
   384                                  wpc_ok:
   385 000001E3 C3                      	retn
   386                                  		
   387                                  program_msg:
   388 000001E4 5452444F5320333836-     	db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Draw Sine Wave"
   388 000001ED 2076322E302E33202D-
   388 000001F6 202827737973766964-
   388 000001FF 656F27292054657374-
   388 00000208 2050726F6772616D20-
   388 00000211 2D2044726177205369-
   388 0000021A 6E652057617665     
   389 00000221 0D0A                    	db 0Dh, 0Ah
   390 00000223 6279204572646F6761-     	db "by Erdogan Tan - 06/03/2021"
   390 0000022C 6E2054616E202D2030-
   390 00000235 362F30332F32303231 
   391                                  	;db 0Dh, 0Ah, 0
   392 0000023E 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah
   393                                  
   394 00000242 557365205350414345-     	db "Use SPACE,ENTER,'+','-' keys to change COLOR .."		
   394 0000024B 2C454E5445522C272B-
   394 00000254 272C272D27206B6579-
   394 0000025D 7320746F206368616E-
   394 00000266 676520434F4C4F5220-
   394 0000026F 2E2E               
   395 00000271 0D0A                    	db 0Dh, 0Ah
   396 00000273 507265737320455343-     	db "Press ESC to exit .."
   396 0000027C 20746F206578697420-
   396 00000285 2E2E               
   397 00000287 0D0A                    	db 0Dh, 0Ah
   398 00000289 0D0A                    	db 0Dh, 0Ah
   399 0000028B 507265737320616E79-     	db "Press any key to continue .."
   399 00000294 206B657920746F2063-
   399 0000029D 6F6E74696E7565202E-
   399 000002A6 2E                 
   400                                  nextline:
   401 000002A7 0D0A00                  	db 0Dh, 0Ah, 0
   402                                  
   403                                  wpixels_msg:
   404 000002AA 0D0A                    	db 0Dh, 0Ah
   405 000002AC 5772697474656E2070-     	db "Written pixels : "
   405 000002B5 6978656C73203A20   
   406                                  pixcstr:
   407 000002BD 30                      	db "0"
   408 000002BE 000000000000            	db 0,0,0,0,0,0
   409 000002C4 00                      	db 0
   410                                  
   411                                  sinustable: ; sine wave table (x=0 to 1023, y= +256 to -256)
   412                                  	; 19/02/2021
   413                                  	; https://daycounter.com/Calculators/Sine-Generator-Calculator2.phtml
   414                                  	; 1024x512 (x= 0 to 1023, y = 0 to 511)
   415 000002C5 000101010301040106-     	dw 256,257,259,260,262,263,265,266,268,270,271,273,274,276,277,279,281,282,284,285,287,288,290,291,293,295,296,298,299,301,302,304
   415 000002CE 01070109010A010C01-
   415 000002D7 0E010F011101120114-
   415 000002E0 011501170119011A01-
   415 000002E9 1C011D011F01200122-
   415 000002F2 012301250127012801-
   415 000002FB 2A012B012D012E0130-
   415 00000304 01                 
   416 00000305 310133013401360137-     	dw 305,307,308,310,311,313,315,316,318,319,321,322,324,325,327,328,330,331,333,334,336,337,339,340,342,343,345,346,347,349,350,352
   416 0000030E 0139013B013C013E01-
   416 00000317 3F0141014201440145-
   416 00000320 01470148014A014B01-
   416 00000329 4D014E015001510153-
   416 00000332 015401560157015901-
   416 0000033B 5A015B015D015E0160-
   416 00000344 01                 
   417 00000345 610163016401660167-     	dw 353,355,356,358,359,360,362,363,365,366,368,369,370,372,373,375,376,377,379,380,381,383,384,386,387,388,390,391,392,394,395,396
   417 0000034E 0168016A016B016D01-
   417 00000357 6E0170017101720174-
   417 00000360 017501770178017901-
   417 00000369 7B017C017D017F0180-
   417 00000372 018201830184018601-
   417 0000037B 870188018A018B018C-
   417 00000384 01                 
   418 00000385 8D018F019001910193-     	dw 397,399,400,401,403,404,405,406,408,409,410,411,413,414,415,416,418,419,420,421,422,424,425,426,427,428,429,431,432,433,434,435
   418 0000038E 019401950196019801-
   418 00000397 99019A019B019D019E-
   418 000003A0 019F01A001A201A301-
   418 000003A9 A401A501A601A801A9-
   418 000003B2 01AA01AB01AC01AD01-
   418 000003BB AF01B001B101B201B3-
   418 000003C4 01                 
   419 000003C5 B401B501B601B701B9-     	dw 436,437,438,439,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,463,464,465,466,467
   419 000003CE 01BA01BB01BC01BD01-
   419 000003D7 BE01BF01C001C101C2-
   419 000003E0 01C301C401C501C601-
   419 000003E9 C701C801C901CA01CB-
   419 000003F2 01CC01CD01CE01CF01-
   419 000003FB CF01D001D101D201D3-
   419 00000404 01                 
   420 00000405 D401D501D601D701D7-     	dw 468,469,470,471,471,472,473,474,475,475,476,477,478,479,479,480,481,482,482,483,484,484,485,486,486,487,488,488,489,490,490,491
   420 0000040E 01D801D901DA01DB01-
   420 00000417 DB01DC01DD01DE01DF-
   420 00000420 01DF01E001E101E201-
   420 00000429 E201E301E401E401E5-
   420 00000432 01E601E601E701E801-
   420 0000043B E801E901EA01EA01EB-
   420 00000444 01                 
   421 00000445 EC01EC01ED01ED01EE-     	dw 492,492,493,493,494,494,495,496,496,497,497,498,498,499,499,500,500,500,501,501,502,502,503,503,503,504,504,504,505,505,505,506
   421 0000044E 01EE01EF01F001F001-
   421 00000457 F101F101F201F201F3-
   421 00000460 01F301F401F401F401-
   421 00000469 F501F501F601F601F7-
   421 00000472 01F701F701F801F801-
   421 0000047B F801F901F901F901FA-
   421 00000484 01                 
   422 00000485 FA01FA01FB01FB01FB-     	dw 506,506,507,507,507,508,508,508,508,508,509,509,509,509,509,510,510,510,510,510,510,510,511,511,511,511,511,511,511,511,511,511
   422 0000048E 01FC01FC01FC01FC01-
   422 00000497 FC01FD01FD01FD01FD-
   422 000004A0 01FD01FE01FE01FE01-
   422 000004A9 FE01FE01FE01FE01FF-
   422 000004B2 01FF01FF01FF01FF01-
   422 000004BB FF01FF01FF01FF01FF-
   422 000004C4 01                 
   423 000004C5 FF01FF01FF01FF01FF-     	dw 511,511,511,511,511,511,511,511,511,511,511,510,510,510,510,510,510,510,509,509,509,509,509,508,508,508,508,508,507,507,507,506
   423 000004CE 01FF01FF01FF01FF01-
   423 000004D7 FF01FF01FE01FE01FE-
   423 000004E0 01FE01FE01FE01FE01-
   423 000004E9 FD01FD01FD01FD01FD-
   423 000004F2 01FC01FC01FC01FC01-
   423 000004FB FC01FB01FB01FB01FA-
   423 00000504 01                 
   424 00000505 FA01FA01F901F901F9-     	dw 506,506,505,505,505,504,504,504,503,503,503,502,502,501,501,500,500,500,499,499,498,498,497,497,496,496,495,494,494,493,493,492
   424 0000050E 01F801F801F801F701-
   424 00000517 F701F701F601F601F5-
   424 00000520 01F501F401F401F401-
   424 00000529 F301F301F201F201F1-
   424 00000532 01F101F001F001EF01-
   424 0000053B EE01EE01ED01ED01EC-
   424 00000544 01                 
   425 00000545 EC01EB01EA01EA01E9-     	dw 492,491,490,490,489,488,488,487,486,486,485,484,484,483,482,482,481,480,479,479,478,477,476,475,475,474,473,472,471,471,470,469
   425 0000054E 01E801E801E701E601-
   425 00000557 E601E501E401E401E3-
   425 00000560 01E201E201E101E001-
   425 00000569 DF01DF01DE01DD01DC-
   425 00000572 01DB01DB01DA01D901-
   425 0000057B D801D701D701D601D5-
   425 00000584 01                 
   426 00000585 D401D301D201D101D0-     	dw 468,467,466,465,464,463,463,462,461,460,459,458,457,456,455,454,453,452,451,450,449,448,447,446,445,444,443,442,441,439,438,437
   426 0000058E 01CF01CF01CE01CD01-
   426 00000597 CC01CB01CA01C901C8-
   426 000005A0 01C701C601C501C401-
   426 000005A9 C301C201C101C001BF-
   426 000005B2 01BE01BD01BC01BB01-
   426 000005BB BA01B901B701B601B5-
   426 000005C4 01                 
   427 000005C5 B401B301B201B101B0-     	dw 436,435,434,433,432,431,429,428,427,426,425,424,422,421,420,419,418,416,415,414,413,411,410,409,408,406,405,404,403,401,400,399
   427 000005CE 01AF01AD01AC01AB01-
   427 000005D7 AA01A901A801A601A5-
   427 000005E0 01A401A301A201A001-
   427 000005E9 9F019E019D019B019A-
   427 000005F2 019901980196019501-
   427 000005FB 94019301910190018F-
   427 00000604 01                 
   428 00000605 8D018C018B018A0188-     	dw 397,396,395,394,392,391,390,388,387,386,384,383,381,380,379,377,376,375,373,372,370,369,368,366,365,363,362,360,359,358,356,355
   428 0000060E 018701860184018301-
   428 00000617 820180017F017D017C-
   428 00000620 017B01790178017701-
   428 00000629 750174017201710170-
   428 00000632 016E016D016B016A01-
   428 0000063B 680167016601640163-
   428 00000644 01                 
   429 00000645 610160015E015D015B-     	dw 353,352,350,349,347,346,345,343,342,340,339,337,336,334,333,331,330,328,327,325,324,322,321,319,318,316,315,313,311,310,308,307
   429 0000064E 015A01590157015601-
   429 00000657 54015301510150014E-
   429 00000660 014D014B014A014801-
   429 00000669 470145014401420141-
   429 00000672 013F013E013C013B01-
   429 0000067B 390137013601340133-
   429 00000684 01                 
   430 00000685 310130012E012D012B-     	dw 305,304,302,301,299,298,296,295,293,291,290,288,287,285,284,282,281,279,277,276,274,273,271,270,268,266,265,263,262,260,259,257
   430 0000068E 012A01280127012501-
   430 00000697 2301220120011F011D-
   430 000006A0 011C011A0119011701-
   430 000006A9 15011401120111010F-
   430 000006B2 010E010C010A010901-
   430 000006BB 070106010401030101-
   430 000006C4 01                 
   431 000006C5 0001FE00FC00FB00F9-     	dw 256,254,252,251,249,248,246,245,243,241,240,238,237,235,234,232,230,229,227,226,224,223,221,220,218,216,215,213,212,210,209,207
   431 000006CE 00F800F600F500F300-
   431 000006D7 F100F000EE00ED00EB-
   431 000006E0 00EA00E800E600E500-
   431 000006E9 E300E200E000DF00DD-
   431 000006F2 00DC00DA00D800D700-
   431 000006FB D500D400D200D100CF-
   431 00000704 00                 
   432 00000705 CE00CC00CB00C900C8-     	dw 206,204,203,201,200,198,196,195,193,192,190,189,187,186,184,183,181,180,178,177,175,174,172,171,169,168,166,165,164,162,161,159
   432 0000070E 00C600C400C300C100-
   432 00000717 C000BE00BD00BB00BA-
   432 00000720 00B800B700B500B400-
   432 00000729 B200B100AF00AE00AC-
   432 00000732 00AB00A900A800A600-
   432 0000073B A500A400A200A1009F-
   432 00000744 00                 
   433 00000745 9E009C009B00990098-     	dw 158,156,155,153,152,151,149,148,146,145,143,142,141,139,138,136,135,134,132,131,130,128,127,125,124,123,121,120,119,117,116,115
   433 0000074E 009700950094009200-
   433 00000757 91008F008E008D008B-
   433 00000760 008A00880087008600-
   433 00000769 84008300820080007F-
   433 00000772 007D007C007B007900-
   433 0000077B 780077007500740073-
   433 00000784 00                 
   434 00000785 720070006F006E006C-     	dw 114,112,111,110,108,107,106,105,103,102,101,100,98,97,96,95,93,92,91,90,89,87,86,85,84,83,82,80,79,78,77,76
   434 0000078E 006B006A0069006700-
   434 00000797 660065006400620061-
   434 000007A0 0060005F005D005C00-
   434 000007A9 5B005A005900570056-
   434 000007B2 005500540053005200-
   434 000007BB 50004F004E004D004C-
   434 000007C4 00                 
   435 000007C5 4B004A004900480046-     	dw 75,74,73,72,70,69,68,67,66,65,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,48,47,46,45,44
   435 000007CE 004500440043004200-
   435 000007D7 410040003F003E003D-
   435 000007E0 003C003B003A003900-
   435 000007E9 380037003600350034-
   435 000007F2 003300320031003000-
   435 000007FB 30002F002E002D002C-
   435 00000804 00                 
   436 00000805 2B002A002900280028-     	dw 43,42,41,40,40,39,38,37,36,36,35,34,33,32,32,31,30,29,29,28,27,27,26,25,25,24,23,23,22,21,21,20
   436 0000080E 002700260025002400-
   436 00000817 240023002200210020-
   436 00000820 0020001F001E001D00-
   436 00000829 1D001C001B001B001A-
   436 00000832 001900190018001700-
   436 0000083B 170016001500150014-
   436 00000844 00                 
   437 00000845 130013001200120011-     	dw 19,19,18,18,17,17,16,15,15,14,14,13,13,12,12,11,11,11,10,10,9,9,8,8,8,7,7,7,6,6,6,5
   437 0000084E 00110010000F000F00-
   437 00000857 0E000E000D000D000C-
   437 00000860 000C000B000B000B00-
   437 00000869 0A000A000900090008-
   437 00000872 000800080007000700-
   437 0000087B 070006000600060005-
   437 00000884 00                 
   438 00000885 050005000400040004-     	dw 5,5,4,4,4,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0
   438 0000088E 000300030003000300-
   438 00000897 030002000200020002-
   438 000008A0 000200010001000100-
   438 000008A9 010001000100010000-
   438 000008B2 000000000000000000-
   438 000008BB 000000000000000000-
   438 000008C4 00                 
   439 000008C5 000000000000000000-     	dw 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,5
   439 000008CE 000000000000000000-
   439 000008D7 000000000100010001-
   439 000008E0 000100010001000100-
   439 000008E9 020002000200020002-
   439 000008F2 000300030003000300-
   439 000008FB 030004000400040005-
   439 00000904 00                 
   440 00000905 050005000600060006-     	dw 5,5,6,6,6,7,7,7,8,8,8,9,9,10,10,11,11,11,12,12,13,13,14,14,15,15,16,17,17,18,18,19
   440 0000090E 000700070007000800-
   440 00000917 08000800090009000A-
   440 00000920 000A000B000B000B00-
   440 00000929 0C000C000D000D000E-
   440 00000932 000E000F000F001000-
   440 0000093B 110011001200120013-
   440 00000944 00                 
   441 00000945 130014001500150016-     	dw 19,20,21,21,22,23,23,24,25,25,26,27,27,28,29,29,30,31,32,32,33,34,35,36,36,37,38,39,40,40,41,42
   441 0000094E 001700170018001900-
   441 00000957 19001A001B001B001C-
   441 00000960 001D001D001E001F00-
   441 00000969 200020002100220023-
   441 00000972 002400240025002600-
   441 0000097B 27002800280029002A-
   441 00000984 00                 
   442 00000985 2B002C002D002E002F-     	dw 43,44,45,46,47,48,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,72,73,74
   442 0000098E 003000300031003200-
   442 00000997 330034003500360037-
   442 000009A0 00380039003A003B00-
   442 000009A9 3C003D003E003F0040-
   442 000009B2 004100420043004400-
   442 000009BB 45004600480049004A-
   442 000009C4 00                 
   443 000009C5 4B004C004D004E004F-     	dw 75,76,77,78,79,80,82,83,84,85,86,87,89,90,91,92,93,95,96,97,98,100,101,102,103,105,106,107,108,110,111,112
   443 000009CE 005000520053005400-
   443 000009D7 55005600570059005A-
   443 000009E0 005B005C005D005F00-
   443 000009E9 600061006200640065-
   443 000009F2 006600670069006A00-
   443 000009FB 6B006C006E006F0070-
   443 00000A04 00                 
   444 00000A05 720073007400750077-     	dw 114,115,116,117,119,120,121,123,124,125,127,128,130,131,132,134,135,136,138,139,141,142,143,145,146,148,149,151,152,153,155,156
   444 00000A0E 00780079007B007C00-
   444 00000A17 7D007F008000820083-
   444 00000A20 008400860087008800-
   444 00000A29 8A008B008D008E008F-
   444 00000A32 009100920094009500-
   444 00000A3B 9700980099009B009C-
   444 00000A44 00                 
   445 00000A45 9E009F00A100A200A4-     	dw 158,159,161,162,164,165,166,168,169,171,172,174,175,177,178,180,181,183,184,186,187,189,190,192,193,195,196,198,200,201,203,204
   445 00000A4E 00A500A600A800A900-
   445 00000A57 AB00AC00AE00AF00B1-
   445 00000A60 00B200B400B500B700-
   445 00000A69 B800BA00BB00BD00BE-
   445 00000A72 00C000C100C300C400-
   445 00000A7B C600C800C900CB00CC-
   445 00000A84 00                 
   446 00000A85 CE00CF00D100D200D4-     	dw 206,207,209,210,212,213,215,216,218,220,221,223,224,226,227,229,230,232,234,235,237,238,240,241,243,245,246,248,249,251,252,254
   446 00000A8E 00D500D700D800DA00-
   446 00000A97 DC00DD00DF00E000E2-
   446 00000AA0 00E300E500E600E800-
   446 00000AA9 EA00EB00ED00EE00F0-
   446 00000AB2 00F100F300F500F600-
   446 00000ABB F800F900FB00FC00FE-
   446 00000AC4 00                 
   447                                  
   448                                  bss:
   449                                  
   450                                  ABSOLUTE bss
   451                                  
   452 00000AC5 ??????                  alignb 4
   453                                  
   454 00000AC8 ????????                color:	resd 1
   455 00000ACC ????????                prevx:	resd 1
   456                                  ;prevy:	resd 1
   457 00000AD0 ????????                pcount:	resd 1 ; 06/03/2021
   458                                  
   459                                  bss_start:
   460 00000AD4 <res 1000h>             _fx:	resd 1024 ; for every X values from 0 to 1023
   461 00001AD4 <res 3000h>             	resd 4096-1024 ; used for repetitive x values for continuity
   462                                  bss_end:
