     1                                  ; ****************************************************************************
     2                                  ; sinus12.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests
     3                                  ; ----------------------------------------------------------------------------
     4                                  ;
     5                                  ; 07/03/2021
     6                                  ;
     7                                  ; ****************************************************************************
     8                                  ; nasm sinus12.s -l sinus12.txt -o SINUS12.PRG -Z error.txt
     9                                  ; (modified from 'sinus4.s', 19/02/2021)
    10                                  
    11                                  ; Draw sinus wave/curve by using 'sysvideo' bx=0305h
    12                                  ; (640*480, 32 bit true color version)
    13                                  
    14                                  ; 14/07/2020
    15                                  ; 31/12/2017
    16                                  ; TRDOS 386 (v2.0) system calls
    17                                  _ver 	equ 0
    18                                  _exit 	equ 1
    19                                  _fork 	equ 2
    20                                  _read 	equ 3
    21                                  _write	equ 4
    22                                  _open	equ 5
    23                                  _close 	equ 6
    24                                  _wait 	equ 7
    25                                  _create	equ 8
    26                                  _rename	equ 9
    27                                  _delete	equ 10
    28                                  _exec	equ 11
    29                                  _chdir	equ 12
    30                                  _time 	equ 13
    31                                  _mkdir 	equ 14
    32                                  _chmod	equ 15
    33                                  _rmdir	equ 16
    34                                  _break	equ 17
    35                                  _drive	equ 18
    36                                  _seek	equ 19
    37                                  _tell 	equ 20
    38                                  _memory	equ 21
    39                                  _prompt	equ 22
    40                                  _path	equ 23
    41                                  _env	equ 24
    42                                  _stime	equ 25
    43                                  _quit	equ 26	
    44                                  _intr	equ 27
    45                                  _dir	equ 28
    46                                  _emt 	equ 29
    47                                  _ldrvt 	equ 30
    48                                  _video 	equ 31
    49                                  _audio	equ 32
    50                                  _timer	equ 33
    51                                  _sleep	equ 34
    52                                  _msg    equ 35
    53                                  _geterr	equ 36
    54                                  _fpstat	equ 37
    55                                  _pri	equ 38
    56                                  _rele	equ 39
    57                                  _fff	equ 40
    58                                  _fnf	equ 41
    59                                  _alloc	equ 42
    60                                  _dalloc equ 43
    61                                  _calbac equ 44
    62                                  _dma	equ 45	
    63                                  
    64                                  %macro sys 1-4
    65                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)	
    66                                      ; 03/09/2015	
    67                                      ; 13/04/2015
    68                                      ; Retro UNIX 386 v1 system call.		
    69                                      %if %0 >= 2   
    70                                          mov ebx, %2
    71                                          %if %0 >= 3    
    72                                              mov ecx, %3
    73                                              %if %0 = 4
    74                                                 mov edx, %4   
    75                                              %endif
    76                                          %endif
    77                                      %endif
    78                                      mov eax, %1
    79                                      ;int 30h
    80                                      int 40h ; TRDOS 386 (TRDOS v2.0)		   
    81                                  %endmacro
    82                                  
    83                                  ; Retro UNIX 386 v1 system call format:
    84                                  ; sys systemcall (eax) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
    85                                  
    86                                  [BITS 32] ; We need 32-bit intructions for protected mode
    87                                  
    88                                  [ORG 0] 
    89                                  
    90                                  START_CODE:
    91                                  	; clear bss
    92 00000000 BF[74070000]            	mov	edi, bss_start
    93 00000005 B900080000              	mov	ecx, (bss_end - bss_start)/4
    94                                  	;xor	eax, eax
    95 0000000A F3AB                    	rep	stosd
    96                                  
    97                                  	; program message
    98 0000000C BE[A5010000]            	mov	esi, program_msg
    99 00000011 E8BF000000              	call	print_msg
   100                                  
   101 00000016 30E4                    	xor	ah, ah
   102                                  	;int	16h	; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
   103                                  			; Return: AH = scan code, AL = character
   104 00000018 CD32                    	int	32h	; TRDOS 386 Keyboard interrupt 
   105                                  
   106                                  	; Get VESA VBE video bios number 
   107                                  	;	(vbe2 or vbe3, emulator or not)  
   108                                  	;mov	ebx, 0906h
   109                                  	;sys	_video
   110                                  	
   111                                  	; get [truecolor] status (24bpp or 32bpp for VBE3 vbios)
   112 0000001A BB09090000              	mov	ebx, 0909h
   113                                  	sys	_video
    65                              <1> 
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1>  %if %0 >= 2
    70                              <1>  mov ebx, %2
    71                              <1>  %if %0 >= 3
    72                              <1>  mov ecx, %3
    73                              <1>  %if %0 = 4
    74                              <1>  mov edx, %4
    75                              <1>  %endif
    76                              <1>  %endif
    77                              <1>  %endif
    78 0000001F B81F000000          <1>  mov eax, %1
    79                              <1> 
    80 00000024 CD40                <1>  int 40h
   114                                  
   115 00000026 B912010000              	mov	ecx, 112h ; VESA VBE video mode	(640x480, 24bpp)
   116                                  	
   117                                  	;cmp	ah, 3
   118                                  	;je	short set_vmode
   119                                  	;cmp	ah, 2
   120                                  	;;jne	terminate ; invalid !?
   121                                  	;jne	short set_vmode
   122                                  	;and	al, al
   123                                  	;jz	short set_vmode ; invalid !? (AL must be >= C0h.)
   124                                  	
   125 0000002B 3C20                    	cmp	al, 32
   126 0000002D 7402                    	je	short set_vmode
   127                                  	
   128                                  	; VBE2 bios or default truecolor bpp is 24 bpp	
   129                                  	; so, we are using video mode 142h 
   130                                  	; (TRDOS 386 running in emulator or very old hardware!)
   131                                  	
   132                                  	; BOCHS/QEMU/VBOX emulator 
   133 0000002F B142                    	mov	cl, 42h ; Bochs/Plex86 video mode 142h
   134                                  			; (640*480, 32bpp) 		
   135                                  
   136                                  	; Set Video Mode to 112h ; 640x480, 32 bit true colors
   137                                  	;
   138                                  	; NOTE: NVIDIA GEFORCE FX 5500 VIDEO BIOS uses 32bpp 
   139                                  	;       instead of 24bpp for same VBE video mode numbers. 
   140                                  	;       So, 112h is 640*480, 24bpp for BOCHS/QEMU emulator
   141                                  	;	but, it is 640*480, 32 bpp for real computer 
   142                                  	;	with NVIDIA graphics card and video bios. 
   143                                  	; (Also it is -it must be- 32bpp for other new hardware.)	  	
   144                                  
   145                                  	;sys	_video, 08FFh, 112h
   146                                  set_vmode:
   147                                  	; ecx = VESA VBE video mode
   148                                  	sys	_video, 08FFh
    65                              <1> 
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1>  %if %0 >= 2
    70 00000031 BBFF080000          <1>  mov ebx, %2
    71                              <1>  %if %0 >= 3
    72                              <1>  mov ecx, %3
    73                              <1>  %if %0 = 4
    74                              <1>  mov edx, %4
    75                              <1>  %endif
    76                              <1>  %endif
    77                              <1>  %endif
    78 00000036 B81F000000          <1>  mov eax, %1
    79                              <1> 
    80 0000003B CD40                <1>  int 40h
   149 0000003D 09C0                    	or	eax, eax
   150                                  	;jz	short terminate
   151                                  	;mov	[LFB_ADDR], edx ; pointer to LFB info table/structure
   152 0000003F 750E                    	jnz	short set_vesa_mode_112h_ok
   153                                  
   154                                  terminate:
   155 00000041 E858010000              	call	set_text_mode
   156                                  	sys	_exit
    65                              <1> 
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1>  %if %0 >= 2
    70                              <1>  mov ebx, %2
    71                              <1>  %if %0 >= 3
    72                              <1>  mov ecx, %3
    73                              <1>  %if %0 = 4
    74                              <1>  mov edx, %4
    75                              <1>  %endif
    76                              <1>  %endif
    77                              <1>  %endif
    78 00000046 B801000000          <1>  mov eax, %1
    79                              <1> 
    80 0000004B CD40                <1>  int 40h
   157                                  halt:
   158 0000004D EBFE                    	jmp	short halt
   159                                  
   160                                  set_vesa_mode_112h_ok:
   161 0000004F C705[6C070000]0000-     	mov	dword [color], 0FF0000h ; initial pixel color
   161 00000057 FF00               
   162                                  _0:
   163 00000059 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 0000005E 30E4                    	xor	ah, ah
   175 00000060 CD32                    	int	32h
   176                                  
   177 00000062 663D032E                	cmp	ax, 2E03h
   178 00000066 74D9                    	je	short terminate
   179 00000068 3C1B                    	cmp	al, 1Bh ; ESC key
   180 0000006A 74D5                    	je	short terminate	
   181                                  
   182 0000006C 3C2B                    	cmp	al, '+'
   183 0000006E 7509                    	jne	short _1
   184                                  	
   185 00000070 8305[6C070000]20        	add	dword [color], 20h
   186 00000077 EBE0                    	jmp	short _0
   187                                  _1:
   188 00000079 3C2D                    	cmp	al, '-'
   189 0000007B 7509                    	jne	short _2
   190                                  
   191 0000007D 832D[6C070000]20        	sub	dword [color], 20h
   192 00000084 EBD3                    	jmp	short _0
   193                                  _2:
   194 00000086 3C20                    	cmp	al, 20h  ; space
   195 00000088 750C                    	jne	short _3
   196 0000008A 8105[6C070000]2020-     	add	dword [color], 2020h	
   196 00000092 0000               
   197 00000094 EBC3                    	jmp	short _0
   198                                  _3:
   199 00000096 80FC4B                  	cmp	ah, 4Bh
   200 00000099 7507                    	jne	short _5
   201                                  	; left arrow
   202                                  _4:
   203 0000009B E8EC000000              	call	beep
   204 000000A0 EBBC                    	jmp	waitforkey
   205                                  _5:
   206 000000A2 80FC4D                  	cmp	ah, 4Dh
   207 000000A5 7502                    	jne	short _6
   208                                  
   209                                  	; right arrow
   210 000000A7 EBF2                    	jmp	short _4
   211                                  _6:
   212 000000A9 80FC50                  	cmp	ah, 50h
   213 000000AC 7502                    	jne	short _7
   214                                  	; down arrow
   215 000000AE EBEB                    	jmp	short _4
   216                                  _7:
   217 000000B0 80FC48                  	cmp	ah, 48h
   218 000000B3 7502                    	jne	short _8
   219                                  	; up arrow
   220 000000B5 EBE4                    	jmp	short _4
   221                                  _8:	
   222 000000B7 663D0D1C                	cmp	ax, 1C0Dh
   223 000000BB 7511                    	jne	short _9
   224 000000BD E8CA000000              	call	beep
   225 000000C2 8105[6C070000]1010-     	add	dword [color], 1010h
   225 000000CA 0000               
   226 000000CC EB8B                    	jmp	short _0
   227                                  _9:	
   228 000000CE E8B9000000              	call	beep
   229 000000D3 EB89                    	jmp	waitforkey
   230                                  
   231                                  print_msg:
   232 000000D5 B40E                    	mov	ah, 0Eh
   233 000000D7 BB07000000              	mov	ebx, 7
   234                                  	;mov	bl, 7 ; char attribute & color
   235                                  p_next_chr:
   236 000000DC AC                      	lodsb
   237 000000DD 08C0                    	or	al, al
   238 000000DF 7404                    	jz	short p_retn ; retn	
   239 000000E1 CD31                    	int	31h
   240 000000E3 EBF7                    	jmp	short p_next_chr
   241                                  p_retn:
   242 000000E5 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 639
   252                                  	; y = +200 to -200
   253                                  	; +200 --> 399 -> screen row position = (400-399)+39 = 40
   254                                  	; -200 --> 0 -> screen row position = (400-0)+39 = 439
   255                                  
   256 000000E6 BE[6B020000]            	mov	esi, sinustable
   257 000000EB BF[74070000]            	mov	edi, _fx
   258                                  	;xor	eax, eax
   259 000000F0 29DB                    	sub	ebx, ebx ; 0 ; x 
   260 000000F2 31ED                    	xor	ebp, ebp ; pixel count
   261                                  
   262                                  	;xor	eax, eax	
   263                                  	;lodsw	; ax = 400-y value 
   264                                  
   265                                  	;;;; start of curve continuity code
   266                                  
   267 000000F4 66AD                    	lodsw
   268 000000F6 EB47                    	jmp	short _dsw_5
   269                                  _dsw_0:
   270 000000F8 31C0                    	xor	eax, eax	
   271 000000FA 66AD                    	lodsw	; ax = 400-y value  ; *** 
   272                                  	;
   273 000000FC 6639C8                  	cmp	ax, cx ; [prevy]
   274 000000FF 743E                    	je	short _dsw_5
   275 00000101 7218                    	jb	short _dsw_3
   276                                  _dsw_1:
   277 00000103 6641                    	inc	cx ; previous 400-y
   278 00000105 6639C8                  	cmp	ax, cx
   279 00000108 7635                    	jna	short _dsw_5
   280                                  	; ebx = x
   281                                  	; eax = 400 - y
   282 0000010A E81A000000              	call	_dsw_4
   283 0000010F EBF2                    	jmp	short _dsw_1
   284                                  _dsw_2:
   285 00000111 50                      	push	eax
   286 00000112 E85F000000              	call	getpixeloffset
   287 00000117 AB                      	stosd
   288 00000118 58                      	pop	eax
   289 00000119 45                      	inc	ebp ; increase pixel count
   290 0000011A C3                      	retn
   291                                  _dsw_3:
   292 0000011B 6649                    	dec	cx ; previous 400-y
   293 0000011D 6639C8                  	cmp	ax, cx
   294 00000120 731D                    	jnb	short _dsw_5
   295                                  	; ebx = x
   296                                  	; eax = 400 - y
   297 00000122 E802000000              	call	_dsw_4
   298 00000127 EBF2                    	jmp	short _dsw_3
   299                                  _dsw_4:
   300 00000129 53                      	push	ebx
   301 0000012A 8B1D[70070000]          	mov	ebx, [prevx]
   302 00000130 91                      	xchg	eax, ecx ; [prevy]
   303 00000131 E8DBFFFFFF              	call	_dsw_2
   304 00000136 91                      	xchg	ecx, eax
   305 00000137 5B                      	pop	ebx
   306 00000138 FF05[70070000]          	inc	dword [prevx]
   307 0000013E C3                      	retn
   308                                  _dsw_5:
   309 0000013F 891D[70070000]          	mov	[prevx], ebx ; previous x value 
   310 00000145 89C1                    	mov	ecx, eax ; previous 400-y value
   311 00000147 E8C5FFFFFF              	call	_dsw_2
   312                                  
   313                                  	;;;; end of curve continuity code
   314                                  
   315 0000014C E825000000              	call	getpixeloffset
   316 00000151 AB                      	stosd
   317 00000152 45                      	inc	ebp ; increase pixel count	
   318                                  	
   319 00000153 43                      	inc	ebx
   320 00000154 81FB80020000            	cmp	ebx, 640
   321 0000015A 729C                    	jb	short _dsw_0
   322                                  
   323 0000015C BE[74070000]            	mov	esi, _fx
   324                                  	;mov	edx, ebp
   325                                  	;
   326                                  	; edx = pixel count
   327                                  	; esi = user's single color pixel buffer address
   328                                  	sys	_video, 0305h, [color], ebp
    65                              <1> 
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1>  %if %0 >= 2
    70 00000161 BB05030000          <1>  mov ebx, %2
    71                              <1>  %if %0 >= 3
    72 00000166 8B0D[6C070000]      <1>  mov ecx, %3
    73                              <1>  %if %0 = 4
    74 0000016C 89EA                <1>  mov edx, %4
    75                              <1>  %endif
    76                              <1>  %endif
    77                              <1>  %endif
    78 0000016E B81F000000          <1>  mov eax, %1
    79                              <1> 
    80 00000173 CD40                <1>  int 40h
   329                                  
   330 00000175 C3                      	retn
   331                                  	
   332                                  getpixeloffset:
   333                                  	; ebx = x position
   334                                  	; eax = 400 - y position
   335 00000176 BAB7010000              	mov	edx, 439
   336 0000017B 29C2                    	sub	edx, eax ; convert row position from 400-y
   337                                  	; row = (400-y)+39
   338 0000017D B8000A0000              	mov	eax, 640*4 ; screen width
   339 00000182 F7E2                    	mul	edx
   340 00000184 53                      	push	ebx
   341 00000185 C1E302                  	shl	ebx, 2
   342 00000188 01D8                     	add	eax, ebx ; add x to y*640
   343 0000018A 5B                      	pop	ebx
   344                                  	; eax = pixel offset on display page
   345 0000018B C3                      	retn
   346                                  beep:
   347                                  	; call beep function (16/64 second, 886Hz)
   348                                  	sys	_audio, 16, 1331
    65                              <1> 
    66                              <1> 
    67                              <1> 
    68                              <1> 
    69                              <1>  %if %0 >= 2
    70 0000018C BB10000000          <1>  mov ebx, %2
    71                              <1>  %if %0 >= 3
    72 00000191 B933050000          <1>  mov ecx, %3
    73                              <1>  %if %0 = 4
    74                              <1>  mov edx, %4
    75                              <1>  %endif
    76                              <1>  %endif
    77                              <1>  %endif
    78 00000196 B820000000          <1>  mov eax, %1
    79                              <1> 
    80 0000019B CD40                <1>  int 40h
   349 0000019D C3                      	retn
   350                                  
   351                                  set_text_mode:
   352 0000019E 30E4                    	xor    ah, ah
   353 000001A0 B003                    	mov    al, 3                        
   354                                   	;int   10h ; al = 03h text mode, int 10 video
   355 000001A2 CD31                    	int    31h ; TRDOS 386 - Video interrupt
   356 000001A4 C3                      	retn
   357                                  		
   358                                  program_msg:
   359 000001A5 5452444F5320333836-     	db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Draw Sine Wave"
   359 000001AE 2076322E302E33202D-
   359 000001B7 202827737973766964-
   359 000001C0 656F27292054657374-
   359 000001C9 2050726F6772616D20-
   359 000001D2 2D2044726177205369-
   359 000001DB 6E652057617665     
   360 000001E2 0D0A                    	db 0Dh, 0Ah
   361 000001E4 6279204572646F6761-     	db "by Erdogan Tan - 07/03/2021"
   361 000001ED 6E2054616E202D2030-
   361 000001F6 372F30332F32303231 
   362                                  	;db 0Dh, 0Ah, 0
   363 000001FF 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah
   364                                  
   365 00000203 557365205350414345-     	db "Use SPACE,ENTER,'+','-' keys to change COLOR .."		
   365 0000020C 2C454E5445522C272B-
   365 00000215 272C272D27206B6579-
   365 0000021E 7320746F206368616E-
   365 00000227 676520434F4C4F5220-
   365 00000230 2E2E               
   366 00000232 0D0A                    	db 0Dh, 0Ah
   367 00000234 507265737320455343-     	db "Press ESC to exit .."
   367 0000023D 20746F206578697420-
   367 00000246 2E2E               
   368 00000248 0D0A                    	db 0Dh, 0Ah
   369 0000024A 0D0A                    	db 0Dh, 0Ah
   370 0000024C 507265737320616E79-     	db "Press any key to continue .."
   370 00000255 206B657920746F2063-
   370 0000025E 6F6E74696E7565202E-
   370 00000267 2E                 
   371                                  nextline:
   372 00000268 0D0A00                  	db 0Dh, 0Ah, 0
   373                                  
   374                                  sinustable: ; sine wave table (x=0 to 639, y= +200 to -200)
   375                                  	; 19/02/2021
   376                                  	; https://daycounter.com/Calculators/Sine-Generator-Calculator2.phtml
   377                                  	; 640x400 (x= 0 to 639, y = 0 to 399)
   378 0000026B C800C900CB00CD00CF-     	dw 200,201,203,205,207,209,211,213,215,217,219,221,223,225,227,229
   378 00000274 00D100D300D500D700-
   378 0000027D D900DB00DD00DF00E1-
   378 00000286 00E300E500         
   379 0000028B E700E900EB00EC00EE-     	dw 231,233,235,236,238,240,242,244,246,248,250,252,254,256,257,259
   379 00000294 00F000F200F400F600-
   379 0000029D F800FA00FC00FE0000-
   379 000002A6 0101010301         
   380 000002AB 0501070109010B010D-     	dw 261,263,265,267,269,270,272,274,276,278,279,281,283,285,287,288
   380 000002B4 010E01100112011401-
   380 000002BD 1601170119011B011D-
   380 000002C6 011F012001         
   381 000002CB 220124012601270129-     	dw 290,292,294,295,297,299,300,302,304,305,307,309,310,312,314,315
   381 000002D4 012B012C012E013001-
   381 000002DD 310133013501360138-
   381 000002E6 013A013B01         
   382 000002EB 3D013E014001410143-     	dw 317,318,320,321,323,325,326,328,329,331,332,333,335,336,338,339
   382 000002F4 014501460148014901-
   382 000002FD 4B014C014D014F0150-
   382 00000306 0152015301         
   383 0000030B 55015601570159015A-     	dw 341,342,343,345,346,347,349,350,351,352,354,355,356,357,359,360
   383 00000314 015B015D015E015F01-
   383 0000031D 600162016301640165-
   383 00000326 0167016801         
   384 0000032B 69016A016B016C016D-     	dw 361,362,363,364,365,366,368,369,370,371,372,373,374,375,375,376
   384 00000334 016E01700171017201-
   384 0000033D 730174017501760177-
   384 00000346 0177017801         
   385 0000034B 79017A017B017C017D-     	dw 377,378,379,380,381,381,382,383,384,385,385,386,387,387,388,389
   385 00000354 017D017E017F018001-
   385 0000035D 810181018201830183-
   385 00000366 0184018501         
   386 0000036B 850186018601870188-     	dw 389,390,390,391,392,392,393,393,393,394,394,395,395,396,396,396
   386 00000374 018801890189018901-
   386 0000037D 8A018A018B018B018C-
   386 00000386 018C018C01         
   387 0000038B 8D018D018D018D018E-     	dw 397,397,397,397,398,398,398,398,398,399,399,399,399,399,399,399
   387 00000394 018E018E018E018E01-
   387 0000039D 8F018F018F018F018F-
   387 000003A6 018F018F01         
   388 000003AB 8F018F018F018F018F-     	dw 399,399,399,399,399,399,399,399,398,398,398,398,398,397,397,397
   388 000003B4 018F018F018F018E01-
   388 000003BD 8E018E018E018E018D-
   388 000003C6 018D018D01         
   389 000003CB 8D018C018C018C018B-     	dw 397,396,396,396,395,395,394,394,393,393,393,392,392,391,390,390
   389 000003D4 018B018A018A018901-
   389 000003DD 890189018801880187-
   389 000003E6 0186018601         
   390 000003EB 850185018401830183-     	dw 389,389,388,387,387,386,385,385,384,383,382,381,381,380,379,378
   390 000003F4 018201810181018001-
   390 000003FD 7F017E017D017D017C-
   390 00000406 017B017A01         
   391 0000040B 790178017701770176-     	dw 377,376,375,375,374,373,372,371,370,369,368,366,365,364,363,362
   391 00000414 017501740173017201-
   391 0000041D 710170016E016D016C-
   391 00000426 016B016A01         
   392 0000042B 690168016701650164-     	dw 361,360,359,357,356,355,354,352,351,350,349,347,346,345,343,342
   392 00000434 016301620160015F01-
   392 0000043D 5E015D015B015A0159-
   392 00000446 0157015601         
   393 0000044B 55015301520150014F-     	dw 341,339,338,336,335,333,332,331,329,328,326,325,323,321,320,318
   393 00000454 014D014C014B014901-
   393 0000045D 480146014501430141-
   393 00000466 0140013E01         
   394 0000046B 3D013B013A01380136-     	dw 317,315,314,312,310,309,307,305,304,302,300,299,297,295,294,292
   394 00000474 013501330131013001-
   394 0000047D 2E012C012B01290127-
   394 00000486 0126012401         
   395 0000048B 220120011F011D011B-     	dw 290,288,287,285,283,281,279,278,276,274,272,270,269,267,265,263
   395 00000494 011901170116011401-
   395 0000049D 120110010E010D010B-
   395 000004A6 0109010701         
   396 000004AB 0501030101010001FE-     	dw 261,259,257,256,254,252,250,248,246,244,242,240,238,236,235,233
   396 000004B4 00FC00FA00F800F600-
   396 000004BD F400F200F000EE00EC-
   396 000004C6 00EB00E900         
   397 000004CB E700E500E300E100DF-     	dw 231,229,227,225,223,221,219,217,215,213,211,209,207,205,203,201
   397 000004D4 00DD00DB00D900D700-
   397 000004DD D500D300D100CF00CD-
   397 000004E6 00CB00C900         
   398 000004EB C800C600C400C200C0-     	dw 200,198,196,194,192,190,188,186,184,182,180,178,176,174,172,170
   398 000004F4 00BE00BC00BA00B800-
   398 000004FD B600B400B200B000AE-
   398 00000506 00AC00AA00         
   399 0000050B A800A600A400A300A1-     	dw 168,166,164,163,161,159,157,155,153,151,149,147,145,143,142,140
   399 00000514 009F009D009B009900-
   399 0000051D 97009500930091008F-
   399 00000526 008E008C00         
   400 0000052B 8A0088008600840082-     	dw 138,136,134,132,130,129,127,125,123,121,120,118,116,114,112,111
   400 00000534 0081007F007D007B00-
   400 0000053D 790078007600740072-
   400 00000546 0070006F00         
   401 0000054B 6D006B006900680066-     	dw 109,107,105,104,102,100,99,97,95,94,92,90,89,87,85,84
   401 00000554 006400630061005F00-
   401 0000055D 5E005C005A00590057-
   401 00000566 0055005400         
   402 0000056B 520051004F004E004C-     	dw 82,81,79,78,76,74,73,71,70,68,67,66,64,63,61,60
   402 00000574 004A00490047004600-
   402 0000057D 44004300420040003F-
   402 00000586 003D003C00         
   403 0000058B 3A0039003800360035-     	dw 58,57,56,54,53,52,50,49,48,47,45,44,43,42,40,39
   403 00000594 003400320031003000-
   403 0000059D 2F002D002C002B002A-
   403 000005A6 0028002700         
   404 000005AB 260025002400230022-     	dw 38,37,36,35,34,33,31,30,29,28,27,26,25,24,24,23
   404 000005B4 0021001F001E001D00-
   404 000005BD 1C001B001A00190018-
   404 000005C6 0018001700         
   405 000005CB 160015001400130012-     	dw 22,21,20,19,18,18,17,16,15,14,14,13,12,12,11,10
   405 000005D4 001200110010000F00-
   405 000005DD 0E000E000D000C000C-
   405 000005E6 000B000A00         
   406 000005EB 0A0009000900080007-     	dw 10,9,9,8,7,7,6,6,6,5,5,4,4,3,3,3
   406 000005F4 000700060006000600-
   406 000005FD 050005000400040003-
   406 00000606 0003000300         
   407 0000060B 020002000200020001-     	dw 2,2,2,2,1,1,1,1,1,0,0,0,0,0,0,0
   407 00000614 000100010001000100-
   407 0000061D 000000000000000000-
   407 00000626 0000000000         
   408 0000062B 000000000000000000-     	dw 0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2
   408 00000634 000000000000000100-
   408 0000063D 010001000100010002-
   408 00000646 0002000200         
   409 0000064B 020003000300030004-     	dw 2,3,3,3,4,4,5,5,6,6,6,7,7,8,9,9
   409 00000654 000400050005000600-
   409 0000065D 060006000700070008-
   409 00000666 0009000900         
   410 0000066B 0A000A000B000C000C-     	dw 10,10,11,12,12,13,14,14,15,16,17,18,18,19,20,21
   410 00000674 000D000E000E000F00-
   410 0000067D 100011001200120013-
   410 00000686 0014001500         
   411 0000068B 160017001800180019-     	dw 22,23,24,24,25,26,27,28,29,30,31,33,34,35,36,37
   411 00000694 001A001B001C001D00-
   411 0000069D 1E001F002100220023-
   411 000006A6 0024002500         
   412 000006AB 2600270028002A002B-     	dw 38,39,40,42,43,44,45,47,48,49,50,52,53,54,56,57
   412 000006B4 002C002D002F003000-
   412 000006BD 310032003400350036-
   412 000006C6 0038003900         
   413 000006CB 3A003C003D003F0040-     	dw 58,60,61,63,64,66,67,68,70,71,73,74,76,78,79,81
   413 000006D4 004200430044004600-
   413 000006DD 470049004A004C004E-
   413 000006E6 004F005100         
   414 000006EB 520054005500570059-     	dw 82,84,85,87,89,90,92,94,95,97,99,100,102,104,105,107
   414 000006F4 005A005C005E005F00-
   414 000006FD 610063006400660068-
   414 00000706 0069006B00         
   415 0000070B 6D006F007000720074-     	dw 109,111,112,114,116,118,120,121,123,125,127,129,130,132,134,136
   415 00000714 007600780079007B00-
   415 0000071D 7D007F008100820084-
   415 00000726 0086008800         
   416 0000072B 8A008C008E008F0091-     	dw 138,140,142,143,145,147,149,151,153,155,157,159,161,163,164,166
   416 00000734 009300950097009900-
   416 0000073D 9B009D009F00A100A3-
   416 00000746 00A400A600         
   417 0000074B A800AA00AC00AE00B0-     	dw 168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198
   417 00000754 00B200B400B600B800-
   417 0000075D BA00BC00BE00C000C2-
   417 00000766 00C400C600         
   418                                  
   419                                  bss:
   420                                  
   421                                  ABSOLUTE bss
   422                                  
   423 0000076B ??                      alignb 4
   424                                  
   425 0000076C ????????                color:	resd 1
   426 00000770 ????????                prevx:	resd 1
   427                                  ;prevy:	resd 1
   428                                  
   429                                  bss_start:
   430 00000774 <res A00h>              _fx:	resd 640 ; for every X values from 0 to 639
   431 00001174 <res 1600h>             	resd 2048-640 ; used for repetitive x values for curve continuity
   432                                  bss_end:
