     1                                  ; ****************************************************************************
     2                                  ; blocks11.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests
     3                                  ; ----------------------------------------------------------------------------
     4                                  ;
     5                                  ; 28/02/2021
     6                                  ;
     7                                  ; ****************************************************************************
     8                                  ; nasm blocks11.s -l blocks11.txt -o BLOCKS11.PRG -Z error.txt
     9                                  ; (modified from 'blocks10.s', 28/02/2021)
    10                                  
    11                                  ; 'sysvideo' bh = 2, block copy and modification test (VESA VBE mode 112h)
    12                                  ; (640*480, 16 bit high 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[44060000]            	mov	edi, bss_start
    94 00000005 B901580200              	mov	ecx, (bss_end - bss_start)/4
    95                                  	;xor	eax, eax
    96 0000000A F3AB                    	rep	stosd
    97                                  
    98                                  	; program message
    99 0000000C BE[81050000]            	mov	esi, program_msg
   100 00000011 E837050000              	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                                  	; Set Video Mode to 111h ; 640x480, 16 bit high colors
   108                                  	;			 ; (RGB: 5:6:5)
   109                                  	sys	_video, 08FFh, 111h
   109                              <1> 
   109                              <1> 
   109                              <1> 
   109                              <1> 
   109                              <1>  %if %0 >= 2
   109 0000001A BBFF080000          <1>  mov ebx, %2
   109                              <1>  %if %0 >= 3
   109 0000001F B911010000          <1>  mov ecx, %3
   109                              <1>  %if %0 = 4
   109                              <1>  mov edx, %4
   109                              <1>  %endif
   109                              <1>  %endif
   109                              <1>  %endif
   109 00000024 B81F000000          <1>  mov eax, %1
   109                              <1> 
   109 00000029 CD40                <1>  int 40h
   110 0000002B 09C0                    	or	eax, eax
   111                                  	;jz	short terminate
   112                                  	;mov	[LFB_ADDR], edx ; pointer to LFB info table/structure
   113 0000002D 7505                    	jnz	short set_vesa_mode_112h_ok
   114 0000002F E9E1040000              	jmp	terminate
   115                                  
   116                                  set_vesa_mode_112h_ok:
   117                                  	; Set initial block colors
   118 00000034 B9004B0000              	mov	ecx, 120*160
   119 00000039 B8FFFF0000              	mov	eax, 0FFFFh ; white 
   120 0000003E BF[48060000]            	mov	edi, whiteblock
   121 00000043 F366AB                  	rep	stosw
   122                                  
   123 00000046 66B9004B                	mov	cx, 120*160
   124 0000004A 66B81F00                	mov	ax, 001Fh ; blue ; 00000000 00011111b 
   125 0000004E BF[489C0000]            	mov	edi, blueblock
   126 00000053 F366AB                  	rep	stosw
   127                                  
   128 00000056 66B9004B                	mov	cx, 120*160
   129 0000005A 66B800F8                	mov	ax, 0F800h ; red ; 11111000 00000000b 
   130 0000005E BF[48320100]            	mov	edi, redblock
   131 00000063 F366AB                  	rep	stosw
   132                                  
   133 00000066 66B9004B                	mov	cx, 120*160
   134 0000006A 66B8E007                	mov	ax, 07E0h ; green ; 00000111 11100000b 
   135 0000006E BF[48C80100]            	mov	edi, greenblock
   136 00000073 F366AB                  	rep	stosw
   137                                  
   138 00000076 66B9004B                	mov	cx, 120*160
   139 0000007A 66B8E0FF                	mov	ax, 0FFE0h ; yellow ; 11111111 11100000b
   140 0000007E BF[485E0200]            	mov	edi, yellowblock
   141 00000083 F366AB                  	rep	stosw
   142                                  
   143                                  	; copy white block to screen
   144                                  	; at row 70, column 120
   145                                  	; (block size: 120(w)*160(h) 
   146                                  
   147 00000086 B978004600              	mov	ecx, (70*65536)+120
   148 0000008B BA7800A000              	mov	edx, (160*65536)+120 
   149 00000090 BE[48060000]            	mov	esi, whiteblock
   150 00000095 BB10020000              	mov	ebx, 0210h ; non masked window copy
   151                                  	sys	_video
   151                              <1> 
   151                              <1> 
   151                              <1> 
   151                              <1> 
   151                              <1>  %if %0 >= 2
   151                              <1>  mov ebx, %2
   151                              <1>  %if %0 >= 3
   151                              <1>  mov ecx, %3
   151                              <1>  %if %0 = 4
   151                              <1>  mov edx, %4
   151                              <1>  %endif
   151                              <1>  %endif
   151                              <1>  %endif
   151 0000009A B81F000000          <1>  mov eax, %1
   151                              <1> 
   151 0000009F CD40                <1>  int 40h
   152                                  
   153                                  	; copy blue block to screen
   154                                  	; at row 160, column 260
   155                                  	; (block size: 120(w)*160(h) 
   156                                  
   157 000000A1 B90401A000              	mov	ecx, (160*65536)+260
   158 000000A6 BA7800A000              	mov	edx, (160*65536)+120 
   159 000000AB BE[489C0000]            	mov	esi, blueblock
   160 000000B0 BB10020000              	mov	ebx, 0210h ; non masked window copy
   161                                  	sys	_video
   161                              <1> 
   161                              <1> 
   161                              <1> 
   161                              <1> 
   161                              <1>  %if %0 >= 2
   161                              <1>  mov ebx, %2
   161                              <1>  %if %0 >= 3
   161                              <1>  mov ecx, %3
   161                              <1>  %if %0 = 4
   161                              <1>  mov edx, %4
   161                              <1>  %endif
   161                              <1>  %endif
   161                              <1>  %endif
   161 000000B5 B81F000000          <1>  mov eax, %1
   161                              <1> 
   161 000000BA CD40                <1>  int 40h
   162                                  
   163                                  	; copy red block to screen
   164                                  	; at row 250, column 120
   165                                  	; (block size: 120(w)*160(h) 
   166                                  
   167 000000BC B97800FA00              	mov	ecx, (250*65536)+120
   168 000000C1 BA7800A000              	mov	edx, (160*65536)+120 
   169 000000C6 BE[48320100]            	mov	esi, redblock
   170 000000CB BB10020000              	mov	ebx, 0210h ; non masked window copy
   171                                  	sys	_video
   171                              <1> 
   171                              <1> 
   171                              <1> 
   171                              <1> 
   171                              <1>  %if %0 >= 2
   171                              <1>  mov ebx, %2
   171                              <1>  %if %0 >= 3
   171                              <1>  mov ecx, %3
   171                              <1>  %if %0 = 4
   171                              <1>  mov edx, %4
   171                              <1>  %endif
   171                              <1>  %endif
   171                              <1>  %endif
   171 000000D0 B81F000000          <1>  mov eax, %1
   171                              <1> 
   171 000000D5 CD40                <1>  int 40h
   172                                  
   173                                  	; copy green block to screen
   174                                  	; at row 70, column 400
   175                                  	; (block size: 120(w)*160(h) 
   176                                  
   177 000000D7 B990014600              	mov	ecx, (70*65536)+400
   178 000000DC BA7800A000              	mov	edx, (160*65536)+120 
   179 000000E1 BE[48C80100]            	mov	esi, greenblock
   180 000000E6 BB10020000              	mov	ebx, 0210h ; non masked window copy
   181                                  	sys	_video
   181                              <1> 
   181                              <1> 
   181                              <1> 
   181                              <1> 
   181                              <1>  %if %0 >= 2
   181                              <1>  mov ebx, %2
   181                              <1>  %if %0 >= 3
   181                              <1>  mov ecx, %3
   181                              <1>  %if %0 = 4
   181                              <1>  mov edx, %4
   181                              <1>  %endif
   181                              <1>  %endif
   181                              <1>  %endif
   181 000000EB B81F000000          <1>  mov eax, %1
   181                              <1> 
   181 000000F0 CD40                <1>  int 40h
   182                                  
   183                                  	; copy yellow block to screen
   184                                  	; at row 250, column 400
   185                                  	; (block size: 120(w)*160(h) 
   186                                  
   187 000000F2 B99001FA00              	mov	ecx, (250*65536)+400
   188 000000F7 BA7800A000              	mov	edx, (160*65536)+120 
   189 000000FC BE[485E0200]            	mov	esi, yellowblock
   190 00000101 BB10020000              	mov	ebx, 0210h ; non masked window copy
   191                                  	sys	_video
   191                              <1> 
   191                              <1> 
   191                              <1> 
   191                              <1> 
   191                              <1>  %if %0 >= 2
   191                              <1>  mov ebx, %2
   191                              <1>  %if %0 >= 3
   191                              <1>  mov ecx, %3
   191                              <1>  %if %0 = 4
   191                              <1>  mov edx, %4
   191                              <1>  %endif
   191                              <1>  %endif
   191                              <1>  %endif
   191 00000106 B81F000000          <1>  mov eax, %1
   191                              <1> 
   191 0000010B CD40                <1>  int 40h
   192                                  
   193 0000010D E811040000              	call	waitforkey
   194                                  
   195                                  	; continue by using
   196                                  	; window color modification sub functions
   197                                  
   198                                  	; apply SUB to window's pixel colors
   199 00000112 B960804000              	mov	ecx, 408060h  
   200 00000117 BA78004600              	mov	edx, (70*65536)+120
   201 0000011C BE7800A000              	mov	esi, (160*65536)+120
   202 00000121 BB13020000              	mov	ebx, 0213h ; non masked window SUB op
   203                                  	sys	_video
   203                              <1> 
   203                              <1> 
   203                              <1> 
   203                              <1> 
   203                              <1>  %if %0 >= 2
   203                              <1>  mov ebx, %2
   203                              <1>  %if %0 >= 3
   203                              <1>  mov ecx, %3
   203                              <1>  %if %0 = 4
   203                              <1>  mov edx, %4
   203                              <1>  %endif
   203                              <1>  %endif
   203                              <1>  %endif
   203 00000126 B81F000000          <1>  mov eax, %1
   203                              <1> 
   203 0000012B CD40                <1>  int 40h
   204                                  
   205 0000012D E8F1030000              	call	waitforkey
   206                                  
   207                                  	; apply ADD to pixel colors of
   208                                  	; the window/block on row 70, column 120 with 
   209                                  	; block size 120(w)*160(h).
   210                                  	;mov	ecx, 408060h
   211                                  	;mov	edx, (70*65536)+120
   212                                  	;mov	esi, (160*65536)+120 
   213                                  	;mov	ebx, 0212h ; non masked window ADD op
   214 00000132 B312                    	mov	bl, 12h
   215                                  	sys	_video
   215                              <1> 
   215                              <1> 
   215                              <1> 
   215                              <1> 
   215                              <1>  %if %0 >= 2
   215                              <1>  mov ebx, %2
   215                              <1>  %if %0 >= 3
   215                              <1>  mov ecx, %3
   215                              <1>  %if %0 = 4
   215                              <1>  mov edx, %4
   215                              <1>  %endif
   215                              <1>  %endif
   215                              <1>  %endif
   215 00000134 B81F000000          <1>  mov eax, %1
   215                              <1> 
   215 00000139 CD40                <1>  int 40h
   216                                  
   217 0000013B E8E3030000              	call	waitforkey
   218                                  
   219                                  	; apply ADD to pixel colors of
   220                                  	; the window/block on row 250, column 120 with 
   221                                  	; block size 120(w)*160(h).
   222 00000140 B940000000              	mov	ecx, 40h
   223 00000145 BA7800FA00              	mov	edx, (250*65536)+120
   224                                  	;mov	esi, (160*65536)+120 
   225                                  	;mov	ebx, 0212h ; non masked window ADD op
   226 0000014A B312                    	mov	bl, 12h
   227                                  	sys	_video
   227                              <1> 
   227                              <1> 
   227                              <1> 
   227                              <1> 
   227                              <1>  %if %0 >= 2
   227                              <1>  mov ebx, %2
   227                              <1>  %if %0 >= 3
   227                              <1>  mov ecx, %3
   227                              <1>  %if %0 = 4
   227                              <1>  mov edx, %4
   227                              <1>  %endif
   227                              <1>  %endif
   227                              <1>  %endif
   227 0000014C B81F000000          <1>  mov eax, %1
   227                              <1> 
   227 00000151 CD40                <1>  int 40h
   228                                  
   229 00000153 E8CB030000              	call	waitforkey
   230                                  
   231                                  	; apply SUB to window's pixel colors
   232                                  	;mov	ecx, 40h  
   233                                  	;mov	edx, (250*65536)+120
   234                                  	;mov	esi, (160*65536)+120 
   235                                  	;mov	ebx, 0213h ; non masked window SUB op
   236 00000158 B313                    	mov	bl, 13h
   237                                  	sys	_video
   237                              <1> 
   237                              <1> 
   237                              <1> 
   237                              <1> 
   237                              <1>  %if %0 >= 2
   237                              <1>  mov ebx, %2
   237                              <1>  %if %0 >= 3
   237                              <1>  mov ecx, %3
   237                              <1>  %if %0 = 4
   237                              <1>  mov edx, %4
   237                              <1>  %endif
   237                              <1>  %endif
   237                              <1>  %endif
   237 0000015A B81F000000          <1>  mov eax, %1
   237                              <1> 
   237 0000015F CD40                <1>  int 40h
   238                                  
   239 00000161 E8BD030000              	call	waitforkey
   240                                  
   241                                  	; or, and, xor
   242                                  
   243                                  	; apply AND to window's pixel colors
   244 00000166 B97F7F0700              	mov	ecx, 077F7Fh 
   245 0000016B BA78004600              	mov	edx, (70*65536)+120
   246                                  	;mov	esi, (160*65536)+120 
   247                                  	;mov	ebx, 0215h ; non masked window AND op
   248 00000170 B315                    	mov	bl, 15h
   249                                  	sys	_video
   249                              <1> 
   249                              <1> 
   249                              <1> 
   249                              <1> 
   249                              <1>  %if %0 >= 2
   249                              <1>  mov ebx, %2
   249                              <1>  %if %0 >= 3
   249                              <1>  mov ecx, %3
   249                              <1>  %if %0 = 4
   249                              <1>  mov edx, %4
   249                              <1>  %endif
   249                              <1>  %endif
   249                              <1>  %endif
   249 00000172 B81F000000          <1>  mov eax, %1
   249                              <1> 
   249 00000177 CD40                <1>  int 40h
   250                                  
   251 00000179 E8A5030000              	call	waitforkey
   252                                  
   253                                  	; apply AND to pixel colors of
   254                                  	; the window/block on row 160, column 260 with 
   255                                  	; block size 120(w)*160(h).
   256                                  	;mov	ecx, 077F7Fh
   257 0000017E BA0401A000              	mov	edx, (160*65536)+260
   258                                  	;mov	esi, (160*65536)+120 
   259                                  	;mov	ebx, 0215h ; non masked window AND op
   260                                  	sys	_video
   260                              <1> 
   260                              <1> 
   260                              <1> 
   260                              <1> 
   260                              <1>  %if %0 >= 2
   260                              <1>  mov ebx, %2
   260                              <1>  %if %0 >= 3
   260                              <1>  mov ecx, %3
   260                              <1>  %if %0 = 4
   260                              <1>  mov edx, %4
   260                              <1>  %endif
   260                              <1>  %endif
   260                              <1>  %endif
   260 00000183 B81F000000          <1>  mov eax, %1
   260                              <1> 
   260 00000188 CD40                <1>  int 40h
   261                                  
   262 0000018A E894030000              	call	waitforkey
   263                                  
   264                                  	; apply OR to pixel colors of
   265                                  	; the window/block on row 70, column 400 with 
   266                                  	; block size 120(w)*160(h).
   267 0000018F B950301000              	mov	ecx, 103050h
   268 00000194 BA90014600              	mov	edx, (70*65536)+400
   269                                  	;mov	esi, (160*65536)+120 
   270                                  	;mov	ebx, 0214h ; non masked window OR op
   271 00000199 B314                    	mov	bl, 14h
   272                                  	sys	_video
   272                              <1> 
   272                              <1> 
   272                              <1> 
   272                              <1> 
   272                              <1>  %if %0 >= 2
   272                              <1>  mov ebx, %2
   272                              <1>  %if %0 >= 3
   272                              <1>  mov ecx, %3
   272                              <1>  %if %0 = 4
   272                              <1>  mov edx, %4
   272                              <1>  %endif
   272                              <1>  %endif
   272                              <1>  %endif
   272 0000019B B81F000000          <1>  mov eax, %1
   272                              <1> 
   272 000001A0 CD40                <1>  int 40h
   273                                  
   274 000001A2 E87C030000              	call	waitforkey
   275                                  
   276                                  	; apply OR to pixel colors of
   277                                  	; the window/block on row 250, column 400 with 
   278                                  	; block size 120(w)*160(h).
   279                                  	;mov	ecx, 103050h
   280 000001A7 BA9001FA00              	mov	edx, (250*65536)+400
   281                                  	;mov	esi, (160*65536)+120 
   282                                  	;mov	ebx, 0214h ; non masked window OR op
   283                                  	sys	_video
   283                              <1> 
   283                              <1> 
   283                              <1> 
   283                              <1> 
   283                              <1>  %if %0 >= 2
   283                              <1>  mov ebx, %2
   283                              <1>  %if %0 >= 3
   283                              <1>  mov ecx, %3
   283                              <1>  %if %0 = 4
   283                              <1>  mov edx, %4
   283                              <1>  %endif
   283                              <1>  %endif
   283                              <1>  %endif
   283 000001AC B81F000000          <1>  mov eax, %1
   283                              <1> 
   283 000001B1 CD40                <1>  int 40h
   284                                  
   285 000001B3 E86B030000              	call	waitforkey
   286                                  
   287                                  	; apply XOR to pixel colors of
   288                                  	; the window/block on row 250, column 120 with 
   289                                  	; block size 120(w)*160(h).
   290 000001B8 B94F7F3F00              	mov	ecx, 3F7F4Fh
   291 000001BD BA7800FA00              	mov	edx, (250*65536)+120
   292                                  	;mov	esi, (160*65536)+120 
   293                                  	;mov	ebx, 0216h ; non masked window XOR op
   294 000001C2 B316                    	mov	bl, 16h
   295                                  	sys	_video
   295                              <1> 
   295                              <1> 
   295                              <1> 
   295                              <1> 
   295                              <1>  %if %0 >= 2
   295                              <1>  mov ebx, %2
   295                              <1>  %if %0 >= 3
   295                              <1>  mov ecx, %3
   295                              <1>  %if %0 = 4
   295                              <1>  mov edx, %4
   295                              <1>  %endif
   295                              <1>  %endif
   295                              <1>  %endif
   295 000001C4 B81F000000          <1>  mov eax, %1
   295                              <1> 
   295 000001C9 CD40                <1>  int 40h
   296                                  
   297 000001CB E853030000              	call	waitforkey
   298                                  
   299                                  	; apply XOR to pixel colors of
   300                                  	; the window/block on row 70, column 400 with 
   301                                  	; block size 120(w)*160(h).
   302                                  	;mov	ecx, 3F7F4Fh
   303 000001D0 BA90014600              	mov	edx, (70*65536)+400
   304                                  	;mov	esi, (160*65536)+120 
   305                                  	;mov	ebx, 0216h ; non masked window XOR op
   306                                  	sys	_video
   306                              <1> 
   306                              <1> 
   306                              <1> 
   306                              <1> 
   306                              <1>  %if %0 >= 2
   306                              <1>  mov ebx, %2
   306                              <1>  %if %0 >= 3
   306                              <1>  mov ecx, %3
   306                              <1>  %if %0 = 4
   306                              <1>  mov edx, %4
   306                              <1>  %endif
   306                              <1>  %endif
   306                              <1>  %endif
   306 000001D5 B81F000000          <1>  mov eax, %1
   306                              <1> 
   306 000001DA CD40                <1>  int 40h
   307                                  
   308 000001DC E842030000              	call	waitforkey
   309                                  
   310                                  	; Mix colors
   311                                  
   312                                  	; MIX pixel colors of
   313                                  	; the window/block on row 70, column 120 with 
   314                                  	; block size 120(w)*160(h).
   315 000001E1 B940201000              	mov	ecx, 102040h
   316 000001E6 BA78004600              	mov	edx, (70*65536)+120
   317                                  	;mov	esi, (160*65536)+120 
   318                                  	;mov	ebx, 021Bh ; non masked window MIX op
   319 000001EB B31B                    	mov	bl, 1Bh
   320                                  	sys	_video
   320                              <1> 
   320                              <1> 
   320                              <1> 
   320                              <1> 
   320                              <1>  %if %0 >= 2
   320                              <1>  mov ebx, %2
   320                              <1>  %if %0 >= 3
   320                              <1>  mov ecx, %3
   320                              <1>  %if %0 = 4
   320                              <1>  mov edx, %4
   320                              <1>  %endif
   320                              <1>  %endif
   320                              <1>  %endif
   320 000001ED B81F000000          <1>  mov eax, %1
   320                              <1> 
   320 000001F2 CD40                <1>  int 40h
   321                                  
   322 000001F4 E82A030000              	call	waitforkey
   323                                  
   324                                  	; MIX pixel colors of
   325                                  	; the window/block on row 160, column 260 with 
   326                                  	; block size 120(w)*160(h).
   327                                  	;mov	ecx, 102040h
   328 000001F9 BA0401A000              	mov	edx, (160*65536)+260
   329                                  	;mov	esi, (160*65536)+120 
   330                                  	;mov	ebx, 021Bh ; non masked window MIX op
   331                                  	sys	_video
   331                              <1> 
   331                              <1> 
   331                              <1> 
   331                              <1> 
   331                              <1>  %if %0 >= 2
   331                              <1>  mov ebx, %2
   331                              <1>  %if %0 >= 3
   331                              <1>  mov ecx, %3
   331                              <1>  %if %0 = 4
   331                              <1>  mov edx, %4
   331                              <1>  %endif
   331                              <1>  %endif
   331                              <1>  %endif
   331 000001FE B81F000000          <1>  mov eax, %1
   331                              <1> 
   331 00000203 CD40                <1>  int 40h
   332                                  
   333 00000205 E819030000              	call	waitforkey
   334                                  
   335                                  	; MIX pixel colors of
   336                                  	; the window/block on row 250, column 400 with 
   337                                  	; block size 120(w)*160(h).
   338                                  	;mov	ecx, 102040h
   339 0000020A BA9001FA00              	mov	edx, (250*65536)+400
   340                                  	;mov	esi, (160*65536)+120 
   341                                  	;mov	ebx, 021Bh ; non masked window MIX op
   342                                  	sys	_video
   342                              <1> 
   342                              <1> 
   342                              <1> 
   342                              <1> 
   342                              <1>  %if %0 >= 2
   342                              <1>  mov ebx, %2
   342                              <1>  %if %0 >= 3
   342                              <1>  mov ecx, %3
   342                              <1>  %if %0 = 4
   342                              <1>  mov edx, %4
   342                              <1>  %endif
   342                              <1>  %endif
   342                              <1>  %endif
   342 0000020F B81F000000          <1>  mov eax, %1
   342                              <1> 
   342 00000214 CD40                <1>  int 40h
   343                                  
   344 00000216 E808030000              	call	waitforkey
   345                                  
   346                                  	; CHANGE color (full screen)
   347 0000021B 31C9                    	xor	ecx, ecx ; 0 ; black
   348 0000021D BB01020000              	mov	ebx, 0201h ; Full screen, new color
   349                                  	sys	_video
   349                              <1> 
   349                              <1> 
   349                              <1> 
   349                              <1> 
   349                              <1>  %if %0 >= 2
   349                              <1>  mov ebx, %2
   349                              <1>  %if %0 >= 3
   349                              <1>  mov ecx, %3
   349                              <1>  %if %0 = 4
   349                              <1>  mov edx, %4
   349                              <1>  %endif
   349                              <1>  %endif
   349                              <1>  %endif
   349 00000222 B81F000000          <1>  mov eax, %1
   349                              <1> 
   349 00000227 CD40                <1>  int 40h
   350                                  
   351 00000229 B900000100              	mov	ecx, 65536
   352                                  blackloop:
   353 0000022E 09C9                    	or	ecx, ecx
   354 00000230 90                      	nop
   355 00000231 90                      	nop
   356 00000232 90                      	nop
   357 00000233 E2F9                     	loop	blackloop
   358                                  
   359 00000235 B9FFFF0000              	mov	ecx, 0FFFFh ; white
   360 0000023A BB01020000              	mov	ebx, 0201h ; Full screen, new color
   361                                  	sys	_video
   361                              <1> 
   361                              <1> 
   361                              <1> 
   361                              <1> 
   361                              <1>  %if %0 >= 2
   361                              <1>  mov ebx, %2
   361                              <1>  %if %0 >= 3
   361                              <1>  mov ecx, %3
   361                              <1>  %if %0 = 4
   361                              <1>  mov edx, %4
   361                              <1>  %endif
   361                              <1>  %endif
   361                              <1>  %endif
   361 0000023F B81F000000          <1>  mov eax, %1
   361                              <1> 
   361 00000244 CD40                <1>  int 40h
   362                                  
   363                                  	;mov	dword [tcolor], 0
   364 00000246 BEF000D000              	mov	esi, 208*65536+240
   365 0000024B BD[32060000]            	mov	ebp, txt_white
   366 00000250 E809030000               	call	print_text
   367                                  
   368 00000255 E8C9020000              	call	waitforkey
   369                                  
   370                                  	; full screen sub
   371 0000025A 66B900F8                	mov	cx, 0F800h
   372 0000025E B303                    	mov	bl, 03h
   373                                  	sys	_video	
   373                              <1> 
   373                              <1> 
   373                              <1> 
   373                              <1> 
   373                              <1>  %if %0 >= 2
   373                              <1>  mov ebx, %2
   373                              <1>  %if %0 >= 3
   373                              <1>  mov ecx, %3
   373                              <1>  %if %0 = 4
   373                              <1>  mov edx, %4
   373                              <1>  %endif
   373                              <1>  %endif
   373                              <1>  %endif
   373 00000260 B81F000000          <1>  mov eax, %1
   373                              <1> 
   373 00000265 CD40                <1>  int 40h
   374                                  
   375 00000267 E8B7020000              	call	waitforkey
   376                                  
   377                                  	; full screen add
   378                                  	;mov	cx, 0F800h
   379 0000026C B302                    	mov	bl, 02h
   380                                  	sys	_video
   380                              <1> 
   380                              <1> 
   380                              <1> 
   380                              <1> 
   380                              <1>  %if %0 >= 2
   380                              <1>  mov ebx, %2
   380                              <1>  %if %0 >= 3
   380                              <1>  mov ecx, %3
   380                              <1>  %if %0 = 4
   380                              <1>  mov edx, %4
   380                              <1>  %endif
   380                              <1>  %endif
   380                              <1>  %endif
   380 0000026E B81F000000          <1>  mov eax, %1
   380                              <1> 
   380 00000273 CD40                <1>  int 40h
   381                                  
   382 00000275 E8A9020000              	call	waitforkey
   383                                  
   384 0000027A 66B91F00                	mov	cx, 001Fh ; blue
   385 0000027E BB01020000              	mov	ebx, 0201h ; Full screen, new color
   386                                  	sys	_video
   386                              <1> 
   386                              <1> 
   386                              <1> 
   386                              <1> 
   386                              <1>  %if %0 >= 2
   386                              <1>  mov ebx, %2
   386                              <1>  %if %0 >= 3
   386                              <1>  mov ecx, %3
   386                              <1>  %if %0 = 4
   386                              <1>  mov edx, %4
   386                              <1>  %endif
   386                              <1>  %endif
   386                              <1>  %endif
   386 00000283 B81F000000          <1>  mov eax, %1
   386                              <1> 
   386 00000288 CD40                <1>  int 40h
   387                                  
   388 0000028A C705[44060000]FFFF-     	mov	dword [tcolor], 0FFFFFFh
   388 00000292 FF00               
   389 00000294 BE0201D000              	mov	esi, 208*65536+258
   390 00000299 BD[1C060000]            	mov	ebp, txt_blue
   391 0000029E E8BB020000               	call	print_text
   392                                  
   393 000002A3 E87B020000              	call	waitforkey
   394                                  
   395                                  	; full screen add
   396 000002A8 66B900F8                	mov	cx, 0F800h
   397 000002AC B302                    	mov	bl, 02h
   398                                  	sys	_video
   398                              <1> 
   398                              <1> 
   398                              <1> 
   398                              <1> 
   398                              <1>  %if %0 >= 2
   398                              <1>  mov ebx, %2
   398                              <1>  %if %0 >= 3
   398                              <1>  mov ecx, %3
   398                              <1>  %if %0 = 4
   398                              <1>  mov edx, %4
   398                              <1>  %endif
   398                              <1>  %endif
   398                              <1>  %endif
   398 000002AE B81F000000          <1>  mov eax, %1
   398                              <1> 
   398 000002B3 CD40                <1>  int 40h
   399                                  
   400 000002B5 E869020000              	call	waitforkey
   401                                  	
   402                                  	; full screen sub
   403                                  	;mov	cx, 0F800h
   404 000002BA B303                    	mov	bl, 03h
   405                                  	sys	_video
   405                              <1> 
   405                              <1> 
   405                              <1> 
   405                              <1> 
   405                              <1>  %if %0 >= 2
   405                              <1>  mov ebx, %2
   405                              <1>  %if %0 >= 3
   405                              <1>  mov ecx, %3
   405                              <1>  %if %0 = 4
   405                              <1>  mov edx, %4
   405                              <1>  %endif
   405                              <1>  %endif
   405                              <1>  %endif
   405 000002BC B81F000000          <1>  mov eax, %1
   405                              <1> 
   405 000002C1 CD40                <1>  int 40h
   406                                  
   407 000002C3 E85B020000              	call	waitforkey
   408                                  
   409                                  	;mov	cx, 0F800h ; red
   410 000002C8 BB01020000              	mov	ebx, 0201h ; Full screen, new color
   411                                  	sys	_video
   411                              <1> 
   411                              <1> 
   411                              <1> 
   411                              <1> 
   411                              <1>  %if %0 >= 2
   411                              <1>  mov ebx, %2
   411                              <1>  %if %0 >= 3
   411                              <1>  mov ecx, %3
   411                              <1>  %if %0 = 4
   411                              <1>  mov edx, %4
   411                              <1>  %endif
   411                              <1>  %endif
   411                              <1>  %endif
   411 000002CD B81F000000          <1>  mov eax, %1
   411                              <1> 
   411 000002D2 CD40                <1>  int 40h
   412                                  
   413                                  	;mov	dword [tcolor], 0FFFFFFh
   414 000002D4 BE1401D000              	mov	esi, 208*65536+276
   415 000002D9 BD[21060000]            	mov	ebp, txt_red
   416 000002DE E87B020000               	call	print_text
   417                                  
   418 000002E3 E83B020000              	call	waitforkey
   419                                  
   420                                  	; full screen add
   421 000002E8 66B9FF00                	mov	cx, 00FFh
   422 000002EC B302                    	mov	bl, 02h
   423                                  	sys	_video
   423                              <1> 
   423                              <1> 
   423                              <1> 
   423                              <1> 
   423                              <1>  %if %0 >= 2
   423                              <1>  mov ebx, %2
   423                              <1>  %if %0 >= 3
   423                              <1>  mov ecx, %3
   423                              <1>  %if %0 = 4
   423                              <1>  mov edx, %4
   423                              <1>  %endif
   423                              <1>  %endif
   423                              <1>  %endif
   423 000002EE B81F000000          <1>  mov eax, %1
   423                              <1> 
   423 000002F3 CD40                <1>  int 40h
   424                                  
   425 000002F5 E829020000              	call	waitforkey
   426                                  	
   427                                  	; full screen sub
   428                                  	;mov	cx, 00FFh
   429 000002FA B303                    	mov	bl, 03h
   430                                  	sys	_video
   430                              <1> 
   430                              <1> 
   430                              <1> 
   430                              <1> 
   430                              <1>  %if %0 >= 2
   430                              <1>  mov ebx, %2
   430                              <1>  %if %0 >= 3
   430                              <1>  mov ecx, %3
   430                              <1>  %if %0 = 4
   430                              <1>  mov edx, %4
   430                              <1>  %endif
   430                              <1>  %endif
   430                              <1>  %endif
   430 000002FC B81F000000          <1>  mov eax, %1
   430                              <1> 
   430 00000301 CD40                <1>  int 40h
   431                                  
   432 00000303 E81B020000              	call	waitforkey
   433                                  
   434                                  	; full screen OR
   435 00000308 66B9E007                	mov	cx, 07E0h
   436 0000030C B304                    	mov	bl, 04h
   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 0000030E B81F000000          <1>  mov eax, %1
   437                              <1> 
   437 00000313 CD40                <1>  int 40h
   438                                  
   439 00000315 E809020000              	call	waitforkey
   440                                  
   441                                  	; full screen AND
   442 0000031A 66B9E017                	mov	cx, 17E0h
   443 0000031E B51F                    	mov	ch, 1Fh
   444 00000320 B305                    	mov	bl, 05h
   445                                  	sys	_video
   445                              <1> 
   445                              <1> 
   445                              <1> 
   445                              <1> 
   445                              <1>  %if %0 >= 2
   445                              <1>  mov ebx, %2
   445                              <1>  %if %0 >= 3
   445                              <1>  mov ecx, %3
   445                              <1>  %if %0 = 4
   445                              <1>  mov edx, %4
   445                              <1>  %endif
   445                              <1>  %endif
   445                              <1>  %endif
   445 00000322 B81F000000          <1>  mov eax, %1
   445                              <1> 
   445 00000327 CD40                <1>  int 40h
   446                                  
   447 00000329 E8F5010000              	call	waitforkey
   448                                  	
   449                                  	; full screen XOR
   450 0000032E 66B97F3F                	mov	cx, 3F7Fh
   451 00000332 B306                    	mov	bl, 06h
   452                                  	sys	_video	
   452                              <1> 
   452                              <1> 
   452                              <1> 
   452                              <1> 
   452                              <1>  %if %0 >= 2
   452                              <1>  mov ebx, %2
   452                              <1>  %if %0 >= 3
   452                              <1>  mov ecx, %3
   452                              <1>  %if %0 = 4
   452                              <1>  mov edx, %4
   452                              <1>  %endif
   452                              <1>  %endif
   452                              <1>  %endif
   452 00000334 B81F000000          <1>  mov eax, %1
   452                              <1> 
   452 00000339 CD40                <1>  int 40h
   453                                  	
   454 0000033B E8E3010000              	call	waitforkey
   455                                  
   456 00000340 66B9E007                	mov	cx, 07E0h ; green 
   457 00000344 BB01020000              	mov	ebx, 0201h ; Full screen, new color
   458                                  	sys	_video
   458                              <1> 
   458                              <1> 
   458                              <1> 
   458                              <1> 
   458                              <1>  %if %0 >= 2
   458                              <1>  mov ebx, %2
   458                              <1>  %if %0 >= 3
   458                              <1>  mov ecx, %3
   458                              <1>  %if %0 = 4
   458                              <1>  mov edx, %4
   458                              <1>  %endif
   458                              <1>  %endif
   458                              <1>  %endif
   458 00000349 B81F000000          <1>  mov eax, %1
   458                              <1> 
   458 0000034E CD40                <1>  int 40h
   459                                  
   460 00000350 C705[44060000]0000-     	mov	dword [tcolor], 0
   460 00000358 0000               
   461 0000035A BEF000D000              	mov	esi, 208*65536+240
   462 0000035F BD[25060000]            	mov	ebp, txt_green
   463 00000364 E8F5010000               	call	print_text
   464                                  
   465 00000369 E8B5010000              	call	waitforkey
   466                                  
   467                                  	; full screen MIX
   468 0000036E 66B90BE1                	mov	cx, 0E10Bh
   469 00000372 B30B                    	mov	bl, 0Bh
   470                                  	sys	_video
   470                              <1> 
   470                              <1> 
   470                              <1> 
   470                              <1> 
   470                              <1>  %if %0 >= 2
   470                              <1>  mov ebx, %2
   470                              <1>  %if %0 >= 3
   470                              <1>  mov ecx, %3
   470                              <1>  %if %0 = 4
   470                              <1>  mov edx, %4
   470                              <1>  %endif
   470                              <1>  %endif
   470                              <1>  %endif
   470 00000374 B81F000000          <1>  mov eax, %1
   470                              <1> 
   470 00000379 CD40                <1>  int 40h
   471                                  
   472 0000037B E8A3010000              	call	waitforkey
   473                                  
   474 00000380 66B9E0FF                	mov	cx, 0FFE0h ; yellow
   475 00000384 BB01020000              	mov	ebx, 0201h ; Full screen, new color
   476                                  	sys	_video
   476                              <1> 
   476                              <1> 
   476                              <1> 
   476                              <1> 
   476                              <1>  %if %0 >= 2
   476                              <1>  mov ebx, %2
   476                              <1>  %if %0 >= 3
   476                              <1>  mov ecx, %3
   476                              <1>  %if %0 = 4
   476                              <1>  mov edx, %4
   476                              <1>  %endif
   476                              <1>  %endif
   476                              <1>  %endif
   476 00000389 B81F000000          <1>  mov eax, %1
   476                              <1> 
   476 0000038E CD40                <1>  int 40h
   477                                  
   478 00000390 C705[44060000]FFFF-     	mov	dword [tcolor], 0FFFFFFh
   478 00000398 FF00               
   479 0000039A BEDE00D000              	mov	esi, 208*65536+222
   480 0000039F BD[2B060000]            	mov	ebp, txt_yellow
   481 000003A4 E8B5010000               	call	print_text
   482                                  
   483 000003A9 E875010000              	call	waitforkey
   484                                  
   485                                  	; full screen NOT
   486 000003AE B307                    	mov	bl, 07h
   487                                  	sys	_video
   487                              <1> 
   487                              <1> 
   487                              <1> 
   487                              <1> 
   487                              <1>  %if %0 >= 2
   487                              <1>  mov ebx, %2
   487                              <1>  %if %0 >= 3
   487                              <1>  mov ecx, %3
   487                              <1>  %if %0 = 4
   487                              <1>  mov edx, %4
   487                              <1>  %endif
   487                              <1>  %endif
   487                              <1>  %endif
   487 000003B0 B81F000000          <1>  mov eax, %1
   487                              <1> 
   487 000003B5 CD40                <1>  int 40h
   488                                  
   489 000003B7 E867010000              	call	waitforkey
   490                                  
   491                                  	; full screen NOT
   492                                  	;mov	bl, 07h
   493                                  	sys	_video
   493                              <1> 
   493                              <1> 
   493                              <1> 
   493                              <1> 
   493                              <1>  %if %0 >= 2
   493                              <1>  mov ebx, %2
   493                              <1>  %if %0 >= 3
   493                              <1>  mov ecx, %3
   493                              <1>  %if %0 = 4
   493                              <1>  mov edx, %4
   493                              <1>  %endif
   493                              <1>  %endif
   493                              <1>  %endif
   493 000003BC B81F000000          <1>  mov eax, %1
   493                              <1> 
   493 000003C1 CD40                <1>  int 40h
   494                                  
   495 000003C3 E85B010000              	call	waitforkey
   496                                  
   497                                  	; full screen MIX
   498 000003C8 66B91F70                	mov	cx, 701Fh
   499 000003CC B30B                    	mov	bl, 0Bh
   500                                  	sys	_video
   500                              <1> 
   500                              <1> 
   500                              <1> 
   500                              <1> 
   500                              <1>  %if %0 >= 2
   500                              <1>  mov ebx, %2
   500                              <1>  %if %0 >= 3
   500                              <1>  mov ecx, %3
   500                              <1>  %if %0 = 4
   500                              <1>  mov edx, %4
   500                              <1>  %endif
   500                              <1>  %endif
   500                              <1>  %endif
   500 000003CE B81F000000          <1>  mov eax, %1
   500                              <1> 
   500 000003D3 CD40                <1>  int 40h
   501                                  
   502 000003D5 E849010000              	call	waitforkey
   503                                  
   504                                  	; Full screen copy
   505 000003DA BE[48060000]            	mov	esi, fullscreen_buffer
   506 000003DF 89F7                    	mov	edi, esi
   507                                  
   508                                  	; Black
   509 000003E1 B900190000              	mov	ecx, 640*10
   510 000003E6 31C0                    	xor	eax, eax ; black
   511 000003E8 F366AB                  	rep	stosw
   512                                  
   513                                  	; White
   514 000003EB B9800C0000              	mov	ecx, 640*5
   515 000003F0 48                      	dec	eax ; white
   516 000003F1 F366AB                  	rep	stosw
   517                                  
   518                                  	; Black
   519 000003F4 B9800C0000              	mov	ecx, 640*5
   520 000003F9 40                      	inc	eax ; black
   521 000003FA F366AB                  	rep	stosw
   522                                  
   523                                  	; Blue
   524 000003FD B900130100              	mov	ecx, 640*110
   525 00000402 B81F000000              	mov	eax, 11111b ; blue
   526 00000407 F366AB                  	rep	stosw
   527                                  
   528                                  	; Red
   529 0000040A B900130100              	mov	ecx, 640*110
   530 0000040F 66B800F8                	mov	ax, 1111100000000000b ; Red
   531 00000413 F366AB                  	rep	stosw
   532                                  
   533                                  	; Green
   534 00000416 B900130100              	mov	ecx, 640*110
   535 0000041B 66B8E007                	mov	ax, 11111100000b ; Green
   536 0000041F F366AB                  	rep	stosw
   537                                  
   538                                  	; Yellow
   539 00000422 B900130100              	mov	ecx, 640*110
   540 00000427 66B8E0FF                	mov	ax, 1111111111100000b ; Yellow
   541 0000042B F366AB                  	rep	stosw
   542                                  
   543                                  	; Black
   544 0000042E B9800C0000              	mov	ecx, 640*5
   545 00000433 31C0                    	xor	eax, eax ; black
   546 00000435 F366AB                  	rep	stosw
   547                                  
   548                                  	; White
   549 00000438 B9800C0000              	mov	ecx, 640*5
   550                                  	;mov	eax, 0FFFFFFh
   551 0000043D 48                      	dec	eax
   552 0000043E F366AB                  	rep	stosw
   553                                  
   554                                  	; Black
   555 00000441 B900190000              	mov	ecx, 640*10
   556                                  	;xor	eax, eax ; black
   557 00000446 40                      	inc	eax
   558 00000447 F366AB                  	rep	stosw
   559                                  
   560 0000044A BB00020000              	mov	ebx, 0200h ; Full screen copy
   561                                  	sys	_video
   561                              <1> 
   561                              <1> 
   561                              <1> 
   561                              <1> 
   561                              <1>  %if %0 >= 2
   561                              <1>  mov ebx, %2
   561                              <1>  %if %0 >= 3
   561                              <1>  mov ecx, %3
   561                              <1>  %if %0 = 4
   561                              <1>  mov edx, %4
   561                              <1>  %endif
   561                              <1>  %endif
   561                              <1>  %endif
   561 0000044F B81F000000          <1>  mov eax, %1
   561                              <1> 
   561 00000454 CD40                <1>  int 40h
   562                                  
   563 00000456 E8C8000000              	call	waitforkey
   564                                  
   565                                  	;mov	byte [tcolor], 0FFFFFFh
   566                                  
   567 0000045B BE2B002B00              	mov	esi, 43*65536+43
   568 00000460 BD[1C060000]            	mov	ebp, txt_blue
   569 00000465 E8F4000000               	call	print_text
   570                                  	
   571 0000046A E8B4000000              	call	waitforkey
   572                                  
   573 0000046F BE2B009900              	mov	esi, 153*65536+43
   574 00000474 BD[21060000]            	mov	ebp, txt_red
   575 00000479 E8E0000000               	call	print_text
   576                                  	
   577 0000047E E8A0000000              	call	waitforkey
   578                                  
   579 00000483 BE2B000701              	mov	esi, 263*65536+43
   580 00000488 BD[25060000]            	mov	ebp, txt_green
   581 0000048D E8CC000000               	call	print_text
   582                                  	
   583 00000492 E88C000000              	call	waitforkey
   584                                  
   585 00000497 BE2B007501              	mov	esi, 373*65536+43
   586 0000049C BD[2B060000]            	mov	ebp, txt_yellow
   587 000004A1 E8B8000000               	call	print_text
   588                                  	
   589 000004A6 E878000000              	call	waitforkey
   590                                  
   591 000004AB C705[44060000]0000-     	mov	dword [tcolor], 0
   591 000004B3 0000               
   592                                  
   593 000004B5 BE2B000701              	mov	esi, 263*65536+43
   594 000004BA BD[25060000]            	mov	ebp, txt_green
   595 000004BF E89A000000               	call	print_text
   596                                  	
   597 000004C4 E85A000000              	call	waitforkey
   598                                  
   599 000004C9 BE2B007501              	mov	esi, 373*65536+43
   600 000004CE BD[2B060000]            	mov	ebp, txt_yellow
   601 000004D3 E886000000               	call	print_text
   602                                  	
   603 000004D8 E846000000              	call	waitforkey
   604                                  
   605                                  	; Replace white color (text) only in blue block
   606                                  	; (blue block starts at row 20)
   607                                  	
   608 000004DD B9FFFF0000              	mov	ecx, 0FFFFh ; WHITE (current color)
   609 000004E2 29D2                    	sub	edx, edx ; 0  ; BLACK (new color)
   610 000004E4 BE28001400              	mov	esi, 20*65536+40 ; column 40, row 20
   611 000004E9 BFA0006E00              	mov	edi, 110*65536+160 ; size: 110*160 
   612 000004EE BB1C020000              	mov	ebx, 021Ch ; Replace color in window
   613                                  	sys	_video
   613                              <1> 
   613                              <1> 
   613                              <1> 
   613                              <1> 
   613                              <1>  %if %0 >= 2
   613                              <1>  mov ebx, %2
   613                              <1>  %if %0 >= 3
   613                              <1>  mov ecx, %3
   613                              <1>  %if %0 = 4
   613                              <1>  mov edx, %4
   613                              <1>  %endif
   613                              <1>  %endif
   613                              <1>  %endif
   613 000004F3 B81F000000          <1>  mov eax, %1
   613                              <1> 
   613 000004F8 CD40                <1>  int 40h
   614                                  
   615 000004FA E824000000              	call	waitforkey
   616                                  
   617                                  	; Replace white color (text) only in red block
   618                                  	; (red block starts at row 130)
   619                                  	
   620                                  	;mov	ecx, 0FFFFh ; WHITE (current color)
   621                                  	;sub	edx, edx ; 0  ; BLACK (new color)
   622 000004FF BE28008200              	mov	esi, 130*65536+40 ; column 40, row 130
   623 00000504 BF78006E00              	mov	edi, 110*65536+120 ; size: 110*120 
   624                                  	;mov	ebx, 021Ch ; Replace color in window
   625                                  	sys	_video
   625                              <1> 
   625                              <1> 
   625                              <1> 
   625                              <1> 
   625                              <1>  %if %0 >= 2
   625                              <1>  mov ebx, %2
   625                              <1>  %if %0 >= 3
   625                              <1>  mov ecx, %3
   625                              <1>  %if %0 = 4
   625                              <1>  mov edx, %4
   625                              <1>  %endif
   625                              <1>  %endif
   625                              <1>  %endif
   625 00000509 B81F000000          <1>  mov eax, %1
   625                              <1> 
   625 0000050E CD40                <1>  int 40h
   626                                  
   627 00000510 E80E000000              	call	waitforkey
   628                                  
   629                                  terminate:
   630 00000515 E82C000000              	call	set_text_mode
   631                                  	sys	_exit
   631                              <1> 
   631                              <1> 
   631                              <1> 
   631                              <1> 
   631                              <1>  %if %0 >= 2
   631                              <1>  mov ebx, %2
   631                              <1>  %if %0 >= 3
   631                              <1>  mov ecx, %3
   631                              <1>  %if %0 = 4
   631                              <1>  mov edx, %4
   631                              <1>  %endif
   631                              <1>  %endif
   631                              <1>  %endif
   631 0000051A B801000000          <1>  mov eax, %1
   631                              <1> 
   631 0000051F CD40                <1>  int 40h
   632                                  halt:
   633 00000521 EBFE                    	jmp	short halt
   634                                  
   635                                  waitforkey:
   636 00000523 B401                    	mov	ah, 1
   637 00000525 CD32                    	int	32h
   638 00000527 740B                    	jz	short getkey
   639 00000529 FF05[40060000]          	inc	dword [counter]
   640 0000052F 90                      	nop
   641 00000530 90                      	nop
   642 00000531 90                      	nop
   643 00000532 EBEF                    	jmp	short waitforkey
   644                                  getkey:
   645 00000534 30E4                    	xor	ah, ah
   646 00000536 CD32                    	int	32h
   647                                  
   648 00000538 663D032E                	cmp	ax, 2E03h
   649 0000053C 7405                    	je	short _terminate
   650 0000053E 3C1B                    	cmp	al, 1Bh ; ESC key
   651 00000540 7401                    	je	short _terminate
   652 00000542 C3                      	retn
   653                                  _terminate:
   654 00000543 58                      	pop	eax ; return address
   655 00000544 EBCF                    	jmp	short terminate
   656                                  	
   657                                  set_text_mode:
   658 00000546 30E4                    	xor    ah, ah
   659 00000548 B003                    	mov    al, 3                        
   660                                   	;int   10h ; al = 03h text mode, int 10 video
   661 0000054A CD31                    	int    31h ; TRDOS 386 - Video interrupt
   662 0000054C C3                      	retn
   663                                  
   664                                  print_msg:
   665 0000054D B40E                    	mov	ah, 0Eh
   666 0000054F BB07000000              	mov	ebx, 7
   667                                  	;mov	bl, 7 ; char attribute & color
   668                                  p_next_chr:
   669 00000554 AC                      	lodsb
   670 00000555 08C0                    	or	al, al
   671 00000557 7404                    	jz	short p_retn ; retn	
   672 00000559 CD31                    	int	31h
   673 0000055B EBF7                    	jmp	short p_next_chr
   674                                  p_retn:
   675 0000055D C3                      	retn
   676                                  
   677                                  print_text:
   678                                  	; ebp = text address
   679                                  	; esi = row/column position (si = column)
   680                                  p_d_x:
   681                                  	;mov	dh, 0 ; 8x16 system font
   682 0000055E B606                    	mov	dh, 6 ; 32*64 scaled font (base: 8*16 system font) 
   683                                  p_d_x_n:
   684 00000560 8A5500                  	mov	dl, [ebp]
   685 00000563 20D2                    	and	dl, dl
   686 00000565 7419                    	jz	short p_d_x_ok
   687                                  	sys	_video, 020Fh, [tcolor] 
   687                              <1> 
   687                              <1> 
   687                              <1> 
   687                              <1> 
   687                              <1>  %if %0 >= 2
   687 00000567 BB0F020000          <1>  mov ebx, %2
   687                              <1>  %if %0 >= 3
   687 0000056C 8B0D[44060000]      <1>  mov ecx, %3
   687                              <1>  %if %0 = 4
   687                              <1>  mov edx, %4
   687                              <1>  %endif
   687                              <1>  %endif
   687                              <1>  %endif
   687 00000572 B81F000000          <1>  mov eax, %1
   687                              <1> 
   687 00000577 CD40                <1>  int 40h
   688 00000579 45                      	inc	ebp
   689 0000057A 6683C624                	add	si, 36 ; next char pos
   690 0000057E EBE0                    	jmp	short p_d_x_n
   691                                  p_d_x_ok:
   692 00000580 C3                      	retn
   693                                  
   694                                  program_msg:
   695 00000581 5452444F5320333836-     	db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Block Operations"
   695 0000058A 2076322E302E33202D-
   695 00000593 202827737973766964-
   695 0000059C 656F27292054657374-
   695 000005A5 2050726F6772616D20-
   695 000005AE 2D20426C6F636B204F-
   695 000005B7 7065726174696F6E73 
   696 000005C0 0D0A                    	db 0Dh, 0Ah
   697 000005C2 6279204572646F6761-     	db "by Erdogan Tan - 28/02/2021"
   697 000005CB 6E2054616E202D2032-
   697 000005D4 382F30322F32303231 
   698                                  	;db 0Dh, 0Ah, 0
   699 000005DD 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah
   700 000005E1 507265737320616E79-     	db "Press any key to continue .."
   700 000005EA 206B657920746F2063-
   700 000005F3 6F6E74696E7565202E-
   700 000005FC 2E                 
   701 000005FD 0D0A                    	db 0Dh, 0Ah	
   702 000005FF 285072657373204553-     	db "(Press ESC to exit) .."
   702 00000608 4320746F2065786974-
   702 00000611 29202E2E           
   703 00000615 0D0A                    	db 0Dh, 0Ah
   704 00000617 0D0A                    	db 0Dh, 0Ah
   705                                  
   706                                  nextline:
   707 00000619 0D0A00                  	db 0Dh, 0Ah, 0
   708                                  
   709                                  txt_blue:
   710 0000061C 424C554500              	db "BLUE", 0
   711                                  txt_red:
   712 00000621 52454400                	db "RED", 0
   713                                  txt_green:
   714 00000625 475245454E00            	db "GREEN", 0
   715                                  txt_yellow:
   716 0000062B 59454C4C4F5700          	db "YELLOW", 0
   717                                  txt_white:
   718 00000632 574849544500            	db "WHITE", 0
   719                                  txt_black:
   720 00000638 424C41434B00            	db "BLACK", 0	
   721                                  
   722                                  bss:
   723                                  
   724                                  ABSOLUTE bss
   725                                  
   726 0000063E <res 00000002>          alignb 4
   727                                  
   728                                  counter:
   729 00000640 <res 00000004>          	resd 1	
   730                                  
   731                                  bss_start:
   732 00000644 <res 00000004>          tcolor: resd 1
   733                                  
   734                                  fullscreen_buffer:
   735                                  whiteblock:
   736 00000648 <res 00009600>          	resb 120*160*2
   737                                  blueblock:
   738 00009C48 <res 00009600>          	resb 120*160*2
   739                                  redblock:
   740 00013248 <res 00009600>          	resb 120*160*2
   741                                  greenblock:
   742 0001C848 <res 00009600>          	resb 120*160*2
   743                                  yellowblock:
   744 00025E48 <res 00009600>          	resb 120*160*2
   745                                  
   746 0002F448 <res 00067200>          	resb (307200*2)-(96000*2)	
   747                                  bss_end:
