     1                                  ; ****************************************************************************
     2                                  ; blocks1.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests
     3                                  ; ----------------------------------------------------------------------------
     4                                  ;
     5                                  ; 21/02/2021
     6                                  ;
     7                                  ; ****************************************************************************
     8                                  ; nasm blocks1.s -l blocks.txt -o BLOCKS1.PRG -Z error.txt
     9                                  
    10                                  ; 'sysvideo' bh = 2, block copy and modification test (VESA VBE mode 101h)
    11                                  
    12                                  ; 14/07/2020
    13                                  ; 31/12/2017
    14                                  ; TRDOS 386 (v2.0) system calls
    15                                  _ver 	equ 0
    16                                  _exit 	equ 1
    17                                  _fork 	equ 2
    18                                  _read 	equ 3
    19                                  _write	equ 4
    20                                  _open	equ 5
    21                                  _close 	equ 6
    22                                  _wait 	equ 7
    23                                  _create	equ 8
    24                                  _rename	equ 9
    25                                  _delete	equ 10
    26                                  _exec	equ 11
    27                                  _chdir	equ 12
    28                                  _time 	equ 13
    29                                  _mkdir 	equ 14
    30                                  _chmod	equ 15
    31                                  _rmdir	equ 16
    32                                  _break	equ 17
    33                                  _drive	equ 18
    34                                  _seek	equ 19
    35                                  _tell 	equ 20
    36                                  _memory	equ 21
    37                                  _prompt	equ 22
    38                                  _path	equ 23
    39                                  _env	equ 24
    40                                  _stime	equ 25
    41                                  _quit	equ 26	
    42                                  _intr	equ 27
    43                                  _dir	equ 28
    44                                  _emt 	equ 29
    45                                  _ldrvt 	equ 30
    46                                  _video 	equ 31
    47                                  _audio	equ 32
    48                                  _timer	equ 33
    49                                  _sleep	equ 34
    50                                  _msg    equ 35
    51                                  _geterr	equ 36
    52                                  _fpstat	equ 37
    53                                  _pri	equ 38
    54                                  _rele	equ 39
    55                                  _fff	equ 40
    56                                  _fnf	equ 41
    57                                  _alloc	equ 42
    58                                  _dalloc equ 43
    59                                  _calbac equ 44
    60                                  _dma	equ 45	
    61                                  
    62                                  %macro sys 1-4
    63                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)	
    64                                      ; 03/09/2015	
    65                                      ; 13/04/2015
    66                                      ; Retro UNIX 386 v1 system call.		
    67                                      %if %0 >= 2   
    68                                          mov ebx, %2
    69                                          %if %0 >= 3    
    70                                              mov ecx, %3
    71                                              %if %0 = 4
    72                                                 mov edx, %4   
    73                                              %endif
    74                                          %endif
    75                                      %endif
    76                                      mov eax, %1
    77                                      ;int 30h
    78                                      int 40h ; TRDOS 386 (TRDOS v2.0)		   
    79                                  %endmacro
    80                                  
    81                                  ; Retro UNIX 386 v1 system call format:
    82                                  ; sys systemcall (eax) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
    83                                  
    84                                  [BITS 32] ; We need 32-bit intructions for protected mode
    85                                  
    86                                  [ORG 0] 
    87                                  
    88                                  START_CODE:
    89                                  	; clear bss
    90 00000000 BF[A0030000]            	mov	edi, bss_start
    91 00000005 B9002C0100              	mov	ecx, (bss_end - bss_start)/4
    92                                  	;xor	eax, eax
    93 0000000A F3AB                    	rep	stosd
    94                                  
    95                                  	; program message
    96 0000000C BE[00030000]            	mov	esi, program_msg
    97 00000011 E8D9020000              	call	print_msg
    98                                  
    99 00000016 30E4                    	xor	ah, ah
   100                                  	;int	16h	; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
   101                                  			; Return: AH = scan code, AL = character
   102 00000018 CD32                    	int	32h	; TRDOS 386 Keyboard interrupt 
   103                                  
   104                                  	; Set Video Mode to 101h ; 640x480, 256 colors
   105                                  	sys	_video, 08FFh, 101h
   105                              <1> 
   105                              <1> 
   105                              <1> 
   105                              <1> 
   105                              <1>  %if %0 >= 2
   105 0000001A BBFF080000          <1>  mov ebx, %2
   105                              <1>  %if %0 >= 3
   105 0000001F B901010000          <1>  mov ecx, %3
   105                              <1>  %if %0 = 4
   105                              <1>  mov edx, %4
   105                              <1>  %endif
   105                              <1>  %endif
   105                              <1>  %endif
   105 00000024 B81F000000          <1>  mov eax, %1
   105                              <1> 
   105 00000029 CD40                <1>  int 40h
   106 0000002B 09C0                    	or	eax, eax
   107                                  	;jz	short terminate
   108                                  	;mov	[LFB_ADDR], edx ; pointer to LFB info table/structure
   109 0000002D 7505                    	jnz	short set_vesa_mode_101h_ok
   110 0000002F E983020000              	jmp	terminate
   111                                  
   112                                  set_vesa_mode_101h_ok:
   113                                  	; Set initial block colors
   114 00000034 B9C0120000              	mov	ecx, (120*160)/4
   115 00000039 B80F0F0F0F              	mov	eax, 0F0F0F0Fh ; white 
   116 0000003E BF[A0030000]            	mov	edi, whiteblock
   117 00000043 F3AB                    	rep	stosd
   118 00000045 66B9C012                	mov	cx, 120*40
   119 00000049 B820202020              	mov	eax, 20202020h ; blue
   120 0000004E BF[A04E0000]            	mov	edi, blueblock
   121 00000053 F3AB                    	rep	stosd
   122 00000055 66B9C012                	mov	cx, 120*40
   123 00000059 B828282828              	mov	eax, 28282828h ; red
   124 0000005E BF[A0990000]            	mov	edi, redblock
   125 00000063 F3AB                    	rep	stosd
   126 00000065 66B9C012                	mov	cx, 120*40
   127 00000069 B830303030              	mov	eax, 30303030h ; green 
   128 0000006E BF[A0E40000]            	mov	edi, greenblock
   129 00000073 F3AB                    	rep	stosd
   130 00000075 66B9C012                	mov	cx, 120*40
   131 00000079 B82C2C2C2C              	mov	eax, 2C2C2C2Ch ; yellow
   132 0000007E BF[A02F0100]            	mov	edi, yellowblock
   133 00000083 F3AB                    	rep	stosd
   134                                  
   135                                  	; copy white block to screen
   136                                  	; at row 70, column 120
   137                                  	; (block size: 120(w)*160(h) 
   138                                  
   139 00000085 B978004600              	mov	ecx, (70*65536)+120
   140 0000008A BA7800A000              	mov	edx, (160*65536)+120 
   141 0000008F BE[A0030000]            	mov	esi, whiteblock
   142 00000094 BB10020000              	mov	ebx, 0210h ; non masked window copy
   143                                  	sys	_video
   143                              <1> 
   143                              <1> 
   143                              <1> 
   143                              <1> 
   143                              <1>  %if %0 >= 2
   143                              <1>  mov ebx, %2
   143                              <1>  %if %0 >= 3
   143                              <1>  mov ecx, %3
   143                              <1>  %if %0 = 4
   143                              <1>  mov edx, %4
   143                              <1>  %endif
   143                              <1>  %endif
   143                              <1>  %endif
   143 00000099 B81F000000          <1>  mov eax, %1
   143                              <1> 
   143 0000009E CD40                <1>  int 40h
   144                                  
   145 000000A0 E820020000              	call	waitforkey
   146                                  
   147                                  	; copy blue block to screen
   148                                  	; at row 160, column 260
   149                                  	; (block size: 120(w)*160(h) 
   150                                  
   151 000000A5 B90401A000              	mov	ecx, (160*65536)+260
   152 000000AA BA7800A000              	mov	edx, (160*65536)+120 
   153 000000AF BE[A04E0000]            	mov	esi, blueblock
   154 000000B4 BB10020000              	mov	ebx, 0210h ; non masked window copy
   155                                  	sys	_video
   155                              <1> 
   155                              <1> 
   155                              <1> 
   155                              <1> 
   155                              <1>  %if %0 >= 2
   155                              <1>  mov ebx, %2
   155                              <1>  %if %0 >= 3
   155                              <1>  mov ecx, %3
   155                              <1>  %if %0 = 4
   155                              <1>  mov edx, %4
   155                              <1>  %endif
   155                              <1>  %endif
   155                              <1>  %endif
   155 000000B9 B81F000000          <1>  mov eax, %1
   155                              <1> 
   155 000000BE CD40                <1>  int 40h
   156                                  
   157 000000C0 E800020000              	call	waitforkey
   158                                  
   159                                  	; copy red block to screen
   160                                  	; at row 250, column 120
   161                                  	; (block size: 120(w)*160(h) 
   162                                  
   163 000000C5 B97800FA00              	mov	ecx, (250*65536)+120
   164 000000CA BA7800A000              	mov	edx, (160*65536)+120 
   165 000000CF BE[A0990000]            	mov	esi, redblock
   166 000000D4 BB10020000              	mov	ebx, 0210h ; non masked window copy
   167                                  	sys	_video
   167                              <1> 
   167                              <1> 
   167                              <1> 
   167                              <1> 
   167                              <1>  %if %0 >= 2
   167                              <1>  mov ebx, %2
   167                              <1>  %if %0 >= 3
   167                              <1>  mov ecx, %3
   167                              <1>  %if %0 = 4
   167                              <1>  mov edx, %4
   167                              <1>  %endif
   167                              <1>  %endif
   167                              <1>  %endif
   167 000000D9 B81F000000          <1>  mov eax, %1
   167                              <1> 
   167 000000DE CD40                <1>  int 40h
   168                                  
   169 000000E0 E8E0010000              	call	waitforkey
   170                                  
   171                                  	; copy green block to screen
   172                                  	; at row 70, column 400
   173                                  	; (block size: 120(w)*160(h) 
   174                                  
   175 000000E5 B990014600              	mov	ecx, (70*65536)+400
   176 000000EA BA7800A000              	mov	edx, (160*65536)+120 
   177 000000EF BE[A0E40000]            	mov	esi, greenblock
   178 000000F4 BB10020000              	mov	ebx, 0210h ; non masked window copy
   179                                  	sys	_video
   179                              <1> 
   179                              <1> 
   179                              <1> 
   179                              <1> 
   179                              <1>  %if %0 >= 2
   179                              <1>  mov ebx, %2
   179                              <1>  %if %0 >= 3
   179                              <1>  mov ecx, %3
   179                              <1>  %if %0 = 4
   179                              <1>  mov edx, %4
   179                              <1>  %endif
   179                              <1>  %endif
   179                              <1>  %endif
   179 000000F9 B81F000000          <1>  mov eax, %1
   179                              <1> 
   179 000000FE CD40                <1>  int 40h
   180                                  
   181 00000100 E8C0010000              	call	waitforkey
   182                                  
   183                                  	; copy yellow block to screen
   184                                  	; at row 250, column 400
   185                                  	; (block size: 120(w)*160(h) 
   186                                  
   187 00000105 B99001FA00              	mov	ecx, (250*65536)+400
   188 0000010A BA7800A000              	mov	edx, (160*65536)+120 
   189 0000010F BE[A02F0100]            	mov	esi, yellowblock
   190 00000114 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 00000119 B81F000000          <1>  mov eax, %1
   191                              <1> 
   191 0000011E CD40                <1>  int 40h
   192                                  _2:
   193 00000120 E8A0010000              	call	waitforkey
   194                                  
   195                                  	; continue by using
   196                                  	; full screen color modification sub functions
   197                                  
   198                                  	; NOT pixel colors
   199 00000125 BB07020000              	mov	ebx, 0207h
   200                                  	sys	_video
   200                              <1> 
   200                              <1> 
   200                              <1> 
   200                              <1> 
   200                              <1>  %if %0 >= 2
   200                              <1>  mov ebx, %2
   200                              <1>  %if %0 >= 3
   200                              <1>  mov ecx, %3
   200                              <1>  %if %0 = 4
   200                              <1>  mov edx, %4
   200                              <1>  %endif
   200                              <1>  %endif
   200                              <1>  %endif
   200 0000012A B81F000000          <1>  mov eax, %1
   200                              <1> 
   200 0000012F CD40                <1>  int 40h
   201                                  
   202 00000131 E88F010000              	call	waitforkey
   203                                  
   204                                  	; NOT pixel colors
   205 00000136 BB07020000              	mov	ebx, 0207h
   206                                  	sys	_video
   206                              <1> 
   206                              <1> 
   206                              <1> 
   206                              <1> 
   206                              <1>  %if %0 >= 2
   206                              <1>  mov ebx, %2
   206                              <1>  %if %0 >= 3
   206                              <1>  mov ecx, %3
   206                              <1>  %if %0 = 4
   206                              <1>  mov edx, %4
   206                              <1>  %endif
   206                              <1>  %endif
   206                              <1>  %endif
   206 0000013B B81F000000          <1>  mov eax, %1
   206                              <1> 
   206 00000140 CD40                <1>  int 40h
   207                                  
   208 00000142 E87E010000              	call	waitforkey
   209                                  
   210                                  	; NEGate pixel colors
   211 00000147 BB08020000              	mov	ebx, 0208h
   212                                  	sys	_video
   212                              <1> 
   212                              <1> 
   212                              <1> 
   212                              <1> 
   212                              <1>  %if %0 >= 2
   212                              <1>  mov ebx, %2
   212                              <1>  %if %0 >= 3
   212                              <1>  mov ecx, %3
   212                              <1>  %if %0 = 4
   212                              <1>  mov edx, %4
   212                              <1>  %endif
   212                              <1>  %endif
   212                              <1>  %endif
   212 0000014C B81F000000          <1>  mov eax, %1
   212                              <1> 
   212 00000151 CD40                <1>  int 40h
   213                                  
   214 00000153 E86D010000              	call	waitforkey
   215                                  
   216                                  	; NEGate pixel colors
   217 00000158 BB08020000              	mov	ebx, 0208h
   218                                  	sys	_video
   218                              <1> 
   218                              <1> 
   218                              <1> 
   218                              <1> 
   218                              <1>  %if %0 >= 2
   218                              <1>  mov ebx, %2
   218                              <1>  %if %0 >= 3
   218                              <1>  mov ecx, %3
   218                              <1>  %if %0 = 4
   218                              <1>  mov edx, %4
   218                              <1>  %endif
   218                              <1>  %endif
   218                              <1>  %endif
   218 0000015D B81F000000          <1>  mov eax, %1
   218                              <1> 
   218 00000162 CD40                <1>  int 40h
   219                                  
   220 00000164 E85C010000              	call	waitforkey
   221                                  _0:
   222                                  	; INCrease pixel colors
   223 00000169 BB09020000              	mov	ebx, 0209h
   224                                  	sys	_video
   224                              <1> 
   224                              <1> 
   224                              <1> 
   224                              <1> 
   224                              <1>  %if %0 >= 2
   224                              <1>  mov ebx, %2
   224                              <1>  %if %0 >= 3
   224                              <1>  mov ecx, %3
   224                              <1>  %if %0 = 4
   224                              <1>  mov edx, %4
   224                              <1>  %endif
   224                              <1>  %endif
   224                              <1>  %endif
   224 0000016E B81F000000          <1>  mov eax, %1
   224                              <1> 
   224 00000173 CD40                <1>  int 40h
   225                                  
   226 00000175 E84B010000              	call	waitforkey
   227 0000017A 3C2B                    	cmp	al, '+'
   228 0000017C 74EB                    	je	short _0
   229                                  _1:
   230                                  	; DECrease pixel colors
   231 0000017E BB0A020000              	mov	ebx, 020Ah
   232                                  	sys	_video
   232                              <1> 
   232                              <1> 
   232                              <1> 
   232                              <1> 
   232                              <1>  %if %0 >= 2
   232                              <1>  mov ebx, %2
   232                              <1>  %if %0 >= 3
   232                              <1>  mov ecx, %3
   232                              <1>  %if %0 = 4
   232                              <1>  mov edx, %4
   232                              <1>  %endif
   232                              <1>  %endif
   232                              <1>  %endif
   232 00000183 B81F000000          <1>  mov eax, %1
   232                              <1> 
   232 00000188 CD40                <1>  int 40h
   233                                  
   234 0000018A E836010000              	call	waitforkey
   235                                  
   236 0000018F 3C2D                    	cmp	al, '-'
   237 00000191 74EB                    	je	short _1
   238 00000193 3C2B                    	cmp	al, '+'
   239 00000195 74D2                    	je	short _0
   240                                  
   241                                  	; CHANGE color (full screen)
   242 00000197 31C9                    	xor	ecx, ecx ; 0 ; black
   243 00000199 BB01020000              	mov	ebx, 0201h ; Full screen, new color
   244 0000019E B900000100              	mov	ecx, 65536
   245                                  blackloop:
   246 000001A3 09C9                    	or	ecx, ecx
   247 000001A5 90                      	nop
   248 000001A6 90                      	nop
   249 000001A7 90                      	nop
   250 000001A8 E2F9                     	loop	blackloop
   251                                  
   252 000001AA B90F0F0F0F              	mov	ecx, 0F0F0F0Fh ; white
   253 000001AF BB01020000              	mov	ebx, 0201h ; Full screen, new color
   254                                  	sys	_video
   254                              <1> 
   254                              <1> 
   254                              <1> 
   254                              <1> 
   254                              <1>  %if %0 >= 2
   254                              <1>  mov ebx, %2
   254                              <1>  %if %0 >= 3
   254                              <1>  mov ecx, %3
   254                              <1>  %if %0 = 4
   254                              <1>  mov edx, %4
   254                              <1>  %endif
   254                              <1>  %endif
   254                              <1>  %endif
   254 000001B4 B81F000000          <1>  mov eax, %1
   254                              <1> 
   254 000001B9 CD40                <1>  int 40h
   255 000001BB E805010000              	call	waitforkey
   256 000001C0 B920202020              	mov	ecx, 20202020h ; blue
   257 000001C5 BB01020000              	mov	ebx, 0201h ; Full screen, new color
   258                                  	sys	_video
   258                              <1> 
   258                              <1> 
   258                              <1> 
   258                              <1> 
   258                              <1>  %if %0 >= 2
   258                              <1>  mov ebx, %2
   258                              <1>  %if %0 >= 3
   258                              <1>  mov ecx, %3
   258                              <1>  %if %0 = 4
   258                              <1>  mov edx, %4
   258                              <1>  %endif
   258                              <1>  %endif
   258                              <1>  %endif
   258 000001CA B81F000000          <1>  mov eax, %1
   258                              <1> 
   258 000001CF CD40                <1>  int 40h
   259 000001D1 E8EF000000              	call	waitforkey
   260 000001D6 B928282828              	mov	ecx, 28282828h ; red
   261 000001DB BB01020000              	mov	ebx, 0201h ; Full screen, new color
   262                                  	sys	_video
   262                              <1> 
   262                              <1> 
   262                              <1> 
   262                              <1> 
   262                              <1>  %if %0 >= 2
   262                              <1>  mov ebx, %2
   262                              <1>  %if %0 >= 3
   262                              <1>  mov ecx, %3
   262                              <1>  %if %0 = 4
   262                              <1>  mov edx, %4
   262                              <1>  %endif
   262                              <1>  %endif
   262                              <1>  %endif
   262 000001E0 B81F000000          <1>  mov eax, %1
   262                              <1> 
   262 000001E5 CD40                <1>  int 40h
   263 000001E7 E8D9000000              	call	waitforkey
   264 000001EC B930303030              	mov	ecx, 30303030h ; green 
   265 000001F1 BB01020000              	mov	ebx, 0201h ; Full screen, new color
   266                                  	sys	_video
   266                              <1> 
   266                              <1> 
   266                              <1> 
   266                              <1> 
   266                              <1>  %if %0 >= 2
   266                              <1>  mov ebx, %2
   266                              <1>  %if %0 >= 3
   266                              <1>  mov ecx, %3
   266                              <1>  %if %0 = 4
   266                              <1>  mov edx, %4
   266                              <1>  %endif
   266                              <1>  %endif
   266                              <1>  %endif
   266 000001F6 B81F000000          <1>  mov eax, %1
   266                              <1> 
   266 000001FB CD40                <1>  int 40h
   267 000001FD E8C3000000              	call	waitforkey
   268 00000202 B92C2C2C2C              	mov	ecx, 2C2C2C2Ch ; yellow
   269 00000207 BB01020000              	mov	ebx, 0201h ; Full screen, new color
   270                                  	sys	_video
   270                              <1> 
   270                              <1> 
   270                              <1> 
   270                              <1> 
   270                              <1>  %if %0 >= 2
   270                              <1>  mov ebx, %2
   270                              <1>  %if %0 >= 3
   270                              <1>  mov ecx, %3
   270                              <1>  %if %0 = 4
   270                              <1>  mov edx, %4
   270                              <1>  %endif
   270                              <1>  %endif
   270                              <1>  %endif
   270 0000020C B81F000000          <1>  mov eax, %1
   270                              <1> 
   270 00000211 CD40                <1>  int 40h
   271                                  
   272 00000213 E8AD000000              	call	waitforkey
   273                                  
   274                                  	; Full screen copy
   275 00000218 BE[A0030000]            	mov	esi, fullscreen_buffer
   276 0000021D 89F7                    	mov	edi, esi
   277 0000021F 31C0                    	xor	eax, eax ; black
   278 00000221 B960090000              	mov	ecx, (640*15)/4
   279 00000226 F3AB                    	rep	stosd
   280 00000228 B80F0F0F0F              	mov	eax, 0F0F0F0Fh ; white
   281 0000022D B940060000              	mov	ecx, (640*10)/4	
   282 00000232 F3AB                    	rep	stosd
   283 00000234 31C0                    	xor	eax, eax ; black
   284 00000236 B920030000              	mov	ecx, (640*5)/4	
   285 0000023B F3AB                    	rep	stosd
   286 0000023D B820202020              	mov	eax, 20202020h ; blue
   287 00000242 B9803E0000              	mov	ecx, (640*100)/4
   288 00000247 F3AB                    	rep	stosd
   289 00000249 31C0                    	xor	eax, eax ; black
   290 0000024B B920030000              	mov	ecx, (640*5)/4	
   291 00000250 F3AB                    	rep	stosd
   292 00000252 B828282828              	mov	eax, 28282828h ; red
   293 00000257 B9803E0000              	mov	ecx, (640*100)/4
   294 0000025C F3AB                    	rep	stosd
   295 0000025E 31C0                    	xor	eax, eax ; black
   296 00000260 B940060000              	mov	ecx, (640*10)/4	
   297 00000265 F3AB                    	rep	stosd
   298 00000267 B830303030              	mov	eax, 30303030h ; green 
   299 0000026C B9803E0000              	mov	ecx, (640*100)/4
   300 00000271 F3AB                    	rep	stosd
   301 00000273 31C0                    	xor	eax, eax ; black
   302 00000275 B920030000              	mov	ecx, (640*5)/4	
   303 0000027A F3AB                    	rep	stosd
   304 0000027C B82C2C2C2C              	mov	eax, 2C2C2C2Ch ; yellow
   305 00000281 B9803E0000              	mov	ecx, (640*100)/4
   306 00000286 F3AB                    	rep	stosd
   307 00000288 31C0                    	xor	eax, eax ; black
   308 0000028A B920030000              	mov	ecx, (640*5)/4	
   309 0000028F F3AB                    	rep	stosd
   310 00000291 B80F0F0F0F              	mov	eax, 0F0F0F0Fh ; white
   311 00000296 B940060000              	mov	ecx, (640*10)/4	
   312 0000029B F3AB                    	rep	stosd
   313 0000029D 31C0                    	xor	eax, eax ; black
   314 0000029F B960090000              	mov	ecx, (640*15)/4	
   315 000002A4 F3AB                    	rep	stosd
   316                                  
   317 000002A6 BB00020000              	mov	ebx, 0200h ; Full screen copy
   318                                  	sys	_video
   318                              <1> 
   318                              <1> 
   318                              <1> 
   318                              <1> 
   318                              <1>  %if %0 >= 2
   318                              <1>  mov ebx, %2
   318                              <1>  %if %0 >= 3
   318                              <1>  mov ecx, %3
   318                              <1>  %if %0 = 4
   318                              <1>  mov edx, %4
   318                              <1>  %endif
   318                              <1>  %endif
   318                              <1>  %endif
   318 000002AB B81F000000          <1>  mov eax, %1
   318                              <1> 
   318 000002B0 CD40                <1>  int 40h
   319                                  
   320 000002B2 E80E000000              	call	waitforkey
   321                                  
   322                                  terminate:
   323 000002B7 E82C000000              	call	set_text_mode
   324                                  	sys	_exit
   324                              <1> 
   324                              <1> 
   324                              <1> 
   324                              <1> 
   324                              <1>  %if %0 >= 2
   324                              <1>  mov ebx, %2
   324                              <1>  %if %0 >= 3
   324                              <1>  mov ecx, %3
   324                              <1>  %if %0 = 4
   324                              <1>  mov edx, %4
   324                              <1>  %endif
   324                              <1>  %endif
   324                              <1>  %endif
   324 000002BC B801000000          <1>  mov eax, %1
   324                              <1> 
   324 000002C1 CD40                <1>  int 40h
   325                                  halt:
   326 000002C3 EBFE                    	jmp	short halt
   327                                  
   328                                  waitforkey:
   329 000002C5 B401                    	mov	ah, 1
   330 000002C7 CD32                    	int	32h
   331 000002C9 740B                    	jz	short getkey
   332 000002CB FF05[9C030000]          	inc	dword [counter]
   333 000002D1 90                      	nop
   334 000002D2 90                      	nop
   335 000002D3 90                      	nop
   336 000002D4 EBEF                    	jmp	short waitforkey
   337                                  getkey:
   338 000002D6 30E4                    	xor	ah, ah
   339 000002D8 CD32                    	int	32h
   340                                  
   341 000002DA 663D032E                	cmp	ax, 2E03h
   342 000002DE 7405                    	je	short _terminate
   343 000002E0 3C1B                    	cmp	al, 1Bh ; ESC key
   344 000002E2 7401                    	je	short _terminate
   345 000002E4 C3                      	retn
   346                                  _terminate:
   347 000002E5 58                      	pop	eax ; return address
   348 000002E6 EBCF                    	jmp	short terminate
   349                                  	
   350                                  set_text_mode:
   351 000002E8 30E4                    	xor    ah, ah
   352 000002EA B003                    	mov    al, 3                        
   353                                   	;int   10h ; al = 03h text mode, int 10 video
   354 000002EC CD31                    	int    31h ; TRDOS 386 - Video interrupt
   355 000002EE C3                      	retn
   356                                  
   357                                  print_msg:
   358 000002EF B40E                    	mov	ah, 0Eh
   359 000002F1 BB07000000              	mov	ebx, 7
   360                                  	;mov	bl, 7 ; char attribute & color
   361                                  p_next_chr:
   362 000002F6 AC                      	lodsb
   363 000002F7 08C0                    	or	al, al
   364 000002F9 7404                    	jz	short p_retn ; retn	
   365 000002FB CD31                    	int	31h
   366 000002FD EBF7                    	jmp	short p_next_chr
   367                                  p_retn:
   368 000002FF C3                      	retn
   369                                  
   370                                  program_msg:
   371 00000300 5452444F5320333836-     	db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Block Operations"
   371 00000309 2076322E302E33202D-
   371 00000312 202827737973766964-
   371 0000031B 656F27292054657374-
   371 00000324 2050726F6772616D20-
   371 0000032D 2D20426C6F636B204F-
   371 00000336 7065726174696F6E73 
   372 0000033F 0D0A                    	db 0Dh, 0Ah
   373 00000341 6279204572646F6761-     	db "by Erdogan Tan - 21/02/2021"
   373 0000034A 6E2054616E202D2032-
   373 00000353 312F30322F32303231 
   374                                  	;db 0Dh, 0Ah, 0
   375 0000035C 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah
   376 00000360 507265737320616E79-     	db "Press any key to continue .."
   376 00000369 206B657920746F2063-
   376 00000372 6F6E74696E7565202E-
   376 0000037B 2E                 
   377 0000037C 0D0A                    	db 0Dh, 0Ah	
   378 0000037E 285072657373204553-     	db "(Press ESC to exit) .."
   378 00000387 4320746F2065786974-
   378 00000390 29202E2E           
   379 00000394 0D0A                    	db 0Dh, 0Ah
   380 00000396 0D0A                    	db 0Dh, 0Ah
   381                                  
   382                                  nextline:
   383 00000398 0D0A                    	db 0Dh, 0Ah
   384                                  phase:	
   385 0000039A 00                      	db 0
   386                                  
   387                                  bss:
   388                                  
   389                                  ABSOLUTE bss
   390                                  
   391 0000039B <res 00000001>          alignb 4
   392                                  
   393 0000039C <res 00000004>          counter: resd 1	
   394                                  
   395                                  bss_start:
   396                                  fullscreen_buffer:
   397                                  whiteblock:
   398 000003A0 <res 00004B00>          	resb 120*160	
   399                                  blueblock:
   400 00004EA0 <res 00004B00>          	resb 120*160
   401                                  redblock:
   402 000099A0 <res 00004B00>          	resb 120*160
   403                                  greenblock:
   404 0000E4A0 <res 00004B00>          	resb 120*160
   405                                  yellowblock:
   406 00012FA0 <res 00004B00>          	resb 120*160
   407                                  
   408 00017AA0 <res 00033900>          	resb 307200-96000	
   409                                  bss_end:
