1 ; **************************************************************************** 2 ; blocks10.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 28/02/2021 6 ; 7 ; **************************************************************************** 8 ; nasm blocks10.s -l blocks10.txt -o BLOCKS10.PRG -Z error.txt 9 ; (modified from 'blocks9.s', 28/02/2021) 10 11 ; 'sysvideo' bh = 2, block copy and modification test (VESA VBE mode 112h) 12 ; (640*480, 32 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[64060000] mov edi, bss_start 94 00000005 B901B00400 mov ecx, (bss_end - bss_start)/4 95 ;xor eax, eax 96 0000000A F3AB rep stosd 97 98 ; program message 99 0000000C BE[A2050000] mov esi, program_msg 100 00000011 E858050000 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 ; Get VESA VBE video bios number 108 ; (vbe2 or vbe3, emulator or not) 109 0000001A BB06090000 mov ebx, 0906h 110 sys _video 110 <1> 110 <1> 110 <1> 110 <1> 110 <1> %if %0 >= 2 110 <1> mov ebx, %2 110 <1> %if %0 >= 3 110 <1> mov ecx, %3 110 <1> %if %0 = 4 110 <1> mov edx, %4 110 <1> %endif 110 <1> %endif 110 <1> %endif 110 0000001F B81F000000 <1> mov eax, %1 110 <1> 110 00000024 CD40 <1> int 40h 111 00000026 B912010000 mov ecx, 112h ; VESA VBE video mode (640x480, 24bpp) 112 0000002B 80FC03 cmp ah, 3 113 0000002E 740B je short set_vmode 114 00000030 80FC02 cmp ah, 2 115 ;jne terminate ; invalid !? 116 00000033 7506 jne short set_vmode 117 00000035 20C0 and al, al 118 00000037 7402 jz short set_vmode ; invalid !? (AL must be >= C0h.) 119 ; BOCHS/QEMU/VBOX emulator 120 00000039 B142 mov cl, 42h ; Bochs/Plex86 video mode 142h 121 ; (640*480, 32bpp) 122 123 ; Set Video Mode to 112h ; 640x480, 32 bit true colors 124 ; 125 ; NOTE: NVIDIA GEFORCE FX 550 VIDEO BIOS uses 32bpp 126 ; instead of 24bpp for same VBE video mode numbers. 127 ; So, 112h is 640*480, 24bpp for BOCHS/QEMU emulator 128 ; but, it is 640*480, 32 bpp for real computer 129 ; with NVIDIA graphics card and video bios. 130 ; (Also it is -it must be- 32bpp for other new hardware.) 131 132 ;sys _video, 08FFh, 112h 133 set_vmode: 134 ; ecx = VESA VBE video mode 135 sys _video, 08FFh 135 <1> 135 <1> 135 <1> 135 <1> 135 <1> %if %0 >= 2 135 0000003B BBFF080000 <1> mov ebx, %2 135 <1> %if %0 >= 3 135 <1> mov ecx, %3 135 <1> %if %0 = 4 135 <1> mov edx, %4 135 <1> %endif 135 <1> %endif 135 <1> %endif 135 00000040 B81F000000 <1> mov eax, %1 135 <1> 135 00000045 CD40 <1> int 40h 136 00000047 09C0 or eax, eax 137 ;jz short terminate 138 ;mov [LFB_ADDR], edx ; pointer to LFB info table/structure 139 00000049 7505 jnz short set_vesa_mode_112h_ok 140 0000004B E9E6040000 jmp terminate 141 142 set_vesa_mode_112h_ok: 143 ; Set initial block colors 144 00000050 B9004B0000 mov ecx, 120*160 145 00000055 B8FFFFFF00 mov eax, 0FFFFFFh ; white 146 0000005A BF[68060000] mov edi, whiteblock 147 0000005F F3AB rep stosd 148 149 00000061 66B9004B mov cx, 120*160 150 00000065 B8FF000000 mov eax, 0FFh ; blue 151 0000006A BF[68320100] mov edi, blueblock 152 0000006F F3AB rep stosd 153 154 00000071 66B9004B mov cx, 120*160 155 00000075 B80000FF00 mov eax, 0FF0000h ; red 156 0000007A BF[685E0200] mov edi, redblock 157 0000007F F3AB rep stosd 158 159 00000081 66B9004B mov cx, 120*160 160 00000085 B800FF0000 mov eax, 0FF00h ; green 161 0000008A BF[688A0300] mov edi, greenblock 162 0000008F F3AB rep stosd 163 164 00000091 66B9004B mov cx, 120*160 165 00000095 B800FFFF00 mov eax, 0FFFF00h ; yellow 166 0000009A BF[68B60400] mov edi, yellowblock 167 0000009F F3AB rep stosd 168 169 ; copy white block to screen 170 ; at row 70, column 120 171 ; (block size: 120(w)*160(h) 172 173 000000A1 B978004600 mov ecx, (70*65536)+120 174 000000A6 BA7800A000 mov edx, (160*65536)+120 175 000000AB BE[68060000] mov esi, whiteblock 176 000000B0 BB10020000 mov ebx, 0210h ; non masked window copy 177 sys _video 177 <1> 177 <1> 177 <1> 177 <1> 177 <1> %if %0 >= 2 177 <1> mov ebx, %2 177 <1> %if %0 >= 3 177 <1> mov ecx, %3 177 <1> %if %0 = 4 177 <1> mov edx, %4 177 <1> %endif 177 <1> %endif 177 <1> %endif 177 000000B5 B81F000000 <1> mov eax, %1 177 <1> 177 000000BA CD40 <1> int 40h 178 179 ; copy blue block to screen 180 ; at row 160, column 260 181 ; (block size: 120(w)*160(h) 182 183 000000BC B90401A000 mov ecx, (160*65536)+260 184 000000C1 BA7800A000 mov edx, (160*65536)+120 185 000000C6 BE[68320100] mov esi, blueblock 186 000000CB BB10020000 mov ebx, 0210h ; non masked window copy 187 sys _video 187 <1> 187 <1> 187 <1> 187 <1> 187 <1> %if %0 >= 2 187 <1> mov ebx, %2 187 <1> %if %0 >= 3 187 <1> mov ecx, %3 187 <1> %if %0 = 4 187 <1> mov edx, %4 187 <1> %endif 187 <1> %endif 187 <1> %endif 187 000000D0 B81F000000 <1> mov eax, %1 187 <1> 187 000000D5 CD40 <1> int 40h 188 189 ; copy red block to screen 190 ; at row 250, column 120 191 ; (block size: 120(w)*160(h) 192 193 000000D7 B97800FA00 mov ecx, (250*65536)+120 194 000000DC BA7800A000 mov edx, (160*65536)+120 195 000000E1 BE[685E0200] mov esi, redblock 196 000000E6 BB10020000 mov ebx, 0210h ; non masked window copy 197 sys _video 197 <1> 197 <1> 197 <1> 197 <1> 197 <1> %if %0 >= 2 197 <1> mov ebx, %2 197 <1> %if %0 >= 3 197 <1> mov ecx, %3 197 <1> %if %0 = 4 197 <1> mov edx, %4 197 <1> %endif 197 <1> %endif 197 <1> %endif 197 000000EB B81F000000 <1> mov eax, %1 197 <1> 197 000000F0 CD40 <1> int 40h 198 199 ; copy green block to screen 200 ; at row 70, column 400 201 ; (block size: 120(w)*160(h) 202 203 000000F2 B990014600 mov ecx, (70*65536)+400 204 000000F7 BA7800A000 mov edx, (160*65536)+120 205 000000FC BE[688A0300] mov esi, greenblock 206 00000101 BB10020000 mov ebx, 0210h ; non masked window copy 207 sys _video 207 <1> 207 <1> 207 <1> 207 <1> 207 <1> %if %0 >= 2 207 <1> mov ebx, %2 207 <1> %if %0 >= 3 207 <1> mov ecx, %3 207 <1> %if %0 = 4 207 <1> mov edx, %4 207 <1> %endif 207 <1> %endif 207 <1> %endif 207 00000106 B81F000000 <1> mov eax, %1 207 <1> 207 0000010B CD40 <1> int 40h 208 209 ; copy yellow block to screen 210 ; at row 250, column 400 211 ; (block size: 120(w)*160(h) 212 213 0000010D B99001FA00 mov ecx, (250*65536)+400 214 00000112 BA7800A000 mov edx, (160*65536)+120 215 00000117 BE[68B60400] mov esi, yellowblock 216 0000011C BB10020000 mov ebx, 0210h ; non masked window copy 217 sys _video 217 <1> 217 <1> 217 <1> 217 <1> 217 <1> %if %0 >= 2 217 <1> mov ebx, %2 217 <1> %if %0 >= 3 217 <1> mov ecx, %3 217 <1> %if %0 = 4 217 <1> mov edx, %4 217 <1> %endif 217 <1> %endif 217 <1> %endif 217 00000121 B81F000000 <1> mov eax, %1 217 <1> 217 00000126 CD40 <1> int 40h 218 219 00000128 E817040000 call waitforkey 220 221 ; continue by using 222 ; window color modification sub functions 223 224 ; apply SUB to window's pixel colors 225 0000012D B960804000 mov ecx, 408060h 226 00000132 BA78004600 mov edx, (70*65536)+120 227 00000137 BE7800A000 mov esi, (160*65536)+120 228 0000013C BB13020000 mov ebx, 0213h ; non masked window SUB op 229 sys _video 229 <1> 229 <1> 229 <1> 229 <1> 229 <1> %if %0 >= 2 229 <1> mov ebx, %2 229 <1> %if %0 >= 3 229 <1> mov ecx, %3 229 <1> %if %0 = 4 229 <1> mov edx, %4 229 <1> %endif 229 <1> %endif 229 <1> %endif 229 00000141 B81F000000 <1> mov eax, %1 229 <1> 229 00000146 CD40 <1> int 40h 230 231 00000148 E8F7030000 call waitforkey 232 233 ; apply ADD to pixel colors of 234 ; the window/block on row 70, column 120 with 235 ; block size 120(w)*160(h). 236 ;mov ecx, 408060h 237 ;mov edx, (70*65536)+120 238 ;mov esi, (160*65536)+120 239 ;mov ebx, 0212h ; non masked window ADD op 240 0000014D B312 mov bl, 12h 241 sys _video 241 <1> 241 <1> 241 <1> 241 <1> 241 <1> %if %0 >= 2 241 <1> mov ebx, %2 241 <1> %if %0 >= 3 241 <1> mov ecx, %3 241 <1> %if %0 = 4 241 <1> mov edx, %4 241 <1> %endif 241 <1> %endif 241 <1> %endif 241 0000014F B81F000000 <1> mov eax, %1 241 <1> 241 00000154 CD40 <1> int 40h 242 243 00000156 E8E9030000 call waitforkey 244 245 ; apply ADD to pixel colors of 246 ; the window/block on row 250, column 120 with 247 ; block size 120(w)*160(h). 248 0000015B B940000000 mov ecx, 40h 249 00000160 BA7800FA00 mov edx, (250*65536)+120 250 ;mov esi, (160*65536)+120 251 ;mov ebx, 0212h ; non masked window ADD op 252 00000165 B312 mov bl, 12h 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 00000167 B81F000000 <1> mov eax, %1 253 <1> 253 0000016C CD40 <1> int 40h 254 255 0000016E E8D1030000 call waitforkey 256 257 ; apply SUB to window's pixel colors 258 ;mov ecx, 40h 259 ;mov edx, (250*65536)+120 260 ;mov esi, (160*65536)+120 261 ;mov ebx, 0213h ; non masked window SUB op 262 00000173 B313 mov bl, 13h 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 00000175 B81F000000 <1> mov eax, %1 263 <1> 263 0000017A CD40 <1> int 40h 264 265 0000017C E8C3030000 call waitforkey 266 267 ; or, and, xor 268 269 ; apply AND to window's pixel colors 270 00000181 B97F7F0700 mov ecx, 077F7Fh 271 00000186 BA78004600 mov edx, (70*65536)+120 272 ;mov esi, (160*65536)+120 273 ;mov ebx, 0215h ; non masked window AND op 274 0000018B B315 mov bl, 15h 275 sys _video 275 <1> 275 <1> 275 <1> 275 <1> 275 <1> %if %0 >= 2 275 <1> mov ebx, %2 275 <1> %if %0 >= 3 275 <1> mov ecx, %3 275 <1> %if %0 = 4 275 <1> mov edx, %4 275 <1> %endif 275 <1> %endif 275 <1> %endif 275 0000018D B81F000000 <1> mov eax, %1 275 <1> 275 00000192 CD40 <1> int 40h 276 277 00000194 E8AB030000 call waitforkey 278 279 ; apply AND to pixel colors of 280 ; the window/block on row 160, column 260 with 281 ; block size 120(w)*160(h). 282 ;mov ecx, 077F7Fh 283 00000199 BA0401A000 mov edx, (160*65536)+260 284 ;mov esi, (160*65536)+120 285 ;mov ebx, 0215h ; non masked window AND op 286 sys _video 286 <1> 286 <1> 286 <1> 286 <1> 286 <1> %if %0 >= 2 286 <1> mov ebx, %2 286 <1> %if %0 >= 3 286 <1> mov ecx, %3 286 <1> %if %0 = 4 286 <1> mov edx, %4 286 <1> %endif 286 <1> %endif 286 <1> %endif 286 0000019E B81F000000 <1> mov eax, %1 286 <1> 286 000001A3 CD40 <1> int 40h 287 288 000001A5 E89A030000 call waitforkey 289 290 ; apply OR to pixel colors of 291 ; the window/block on row 70, column 400 with 292 ; block size 120(w)*160(h). 293 000001AA B950301000 mov ecx, 103050h 294 000001AF BA90014600 mov edx, (70*65536)+400 295 ;mov esi, (160*65536)+120 296 ;mov ebx, 0214h ; non masked window OR op 297 000001B4 B314 mov bl, 14h 298 sys _video 298 <1> 298 <1> 298 <1> 298 <1> 298 <1> %if %0 >= 2 298 <1> mov ebx, %2 298 <1> %if %0 >= 3 298 <1> mov ecx, %3 298 <1> %if %0 = 4 298 <1> mov edx, %4 298 <1> %endif 298 <1> %endif 298 <1> %endif 298 000001B6 B81F000000 <1> mov eax, %1 298 <1> 298 000001BB CD40 <1> int 40h 299 300 000001BD E882030000 call waitforkey 301 302 ; apply OR to pixel colors of 303 ; the window/block on row 250, column 400 with 304 ; block size 120(w)*160(h). 305 ;mov ecx, 103050h 306 000001C2 BA9001FA00 mov edx, (250*65536)+400 307 ;mov esi, (160*65536)+120 308 ;mov ebx, 0214h ; non masked window OR op 309 sys _video 309 <1> 309 <1> 309 <1> 309 <1> 309 <1> %if %0 >= 2 309 <1> mov ebx, %2 309 <1> %if %0 >= 3 309 <1> mov ecx, %3 309 <1> %if %0 = 4 309 <1> mov edx, %4 309 <1> %endif 309 <1> %endif 309 <1> %endif 309 000001C7 B81F000000 <1> mov eax, %1 309 <1> 309 000001CC CD40 <1> int 40h 310 311 000001CE E871030000 call waitforkey 312 313 ; apply XOR to pixel colors of 314 ; the window/block on row 250, column 120 with 315 ; block size 120(w)*160(h). 316 000001D3 B94F7F3F00 mov ecx, 3F7F4Fh 317 000001D8 BA7800FA00 mov edx, (250*65536)+120 318 ;mov esi, (160*65536)+120 319 ;mov ebx, 0216h ; non masked window XOR op 320 000001DD B316 mov bl, 16h 321 sys _video 321 <1> 321 <1> 321 <1> 321 <1> 321 <1> %if %0 >= 2 321 <1> mov ebx, %2 321 <1> %if %0 >= 3 321 <1> mov ecx, %3 321 <1> %if %0 = 4 321 <1> mov edx, %4 321 <1> %endif 321 <1> %endif 321 <1> %endif 321 000001DF B81F000000 <1> mov eax, %1 321 <1> 321 000001E4 CD40 <1> int 40h 322 323 000001E6 E859030000 call waitforkey 324 325 ; apply XOR to pixel colors of 326 ; the window/block on row 70, column 400 with 327 ; block size 120(w)*160(h). 328 ;mov ecx, 3F7F4Fh 329 000001EB BA90014600 mov edx, (70*65536)+400 330 ;mov esi, (160*65536)+120 331 ;mov ebx, 0216h ; non masked window XOR op 332 sys _video 332 <1> 332 <1> 332 <1> 332 <1> 332 <1> %if %0 >= 2 332 <1> mov ebx, %2 332 <1> %if %0 >= 3 332 <1> mov ecx, %3 332 <1> %if %0 = 4 332 <1> mov edx, %4 332 <1> %endif 332 <1> %endif 332 <1> %endif 332 000001F0 B81F000000 <1> mov eax, %1 332 <1> 332 000001F5 CD40 <1> int 40h 333 334 000001F7 E848030000 call waitforkey 335 336 ; Mix colors 337 338 ; MIX pixel colors of 339 ; the window/block on row 70, column 120 with 340 ; block size 120(w)*160(h). 341 000001FC B940201000 mov ecx, 102040h 342 00000201 BA78004600 mov edx, (70*65536)+120 343 ;mov esi, (160*65536)+120 344 ;mov ebx, 021Bh ; non masked window MIX op 345 00000206 B31B mov bl, 1Bh 346 sys _video 346 <1> 346 <1> 346 <1> 346 <1> 346 <1> %if %0 >= 2 346 <1> mov ebx, %2 346 <1> %if %0 >= 3 346 <1> mov ecx, %3 346 <1> %if %0 = 4 346 <1> mov edx, %4 346 <1> %endif 346 <1> %endif 346 <1> %endif 346 00000208 B81F000000 <1> mov eax, %1 346 <1> 346 0000020D CD40 <1> int 40h 347 348 0000020F E830030000 call waitforkey 349 350 ; MIX pixel colors of 351 ; the window/block on row 160, column 260 with 352 ; block size 120(w)*160(h). 353 ;mov ecx, 102040h 354 00000214 BA0401A000 mov edx, (160*65536)+260 355 ;mov esi, (160*65536)+120 356 ;mov ebx, 021Bh ; non masked window MIX op 357 sys _video 357 <1> 357 <1> 357 <1> 357 <1> 357 <1> %if %0 >= 2 357 <1> mov ebx, %2 357 <1> %if %0 >= 3 357 <1> mov ecx, %3 357 <1> %if %0 = 4 357 <1> mov edx, %4 357 <1> %endif 357 <1> %endif 357 <1> %endif 357 00000219 B81F000000 <1> mov eax, %1 357 <1> 357 0000021E CD40 <1> int 40h 358 359 00000220 E81F030000 call waitforkey 360 361 ; MIX pixel colors of 362 ; the window/block on row 250, column 400 with 363 ; block size 120(w)*160(h). 364 ;mov ecx, 102040h 365 00000225 BA9001FA00 mov edx, (250*65536)+400 366 ;mov esi, (160*65536)+120 367 ;mov ebx, 021Bh ; non masked window MIX op 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 0000022A B81F000000 <1> mov eax, %1 368 <1> 368 0000022F CD40 <1> int 40h 369 370 00000231 E80E030000 call waitforkey 371 372 ; CHANGE color (full screen) 373 00000236 31C9 xor ecx, ecx ; 0 ; black 374 00000238 BB01020000 mov ebx, 0201h ; Full screen, new color 375 sys _video 375 <1> 375 <1> 375 <1> 375 <1> 375 <1> %if %0 >= 2 375 <1> mov ebx, %2 375 <1> %if %0 >= 3 375 <1> mov ecx, %3 375 <1> %if %0 = 4 375 <1> mov edx, %4 375 <1> %endif 375 <1> %endif 375 <1> %endif 375 0000023D B81F000000 <1> mov eax, %1 375 <1> 375 00000242 CD40 <1> int 40h 376 377 00000244 B900000100 mov ecx, 65536 378 blackloop: 379 00000249 09C9 or ecx, ecx 380 0000024B 90 nop 381 0000024C 90 nop 382 0000024D 90 nop 383 0000024E E2F9 loop blackloop 384 385 00000250 B9FFFFFF00 mov ecx, 0FFFFFFh ; white 386 00000255 BB01020000 mov ebx, 0201h ; Full screen, new color 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 0000025A B81F000000 <1> mov eax, %1 387 <1> 387 0000025F CD40 <1> int 40h 388 389 ;mov dword [tcolor], 0 390 00000261 BEF000D000 mov esi, 208*65536+240 391 00000266 BD[53060000] mov ebp, txt_white 392 0000026B E80F030000 call print_text 393 394 00000270 E8CF020000 call waitforkey 395 396 ; full screen sub 397 00000275 B90000FF00 mov ecx, 0FF0000h 398 0000027A B303 mov bl, 03h 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 0000027C B81F000000 <1> mov eax, %1 399 <1> 399 00000281 CD40 <1> int 40h 400 401 00000283 E8BC020000 call waitforkey 402 403 ; full screen add 404 ;mov ecx, 0FF0000h 405 00000288 B302 mov bl, 02h 406 sys _video 406 <1> 406 <1> 406 <1> 406 <1> 406 <1> %if %0 >= 2 406 <1> mov ebx, %2 406 <1> %if %0 >= 3 406 <1> mov ecx, %3 406 <1> %if %0 = 4 406 <1> mov edx, %4 406 <1> %endif 406 <1> %endif 406 <1> %endif 406 0000028A B81F000000 <1> mov eax, %1 406 <1> 406 0000028F CD40 <1> int 40h 407 408 00000291 E8AE020000 call waitforkey 409 410 00000296 B9FF000000 mov ecx, 0FFh ; blue 411 0000029B BB01020000 mov ebx, 0201h ; Full screen, new color 412 sys _video 412 <1> 412 <1> 412 <1> 412 <1> 412 <1> %if %0 >= 2 412 <1> mov ebx, %2 412 <1> %if %0 >= 3 412 <1> mov ecx, %3 412 <1> %if %0 = 4 412 <1> mov edx, %4 412 <1> %endif 412 <1> %endif 412 <1> %endif 412 000002A0 B81F000000 <1> mov eax, %1 412 <1> 412 000002A5 CD40 <1> int 40h 413 414 000002A7 C705[64060000]FFFF- mov dword [tcolor], 0FFFFFFh 414 000002AF FF00 415 000002B1 BE0201D000 mov esi, 208*65536+258 416 000002B6 BD[3D060000] mov ebp, txt_blue 417 000002BB E8BF020000 call print_text 418 419 000002C0 E87F020000 call waitforkey 420 421 ; full screen add 422 000002C5 B90000FF00 mov ecx, 0FF0000h 423 000002CA B302 mov bl, 02h 424 sys _video 424 <1> 424 <1> 424 <1> 424 <1> 424 <1> %if %0 >= 2 424 <1> mov ebx, %2 424 <1> %if %0 >= 3 424 <1> mov ecx, %3 424 <1> %if %0 = 4 424 <1> mov edx, %4 424 <1> %endif 424 <1> %endif 424 <1> %endif 424 000002CC B81F000000 <1> mov eax, %1 424 <1> 424 000002D1 CD40 <1> int 40h 425 426 000002D3 E86C020000 call waitforkey 427 428 ; full screen sub 429 ;mov ecx, 0FF0000h 430 000002D8 B303 mov bl, 03h 431 sys _video 431 <1> 431 <1> 431 <1> 431 <1> 431 <1> %if %0 >= 2 431 <1> mov ebx, %2 431 <1> %if %0 >= 3 431 <1> mov ecx, %3 431 <1> %if %0 = 4 431 <1> mov edx, %4 431 <1> %endif 431 <1> %endif 431 <1> %endif 431 000002DA B81F000000 <1> mov eax, %1 431 <1> 431 000002DF CD40 <1> int 40h 432 433 000002E1 E85E020000 call waitforkey 434 435 ;mov ecx, 0FF0000h ; red 436 000002E6 BB01020000 mov ebx, 0201h ; Full screen, new color 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 000002EB B81F000000 <1> mov eax, %1 437 <1> 437 000002F0 CD40 <1> int 40h 438 439 ;mov dword [tcolor], 0FFFFFFh 440 000002F2 BE1401D000 mov esi, 208*65536+276 441 000002F7 BD[42060000] mov ebp, txt_red 442 000002FC E87E020000 call print_text 443 444 00000301 E83E020000 call waitforkey 445 446 ; full screen add 447 00000306 B9FF400000 mov ecx, 0040FFh 448 0000030B B302 mov bl, 02h 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 0000030D B81F000000 <1> mov eax, %1 449 <1> 449 00000312 CD40 <1> int 40h 450 451 00000314 E82B020000 call waitforkey 452 453 ; full screen sub 454 ;mov ecx, 0040FFh 455 00000319 B303 mov bl, 03h 456 sys _video 456 <1> 456 <1> 456 <1> 456 <1> 456 <1> %if %0 >= 2 456 <1> mov ebx, %2 456 <1> %if %0 >= 3 456 <1> mov ecx, %3 456 <1> %if %0 = 4 456 <1> mov edx, %4 456 <1> %endif 456 <1> %endif 456 <1> %endif 456 0000031B B81F000000 <1> mov eax, %1 456 <1> 456 00000320 CD40 <1> int 40h 457 458 00000322 E81D020000 call waitforkey 459 460 ; full screen OR 461 00000327 B900FF0000 mov ecx, 00FF00h 462 0000032C B304 mov bl, 04h 463 sys _video 463 <1> 463 <1> 463 <1> 463 <1> 463 <1> %if %0 >= 2 463 <1> mov ebx, %2 463 <1> %if %0 >= 3 463 <1> mov ecx, %3 463 <1> %if %0 = 4 463 <1> mov edx, %4 463 <1> %endif 463 <1> %endif 463 <1> %endif 463 0000032E B81F000000 <1> mov eax, %1 463 <1> 463 00000333 CD40 <1> int 40h 464 465 00000335 E80A020000 call waitforkey 466 467 ; full screen AND 468 ;mov ecx, 001F00h 469 0000033A B51F mov ch, 1Fh 470 0000033C B305 mov bl, 05h 471 sys _video 471 <1> 471 <1> 471 <1> 471 <1> 471 <1> %if %0 >= 2 471 <1> mov ebx, %2 471 <1> %if %0 >= 3 471 <1> mov ecx, %3 471 <1> %if %0 = 4 471 <1> mov edx, %4 471 <1> %endif 471 <1> %endif 471 <1> %endif 471 0000033E B81F000000 <1> mov eax, %1 471 <1> 471 00000343 CD40 <1> int 40h 472 473 00000345 E8FA010000 call waitforkey 474 475 ; full screen XOR 476 0000034A B97F3F0700 mov ecx, 073F7Fh 477 0000034F B306 mov bl, 06h 478 sys _video 478 <1> 478 <1> 478 <1> 478 <1> 478 <1> %if %0 >= 2 478 <1> mov ebx, %2 478 <1> %if %0 >= 3 478 <1> mov ecx, %3 478 <1> %if %0 = 4 478 <1> mov edx, %4 478 <1> %endif 478 <1> %endif 478 <1> %endif 478 00000351 B81F000000 <1> mov eax, %1 478 <1> 478 00000356 CD40 <1> int 40h 479 480 00000358 E8E7010000 call waitforkey 481 482 0000035D B900FF0000 mov ecx, 00FF00h ; green 483 00000362 BB01020000 mov ebx, 0201h ; Full screen, new color 484 sys _video 484 <1> 484 <1> 484 <1> 484 <1> 484 <1> %if %0 >= 2 484 <1> mov ebx, %2 484 <1> %if %0 >= 3 484 <1> mov ecx, %3 484 <1> %if %0 = 4 484 <1> mov edx, %4 484 <1> %endif 484 <1> %endif 484 <1> %endif 484 00000367 B81F000000 <1> mov eax, %1 484 <1> 484 0000036C CD40 <1> int 40h 485 486 0000036E C705[64060000]0000- mov dword [tcolor], 0 486 00000376 0000 487 00000378 BEF000D000 mov esi, 208*65536+240 488 0000037D BD[46060000] mov ebp, txt_green 489 00000382 E8F8010000 call print_text 490 491 00000387 E8B8010000 call waitforkey 492 493 ; full screen MIX 494 0000038C B97F003F00 mov ecx, 3F007Fh ; green 495 00000391 B30B mov bl, 0Bh 496 sys _video 496 <1> 496 <1> 496 <1> 496 <1> 496 <1> %if %0 >= 2 496 <1> mov ebx, %2 496 <1> %if %0 >= 3 496 <1> mov ecx, %3 496 <1> %if %0 = 4 496 <1> mov edx, %4 496 <1> %endif 496 <1> %endif 496 <1> %endif 496 00000393 B81F000000 <1> mov eax, %1 496 <1> 496 00000398 CD40 <1> int 40h 497 498 0000039A E8A5010000 call waitforkey 499 500 0000039F B900FFFF00 mov ecx, 0FFFF00h ; yellow 501 000003A4 BB01020000 mov ebx, 0201h ; Full screen, new color 502 sys _video 502 <1> 502 <1> 502 <1> 502 <1> 502 <1> %if %0 >= 2 502 <1> mov ebx, %2 502 <1> %if %0 >= 3 502 <1> mov ecx, %3 502 <1> %if %0 = 4 502 <1> mov edx, %4 502 <1> %endif 502 <1> %endif 502 <1> %endif 502 000003A9 B81F000000 <1> mov eax, %1 502 <1> 502 000003AE CD40 <1> int 40h 503 504 000003B0 C705[64060000]FFFF- mov dword [tcolor], 0FFFFFFh 504 000003B8 FF00 505 000003BA BEDE00D000 mov esi, 208*65536+222 506 000003BF BD[4C060000] mov ebp, txt_yellow 507 000003C4 E8B6010000 call print_text 508 509 000003C9 E876010000 call waitforkey 510 511 ; full screen NOT 512 000003CE B307 mov bl, 07h 513 sys _video 513 <1> 513 <1> 513 <1> 513 <1> 513 <1> %if %0 >= 2 513 <1> mov ebx, %2 513 <1> %if %0 >= 3 513 <1> mov ecx, %3 513 <1> %if %0 = 4 513 <1> mov edx, %4 513 <1> %endif 513 <1> %endif 513 <1> %endif 513 000003D0 B81F000000 <1> mov eax, %1 513 <1> 513 000003D5 CD40 <1> int 40h 514 515 000003D7 E868010000 call waitforkey 516 517 ; full screen NOT 518 ;mov bl, 07h 519 sys _video 519 <1> 519 <1> 519 <1> 519 <1> 519 <1> %if %0 >= 2 519 <1> mov ebx, %2 519 <1> %if %0 >= 3 519 <1> mov ecx, %3 519 <1> %if %0 = 4 519 <1> mov edx, %4 519 <1> %endif 519 <1> %endif 519 <1> %endif 519 000003DC B81F000000 <1> mov eax, %1 519 <1> 519 000003E1 CD40 <1> int 40h 520 521 000003E3 E85C010000 call waitforkey 522 523 ; full screen MIX 524 000003E8 B9FF007F00 mov ecx, 7F00FFh 525 000003ED B30B mov bl, 0Bh 526 sys _video 526 <1> 526 <1> 526 <1> 526 <1> 526 <1> %if %0 >= 2 526 <1> mov ebx, %2 526 <1> %if %0 >= 3 526 <1> mov ecx, %3 526 <1> %if %0 = 4 526 <1> mov edx, %4 526 <1> %endif 526 <1> %endif 526 <1> %endif 526 000003EF B81F000000 <1> mov eax, %1 526 <1> 526 000003F4 CD40 <1> int 40h 527 528 000003F6 E849010000 call waitforkey 529 530 ; Full screen copy 531 000003FB BE[68060000] mov esi, fullscreen_buffer 532 00000400 89F7 mov edi, esi 533 534 ; Black 535 00000402 B900190000 mov ecx, 640*10 536 00000407 31C0 xor eax, eax ; black 537 00000409 F3AB rep stosd 538 539 ; White 540 0000040B B9800C0000 mov ecx, 640*5 541 00000410 B8FFFFFF00 mov eax, 0FFFFFFh 542 00000415 F3AB rep stosd 543 544 ; Black 545 00000417 B9800C0000 mov ecx, 640*5 546 0000041C 31C0 xor eax, eax ; black 547 0000041E F3AB rep stosd 548 549 ; Blue 550 00000420 B900130100 mov ecx, 640*110 551 ;xor eax, eax 552 00000425 B0FF mov al, 0FFh 553 00000427 F3AB rep stosd 554 555 ; Red 556 00000429 B900130100 mov ecx, 640*110 557 0000042E B80000FF00 mov eax, 0FF0000h 558 00000433 F3AB rep stosd 559 560 ; Green 561 00000435 B900130100 mov ecx, 640*110 562 0000043A B800FF0000 mov eax, 0FF00h 563 0000043F F3AB rep stosd 564 565 ; Yellow 566 00000441 B900130100 mov ecx, 640*110 567 00000446 B800FFFF00 mov eax, 0FFFF00h 568 0000044B F3AB rep stosd 569 570 ; Black 571 0000044D B9800C0000 mov ecx, 640*5 572 00000452 31C0 xor eax, eax ; black 573 00000454 F3AB rep stosd 574 575 ; White 576 00000456 B9800C0000 mov ecx, 640*5 577 0000045B B8FFFFFF00 mov eax, 0FFFFFFh 578 00000460 F3AB rep stosd 579 580 ; Black 581 00000462 B900190000 mov ecx, 640*10 582 00000467 31C0 xor eax, eax ; black 583 00000469 F3AB rep stosd 584 585 0000046B BB00020000 mov ebx, 0200h ; Full screen copy 586 sys _video 586 <1> 586 <1> 586 <1> 586 <1> 586 <1> %if %0 >= 2 586 <1> mov ebx, %2 586 <1> %if %0 >= 3 586 <1> mov ecx, %3 586 <1> %if %0 = 4 586 <1> mov edx, %4 586 <1> %endif 586 <1> %endif 586 <1> %endif 586 00000470 B81F000000 <1> mov eax, %1 586 <1> 586 00000475 CD40 <1> int 40h 587 588 00000477 E8C8000000 call waitforkey 589 590 ;mov byte [tcolor], 0FFFFFFh 591 592 0000047C BE2B002B00 mov esi, 43*65536+43 593 00000481 BD[3D060000] mov ebp, txt_blue 594 00000486 E8F4000000 call print_text 595 596 0000048B E8B4000000 call waitforkey 597 598 00000490 BE2B009900 mov esi, 153*65536+43 599 00000495 BD[42060000] mov ebp, txt_red 600 0000049A E8E0000000 call print_text 601 602 0000049F E8A0000000 call waitforkey 603 604 000004A4 BE2B000701 mov esi, 263*65536+43 605 000004A9 BD[46060000] mov ebp, txt_green 606 000004AE E8CC000000 call print_text 607 608 000004B3 E88C000000 call waitforkey 609 610 000004B8 BE2B007501 mov esi, 373*65536+43 611 000004BD BD[4C060000] mov ebp, txt_yellow 612 000004C2 E8B8000000 call print_text 613 614 000004C7 E878000000 call waitforkey 615 616 000004CC C705[64060000]0000- mov dword [tcolor], 0 616 000004D4 0000 617 618 000004D6 BE2B000701 mov esi, 263*65536+43 619 000004DB BD[46060000] mov ebp, txt_green 620 000004E0 E89A000000 call print_text 621 622 000004E5 E85A000000 call waitforkey 623 624 000004EA BE2B007501 mov esi, 373*65536+43 625 000004EF BD[4C060000] mov ebp, txt_yellow 626 000004F4 E886000000 call print_text 627 628 000004F9 E846000000 call waitforkey 629 630 ; Replace white color (text) only in blue block 631 ; (blue block starts at row 20) 632 633 000004FE B9FFFFFF00 mov ecx, 0FFFFFFh ; WHITE (current color) 634 00000503 29D2 sub edx, edx ; 0 ; BLACK (new color) 635 00000505 BE28001400 mov esi, 20*65536+40 ; column 40, row 20 636 0000050A BFA0006E00 mov edi, 110*65536+160 ; size: 110*160 637 0000050F BB1C020000 mov ebx, 021Ch ; Replace color in window 638 sys _video 638 <1> 638 <1> 638 <1> 638 <1> 638 <1> %if %0 >= 2 638 <1> mov ebx, %2 638 <1> %if %0 >= 3 638 <1> mov ecx, %3 638 <1> %if %0 = 4 638 <1> mov edx, %4 638 <1> %endif 638 <1> %endif 638 <1> %endif 638 00000514 B81F000000 <1> mov eax, %1 638 <1> 638 00000519 CD40 <1> int 40h 639 640 0000051B E824000000 call waitforkey 641 642 ; Replace white color (text) only in red block 643 ; (red block starts at row 130) 644 645 ;mov ecx, 0FFFFFFh ; WHITE (current color) 646 ;sub edx, edx ; 0 ; BLACK (new color) 647 00000520 BE28008200 mov esi, 130*65536+40 ; column 40, row 130 648 00000525 BF78006E00 mov edi, 110*65536+120 ; size: 110*120 649 ;mov ebx, 021Ch ; Replace color in window 650 sys _video 650 <1> 650 <1> 650 <1> 650 <1> 650 <1> %if %0 >= 2 650 <1> mov ebx, %2 650 <1> %if %0 >= 3 650 <1> mov ecx, %3 650 <1> %if %0 = 4 650 <1> mov edx, %4 650 <1> %endif 650 <1> %endif 650 <1> %endif 650 0000052A B81F000000 <1> mov eax, %1 650 <1> 650 0000052F CD40 <1> int 40h 651 652 00000531 E80E000000 call waitforkey 653 654 terminate: 655 00000536 E82C000000 call set_text_mode 656 sys _exit 656 <1> 656 <1> 656 <1> 656 <1> 656 <1> %if %0 >= 2 656 <1> mov ebx, %2 656 <1> %if %0 >= 3 656 <1> mov ecx, %3 656 <1> %if %0 = 4 656 <1> mov edx, %4 656 <1> %endif 656 <1> %endif 656 <1> %endif 656 0000053B B801000000 <1> mov eax, %1 656 <1> 656 00000540 CD40 <1> int 40h 657 halt: 658 00000542 EBFE jmp short halt 659 660 waitforkey: 661 00000544 B401 mov ah, 1 662 00000546 CD32 int 32h 663 00000548 740B jz short getkey 664 0000054A FF05[60060000] inc dword [counter] 665 00000550 90 nop 666 00000551 90 nop 667 00000552 90 nop 668 00000553 EBEF jmp short waitforkey 669 getkey: 670 00000555 30E4 xor ah, ah 671 00000557 CD32 int 32h 672 673 00000559 663D032E cmp ax, 2E03h 674 0000055D 7405 je short _terminate 675 0000055F 3C1B cmp al, 1Bh ; ESC key 676 00000561 7401 je short _terminate 677 00000563 C3 retn 678 _terminate: 679 00000564 58 pop eax ; return address 680 00000565 EBCF jmp short terminate 681 682 set_text_mode: 683 00000567 30E4 xor ah, ah 684 00000569 B003 mov al, 3 685 ;int 10h ; al = 03h text mode, int 10 video 686 0000056B CD31 int 31h ; TRDOS 386 - Video interrupt 687 0000056D C3 retn 688 689 print_msg: 690 0000056E B40E mov ah, 0Eh 691 00000570 BB07000000 mov ebx, 7 692 ;mov bl, 7 ; char attribute & color 693 p_next_chr: 694 00000575 AC lodsb 695 00000576 08C0 or al, al 696 00000578 7404 jz short p_retn ; retn 697 0000057A CD31 int 31h 698 0000057C EBF7 jmp short p_next_chr 699 p_retn: 700 0000057E C3 retn 701 702 print_text: 703 ; ebp = text address 704 ; esi = row/column position (si = column) 705 p_d_x: 706 ;mov dh, 0 ; 8x16 system font 707 0000057F B606 mov dh, 6 ; 32*64 scaled font (base: 8*16 system font) 708 p_d_x_n: 709 00000581 8A5500 mov dl, [ebp] 710 00000584 20D2 and dl, dl 711 00000586 7419 jz short p_d_x_ok 712 sys _video, 020Fh, [tcolor] 712 <1> 712 <1> 712 <1> 712 <1> 712 <1> %if %0 >= 2 712 00000588 BB0F020000 <1> mov ebx, %2 712 <1> %if %0 >= 3 712 0000058D 8B0D[64060000] <1> mov ecx, %3 712 <1> %if %0 = 4 712 <1> mov edx, %4 712 <1> %endif 712 <1> %endif 712 <1> %endif 712 00000593 B81F000000 <1> mov eax, %1 712 <1> 712 00000598 CD40 <1> int 40h 713 0000059A 45 inc ebp 714 0000059B 6683C624 add si, 36 ; next char pos 715 0000059F EBE0 jmp short p_d_x_n 716 p_d_x_ok: 717 000005A1 C3 retn 718 719 program_msg: 720 000005A2 5452444F5320333836- db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Block Operations" 720 000005AB 2076322E302E33202D- 720 000005B4 202827737973766964- 720 000005BD 656F27292054657374- 720 000005C6 2050726F6772616D20- 720 000005CF 2D20426C6F636B204F- 720 000005D8 7065726174696F6E73 721 000005E1 0D0A db 0Dh, 0Ah 722 000005E3 6279204572646F6761- db "by Erdogan Tan - 28/02/2021" 722 000005EC 6E2054616E202D2032- 722 000005F5 382F30322F32303231 723 ;db 0Dh, 0Ah, 0 724 000005FE 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 725 00000602 507265737320616E79- db "Press any key to continue .." 725 0000060B 206B657920746F2063- 725 00000614 6F6E74696E7565202E- 725 0000061D 2E 726 0000061E 0D0A db 0Dh, 0Ah 727 00000620 285072657373204553- db "(Press ESC to exit) .." 727 00000629 4320746F2065786974- 727 00000632 29202E2E 728 00000636 0D0A db 0Dh, 0Ah 729 00000638 0D0A db 0Dh, 0Ah 730 731 nextline: 732 0000063A 0D0A00 db 0Dh, 0Ah, 0 733 734 txt_blue: 735 0000063D 424C554500 db "BLUE", 0 736 txt_red: 737 00000642 52454400 db "RED", 0 738 txt_green: 739 00000646 475245454E00 db "GREEN", 0 740 txt_yellow: 741 0000064C 59454C4C4F5700 db "YELLOW", 0 742 txt_white: 743 00000653 574849544500 db "WHITE", 0 744 txt_black: 745 00000659 424C41434B00 db "BLACK", 0 746 747 bss: 748 749 ABSOLUTE bss 750 751 0000065F alignb 4 752 753 counter: 754 00000660 resd 1 755 756 bss_start: 757 00000664 tcolor: resd 1 758 759 fullscreen_buffer: 760 whiteblock: 761 00000668 resb 120*160*4 762 blueblock: 763 00013268 resb 120*160*4 764 redblock: 765 00025E68 resb 120*160*4 766 greenblock: 767 00038A68 resb 120*160*4 768 yellowblock: 769 0004B668 resb 120*160*4 770 771 0005E268 resb (307200*4)-(96000*4) 772 bss_end: