     1                                  ; ****************************************************************************
     2                                  ; blocks10.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests
     3                                  ; ----------------------------------------------------------------------------
     4                                  ;
     5                                  ; 28/02/2021
     6                                  ;
     7                                  ; ****************************************************************************
     8                                  ; nasm blocks10.s -l blocks10.txt -o BLOCKS10.PRG -Z error.txt
     9                                  ; (modified from 'blocks9.s', 28/02/2021)
    10                                  
    11                                  ; 'sysvideo' bh = 2, block copy and modification test (VESA VBE mode 112h)
    12                                  ; (640*480, 32 bit true colors version)
    13                                  
    14                                  
    15                                  ; 14/07/2020
    16                                  ; 31/12/2017
    17                                  ; TRDOS 386 (v2.0) system calls
    18                                  _ver 	equ 0
    19                                  _exit 	equ 1
    20                                  _fork 	equ 2
    21                                  _read 	equ 3
    22                                  _write	equ 4
    23                                  _open	equ 5
    24                                  _close 	equ 6
    25                                  _wait 	equ 7
    26                                  _create	equ 8
    27                                  _rename	equ 9
    28                                  _delete	equ 10
    29                                  _exec	equ 11
    30                                  _chdir	equ 12
    31                                  _time 	equ 13
    32                                  _mkdir 	equ 14
    33                                  _chmod	equ 15
    34                                  _rmdir	equ 16
    35                                  _break	equ 17
    36                                  _drive	equ 18
    37                                  _seek	equ 19
    38                                  _tell 	equ 20
    39                                  _memory	equ 21
    40                                  _prompt	equ 22
    41                                  _path	equ 23
    42                                  _env	equ 24
    43                                  _stime	equ 25
    44                                  _quit	equ 26	
    45                                  _intr	equ 27
    46                                  _dir	equ 28
    47                                  _emt 	equ 29
    48                                  _ldrvt 	equ 30
    49                                  _video 	equ 31
    50                                  _audio	equ 32
    51                                  _timer	equ 33
    52                                  _sleep	equ 34
    53                                  _msg    equ 35
    54                                  _geterr	equ 36
    55                                  _fpstat	equ 37
    56                                  _pri	equ 38
    57                                  _rele	equ 39
    58                                  _fff	equ 40
    59                                  _fnf	equ 41
    60                                  _alloc	equ 42
    61                                  _dalloc equ 43
    62                                  _calbac equ 44
    63                                  _dma	equ 45	
    64                                  
    65                                  %macro sys 1-4
    66                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)	
    67                                      ; 03/09/2015	
    68                                      ; 13/04/2015
    69                                      ; Retro UNIX 386 v1 system call.		
    70                                      %if %0 >= 2   
    71                                          mov ebx, %2
    72                                          %if %0 >= 3    
    73                                              mov ecx, %3
    74                                              %if %0 = 4
    75                                                 mov edx, %4   
    76                                              %endif
    77                                          %endif
    78                                      %endif
    79                                      mov eax, %1
    80                                      ;int 30h
    81                                      int 40h ; TRDOS 386 (TRDOS v2.0)		   
    82                                  %endmacro
    83                                  
    84                                  ; Retro UNIX 386 v1 system call format:
    85                                  ; sys systemcall (eax) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
    86                                  
    87                                  [BITS 32] ; We need 32-bit intructions for protected mode
    88                                  
    89                                  [ORG 0] 
    90                                  
    91                                  START_CODE:
    92                                  	; clear bss
    93 00000000 BF[64060000]            	mov	edi, bss_start
    94 00000005 B901B00400              	mov	ecx, (bss_end - bss_start)/4
    95                                  	;xor	eax, eax
    96 0000000A F3AB                    	rep	stosd
    97                                  
    98                                  	; program message
    99 0000000C BE[A2050000]            	mov	esi, program_msg
   100 00000011 E858050000              	call	print_msg
   101                                  
   102 00000016 30E4                    	xor	ah, ah
   103                                  	;int	16h	; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
   104                                  			; Return: AH = scan code, AL = character
   105 00000018 CD32                    	int	32h	; TRDOS 386 Keyboard interrupt
   106                                  
   107                                  	; Get VESA VBE video bios number 
   108                                  	;	(vbe2 or vbe3, emulator or not)  
   109 0000001A BB06090000              	mov	ebx, 0906h
   110                                  	sys	_video
   110                              <1> 
   110                              <1> 
   110                              <1> 
   110                              <1> 
   110                              <1>  %if %0 >= 2
   110                              <1>  mov ebx, %2
   110                              <1>  %if %0 >= 3
   110                              <1>  mov ecx, %3
   110                              <1>  %if %0 = 4
   110                              <1>  mov edx, %4
   110                              <1>  %endif
   110                              <1>  %endif
   110                              <1>  %endif
   110 0000001F B81F000000          <1>  mov eax, %1
   110                              <1> 
   110 00000024 CD40                <1>  int 40h
   111 00000026 B912010000              	mov	ecx, 112h ; VESA VBE video mode	(640x480, 24bpp)
   112 0000002B 80FC03                  	cmp	ah, 3
   113 0000002E 740B                    	je	short set_vmode
   114 00000030 80FC02                  	cmp	ah, 2
   115                                  	;jne	terminate ; invalid !?
   116 00000033 7506                    	jne	short set_vmode
   117 00000035 20C0                    	and	al, al
   118 00000037 7402                    	jz	short set_vmode ; invalid !? (AL must be >= C0h.)
   119                                  	; BOCHS/QEMU/VBOX emulator 
   120 00000039 B142                    	mov	cl, 42h ; Bochs/Plex86 video mode 142h
   121                                  			; (640*480, 32bpp) 		
   122                                  
   123                                  	; Set Video Mode to 112h ; 640x480, 32 bit true colors
   124                                  	;
   125                                  	; NOTE: NVIDIA GEFORCE FX 550 VIDEO BIOS uses 32bpp 
   126                                  	;       instead of 24bpp for same VBE video mode numbers. 
   127                                  	;       So, 112h is 640*480, 24bpp for BOCHS/QEMU emulator
   128                                  	;	but, it is 640*480, 32 bpp for real computer 
   129                                  	;	with NVIDIA graphics card and video bios. 
   130                                  	; (Also it is -it must be- 32bpp for other new hardware.)	  	
   131                                  
   132                                  	;sys	_video, 08FFh, 112h
   133                                  set_vmode:
   134                                  	; ecx = VESA VBE video mode
   135                                  	sys	_video, 08FFh
   135                              <1> 
   135                              <1> 
   135                              <1> 
   135                              <1> 
   135                              <1>  %if %0 >= 2
   135 0000003B BBFF080000          <1>  mov ebx, %2
   135                              <1>  %if %0 >= 3
   135                              <1>  mov ecx, %3
   135                              <1>  %if %0 = 4
   135                              <1>  mov edx, %4
   135                              <1>  %endif
   135                              <1>  %endif
   135                              <1>  %endif
   135 00000040 B81F000000          <1>  mov eax, %1
   135                              <1> 
   135 00000045 CD40                <1>  int 40h
   136 00000047 09C0                    	or	eax, eax
   137                                  	;jz	short terminate
   138                                  	;mov	[LFB_ADDR], edx ; pointer to LFB info table/structure
   139 00000049 7505                    	jnz	short set_vesa_mode_112h_ok
   140 0000004B E9E6040000              	jmp	terminate
   141                                  
   142                                  set_vesa_mode_112h_ok:
   143                                  	; Set initial block colors
   144 00000050 B9004B0000              	mov	ecx, 120*160
   145 00000055 B8FFFFFF00              	mov	eax, 0FFFFFFh ; white 
   146 0000005A BF[68060000]            	mov	edi, whiteblock
   147 0000005F F3AB                    	rep	stosd
   148                                  
   149 00000061 66B9004B                	mov	cx, 120*160
   150 00000065 B8FF000000              	mov	eax, 0FFh ; blue
   151 0000006A BF[68320100]            	mov	edi, blueblock
   152 0000006F F3AB                    	rep	stosd
   153                                  
   154 00000071 66B9004B                	mov	cx, 120*160
   155 00000075 B80000FF00              	mov	eax, 0FF0000h ; red
   156 0000007A BF[685E0200]            	mov	edi, redblock
   157 0000007F F3AB                    	rep	stosd
   158                                  
   159 00000081 66B9004B                	mov	cx, 120*160
   160 00000085 B800FF0000              	mov	eax, 0FF00h ; green 
   161 0000008A BF[688A0300]            	mov	edi, greenblock
   162 0000008F F3AB                    	rep	stosd
   163                                  
   164 00000091 66B9004B                	mov	cx, 120*160
   165 00000095 B800FFFF00              	mov	eax, 0FFFF00h ; yellow
   166 0000009A BF[68B60400]            	mov	edi, yellowblock
   167 0000009F F3AB                    	rep	stosd
   168                                  
   169                                  	; copy white block to screen
   170                                  	; at row 70, column 120
   171                                  	; (block size: 120(w)*160(h) 
   172                                  
   173 000000A1 B978004600              	mov	ecx, (70*65536)+120
   174 000000A6 BA7800A000              	mov	edx, (160*65536)+120 
   175 000000AB BE[68060000]            	mov	esi, whiteblock
   176 000000B0 BB10020000              	mov	ebx, 0210h ; non masked window copy
   177                                  	sys	_video
   177                              <1> 
   177                              <1> 
   177                              <1> 
   177                              <1> 
   177                              <1>  %if %0 >= 2
   177                              <1>  mov ebx, %2
   177                              <1>  %if %0 >= 3
   177                              <1>  mov ecx, %3
   177                              <1>  %if %0 = 4
   177                              <1>  mov edx, %4
   177                              <1>  %endif
   177                              <1>  %endif
   177                              <1>  %endif
   177 000000B5 B81F000000          <1>  mov eax, %1
   177                              <1> 
   177 000000BA CD40                <1>  int 40h
   178                                  
   179                                  	; copy blue block to screen
   180                                  	; at row 160, column 260
   181                                  	; (block size: 120(w)*160(h) 
   182                                  
   183 000000BC B90401A000              	mov	ecx, (160*65536)+260
   184 000000C1 BA7800A000              	mov	edx, (160*65536)+120 
   185 000000C6 BE[68320100]            	mov	esi, blueblock
   186 000000CB BB10020000              	mov	ebx, 0210h ; non masked window copy
   187                                  	sys	_video
   187                              <1> 
   187                              <1> 
   187                              <1> 
   187                              <1> 
   187                              <1>  %if %0 >= 2
   187                              <1>  mov ebx, %2
   187                              <1>  %if %0 >= 3
   187                              <1>  mov ecx, %3
   187                              <1>  %if %0 = 4
   187                              <1>  mov edx, %4
   187                              <1>  %endif
   187                              <1>  %endif
   187                              <1>  %endif
   187 000000D0 B81F000000          <1>  mov eax, %1
   187                              <1> 
   187 000000D5 CD40                <1>  int 40h
   188                                  
   189                                  	; copy red block to screen
   190                                  	; at row 250, column 120
   191                                  	; (block size: 120(w)*160(h) 
   192                                  
   193 000000D7 B97800FA00              	mov	ecx, (250*65536)+120
   194 000000DC BA7800A000              	mov	edx, (160*65536)+120 
   195 000000E1 BE[685E0200]            	mov	esi, redblock
   196 000000E6 BB10020000              	mov	ebx, 0210h ; non masked window copy
   197                                  	sys	_video
   197                              <1> 
   197                              <1> 
   197                              <1> 
   197                              <1> 
   197                              <1>  %if %0 >= 2
   197                              <1>  mov ebx, %2
   197                              <1>  %if %0 >= 3
   197                              <1>  mov ecx, %3
   197                              <1>  %if %0 = 4
   197                              <1>  mov edx, %4
   197                              <1>  %endif
   197                              <1>  %endif
   197                              <1>  %endif
   197 000000EB B81F000000          <1>  mov eax, %1
   197                              <1> 
   197 000000F0 CD40                <1>  int 40h
   198                                  
   199                                  	; copy green block to screen
   200                                  	; at row 70, column 400
   201                                  	; (block size: 120(w)*160(h) 
   202                                  
   203 000000F2 B990014600              	mov	ecx, (70*65536)+400
   204 000000F7 BA7800A000              	mov	edx, (160*65536)+120 
   205 000000FC BE[688A0300]            	mov	esi, greenblock
   206 00000101 BB10020000              	mov	ebx, 0210h ; non masked window copy
   207                                  	sys	_video
   207                              <1> 
   207                              <1> 
   207                              <1> 
   207                              <1> 
   207                              <1>  %if %0 >= 2
   207                              <1>  mov ebx, %2
   207                              <1>  %if %0 >= 3
   207                              <1>  mov ecx, %3
   207                              <1>  %if %0 = 4
   207                              <1>  mov edx, %4
   207                              <1>  %endif
   207                              <1>  %endif
   207                              <1>  %endif
   207 00000106 B81F000000          <1>  mov eax, %1
   207                              <1> 
   207 0000010B CD40                <1>  int 40h
   208                                  
   209                                  	; copy yellow block to screen
   210                                  	; at row 250, column 400
   211                                  	; (block size: 120(w)*160(h) 
   212                                  
   213 0000010D B99001FA00              	mov	ecx, (250*65536)+400
   214 00000112 BA7800A000              	mov	edx, (160*65536)+120 
   215 00000117 BE[68B60400]            	mov	esi, yellowblock
   216 0000011C BB10020000              	mov	ebx, 0210h ; non masked window copy
   217                                  	sys	_video
   217                              <1> 
   217                              <1> 
   217                              <1> 
   217                              <1> 
   217                              <1>  %if %0 >= 2
   217                              <1>  mov ebx, %2
   217                              <1>  %if %0 >= 3
   217                              <1>  mov ecx, %3
   217                              <1>  %if %0 = 4
   217                              <1>  mov edx, %4
   217                              <1>  %endif
   217                              <1>  %endif
   217                              <1>  %endif
   217 00000121 B81F000000          <1>  mov eax, %1
   217                              <1> 
   217 00000126 CD40                <1>  int 40h
   218                                  
   219 00000128 E817040000              	call	waitforkey
   220                                  
   221                                  	; continue by using
   222                                  	; window color modification sub functions
   223                                  
   224                                  	; apply SUB to window's pixel colors
   225 0000012D B960804000              	mov	ecx, 408060h  
   226 00000132 BA78004600              	mov	edx, (70*65536)+120
   227 00000137 BE7800A000              	mov	esi, (160*65536)+120
   228 0000013C BB13020000              	mov	ebx, 0213h ; non masked window SUB op
   229                                  	sys	_video
   229                              <1> 
   229                              <1> 
   229                              <1> 
   229                              <1> 
   229                              <1>  %if %0 >= 2
   229                              <1>  mov ebx, %2
   229                              <1>  %if %0 >= 3
   229                              <1>  mov ecx, %3
   229                              <1>  %if %0 = 4
   229                              <1>  mov edx, %4
   229                              <1>  %endif
   229                              <1>  %endif
   229                              <1>  %endif
   229 00000141 B81F000000          <1>  mov eax, %1
   229                              <1> 
   229 00000146 CD40                <1>  int 40h
   230                                  
   231 00000148 E8F7030000              	call	waitforkey
   232                                  
   233                                  	; apply ADD to pixel colors of
   234                                  	; the window/block on row 70, column 120 with 
   235                                  	; block size 120(w)*160(h).
   236                                  	;mov	ecx, 408060h
   237                                  	;mov	edx, (70*65536)+120
   238                                  	;mov	esi, (160*65536)+120 
   239                                  	;mov	ebx, 0212h ; non masked window ADD op
   240 0000014D B312                    	mov	bl, 12h
   241                                  	sys	_video
   241                              <1> 
   241                              <1> 
   241                              <1> 
   241                              <1> 
   241                              <1>  %if %0 >= 2
   241                              <1>  mov ebx, %2
   241                              <1>  %if %0 >= 3
   241                              <1>  mov ecx, %3
   241                              <1>  %if %0 = 4
   241                              <1>  mov edx, %4
   241                              <1>  %endif
   241                              <1>  %endif
   241                              <1>  %endif
   241 0000014F B81F000000          <1>  mov eax, %1
   241                              <1> 
   241 00000154 CD40                <1>  int 40h
   242                                  
   243 00000156 E8E9030000              	call	waitforkey
   244                                  
   245                                  	; apply ADD to pixel colors of
   246                                  	; the window/block on row 250, column 120 with 
   247                                  	; block size 120(w)*160(h).
   248 0000015B B940000000              	mov	ecx, 40h
   249 00000160 BA7800FA00              	mov	edx, (250*65536)+120
   250                                  	;mov	esi, (160*65536)+120 
   251                                  	;mov	ebx, 0212h ; non masked window ADD op
   252 00000165 B312                    	mov	bl, 12h
   253                                  	sys	_video
   253                              <1> 
   253                              <1> 
   253                              <1> 
   253                              <1> 
   253                              <1>  %if %0 >= 2
   253                              <1>  mov ebx, %2
   253                              <1>  %if %0 >= 3
   253                              <1>  mov ecx, %3
   253                              <1>  %if %0 = 4
   253                              <1>  mov edx, %4
   253                              <1>  %endif
   253                              <1>  %endif
   253                              <1>  %endif
   253 00000167 B81F000000          <1>  mov eax, %1
   253                              <1> 
   253 0000016C CD40                <1>  int 40h
   254                                  
   255 0000016E E8D1030000              	call	waitforkey
   256                                  
   257                                  	; apply SUB to window's pixel colors
   258                                  	;mov	ecx, 40h  
   259                                  	;mov	edx, (250*65536)+120
   260                                  	;mov	esi, (160*65536)+120 
   261                                  	;mov	ebx, 0213h ; non masked window SUB op
   262 00000173 B313                    	mov	bl, 13h
   263                                  	sys	_video
   263                              <1> 
   263                              <1> 
   263                              <1> 
   263                              <1> 
   263                              <1>  %if %0 >= 2
   263                              <1>  mov ebx, %2
   263                              <1>  %if %0 >= 3
   263                              <1>  mov ecx, %3
   263                              <1>  %if %0 = 4
   263                              <1>  mov edx, %4
   263                              <1>  %endif
   263                              <1>  %endif
   263                              <1>  %endif
   263 00000175 B81F000000          <1>  mov eax, %1
   263                              <1> 
   263 0000017A CD40                <1>  int 40h
   264                                  
   265 0000017C E8C3030000              	call	waitforkey
   266                                  
   267                                  	; or, and, xor
   268                                  
   269                                  	; apply AND to window's pixel colors
   270 00000181 B97F7F0700              	mov	ecx, 077F7Fh 
   271 00000186 BA78004600              	mov	edx, (70*65536)+120
   272                                  	;mov	esi, (160*65536)+120 
   273                                  	;mov	ebx, 0215h ; non masked window AND op
   274 0000018B B315                    	mov	bl, 15h
   275                                  	sys	_video
   275                              <1> 
   275                              <1> 
   275                              <1> 
   275                              <1> 
   275                              <1>  %if %0 >= 2
   275                              <1>  mov ebx, %2
   275                              <1>  %if %0 >= 3
   275                              <1>  mov ecx, %3
   275                              <1>  %if %0 = 4
   275                              <1>  mov edx, %4
   275                              <1>  %endif
   275                              <1>  %endif
   275                              <1>  %endif
   275 0000018D B81F000000          <1>  mov eax, %1
   275                              <1> 
   275 00000192 CD40                <1>  int 40h
   276                                  
   277 00000194 E8AB030000              	call	waitforkey
   278                                  
   279                                  	; apply AND to pixel colors of
   280                                  	; the window/block on row 160, column 260 with 
   281                                  	; block size 120(w)*160(h).
   282                                  	;mov	ecx, 077F7Fh
   283 00000199 BA0401A000              	mov	edx, (160*65536)+260
   284                                  	;mov	esi, (160*65536)+120 
   285                                  	;mov	ebx, 0215h ; non masked window AND op
   286                                  	sys	_video
   286                              <1> 
   286                              <1> 
   286                              <1> 
   286                              <1> 
   286                              <1>  %if %0 >= 2
   286                              <1>  mov ebx, %2
   286                              <1>  %if %0 >= 3
   286                              <1>  mov ecx, %3
   286                              <1>  %if %0 = 4
   286                              <1>  mov edx, %4
   286                              <1>  %endif
   286                              <1>  %endif
   286                              <1>  %endif
   286 0000019E B81F000000          <1>  mov eax, %1
   286                              <1> 
   286 000001A3 CD40                <1>  int 40h
   287                                  
   288 000001A5 E89A030000              	call	waitforkey
   289                                  
   290                                  	; apply OR to pixel colors of
   291                                  	; the window/block on row 70, column 400 with 
   292                                  	; block size 120(w)*160(h).
   293 000001AA B950301000              	mov	ecx, 103050h
   294 000001AF BA90014600              	mov	edx, (70*65536)+400
   295                                  	;mov	esi, (160*65536)+120 
   296                                  	;mov	ebx, 0214h ; non masked window OR op
   297 000001B4 B314                    	mov	bl, 14h
   298                                  	sys	_video
   298                              <1> 
   298                              <1> 
   298                              <1> 
   298                              <1> 
   298                              <1>  %if %0 >= 2
   298                              <1>  mov ebx, %2
   298                              <1>  %if %0 >= 3
   298                              <1>  mov ecx, %3
   298                              <1>  %if %0 = 4
   298                              <1>  mov edx, %4
   298                              <1>  %endif
   298                              <1>  %endif
   298                              <1>  %endif
   298 000001B6 B81F000000          <1>  mov eax, %1
   298                              <1> 
   298 000001BB CD40                <1>  int 40h
   299                                  
   300 000001BD E882030000              	call	waitforkey
   301                                  
   302                                  	; apply OR to pixel colors of
   303                                  	; the window/block on row 250, column 400 with 
   304                                  	; block size 120(w)*160(h).
   305                                  	;mov	ecx, 103050h
   306 000001C2 BA9001FA00              	mov	edx, (250*65536)+400
   307                                  	;mov	esi, (160*65536)+120 
   308                                  	;mov	ebx, 0214h ; non masked window OR op
   309                                  	sys	_video
   309                              <1> 
   309                              <1> 
   309                              <1> 
   309                              <1> 
   309                              <1>  %if %0 >= 2
   309                              <1>  mov ebx, %2
   309                              <1>  %if %0 >= 3
   309                              <1>  mov ecx, %3
   309                              <1>  %if %0 = 4
   309                              <1>  mov edx, %4
   309                              <1>  %endif
   309                              <1>  %endif
   309                              <1>  %endif
   309 000001C7 B81F000000          <1>  mov eax, %1
   309                              <1> 
   309 000001CC CD40                <1>  int 40h
   310                                  
   311 000001CE E871030000              	call	waitforkey
   312                                  
   313                                  	; apply XOR to pixel colors of
   314                                  	; the window/block on row 250, column 120 with 
   315                                  	; block size 120(w)*160(h).
   316 000001D3 B94F7F3F00              	mov	ecx, 3F7F4Fh
   317 000001D8 BA7800FA00              	mov	edx, (250*65536)+120
   318                                  	;mov	esi, (160*65536)+120 
   319                                  	;mov	ebx, 0216h ; non masked window XOR op
   320 000001DD B316                    	mov	bl, 16h
   321                                  	sys	_video
   321                              <1> 
   321                              <1> 
   321                              <1> 
   321                              <1> 
   321                              <1>  %if %0 >= 2
   321                              <1>  mov ebx, %2
   321                              <1>  %if %0 >= 3
   321                              <1>  mov ecx, %3
   321                              <1>  %if %0 = 4
   321                              <1>  mov edx, %4
   321                              <1>  %endif
   321                              <1>  %endif
   321                              <1>  %endif
   321 000001DF B81F000000          <1>  mov eax, %1
   321                              <1> 
   321 000001E4 CD40                <1>  int 40h
   322                                  
   323 000001E6 E859030000              	call	waitforkey
   324                                  
   325                                  	; apply XOR to pixel colors of
   326                                  	; the window/block on row 70, column 400 with 
   327                                  	; block size 120(w)*160(h).
   328                                  	;mov	ecx, 3F7F4Fh
   329 000001EB BA90014600              	mov	edx, (70*65536)+400
   330                                  	;mov	esi, (160*65536)+120 
   331                                  	;mov	ebx, 0216h ; non masked window XOR op
   332                                  	sys	_video
   332                              <1> 
   332                              <1> 
   332                              <1> 
   332                              <1> 
   332                              <1>  %if %0 >= 2
   332                              <1>  mov ebx, %2
   332                              <1>  %if %0 >= 3
   332                              <1>  mov ecx, %3
   332                              <1>  %if %0 = 4
   332                              <1>  mov edx, %4
   332                              <1>  %endif
   332                              <1>  %endif
   332                              <1>  %endif
   332 000001F0 B81F000000          <1>  mov eax, %1
   332                              <1> 
   332 000001F5 CD40                <1>  int 40h
   333                                  
   334 000001F7 E848030000              	call	waitforkey
   335                                  
   336                                  	; Mix colors
   337                                  
   338                                  	; MIX pixel colors of
   339                                  	; the window/block on row 70, column 120 with 
   340                                  	; block size 120(w)*160(h).
   341 000001FC B940201000              	mov	ecx, 102040h
   342 00000201 BA78004600              	mov	edx, (70*65536)+120
   343                                  	;mov	esi, (160*65536)+120 
   344                                  	;mov	ebx, 021Bh ; non masked window MIX op
   345 00000206 B31B                    	mov	bl, 1Bh
   346                                  	sys	_video
   346                              <1> 
   346                              <1> 
   346                              <1> 
   346                              <1> 
   346                              <1>  %if %0 >= 2
   346                              <1>  mov ebx, %2
   346                              <1>  %if %0 >= 3
   346                              <1>  mov ecx, %3
   346                              <1>  %if %0 = 4
   346                              <1>  mov edx, %4
   346                              <1>  %endif
   346                              <1>  %endif
   346                              <1>  %endif
   346 00000208 B81F000000          <1>  mov eax, %1
   346                              <1> 
   346 0000020D CD40                <1>  int 40h
   347                                  
   348 0000020F E830030000              	call	waitforkey
   349                                  
   350                                  	; MIX pixel colors of
   351                                  	; the window/block on row 160, column 260 with 
   352                                  	; block size 120(w)*160(h).
   353                                  	;mov	ecx, 102040h
   354 00000214 BA0401A000              	mov	edx, (160*65536)+260
   355                                  	;mov	esi, (160*65536)+120 
   356                                  	;mov	ebx, 021Bh ; non masked window MIX op
   357                                  	sys	_video
   357                              <1> 
   357                              <1> 
   357                              <1> 
   357                              <1> 
   357                              <1>  %if %0 >= 2
   357                              <1>  mov ebx, %2
   357                              <1>  %if %0 >= 3
   357                              <1>  mov ecx, %3
   357                              <1>  %if %0 = 4
   357                              <1>  mov edx, %4
   357                              <1>  %endif
   357                              <1>  %endif
   357                              <1>  %endif
   357 00000219 B81F000000          <1>  mov eax, %1
   357                              <1> 
   357 0000021E CD40                <1>  int 40h
   358                                  
   359 00000220 E81F030000              	call	waitforkey
   360                                  
   361                                  	; MIX pixel colors of
   362                                  	; the window/block on row 250, column 400 with 
   363                                  	; block size 120(w)*160(h).
   364                                  	;mov	ecx, 102040h
   365 00000225 BA9001FA00              	mov	edx, (250*65536)+400
   366                                  	;mov	esi, (160*65536)+120 
   367                                  	;mov	ebx, 021Bh ; non masked window MIX op
   368                                  	sys	_video
   368                              <1> 
   368                              <1> 
   368                              <1> 
   368                              <1> 
   368                              <1>  %if %0 >= 2
   368                              <1>  mov ebx, %2
   368                              <1>  %if %0 >= 3
   368                              <1>  mov ecx, %3
   368                              <1>  %if %0 = 4
   368                              <1>  mov edx, %4
   368                              <1>  %endif
   368                              <1>  %endif
   368                              <1>  %endif
   368 0000022A B81F000000          <1>  mov eax, %1
   368                              <1> 
   368 0000022F CD40                <1>  int 40h
   369                                  
   370 00000231 E80E030000              	call	waitforkey
   371                                  
   372                                  	; CHANGE color (full screen)
   373 00000236 31C9                    	xor	ecx, ecx ; 0 ; black
   374 00000238 BB01020000              	mov	ebx, 0201h ; Full screen, new color
   375                                  	sys	_video
   375                              <1> 
   375                              <1> 
   375                              <1> 
   375                              <1> 
   375                              <1>  %if %0 >= 2
   375                              <1>  mov ebx, %2
   375                              <1>  %if %0 >= 3
   375                              <1>  mov ecx, %3
   375                              <1>  %if %0 = 4
   375                              <1>  mov edx, %4
   375                              <1>  %endif
   375                              <1>  %endif
   375                              <1>  %endif
   375 0000023D B81F000000          <1>  mov eax, %1
   375                              <1> 
   375 00000242 CD40                <1>  int 40h
   376                                  
   377 00000244 B900000100              	mov	ecx, 65536
   378                                  blackloop:
   379 00000249 09C9                    	or	ecx, ecx
   380 0000024B 90                      	nop
   381 0000024C 90                      	nop
   382 0000024D 90                      	nop
   383 0000024E E2F9                     	loop	blackloop
   384                                  
   385 00000250 B9FFFFFF00              	mov	ecx, 0FFFFFFh ; white
   386 00000255 BB01020000              	mov	ebx, 0201h ; Full screen, new color
   387                                  	sys	_video
   387                              <1> 
   387                              <1> 
   387                              <1> 
   387                              <1> 
   387                              <1>  %if %0 >= 2
   387                              <1>  mov ebx, %2
   387                              <1>  %if %0 >= 3
   387                              <1>  mov ecx, %3
   387                              <1>  %if %0 = 4
   387                              <1>  mov edx, %4
   387                              <1>  %endif
   387                              <1>  %endif
   387                              <1>  %endif
   387 0000025A B81F000000          <1>  mov eax, %1
   387                              <1> 
   387 0000025F CD40                <1>  int 40h
   388                                  
   389                                  	;mov	dword [tcolor], 0
   390 00000261 BEF000D000              	mov	esi, 208*65536+240
   391 00000266 BD[53060000]            	mov	ebp, txt_white
   392 0000026B E80F030000               	call	print_text
   393                                  
   394 00000270 E8CF020000              	call	waitforkey
   395                                  
   396                                  	; full screen sub
   397 00000275 B90000FF00              	mov	ecx, 0FF0000h
   398 0000027A B303                    	mov	bl, 03h
   399                                  	sys	_video	
   399                              <1> 
   399                              <1> 
   399                              <1> 
   399                              <1> 
   399                              <1>  %if %0 >= 2
   399                              <1>  mov ebx, %2
   399                              <1>  %if %0 >= 3
   399                              <1>  mov ecx, %3
   399                              <1>  %if %0 = 4
   399                              <1>  mov edx, %4
   399                              <1>  %endif
   399                              <1>  %endif
   399                              <1>  %endif
   399 0000027C B81F000000          <1>  mov eax, %1
   399                              <1> 
   399 00000281 CD40                <1>  int 40h
   400                                  
   401 00000283 E8BC020000              	call	waitforkey
   402                                  
   403                                  	; full screen add
   404                                  	;mov	ecx, 0FF0000h
   405 00000288 B302                    	mov	bl, 02h
   406                                  	sys	_video
   406                              <1> 
   406                              <1> 
   406                              <1> 
   406                              <1> 
   406                              <1>  %if %0 >= 2
   406                              <1>  mov ebx, %2
   406                              <1>  %if %0 >= 3
   406                              <1>  mov ecx, %3
   406                              <1>  %if %0 = 4
   406                              <1>  mov edx, %4
   406                              <1>  %endif
   406                              <1>  %endif
   406                              <1>  %endif
   406 0000028A B81F000000          <1>  mov eax, %1
   406                              <1> 
   406 0000028F CD40                <1>  int 40h
   407                                  
   408 00000291 E8AE020000              	call	waitforkey
   409                                  
   410 00000296 B9FF000000              	mov	ecx, 0FFh ; blue
   411 0000029B BB01020000              	mov	ebx, 0201h ; Full screen, new color
   412                                  	sys	_video
   412                              <1> 
   412                              <1> 
   412                              <1> 
   412                              <1> 
   412                              <1>  %if %0 >= 2
   412                              <1>  mov ebx, %2
   412                              <1>  %if %0 >= 3
   412                              <1>  mov ecx, %3
   412                              <1>  %if %0 = 4
   412                              <1>  mov edx, %4
   412                              <1>  %endif
   412                              <1>  %endif
   412                              <1>  %endif
   412 000002A0 B81F000000          <1>  mov eax, %1
   412                              <1> 
   412 000002A5 CD40                <1>  int 40h
   413                                  
   414 000002A7 C705[64060000]FFFF-     	mov	dword [tcolor], 0FFFFFFh
   414 000002AF FF00               
   415 000002B1 BE0201D000              	mov	esi, 208*65536+258
   416 000002B6 BD[3D060000]            	mov	ebp, txt_blue
   417 000002BB E8BF020000               	call	print_text
   418                                  
   419 000002C0 E87F020000              	call	waitforkey
   420                                  
   421                                  	; full screen add
   422 000002C5 B90000FF00              	mov	ecx, 0FF0000h
   423 000002CA B302                    	mov	bl, 02h
   424                                  	sys	_video
   424                              <1> 
   424                              <1> 
   424                              <1> 
   424                              <1> 
   424                              <1>  %if %0 >= 2
   424                              <1>  mov ebx, %2
   424                              <1>  %if %0 >= 3
   424                              <1>  mov ecx, %3
   424                              <1>  %if %0 = 4
   424                              <1>  mov edx, %4
   424                              <1>  %endif
   424                              <1>  %endif
   424                              <1>  %endif
   424 000002CC B81F000000          <1>  mov eax, %1
   424                              <1> 
   424 000002D1 CD40                <1>  int 40h
   425                                  
   426 000002D3 E86C020000              	call	waitforkey
   427                                  	
   428                                  	; full screen sub
   429                                  	;mov	ecx, 0FF0000h
   430 000002D8 B303                    	mov	bl, 03h
   431                                  	sys	_video
   431                              <1> 
   431                              <1> 
   431                              <1> 
   431                              <1> 
   431                              <1>  %if %0 >= 2
   431                              <1>  mov ebx, %2
   431                              <1>  %if %0 >= 3
   431                              <1>  mov ecx, %3
   431                              <1>  %if %0 = 4
   431                              <1>  mov edx, %4
   431                              <1>  %endif
   431                              <1>  %endif
   431                              <1>  %endif
   431 000002DA B81F000000          <1>  mov eax, %1
   431                              <1> 
   431 000002DF CD40                <1>  int 40h
   432                                  
   433 000002E1 E85E020000              	call	waitforkey
   434                                  
   435                                  	;mov	ecx, 0FF0000h ; red
   436 000002E6 BB01020000              	mov	ebx, 0201h ; Full screen, new color
   437                                  	sys	_video
   437                              <1> 
   437                              <1> 
   437                              <1> 
   437                              <1> 
   437                              <1>  %if %0 >= 2
   437                              <1>  mov ebx, %2
   437                              <1>  %if %0 >= 3
   437                              <1>  mov ecx, %3
   437                              <1>  %if %0 = 4
   437                              <1>  mov edx, %4
   437                              <1>  %endif
   437                              <1>  %endif
   437                              <1>  %endif
   437 000002EB B81F000000          <1>  mov eax, %1
   437                              <1> 
   437 000002F0 CD40                <1>  int 40h
   438                                  
   439                                  	;mov	dword [tcolor], 0FFFFFFh
   440 000002F2 BE1401D000              	mov	esi, 208*65536+276
   441 000002F7 BD[42060000]            	mov	ebp, txt_red
   442 000002FC E87E020000               	call	print_text
   443                                  
   444 00000301 E83E020000              	call	waitforkey
   445                                  
   446                                  	; full screen add
   447 00000306 B9FF400000              	mov	ecx, 0040FFh
   448 0000030B B302                    	mov	bl, 02h
   449                                  	sys	_video
   449                              <1> 
   449                              <1> 
   449                              <1> 
   449                              <1> 
   449                              <1>  %if %0 >= 2
   449                              <1>  mov ebx, %2
   449                              <1>  %if %0 >= 3
   449                              <1>  mov ecx, %3
   449                              <1>  %if %0 = 4
   449                              <1>  mov edx, %4
   449                              <1>  %endif
   449                              <1>  %endif
   449                              <1>  %endif
   449 0000030D B81F000000          <1>  mov eax, %1
   449                              <1> 
   449 00000312 CD40                <1>  int 40h
   450                                  
   451 00000314 E82B020000              	call	waitforkey
   452                                  	
   453                                  	; full screen sub
   454                                  	;mov	ecx, 0040FFh
   455 00000319 B303                    	mov	bl, 03h
   456                                  	sys	_video
   456                              <1> 
   456                              <1> 
   456                              <1> 
   456                              <1> 
   456                              <1>  %if %0 >= 2
   456                              <1>  mov ebx, %2
   456                              <1>  %if %0 >= 3
   456                              <1>  mov ecx, %3
   456                              <1>  %if %0 = 4
   456                              <1>  mov edx, %4
   456                              <1>  %endif
   456                              <1>  %endif
   456                              <1>  %endif
   456 0000031B B81F000000          <1>  mov eax, %1
   456                              <1> 
   456 00000320 CD40                <1>  int 40h
   457                                  
   458 00000322 E81D020000              	call	waitforkey
   459                                  
   460                                  	; full screen OR
   461 00000327 B900FF0000              	mov	ecx, 00FF00h
   462 0000032C B304                    	mov	bl, 04h
   463                                  	sys	_video
   463                              <1> 
   463                              <1> 
   463                              <1> 
   463                              <1> 
   463                              <1>  %if %0 >= 2
   463                              <1>  mov ebx, %2
   463                              <1>  %if %0 >= 3
   463                              <1>  mov ecx, %3
   463                              <1>  %if %0 = 4
   463                              <1>  mov edx, %4
   463                              <1>  %endif
   463                              <1>  %endif
   463                              <1>  %endif
   463 0000032E B81F000000          <1>  mov eax, %1
   463                              <1> 
   463 00000333 CD40                <1>  int 40h
   464                                  
   465 00000335 E80A020000              	call	waitforkey
   466                                  
   467                                  	; full screen AND
   468                                  	;mov	ecx, 001F00h
   469 0000033A B51F                    	mov	ch, 1Fh
   470 0000033C B305                    	mov	bl, 05h
   471                                  	sys	_video
   471                              <1> 
   471                              <1> 
   471                              <1> 
   471                              <1> 
   471                              <1>  %if %0 >= 2
   471                              <1>  mov ebx, %2
   471                              <1>  %if %0 >= 3
   471                              <1>  mov ecx, %3
   471                              <1>  %if %0 = 4
   471                              <1>  mov edx, %4
   471                              <1>  %endif
   471                              <1>  %endif
   471                              <1>  %endif
   471 0000033E B81F000000          <1>  mov eax, %1
   471                              <1> 
   471 00000343 CD40                <1>  int 40h
   472                                  
   473 00000345 E8FA010000              	call	waitforkey
   474                                  	
   475                                  	; full screen XOR
   476 0000034A B97F3F0700              	mov	ecx, 073F7Fh
   477 0000034F B306                    	mov	bl, 06h
   478                                  	sys	_video	
   478                              <1> 
   478                              <1> 
   478                              <1> 
   478                              <1> 
   478                              <1>  %if %0 >= 2
   478                              <1>  mov ebx, %2
   478                              <1>  %if %0 >= 3
   478                              <1>  mov ecx, %3
   478                              <1>  %if %0 = 4
   478                              <1>  mov edx, %4
   478                              <1>  %endif
   478                              <1>  %endif
   478                              <1>  %endif
   478 00000351 B81F000000          <1>  mov eax, %1
   478                              <1> 
   478 00000356 CD40                <1>  int 40h
   479                                  	
   480 00000358 E8E7010000              	call	waitforkey
   481                                  
   482 0000035D B900FF0000              	mov	ecx, 00FF00h ; green 
   483 00000362 BB01020000              	mov	ebx, 0201h ; Full screen, new color
   484                                  	sys	_video
   484                              <1> 
   484                              <1> 
   484                              <1> 
   484                              <1> 
   484                              <1>  %if %0 >= 2
   484                              <1>  mov ebx, %2
   484                              <1>  %if %0 >= 3
   484                              <1>  mov ecx, %3
   484                              <1>  %if %0 = 4
   484                              <1>  mov edx, %4
   484                              <1>  %endif
   484                              <1>  %endif
   484                              <1>  %endif
   484 00000367 B81F000000          <1>  mov eax, %1
   484                              <1> 
   484 0000036C CD40                <1>  int 40h
   485                                  
   486 0000036E C705[64060000]0000-     	mov	dword [tcolor], 0
   486 00000376 0000               
   487 00000378 BEF000D000              	mov	esi, 208*65536+240
   488 0000037D BD[46060000]            	mov	ebp, txt_green
   489 00000382 E8F8010000               	call	print_text
   490                                  
   491 00000387 E8B8010000              	call	waitforkey
   492                                  
   493                                  	; full screen MIX
   494 0000038C B97F003F00              	mov	ecx, 3F007Fh ; green
   495 00000391 B30B                    	mov	bl, 0Bh
   496                                  	sys	_video
   496                              <1> 
   496                              <1> 
   496                              <1> 
   496                              <1> 
   496                              <1>  %if %0 >= 2
   496                              <1>  mov ebx, %2
   496                              <1>  %if %0 >= 3
   496                              <1>  mov ecx, %3
   496                              <1>  %if %0 = 4
   496                              <1>  mov edx, %4
   496                              <1>  %endif
   496                              <1>  %endif
   496                              <1>  %endif
   496 00000393 B81F000000          <1>  mov eax, %1
   496                              <1> 
   496 00000398 CD40                <1>  int 40h
   497                                  
   498 0000039A E8A5010000              	call	waitforkey
   499                                  
   500 0000039F B900FFFF00              	mov	ecx, 0FFFF00h ; yellow
   501 000003A4 BB01020000              	mov	ebx, 0201h ; Full screen, new color
   502                                  	sys	_video
   502                              <1> 
   502                              <1> 
   502                              <1> 
   502                              <1> 
   502                              <1>  %if %0 >= 2
   502                              <1>  mov ebx, %2
   502                              <1>  %if %0 >= 3
   502                              <1>  mov ecx, %3
   502                              <1>  %if %0 = 4
   502                              <1>  mov edx, %4
   502                              <1>  %endif
   502                              <1>  %endif
   502                              <1>  %endif
   502 000003A9 B81F000000          <1>  mov eax, %1
   502                              <1> 
   502 000003AE CD40                <1>  int 40h
   503                                  
   504 000003B0 C705[64060000]FFFF-     	mov	dword [tcolor], 0FFFFFFh
   504 000003B8 FF00               
   505 000003BA BEDE00D000              	mov	esi, 208*65536+222
   506 000003BF BD[4C060000]            	mov	ebp, txt_yellow
   507 000003C4 E8B6010000               	call	print_text
   508                                  
   509 000003C9 E876010000              	call	waitforkey
   510                                  
   511                                  	; full screen NOT
   512 000003CE B307                    	mov	bl, 07h
   513                                  	sys	_video
   513                              <1> 
   513                              <1> 
   513                              <1> 
   513                              <1> 
   513                              <1>  %if %0 >= 2
   513                              <1>  mov ebx, %2
   513                              <1>  %if %0 >= 3
   513                              <1>  mov ecx, %3
   513                              <1>  %if %0 = 4
   513                              <1>  mov edx, %4
   513                              <1>  %endif
   513                              <1>  %endif
   513                              <1>  %endif
   513 000003D0 B81F000000          <1>  mov eax, %1
   513                              <1> 
   513 000003D5 CD40                <1>  int 40h
   514                                  
   515 000003D7 E868010000              	call	waitforkey
   516                                  
   517                                  	; full screen NOT
   518                                  	;mov	bl, 07h
   519                                  	sys	_video
   519                              <1> 
   519                              <1> 
   519                              <1> 
   519                              <1> 
   519                              <1>  %if %0 >= 2
   519                              <1>  mov ebx, %2
   519                              <1>  %if %0 >= 3
   519                              <1>  mov ecx, %3
   519                              <1>  %if %0 = 4
   519                              <1>  mov edx, %4
   519                              <1>  %endif
   519                              <1>  %endif
   519                              <1>  %endif
   519 000003DC B81F000000          <1>  mov eax, %1
   519                              <1> 
   519 000003E1 CD40                <1>  int 40h
   520                                  
   521 000003E3 E85C010000              	call	waitforkey
   522                                  
   523                                  	; full screen MIX
   524 000003E8 B9FF007F00              	mov	ecx, 7F00FFh
   525 000003ED B30B                    	mov	bl, 0Bh
   526                                  	sys	_video
   526                              <1> 
   526                              <1> 
   526                              <1> 
   526                              <1> 
   526                              <1>  %if %0 >= 2
   526                              <1>  mov ebx, %2
   526                              <1>  %if %0 >= 3
   526                              <1>  mov ecx, %3
   526                              <1>  %if %0 = 4
   526                              <1>  mov edx, %4
   526                              <1>  %endif
   526                              <1>  %endif
   526                              <1>  %endif
   526 000003EF B81F000000          <1>  mov eax, %1
   526                              <1> 
   526 000003F4 CD40                <1>  int 40h
   527                                  
   528 000003F6 E849010000              	call	waitforkey
   529                                  
   530                                  	; Full screen copy
   531 000003FB BE[68060000]            	mov	esi, fullscreen_buffer
   532 00000400 89F7                    	mov	edi, esi
   533                                  
   534                                  	; Black
   535 00000402 B900190000              	mov	ecx, 640*10
   536 00000407 31C0                    	xor	eax, eax ; black
   537 00000409 F3AB                    	rep	stosd
   538                                  
   539                                  	; White
   540 0000040B B9800C0000              	mov	ecx, 640*5
   541 00000410 B8FFFFFF00              	mov	eax, 0FFFFFFh
   542 00000415 F3AB                    	rep	stosd
   543                                  
   544                                  	; Black
   545 00000417 B9800C0000              	mov	ecx, 640*5
   546 0000041C 31C0                    	xor	eax, eax ; black
   547 0000041E F3AB                    	rep	stosd
   548                                  
   549                                  	; Blue
   550 00000420 B900130100              	mov	ecx, 640*110
   551                                  	;xor	eax, eax
   552 00000425 B0FF                    	mov	al, 0FFh
   553 00000427 F3AB                    	rep	stosd
   554                                  
   555                                  	; Red
   556 00000429 B900130100              	mov	ecx, 640*110
   557 0000042E B80000FF00              	mov	eax, 0FF0000h
   558 00000433 F3AB                    	rep	stosd
   559                                  
   560                                  	; Green
   561 00000435 B900130100              	mov	ecx, 640*110
   562 0000043A B800FF0000              	mov	eax, 0FF00h
   563 0000043F F3AB                    	rep	stosd
   564                                  
   565                                  	; Yellow
   566 00000441 B900130100              	mov	ecx, 640*110
   567 00000446 B800FFFF00              	mov	eax, 0FFFF00h
   568 0000044B F3AB                    	rep	stosd
   569                                  
   570                                  	; Black
   571 0000044D B9800C0000              	mov	ecx, 640*5
   572 00000452 31C0                    	xor	eax, eax ; black
   573 00000454 F3AB                    	rep	stosd
   574                                  
   575                                  	; White
   576 00000456 B9800C0000              	mov	ecx, 640*5
   577 0000045B B8FFFFFF00              	mov	eax, 0FFFFFFh
   578 00000460 F3AB                    	rep	stosd
   579                                  
   580                                  	; Black
   581 00000462 B900190000              	mov	ecx, 640*10
   582 00000467 31C0                    	xor	eax, eax ; black
   583 00000469 F3AB                    	rep	stosd
   584                                  
   585 0000046B BB00020000              	mov	ebx, 0200h ; Full screen copy
   586                                  	sys	_video
   586                              <1> 
   586                              <1> 
   586                              <1> 
   586                              <1> 
   586                              <1>  %if %0 >= 2
   586                              <1>  mov ebx, %2
   586                              <1>  %if %0 >= 3
   586                              <1>  mov ecx, %3
   586                              <1>  %if %0 = 4
   586                              <1>  mov edx, %4
   586                              <1>  %endif
   586                              <1>  %endif
   586                              <1>  %endif
   586 00000470 B81F000000          <1>  mov eax, %1
   586                              <1> 
   586 00000475 CD40                <1>  int 40h
   587                                  
   588 00000477 E8C8000000              	call	waitforkey
   589                                  
   590                                  	;mov	byte [tcolor], 0FFFFFFh
   591                                  
   592 0000047C BE2B002B00              	mov	esi, 43*65536+43
   593 00000481 BD[3D060000]            	mov	ebp, txt_blue
   594 00000486 E8F4000000               	call	print_text
   595                                  	
   596 0000048B E8B4000000              	call	waitforkey
   597                                  
   598 00000490 BE2B009900              	mov	esi, 153*65536+43
   599 00000495 BD[42060000]            	mov	ebp, txt_red
   600 0000049A E8E0000000               	call	print_text
   601                                  	
   602 0000049F E8A0000000              	call	waitforkey
   603                                  
   604 000004A4 BE2B000701              	mov	esi, 263*65536+43
   605 000004A9 BD[46060000]            	mov	ebp, txt_green
   606 000004AE E8CC000000               	call	print_text
   607                                  	
   608 000004B3 E88C000000              	call	waitforkey
   609                                  
   610 000004B8 BE2B007501              	mov	esi, 373*65536+43
   611 000004BD BD[4C060000]            	mov	ebp, txt_yellow
   612 000004C2 E8B8000000               	call	print_text
   613                                  	
   614 000004C7 E878000000              	call	waitforkey
   615                                  
   616 000004CC C705[64060000]0000-     	mov	dword [tcolor], 0
   616 000004D4 0000               
   617                                  
   618 000004D6 BE2B000701              	mov	esi, 263*65536+43
   619 000004DB BD[46060000]            	mov	ebp, txt_green
   620 000004E0 E89A000000               	call	print_text
   621                                  	
   622 000004E5 E85A000000              	call	waitforkey
   623                                  
   624 000004EA BE2B007501              	mov	esi, 373*65536+43
   625 000004EF BD[4C060000]            	mov	ebp, txt_yellow
   626 000004F4 E886000000               	call	print_text
   627                                  	
   628 000004F9 E846000000              	call	waitforkey
   629                                  
   630                                  	; Replace white color (text) only in blue block
   631                                  	; (blue block starts at row 20)
   632                                  	
   633 000004FE B9FFFFFF00              	mov	ecx, 0FFFFFFh ; WHITE (current color)
   634 00000503 29D2                    	sub	edx, edx ; 0  ; BLACK (new color)
   635 00000505 BE28001400              	mov	esi, 20*65536+40 ; column 40, row 20
   636 0000050A BFA0006E00              	mov	edi, 110*65536+160 ; size: 110*160 
   637 0000050F BB1C020000              	mov	ebx, 021Ch ; Replace color in window
   638                                  	sys	_video
   638                              <1> 
   638                              <1> 
   638                              <1> 
   638                              <1> 
   638                              <1>  %if %0 >= 2
   638                              <1>  mov ebx, %2
   638                              <1>  %if %0 >= 3
   638                              <1>  mov ecx, %3
   638                              <1>  %if %0 = 4
   638                              <1>  mov edx, %4
   638                              <1>  %endif
   638                              <1>  %endif
   638                              <1>  %endif
   638 00000514 B81F000000          <1>  mov eax, %1
   638                              <1> 
   638 00000519 CD40                <1>  int 40h
   639                                  
   640 0000051B E824000000              	call	waitforkey
   641                                  
   642                                  	; Replace white color (text) only in red block
   643                                  	; (red block starts at row 130)
   644                                  	
   645                                  	;mov	ecx, 0FFFFFFh ; WHITE (current color)
   646                                  	;sub	edx, edx ; 0  ; BLACK (new color)
   647 00000520 BE28008200              	mov	esi, 130*65536+40 ; column 40, row 130
   648 00000525 BF78006E00              	mov	edi, 110*65536+120 ; size: 110*120 
   649                                  	;mov	ebx, 021Ch ; Replace color in window
   650                                  	sys	_video
   650                              <1> 
   650                              <1> 
   650                              <1> 
   650                              <1> 
   650                              <1>  %if %0 >= 2
   650                              <1>  mov ebx, %2
   650                              <1>  %if %0 >= 3
   650                              <1>  mov ecx, %3
   650                              <1>  %if %0 = 4
   650                              <1>  mov edx, %4
   650                              <1>  %endif
   650                              <1>  %endif
   650                              <1>  %endif
   650 0000052A B81F000000          <1>  mov eax, %1
   650                              <1> 
   650 0000052F CD40                <1>  int 40h
   651                                  
   652 00000531 E80E000000              	call	waitforkey
   653                                  
   654                                  terminate:
   655 00000536 E82C000000              	call	set_text_mode
   656                                  	sys	_exit
   656                              <1> 
   656                              <1> 
   656                              <1> 
   656                              <1> 
   656                              <1>  %if %0 >= 2
   656                              <1>  mov ebx, %2
   656                              <1>  %if %0 >= 3
   656                              <1>  mov ecx, %3
   656                              <1>  %if %0 = 4
   656                              <1>  mov edx, %4
   656                              <1>  %endif
   656                              <1>  %endif
   656                              <1>  %endif
   656 0000053B B801000000          <1>  mov eax, %1
   656                              <1> 
   656 00000540 CD40                <1>  int 40h
   657                                  halt:
   658 00000542 EBFE                    	jmp	short halt
   659                                  
   660                                  waitforkey:
   661 00000544 B401                    	mov	ah, 1
   662 00000546 CD32                    	int	32h
   663 00000548 740B                    	jz	short getkey
   664 0000054A FF05[60060000]          	inc	dword [counter]
   665 00000550 90                      	nop
   666 00000551 90                      	nop
   667 00000552 90                      	nop
   668 00000553 EBEF                    	jmp	short waitforkey
   669                                  getkey:
   670 00000555 30E4                    	xor	ah, ah
   671 00000557 CD32                    	int	32h
   672                                  
   673 00000559 663D032E                	cmp	ax, 2E03h
   674 0000055D 7405                    	je	short _terminate
   675 0000055F 3C1B                    	cmp	al, 1Bh ; ESC key
   676 00000561 7401                    	je	short _terminate
   677 00000563 C3                      	retn
   678                                  _terminate:
   679 00000564 58                      	pop	eax ; return address
   680 00000565 EBCF                    	jmp	short terminate
   681                                  	
   682                                  set_text_mode:
   683 00000567 30E4                    	xor    ah, ah
   684 00000569 B003                    	mov    al, 3                        
   685                                   	;int   10h ; al = 03h text mode, int 10 video
   686 0000056B CD31                    	int    31h ; TRDOS 386 - Video interrupt
   687 0000056D C3                      	retn
   688                                  
   689                                  print_msg:
   690 0000056E B40E                    	mov	ah, 0Eh
   691 00000570 BB07000000              	mov	ebx, 7
   692                                  	;mov	bl, 7 ; char attribute & color
   693                                  p_next_chr:
   694 00000575 AC                      	lodsb
   695 00000576 08C0                    	or	al, al
   696 00000578 7404                    	jz	short p_retn ; retn	
   697 0000057A CD31                    	int	31h
   698 0000057C EBF7                    	jmp	short p_next_chr
   699                                  p_retn:
   700 0000057E C3                      	retn
   701                                  
   702                                  print_text:
   703                                  	; ebp = text address
   704                                  	; esi = row/column position (si = column)
   705                                  p_d_x:
   706                                  	;mov	dh, 0 ; 8x16 system font
   707 0000057F B606                    	mov	dh, 6 ; 32*64 scaled font (base: 8*16 system font) 
   708                                  p_d_x_n:
   709 00000581 8A5500                  	mov	dl, [ebp]
   710 00000584 20D2                    	and	dl, dl
   711 00000586 7419                    	jz	short p_d_x_ok
   712                                  	sys	_video, 020Fh, [tcolor] 
   712                              <1> 
   712                              <1> 
   712                              <1> 
   712                              <1> 
   712                              <1>  %if %0 >= 2
   712 00000588 BB0F020000          <1>  mov ebx, %2
   712                              <1>  %if %0 >= 3
   712 0000058D 8B0D[64060000]      <1>  mov ecx, %3
   712                              <1>  %if %0 = 4
   712                              <1>  mov edx, %4
   712                              <1>  %endif
   712                              <1>  %endif
   712                              <1>  %endif
   712 00000593 B81F000000          <1>  mov eax, %1
   712                              <1> 
   712 00000598 CD40                <1>  int 40h
   713 0000059A 45                      	inc	ebp
   714 0000059B 6683C624                	add	si, 36 ; next char pos
   715 0000059F EBE0                    	jmp	short p_d_x_n
   716                                  p_d_x_ok:
   717 000005A1 C3                      	retn
   718                                  
   719                                  program_msg:
   720 000005A2 5452444F5320333836-     	db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Block Operations"
   720 000005AB 2076322E302E33202D-
   720 000005B4 202827737973766964-
   720 000005BD 656F27292054657374-
   720 000005C6 2050726F6772616D20-
   720 000005CF 2D20426C6F636B204F-
   720 000005D8 7065726174696F6E73 
   721 000005E1 0D0A                    	db 0Dh, 0Ah
   722 000005E3 6279204572646F6761-     	db "by Erdogan Tan - 28/02/2021"
   722 000005EC 6E2054616E202D2032-
   722 000005F5 382F30322F32303231 
   723                                  	;db 0Dh, 0Ah, 0
   724 000005FE 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah
   725 00000602 507265737320616E79-     	db "Press any key to continue .."
   725 0000060B 206B657920746F2063-
   725 00000614 6F6E74696E7565202E-
   725 0000061D 2E                 
   726 0000061E 0D0A                    	db 0Dh, 0Ah	
   727 00000620 285072657373204553-     	db "(Press ESC to exit) .."
   727 00000629 4320746F2065786974-
   727 00000632 29202E2E           
   728 00000636 0D0A                    	db 0Dh, 0Ah
   729 00000638 0D0A                    	db 0Dh, 0Ah
   730                                  
   731                                  nextline:
   732 0000063A 0D0A00                  	db 0Dh, 0Ah, 0
   733                                  
   734                                  txt_blue:
   735 0000063D 424C554500              	db "BLUE", 0
   736                                  txt_red:
   737 00000642 52454400                	db "RED", 0
   738                                  txt_green:
   739 00000646 475245454E00            	db "GREEN", 0
   740                                  txt_yellow:
   741 0000064C 59454C4C4F5700          	db "YELLOW", 0
   742                                  txt_white:
   743 00000653 574849544500            	db "WHITE", 0
   744                                  txt_black:
   745 00000659 424C41434B00            	db "BLACK", 0	
   746                                  
   747                                  bss:
   748                                  
   749                                  ABSOLUTE bss
   750                                  
   751 0000065F <res 00000001>          alignb 4
   752                                  
   753                                  counter:
   754 00000660 <res 00000004>          	resd 1	
   755                                  
   756                                  bss_start:
   757 00000664 <res 00000004>          tcolor: resd 1
   758                                  
   759                                  fullscreen_buffer:
   760                                  whiteblock:
   761 00000668 <res 00012C00>          	resb 120*160*4	
   762                                  blueblock:
   763 00013268 <res 00012C00>          	resb 120*160*4
   764                                  redblock:
   765 00025E68 <res 00012C00>          	resb 120*160*4
   766                                  greenblock:
   767 00038A68 <res 00012C00>          	resb 120*160*4
   768                                  yellowblock:
   769 0004B668 <res 00012C00>          	resb 120*160*4
   770                                  
   771 0005E268 <res 000CE400>          	resb (307200*4)-(96000*4)	
   772                                  bss_end:
