     1                                  ; ****************************************************************************
     2                                  ; svgabox.s - TRDOS 386 (TRDOS v2.0.3) Test Program - LFB data transfers
     3                                  ; ----------------------------------------------------------------------------
     4                                  ;
     5                                  ; 26/01/2021 (25/01/2021)
     6                                  ;
     7                                  ; ****************************************************************************
     8                                  ; nasm svgabox.s -l svgabox.txt -o SVGABOX.PRG -Z error.txt
     9                                  
    10                                  ; 14/07/2020
    11                                  ; 31/12/2017
    12                                  ; TRDOS 386 (v2.0) system calls
    13                                  _ver 	equ 0
    14                                  _exit 	equ 1
    15                                  _fork 	equ 2
    16                                  _read 	equ 3
    17                                  _write	equ 4
    18                                  _open	equ 5
    19                                  _close 	equ 6
    20                                  _wait 	equ 7
    21                                  _create	equ 8
    22                                  _rename	equ 9
    23                                  _delete	equ 10
    24                                  _exec	equ 11
    25                                  _chdir	equ 12
    26                                  _time 	equ 13
    27                                  _mkdir 	equ 14
    28                                  _chmod	equ 15
    29                                  _rmdir	equ 16
    30                                  _break	equ 17
    31                                  _drive	equ 18
    32                                  _seek	equ 19
    33                                  _tell 	equ 20
    34                                  _memory	equ 21
    35                                  _prompt	equ 22
    36                                  _path	equ 23
    37                                  _env	equ 24
    38                                  _stime	equ 25
    39                                  _quit	equ 26	
    40                                  _intr	equ 27
    41                                  _dir	equ 28
    42                                  _emt 	equ 29
    43                                  _ldrvt 	equ 30
    44                                  _video 	equ 31
    45                                  _audio	equ 32
    46                                  _timer	equ 33
    47                                  _sleep	equ 34
    48                                  _msg    equ 35
    49                                  _geterr	equ 36
    50                                  _fpstat	equ 37
    51                                  _pri	equ 38
    52                                  _rele	equ 39
    53                                  _fff	equ 40
    54                                  _fnf	equ 41
    55                                  _alloc	equ 42
    56                                  _dalloc equ 43
    57                                  _calbac equ 44
    58                                  _dma	equ 45	
    59                                  
    60                                  %macro sys 1-4
    61                                      ; 29/04/2016 - TRDOS 386 (TRDOS v2.0)	
    62                                      ; 03/09/2015	
    63                                      ; 13/04/2015
    64                                      ; Retro UNIX 386 v1 system call.		
    65                                      %if %0 >= 2   
    66                                          mov ebx, %2
    67                                          %if %0 >= 3    
    68                                              mov ecx, %3
    69                                              %if %0 = 4
    70                                                 mov edx, %4   
    71                                              %endif
    72                                          %endif
    73                                      %endif
    74                                      mov eax, %1
    75                                      ;int 30h
    76                                      int 40h ; TRDOS 386 (TRDOS v2.0)		   
    77                                  %endmacro
    78                                  
    79                                  ; Retro UNIX 386 v1 system call format:
    80                                  ; sys systemcall (eax) <arg1 (ebx)>, <arg2 (ecx)>, <arg3 (edx)>
    81                                  
    82                                  [BITS 32] ; We need 32-bit intructions for protected mode
    83                                  
    84                                  [ORG 0] 
    85                                  
    86                                  START_CODE:
    87                                  	; clear bss
    88 00000000 BF[54050000]            	mov	edi, bss_start
    89 00000005 B906100000              	mov	ecx, (bss_end - bss_start)/4
    90                                  	;xor	eax, eax
    91 0000000A F3AB                    	rep	stosd
    92                                  
    93                                  	; program message
    94 0000000C BE[50030000]            	mov	esi, program_msg
    95 00000011 E81C020000              	call	print_msg
    96                                  
    97                                  	; 26/01/2021
    98 00000016 30E4                    	xor	ah, ah
    99                                  	;int	16h	; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
   100                                  			; Return: AH = scan code, AL = character
   101 00000018 CD32                    	int	32h	; TRDOS 386 Keyboard interrupt 
   102                                  
   103                                  	; 25/01/2021 (TRDOS 386 v2.0.3)
   104                                  
   105                                  	; DIRECT LINEAR FRAME BUFFER ACCESS
   106                                   	;xor    ebx, ebx
   107                                   	;mov	bh, 6 ; Direct access/map to LFB address
   108                                   	;mov	bl, 5 ; bl = 05h -> 105h, VESA MODE 105h
   109 0000001A 66BB0506                	mov	bx, 605h  ; Direct access/map to LFB for VBE video mode 105h
   110                                  	;mov    eax, _video ; 1Fh
   111 0000001E B81F000000               	mov     eax, 1Fh ; sys _video ; TRDOS 386 Video functions
   112 00000023 CD40                     	int     40h   ; TRDOS 386 system call
   113 00000025 09C0                    	or	eax, eax
   114 00000027 7437                    	jz	short lfb_error
   115 00000029 A3[54050000]            	mov	[LFB_addr], eax
   116                                  
   117 0000002E C1E810                  	shr	eax, 16 ; ax = high word of LFB address	
   118 00000031 E8D9020000              	call	wordtohex
   119 00000036 A3[1B050000]            	mov	[lfb_addr_str], eax
   120                                  
   121 0000003B BE[F0040000]            	mov	esi, msg_lfb_ok
   122 00000040 E8ED010000              	call	print_msg	
   123                                  
   124 00000045 30E4                    	xor	ah, ah
   125                                  	;int	16h	; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
   126                                  			; Return: AH = scan code, AL = character
   127 00000047 CD32                    	int	32h	; TRDOS 386 Keyboard interrupt 
   128                                  
   129                                  	;xor	ecx, ecx			
   130                                  	
   131                                  set_vesa_vbe_mode:
   132 00000049 66B8024F                	mov    	ax, 4F02h ; vbe function 02h, set video mode
   133                                  	;int    10h	  ; bios video interrupt
   134 0000004D 66BB0141                	mov	bx, 4101h ; vbe mode 101h with LFB (640x480, 256 colors)
   135 00000051 CD31                    	int     31h ; TRDOS 386 - Video interrupt
   136 00000053 6683F84F                	cmp	ax, 004Fh
   137 00000057 741C                    	je	short vbe_mode_set_ok
   138                                  vbe_error:
   139 00000059 BE[B0040000]            	mov	esi, msg_vbe_error
   140 0000005E EB07                    	jmp	short error
   141                                  lfb_error:
   142 00000060 BE[D0040000]            	mov	esi, msg_lfb_error
   143 00000065 EB00                    	jmp	short error
   144                                  error:
   145 00000067 E8C6010000              	call	print_msg
   146                                  _terminate:
   147                                  	sys	_exit
   147                              <1> 
   147                              <1> 
   147                              <1> 
   147                              <1> 
   147                              <1>  %if %0 >= 2
   147                              <1>  mov ebx, %2
   147                              <1>  %if %0 >= 3
   147                              <1>  mov ecx, %3
   147                              <1>  %if %0 = 4
   147                              <1>  mov edx, %4
   147                              <1>  %endif
   147                              <1>  %endif
   147                              <1>  %endif
   147 0000006C B801000000          <1>  mov eax, %1
   147                              <1> 
   147 00000071 CD40                <1>  int 40h
   148                                  _hang:
   149 00000073 EBFE                    	jmp	short _hang
   150                                  
   151                                  vbe_mode_set_ok:
   152                                  	; create a box and the center of 640x480 screen 
   153                                  reset:	
   154 00000075 B380                    	mov	bl, 128  ; color
   155 00000077 881D[64050000]          	mov	[boxcolor], bl
   156 0000007D 881D[65050000]          	mov	[color], bl
   157                                  
   158 00000083 B140                    	mov	cl, 64
   159 00000085 880D[60050000]          	mov	[boxsize], cl 
   160                                  
   161                                  	; BL = Box (Square) Color
   162                                  	; CL = Box (Square) Size
   163 0000008B E8B3010000              	call	colorbox
   164                                  
   165                                  	; move colorbox to center of screen
   166                                  center:
   167 00000090 E84E020000              	call	movecenter
   168                                  _0:
   169 00000095 E8BA010000              	call	drawbox
   170                                  
   171                                  waitforkey:
   172 0000009A B401                    	mov	ah, 1
   173 0000009C CD32                    	int	32h
   174 0000009E 740B                    	jz	short getkey
   175 000000A0 FF05[68050000]          	inc	dword [counter]
   176 000000A6 90                      	nop
   177 000000A7 90                      	nop
   178 000000A8 90                      	nop
   179 000000A9 EBEF                    	jmp	short waitforkey
   180                                  getkey:
   181 000000AB 30E4                    	xor	ah, ah
   182 000000AD CD32                    	int	32h
   183                                  
   184 000000AF 663D032E                	cmp	ax, 2E03h
   185 000000B3 0F8466010000            	je	terminate
   186 000000B9 3C1B                    	cmp	al, 1Bh ; ESC key
   187 000000BB 0F845E010000            	je	terminate	
   188                                  
   189 000000C1 3C2B                    	cmp	al, '+'
   190 000000C3 7521                    	jne	short _2
   191                                  
   192                                  	; black box (clear box)
   193 000000C5 803D[60050000]78        	cmp	byte [boxsize], 120
   194 000000CC 77CC                    	ja	short waitforkey
   195                                  
   196                                  	; clear
   197                                  	;mov	byte [color], 0
   198 000000CE E8AB010000              	call	drawbox_x
   199                                  
   200                                  	; increase box size
   201 000000D3 8005[60050000]08        	add	byte [boxsize], 8
   202                                  _1:
   203 000000DA A0[64050000]            	mov	al, [boxcolor]
   204 000000DF A2[65050000]            	mov	[color], al
   205 000000E4 EBAF                    	jmp	short _0
   206                                  _2:
   207 000000E6 3C2D                    	cmp	al, '-'
   208 000000E8 7517                    	jne	short _3
   209                                  
   210                                  	; black box (clear box)
   211 000000EA 803D[60050000]48        	cmp	byte [boxsize], 72
   212 000000F1 720E                    	jb	short _3
   213                                  
   214                                  	; clear
   215                                  	;mov	byte [color], 0
   216 000000F3 E886010000              	call	drawbox_x
   217                                  
   218                                  	; decrease box size
   219 000000F8 802D[60050000]08        	sub	byte [boxsize], 8
   220 000000FF EBD9                    	jmp	short _1
   221                                  _3:
   222 00000101 3C20                    	cmp	al, 20h  ; space
   223 00000103 7509                    	jne	short _4
   224                                  	;inc	byte [boxcolor]
   225                                  	;xor	byte [ctype], 1 ; 26/01/2021
   226 00000105 8005[64050000]08        	add	byte [boxcolor], 8 	
   227 0000010C EBCC                    	jmp	short _1
   228                                  _4:
   229 0000010E 80FC4B                  	cmp	ah, 4Bh
   230 00000111 751D                    	jne	short _5
   231                                  
   232                                  	; left arrow
   233 00000113 66833D[5C050000]04      	cmp	word [x_pos], 4
   234 0000011B 0F8279FFFFFF            	jb	waitforkey
   235                                  	;cmp	word [x_pos], 0 ; 26/01/2021
   236                                  	;jna	waitforkey
   237                                  
   238                                  	; clear
   239                                  	;mov	byte [color], 0
   240 00000121 E858010000              	call	drawbox_x
   241                                  	
   242 00000126 66832D[5C050000]04      	sub	word [x_pos], 4
   243                                  	;dec	word [x_pos] ; 26/01/2021
   244 0000012E EBAA                    	jmp	short _1
   245                                  _5:
   246 00000130 80FC4D                  	cmp	ah, 4Dh
   247 00000133 752A                    	jne	short _6
   248                                  
   249                                  	; right arrow
   250 00000135 8B0D[5C050000]          	mov	ecx, [x_pos]
   251 0000013B 030D[60050000]          	add	ecx, [boxsize]
   252 00000141 81F97C020000            	cmp	ecx, 636
   253                                  	;cmp	ecx, 639 ; 26/01/2021
   254 00000147 0F874DFFFFFF            	ja	waitforkey
   255                                  
   256                                  	; clear
   257                                  	;mov	byte [color], 0
   258 0000014D E82C010000              	call	drawbox_x
   259                                  	
   260 00000152 668305[5C050000]04      	add	word [x_pos], 4
   261                                  	;inc	word [x_pos] ; 26/01/2021
   262 0000015A E97BFFFFFF              	jmp	_1
   263                                  _6:
   264 0000015F 80FC50                  	cmp	ah, 50h
   265 00000162 752A                    	jne	short _7
   266                                  
   267                                  	; down arrow
   268 00000164 8B0D[58050000]          	mov	ecx, [y_pos]
   269 0000016A 030D[60050000]          	add	ecx, [boxsize]
   270 00000170 81F9DC010000            	cmp	ecx, 476
   271                                  	;cmp	ecx, 479 ; 26/01/2021
   272 00000176 0F871EFFFFFF            	ja	waitforkey
   273                                  
   274                                  	; clear
   275                                  	;mov	byte [color], 0
   276 0000017C E8FD000000              	call	drawbox_x
   277                                  	
   278 00000181 668305[58050000]04      	add	word [y_pos], 4
   279                                  	;inc	word [y_pos] ; 26/01/2021
   280 00000189 E94CFFFFFF              	jmp	_1
   281                                  _7:
   282 0000018E 80FC48                  	cmp	ah, 48h
   283 00000191 7520                    	jne	short _8
   284                                  
   285                                  	; up arrow
   286 00000193 66833D[58050000]04      	cmp	word [y_pos], 4
   287 0000019B 0F82F9FEFFFF            	jb	waitforkey
   288                                  	;cmp	word [y_pos], 0 ; 26/01/2021
   289                                  	;jna	waitforkey
   290                                  
   291                                  	; clear
   292                                  	;mov	byte [color], 0
   293 000001A1 E8D8000000              	call	drawbox_x
   294                                  	
   295 000001A6 66832D[58050000]04      	sub	word [y_pos], 4
   296                                  	;dec	word [y_pos] ; 26/01/2021
   297 000001AE E927FFFFFF              	jmp	_1
   298                                  _8:
   299 000001B3 80FC47                  	cmp	ah, 47h ; Home key
   300 000001B6 7505                    	jne	short _9
   301 000001B8 E9D3FEFFFF              	jmp	center
   302                                  _9:
   303 000001BD 80FC4F                  	cmp	ah, 4Fh ; End key
   304 000001C0 7505                    	jne	short _10
   305 000001C2 E9AEFEFFFF              	jmp	reset
   306                                  _10:	
   307 000001C7 663D0D1C                	cmp	ax, 1C0Dh
   308                                  	;jne	waitforkey
   309 000001CB 750C                    	jne	short _11 ; 26/01/2021
   310 000001CD 8005[64050000]04        	add	byte [boxcolor], 4
   311 000001D4 E901FFFFFF              	jmp	_1
   312                                  	; 26/01/2021
   313                                  _11:	
   314 000001D9 80FC53                  	cmp	ah, 53h ; INSERT
   315 000001DC 750C                    	jne	short _12
   316                                  	;mov	byte [ctype], 1  ; frame
   317 000001DE 8035[66050000]01        	xor	byte [ctype], 1
   318 000001E5 E9B0FEFFFF              	jmp	waitforkey
   319                                  _12:
   320 000001EA 80FC52                  	cmp	ah, 52h  ; DEL
   321 000001ED 750C                    	jne	short _13
   322                                  	;mov	byte [ctype], 0  ; box
   323 000001EF 8035[66050000]01        	xor	byte [ctype], 1
   324 000001F6 E99FFEFFFF              	jmp	waitforkey
   325                                  _13:
   326 000001FB 80FC49                  	cmp	ah, 49h  ; Page UP
   327 000001FE 750B                    	jne	short _14
   328 00000200 FE0D[64050000]          	dec	byte [boxcolor]
   329 00000206 E9CFFEFFFF              	jmp	_1
   330                                  _14:
   331 0000020B 80FC51                  	cmp	ah, 51h  ; Page Down
   332 0000020E 0F8586FEFFFF            	jne	waitforkey
   333 00000214 FE05[64050000]          	inc	byte [boxcolor]
   334 0000021A E9BBFEFFFF              	jmp	_1	
   335                                  
   336                                  terminate:
   337 0000021F E825010000              	call	set_text_mode
   338                                  	sys	_exit
   338                              <1> 
   338                              <1> 
   338                              <1> 
   338                              <1> 
   338                              <1>  %if %0 >= 2
   338                              <1>  mov ebx, %2
   338                              <1>  %if %0 >= 3
   338                              <1>  mov ecx, %3
   338                              <1>  %if %0 = 4
   338                              <1>  mov edx, %4
   338                              <1>  %endif
   338                              <1>  %endif
   338                              <1>  %endif
   338 00000224 B801000000          <1>  mov eax, %1
   338                              <1> 
   338 00000229 CD40                <1>  int 40h
   339                                  halt:
   340 0000022B EBFE                    	jmp	short halt
   341                                  	
   342                                  next_line:
   343                                  	; next line
   344 0000022D BE[AD040000]            	mov	esi, nextline
   345                                  print_msg:
   346 00000232 B40E                    	mov	ah, 0Eh
   347 00000234 BB07000000              	mov	ebx, 7
   348                                  	;mov	bl, 7 ; char attribute & color
   349                                  p_next_chr:
   350 00000239 AC                      	lodsb
   351 0000023A 08C0                    	or	al, al
   352 0000023C 7404                    	jz	short p_retn ; retn	
   353 0000023E CD31                    	int	31h
   354 00000240 EBF7                    	jmp	short p_next_chr
   355                                  p_retn:
   356 00000242 C3                      	retn
   357                                  
   358                                  colorbox:
   359                                  	; BL = color
   360                                  	; CL = box size in pixels
   361                                  	
   362                                  	; Modified regs: eax, ecx, edi
   363                                  	
   364 00000243 0FB6C1                  	movzx	eax, cl
   365 00000246 F6E1                    	mul	cl
   366 00000248 89C1                    	mov	ecx, eax
   367 0000024A BF[6C050000]            	mov	edi, boxbuff
   368 0000024F 88D8                    	mov	al, bl
   369 00000251 F3AA                    	rep	stosb
   370 00000253 C3                      	retn	
   371                                  
   372                                  drawbox:
   373                                  	; INPUT:
   374                                  	;	[LFB_addr]
   375                                  	;	[x_pos]
   376                                  	;	[y_pos]
   377                                  	;	[boxsize]
   378                                  	;	[color]
   379                                  	;
   380                                  	; Modified registers: edi, eax, ecx, ebx, edx	
   381                                  
   382                                  	; 26/01/2021
   383 00000254 E868000000              	call	drawbox_p
   384                                  
   385                                  	;mov	edi, [LFB_addr]
   386                                  	;mov	eax, 640
   387                                  	;mul	dword [y_pos]
   388                                  	;add	eax, [x_pos]
   389                                  	;mov	ebx, [boxsize]
   390                                  	;add	edi, eax
   391                                  	;;mov	ecx, ebx  ; height = width	
   392                                  
   393                                  	; 26/01/2021
   394                                  	;mov	edx, ebx
   395                                  
   396 00000259 A0[65050000]            	mov	al, [color]
   397 0000025E 803D[66050000]00        	cmp	byte [ctype], 0 ; box/fill (1=line/frame)		
   398 00000265 7726                    	ja	short _dlines
   399                                  _dbox:
   400                                  	;push	ecx
   401 00000267 57                      	push	edi
   402 00000268 89D9                    	mov	ecx, ebx ; width
   403                                  	;mov	al, [color]
   404 0000026A F3AA                    	rep	stosb
   405 0000026C 5F                      	pop	edi
   406 0000026D 81C780020000            	add	edi, 640
   407                                  	;pop	ecx 	
   408                                  	;loop	_dbox 	 			
   409 00000273 4A                      	dec	edx
   410 00000274 75F1                    	jnz	short _dbox
   411 00000276 C605[67050000]00        	mov	byte [ptype], 0 ; box
   412 0000027D C3                      	retn
   413                                  
   414                                  drawbox_x:
   415                                  	 ; clear previous box (at previous position)
   416                                  
   417                                  	; 26/01/2021
   418 0000027E E83E000000              	call	drawbox_p
   419                                  	
   420                                  	; Black color
   421 00000283 28C0                    	sub	al, al
   422                                  	;mov	byte [color], 0 ; al = 0
   423                                  
   424 00000285 3805[67050000]          	cmp	byte [ptype], al ; 0
   425 0000028B 76DA                    	jna	short _dbox ; draw color filled box
   426                                  
   427                                  	; draw square frame
   428                                  _dlines:
   429                                  	; draw (x1,y1) to (x2,y1) horizontal line at first
   430 0000028D 89D9                    	mov	ecx, ebx ; length
   431 0000028F 49                      	dec	ecx
   432 00000290 F3AA                    	rep	stosb
   433                                  	; draw (x2,y1) to (x2,y2) vertical line
   434 00000292 89D9                    	mov	ecx, ebx ; height
   435                                  _dvline1:
   436 00000294 8807                    	mov	[edi], al
   437 00000296 81C780020000            	add	edi, 640
   438 0000029C E2F6                    	loop	_dvline1
   439                                  	; draw (x2,y2) to (x3,y2) horizontal line
   440 0000029E 81EF7F020000             	sub	edi, 639
   441 000002A4 29DF                    	sub	edi, ebx ; width
   442 000002A6 89D9                    	mov	ecx, ebx
   443 000002A8 F3AA                    	rep	stosb
   444                                  	; draw (x3,y2) to (x1,y1) vertical line
   445 000002AA 29DF                    	sub	edi, ebx
   446                                  _dvline2:
   447 000002AC 8807                    	mov	[edi], al
   448 000002AE 4A                      	dec	edx
   449 000002AF 7408                    	jz	short _dvline3
   450 000002B1 81EF80020000            	sub	edi, 640
   451 000002B7 EBF3                    	jmp	short _dvline2
   452                                  _dvline3:
   453 000002B9 C605[67050000]01        	mov	byte [ptype], 1 ; frame
   454 000002C0 C3                      	retn
   455                                  
   456                                  drawbox_p:
   457                                  	; prepare box start address and h/v size 
   458                                  
   459 000002C1 8B3D[54050000]          	mov	edi, [LFB_addr]
   460 000002C7 B880020000              	mov	eax, 640
   461 000002CC F725[58050000]          	mul	dword [y_pos]
   462 000002D2 0305[5C050000]          	add	eax, [x_pos]
   463 000002D8 8B1D[60050000]          	mov	ebx, [boxsize]
   464 000002DE 01C7                    	add	edi, eax
   465                                  	;mov	ecx, ebx  ; height = width	
   466                                  
   467                                  	; 26/01/2021
   468 000002E0 89DA                    	mov	edx, ebx
   469 000002E2 C3                      	retn
   470                                  
   471                                  movecenter:
   472                                  	; Modified registers: ecx	
   473                                  
   474 000002E3 B980020000              	mov	ecx, 640
   475 000002E8 662B0D[60050000]        	sub	cx, [boxsize]
   476 000002EF 66D1E9                  	shr	cx, 1
   477 000002F2 66890D[5C050000]        	mov	[x_pos], cx
   478 000002F9 66B9E001                	mov	cx, 480
   479 000002FD 662B0D[60050000]        	sub	cx, [boxsize]
   480 00000304 66D1E9                  	shr	cx, 1
   481 00000307 66890D[58050000]        	mov	[y_pos], cx
   482 0000030E C3                      	retn	
   483                                  
   484                                  wordtohex:
   485                                  	; INPUT ->
   486                                  	; 	ax = word (binary number)
   487                                  	; OUTPUT ->
   488                                  	;	eax = hexadecimal string
   489                                  	;
   490 0000030F 53                      	push	ebx
   491 00000310 31DB                    	xor	ebx, ebx
   492 00000312 86E0                    	xchg	ah, al
   493 00000314 6650                    	push	ax
   494 00000316 88E3                    	mov	bl, ah
   495 00000318 C0EB04                  	shr	bl, 4
   496 0000031B 8A83[44050000]          	mov	al, [ebx+hexchrs] 	 	
   497 00000321 88E3                    	mov	bl, ah
   498 00000323 80E30F                  	and	bl, 0Fh
   499 00000326 8AA3[44050000]          	mov	ah, [ebx+hexchrs]
   500 0000032C C1E010                  	shl	eax, 16
   501 0000032F 6658                    	pop	ax
   502 00000331 88C3                    	mov	bl, al
   503 00000333 C0EB04                  	shr	bl, 4
   504 00000336 8A9B[44050000]          	mov	bl, [ebx+hexchrs] 	 	
   505 0000033C 86D8                    	xchg	bl, al	 	
   506 0000033E 80E30F                  	and	bl, 0Fh
   507 00000341 8AA3[44050000]          	mov	ah, [ebx+hexchrs] 
   508 00000347 5B                      	pop	ebx	
   509 00000348 C3                      	retn
   510                                  
   511                                  set_text_mode:
   512 00000349 30E4                    	xor    ah, ah
   513 0000034B B003                    	mov    al, 3                        
   514                                   	;int   10h	; al = 03h text mode, int 10 video
   515 0000034D CD31                    	int    31h ; TRDOS 386 - Video interrupt
   516 0000034F C3                      	retn
   517                                  		
   518                                  program_msg:
   519 00000350 5452444F5320333836-     	db "TRDOS 386 v2.0.3 - Linear Frame Buffer ('sysvideo') Test Program"
   519 00000359 2076322E302E33202D-
   519 00000362 204C696E6561722046-
   519 0000036B 72616D652042756666-
   519 00000374 657220282773797376-
   519 0000037D 6964656F2729205465-
   519 00000386 73742050726F677261-
   519 0000038F 6D                 
   520 00000390 0D0A                    	db 0Dh, 0Ah
   521 00000392 6279204572646F6761-     	db "by Erdogan Tan - 26/01/2021"
   521 0000039B 6E2054616E202D2032-
   521 000003A4 362F30312F32303231 
   522                                  	;db 0Dh, 0Ah, 0
   523 000003AD 0D0A0D0A                	db 0Dh, 0Ah, 0Dh, 0Ah
   524                                  
   525 000003B1 557365204172726F77-     	db "Use Arrow Keys, Home, End to move the BOX .."
   525 000003BA 204B6579732C20486F-
   525 000003C3 6D652C20456E642074-
   525 000003CC 6F206D6F7665207468-
   525 000003D5 6520424F58202E2E   
   526 000003DD 0D0A                    	db 0Dh, 0Ah
   527 000003DF 557365202B2C2D206B-     	db "Use +,- keys to increase and decrease BOX size .."		
   527 000003E8 65797320746F20696E-
   527 000003F1 63726561736520616E-
   527 000003FA 642064656372656173-
   527 00000403 6520424F582073697A-
   527 0000040C 65202E2E           
   528 00000410 0D0A                    	db 0Dh, 0Ah
   529 00000412 557365205350414345-     	db "Use SPACE, ENTER, Pg Up, Pg Down keys to change box color .."
   529 0000041B 2C20454E5445522C20-
   529 00000424 50672055702C205067-
   529 0000042D 20446F776E206B6579-
   529 00000436 7320746F206368616E-
   529 0000043F 676520626F7820636F-
   529 00000448 6C6F72202E2E       
   530 0000044E 0D0A                    	db 0Dh, 0Ah	
   531 00000450 55736520496E736572-     	db "Use Insert, Delete keys to change square (frame/box) shape .."
   531 00000459 742C2044656C657465-
   531 00000462 206B65797320746F20-
   531 0000046B 6368616E6765207371-
   531 00000474 756172652028667261-
   531 0000047D 6D652F626F78292073-
   531 00000486 68617065202E2E     
   532 0000048D 0D0A                    	db 0Dh, 0Ah
   533 0000048F 0D0A                    	db 0Dh, 0Ah
   534 00000491 507265737320616E79-     	db "Press any key to continue .."
   534 0000049A 206B657920746F2063-
   534 000004A3 6F6E74696E7565202E-
   534 000004AC 2E                 
   535                                  nextline:
   536 000004AD 0D0A00                  	db 0Dh, 0Ah, 0	
   537                                  
   538                                  msg_vbe_error:
   539 000004B0 0D0A                    	db 0Dh, 0Ah
   540 000004B2 766573612076626520-     	db 'vesa vbe video mode error !'
   540 000004BB 766964656F206D6F64-
   540 000004C4 65206572726F722021 
   541 000004CD 0D0A00                  	db 0Dh, 0Ah, 0		
   542                                  msg_lfb_error:
   543 000004D0 0D0A                    	db 0Dh, 0Ah
   544 000004D2 6C696E656172206672-     	db 'linear frame buffer error !'
   544 000004DB 616D65206275666665-
   544 000004E4 72206572726F722021 
   545 000004ED 0D0A00                  	db 0Dh, 0Ah, 0
   546                                  
   547                                  msg_lfb_ok:
   548 000004F0 0D0A                    	db 0Dh, 0Ah
   549 000004F2 6C696E656172206672-     	db 'linear frame buffer ready .. (at address '
   549 000004FB 616D65206275666665-
   549 00000504 72207265616479202E-
   549 0000050D 2E2028617420616464-
   549 00000516 7265737320         
   550                                  lfb_addr_str: ; 8 (hex) digits
   551 0000051B 303030303030303068-     	db '00000000h)'
   551 00000524 29                 
   552 00000525 0D0A                    	db 0Dh, 0Ah
   553 00000527 70726573732061206B-     	db 'press a key to continue ..'	
   553 00000530 657920746F20636F6E-
   553 00000539 74696E7565202E2E   
   554 00000541 0D0A00                  	db 0Dh, 0Ah, 0
   555                                  
   556                                  hexchrs:
   557 00000544 303132333435363738-     	db '0123456789ABCDEF'
   557 0000054D 39414243444546     
   558                                  bss:
   559                                  
   560                                  ABSOLUTE bss
   561                                  
   562                                  alignb 4
   563                                  
   564                                  bss_start:
   565                                  
   566                                  LFB_addr:
   567 00000554 <res 00000004>          	resd 1	
   568                                  
   569 00000558 <res 00000004>          y_pos:	resd 1
   570                                  
   571 0000055C <res 00000004>          x_pos:	resd 1
   572                                  
   573                                  boxsize:
   574 00000560 <res 00000004>          	resd 1
   575                                  boxcolor:
   576 00000564 <res 00000001>          	resb 1
   577 00000565 <res 00000001>          color:	resb 1
   578 00000566 <res 00000001>          ctype:	resb 1 ; 0 = box, 1 = frame (square lines)
   579 00000567 <res 00000001>          ptype:	resb 1 ; previous type 		
   580                                  
   581                                  counter:
   582 00000568 <res 00000004>          	resd 1
   583                                  
   584                                  boxbuff:
   585 0000056C <res 00004000>          	resb 128*128
   586                                  
   587                                  bss_end:
