1 ; **************************************************************************** 2 ; blocks7.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 27/02/2021 6 ; 7 ; **************************************************************************** 8 ; nasm blocks4.s -l blocks4.txt -o BLOCKS4.PRG -Z error.txt 9 ; (modified from 'blocks4.s', 22/02/2021) 10 11 ; 'sysvideo' bh = 1, block copy and modification test (VGA mode 13h) 12 13 ; 14/07/2020 14 ; 31/12/2017 15 ; TRDOS 386 (v2.0) system calls 16 _ver equ 0 17 _exit equ 1 18 _fork equ 2 19 _read equ 3 20 _write equ 4 21 _open equ 5 22 _close equ 6 23 _wait equ 7 24 _create equ 8 25 _rename equ 9 26 _delete equ 10 27 _exec equ 11 28 _chdir equ 12 29 _time equ 13 30 _mkdir equ 14 31 _chmod equ 15 32 _rmdir equ 16 33 _break equ 17 34 _drive equ 18 35 _seek equ 19 36 _tell equ 20 37 _memory equ 21 38 _prompt equ 22 39 _path equ 23 40 _env equ 24 41 _stime equ 25 42 _quit equ 26 43 _intr equ 27 44 _dir equ 28 45 _emt equ 29 46 _ldrvt equ 30 47 _video equ 31 48 _audio equ 32 49 _timer equ 33 50 _sleep equ 34 51 _msg equ 35 52 _geterr equ 36 53 _fpstat equ 37 54 _pri equ 38 55 _rele equ 39 56 _fff equ 40 57 _fnf equ 41 58 _alloc equ 42 59 _dalloc equ 43 60 _calbac equ 44 61 _dma equ 45 62 63 %macro sys 1-4 64 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 65 ; 03/09/2015 66 ; 13/04/2015 67 ; Retro UNIX 386 v1 system call. 68 %if %0 >= 2 69 mov ebx, %2 70 %if %0 >= 3 71 mov ecx, %3 72 %if %0 = 4 73 mov edx, %4 74 %endif 75 %endif 76 %endif 77 mov eax, %1 78 ;int 30h 79 int 40h ; TRDOS 386 (TRDOS v2.0) 80 %endmacro 81 82 ; Retro UNIX 386 v1 system call format: 83 ; sys systemcall (eax) , , 84 85 [BITS 32] ; We need 32-bit intructions for protected mode 86 87 [ORG 0] 88 89 START_CODE: 90 ; clear bss 91 00000000 BF[78050000] mov edi, bss_start 92 00000005 B9813E0000 mov ecx, (bss_end - bss_start)/4 93 ;xor eax, eax 94 0000000A F3AB rep stosd 95 96 ; program message 97 0000000C BE[83040000] mov esi, program_msg 98 00000011 E839040000 call print_msg 99 100 00000016 30E4 xor ah, ah 101 ;int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY 102 ; Return: AH = scan code, AL = character 103 00000018 CD32 int 32h ; TRDOS 386 Keyboard interrupt 104 105 ;; Set Video Mode to 13h 106 ;sys _video, 0813h 107 ;cmp eax, 14h 108 ;je short mode_13h_set_ok 109 ;jmp terminate 110 111 ; set VGA mode by using int 31h 112 0000001A 66B81300 mov ax, 13h ; mode 13h ; 113 0000001E CD31 int 31h ; real mode: int 10h 114 ;jmp short mode_13h_set_ok 115 116 mode_13h_set_ok: 117 00000020 B90F0F0F0F mov ecx, 0F0F0F0Fh ; white 118 00000025 BB01010000 mov ebx, 0101h ; Full screen, new color 119 sys _video 119 <1> 119 <1> 119 <1> 119 <1> 119 <1> %if %0 >= 2 119 <1> mov ebx, %2 119 <1> %if %0 >= 3 119 <1> mov ecx, %3 119 <1> %if %0 = 4 119 <1> mov edx, %4 119 <1> %endif 119 <1> %endif 119 <1> %endif 119 0000002A B81F000000 <1> mov eax, %1 119 <1> 119 0000002F CD40 <1> int 40h 120 121 ;mov byte [tcolor], 0 122 00000031 BE48004400 mov esi, 68*65536+72 123 00000036 BD[34050000] mov ebp, txt_white 124 0000003B E820040000 call print_text 125 126 00000040 E8E0030000 call waitforkey 127 128 ; full screen replace color (replace black colors) 129 00000045 B100 mov cl, 0 130 00000047 B228 mov dl, 28h ; RED 131 00000049 B30C mov bl, 0Ch 132 sys _video 132 <1> 132 <1> 132 <1> 132 <1> 132 <1> %if %0 >= 2 132 <1> mov ebx, %2 132 <1> %if %0 >= 3 132 <1> mov ecx, %3 132 <1> %if %0 = 4 132 <1> mov edx, %4 132 <1> %endif 132 <1> %endif 132 <1> %endif 132 0000004B B81F000000 <1> mov eax, %1 132 <1> 132 00000050 CD40 <1> int 40h 133 134 00000052 E8CE030000 call waitforkey 135 136 ; full screen replace color (replace white colors) 137 00000057 B10F mov cl, 0Fh ; WHITE 138 00000059 B200 mov dl, 0 ; BLACK 139 ;mov bl, 0Ch 140 sys _video 140 <1> 140 <1> 140 <1> 140 <1> 140 <1> %if %0 >= 2 140 <1> mov ebx, %2 140 <1> %if %0 >= 3 140 <1> mov ecx, %3 140 <1> %if %0 = 4 140 <1> mov edx, %4 140 <1> %endif 140 <1> %endif 140 <1> %endif 140 0000005B B81F000000 <1> mov eax, %1 140 <1> 140 00000060 CD40 <1> int 40h 141 142 ; full screen replace color (replace red colors) 143 00000062 B128 mov cl, 28h ; RED 144 00000064 B20F mov dl, 0Fh ; WHITE 145 ;mov bl, 0Ch 146 sys _video 146 <1> 146 <1> 146 <1> 146 <1> 146 <1> %if %0 >= 2 146 <1> mov ebx, %2 146 <1> %if %0 >= 3 146 <1> mov ecx, %3 146 <1> %if %0 = 4 146 <1> mov edx, %4 146 <1> %endif 146 <1> %endif 146 <1> %endif 146 00000066 B81F000000 <1> mov eax, %1 146 <1> 146 0000006B CD40 <1> int 40h 147 148 ; now screen color is black and text color is white 149 150 0000006D E8B3030000 call waitforkey 151 152 00000072 B920202020 mov ecx, 20202020h ; blue 153 00000077 BB01010000 mov ebx, 0101h ; Full screen, new color 154 sys _video 154 <1> 154 <1> 154 <1> 154 <1> 154 <1> %if %0 >= 2 154 <1> mov ebx, %2 154 <1> %if %0 >= 3 154 <1> mov ecx, %3 154 <1> %if %0 = 4 154 <1> mov edx, %4 154 <1> %endif 154 <1> %endif 154 <1> %endif 154 0000007C B81F000000 <1> mov eax, %1 154 <1> 154 00000081 CD40 <1> int 40h 155 156 00000083 C605[78050000]0F mov byte [tcolor], 0Fh 157 0000008A BE5A004400 mov esi, 68*65536+90 158 0000008F BD[1E050000] mov ebp, txt_blue 159 00000094 E8C7030000 call print_text 160 161 00000099 E887030000 call waitforkey 162 163 ; full screen replace color (replace white colors) 164 0000009E B10F mov cl, 0Fh ; WHITE 165 000000A0 B22C mov dl, 2Ch ; YELLOW 166 000000A2 B30C mov bl, 0Ch 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 000000A4 B81F000000 <1> mov eax, %1 167 <1> 167 000000A9 CD40 <1> int 40h 168 169 000000AB E875030000 call waitforkey 170 171 ; full screen replace color (replace blue colors) 172 000000B0 B120 mov cl, 20h ; BLUE 173 000000B2 B200 mov dl, 0 ; BLACK 174 ;mov bl, 0Ch 175 sys _video 175 <1> 175 <1> 175 <1> 175 <1> 175 <1> %if %0 >= 2 175 <1> mov ebx, %2 175 <1> %if %0 >= 3 175 <1> mov ecx, %3 175 <1> %if %0 = 4 175 <1> mov edx, %4 175 <1> %endif 175 <1> %endif 175 <1> %endif 175 000000B4 B81F000000 <1> mov eax, %1 175 <1> 175 000000B9 CD40 <1> int 40h 176 177 ; full screen replace color (replace yellow colors) 178 000000BB B12C mov cl, 2Ch ; YELLOW 179 000000BD B220 mov dl, 20h ; BLUE 180 ;mov bl, 0Ch 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 000000BF B81F000000 <1> mov eax, %1 181 <1> 181 000000C4 CD40 <1> int 40h 182 183 ; now screen color is black and text color is blue 184 185 000000C6 E85A030000 call waitforkey 186 187 000000CB B928282828 mov ecx, 28282828h ; red 188 000000D0 BB01010000 mov ebx, 0101h ; Full screen, new color 189 sys _video 189 <1> 189 <1> 189 <1> 189 <1> 189 <1> %if %0 >= 2 189 <1> mov ebx, %2 189 <1> %if %0 >= 3 189 <1> mov ecx, %3 189 <1> %if %0 = 4 189 <1> mov edx, %4 189 <1> %endif 189 <1> %endif 189 <1> %endif 189 000000D5 B81F000000 <1> mov eax, %1 189 <1> 189 000000DA CD40 <1> int 40h 190 191 ;mov byte [tcolor], 0Fh 192 000000DC BE6C004400 mov esi, 68*65536+108 193 000000E1 BD[23050000] mov ebp, txt_red 194 000000E6 E875030000 call print_text 195 196 000000EB E835030000 call waitforkey 197 198 ; full screen replace color (replace white colors) 199 000000F0 B10F mov cl, 0Fh ; WHITE 200 000000F2 B22C mov dl, 2Ch ; YELLOW 201 000000F4 B30C mov bl, 0Ch 202 sys _video 202 <1> 202 <1> 202 <1> 202 <1> 202 <1> %if %0 >= 2 202 <1> mov ebx, %2 202 <1> %if %0 >= 3 202 <1> mov ecx, %3 202 <1> %if %0 = 4 202 <1> mov edx, %4 202 <1> %endif 202 <1> %endif 202 <1> %endif 202 000000F6 B81F000000 <1> mov eax, %1 202 <1> 202 000000FB CD40 <1> int 40h 203 204 000000FD E823030000 call waitforkey 205 206 ; full screen replace color (replace red colors) 207 00000102 B128 mov cl, 28h ; RED 208 00000104 B200 mov dl, 0 ; BLACK 209 ;mov bl, 0Ch 210 sys _video 210 <1> 210 <1> 210 <1> 210 <1> 210 <1> %if %0 >= 2 210 <1> mov ebx, %2 210 <1> %if %0 >= 3 210 <1> mov ecx, %3 210 <1> %if %0 = 4 210 <1> mov edx, %4 210 <1> %endif 210 <1> %endif 210 <1> %endif 210 00000106 B81F000000 <1> mov eax, %1 210 <1> 210 0000010B CD40 <1> int 40h 211 212 ; full screen replace color (replace yellow colors) 213 0000010D B12C mov cl, 2Ch ; YELLOW 214 0000010F B228 mov dl, 28h ; RED 215 ;mov bl, 0Ch 216 sys _video 216 <1> 216 <1> 216 <1> 216 <1> 216 <1> %if %0 >= 2 216 <1> mov ebx, %2 216 <1> %if %0 >= 3 216 <1> mov ecx, %3 216 <1> %if %0 = 4 216 <1> mov edx, %4 216 <1> %endif 216 <1> %endif 216 <1> %endif 216 00000111 B81F000000 <1> mov eax, %1 216 <1> 216 00000116 CD40 <1> int 40h 217 218 ; now screen color is black and text color is red 219 220 00000118 E808030000 call waitforkey 221 222 ; full screen - green color 223 224 0000011D B930303030 mov ecx, 30303030h ; green 225 00000122 BB01010000 mov ebx, 0101h ; Full screen, new color 226 sys _video 226 <1> 226 <1> 226 <1> 226 <1> 226 <1> %if %0 >= 2 226 <1> mov ebx, %2 226 <1> %if %0 >= 3 226 <1> mov ecx, %3 226 <1> %if %0 = 4 226 <1> mov edx, %4 226 <1> %endif 226 <1> %endif 226 <1> %endif 226 00000127 B81F000000 <1> mov eax, %1 226 <1> 226 0000012C CD40 <1> int 40h 227 228 0000012E C605[78050000]00 mov byte [tcolor], 0 229 00000135 BE48004400 mov esi, 68*65536+72 230 0000013A BD[27050000] mov ebp, txt_green 231 0000013F E81C030000 call print_text 232 233 00000144 E8DC020000 call waitforkey 234 235 ; full screen replace color (replace black colors) 236 00000149 B100 mov cl, 0 ; BLACK 237 0000014B B20F mov dl, 0Fh ; WHITE 238 0000014D B30C mov bl, 0Ch 239 sys _video 239 <1> 239 <1> 239 <1> 239 <1> 239 <1> %if %0 >= 2 239 <1> mov ebx, %2 239 <1> %if %0 >= 3 239 <1> mov ecx, %3 239 <1> %if %0 = 4 239 <1> mov edx, %4 239 <1> %endif 239 <1> %endif 239 <1> %endif 239 0000014F B81F000000 <1> mov eax, %1 239 <1> 239 00000154 CD40 <1> int 40h 240 241 00000156 E8CA020000 call waitforkey 242 243 ; full screen replace color (replace green colors) 244 0000015B B130 mov cl, 30h ; GREEN 245 0000015D B200 mov dl, 0 ; BLACK 246 ;mov bl, 0Ch 247 sys _video 247 <1> 247 <1> 247 <1> 247 <1> 247 <1> %if %0 >= 2 247 <1> mov ebx, %2 247 <1> %if %0 >= 3 247 <1> mov ecx, %3 247 <1> %if %0 = 4 247 <1> mov edx, %4 247 <1> %endif 247 <1> %endif 247 <1> %endif 247 0000015F B81F000000 <1> mov eax, %1 247 <1> 247 00000164 CD40 <1> int 40h 248 249 ; full screen replace color (replace white colors) 250 00000166 B10F mov cl, 0Fh ; WHITE 251 00000168 B230 mov dl, 30h ; GREEN 252 ;mov bl, 0Ch 253 sys _video 253 <1> 253 <1> 253 <1> 253 <1> 253 <1> %if %0 >= 2 253 <1> mov ebx, %2 253 <1> %if %0 >= 3 253 <1> mov ecx, %3 253 <1> %if %0 = 4 253 <1> mov edx, %4 253 <1> %endif 253 <1> %endif 253 <1> %endif 253 0000016A B81F000000 <1> mov eax, %1 253 <1> 253 0000016F CD40 <1> int 40h 254 255 ; now screen color is black and text color is green 256 257 00000171 E8AF020000 call waitforkey 258 259 ; full screen - yellow color 260 261 00000176 B92C2C2C2C mov ecx, 2C2C2C2Ch ; yellow 262 0000017B BB01010000 mov ebx, 0101h ; Full screen, new color 263 sys _video 263 <1> 263 <1> 263 <1> 263 <1> 263 <1> %if %0 >= 2 263 <1> mov ebx, %2 263 <1> %if %0 >= 3 263 <1> mov ecx, %3 263 <1> %if %0 = 4 263 <1> mov edx, %4 263 <1> %endif 263 <1> %endif 263 <1> %endif 263 00000180 B81F000000 <1> mov eax, %1 263 <1> 263 00000185 CD40 <1> int 40h 264 265 00000187 C605[78050000]0F mov byte [tcolor], 0Fh 266 0000018E BE36004400 mov esi, 68*65536+54 267 00000193 BD[2D050000] mov ebp, txt_yellow 268 00000198 E8C3020000 call print_text 269 270 0000019D E883020000 call waitforkey 271 272 ; full screen replace color (replace yellow colors) 273 000001A2 B12C mov cl, 2Ch ; YELLOW 274 000001A4 B200 mov dl, 0 ; BLACK 275 000001A6 B30C mov bl, 0Ch 276 sys _video 276 <1> 276 <1> 276 <1> 276 <1> 276 <1> %if %0 >= 2 276 <1> mov ebx, %2 276 <1> %if %0 >= 3 276 <1> mov ecx, %3 276 <1> %if %0 = 4 276 <1> mov edx, %4 276 <1> %endif 276 <1> %endif 276 <1> %endif 276 000001A8 B81F000000 <1> mov eax, %1 276 <1> 276 000001AD CD40 <1> int 40h 277 278 ; full screen replace color (replace white colors) 279 000001AF B10F mov cl, 0Fh ; WHITE 280 000001B1 B22C mov dl, 2Ch ; YELLOW 281 ;mov bl, 0Ch 282 sys _video 282 <1> 282 <1> 282 <1> 282 <1> 282 <1> %if %0 >= 2 282 <1> mov ebx, %2 282 <1> %if %0 >= 3 282 <1> mov ecx, %3 282 <1> %if %0 = 4 282 <1> mov edx, %4 282 <1> %endif 282 <1> %endif 282 <1> %endif 282 000001B3 B81F000000 <1> mov eax, %1 282 <1> 282 000001B8 CD40 <1> int 40h 283 284 ; now screen color is black and text color is yellow 285 286 000001BA E866020000 call waitforkey 287 288 ; Full screen copy 289 000001BF BE[7C050000] mov esi, fullscreen_buffer 290 000001C4 89F7 mov edi, esi 291 000001C6 31C0 xor eax, eax ; black 292 000001C8 B990010000 mov ecx, (320*5)/4 293 000001CD F3AB rep stosd 294 000001CF B80F0F0F0F mov eax, 0F0F0F0Fh ; white 295 000001D4 B9A0000000 mov ecx, (320*2)/4 296 000001D9 F3AB rep stosd 297 000001DB 31C0 xor eax, eax ; black 298 000001DD B9F0000000 mov ecx, (320*3)/4 299 000001E2 F3AB rep stosd 300 000001E4 B820202020 mov eax, 20202020h ; blue 301 000001E9 B9201C0000 mov ecx, (320*90)/4 302 000001EE F3AB rep stosd 303 000001F0 B828282828 mov eax, 28282828h ; red 304 000001F5 B9201C0000 mov ecx, (320*90)/4 305 000001FA F3AB rep stosd 306 000001FC 31C0 xor eax, eax ; black 307 000001FE B9F0000000 mov ecx, (320*3)/4 308 00000203 F3AB rep stosd 309 00000205 B80F0F0F0F mov eax, 0F0F0F0Fh ; white 310 0000020A B9A0000000 mov ecx, (320*2)/4 311 0000020F F3AB rep stosd 312 00000211 31C0 xor eax, eax ; black 313 00000213 B990010000 mov ecx, (320*5)/4 314 00000218 F3AB rep stosd 315 316 0000021A BB00010000 mov ebx, 0100h ; Full screen copy 317 sys _video 317 <1> 317 <1> 317 <1> 317 <1> 317 <1> %if %0 >= 2 317 <1> mov ebx, %2 317 <1> %if %0 >= 3 317 <1> mov ecx, %3 317 <1> %if %0 = 4 317 <1> mov edx, %4 317 <1> %endif 317 <1> %endif 317 <1> %endif 317 0000021F B81F000000 <1> mov eax, %1 317 <1> 317 00000224 CD40 <1> int 40h 318 319 00000226 E8FA010000 call waitforkey 320 321 0000022B C605[78050000]0F mov byte [tcolor], 0Fh 322 323 00000232 BE2B001700 mov esi, 23*65536+43 324 00000237 BD[1E050000] mov ebp, txt_blue 325 0000023C E81F020000 call print_text 326 327 00000241 E8DF010000 call waitforkey 328 329 00000246 BE2B007100 mov esi, 113*65536+43 330 0000024B BD[23050000] mov ebp, txt_red 331 00000250 E80B020000 call print_text 332 333 00000255 E8CB010000 call waitforkey 334 335 ; screen copy and replace window sub functions 336 337 ; fill white color in 1st 10 rows 338 ; in user's fullscreen buff 339 0000025A BF[7C050000] mov edi, fullscreen_buffer 340 0000025F B920030000 mov ecx, (10*320)/4 341 00000264 B80F0F0F0F mov eax, 0F0F0F0Fh 342 00000269 F3AB rep stosd 343 ; fill green color to 180 rows after white rows 344 0000026B B830303030 mov eax, 30303030h ; GREEN 345 00000270 B940380000 mov ecx, (180*320)/4 346 00000275 F3AB rep stosd 347 ; fill white color in last 10 rows 348 00000277 B80F0F0F0F mov eax, 0F0F0F0Fh 349 0000027C B920030000 mov ecx, (10*320)/4 350 00000281 F3AB rep stosd 351 352 ; copy blue block (on screen) to user buffer 353 ; (overwrites green colors partially) 354 00000283 BF[24120000] mov edi, fullscreen_buffer + (10*320)+40 355 00000288 B928000A00 mov ecx, 10*65536+40 ; column 40, row 10 356 0000028D BAA0005A00 mov edx, 90*65536+160 ; size: 90*160 357 00000292 BB41010000 mov ebx, 0141h ; system to user window copy 358 sys _video 358 <1> 358 <1> 358 <1> 358 <1> 358 <1> %if %0 >= 2 358 <1> mov ebx, %2 358 <1> %if %0 >= 3 358 <1> mov ecx, %3 358 <1> %if %0 = 4 358 <1> mov edx, %4 358 <1> %endif 358 <1> %endif 358 <1> %endif 358 00000297 B81F000000 <1> mov eax, %1 358 <1> 358 0000029C CD40 <1> int 40h 359 360 ; Replace white color (text) only in blue block 361 ; (blue block starts at row 10) 362 363 0000029E B10F mov cl, 0Fh ; WHITE (current color) 364 000002A0 B200 mov dl, 0 ; BLACK (new color) 365 000002A2 BE28000A00 mov esi, 10*65536+40 ; column 40, row 10 366 000002A7 BFA0005A00 mov edi, 90*65536+160 ; size: 90*160 367 000002AC BB1C010000 mov ebx, 011Ch ; Replace color in window 368 sys _video 368 <1> 368 <1> 368 <1> 368 <1> 368 <1> %if %0 >= 2 368 <1> mov ebx, %2 368 <1> %if %0 >= 3 368 <1> mov ecx, %3 368 <1> %if %0 = 4 368 <1> mov edx, %4 368 <1> %endif 368 <1> %endif 368 <1> %endif 368 000002B1 B81F000000 <1> mov eax, %1 368 <1> 368 000002B6 CD40 <1> int 40h 369 370 000002B8 E868010000 call waitforkey 371 372 ; copy red block (on screen) to user buffer 373 000002BD BF[A4820000] mov edi, fullscreen_buffer + (100*320)+40 374 000002C2 B928006400 mov ecx, 100*65536+40 ; column 40, row 100 375 000002C7 BAA0005A00 mov edx, 90*65536+160 ; size: 90*160 376 000002CC BB41010000 mov ebx, 0141h ; system to user window copy 377 sys _video 377 <1> 377 <1> 377 <1> 377 <1> 377 <1> %if %0 >= 2 377 <1> mov ebx, %2 377 <1> %if %0 >= 3 377 <1> mov ecx, %3 377 <1> %if %0 = 4 377 <1> mov edx, %4 377 <1> %endif 377 <1> %endif 377 <1> %endif 377 000002D1 B81F000000 <1> mov eax, %1 377 <1> 377 000002D6 CD40 <1> int 40h 378 379 ; Replace white color (text) only in red block 380 ; (red block starts at row 100) 381 382 000002D8 B10F mov cl, 0Fh ; WHITE (current color) 383 000002DA B200 mov dl, 0 ; BLACK (new color) 384 000002DC BE28006400 mov esi, 100*65536+40 ; column 40, row 100 385 000002E1 BFA0005A00 mov edi, 90*65536+160 ; size: 90*160 386 000002E6 BB1C010000 mov ebx, 011Ch ; Replace color in window 387 sys _video 387 <1> 387 <1> 387 <1> 387 <1> 387 <1> %if %0 >= 2 387 <1> mov ebx, %2 387 <1> %if %0 >= 3 387 <1> mov ecx, %3 387 <1> %if %0 = 4 387 <1> mov edx, %4 387 <1> %endif 387 <1> %endif 387 <1> %endif 387 000002EB B81F000000 <1> mov eax, %1 387 <1> 387 000002F0 CD40 <1> int 40h 388 389 000002F2 E82E010000 call waitforkey 390 391 ; copy red block to blue block position 392 ; (system to system copy) 393 394 ; copy red block (overwrite blue block) 395 000002F7 B900006400 mov ecx, 100*65536 ; column 0, row 100 396 000002FC BA40015A00 mov edx, 90*65536+320 ; size: 90*320 397 00000301 BE00000A00 mov esi, 10*65536 398 00000306 BB0D010000 mov ebx, 010Dh ; system to system window copy 399 sys _video 399 <1> 399 <1> 399 <1> 399 <1> 399 <1> %if %0 >= 2 399 <1> mov ebx, %2 399 <1> %if %0 >= 3 399 <1> mov ecx, %3 399 <1> %if %0 = 4 399 <1> mov edx, %4 399 <1> %endif 399 <1> %endif 399 <1> %endif 399 0000030B B81F000000 <1> mov eax, %1 399 <1> 399 00000310 CD40 <1> int 40h 400 401 ; Replace black color (text) only in blue block 402 ; (blue block starts at row 10) 403 404 00000312 B100 mov cl, 0 ; BLACK (current color) 405 00000314 B20F mov dl, 0Fh ; WHITE (new color) 406 00000316 BE28000A00 mov esi, 10*65536+40 ; column 40, row 10 407 0000031B BFA0005A00 mov edi, 90*65536+160 ; size: 90*160 408 00000320 BB1C010000 mov ebx, 011Ch ; Replace color in window 409 sys _video 409 <1> 409 <1> 409 <1> 409 <1> 409 <1> %if %0 >= 2 409 <1> mov ebx, %2 409 <1> %if %0 >= 3 409 <1> mov ecx, %3 409 <1> %if %0 = 4 409 <1> mov edx, %4 409 <1> %endif 409 <1> %endif 409 <1> %endif 409 00000325 B81F000000 <1> mov eax, %1 409 <1> 409 0000032A CD40 <1> int 40h 410 411 0000032C E8F4000000 call waitforkey 412 413 ; fill green block on red block position 414 00000331 B130 mov cl, 30h 415 00000333 BA00006400 mov edx, 100*65536+0 416 00000338 BE40015A00 mov esi, 90*65536+320 ; size: 90*320 417 0000033D BB11010000 mov ebx, 0111h ; new color, window 418 sys _video 418 <1> 418 <1> 418 <1> 418 <1> 418 <1> %if %0 >= 2 418 <1> mov ebx, %2 418 <1> %if %0 >= 3 418 <1> mov ecx, %3 418 <1> %if %0 = 4 418 <1> mov edx, %4 418 <1> %endif 418 <1> %endif 418 <1> %endif 418 00000342 B81F000000 <1> mov eax, %1 418 <1> 418 00000347 CD40 <1> int 40h 419 420 00000349 E8D7000000 call waitforkey 421 422 ; copy blocks to system from user's buffer 423 0000034E BE[40050000] mov esi, blockdatabuffer ; 32+32 bits 424 00000353 B120 mov cl, 20h ; BLUE BLOCKS 425 00000355 BA06000000 mov edx, 6 ; 6 blocks 426 0000035A BB2D010000 mov ebx, 012Dh ; indirect pixel blocks 427 sys _video 427 <1> 427 <1> 427 <1> 427 <1> 427 <1> %if %0 >= 2 427 <1> mov ebx, %2 427 <1> %if %0 >= 3 427 <1> mov ecx, %3 427 <1> %if %0 = 4 427 <1> mov edx, %4 427 <1> %endif 427 <1> %endif 427 <1> %endif 427 0000035F B81F000000 <1> mov eax, %1 427 <1> 427 00000364 CD40 <1> int 40h 428 429 00000366 E8BA000000 call waitforkey 430 431 ; replace color 432 0000036B B120 mov cl, 20h ; BLUE (current color) 433 0000036D B228 mov dl, 28h ; RED (new color) 434 0000036F BE00006400 mov esi, 100*65536 ; column 0, row 100 435 00000374 BF40015A00 mov edi, 90*65536+320 ; size: 90*320 436 00000379 BB1C010000 mov ebx, 011Ch ; Replace color in window 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 0000037E B81F000000 <1> mov eax, %1 437 <1> 437 00000383 CD40 <1> int 40h 438 439 00000385 E89B000000 call waitforkey 440 441 ; copy blue block (with 'blue" text) 442 ; from users full screen buffer to system 443 ; (to its old position) 444 445 0000038A B928000A00 mov ecx, 10*65536+40 446 0000038F BAA0005A00 mov edx, 90*65536+160 447 00000394 BE[24120000] mov esi, fullscreen_buffer+(10*320)+40 448 00000399 BB10010000 mov ebx, 0110h ; copy from user to sys 449 sys _video 449 <1> 449 <1> 449 <1> 449 <1> 449 <1> %if %0 >= 2 449 <1> mov ebx, %2 449 <1> %if %0 >= 3 449 <1> mov ecx, %3 449 <1> %if %0 = 4 449 <1> mov edx, %4 449 <1> %endif 449 <1> %endif 449 <1> %endif 449 0000039E B81F000000 <1> mov eax, %1 449 <1> 449 000003A3 CD40 <1> int 40h 450 451 000003A5 E87B000000 call waitforkey 452 453 ; copy red block (with 'red" text) 454 ; from users full screen buffer to system 455 ; (to its old position) 456 000003AA B928006400 mov ecx, 100*65536+40 457 000003AF BAA0005A00 mov edx, 90*65536+160 458 000003B4 BE[A4820000] mov esi, fullscreen_buffer+(100*320)+40 459 000003B9 BB10010000 mov ebx, 0110h ; copy from user to sys 460 sys _video 460 <1> 460 <1> 460 <1> 460 <1> 460 <1> %if %0 >= 2 460 <1> mov ebx, %2 460 <1> %if %0 >= 3 460 <1> mov ecx, %3 460 <1> %if %0 = 4 460 <1> mov edx, %4 460 <1> %endif 460 <1> %endif 460 <1> %endif 460 000003BE B81F000000 <1> mov eax, %1 460 <1> 460 000003C3 CD40 <1> int 40h 461 462 000003C5 E85B000000 call waitforkey 463 464 ; copy (full) screen to full screen buffer 465 000003CA BF[7C050000] mov edi, fullscreen_buffer 466 000003CF BB40010000 mov ebx, 0140h ; copy from sys to user 467 sys _video 467 <1> 467 <1> 467 <1> 467 <1> 467 <1> %if %0 >= 2 467 <1> mov ebx, %2 467 <1> %if %0 >= 3 467 <1> mov ecx, %3 467 <1> %if %0 = 4 467 <1> mov edx, %4 467 <1> %endif 467 <1> %endif 467 <1> %endif 467 000003D4 B81F000000 <1> mov eax, %1 467 <1> 467 000003D9 CD40 <1> int 40h 468 469 ; replace color (full screen) 470 000003DB B10F mov cl, 0Fh ; WHITE (current color) 471 000003DD B200 mov dl, 0 ; BLACK (new color) 472 000003DF BB0C010000 mov ebx, 010Ch ; Replace color on screen 473 sys _video 473 <1> 473 <1> 473 <1> 473 <1> 473 <1> %if %0 >= 2 473 <1> mov ebx, %2 473 <1> %if %0 >= 3 473 <1> mov ecx, %3 473 <1> %if %0 = 4 473 <1> mov edx, %4 473 <1> %endif 473 <1> %endif 473 <1> %endif 473 000003E4 B81F000000 <1> mov eax, %1 473 <1> 473 000003E9 CD40 <1> int 40h 474 475 000003EB E835000000 call waitforkey 476 477 ; full screen NOT operation 478 000003F0 BB07010000 mov ebx, 0107h 479 sys _video 479 <1> 479 <1> 479 <1> 479 <1> 479 <1> %if %0 >= 2 479 <1> mov ebx, %2 479 <1> %if %0 >= 3 479 <1> mov ecx, %3 479 <1> %if %0 = 4 479 <1> mov edx, %4 479 <1> %endif 479 <1> %endif 479 <1> %endif 479 000003F5 B81F000000 <1> mov eax, %1 479 <1> 479 000003FA CD40 <1> int 40h 480 481 000003FC E824000000 call waitforkey 482 483 ; copy full screen buffer to screen 484 00000401 BE[7C050000] mov esi, fullscreen_buffer 485 00000406 BB00010000 mov ebx, 0100h 486 sys _video 486 <1> 486 <1> 486 <1> 486 <1> 486 <1> %if %0 >= 2 486 <1> mov ebx, %2 486 <1> %if %0 >= 3 486 <1> mov ecx, %3 486 <1> %if %0 = 4 486 <1> mov edx, %4 486 <1> %endif 486 <1> %endif 486 <1> %endif 486 0000040B B81F000000 <1> mov eax, %1 486 <1> 486 00000410 CD40 <1> int 40h 487 488 00000412 E80E000000 call waitforkey 489 ; wait for key stroke before exit 490 terminate: 491 00000417 E82C000000 call set_text_mode 492 sys _exit 492 <1> 492 <1> 492 <1> 492 <1> 492 <1> %if %0 >= 2 492 <1> mov ebx, %2 492 <1> %if %0 >= 3 492 <1> mov ecx, %3 492 <1> %if %0 = 4 492 <1> mov edx, %4 492 <1> %endif 492 <1> %endif 492 <1> %endif 492 0000041C B801000000 <1> mov eax, %1 492 <1> 492 00000421 CD40 <1> int 40h 493 halt: 494 00000423 EBFE jmp short halt 495 496 waitforkey: 497 00000425 B401 mov ah, 1 498 00000427 CD32 int 32h 499 00000429 740B jz short getkey 500 0000042B FF05[74050000] inc dword [counter] 501 00000431 90 nop 502 00000432 90 nop 503 00000433 90 nop 504 00000434 EBEF jmp short waitforkey 505 getkey: 506 00000436 30E4 xor ah, ah 507 00000438 CD32 int 32h 508 509 0000043A 663D032E cmp ax, 2E03h 510 0000043E 7405 je short _terminate 511 00000440 3C1B cmp al, 1Bh ; ESC key 512 00000442 7401 je short _terminate 513 00000444 C3 retn 514 _terminate: 515 00000445 58 pop eax ; return address 516 00000446 EBCF jmp short terminate 517 518 set_text_mode: 519 00000448 30E4 xor ah, ah 520 0000044A B003 mov al, 3 521 ;int 10h ; al = 03h text mode, int 10 video 522 0000044C CD31 int 31h ; TRDOS 386 - Video interrupt 523 0000044E C3 retn 524 525 print_msg: 526 0000044F B40E mov ah, 0Eh 527 00000451 BB07000000 mov ebx, 7 528 ;mov bl, 7 ; char attribute & color 529 p_next_chr: 530 00000456 AC lodsb 531 00000457 08C0 or al, al 532 00000459 7404 jz short p_retn ; retn 533 0000045B CD31 int 31h 534 0000045D EBF7 jmp short p_next_chr 535 p_retn: 536 0000045F C3 retn 537 538 print_text: 539 ; ebp = text address 540 ; esi = row/column position (si = column) 541 p_d_x: 542 ;mov dh, 0 ; 8x16 system font 543 00000460 B606 mov dh, 6 ; 32*64 scaled font (base: 8*16 system font) 544 p_d_x_n: 545 00000462 8A5500 mov dl, [ebp] 546 00000465 20D2 and dl, dl 547 00000467 7419 jz short p_d_x_ok 548 sys _video, 010Fh, [tcolor] 548 <1> 548 <1> 548 <1> 548 <1> 548 <1> %if %0 >= 2 548 00000469 BB0F010000 <1> mov ebx, %2 548 <1> %if %0 >= 3 548 0000046E 8B0D[78050000] <1> mov ecx, %3 548 <1> %if %0 = 4 548 <1> mov edx, %4 548 <1> %endif 548 <1> %endif 548 <1> %endif 548 00000474 B81F000000 <1> mov eax, %1 548 <1> 548 00000479 CD40 <1> int 40h 549 0000047B 45 inc ebp 550 0000047C 6683C624 add si, 36 ; next char pos 551 00000480 EBE0 jmp short p_d_x_n 552 p_d_x_ok: 553 00000482 C3 retn 554 555 program_msg: 556 00000483 5452444F5320333836- db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Block Operations" 556 0000048C 2076322E302E33202D- 556 00000495 202827737973766964- 556 0000049E 656F27292054657374- 556 000004A7 2050726F6772616D20- 556 000004B0 2D20426C6F636B204F- 556 000004B9 7065726174696F6E73 557 000004C2 0D0A db 0Dh, 0Ah 558 000004C4 6279204572646F6761- db "by Erdogan Tan - 27/02/2021" 558 000004CD 6E2054616E202D2032- 558 000004D6 372F30322F32303231 559 ;db 0Dh, 0Ah, 0 560 000004DF 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 561 000004E3 507265737320616E79- db "Press any key to continue .." 561 000004EC 206B657920746F2063- 561 000004F5 6F6E74696E7565202E- 561 000004FE 2E 562 000004FF 0D0A db 0Dh, 0Ah 563 00000501 285072657373204553- db "(Press ESC to exit) .." 563 0000050A 4320746F2065786974- 563 00000513 29202E2E 564 00000517 0D0A db 0Dh, 0Ah 565 00000519 0D0A db 0Dh, 0Ah 566 567 nextline: 568 0000051B 0D0A00 db 0Dh, 0Ah, 0 569 570 txt_blue: 571 0000051E 424C554500 db "BLUE", 0 572 txt_red: 573 00000523 52454400 db "RED", 0 574 txt_green: 575 00000527 475245454E00 db "GREEN", 0 576 txt_yellow: 577 0000052D 59454C4C4F5700 db "YELLOW", 0 578 txt_white: 579 00000534 574849544500 db "WHITE", 0 580 txt_black: 581 0000053A 424C41434B00 db "BLACK", 0 582 583 blockdatabuffer: 584 00000540 00000A00 dd 10*65536 ; block 1 position 585 00000544 28005A00 dd 90*65536+40 ; block 1 size (w, h) 586 00000548 28006400 dd 100*65536+40 ; block 5 position 587 0000054C A0005A00 dd 90*65536+160 ; block 5 size (w, h) 588 00000550 C8000A00 dd 10*65536+200 ; block 3 position 589 00000554 78005A00 dd 90*65536+120 ; block 3 size (w, h) 590 00000558 C8006400 dd 100*65536+200 ; block 6 position 591 0000055C 78005A00 dd 90*65536+120 ; block 6 size (w, h) 592 00000560 28000A00 dd 10*65536+40 ; block 2 position 593 00000564 A0005A00 dd 90*65536+160 ; block 2 size (w, h) 594 00000568 00006400 dd 100*65536 ; block 4 position 595 0000056C 28005A00 dd 90*65536+40 ; block 4 size (w, h) 596 00000570 00 db 0 597 bss: 598 599 ABSOLUTE bss 600 601 00000571 alignb 4 602 603 counter: 604 00000574 resd 1 605 606 bss_start: 607 00000578 tcolor: resd 1 608 609 fullscreen_buffer: 610 0000057C resb 64000 611 bss_end: