     1                                  ; ****************************************************************************
     2                                  ; sinus4.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests
     3                                  ; ----------------------------------------------------------------------------
     4                                  ;
     5                                  ; 19/02/2021
     6                                  ;
     7                                  ; ****************************************************************************
     8                                  ; nasm sinus4.s -l sinus4.txt -o SINUS4.PRG -Z error.txt
     9                                  ; (modified from 'sinus2.s', 19/02/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[00070000]            	mov	edi, bss_start
    92 00000005 B900080000              	mov	ecx, (bss_end - bss_start)/4
    93                                  	;xor	eax, eax
    94 0000000A F3AB                    	rep	stosd
    95                                  
    96                                  	; program message
    97 0000000C BE[2F010000]            	mov	esi, program_msg
    98 00000011 E8A2000000              	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                                  	; Set Video Mode to 101h ; 640x480, 256 colors
   106                                  	sys	_video, 08FFh, 101h
   106                              <1> 
   106                              <1> 
   106                              <1> 
   106                              <1> 
   106                              <1>  %if %0 >= 2
   106 0000001A BBFF080000          <1>  mov ebx, %2
   106                              <1>  %if %0 >= 3
   106 0000001F B901010000          <1>  mov ecx, %3
   106                              <1>  %if %0 = 4
   106                              <1>  mov edx, %4
   106                              <1>  %endif
   106                              <1>  %endif
   106                              <1>  %endif
   106 00000024 B81F000000          <1>  mov eax, %1
   106                              <1> 
   106 00000029 CD40                <1>  int 40h
   107 0000002B 09C0                    	or	eax, eax
   108                                  	;jz	short terminate
   109                                  	;mov	[LFB_ADDR], edx ; pointer to LFB info table/structure
   110 0000002D 750E                    	jnz	short set_vesa_mode_101h_ok
   111                                  
   112                                  terminate:
   113 0000002F E8F4000000              	call	set_text_mode
   114                                  	sys	_exit
   114                              <1> 
   114                              <1> 
   114                              <1> 
   114                              <1> 
   114                              <1>  %if %0 >= 2
   114                              <1>  mov ebx, %2
   114                              <1>  %if %0 >= 3
   114                              <1>  mov ecx, %3
   114                              <1>  %if %0 = 4
   114                              <1>  mov edx, %4
   114                              <1>  %endif
   114                              <1>  %endif
   114                              <1>  %endif
   114 00000034 B801000000          <1>  mov eax, %1
   114                              <1> 
   114 00000039 CD40                <1>  int 40h
   115                                  halt:
   116 0000003B EBFE                    	jmp	short halt
   117                                  
   118                                  set_vesa_mode_101h_ok:
   119 0000003D C605[F8060000]1C        	mov	byte [color], 28 ; initial pixel color
   120                                  _0:
   121 00000044 E880000000              	call	drawsinewave
   122                                  waitforkey:
   123                                  	;mov	ah, 1
   124                                  	;int	32h
   125                                  	;jz	short getkey
   126                                  	;inc	word [counter]
   127                                  	;nop
   128                                  	;nop
   129                                  	;nop
   130                                  	;jmp	short waitforkey
   131                                  getkey:
   132 00000049 30E4                    	xor	ah, ah
   133 0000004B CD32                    	int	32h
   134                                  
   135 0000004D 663D032E                	cmp	ax, 2E03h
   136 00000051 74DC                    	je	short terminate
   137 00000053 3C1B                    	cmp	al, 1Bh ; ESC key
   138 00000055 74D8                    	je	short terminate	
   139                                  
   140 00000057 3C2B                    	cmp	al, '+'
   141 00000059 7508                    	jne	short _1
   142                                  	
   143 0000005B FE05[F8060000]          	inc	byte [color]
   144 00000061 EBE1                    	jmp	short _0
   145                                  _1:
   146 00000063 3C2D                    	cmp	al, '-'
   147 00000065 7508                    	jne	short _2
   148                                  
   149 00000067 FE0D[F8060000]          	dec	byte [color]
   150 0000006D EBD5                    	jmp	short _0
   151                                  _2:
   152 0000006F 3C20                    	cmp	al, 20h  ; space
   153 00000071 7509                    	jne	short _3
   154 00000073 8005[F8060000]08        	add	byte [color], 8 	
   155 0000007A EBC8                    	jmp	short _0
   156                                  _3:
   157 0000007C 80FC4B                  	cmp	ah, 4Bh
   158 0000007F 7507                    	jne	short _5
   159                                  	; left arrow
   160                                  _4:
   161 00000081 E890000000              	call	beep
   162 00000086 EBC1                    	jmp	waitforkey
   163                                  _5:
   164 00000088 80FC4D                  	cmp	ah, 4Dh
   165 0000008B 7502                    	jne	short _6
   166                                  
   167                                  	; right arrow
   168 0000008D EBF2                    	jmp	short _4
   169                                  _6:
   170 0000008F 80FC50                  	cmp	ah, 50h
   171 00000092 7502                    	jne	short _7
   172                                  	; down arrow
   173 00000094 EBEB                    	jmp	short _4
   174                                  _7:
   175 00000096 80FC48                  	cmp	ah, 48h
   176 00000099 7502                    	jne	short _8
   177                                  	; up arrow
   178 0000009B EBE4                    	jmp	short _4
   179                                  _8:	
   180 0000009D 663D0D1C                	cmp	ax, 1C0Dh
   181 000000A1 750E                    	jne	short _9
   182 000000A3 E86E000000              	call	beep
   183 000000A8 8005[F8060000]04        	add	byte [color], 4
   184 000000AF EB93                    	jmp	short _0
   185                                  _9:	
   186 000000B1 E860000000              	call	beep
   187 000000B6 EB91                    	jmp	waitforkey
   188                                  
   189                                  print_msg:
   190 000000B8 B40E                    	mov	ah, 0Eh
   191 000000BA BB07000000              	mov	ebx, 7
   192                                  	;mov	bl, 7 ; char attribute & color
   193                                  p_next_chr:
   194 000000BF AC                      	lodsb
   195 000000C0 08C0                    	or	al, al
   196 000000C2 7404                    	jz	short p_retn ; retn	
   197 000000C4 CD31                    	int	31h
   198 000000C6 EBF7                    	jmp	short p_next_chr
   199                                  p_retn:
   200 000000C8 C3                      	retn
   201                                  
   202                                  drawsinewave:
   203                                  	; INPUT:
   204                                  	;	sinustable
   205                                  	;
   206                                  	; Modified registers: esi, edi, eax, ecx, ebx, edx
   207                                  
   208                                  	; fill _fx table by using sine wave table
   209                                  	; x = 0 to 639
   210                                  	; y = +200 to -200
   211                                  	; +200 --> 399 -> screen row position = (400-399)+39 = 40
   212                                  	; -200 --> 0 -> screen row position = (400-0)+39 = 439
   213                                  
   214 000000C9 BE[F5010000]            	mov	esi, sinustable
   215 000000CE BF[00070000]            	mov	edi, _fx
   216                                  	;xor	eax, eax
   217 000000D3 29DB                    	sub	ebx, ebx ; 0 ; x 
   218 000000D5 31ED                    	xor	ebp, ebp ; pixel count
   219                                  	;lodsw
   220                                  	;jmp	short _dsw_5
   221                                  _dsw_0:
   222 000000D7 31C0                    	xor	eax, eax	
   223 000000D9 66AD                    	lodsw	; ax = 400-y value
   224                                  	;;
   225                                  	;cmp	ax, cx ; [prevy]
   226                                  	;je	short _dsw_5
   227                                  	;jb	short _dsw_3
   228                                  ;_dsw_1:
   229                                  	;inc	cx ; previous 400-y
   230                                  	;cmp	ax, cx
   231                                  	;jna	short _dsw_5
   232                                  	;; ebx = x
   233                                  	;; eax = 400 - y
   234                                  	;call	_dsw_4
   235                                  	;jmp	short _dsw_1
   236                                  ;_dsw_2:
   237                                  	;push	eax
   238                                  	;call	getpixeloffset
   239                                  	;stosd
   240                                  	;pop	eax
   241                                  	;inc	ebp ; increase pixel count
   242                                  	;retn
   243                                  ;_dsw_3:
   244                                  	;dec	cx ; previous 400-y
   245                                  	;cmp	ax, cx
   246                                  	;jnb	short _dsw_5
   247                                  	;; ebx = x
   248                                  	;; eax = 400 - y
   249                                  	;call	_dsw_4
   250                                  	;jmp	short _dsw_3
   251                                  ;_dsw_4:
   252                                  	;push	ebx
   253                                  	;mov	ebx, [prevx]
   254                                  	;xchg	eax, ecx ; [prevy]
   255                                  	;call	_dsw_2
   256                                  	;xchg	ecx, eax
   257                                  	;pop	ebx
   258                                  	;inc	dword [prevx]
   259                                  	;retn
   260                                  ;_dsw_5:
   261                                  	;mov	[prevx], ebx ; previous x value 
   262                                  	;mov	ecx, eax ; previous 400-y value
   263                                  	;call	_dsw_2
   264                                  
   265 000000DB E825000000              	call	getpixeloffset
   266 000000E0 AB                      	stosd
   267 000000E1 45                      	inc	ebp ; increase pixel count	
   268                                  	
   269 000000E2 43                      	inc	ebx
   270 000000E3 81FB80020000            	cmp	ebx, 640
   271 000000E9 72EC                    	jb	short _dsw_0
   272                                  
   273 000000EB BE[00070000]            	mov	esi, _fx
   274                                  	;mov	edx, ebp
   275                                  	;
   276                                  	; edx = pixel count
   277                                  	; esi = user's single color pixel buffer address
   278                                  	sys	_video, 0305h, [color], ebp
   278                              <1> 
   278                              <1> 
   278                              <1> 
   278                              <1> 
   278                              <1>  %if %0 >= 2
   278 000000F0 BB05030000          <1>  mov ebx, %2
   278                              <1>  %if %0 >= 3
   278 000000F5 8B0D[F8060000]      <1>  mov ecx, %3
   278                              <1>  %if %0 = 4
   278 000000FB 89EA                <1>  mov edx, %4
   278                              <1>  %endif
   278                              <1>  %endif
   278                              <1>  %endif
   278 000000FD B81F000000          <1>  mov eax, %1
   278                              <1> 
   278 00000102 CD40                <1>  int 40h
   279                                  
   280 00000104 C3                      	retn
   281                                  	
   282                                  getpixeloffset:
   283                                  	; ebx = x position
   284                                  	; eax = 400 - y position
   285 00000105 BAB7010000              	mov	edx, 439
   286 0000010A 29C2                    	sub	edx, eax ; convert row position from 400-y
   287                                  	; row = (400-y)+39
   288 0000010C B880020000              	mov	eax, 640 ; screen width
   289 00000111 F7E2                    	mul	edx
   290 00000113 01D8                     	add	eax, ebx ; add x to y*640
   291                                  	; eax = pixel offset on display page
   292 00000115 C3                      	retn
   293                                  beep:
   294                                  	; call beep function (16/64 second, 886Hz)
   295                                  	sys	_audio, 16, 1331
   295                              <1> 
   295                              <1> 
   295                              <1> 
   295                              <1> 
   295                              <1>  %if %0 >= 2
   295 00000116 BB10000000          <1>  mov ebx, %2
   295                              <1>  %if %0 >= 3
   295 0000011B B933050000          <1>  mov ecx, %3
   295                              <1>  %if %0 = 4
   295                              <1>  mov edx, %4
   295                              <1>  %endif
   295                              <1>  %endif
   295                              <1>  %endif
   295 00000120 B820000000          <1>  mov eax, %1
   295                              <1> 
   295 00000125 CD40                <1>  int 40h
   296 00000127 C3                      	retn
   297                                  
   298                                  set_text_mode:
   299 00000128 30E4                    	xor    ah, ah
   300 0000012A B003                    	mov    al, 3                        
   301                                   	;int   10h ; al = 03h text mode, int 10 video
   302 0000012C CD31                    	int    31h ; TRDOS 386 - Video interrupt
   303 0000012E C3                      	retn
   304                                  		
   305                                  program_msg:
   306 0000012F 5452444F5320333836-     	db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Draw Sine Wave"
   306 00000138 2076322E302E33202D-
   306 00000141 202827737973766964-
   306 0000014A 656F27292054657374-
   306 00000153 2050726F6772616D20-
   306 0000015C 2D2044726177205369-
   306 00000165 6E652057617665     
   307 0000016C 0D0A                    	db 0Dh, 0Ah
   308 0000016E 6279204572646F6761-     	db "by Erdogan Tan - 19/02/2021"
   308 00000177 6E2054616E202D2031-
   308 00000180 392F30322F32303231 
   309                                  	;db 0Dh, 0Ah, 0
   310 00000189 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah
   311                                  
   312 0000018D 557365205350414345-     	db "Use SPACE,ENTER,'+','-' keys to change COLOR .."		
   312 00000196 2C454E5445522C272B-
   312 0000019F 272C272D27206B6579-
   312 000001A8 7320746F206368616E-
   312 000001B1 676520434F4C4F5220-
   312 000001BA 2E2E               
   313 000001BC 0D0A                    	db 0Dh, 0Ah
   314 000001BE 507265737320455343-     	db "Press ESC to exit .."
   314 000001C7 20746F206578697420-
   314 000001D0 2E2E               
   315 000001D2 0D0A                    	db 0Dh, 0Ah
   316 000001D4 0D0A                    	db 0Dh, 0Ah
   317 000001D6 507265737320616E79-     	db "Press any key to continue .."
   317 000001DF 206B657920746F2063-
   317 000001E8 6F6E74696E7565202E-
   317 000001F1 2E                 
   318                                  nextline:
   319 000001F2 0D0A00                  	db 0Dh, 0Ah, 0
   320                                  
   321                                  sinustable: ; sine wave table (x=0 to 639, y= +200 to -200)
   322                                  	; 19/02/2021
   323                                  	; https://daycounter.com/Calculators/Sine-Generator-Calculator2.phtml
   324                                  	; 640x400 (x= 0 to 639, y = 0 to 399)
   325 000001F5 C800C900CB00CD00CF-     	dw 200,201,203,205,207,209,211,213,215,217,219,221,223,225,227,229
   325 000001FE 00D100D300D500D700-
   325 00000207 D900DB00DD00DF00E1-
   325 00000210 00E300E500         
   326 00000215 E700E900EB00EC00EE-     	dw 231,233,235,236,238,240,242,244,246,248,250,252,254,256,257,259
   326 0000021E 00F000F200F400F600-
   326 00000227 F800FA00FC00FE0000-
   326 00000230 0101010301         
   327 00000235 0501070109010B010D-     	dw 261,263,265,267,269,270,272,274,276,278,279,281,283,285,287,288
   327 0000023E 010E01100112011401-
   327 00000247 1601170119011B011D-
   327 00000250 011F012001         
   328 00000255 220124012601270129-     	dw 290,292,294,295,297,299,300,302,304,305,307,309,310,312,314,315
   328 0000025E 012B012C012E013001-
   328 00000267 310133013501360138-
   328 00000270 013A013B01         
   329 00000275 3D013E014001410143-     	dw 317,318,320,321,323,325,326,328,329,331,332,333,335,336,338,339
   329 0000027E 014501460148014901-
   329 00000287 4B014C014D014F0150-
   329 00000290 0152015301         
   330 00000295 55015601570159015A-     	dw 341,342,343,345,346,347,349,350,351,352,354,355,356,357,359,360
   330 0000029E 015B015D015E015F01-
   330 000002A7 600162016301640165-
   330 000002B0 0167016801         
   331 000002B5 69016A016B016C016D-     	dw 361,362,363,364,365,366,368,369,370,371,372,373,374,375,375,376
   331 000002BE 016E01700171017201-
   331 000002C7 730174017501760177-
   331 000002D0 0177017801         
   332 000002D5 79017A017B017C017D-     	dw 377,378,379,380,381,381,382,383,384,385,385,386,387,387,388,389
   332 000002DE 017D017E017F018001-
   332 000002E7 810181018201830183-
   332 000002F0 0184018501         
   333 000002F5 850186018601870188-     	dw 389,390,390,391,392,392,393,393,393,394,394,395,395,396,396,396
   333 000002FE 018801890189018901-
   333 00000307 8A018A018B018B018C-
   333 00000310 018C018C01         
   334 00000315 8D018D018D018D018E-     	dw 397,397,397,397,398,398,398,398,398,399,399,399,399,399,399,399
   334 0000031E 018E018E018E018E01-
   334 00000327 8F018F018F018F018F-
   334 00000330 018F018F01         
   335 00000335 8F018F018F018F018F-     	dw 399,399,399,399,399,399,399,399,398,398,398,398,398,397,397,397
   335 0000033E 018F018F018F018E01-
   335 00000347 8E018E018E018E018D-
   335 00000350 018D018D01         
   336 00000355 8D018C018C018C018B-     	dw 397,396,396,396,395,395,394,394,393,393,393,392,392,391,390,390
   336 0000035E 018B018A018A018901-
   336 00000367 890189018801880187-
   336 00000370 0186018601         
   337 00000375 850185018401830183-     	dw 389,389,388,387,387,386,385,385,384,383,382,381,381,380,379,378
   337 0000037E 018201810181018001-
   337 00000387 7F017E017D017D017C-
   337 00000390 017B017A01         
   338 00000395 790178017701770176-     	dw 377,376,375,375,374,373,372,371,370,369,368,366,365,364,363,362
   338 0000039E 017501740173017201-
   338 000003A7 710170016E016D016C-
   338 000003B0 016B016A01         
   339 000003B5 690168016701650164-     	dw 361,360,359,357,356,355,354,352,351,350,349,347,346,345,343,342
   339 000003BE 016301620160015F01-
   339 000003C7 5E015D015B015A0159-
   339 000003D0 0157015601         
   340 000003D5 55015301520150014F-     	dw 341,339,338,336,335,333,332,331,329,328,326,325,323,321,320,318
   340 000003DE 014D014C014B014901-
   340 000003E7 480146014501430141-
   340 000003F0 0140013E01         
   341 000003F5 3D013B013A01380136-     	dw 317,315,314,312,310,309,307,305,304,302,300,299,297,295,294,292
   341 000003FE 013501330131013001-
   341 00000407 2E012C012B01290127-
   341 00000410 0126012401         
   342 00000415 220120011F011D011B-     	dw 290,288,287,285,283,281,279,278,276,274,272,270,269,267,265,263
   342 0000041E 011901170116011401-
   342 00000427 120110010E010D010B-
   342 00000430 0109010701         
   343 00000435 0501030101010001FE-     	dw 261,259,257,256,254,252,250,248,246,244,242,240,238,236,235,233
   343 0000043E 00FC00FA00F800F600-
   343 00000447 F400F200F000EE00EC-
   343 00000450 00EB00E900         
   344 00000455 E700E500E300E100DF-     	dw 231,229,227,225,223,221,219,217,215,213,211,209,207,205,203,201
   344 0000045E 00DD00DB00D900D700-
   344 00000467 D500D300D100CF00CD-
   344 00000470 00CB00C900         
   345 00000475 C800C600C400C200C0-     	dw 200,198,196,194,192,190,188,186,184,182,180,178,176,174,172,170
   345 0000047E 00BE00BC00BA00B800-
   345 00000487 B600B400B200B000AE-
   345 00000490 00AC00AA00         
   346 00000495 A800A600A400A300A1-     	dw 168,166,164,163,161,159,157,155,153,151,149,147,145,143,142,140
   346 0000049E 009F009D009B009900-
   346 000004A7 97009500930091008F-
   346 000004B0 008E008C00         
   347 000004B5 8A0088008600840082-     	dw 138,136,134,132,130,129,127,125,123,121,120,118,116,114,112,111
   347 000004BE 0081007F007D007B00-
   347 000004C7 790078007600740072-
   347 000004D0 0070006F00         
   348 000004D5 6D006B006900680066-     	dw 109,107,105,104,102,100,99,97,95,94,92,90,89,87,85,84
   348 000004DE 006400630061005F00-
   348 000004E7 5E005C005A00590057-
   348 000004F0 0055005400         
   349 000004F5 520051004F004E004C-     	dw 82,81,79,78,76,74,73,71,70,68,67,66,64,63,61,60
   349 000004FE 004A00490047004600-
   349 00000507 44004300420040003F-
   349 00000510 003D003C00         
   350 00000515 3A0039003800360035-     	dw 58,57,56,54,53,52,50,49,48,47,45,44,43,42,40,39
   350 0000051E 003400320031003000-
   350 00000527 2F002D002C002B002A-
   350 00000530 0028002700         
   351 00000535 260025002400230022-     	dw 38,37,36,35,34,33,31,30,29,28,27,26,25,24,24,23
   351 0000053E 0021001F001E001D00-
   351 00000547 1C001B001A00190018-
   351 00000550 0018001700         
   352 00000555 160015001400130012-     	dw 22,21,20,19,18,18,17,16,15,14,14,13,12,12,11,10
   352 0000055E 001200110010000F00-
   352 00000567 0E000E000D000C000C-
   352 00000570 000B000A00         
   353 00000575 0A0009000900080007-     	dw 10,9,9,8,7,7,6,6,6,5,5,4,4,3,3,3
   353 0000057E 000700060006000600-
   353 00000587 050005000400040003-
   353 00000590 0003000300         
   354 00000595 020002000200020001-     	dw 2,2,2,2,1,1,1,1,1,0,0,0,0,0,0,0
   354 0000059E 000100010001000100-
   354 000005A7 000000000000000000-
   354 000005B0 0000000000         
   355 000005B5 000000000000000000-     	dw 0,0,0,0,0,0,0,0,1,1,1,1,1,2,2,2
   355 000005BE 000000000000000100-
   355 000005C7 010001000100010002-
   355 000005D0 0002000200         
   356 000005D5 020003000300030004-     	dw 2,3,3,3,4,4,5,5,6,6,6,7,7,8,9,9
   356 000005DE 000400050005000600-
   356 000005E7 060006000700070008-
   356 000005F0 0009000900         
   357 000005F5 0A000A000B000C000C-     	dw 10,10,11,12,12,13,14,14,15,16,17,18,18,19,20,21
   357 000005FE 000D000E000E000F00-
   357 00000607 100011001200120013-
   357 00000610 0014001500         
   358 00000615 160017001800180019-     	dw 22,23,24,24,25,26,27,28,29,30,31,33,34,35,36,37
   358 0000061E 001A001B001C001D00-
   358 00000627 1E001F002100220023-
   358 00000630 0024002500         
   359 00000635 2600270028002A002B-     	dw 38,39,40,42,43,44,45,47,48,49,50,52,53,54,56,57
   359 0000063E 002C002D002F003000-
   359 00000647 310032003400350036-
   359 00000650 0038003900         
   360 00000655 3A003C003D003F0040-     	dw 58,60,61,63,64,66,67,68,70,71,73,74,76,78,79,81
   360 0000065E 004200430044004600-
   360 00000667 470049004A004C004E-
   360 00000670 004F005100         
   361 00000675 520054005500570059-     	dw 82,84,85,87,89,90,92,94,95,97,99,100,102,104,105,107
   361 0000067E 005A005C005E005F00-
   361 00000687 610063006400660068-
   361 00000690 0069006B00         
   362 00000695 6D006F007000720074-     	dw 109,111,112,114,116,118,120,121,123,125,127,129,130,132,134,136
   362 0000069E 007600780079007B00-
   362 000006A7 7D007F008100820084-
   362 000006B0 0086008800         
   363 000006B5 8A008C008E008F0091-     	dw 138,140,142,143,145,147,149,151,153,155,157,159,161,163,164,166
   363 000006BE 009300950097009900-
   363 000006C7 9B009D009F00A100A3-
   363 000006D0 00A400A600         
   364 000006D5 A800AA00AC00AE00B0-     	dw 168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198
   364 000006DE 00B200B400B600B800-
   364 000006E7 BA00BC00BE00C000C2-
   364 000006F0 00C400C600         
   365                                  
   366                                  bss:
   367                                  
   368                                  ABSOLUTE bss
   369                                  
   370 000006F5 <res 00000003>          alignb 4
   371                                  
   372 000006F8 <res 00000004>          color:	resd 1
   373 000006FC <res 00000004>          prevx:	resd 1
   374                                  ;prevy:	resd 1
   375                                  
   376                                  bss_start:
   377 00000700 <res 00000A00>          _fx:	resd 640 ; for every X values from 0 to 639
   378 00001100 <res 00001600>          	resd 2048-640 ; used for repetitive x values for continuity
   379                                  bss_end:
