     1                                  ; ****************************************************************************
     2                                  ; line5.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel w/r tests
     3                                  ; ----------------------------------------------------------------------------
     4                                  ;
     5                                  ; 12/02/2021 (11/02/2021)
     6                                  ;
     7                                  ; ****************************************************************************
     8                                  ; nasm line5.s -l line5.txt -o LINE5.PRG -Z error.txt
     9                                  ; (modified from 'line4.s', 11/02/2021)
    10                                  
    11                                  ; Draw lines by using 'sysvideo' bh=020Eh (VESA VBE mode version)
    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[A4050000]            	mov	edi, bss_start
    92 00000005 B97A000000              	mov	ecx, (bss_end - bss_start)/4
    93                                  	;xor	eax, eax
    94 0000000A F3AB                    	rep	stosd
    95                                  
    96                                  	; program message
    97 0000000C BE[01030000]            	mov	esi, program_msg
    98 00000011 E85E010000              	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
   110 0000002D 750E                    	jnz	short set_vesa_mode_101h_ok
   111                                  
   112                                  terminate:
   113 0000002F E83C020000              	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 B3A2                    	mov	bl, 162 ; color
   120 0000003F 881D[A4050000]          	mov	[color], bl
   121                                  
   122                                  	; initializing position difference parameters
   123                                  	;mov	al, [maxdx]
   124                                  	;shr	al, 1
   125                                  	;mov	[posdx], al
   126                                  	;mov	al, [maxdy]
   127                                  	;shr	al, 1
   128                                  	;mov	[posdy], al
   129                                  
   130                                  next_phase:
   131 00000045 E83B010000              	call	drawrect
   132                                  waitforkey:
   133 0000004A B401                    	mov	ah, 1
   134 0000004C CD32                    	int	32h
   135 0000004E 740C                    	jz	short getkey
   136 00000050 66FF05[AA050000]        	inc	word [counter]
   137 00000057 90                      	nop
   138 00000058 90                      	nop
   139 00000059 90                      	nop
   140 0000005A EBEE                    	jmp	short waitforkey
   141                                  getkey:
   142 0000005C 30E4                    	xor	ah, ah
   143 0000005E CD32                    	int	32h
   144                                  
   145 00000060 663D032E                	cmp	ax, 2E03h
   146 00000064 74C9                    	je	short terminate
   147 00000066 3C1B                    	cmp	al, 1Bh ; ESC key
   148 00000068 74C5                    	je	short terminate	
   149                                  
   150 0000006A 3C2B                    	cmp	al, '+'
   151 0000006C 7517                    	jne	short _0
   152                                  
   153 0000006E FE05[A4050000]          	inc	byte [color]
   154 00000074 803D[A4050000]FF        	cmp	byte [color], 255
   155 0000007B 76C8                    	jna	short next_phase
   156 0000007D FE0D[A4050000]          	dec	byte [color]
   157 00000083 EBC5                    	jmp	short waitforkey
   158                                  _0:
   159 00000085 3C2D                    	cmp	al, '-'
   160 00000087 7510                    	jne	short _1
   161                                  
   162 00000089 FE0D[A4050000]          	dec	byte [color]
   163 0000008F 79B4                    	jns	short next_phase
   164 00000091 FE05[A4050000]          	inc	byte [color]
   165 00000097 EBB1                    	jmp	short waitforkey
   166                                  _1:
   167 00000099 3C20                    	cmp	al, 20h  ; space
   168 0000009B 750E                    	jne	short _3
   169 0000009D 8005[A4050000]08        	add	byte [color], 8 	
   170 000000A4 E8DC000000              	call	drawrect
   171                                  _2:
   172 000000A9 EB9F                    	jmp	short waitforkey
   173                                  _3:
   174 000000AB 80FC4B                  	cmp	ah, 4Bh
   175 000000AE 7509                    	jne	short _4
   176                                  	; left arrow
   177 000000B0 C605[A9050000]01        	mov	byte [direction], 1
   178 000000B7 EB8C                    	jmp	next_phase
   179                                  _4:
   180 000000B9 80FC4D                  	cmp	ah, 4Dh
   181 000000BC 750C                    	jne	short _5
   182                                  	; right arrow
   183 000000BE C605[A9050000]02        	mov	byte [direction], 2
   184 000000C5 E97BFFFFFF              	jmp	next_phase
   185                                  _5:
   186 000000CA 80FC50                  	cmp	ah, 50h
   187 000000CD 750C                    	jne	short _6
   188                                  	; down arrow
   189 000000CF C605[A9050000]03        	mov	byte [direction], 3
   190 000000D6 E96AFFFFFF              	jmp	next_phase
   191                                  _6:
   192 000000DB 80FC48                  	cmp	ah, 48h
   193 000000DE 750C                    	jne	short _7
   194                                  	; up arrow
   195 000000E0 C605[A9050000]04        	mov	byte [direction], 4
   196 000000E7 E959FFFFFF              	jmp	next_phase
   197                                  _7:
   198 000000EC 80FC47                  	cmp	ah, 47h ; Home key
   199 000000EF 750C                    	jne	short _9
   200                                  _8:
   201 000000F1 C605[A8050000]00        	mov	byte [phase], 0
   202 000000F8 E948FFFFFF              	jmp	next_phase
   203                                  _9:
   204 000000FD 80FC4F                  	cmp	ah, 4Fh ; End key
   205 00000100 7509                    	jne	short _10
   206 00000102 C605[A4050000]A2        	mov	byte [color], 162
   207 00000109 EBE6                    	jmp	short _8
   208                                  _10:	
   209 0000010B 663D0D1C                	cmp	ax, 1C0Dh
   210 0000010F 7520                    	jne	short _12
   211                                  	
   212 00000111 FE05[A8050000]          	inc	byte [phase]
   213 00000117 803D[A8050000]05        	cmp	byte [phase], 5
   214 0000011E 7705                    	ja	short _11
   215 00000120 E920FFFFFF              	jmp	next_phase
   216                                  _11:
   217 00000125 C605[A8050000]00        	mov	byte [phase], 0
   218 0000012C E914FFFFFF              	jmp	next_phase
   219                                  _12:	
   220 00000131 80FC49                  	cmp	ah, 49h  ; Page UP
   221 00000134 751A                    	jne	short _14
   222 00000136 FE0D[A8050000]          	dec	byte [phase]
   223 0000013C 790D                    	jns	short _13
   224 0000013E E81B010000              	call	beep
   225 00000143 FE05[A8050000]          	inc	byte [phase]
   226 00000149 EB24                    	jmp	short _15
   227                                  _13:
   228 0000014B E9F5FEFFFF              	jmp	next_phase
   229                                  _14:
   230 00000150 80FC51                  	cmp	ah, 51h  ; Page Down
   231 00000153 751A                    	jne	short _15
   232 00000155 FE05[A8050000]          	inc	byte [phase]
   233 0000015B 803D[A8050000]05        	cmp	byte [phase], 5
   234 00000162 76E7                    	jna	short _13
   235 00000164 E8F5000000              	call	beep
   236 00000169 FE0D[A8050000]          	dec	byte [phase]
   237                                  _15:
   238 0000016F E9D6FEFFFF              	jmp	waitforkey
   239                                  
   240                                  print_msg:
   241 00000174 B40E                    	mov	ah, 0Eh
   242 00000176 BB07000000              	mov	ebx, 7
   243                                  	;mov	bl, 7 ; char attribute & color
   244                                  p_next_chr:
   245 0000017B AC                      	lodsb
   246 0000017C 08C0                    	or	al, al
   247 0000017E 7404                    	jz	short p_retn ; retn	
   248 00000180 CD31                    	int	31h
   249 00000182 EBF7                    	jmp	short p_next_chr
   250                                  p_retn:
   251 00000184 C3                      	retn
   252                                  
   253                                  drawrect:
   254                                  	; draw rectangles
   255 00000185 803D[A8050000]03        	cmp	byte [phase], 3
   256 0000018C 7321                    	jnb	short dr_x
   257 0000018E 30C0                    	xor	al, al
   258 00000190 3805[A9050000]          	cmp	byte [direction], al ; 0
   259 00000196 7617                    	jna	short dr_x
   260 00000198 8605[A4050000]          	xchg	al, [color]
   261 0000019E 50                      	push	eax
   262 0000019F E80B000000              	call	dr_x
   263 000001A4 58                      	pop	eax
   264 000001A5 A2[A4050000]            	mov	[color], al
   265 000001AA E8C8000000              	call	change_positions
   266                                  dr_x:
   267 000001AF 803D[A8050000]00        	cmp	byte [phase], 0
   268 000001B6 772F                    	ja	short dr_2
   269                                  	; position 1 rectangles
   270 000001B8 BE[BC030000]            	mov	esi, positions1
   271 000001BD BF[AC050000]            	mov	edi, rectbuffer1
   272                                  dr_0:
   273 000001C2 B914000000              	mov	ecx, 20 ; 20 lines, 5 rectangles
   274 000001C7 57                      	push	edi 
   275                                  dr_1:
   276 000001C8 AD                      	lodsd
   277 000001C9 AB                      	stosd	; position
   278 000001CA AD                      	lodsd	; 
   279 000001CB AB                      	stosd	; length (and type, h/v)
   280 000001CC E2FA                    	loop	dr_1
   281 000001CE 5E                      	pop	esi
   282                                  
   283                                  	; BL bit 5 = 1 -> write lines via user buffer
   284                                  	sys	_video, 022Eh, [color], 20
   284                              <1> 
   284                              <1> 
   284                              <1> 
   284                              <1> 
   284                              <1>  %if %0 >= 2
   284 000001CF BB2E020000          <1>  mov ebx, %2
   284                              <1>  %if %0 >= 3
   284 000001D4 8B0D[A4050000]      <1>  mov ecx, %3
   284                              <1>  %if %0 = 4
   284 000001DA BA14000000          <1>  mov edx, %4
   284                              <1>  %endif
   284                              <1>  %endif
   284                              <1>  %endif
   284 000001DF B81F000000          <1>  mov eax, %1
   284                              <1> 
   284 000001E4 CD40                <1>  int 40h
   285 000001E6 C3                      	retn
   286                                  dr_2:
   287 000001E7 803D[A8050000]01        	cmp	byte [phase], 1
   288 000001EE 770C                    	ja	short dr_3
   289                                  	; position 2 rectangles
   290 000001F0 BE[5C040000]            	mov	esi, positions2
   291 000001F5 BF[4C060000]            	mov	edi, rectbuffer2
   292 000001FA EBC6                    	jmp	short dr_0
   293                                  dr_3:
   294 000001FC 803D[A8050000]02        	cmp	byte [phase], 2
   295 00000203 770C                    	ja	short dr_4
   296                                  	; position 3 rectangles
   297 00000205 BE[FC040000]            	mov	esi, positions3
   298 0000020A BF[EC060000]            	mov	edi, rectbuffer3
   299 0000020F EBB1                    	jmp	short dr_0
   300                                  dr_4:
   301 00000211 803D[A8050000]03        	cmp	byte [phase], 3
   302 00000218 771C                    	ja	short dr_6
   303                                  	; delete position 1 rectangles
   304 0000021A BE[AC050000]            	mov	esi, rectbuffer1
   305                                  dr_5:
   306                                  	; clear previous positions (by using black color)
   307                                  	; BL bit 5 = 1 -> write lines via user buffer
   308                                  	sys	_video, 022Eh, 0, 20
   308                              <1> 
   308                              <1> 
   308                              <1> 
   308                              <1> 
   308                              <1>  %if %0 >= 2
   308 0000021F BB2E020000          <1>  mov ebx, %2
   308                              <1>  %if %0 >= 3
   308 00000224 B900000000          <1>  mov ecx, %3
   308                              <1>  %if %0 = 4
   308 00000229 BA14000000          <1>  mov edx, %4
   308                              <1>  %endif
   308                              <1>  %endif
   308                              <1>  %endif
   308 0000022E B81F000000          <1>  mov eax, %1
   308                              <1> 
   308 00000233 CD40                <1>  int 40h
   309 00000235 C3                      	retn			
   310                                  dr_6:	  
   311 00000236 803D[A8050000]04        	cmp	byte [phase], 4
   312 0000023D 7707                    	ja	short dr_7
   313                                  	; delete position 2 rectangles
   314 0000023F BE[4C060000]            	mov	esi, rectbuffer2
   315 00000244 EBD9                    	jmp	short dr_5
   316                                  dr_7:
   317 00000246 803D[A8050000]05        	cmp	byte [phase], 5
   318 0000024D 7707                    	ja	short dr_8
   319                                  	; delete position 2 rectangles
   320 0000024F BE[EC060000]            	mov	esi, rectbuffer3
   321 00000254 EBC9                    	jmp	short dr_5
   322                                  dr_8:
   323 00000256 C605[A8050000]00        	mov	byte [phase], 0
   324 0000025D C3                      	retn
   325                                  	
   326                                  beep:
   327                                  	; call beep function (16/64 second, 886Hz)
   328                                  	sys	_audio, 16, 1331
   328                              <1> 
   328                              <1> 
   328                              <1> 
   328                              <1> 
   328                              <1>  %if %0 >= 2
   328 0000025E BB10000000          <1>  mov ebx, %2
   328                              <1>  %if %0 >= 3
   328 00000263 B933050000          <1>  mov ecx, %3
   328                              <1>  %if %0 = 4
   328                              <1>  mov edx, %4
   328                              <1>  %endif
   328                              <1>  %endif
   328                              <1>  %endif
   328 00000268 B820000000          <1>  mov eax, %1
   328                              <1> 
   328 0000026D CD40                <1>  int 40h
   329 0000026F C3                      	retn
   330                                  
   331                                  set_text_mode:
   332 00000270 30E4                    	xor    ah, ah
   333 00000272 B003                    	mov    al, 3                        
   334                                   	;int   10h	; al = 03h text mode, int 10 video
   335 00000274 CD31                    	int    31h ; TRDOS 386 - Video interrupt
   336 00000276 C3                      	retn
   337                                  
   338                                  change_positions:
   339 00000277 B93C000000              	mov	ecx, 60 ; 60 lines, 15 rectangles
   340 0000027C 803D[A9050000]02        	cmp	byte [direction], 2
   341 00000283 7749                    	ja	short chgpos3 ; scroll down/up
   342 00000285 8A25[9C050000]          	mov	ah, [maxdx]
   343 0000028B A0[A0050000]            	mov	al, [posdx]
   344 00000290 BE[BC030000]            	mov	esi, positions1 ; start address 
   345 00000295 7422                    	je	short chgpos1 ; slide to right
   346                                  	; slide to left
   347 00000297 20C0                    	and	al, al
   348 00000299 7611                    	jna	short chgpos_beep
   349 0000029B FEC8                    	dec	al
   350 0000029D A2[A0050000]            	mov	[posdx], al
   351                                  	; (horizontal positions) -L-
   352                                  chgpos0:
   353 000002A2 66FF0E                  	dec	word [esi]
   354 000002A5 83C608                  	add	esi, 8
   355 000002A8 E2F8                    	loop	chgpos0
   356 000002AA EB05                    	jmp	short chgpos_retn
   357                                  chgpos_beep:
   358 000002AC E8ADFFFFFF              	call	beep
   359                                  chgpos_retn:
   360 000002B1 C605[A9050000]00        	mov	byte [direction], 0
   361 000002B8 C3                      	retn
   362                                  chgpos1:
   363 000002B9 38E0                    	cmp	al, ah ; right (dx) limit ?
   364 000002BB 73EF                    	jnb	short chgpos_beep
   365 000002BD FEC0                    	inc	al
   366 000002BF A2[A0050000]            	mov	[posdx], al
   367                                  	; (horizontal positions) -R-
   368                                  chgpos2:
   369 000002C4 66FF06                  	inc	word [esi]
   370 000002C7 83C608                  	add	esi, 8
   371 000002CA E2F8                    	loop	chgpos2
   372 000002CC EBE3                    	jmp	short chgpos_retn
   373                                  chgpos3:
   374 000002CE 8A25[9E050000]          	mov	ah, [maxdy]
   375 000002D4 A0[A2050000]            	mov	al, [posdy]
   376 000002D9 BE[BE030000]            	mov	esi, positions1+2 ; start address 
   377 000002DE 803D[A9050000]03        	cmp	byte [direction], 3
   378 000002E5 770D                    	ja	short chgpos4 ; scroll up
   379                                  	; scroll down
   380 000002E7 38E0                    	cmp	al, ah ; down (dy) limit ?
   381 000002E9 73C1                    	jnb	short chgpos_beep
   382 000002EB FEC0                    	inc	al
   383 000002ED A2[A2050000]            	mov	[posdy], al
   384                                  	; (vertical positions) -D-
   385 000002F2 EBD0                    	jmp	short chgpos2
   386                                  chgpos4:
   387                                  	; scroll up
   388 000002F4 08C0                    	or	al, al
   389 000002F6 76B4                    	jna	short chgpos_beep
   390 000002F8 FEC8                    	dec	al
   391 000002FA A2[A2050000]            	mov	[posdy], al
   392                                  	; (vertical positions) -U-
   393 000002FF EBA1                    	jmp	short chgpos0
   394                                  		
   395                                  program_msg:
   396 00000301 5452444F5320333836-     	db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Draw Lines"
   396 0000030A 2076322E302E33202D-
   396 00000313 202827737973766964-
   396 0000031C 656F27292054657374-
   396 00000325 2050726F6772616D20-
   396 0000032E 2D2044726177204C69-
   396 00000337 6E6573             
   397 0000033A 0D0A                    	db 0Dh, 0Ah
   398 0000033C 6279204572646F6761-     	db "by Erdogan Tan - 12/02/2021"
   398 00000345 6E2054616E202D2031-
   398 0000034E 322F30322F32303231 
   399                                  	;db 0Dh, 0Ah, 0
   400 00000357 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah
   401 0000035B 507265737320454E54-     	db "Press ENTER to draw SQUAREs .."
   401 00000364 455220746F20647261-
   401 0000036D 772053515541524573-
   401 00000376 202E2E             
   402 00000379 0D0A                    	db 0Dh, 0Ah
   403 0000037B 507265737320535041-     	db "Press SPACE to change COLOR .."
   403 00000384 434520746F20636861-
   403 0000038D 6E676520434F4C4F52-
   403 00000396 202E2E             
   404 00000399 0D0A                    	db 0Dh, 0Ah
   405 0000039B 0D0A                    	db 0Dh, 0Ah
   406 0000039D 507265737320616E79-     	db "Press any key to continue .."
   406 000003A6 206B657920746F2063-
   406 000003AF 6F6E74696E7565202E-
   406 000003B8 2E                 
   407                                  nextline:
   408 000003B9 0D0A00                  	db 0Dh, 0Ah, 0	
   409                                  
   410                                  positions1:
   411                                  	; rectangle 1
   412 000003BC 30003C0024000000        	dw 48,60,36,0
   413 000003C4 53003C0024100000        	dw 83,60,4096+36,0
   414 000003CC 30005F0024000000        	dw 48,95,36,0
   415 000003D4 30003C0024100000        	dw 48,60,4096+36,0 
   416                                  	; rectangle 2 
   417 000003DC 280178009C000000        	dw 296,120,156,0
   418 000003E4 C301780078100000        	dw 451,120,4096+120,0
   419 000003EC 2801EF009C000000        	dw 296,239,156,0
   420 000003F4 2801780078100000        	dw 296,120,4096+120,0
   421                                  	; rectangle 3 
   422 000003FC E801600018000000        	dw 488,96,24,0
   423 00000404 FF01600018100000        	dw 511,96,4096+24,0
   424 0000040C E801770018000000        	dw 488,119,24,0
   425 00000414 E801600018100000        	dw 488,96,4096+24,0
   426                                  	; rectangle 4 
   427 0000041C D80050016C000000        	dw 216,336,108,0
   428 00000424 430150010C100000        	dw 323,336,4096+12,0
   429 0000042C D8005B016C000000        	dw 216,347,108,0
   430 00000434 D80050010C100000        	dw 216,336,4096+12,0
   431                                  	; rectangle 5 	
   432 0000043C 180246010C000000        	dw 536,326,12,0
   433 00000444 230246013C100000        	dw 547,326,4096+60,0
   434 0000044C 180281010C000000        	dw 536,385,12,0
   435 00000454 180246013C100000        	dw 536,326,4096+60,0
   436                                  positions2:
   437                                  	; rectangle 6
   438 0000045C EC00CC0018000000        	dw 236,204,24,0	     ; line 1, x1, y1, h
   439 00000464 0301CC0054100000        	dw 259,204,4096+84,0 ; line 2, x2, y1, v 
   440 0000046C EC001F0118000000        	dw 236,287,24,0	     ; line 3, x1, y2, h 	
   441 00000474 EC00CC0054100000        	dw 236,204,4096+84,0 ; line 4, x1, y1, v 
   442                                  	; rectangle 7 
   443 0000047C 54002C0160000000        	dw 84,300,96,0
   444 00000484 B3002C0154100000        	dw 179,300,4096+84,0
   445 0000048C 54007F0160000000        	dw 84,383,96,0
   446 00000494 54002C0154100000        	dw 84,300,4096+84,0
   447                                  	; rectangle 8 
   448 0000049C F801220118000000        	dw 504,290,24,0
   449 000004A4 0F02220118100000        	dw 527,290,4096+24,0
   450 000004AC F801390118000000        	dw 504,313,24,0
   451 000004B4 F801220118100000        	dw 504,290,4096+24,0
   452                                  	; rectangle 9 
   453 000004BC 2801480048000000        	dw 296,72,72,0
   454 000004C4 6F01480018100000        	dw 367,72,4096+24,0
   455 000004CC 28015F0048000000        	dw 296,95,72,0
   456 000004D4 2801480018100000        	dw 296,72,4096+24,0
   457                                  	; rectangle 10 	
   458 000004DC 5C01140130000000        	dw 348,276,48,0
   459 000004E4 8B01140124100000        	dw 395,276,4096+36,0
   460 000004EC 5C01370130000000        	dw 348,311,48,0
   461 000004F4 5C01140124100000        	dw 348,276,4096+36,0
   462                                  positions3:
   463                                  	; rectangle 11 
   464 000004FC D001480018000000        	dw 464,72,24,0
   465 00000504 E701480018100000        	dw 487,72,4096+24,0
   466 0000050C D0015F0018000000        	dw 464,95,24,0
   467 00000514 D001480018100000        	dw 464,72,4096+24,0 
   468                                  	; rectangle 12 
   469 0000051C 84006C0048000000        	dw 132,108,72,0
   470 00000524 CB006C0048100000        	dw 203,108,4096+72,0
   471 0000052C 8400B30048000000        	dw 132,179,72,0
   472 00000534 84006C0048100000        	dw 132,108,4096+72,0
   473                                  	; rectangle 13 
   474 0000053C 0002780030000000        	dw 512,120,48,0
   475 00000544 2F02780024100000        	dw 559,120,4096+36,0
   476 0000054C 00029B0030000000        	dw 512,155,48,0
   477 00000554 0002780024100000        	dw 512,120,4096+36,0
   478                                  	; rectangle 14 
   479 0000055C 980108010C000000        	dw 408,264,12,0
   480 00000564 A301080118100000        	dw 419,264,4096+24,0
   481 0000056C 98011F010C000000        	dw 408,287,12,0
   482 00000574 9801080118100000        	dw 408,264,4096+24,0
   483                                  	; rectangle 15 	
   484 0000057C A401460148000000        	dw 420,326,72,0
   485 00000584 EB0146013C100000        	dw 491,326,4096+60,0
   486 0000058C A401810148000000        	dw 420,385,72,0
   487 00000594 A40146013C100000        	dw 420,326,4096+60,0
   488                                  
   489 0000059C 6000                    maxdx:	dw 96 	
   490 0000059E 6000                    maxdy:	dw 96	
   491 000005A0 3000                    posdx:	dw 48
   492 000005A2 3000                    posdy:	dw 48
   493                                  
   494                                  bss:
   495                                  
   496                                  ABSOLUTE bss
   497                                  
   498                                  alignb 4
   499                                  
   500                                  bss_start:
   501 000005A4 <res 00000004>          	color:	resd 1
   502 000005A8 <res 00000001>          	phase:  resb 1
   503 000005A9 <res 00000001>          	direction: resb 1
   504 000005AA <res 00000002>          	counter: resw 1
   505                                  	;posdx:	resw 1
   506                                  	;posdy:	resw 1
   507                                  
   508                                  rectbuffer1:
   509 000005AC <res 000000A0>          	resd	40
   510                                  rectbuffer2:
   511 0000064C <res 000000A0>          	resd	40
   512                                  rectbuffer3:
   513 000006EC <res 000000A0>          	resd	40
   514                                  
   515                                  bss_end:
