1 ; **************************************************************************** 2 ; blocks9.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 28/02/2021 (27/02/2021) 6 ; 7 ; **************************************************************************** 8 ; nasm blocks9.s -l blocks9.txt -o BLOCKS9.PRG -Z error.txt 9 ; (modified from 'blocks3.s', 23/02/2021) 10 11 ; 'sysvideo' bh = 2, block copy and modification test (VESA VBE mode 112h) 12 ; (640*480, 24 bit true colors version) 13 14 15 ; 14/07/2020 16 ; 31/12/2017 17 ; TRDOS 386 (v2.0) system calls 18 _ver equ 0 19 _exit equ 1 20 _fork equ 2 21 _read equ 3 22 _write equ 4 23 _open equ 5 24 _close equ 6 25 _wait equ 7 26 _create equ 8 27 _rename equ 9 28 _delete equ 10 29 _exec equ 11 30 _chdir equ 12 31 _time equ 13 32 _mkdir equ 14 33 _chmod equ 15 34 _rmdir equ 16 35 _break equ 17 36 _drive equ 18 37 _seek equ 19 38 _tell equ 20 39 _memory equ 21 40 _prompt equ 22 41 _path equ 23 42 _env equ 24 43 _stime equ 25 44 _quit equ 26 45 _intr equ 27 46 _dir equ 28 47 _emt equ 29 48 _ldrvt equ 30 49 _video equ 31 50 _audio equ 32 51 _timer equ 33 52 _sleep equ 34 53 _msg equ 35 54 _geterr equ 36 55 _fpstat equ 37 56 _pri equ 38 57 _rele equ 39 58 _fff equ 40 59 _fnf equ 41 60 _alloc equ 42 61 _dalloc equ 43 62 _calbac equ 44 63 _dma equ 45 64 65 %macro sys 1-4 66 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 67 ; 03/09/2015 68 ; 13/04/2015 69 ; Retro UNIX 386 v1 system call. 70 %if %0 >= 2 71 mov ebx, %2 72 %if %0 >= 3 73 mov ecx, %3 74 %if %0 = 4 75 mov edx, %4 76 %endif 77 %endif 78 %endif 79 mov eax, %1 80 ;int 30h 81 int 40h ; TRDOS 386 (TRDOS v2.0) 82 %endmacro 83 84 ; Retro UNIX 386 v1 system call format: 85 ; sys systemcall (eax) , , 86 87 [BITS 32] ; We need 32-bit intructions for protected mode 88 89 [ORG 0] 90 91 START_CODE: 92 ; clear bss 93 00000000 BF[70060000] mov edi, bss_start 94 00000005 B901840300 mov ecx, (bss_end - bss_start)/4 95 ;xor eax, eax 96 0000000A F3AB rep stosd 97 98 ; program message 99 0000000C BE[AD050000] mov esi, program_msg 100 00000011 E863050000 call print_msg 101 102 00000016 30E4 xor ah, ah 103 ;int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY 104 ; Return: AH = scan code, AL = character 105 00000018 CD32 int 32h ; TRDOS 386 Keyboard interrupt 106 107 ; Set Video Mode to 112h ; 640x480, 24 bit true colors 108 sys _video, 08FFh, 112h 108 <1> 108 <1> 108 <1> 108 <1> 108 <1> %if %0 >= 2 108 0000001A BBFF080000 <1> mov ebx, %2 108 <1> %if %0 >= 3 108 0000001F B912010000 <1> mov ecx, %3 108 <1> %if %0 = 4 108 <1> mov edx, %4 108 <1> %endif 108 <1> %endif 108 <1> %endif 108 00000024 B81F000000 <1> mov eax, %1 108 <1> 108 00000029 CD40 <1> int 40h 109 0000002B 09C0 or eax, eax 110 ;jz short terminate 111 ;mov [LFB_ADDR], edx ; pointer to LFB info table/structure 112 0000002D 7505 jnz short set_vesa_mode_112h_ok 113 0000002F E90D050000 jmp terminate 114 115 set_vesa_mode_112h_ok: 116 ; Set initial block colors 117 00000034 B900E10000 mov ecx, 120*160*3 118 ;mov eax, 0FFFFFFh ; white 119 00000039 B0FF mov al, 0FFh 120 0000003B BF[74060000] mov edi, whiteblock 121 00000040 F3AA rep stosb 122 00000042 66B9004B mov cx, 120*160 123 ;mov eax, 0FFh ; blue 124 00000046 BF[74E70000] mov edi, blueblock 125 _lb: 126 0000004B AA stosb 127 0000004C 31C0 xor eax, eax 128 0000004E 66AB stosw 129 00000050 B0FF mov al, 0FFh 130 00000052 E2F7 loop _lb 131 132 00000054 66B9004B mov cx, 120*160 133 ;mov eax, 0FF0000h ; red 134 00000058 BF[74C80100] mov edi, redblock 135 _lr: 136 0000005D 31C0 xor eax, eax 137 0000005F 66AB stosw 138 00000061 B0FF mov al, 0FFh 139 00000063 AA stosb 140 00000064 E2F7 loop _lr 141 142 00000066 66B9004B mov cx, 120*160 143 0000006A B800FF0000 mov eax, 0FF00h ; green 144 0000006F BF[74A90200] mov edi, greenblock 145 _lg: 146 00000074 66AB stosw 147 00000076 AA stosb 148 00000077 E2FB loop _lg 149 150 00000079 66B9004B mov cx, 120*160 151 ;mov eax, 0FFFF00h ; yellow 152 0000007D BF[748A0300] mov edi, yellowblock 153 _ly: 154 00000082 30C0 xor al, al 155 00000084 AA stosb 156 00000085 66B8FFFF mov ax, 0FFFFh 157 00000089 66AB stosw 158 0000008B E2F5 loop _ly 159 160 ; copy white block to screen 161 ; at row 70, column 120 162 ; (block size: 120(w)*160(h) 163 164 0000008D B978004600 mov ecx, (70*65536)+120 165 00000092 BA7800A000 mov edx, (160*65536)+120 166 00000097 BE[74060000] mov esi, whiteblock 167 0000009C BB10020000 mov ebx, 0210h ; non masked window copy 168 sys _video 168 <1> 168 <1> 168 <1> 168 <1> 168 <1> %if %0 >= 2 168 <1> mov ebx, %2 168 <1> %if %0 >= 3 168 <1> mov ecx, %3 168 <1> %if %0 = 4 168 <1> mov edx, %4 168 <1> %endif 168 <1> %endif 168 <1> %endif 168 000000A1 B81F000000 <1> mov eax, %1 168 <1> 168 000000A6 CD40 <1> int 40h 169 170 ; copy blue block to screen 171 ; at row 160, column 260 172 ; (block size: 120(w)*160(h) 173 174 000000A8 B90401A000 mov ecx, (160*65536)+260 175 000000AD BA7800A000 mov edx, (160*65536)+120 176 000000B2 BE[74E70000] mov esi, blueblock 177 000000B7 BB10020000 mov ebx, 0210h ; non masked window copy 178 sys _video 178 <1> 178 <1> 178 <1> 178 <1> 178 <1> %if %0 >= 2 178 <1> mov ebx, %2 178 <1> %if %0 >= 3 178 <1> mov ecx, %3 178 <1> %if %0 = 4 178 <1> mov edx, %4 178 <1> %endif 178 <1> %endif 178 <1> %endif 178 000000BC B81F000000 <1> mov eax, %1 178 <1> 178 000000C1 CD40 <1> int 40h 179 180 ; copy red block to screen 181 ; at row 250, column 120 182 ; (block size: 120(w)*160(h) 183 184 000000C3 B97800FA00 mov ecx, (250*65536)+120 185 000000C8 BA7800A000 mov edx, (160*65536)+120 186 000000CD BE[74C80100] mov esi, redblock 187 000000D2 BB10020000 mov ebx, 0210h ; non masked window copy 188 sys _video 188 <1> 188 <1> 188 <1> 188 <1> 188 <1> %if %0 >= 2 188 <1> mov ebx, %2 188 <1> %if %0 >= 3 188 <1> mov ecx, %3 188 <1> %if %0 = 4 188 <1> mov edx, %4 188 <1> %endif 188 <1> %endif 188 <1> %endif 188 000000D7 B81F000000 <1> mov eax, %1 188 <1> 188 000000DC CD40 <1> int 40h 189 190 ; copy green block to screen 191 ; at row 70, column 400 192 ; (block size: 120(w)*160(h) 193 194 000000DE B990014600 mov ecx, (70*65536)+400 195 000000E3 BA7800A000 mov edx, (160*65536)+120 196 000000E8 BE[74A90200] mov esi, greenblock 197 000000ED BB10020000 mov ebx, 0210h ; non masked window copy 198 sys _video 198 <1> 198 <1> 198 <1> 198 <1> 198 <1> %if %0 >= 2 198 <1> mov ebx, %2 198 <1> %if %0 >= 3 198 <1> mov ecx, %3 198 <1> %if %0 = 4 198 <1> mov edx, %4 198 <1> %endif 198 <1> %endif 198 <1> %endif 198 000000F2 B81F000000 <1> mov eax, %1 198 <1> 198 000000F7 CD40 <1> int 40h 199 200 ; copy yellow block to screen 201 ; at row 250, column 400 202 ; (block size: 120(w)*160(h) 203 204 000000F9 B99001FA00 mov ecx, (250*65536)+400 205 000000FE BA7800A000 mov edx, (160*65536)+120 206 00000103 BE[748A0300] mov esi, yellowblock 207 00000108 BB10020000 mov ebx, 0210h ; non masked window copy 208 sys _video 208 <1> 208 <1> 208 <1> 208 <1> 208 <1> %if %0 >= 2 208 <1> mov ebx, %2 208 <1> %if %0 >= 3 208 <1> mov ecx, %3 208 <1> %if %0 = 4 208 <1> mov edx, %4 208 <1> %endif 208 <1> %endif 208 <1> %endif 208 0000010D B81F000000 <1> mov eax, %1 208 <1> 208 00000112 CD40 <1> int 40h 209 210 00000114 E836040000 call waitforkey 211 212 ; continue by using 213 ; window color modification sub functions 214 215 ; apply SUB to window's pixel colors 216 00000119 B960804000 mov ecx, 408060h 217 0000011E BA78004600 mov edx, (70*65536)+120 218 00000123 BE7800A000 mov esi, (160*65536)+120 219 00000128 BB13020000 mov ebx, 0213h ; non masked window SUB op 220 sys _video 220 <1> 220 <1> 220 <1> 220 <1> 220 <1> %if %0 >= 2 220 <1> mov ebx, %2 220 <1> %if %0 >= 3 220 <1> mov ecx, %3 220 <1> %if %0 = 4 220 <1> mov edx, %4 220 <1> %endif 220 <1> %endif 220 <1> %endif 220 0000012D B81F000000 <1> mov eax, %1 220 <1> 220 00000132 CD40 <1> int 40h 221 222 00000134 E816040000 call waitforkey 223 224 ; apply ADD to pixel colors of 225 ; the window/block on row 70, column 120 with 226 ; block size 120(w)*160(h). 227 ;mov ecx, 408060h 228 ;mov edx, (70*65536)+120 229 ;mov esi, (160*65536)+120 230 ;mov ebx, 0212h ; non masked window ADD op 231 00000139 B312 mov bl, 12h 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 0000013B B81F000000 <1> mov eax, %1 232 <1> 232 00000140 CD40 <1> int 40h 233 234 00000142 E808040000 call waitforkey 235 236 ; apply ADD to pixel colors of 237 ; the window/block on row 250, column 120 with 238 ; block size 120(w)*160(h). 239 00000147 B940000000 mov ecx, 40h 240 0000014C BA7800FA00 mov edx, (250*65536)+120 241 ;mov esi, (160*65536)+120 242 ;mov ebx, 0212h ; non masked window ADD op 243 00000151 B312 mov bl, 12h 244 sys _video 244 <1> 244 <1> 244 <1> 244 <1> 244 <1> %if %0 >= 2 244 <1> mov ebx, %2 244 <1> %if %0 >= 3 244 <1> mov ecx, %3 244 <1> %if %0 = 4 244 <1> mov edx, %4 244 <1> %endif 244 <1> %endif 244 <1> %endif 244 00000153 B81F000000 <1> mov eax, %1 244 <1> 244 00000158 CD40 <1> int 40h 245 246 0000015A E8F0030000 call waitforkey 247 248 ; apply SUB to window's pixel colors 249 ;mov ecx, 40h 250 ;mov edx, (250*65536)+120 251 ;mov esi, (160*65536)+120 252 ;mov ebx, 0213h ; non masked window SUB op 253 0000015F B313 mov bl, 13h 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 00000161 B81F000000 <1> mov eax, %1 254 <1> 254 00000166 CD40 <1> int 40h 255 256 00000168 E8E2030000 call waitforkey 257 258 ; or, and, xor 259 260 ; apply AND to window's pixel colors 261 0000016D B97F7F0700 mov ecx, 077F7Fh 262 00000172 BA78004600 mov edx, (70*65536)+120 263 ;mov esi, (160*65536)+120 264 ;mov ebx, 0215h ; non masked window AND op 265 00000177 B315 mov bl, 15h 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 00000179 B81F000000 <1> mov eax, %1 266 <1> 266 0000017E CD40 <1> int 40h 267 268 00000180 E8CA030000 call waitforkey 269 270 ; apply AND to pixel colors of 271 ; the window/block on row 160, column 260 with 272 ; block size 120(w)*160(h). 273 ;mov ecx, 077F7Fh 274 00000185 BA0401A000 mov edx, (160*65536)+260 275 ;mov esi, (160*65536)+120 276 ;mov ebx, 0215h ; non masked window AND op 277 sys _video 277 <1> 277 <1> 277 <1> 277 <1> 277 <1> %if %0 >= 2 277 <1> mov ebx, %2 277 <1> %if %0 >= 3 277 <1> mov ecx, %3 277 <1> %if %0 = 4 277 <1> mov edx, %4 277 <1> %endif 277 <1> %endif 277 <1> %endif 277 0000018A B81F000000 <1> mov eax, %1 277 <1> 277 0000018F CD40 <1> int 40h 278 279 00000191 E8B9030000 call waitforkey 280 281 ; apply OR to pixel colors of 282 ; the window/block on row 70, column 400 with 283 ; block size 120(w)*160(h). 284 00000196 B950301000 mov ecx, 103050h 285 0000019B BA90014600 mov edx, (70*65536)+400 286 ;mov esi, (160*65536)+120 287 ;mov ebx, 0214h ; non masked window OR op 288 000001A0 B314 mov bl, 14h 289 sys _video 289 <1> 289 <1> 289 <1> 289 <1> 289 <1> %if %0 >= 2 289 <1> mov ebx, %2 289 <1> %if %0 >= 3 289 <1> mov ecx, %3 289 <1> %if %0 = 4 289 <1> mov edx, %4 289 <1> %endif 289 <1> %endif 289 <1> %endif 289 000001A2 B81F000000 <1> mov eax, %1 289 <1> 289 000001A7 CD40 <1> int 40h 290 291 000001A9 E8A1030000 call waitforkey 292 293 ; apply OR to pixel colors of 294 ; the window/block on row 250, column 400 with 295 ; block size 120(w)*160(h). 296 ;mov ecx, 103050h 297 000001AE BA9001FA00 mov edx, (250*65536)+400 298 ;mov esi, (160*65536)+120 299 ;mov ebx, 0214h ; non masked window OR op 300 sys _video 300 <1> 300 <1> 300 <1> 300 <1> 300 <1> %if %0 >= 2 300 <1> mov ebx, %2 300 <1> %if %0 >= 3 300 <1> mov ecx, %3 300 <1> %if %0 = 4 300 <1> mov edx, %4 300 <1> %endif 300 <1> %endif 300 <1> %endif 300 000001B3 B81F000000 <1> mov eax, %1 300 <1> 300 000001B8 CD40 <1> int 40h 301 302 000001BA E890030000 call waitforkey 303 304 ; apply XOR to pixel colors of 305 ; the window/block on row 250, column 120 with 306 ; block size 120(w)*160(h). 307 000001BF B94F7F3F00 mov ecx, 3F7F4Fh 308 000001C4 BA7800FA00 mov edx, (250*65536)+120 309 ;mov esi, (160*65536)+120 310 ;mov ebx, 0216h ; non masked window XOR op 311 000001C9 B316 mov bl, 16h 312 sys _video 312 <1> 312 <1> 312 <1> 312 <1> 312 <1> %if %0 >= 2 312 <1> mov ebx, %2 312 <1> %if %0 >= 3 312 <1> mov ecx, %3 312 <1> %if %0 = 4 312 <1> mov edx, %4 312 <1> %endif 312 <1> %endif 312 <1> %endif 312 000001CB B81F000000 <1> mov eax, %1 312 <1> 312 000001D0 CD40 <1> int 40h 313 314 000001D2 E878030000 call waitforkey 315 316 ; apply XOR to pixel colors of 317 ; the window/block on row 70, column 400 with 318 ; block size 120(w)*160(h). 319 ;mov ecx, 3F7F4Fh 320 000001D7 BA90014600 mov edx, (70*65536)+400 321 ;mov esi, (160*65536)+120 322 ;mov ebx, 0216h ; non masked window XOR op 323 sys _video 323 <1> 323 <1> 323 <1> 323 <1> 323 <1> %if %0 >= 2 323 <1> mov ebx, %2 323 <1> %if %0 >= 3 323 <1> mov ecx, %3 323 <1> %if %0 = 4 323 <1> mov edx, %4 323 <1> %endif 323 <1> %endif 323 <1> %endif 323 000001DC B81F000000 <1> mov eax, %1 323 <1> 323 000001E1 CD40 <1> int 40h 324 325 000001E3 E867030000 call waitforkey 326 327 ; Mix colors 328 329 ; MIX pixel colors of 330 ; the window/block on row 70, column 120 with 331 ; block size 120(w)*160(h). 332 000001E8 B940201000 mov ecx, 102040h 333 000001ED BA78004600 mov edx, (70*65536)+120 334 ;mov esi, (160*65536)+120 335 ;mov ebx, 021Bh ; non masked window MIX op 336 000001F2 B31B mov bl, 1Bh 337 sys _video 337 <1> 337 <1> 337 <1> 337 <1> 337 <1> %if %0 >= 2 337 <1> mov ebx, %2 337 <1> %if %0 >= 3 337 <1> mov ecx, %3 337 <1> %if %0 = 4 337 <1> mov edx, %4 337 <1> %endif 337 <1> %endif 337 <1> %endif 337 000001F4 B81F000000 <1> mov eax, %1 337 <1> 337 000001F9 CD40 <1> int 40h 338 339 000001FB E84F030000 call waitforkey 340 341 ; MIX pixel colors of 342 ; the window/block on row 160, column 260 with 343 ; block size 120(w)*160(h). 344 ;mov ecx, 102040h 345 00000200 BA0401A000 mov edx, (160*65536)+260 346 ;mov esi, (160*65536)+120 347 ;mov ebx, 021Bh ; non masked window MIX op 348 sys _video 348 <1> 348 <1> 348 <1> 348 <1> 348 <1> %if %0 >= 2 348 <1> mov ebx, %2 348 <1> %if %0 >= 3 348 <1> mov ecx, %3 348 <1> %if %0 = 4 348 <1> mov edx, %4 348 <1> %endif 348 <1> %endif 348 <1> %endif 348 00000205 B81F000000 <1> mov eax, %1 348 <1> 348 0000020A CD40 <1> int 40h 349 350 0000020C E83E030000 call waitforkey 351 352 ; MIX pixel colors of 353 ; the window/block on row 250, column 400 with 354 ; block size 120(w)*160(h). 355 ;mov ecx, 102040h 356 00000211 BA9001FA00 mov edx, (250*65536)+400 357 ;mov esi, (160*65536)+120 358 ;mov ebx, 021Bh ; non masked window MIX op 359 sys _video 359 <1> 359 <1> 359 <1> 359 <1> 359 <1> %if %0 >= 2 359 <1> mov ebx, %2 359 <1> %if %0 >= 3 359 <1> mov ecx, %3 359 <1> %if %0 = 4 359 <1> mov edx, %4 359 <1> %endif 359 <1> %endif 359 <1> %endif 359 00000216 B81F000000 <1> mov eax, %1 359 <1> 359 0000021B CD40 <1> int 40h 360 361 0000021D E82D030000 call waitforkey 362 363 ; CHANGE color (full screen) 364 00000222 31C9 xor ecx, ecx ; 0 ; black 365 00000224 BB01020000 mov ebx, 0201h ; Full screen, new color 366 sys _video 366 <1> 366 <1> 366 <1> 366 <1> 366 <1> %if %0 >= 2 366 <1> mov ebx, %2 366 <1> %if %0 >= 3 366 <1> mov ecx, %3 366 <1> %if %0 = 4 366 <1> mov edx, %4 366 <1> %endif 366 <1> %endif 366 <1> %endif 366 00000229 B81F000000 <1> mov eax, %1 366 <1> 366 0000022E CD40 <1> int 40h 367 368 00000230 B900000100 mov ecx, 65536 369 blackloop: 370 00000235 09C9 or ecx, ecx 371 00000237 90 nop 372 00000238 90 nop 373 00000239 90 nop 374 0000023A E2F9 loop blackloop 375 376 0000023C B9FFFFFF00 mov ecx, 0FFFFFFh ; white 377 00000241 BB01020000 mov ebx, 0201h ; Full screen, new color 378 sys _video 378 <1> 378 <1> 378 <1> 378 <1> 378 <1> %if %0 >= 2 378 <1> mov ebx, %2 378 <1> %if %0 >= 3 378 <1> mov ecx, %3 378 <1> %if %0 = 4 378 <1> mov edx, %4 378 <1> %endif 378 <1> %endif 378 <1> %endif 378 00000246 B81F000000 <1> mov eax, %1 378 <1> 378 0000024B CD40 <1> int 40h 379 380 ;mov dword [tcolor], 0 381 0000024D BEF000D000 mov esi, 208*65536+240 382 00000252 BD[5E060000] mov ebp, txt_white 383 00000257 E82E030000 call print_text 384 385 0000025C E8EE020000 call waitforkey 386 387 ; full screen sub 388 00000261 B90000FF00 mov ecx, 0FF0000h 389 00000266 B303 mov bl, 03h 390 sys _video 390 <1> 390 <1> 390 <1> 390 <1> 390 <1> %if %0 >= 2 390 <1> mov ebx, %2 390 <1> %if %0 >= 3 390 <1> mov ecx, %3 390 <1> %if %0 = 4 390 <1> mov edx, %4 390 <1> %endif 390 <1> %endif 390 <1> %endif 390 00000268 B81F000000 <1> mov eax, %1 390 <1> 390 0000026D CD40 <1> int 40h 391 392 0000026F E8DB020000 call waitforkey 393 394 ; full screen add 395 ;mov ecx, 0FF0000h 396 00000274 B302 mov bl, 02h 397 sys _video 397 <1> 397 <1> 397 <1> 397 <1> 397 <1> %if %0 >= 2 397 <1> mov ebx, %2 397 <1> %if %0 >= 3 397 <1> mov ecx, %3 397 <1> %if %0 = 4 397 <1> mov edx, %4 397 <1> %endif 397 <1> %endif 397 <1> %endif 397 00000276 B81F000000 <1> mov eax, %1 397 <1> 397 0000027B CD40 <1> int 40h 398 399 0000027D E8CD020000 call waitforkey 400 401 00000282 B9FF000000 mov ecx, 0FFh ; blue 402 00000287 BB01020000 mov ebx, 0201h ; Full screen, new color 403 sys _video 403 <1> 403 <1> 403 <1> 403 <1> 403 <1> %if %0 >= 2 403 <1> mov ebx, %2 403 <1> %if %0 >= 3 403 <1> mov ecx, %3 403 <1> %if %0 = 4 403 <1> mov edx, %4 403 <1> %endif 403 <1> %endif 403 <1> %endif 403 0000028C B81F000000 <1> mov eax, %1 403 <1> 403 00000291 CD40 <1> int 40h 404 405 00000293 C705[70060000]FFFF- mov dword [tcolor], 0FFFFFFh 405 0000029B FF00 406 0000029D BE0201D000 mov esi, 208*65536+258 407 000002A2 BD[48060000] mov ebp, txt_blue 408 000002A7 E8DE020000 call print_text 409 410 000002AC E89E020000 call waitforkey 411 412 ; full screen add 413 000002B1 B90000FF00 mov ecx, 0FF0000h 414 000002B6 B302 mov bl, 02h 415 sys _video 415 <1> 415 <1> 415 <1> 415 <1> 415 <1> %if %0 >= 2 415 <1> mov ebx, %2 415 <1> %if %0 >= 3 415 <1> mov ecx, %3 415 <1> %if %0 = 4 415 <1> mov edx, %4 415 <1> %endif 415 <1> %endif 415 <1> %endif 415 000002B8 B81F000000 <1> mov eax, %1 415 <1> 415 000002BD CD40 <1> int 40h 416 417 000002BF E88B020000 call waitforkey 418 419 ; full screen sub 420 ;mov ecx, 0FF0000h 421 000002C4 B303 mov bl, 03h 422 sys _video 422 <1> 422 <1> 422 <1> 422 <1> 422 <1> %if %0 >= 2 422 <1> mov ebx, %2 422 <1> %if %0 >= 3 422 <1> mov ecx, %3 422 <1> %if %0 = 4 422 <1> mov edx, %4 422 <1> %endif 422 <1> %endif 422 <1> %endif 422 000002C6 B81F000000 <1> mov eax, %1 422 <1> 422 000002CB CD40 <1> int 40h 423 424 000002CD E87D020000 call waitforkey 425 426 ;mov ecx, 0FF0000h ; red 427 000002D2 BB01020000 mov ebx, 0201h ; Full screen, new color 428 sys _video 428 <1> 428 <1> 428 <1> 428 <1> 428 <1> %if %0 >= 2 428 <1> mov ebx, %2 428 <1> %if %0 >= 3 428 <1> mov ecx, %3 428 <1> %if %0 = 4 428 <1> mov edx, %4 428 <1> %endif 428 <1> %endif 428 <1> %endif 428 000002D7 B81F000000 <1> mov eax, %1 428 <1> 428 000002DC CD40 <1> int 40h 429 430 ;mov dword [tcolor], 0FFFFFFh 431 000002DE BE1401D000 mov esi, 208*65536+276 432 000002E3 BD[4D060000] mov ebp, txt_red 433 000002E8 E89D020000 call print_text 434 435 000002ED E85D020000 call waitforkey 436 437 ; full screen add 438 000002F2 B9FF400000 mov ecx, 0040FFh 439 000002F7 B302 mov bl, 02h 440 sys _video 440 <1> 440 <1> 440 <1> 440 <1> 440 <1> %if %0 >= 2 440 <1> mov ebx, %2 440 <1> %if %0 >= 3 440 <1> mov ecx, %3 440 <1> %if %0 = 4 440 <1> mov edx, %4 440 <1> %endif 440 <1> %endif 440 <1> %endif 440 000002F9 B81F000000 <1> mov eax, %1 440 <1> 440 000002FE CD40 <1> int 40h 441 442 00000300 E84A020000 call waitforkey 443 444 ; full screen sub 445 ;mov ecx, 0040FFh 446 00000305 B303 mov bl, 03h 447 sys _video 447 <1> 447 <1> 447 <1> 447 <1> 447 <1> %if %0 >= 2 447 <1> mov ebx, %2 447 <1> %if %0 >= 3 447 <1> mov ecx, %3 447 <1> %if %0 = 4 447 <1> mov edx, %4 447 <1> %endif 447 <1> %endif 447 <1> %endif 447 00000307 B81F000000 <1> mov eax, %1 447 <1> 447 0000030C CD40 <1> int 40h 448 449 0000030E E83C020000 call waitforkey 450 451 ; full screen OR 452 00000313 B900FF0000 mov ecx, 00FF00h 453 00000318 B304 mov bl, 04h 454 sys _video 454 <1> 454 <1> 454 <1> 454 <1> 454 <1> %if %0 >= 2 454 <1> mov ebx, %2 454 <1> %if %0 >= 3 454 <1> mov ecx, %3 454 <1> %if %0 = 4 454 <1> mov edx, %4 454 <1> %endif 454 <1> %endif 454 <1> %endif 454 0000031A B81F000000 <1> mov eax, %1 454 <1> 454 0000031F CD40 <1> int 40h 455 456 00000321 E829020000 call waitforkey 457 458 ; full screen AND 459 ;mov ecx, 001F00h 460 00000326 B51F mov ch, 1Fh 461 00000328 B305 mov bl, 05h 462 sys _video 462 <1> 462 <1> 462 <1> 462 <1> 462 <1> %if %0 >= 2 462 <1> mov ebx, %2 462 <1> %if %0 >= 3 462 <1> mov ecx, %3 462 <1> %if %0 = 4 462 <1> mov edx, %4 462 <1> %endif 462 <1> %endif 462 <1> %endif 462 0000032A B81F000000 <1> mov eax, %1 462 <1> 462 0000032F CD40 <1> int 40h 463 464 00000331 E819020000 call waitforkey 465 466 ; full screen XOR 467 00000336 B97F3F0700 mov ecx, 073F7Fh 468 0000033B B306 mov bl, 06h 469 sys _video 469 <1> 469 <1> 469 <1> 469 <1> 469 <1> %if %0 >= 2 469 <1> mov ebx, %2 469 <1> %if %0 >= 3 469 <1> mov ecx, %3 469 <1> %if %0 = 4 469 <1> mov edx, %4 469 <1> %endif 469 <1> %endif 469 <1> %endif 469 0000033D B81F000000 <1> mov eax, %1 469 <1> 469 00000342 CD40 <1> int 40h 470 471 00000344 E806020000 call waitforkey 472 473 00000349 B900FF0000 mov ecx, 00FF00h ; green 474 0000034E BB01020000 mov ebx, 0201h ; Full screen, new color 475 sys _video 475 <1> 475 <1> 475 <1> 475 <1> 475 <1> %if %0 >= 2 475 <1> mov ebx, %2 475 <1> %if %0 >= 3 475 <1> mov ecx, %3 475 <1> %if %0 = 4 475 <1> mov edx, %4 475 <1> %endif 475 <1> %endif 475 <1> %endif 475 00000353 B81F000000 <1> mov eax, %1 475 <1> 475 00000358 CD40 <1> int 40h 476 477 0000035A C705[70060000]0000- mov dword [tcolor], 0 477 00000362 0000 478 00000364 BEF000D000 mov esi, 208*65536+240 479 00000369 BD[51060000] mov ebp, txt_green 480 0000036E E817020000 call print_text 481 482 00000373 E8D7010000 call waitforkey 483 484 ; full screen MIX 485 00000378 B97F003F00 mov ecx, 3F007Fh ; green 486 0000037D B30B mov bl, 0Bh 487 sys _video 487 <1> 487 <1> 487 <1> 487 <1> 487 <1> %if %0 >= 2 487 <1> mov ebx, %2 487 <1> %if %0 >= 3 487 <1> mov ecx, %3 487 <1> %if %0 = 4 487 <1> mov edx, %4 487 <1> %endif 487 <1> %endif 487 <1> %endif 487 0000037F B81F000000 <1> mov eax, %1 487 <1> 487 00000384 CD40 <1> int 40h 488 489 00000386 E8C4010000 call waitforkey 490 491 0000038B B900FFFF00 mov ecx, 0FFFF00h ; yellow 492 00000390 BB01020000 mov ebx, 0201h ; Full screen, new color 493 sys _video 493 <1> 493 <1> 493 <1> 493 <1> 493 <1> %if %0 >= 2 493 <1> mov ebx, %2 493 <1> %if %0 >= 3 493 <1> mov ecx, %3 493 <1> %if %0 = 4 493 <1> mov edx, %4 493 <1> %endif 493 <1> %endif 493 <1> %endif 493 00000395 B81F000000 <1> mov eax, %1 493 <1> 493 0000039A CD40 <1> int 40h 494 495 0000039C C705[70060000]FFFF- mov dword [tcolor], 0FFFFFFh 495 000003A4 FF00 496 000003A6 BEDE00D000 mov esi, 208*65536+222 497 000003AB BD[57060000] mov ebp, txt_yellow 498 000003B0 E8D5010000 call print_text 499 500 000003B5 E895010000 call waitforkey 501 502 ; full screen NOT 503 000003BA B307 mov bl, 07h 504 sys _video 504 <1> 504 <1> 504 <1> 504 <1> 504 <1> %if %0 >= 2 504 <1> mov ebx, %2 504 <1> %if %0 >= 3 504 <1> mov ecx, %3 504 <1> %if %0 = 4 504 <1> mov edx, %4 504 <1> %endif 504 <1> %endif 504 <1> %endif 504 000003BC B81F000000 <1> mov eax, %1 504 <1> 504 000003C1 CD40 <1> int 40h 505 506 000003C3 E887010000 call waitforkey 507 508 ; full screen NOT 509 ;mov bl, 07h 510 sys _video 510 <1> 510 <1> 510 <1> 510 <1> 510 <1> %if %0 >= 2 510 <1> mov ebx, %2 510 <1> %if %0 >= 3 510 <1> mov ecx, %3 510 <1> %if %0 = 4 510 <1> mov edx, %4 510 <1> %endif 510 <1> %endif 510 <1> %endif 510 000003C8 B81F000000 <1> mov eax, %1 510 <1> 510 000003CD CD40 <1> int 40h 511 512 000003CF E87B010000 call waitforkey 513 514 ; full screen MIX 515 000003D4 B9FF007F00 mov ecx, 7F00FFh 516 000003D9 B30B mov bl, 0Bh 517 sys _video 517 <1> 517 <1> 517 <1> 517 <1> 517 <1> %if %0 >= 2 517 <1> mov ebx, %2 517 <1> %if %0 >= 3 517 <1> mov ecx, %3 517 <1> %if %0 = 4 517 <1> mov edx, %4 517 <1> %endif 517 <1> %endif 517 <1> %endif 517 000003DB B81F000000 <1> mov eax, %1 517 <1> 517 000003E0 CD40 <1> int 40h 518 519 000003E2 E868010000 call waitforkey 520 521 ; Full screen copy 522 000003E7 BE[74060000] mov esi, fullscreen_buffer 523 000003EC 89F7 mov edi, esi 524 525 ; Black 526 000003EE B900190000 mov ecx, 640*10 527 000003F3 31C0 xor eax, eax ; black 528 _l2s1: 529 000003F5 66AB stosw 530 000003F7 AA stosb 531 000003F8 E2FB loop _l2s1 532 533 ; White 534 000003FA B9800C0000 mov ecx, 640*5 535 000003FF B8FFFFFF00 mov eax, 0FFFFFFh 536 _l2w1: 537 00000404 66AB stosw 538 00000406 AA stosb 539 00000407 E2FB loop _l2w1 540 541 ; Black 542 00000409 B9800C0000 mov ecx, 640*5 543 0000040E 31C0 xor eax, eax ; black 544 _l2s2: 545 00000410 66AB stosw 546 00000412 AA stosb 547 00000413 E2FB loop _l2s2 548 549 ; Blue 550 00000415 B900130100 mov ecx, 640*110 551 ;xor eax, eax 552 _l2b: 553 0000041A B0FF mov al, 0FFh 554 0000041C AA stosb 555 0000041D 30C0 xor al, al 556 0000041F 66AB stosw 557 00000421 E2F7 loop _l2b 558 559 ; Red 560 00000423 B900130100 mov ecx, 640*110 561 ;xor eax, eax 562 _l2r: 563 00000428 66AB stosw 564 0000042A B0FF mov al, 0FFh 565 0000042C AA stosb 566 0000042D 30C0 xor al, al 567 0000042F E2F7 loop _l2r 568 569 ; Green 570 00000431 B900130100 mov ecx, 640*110 571 ;xor eax, eax 572 _l2g: 573 00000436 AA stosb 574 00000437 B0FF mov al, 0FFh 575 00000439 66AB stosw 576 0000043B 30C0 xor al, al 577 0000043D E2F7 loop _l2g 578 579 ; Yellow 580 0000043F B900130100 mov ecx, 640*110 581 00000444 B4FF mov ah, 0FFh 582 _l2y: 583 00000446 30C0 xor al, al 584 00000448 AA stosb 585 00000449 B0FF mov al, 0FFh 586 0000044B 66AB stosw 587 0000044D E2F7 loop _l2y 588 589 ; Black 590 0000044F B9800C0000 mov ecx, 640*5 591 00000454 31C0 xor eax, eax ; black 592 _l2s3: 593 00000456 66AB stosw 594 00000458 AA stosb 595 00000459 E2FB loop _l2s3 596 597 ; White 598 0000045B B9800C0000 mov ecx, 640*5 599 00000460 B8FFFFFF00 mov eax, 0FFFFFFh 600 _l2w2: 601 00000465 66AB stosw 602 00000467 AA stosb 603 00000468 E2FB loop _l2w2 604 605 ; Black 606 0000046A B900190000 mov ecx, 640*10 607 0000046F 31C0 xor eax, eax ; black 608 _l2s4: 609 00000471 66AB stosw 610 00000473 AA stosb 611 00000474 E2FB loop _l2s4 612 613 00000476 BB00020000 mov ebx, 0200h ; Full screen copy 614 sys _video 614 <1> 614 <1> 614 <1> 614 <1> 614 <1> %if %0 >= 2 614 <1> mov ebx, %2 614 <1> %if %0 >= 3 614 <1> mov ecx, %3 614 <1> %if %0 = 4 614 <1> mov edx, %4 614 <1> %endif 614 <1> %endif 614 <1> %endif 614 0000047B B81F000000 <1> mov eax, %1 614 <1> 614 00000480 CD40 <1> int 40h 615 616 00000482 E8C8000000 call waitforkey 617 618 ;mov byte [tcolor], 0FFFFFFh 619 620 00000487 BE2B002B00 mov esi, 43*65536+43 621 0000048C BD[48060000] mov ebp, txt_blue 622 00000491 E8F4000000 call print_text 623 624 00000496 E8B4000000 call waitforkey 625 626 0000049B BE2B009900 mov esi, 153*65536+43 627 000004A0 BD[4D060000] mov ebp, txt_red 628 000004A5 E8E0000000 call print_text 629 630 000004AA E8A0000000 call waitforkey 631 632 000004AF BE2B000701 mov esi, 263*65536+43 633 000004B4 BD[51060000] mov ebp, txt_green 634 000004B9 E8CC000000 call print_text 635 636 000004BE E88C000000 call waitforkey 637 638 000004C3 BE2B007501 mov esi, 373*65536+43 639 000004C8 BD[57060000] mov ebp, txt_yellow 640 000004CD E8B8000000 call print_text 641 642 000004D2 E878000000 call waitforkey 643 644 000004D7 C705[70060000]0000- mov dword [tcolor], 0 644 000004DF 0000 645 646 000004E1 BE2B000701 mov esi, 263*65536+43 647 000004E6 BD[51060000] mov ebp, txt_green 648 000004EB E89A000000 call print_text 649 650 000004F0 E85A000000 call waitforkey 651 652 000004F5 BE2B007501 mov esi, 373*65536+43 653 000004FA BD[57060000] mov ebp, txt_yellow 654 000004FF E886000000 call print_text 655 656 00000504 E846000000 call waitforkey 657 658 ; Replace white color (text) only in blue block 659 ; (blue block starts at row 20) 660 661 00000509 B9FFFFFF00 mov ecx, 0FFFFFFh ; WHITE (current color) 662 0000050E 29D2 sub edx, edx ; 0 ; BLACK (new color) 663 00000510 BE28001400 mov esi, 20*65536+40 ; column 40, row 20 664 00000515 BFA0006E00 mov edi, 110*65536+160 ; size: 110*160 665 0000051A BB1C020000 mov ebx, 021Ch ; Replace color in window 666 sys _video 666 <1> 666 <1> 666 <1> 666 <1> 666 <1> %if %0 >= 2 666 <1> mov ebx, %2 666 <1> %if %0 >= 3 666 <1> mov ecx, %3 666 <1> %if %0 = 4 666 <1> mov edx, %4 666 <1> %endif 666 <1> %endif 666 <1> %endif 666 0000051F B81F000000 <1> mov eax, %1 666 <1> 666 00000524 CD40 <1> int 40h 667 668 00000526 E824000000 call waitforkey 669 670 ; Replace white color (text) only in red block 671 ; (red block starts at row 130) 672 673 ;mov ecx, 0FFFFFFh ; WHITE (current color) 674 ;sub edx, edx ; 0 ; BLACK (new color) 675 0000052B BE28008200 mov esi, 130*65536+40 ; column 40, row 130 676 00000530 BF78006E00 mov edi, 110*65536+120 ; size: 110*120 677 ;mov ebx, 021Ch ; Replace color in window 678 sys _video 678 <1> 678 <1> 678 <1> 678 <1> 678 <1> %if %0 >= 2 678 <1> mov ebx, %2 678 <1> %if %0 >= 3 678 <1> mov ecx, %3 678 <1> %if %0 = 4 678 <1> mov edx, %4 678 <1> %endif 678 <1> %endif 678 <1> %endif 678 00000535 B81F000000 <1> mov eax, %1 678 <1> 678 0000053A CD40 <1> int 40h 679 680 0000053C E80E000000 call waitforkey 681 682 terminate: 683 00000541 E82C000000 call set_text_mode 684 sys _exit 684 <1> 684 <1> 684 <1> 684 <1> 684 <1> %if %0 >= 2 684 <1> mov ebx, %2 684 <1> %if %0 >= 3 684 <1> mov ecx, %3 684 <1> %if %0 = 4 684 <1> mov edx, %4 684 <1> %endif 684 <1> %endif 684 <1> %endif 684 00000546 B801000000 <1> mov eax, %1 684 <1> 684 0000054B CD40 <1> int 40h 685 halt: 686 0000054D EBFE jmp short halt 687 688 waitforkey: 689 0000054F B401 mov ah, 1 690 00000551 CD32 int 32h 691 00000553 740B jz short getkey 692 00000555 FF05[6C060000] inc dword [counter] 693 0000055B 90 nop 694 0000055C 90 nop 695 0000055D 90 nop 696 0000055E EBEF jmp short waitforkey 697 getkey: 698 00000560 30E4 xor ah, ah 699 00000562 CD32 int 32h 700 701 00000564 663D032E cmp ax, 2E03h 702 00000568 7405 je short _terminate 703 0000056A 3C1B cmp al, 1Bh ; ESC key 704 0000056C 7401 je short _terminate 705 0000056E C3 retn 706 _terminate: 707 0000056F 58 pop eax ; return address 708 00000570 EBCF jmp short terminate 709 710 set_text_mode: 711 00000572 30E4 xor ah, ah 712 00000574 B003 mov al, 3 713 ;int 10h ; al = 03h text mode, int 10 video 714 00000576 CD31 int 31h ; TRDOS 386 - Video interrupt 715 00000578 C3 retn 716 717 print_msg: 718 00000579 B40E mov ah, 0Eh 719 0000057B BB07000000 mov ebx, 7 720 ;mov bl, 7 ; char attribute & color 721 p_next_chr: 722 00000580 AC lodsb 723 00000581 08C0 or al, al 724 00000583 7404 jz short p_retn ; retn 725 00000585 CD31 int 31h 726 00000587 EBF7 jmp short p_next_chr 727 p_retn: 728 00000589 C3 retn 729 730 print_text: 731 ; ebp = text address 732 ; esi = row/column position (si = column) 733 p_d_x: 734 ;mov dh, 0 ; 8x16 system font 735 0000058A B606 mov dh, 6 ; 32*64 scaled font (base: 8*16 system font) 736 p_d_x_n: 737 0000058C 8A5500 mov dl, [ebp] 738 0000058F 20D2 and dl, dl 739 00000591 7419 jz short p_d_x_ok 740 sys _video, 020Fh, [tcolor] 740 <1> 740 <1> 740 <1> 740 <1> 740 <1> %if %0 >= 2 740 00000593 BB0F020000 <1> mov ebx, %2 740 <1> %if %0 >= 3 740 00000598 8B0D[70060000] <1> mov ecx, %3 740 <1> %if %0 = 4 740 <1> mov edx, %4 740 <1> %endif 740 <1> %endif 740 <1> %endif 740 0000059E B81F000000 <1> mov eax, %1 740 <1> 740 000005A3 CD40 <1> int 40h 741 000005A5 45 inc ebp 742 000005A6 6683C624 add si, 36 ; next char pos 743 000005AA EBE0 jmp short p_d_x_n 744 p_d_x_ok: 745 000005AC C3 retn 746 747 program_msg: 748 000005AD 5452444F5320333836- db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Block Operations" 748 000005B6 2076322E302E33202D- 748 000005BF 202827737973766964- 748 000005C8 656F27292054657374- 748 000005D1 2050726F6772616D20- 748 000005DA 2D20426C6F636B204F- 748 000005E3 7065726174696F6E73 749 000005EC 0D0A db 0Dh, 0Ah 750 000005EE 6279204572646F6761- db "by Erdogan Tan - 28/02/2021" 750 000005F7 6E2054616E202D2032- 750 00000600 382F30322F32303231 751 ;db 0Dh, 0Ah, 0 752 00000609 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 753 0000060D 507265737320616E79- db "Press any key to continue .." 753 00000616 206B657920746F2063- 753 0000061F 6F6E74696E7565202E- 753 00000628 2E 754 00000629 0D0A db 0Dh, 0Ah 755 0000062B 285072657373204553- db "(Press ESC to exit) .." 755 00000634 4320746F2065786974- 755 0000063D 29202E2E 756 00000641 0D0A db 0Dh, 0Ah 757 00000643 0D0A db 0Dh, 0Ah 758 759 nextline: 760 00000645 0D0A00 db 0Dh, 0Ah, 0 761 762 txt_blue: 763 00000648 424C554500 db "BLUE", 0 764 txt_red: 765 0000064D 52454400 db "RED", 0 766 txt_green: 767 00000651 475245454E00 db "GREEN", 0 768 txt_yellow: 769 00000657 59454C4C4F5700 db "YELLOW", 0 770 txt_white: 771 0000065E 574849544500 db "WHITE", 0 772 txt_black: 773 00000664 424C41434B00 db "BLACK", 0 774 775 bss: 776 777 ABSOLUTE bss 778 779 0000066A alignb 4 780 781 counter: 782 0000066C resd 1 783 784 bss_start: 785 00000670 tcolor: resd 1 786 787 fullscreen_buffer: 788 whiteblock: 789 00000674 resb 120*160*3 790 blueblock: 791 0000E774 resb 120*160*3 792 redblock: 793 0001C874 resb 120*160*3 794 greenblock: 795 0002A974 resb 120*160*3 796 yellowblock: 797 00038A74 resb 120*160*3 798 799 00046B74 resb (307200*3)-(96000*3) 800 bss_end: