1 ; **************************************************************************** 2 ; blocks16.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 02/03/2021 6 ; 7 ; **************************************************************************** 8 ; nasm blocks16.s -l blocks16.txt -o BLOCKS16.PRG -Z error.txt 9 ; (modified from 'blocks15.s', 02/03/2021 & 'blocks13.s', 01/03/2021) 10 11 ; 'sysvideo' bh = 2, block copy and modification test (VESA VBE mode 112h) 12 ; (mask color version) 13 14 ; 14/07/2020 15 ; 31/12/2017 16 ; TRDOS 386 (v2.0) system calls 17 _ver equ 0 18 _exit equ 1 19 _fork equ 2 20 _read equ 3 21 _write equ 4 22 _open equ 5 23 _close equ 6 24 _wait equ 7 25 _create equ 8 26 _rename equ 9 27 _delete equ 10 28 _exec equ 11 29 _chdir equ 12 30 _time equ 13 31 _mkdir equ 14 32 _chmod equ 15 33 _rmdir equ 16 34 _break equ 17 35 _drive equ 18 36 _seek equ 19 37 _tell equ 20 38 _memory equ 21 39 _prompt equ 22 40 _path equ 23 41 _env equ 24 42 _stime equ 25 43 _quit equ 26 44 _intr equ 27 45 _dir equ 28 46 _emt equ 29 47 _ldrvt equ 30 48 _video equ 31 49 _audio equ 32 50 _timer equ 33 51 _sleep equ 34 52 _msg equ 35 53 _geterr equ 36 54 _fpstat equ 37 55 _pri equ 38 56 _rele equ 39 57 _fff equ 40 58 _fnf equ 41 59 _alloc equ 42 60 _dalloc equ 43 61 _calbac equ 44 62 _dma equ 45 63 64 %macro sys 1-4 65 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 66 ; 03/09/2015 67 ; 13/04/2015 68 ; Retro UNIX 386 v1 system call. 69 %if %0 >= 2 70 mov ebx, %2 71 %if %0 >= 3 72 mov ecx, %3 73 %if %0 = 4 74 mov edx, %4 75 %endif 76 %endif 77 %endif 78 mov eax, %1 79 ;int 30h 80 int 40h ; TRDOS 386 (TRDOS v2.0) 81 %endmacro 82 83 ; Retro UNIX 386 v1 system call format: 84 ; sys systemcall (eax) , , 85 86 [BITS 32] ; We need 32-bit intructions for protected mode 87 88 [ORG 0] 89 90 START_CODE: 91 ; clear bss 92 00000000 BF[AC050000] mov edi, bss_start 93 00000005 B901B00400 mov ecx, (bss_end - bss_start)/4 94 ;xor eax, eax 95 0000000A F3AB rep stosd 96 97 ; program message 98 0000000C BE[EB040000] mov esi, program_msg 99 00000011 E8A1040000 call print_msg 100 101 00000016 30E4 xor ah, ah 102 ;int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY 103 ; Return: AH = scan code, AL = character 104 00000018 CD32 int 32h ; TRDOS 386 Keyboard interrupt 105 106 ; Get VESA VBE video bios number 107 ; (vbe2 or vbe3, emulator or not) 108 ;mov ebx, 0906h 109 ;sys _video 110 111 ; get [truecolor] status (24bpp or 32bpp for VBE3 vbios) 112 0000001A BB09090000 mov ebx, 0909h 113 sys _video 113 <1> 113 <1> 113 <1> 113 <1> 113 <1> %if %0 >= 2 113 <1> mov ebx, %2 113 <1> %if %0 >= 3 113 <1> mov ecx, %3 113 <1> %if %0 = 4 113 <1> mov edx, %4 113 <1> %endif 113 <1> %endif 113 <1> %endif 113 0000001F B81F000000 <1> mov eax, %1 113 <1> 113 00000024 CD40 <1> int 40h 114 115 00000026 B912010000 mov ecx, 112h ; VESA VBE video mode (640x480, 24bpp) 116 117 ;cmp ah, 3 118 ;je short set_vmode 119 ;cmp ah, 2 120 ;;jne terminate ; invalid !? 121 ;jne short set_vmode 122 ;and al, al 123 ;jz short set_vmode ; invalid !? (AL must be >= C0h.) 124 125 0000002B 3C20 cmp al, 32 126 0000002D 7402 je short set_vmode 127 128 ; VBE2 bios or default truecolor bpp is 24 bpp 129 ; so, we are using video mode 142h 130 ; (TRDOS 386 running in emulator or very old hardware!) 131 132 ; BOCHS/QEMU/VBOX emulator 133 0000002F B142 mov cl, 42h ; Bochs/Plex86 video mode 142h 134 ; (640*480, 32bpp) 135 136 ; Set Video Mode to 112h ; 640x480, 32 bit true colors 137 ; 138 ; NOTE: NVIDIA GEFORCE FX 550 VIDEO BIOS uses 32bpp 139 ; instead of 24bpp for same VBE video mode numbers. 140 ; So, 112h is 640*480, 24bpp for BOCHS/QEMU emulator 141 ; but, it is 640*480, 32 bpp for real computer 142 ; with NVIDIA graphics card and video bios. 143 ; (Also it is -it must be- 32bpp for other new hardware.) 144 145 ;sys _video, 08FFh, 112h 146 set_vmode: 147 ; ecx = VESA VBE video mode 148 sys _video, 08FFh 148 <1> 148 <1> 148 <1> 148 <1> 148 <1> %if %0 >= 2 148 00000031 BBFF080000 <1> mov ebx, %2 148 <1> %if %0 >= 3 148 <1> mov ecx, %3 148 <1> %if %0 = 4 148 <1> mov edx, %4 148 <1> %endif 148 <1> %endif 148 <1> %endif 148 00000036 B81F000000 <1> mov eax, %1 148 <1> 148 0000003B CD40 <1> int 40h 149 0000003D 09C0 or eax, eax 150 ;jz short terminate 151 ;mov [LFB_ADDR], edx ; pointer to LFB info table/structure 152 0000003F 7505 jnz short set_vesa_mode_112h_ok 153 00000041 E939040000 jmp terminate 154 155 set_vesa_mode_112h_ok: 156 00000046 B9FFFFFF00 mov ecx, 0FFFFFFh ; WHITE 157 0000004B BB01020000 mov ebx, 0201h ; Full screen, new color 158 sys _video 158 <1> 158 <1> 158 <1> 158 <1> 158 <1> %if %0 >= 2 158 <1> mov ebx, %2 158 <1> %if %0 >= 3 158 <1> mov ecx, %3 158 <1> %if %0 = 4 158 <1> mov edx, %4 158 <1> %endif 158 <1> %endif 158 <1> %endif 158 00000050 B81F000000 <1> mov eax, %1 158 <1> 158 00000055 CD40 <1> int 40h 159 160 ;mov dword [tcolor], 0 161 00000057 BEF000D000 mov esi, 208*65536+240 162 0000005C BD[9C050000] mov ebp, txt_white 163 00000061 E862040000 call print_text 164 165 00000066 E822040000 call waitforkey 166 167 ; full screen replace color (replace black colors) 168 0000006B 29C9 sub ecx, ecx ; 0 ; BLACK 169 0000006D BA0080FF00 mov edx, 0FF8000h ; ORANGE 170 00000072 B30C mov bl, 0Ch 171 sys _video 171 <1> 171 <1> 171 <1> 171 <1> 171 <1> %if %0 >= 2 171 <1> mov ebx, %2 171 <1> %if %0 >= 3 171 <1> mov ecx, %3 171 <1> %if %0 = 4 171 <1> mov edx, %4 171 <1> %endif 171 <1> %endif 171 <1> %endif 171 00000074 B81F000000 <1> mov eax, %1 171 <1> 171 00000079 CD40 <1> int 40h 172 173 0000007B E80D040000 call waitforkey 174 175 ; Mask color = black 176 ; full screen NOT (except mask color) 177 00000080 BF0080FF00 mov edi, 0FF8000h ; ORANGE 178 00000085 BB27020000 mov ebx, 0227h ; masked 'NOT', full screen 179 sys _video 179 <1> 179 <1> 179 <1> 179 <1> 179 <1> %if %0 >= 2 179 <1> mov ebx, %2 179 <1> %if %0 >= 3 179 <1> mov ecx, %3 179 <1> %if %0 = 4 179 <1> mov edx, %4 179 <1> %endif 179 <1> %endif 179 <1> %endif 179 0000008A B81F000000 <1> mov eax, %1 179 <1> 179 0000008F CD40 <1> int 40h 180 181 00000091 E8F7030000 call waitforkey 182 183 ; full screen replace color (replace black colors) 184 00000096 B90080FF00 mov ecx, 0FF8000h ; ORANGE 185 0000009B BAFFFFFF00 mov edx, 0FFFFFFh ; WHITE 186 000000A0 B30C mov bl, 0Ch 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 000000A2 B81F000000 <1> mov eax, %1 187 <1> 187 000000A7 CD40 <1> int 40h 188 189 000000A9 E8DF030000 call waitforkey 190 191 ; full screen - blue color 192 193 000000AE B9FF000000 mov ecx, 0FFh ; BLUE 194 000000B3 B301 mov bl, 01h ; Full screen, new color 195 sys _video 195 <1> 195 <1> 195 <1> 195 <1> 195 <1> %if %0 >= 2 195 <1> mov ebx, %2 195 <1> %if %0 >= 3 195 <1> mov ecx, %3 195 <1> %if %0 = 4 195 <1> mov edx, %4 195 <1> %endif 195 <1> %endif 195 <1> %endif 195 000000B5 B81F000000 <1> mov eax, %1 195 <1> 195 000000BA CD40 <1> int 40h 196 197 000000BC C705[AC050000]FFFF- mov dword [tcolor], 0FFFFFFh 197 000000C4 FF00 198 000000C6 BE0201D000 mov esi, 208*65536+258 199 000000CB BD[86050000] mov ebp, txt_blue 200 000000D0 E8F3030000 call print_text 201 202 000000D5 E8B3030000 call waitforkey 203 204 ; Mask color = white 205 ; full screen NOT (except mask color) 206 000000DA BFFFFFFF00 mov edi, 0FFFFFFh 207 000000DF B327 mov bl, 27h ; masked 'NOT', full screen 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 000000E1 B81F000000 <1> mov eax, %1 208 <1> 208 000000E6 CD40 <1> int 40h 209 210 000000E8 E8A0030000 call waitforkey 211 212 000000ED B90000FF00 mov ecx, 0FF0000h ; RED 213 000000F2 B301 mov bl, 01h ; Full screen, new color 214 sys _video 214 <1> 214 <1> 214 <1> 214 <1> 214 <1> %if %0 >= 2 214 <1> mov ebx, %2 214 <1> %if %0 >= 3 214 <1> mov ecx, %3 214 <1> %if %0 = 4 214 <1> mov edx, %4 214 <1> %endif 214 <1> %endif 214 <1> %endif 214 000000F4 B81F000000 <1> mov eax, %1 214 <1> 214 000000F9 CD40 <1> int 40h 215 216 ;mov dword [tcolor], 0FFFFFFh 217 000000FB BE1401D000 mov esi, 208*65536+276 218 00000100 BD[8B050000] mov ebp, txt_red 219 00000105 E8BE030000 call print_text 220 221 0000010A E87E030000 call waitforkey 222 223 ; Mask color = red 224 ; full screen NEW COLOR (except mask color) 225 0000010F BF0000FF00 mov edi, 0FF0000h ; mask color, RED 226 00000114 B900FFFF00 mov ecx, 0FFFF00h ; YELLOW 227 00000119 B321 mov bl, 21h ; masked new color, full screen 228 sys _video 228 <1> 228 <1> 228 <1> 228 <1> 228 <1> %if %0 >= 2 228 <1> mov ebx, %2 228 <1> %if %0 >= 3 228 <1> mov ecx, %3 228 <1> %if %0 = 4 228 <1> mov edx, %4 228 <1> %endif 228 <1> %endif 228 <1> %endif 228 0000011B B81F000000 <1> mov eax, %1 228 <1> 228 00000120 CD40 <1> int 40h 229 230 00000122 E866030000 call waitforkey 231 232 ; full screen replace color (replace yellow colors) 233 00000127 B900FFFF00 mov ecx, 0FFFF00h ; YELLOW 234 0000012C BA0080FF00 mov edx, 0FF8000h ; new color, ORANGE 235 00000131 B30C mov bl, 0Ch 236 sys _video 236 <1> 236 <1> 236 <1> 236 <1> 236 <1> %if %0 >= 2 236 <1> mov ebx, %2 236 <1> %if %0 >= 3 236 <1> mov ecx, %3 236 <1> %if %0 = 4 236 <1> mov edx, %4 236 <1> %endif 236 <1> %endif 236 <1> %endif 236 00000133 B81F000000 <1> mov eax, %1 236 <1> 236 00000138 CD40 <1> int 40h 237 238 0000013A E84E030000 call waitforkey 239 240 ; full screen - green color 241 242 0000013F B900FF0000 mov ecx, 0FF00h ; GREEN 243 00000144 BB01020000 mov ebx, 0201h ; Full screen, new color 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 00000149 B81F000000 <1> mov eax, %1 244 <1> 244 0000014E CD40 <1> int 40h 245 246 00000150 C705[AC050000]0000- mov dword [tcolor], 0 246 00000158 0000 247 0000015A BEF000D000 mov esi, 208*65536+240 248 0000015F BD[8F050000] mov ebp, txt_green 249 00000164 E85F030000 call print_text 250 251 00000169 E81F030000 call waitforkey 252 253 ; Masked new color 254 0000016E BF00FF0000 mov edi, 0FF00h ; mask color, GREEN 255 00000173 B9FFFFFF00 mov ecx, 0FFFFFFh ; WHITE 256 00000178 B321 mov bl, 21h ; masked new color, full screen 257 sys _video 257 <1> 257 <1> 257 <1> 257 <1> 257 <1> %if %0 >= 2 257 <1> mov ebx, %2 257 <1> %if %0 >= 3 257 <1> mov ecx, %3 257 <1> %if %0 = 4 257 <1> mov edx, %4 257 <1> %endif 257 <1> %endif 257 <1> %endif 257 0000017A B81F000000 <1> mov eax, %1 257 <1> 257 0000017F CD40 <1> int 40h 258 259 00000181 E807030000 call waitforkey 260 261 ; Masked mix colors 262 00000186 BFFFFFFF00 mov edi, 0FFFFFFh ; WHITE 263 0000018B B9FF000000 mov ecx, 0FFh 264 00000190 B32B mov bl, 2Bh ; masked MIX colors, full screen 265 sys _video 265 <1> 265 <1> 265 <1> 265 <1> 265 <1> %if %0 >= 2 265 <1> mov ebx, %2 265 <1> %if %0 >= 3 265 <1> mov ecx, %3 265 <1> %if %0 = 4 265 <1> mov edx, %4 265 <1> %endif 265 <1> %endif 265 <1> %endif 265 00000192 B81F000000 <1> mov eax, %1 265 <1> 265 00000197 CD40 <1> int 40h 266 267 00000199 E8EF020000 call waitforkey 268 269 ; full screen - yellow color 270 271 0000019E B900FFFF00 mov ecx, 0FFFF00h ; YELLOW 272 000001A3 BB01020000 mov ebx, 0201h ; Full screen, new color 273 sys _video 273 <1> 273 <1> 273 <1> 273 <1> 273 <1> %if %0 >= 2 273 <1> mov ebx, %2 273 <1> %if %0 >= 3 273 <1> mov ecx, %3 273 <1> %if %0 = 4 273 <1> mov edx, %4 273 <1> %endif 273 <1> %endif 273 <1> %endif 273 000001A8 B81F000000 <1> mov eax, %1 273 <1> 273 000001AD CD40 <1> int 40h 274 275 ;mov dword [tcolor], 0 276 000001AF BEDE00D000 mov esi, 208*65536+222 277 000001B4 BD[95050000] mov ebp, txt_yellow 278 000001B9 E80A030000 call print_text 279 280 000001BE E8CA020000 call waitforkey 281 282 ; masked add color 283 000001C3 31FF xor edi, edi ; mask color is BLACK 284 000001C5 B980000000 mov ecx, 80h ; add 80h to current color 285 000001CA B322 mov bl, 22h 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 000001CC B81F000000 <1> mov eax, %1 286 <1> 286 000001D1 CD40 <1> int 40h 287 288 000001D3 E8B5020000 call waitforkey 289 290 ; masked sub color 291 ;xor edi, edi ; mask color is BLACK 292 ;mov ecx, 80h ; sub 80h from current color 293 000001D8 B323 mov bl, 23h 294 sys _video 294 <1> 294 <1> 294 <1> 294 <1> 294 <1> %if %0 >= 2 294 <1> mov ebx, %2 294 <1> %if %0 >= 3 294 <1> mov ecx, %3 294 <1> %if %0 = 4 294 <1> mov edx, %4 294 <1> %endif 294 <1> %endif 294 <1> %endif 294 000001DA B81F000000 <1> mov eax, %1 294 <1> 294 000001DF CD40 <1> int 40h 295 296 000001E1 E8A7020000 call waitforkey 297 298 ; masked AND colors 299 ;xor edi, edi ; mask color is BLACK 300 000001E6 B900303000 mov ecx, 303000h ; and 30h with current color 301 000001EB B325 mov bl, 25h 302 sys _video 302 <1> 302 <1> 302 <1> 302 <1> 302 <1> %if %0 >= 2 302 <1> mov ebx, %2 302 <1> %if %0 >= 3 302 <1> mov ecx, %3 302 <1> %if %0 = 4 302 <1> mov edx, %4 302 <1> %endif 302 <1> %endif 302 <1> %endif 302 000001ED B81F000000 <1> mov eax, %1 302 <1> 302 000001F2 CD40 <1> int 40h 303 304 000001F4 E894020000 call waitforkey 305 306 ; masked OR colors 307 000001F9 BF00FFFF00 mov edi, 0FFFF00h ; mask color is Yellow 308 000001FE B940200000 mov ecx, 002040h ; or 40h with current color 309 00000203 B324 mov bl, 24h 310 sys _video 310 <1> 310 <1> 310 <1> 310 <1> 310 <1> %if %0 >= 2 310 <1> mov ebx, %2 310 <1> %if %0 >= 3 310 <1> mov ecx, %3 310 <1> %if %0 = 4 310 <1> mov edx, %4 310 <1> %endif 310 <1> %endif 310 <1> %endif 310 00000205 B81F000000 <1> mov eax, %1 310 <1> 310 0000020A CD40 <1> int 40h 311 312 0000020C E87C020000 call waitforkey 313 314 ; masked XOR colors 315 ;mov edi, 0FFFF00h ; mask color is Yellow 316 00000211 B92F2F2F00 mov ecx, 2F2F2Fh ; xor 2Fh with current color 317 00000216 B326 mov bl, 26h 318 sys _video 318 <1> 318 <1> 318 <1> 318 <1> 318 <1> %if %0 >= 2 318 <1> mov ebx, %2 318 <1> %if %0 >= 3 318 <1> mov ecx, %3 318 <1> %if %0 = 4 318 <1> mov edx, %4 318 <1> %endif 318 <1> %endif 318 <1> %endif 318 00000218 B81F000000 <1> mov eax, %1 318 <1> 318 0000021D CD40 <1> int 40h 319 320 0000021F E869020000 call waitforkey 321 322 ; Full screen copy 323 00000224 BE[B0050000] mov esi, fullscreen_buffer 324 00000229 89F7 mov edi, esi 325 326 ; Black 327 0000022B B900190000 mov ecx, 640*10 328 00000230 31C0 xor eax, eax ; black 329 00000232 F3AB rep stosd 330 331 ; White 332 00000234 B9800C0000 mov ecx, 640*5 333 00000239 B8FFFFFF00 mov eax, 0FFFFFFh 334 0000023E F3AB rep stosd 335 336 ; Black 337 00000240 B9800C0000 mov ecx, 640*5 338 00000245 31C0 xor eax, eax ; black 339 00000247 F3AB rep stosd 340 341 ; Blue 342 00000249 B900130100 mov ecx, 640*110 343 0000024E B0FF mov al, 0FFh 344 00000250 F3AB rep stosd 345 346 ; Red 347 00000252 B900130100 mov ecx, 640*110 348 00000257 B80000FF00 mov eax, 0FF0000h 349 0000025C F3AB rep stosd 350 351 ; Green 352 0000025E B900130100 mov ecx, 640*110 353 00000263 B800FF0000 mov eax, 0FF00h 354 00000268 F3AB rep stosd 355 356 ; Yellow 357 0000026A B900130100 mov ecx, 640*110 358 0000026F B800FFFF00 mov eax, 0FFFF00h 359 00000274 F3AB rep stosd 360 361 ; Black 362 00000276 B9800C0000 mov ecx, 640*5 363 0000027B 31C0 xor eax, eax ; black 364 0000027D F3AB rep stosd 365 366 ; White 367 0000027F B9800C0000 mov ecx, 640*5 368 00000284 B8FFFFFF00 mov eax, 0FFFFFFh 369 00000289 F3AB rep stosd 370 371 ; Black 372 0000028B B900190000 mov ecx, 640*10 373 00000290 31C0 xor eax, eax ; black 374 00000292 F3AB rep stosd 375 376 00000294 BB00020000 mov ebx, 0200h ; Full screen 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 00000299 B81F000000 <1> mov eax, %1 377 <1> 377 0000029E CD40 <1> int 40h 378 379 000002A0 E8E8010000 call waitforkey 380 381 000002A5 C705[AC050000]FFFF- mov dword [tcolor], 0FFFFFFh 381 000002AD FF00 382 383 000002AF BE2B002B00 mov esi, 43*65536+43 384 000002B4 BD[86050000] mov ebp, txt_blue 385 000002B9 E80A020000 call print_text 386 387 000002BE E8CA010000 call waitforkey 388 389 000002C3 BE2B009900 mov esi, 153*65536+43 390 000002C8 BD[8B050000] mov ebp, txt_red 391 000002CD E8F6010000 call print_text 392 393 000002D2 E8B6010000 call waitforkey 394 395 000002D7 BE2B000701 mov esi, 263*65536+43 396 000002DC BD[8F050000] mov ebp, txt_green 397 000002E1 E8E2010000 call print_text 398 399 000002E6 E8A2010000 call waitforkey 400 401 000002EB BE2B007501 mov esi, 373*65536+43 402 000002F0 BD[95050000] mov ebp, txt_yellow 403 000002F5 E8CE010000 call print_text 404 405 000002FA E88E010000 call waitforkey 406 407 000002FF C705[AC050000]0000- mov dword [tcolor], 0 407 00000307 0000 408 409 00000309 BE2B000701 mov esi, 263*65536+43 410 0000030E BD[8F050000] mov ebp, txt_green 411 00000313 E8B0010000 call print_text 412 413 00000318 E870010000 call waitforkey 414 415 0000031D BE2B007501 mov esi, 373*65536+43 416 00000322 BD[95050000] mov ebp, txt_yellow 417 00000327 E89C010000 call print_text 418 419 0000032C E85C010000 call waitforkey 420 421 ; Masked new color, window 422 ; (blue block starts at row 20) 423 ; ((white text color will be changed to black)) 424 00000331 BFFF000000 mov edi, 0FFh ; mask color, BLUE 425 00000336 31C9 xor ecx, ecx ; 0 ; BLACK (new color) 426 00000338 BA28001400 mov edx, 20*65536+40 ; column 40, row 20 427 0000033D BEA0006E00 mov esi, 110*65536+160 ; size: 110*160 428 00000342 BB31020000 mov ebx, 0231h ; Masked new color in window 429 sys _video 429 <1> 429 <1> 429 <1> 429 <1> 429 <1> %if %0 >= 2 429 <1> mov ebx, %2 429 <1> %if %0 >= 3 429 <1> mov ecx, %3 429 <1> %if %0 = 4 429 <1> mov edx, %4 429 <1> %endif 429 <1> %endif 429 <1> %endif 429 00000347 B81F000000 <1> mov eax, %1 429 <1> 429 0000034C CD40 <1> int 40h 430 431 0000034E E83A010000 call waitforkey 432 433 ; Masked AND colors, window 434 ; (red block starts at row 130) 435 ; ((white text color will be changed to black)) 436 00000353 BF0000FF00 mov edi, 0FF0000h ; mask color, RED 437 ;xor ecx, ecx ; BLACK (and color) 438 00000358 BA28008200 mov edx, 130*65536+40 ; column 40, row 130 439 0000035D BEA0006E00 mov esi, 110*65536+160 ; size: 110*160 440 ;mov ebx, 0235h ; Masked AND colors in window 441 00000362 B335 mov bl, 35h 442 sys _video 442 <1> 442 <1> 442 <1> 442 <1> 442 <1> %if %0 >= 2 442 <1> mov ebx, %2 442 <1> %if %0 >= 3 442 <1> mov ecx, %3 442 <1> %if %0 = 4 442 <1> mov edx, %4 442 <1> %endif 442 <1> %endif 442 <1> %endif 442 00000364 B81F000000 <1> mov eax, %1 442 <1> 442 00000369 CD40 <1> int 40h 443 444 0000036B E81D010000 call waitforkey 445 446 ; Masked ADD to yellow block position 447 00000370 29FF sub edi, edi ; mask color, BLACK 448 00000372 B188 mov cl, 88h ; add 88h to current color 449 00000374 BA00005E01 mov edx, 350*65536 ; column 0, row 350 450 00000379 BE80026E00 mov esi, 110*65536+640 ; size: 110*640 451 ;mov ebx, 0232h ; add color, window, masked 452 0000037E B332 mov bl, 32h 453 sys _video 453 <1> 453 <1> 453 <1> 453 <1> 453 <1> %if %0 >= 2 453 <1> mov ebx, %2 453 <1> %if %0 >= 3 453 <1> mov ecx, %3 453 <1> %if %0 = 4 453 <1> mov edx, %4 453 <1> %endif 453 <1> %endif 453 <1> %endif 453 00000380 B81F000000 <1> mov eax, %1 453 <1> 453 00000385 CD40 <1> int 40h 454 455 00000387 E801010000 call waitforkey 456 457 ; Masked SUB from green block position 458 ;sub edi, edi ; mask color, BLACK 459 ;mov ecx, 88h ; sub 88h from current color 460 0000038C BA0000F000 mov edx, 240*65536 ; column 0, row 240 461 ;mov esi, 110*65536+640 ; size: 110*640 462 ;mov ebx, 0233h ; sub color, window, masked 463 00000391 B333 mov bl, 33h 464 sys _video 464 <1> 464 <1> 464 <1> 464 <1> 464 <1> %if %0 >= 2 464 <1> mov ebx, %2 464 <1> %if %0 >= 3 464 <1> mov ecx, %3 464 <1> %if %0 = 4 464 <1> mov edx, %4 464 <1> %endif 464 <1> %endif 464 <1> %endif 464 00000393 B81F000000 <1> mov eax, %1 464 <1> 464 00000398 CD40 <1> int 40h 465 466 0000039A E8EE000000 call waitforkey 467 468 ; Masked SUB from yellow block position 469 ;sub edi, edi ; mask color, BLACK 470 ;mov cl, 88h ; add 88h to current color 471 0000039F BA00005E01 mov edx, 350*65536 ; column 0, row 350 472 ;mov esi, 110*65536+640 ; size: 110*640 473 ;mov ebx, 0233h ; sub color, window, masked 474 sys _video 474 <1> 474 <1> 474 <1> 474 <1> 474 <1> %if %0 >= 2 474 <1> mov ebx, %2 474 <1> %if %0 >= 3 474 <1> mov ecx, %3 474 <1> %if %0 = 4 474 <1> mov edx, %4 474 <1> %endif 474 <1> %endif 474 <1> %endif 474 000003A4 B81F000000 <1> mov eax, %1 474 <1> 474 000003A9 CD40 <1> int 40h 475 476 000003AB E8DD000000 call waitforkey 477 478 ; Masked ADD to green block position 479 ;sub edi, edi ; mask color, BLACK 480 ;mov cl, 88h ; sub 88h from current color 481 000003B0 BA0000F000 mov edx, 240*65536 ; column 0, row 240 482 ;mov esi, 110*65536+640 ; size: 110*640 483 ;mov ebx, 0232h ; add color, window, masked 484 000003B5 B332 mov bl, 32h 485 sys _video 485 <1> 485 <1> 485 <1> 485 <1> 485 <1> %if %0 >= 2 485 <1> mov ebx, %2 485 <1> %if %0 >= 3 485 <1> mov ecx, %3 485 <1> %if %0 = 4 485 <1> mov edx, %4 485 <1> %endif 485 <1> %endif 485 <1> %endif 485 000003B7 B81F000000 <1> mov eax, %1 485 <1> 485 000003BC CD40 <1> int 40h 486 487 000003BE E8CA000000 call waitforkey 488 489 ; Masked OR colors, window 490 ; (white block starts at row 10) 491 000003C3 BFFF000000 mov edi, 0FFh ; mask color, BLUE 492 000003C8 B900808000 mov ecx, 808000h ; OR value (with current color) 493 000003CD BA00000A00 mov edx, 10*65536+0 ; column 0, row 10 494 000003D2 BE80027800 mov esi, 120*65536+640 ; size: 120*640 495 000003D7 BB34020000 mov ebx, 0234h ; Masked OR colors in window 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 000003DC B81F000000 <1> mov eax, %1 496 <1> 496 000003E1 CD40 <1> int 40h 497 498 000003E3 E8A5000000 call waitforkey 499 500 ; Masked XOR colors, window 501 ; (white block starts at row 465) 502 000003E8 BF00FFFF00 mov edi, 0FFFF00h ; mask color, YELLOW 503 000003ED B94F4F4F00 mov ecx, 4F4F4Fh ; XOR value (with current color) 504 000003F2 BA00005E01 mov edx, 350*65536+0 ; column 0, row 465 505 000003F7 BE80027800 mov esi, 120*65536+640 ; size: 120*640 506 ;mov ebx, 0236h ; Masked XOR colors in window 507 000003FC B334 mov bl, 34h 508 sys _video 508 <1> 508 <1> 508 <1> 508 <1> 508 <1> %if %0 >= 2 508 <1> mov ebx, %2 508 <1> %if %0 >= 3 508 <1> mov ecx, %3 508 <1> %if %0 = 4 508 <1> mov edx, %4 508 <1> %endif 508 <1> %endif 508 <1> %endif 508 000003FE B81F000000 <1> mov eax, %1 508 <1> 508 00000403 CD40 <1> int 40h 509 510 00000405 E883000000 call waitforkey 511 512 ; Masked mix color, window 513 ; (blue block starts at row 20) 514 0000040A BFFF000000 mov edi, 0FFh ; mask color, BLUE 515 0000040F B930303000 mov ecx, 303030h 516 00000414 BA28001400 mov edx, 20*65536+40 ; column 40, row 20 517 00000419 BEA0006E00 mov esi, 110*65536+160 ; size: 110*160 518 ;mov ebx, 023Bh ; Masked mix colors in window 519 0000041E B33B mov bl, 3Bh 520 sys _video 520 <1> 520 <1> 520 <1> 520 <1> 520 <1> %if %0 >= 2 520 <1> mov ebx, %2 520 <1> %if %0 >= 3 520 <1> mov ecx, %3 520 <1> %if %0 = 4 520 <1> mov edx, %4 520 <1> %endif 520 <1> %endif 520 <1> %endif 520 00000420 B81F000000 <1> mov eax, %1 520 <1> 520 00000425 CD40 <1> int 40h 521 522 00000427 E861000000 call waitforkey 523 524 ; Masked mix color, window 525 ; (red block starts at row 130) 526 0000042C BF0000FF00 mov edi, 0FF0000h ; mask color, RED 527 00000431 B98E8E8E00 mov ecx, 8E8E8Eh 528 00000436 BA28008200 mov edx, 130*65536+40 ; column 40, row 130 529 0000043B BEA0006E00 mov esi, 110*65536+160 ; size: 110*160 530 ;mov ebx, 023Bh ; Masked mix colors in window 531 sys _video 531 <1> 531 <1> 531 <1> 531 <1> 531 <1> %if %0 >= 2 531 <1> mov ebx, %2 531 <1> %if %0 >= 3 531 <1> mov ecx, %3 531 <1> %if %0 = 4 531 <1> mov edx, %4 531 <1> %endif 531 <1> %endif 531 <1> %endif 531 00000440 B81F000000 <1> mov eax, %1 531 <1> 531 00000445 CD40 <1> int 40h 532 533 00000447 E841000000 call waitforkey 534 535 ; Masked mix color, window 536 ; (green block starts at row 240) 537 0000044C BF00FF0000 mov edi, 0FF00h ; mask color, GREEN 538 00000451 B980808000 mov ecx, 808080h 539 00000456 BA2800F000 mov edx, 240*65536+40 ; column 40, row 240 540 0000045B BEB4006E00 mov esi, 110*65536+180 ; size: 110*180 541 ;mov ebx, 023Bh ; Masked mix colors in window 542 sys _video 542 <1> 542 <1> 542 <1> 542 <1> 542 <1> %if %0 >= 2 542 <1> mov ebx, %2 542 <1> %if %0 >= 3 542 <1> mov ecx, %3 542 <1> %if %0 = 4 542 <1> mov edx, %4 542 <1> %endif 542 <1> %endif 542 <1> %endif 542 00000460 B81F000000 <1> mov eax, %1 542 <1> 542 00000465 CD40 <1> int 40h 543 544 00000467 E821000000 call waitforkey 545 546 ; copy full screen buffer to screen 547 0000046C BE[B0050000] mov esi, fullscreen_buffer 548 ;mov ebx, 0200h 549 00000471 30DB xor bl, bl ; mov bl, 0 550 sys _video 550 <1> 550 <1> 550 <1> 550 <1> 550 <1> %if %0 >= 2 550 <1> mov ebx, %2 550 <1> %if %0 >= 3 550 <1> mov ecx, %3 550 <1> %if %0 = 4 550 <1> mov edx, %4 550 <1> %endif 550 <1> %endif 550 <1> %endif 550 00000473 B81F000000 <1> mov eax, %1 550 <1> 550 00000478 CD40 <1> int 40h 551 552 0000047A E80E000000 call waitforkey 553 ; wait for key stroke before exit 554 terminate: 555 0000047F E82C000000 call set_text_mode 556 sys _exit 556 <1> 556 <1> 556 <1> 556 <1> 556 <1> %if %0 >= 2 556 <1> mov ebx, %2 556 <1> %if %0 >= 3 556 <1> mov ecx, %3 556 <1> %if %0 = 4 556 <1> mov edx, %4 556 <1> %endif 556 <1> %endif 556 <1> %endif 556 00000484 B801000000 <1> mov eax, %1 556 <1> 556 00000489 CD40 <1> int 40h 557 halt: 558 0000048B EBFE jmp short halt 559 560 waitforkey: 561 0000048D B401 mov ah, 1 562 0000048F CD32 int 32h 563 00000491 740B jz short getkey 564 00000493 FF05[A8050000] inc dword [counter] 565 00000499 90 nop 566 0000049A 90 nop 567 0000049B 90 nop 568 0000049C EBEF jmp short waitforkey 569 getkey: 570 0000049E 30E4 xor ah, ah 571 000004A0 CD32 int 32h 572 573 000004A2 663D032E cmp ax, 2E03h 574 000004A6 7405 je short _terminate 575 000004A8 3C1B cmp al, 1Bh ; ESC key 576 000004AA 7401 je short _terminate 577 000004AC C3 retn 578 _terminate: 579 000004AD 58 pop eax ; return address 580 000004AE EBCF jmp short terminate 581 582 set_text_mode: 583 000004B0 30E4 xor ah, ah 584 000004B2 B003 mov al, 3 585 ;int 10h ; al = 03h text mode, int 10 video 586 000004B4 CD31 int 31h ; TRDOS 386 - Video interrupt 587 000004B6 C3 retn 588 589 print_msg: 590 000004B7 B40E mov ah, 0Eh 591 000004B9 BB07000000 mov ebx, 7 592 ;mov bl, 7 ; char attribute & color 593 p_next_chr: 594 000004BE AC lodsb 595 000004BF 08C0 or al, al 596 000004C1 7404 jz short p_retn ; retn 597 000004C3 CD31 int 31h 598 000004C5 EBF7 jmp short p_next_chr 599 p_retn: 600 000004C7 C3 retn 601 602 print_text: 603 ; ebp = text address 604 ; esi = row/column position (si = column) 605 p_d_x: 606 ;mov dh, 0 ; 8x16 system font 607 000004C8 B606 mov dh, 6 ; 32*64 scaled font (base: 8*16 system font) 608 p_d_x_n: 609 000004CA 8A5500 mov dl, [ebp] 610 000004CD 20D2 and dl, dl 611 000004CF 7419 jz short p_d_x_ok 612 sys _video, 020Fh, [tcolor] 612 <1> 612 <1> 612 <1> 612 <1> 612 <1> %if %0 >= 2 612 000004D1 BB0F020000 <1> mov ebx, %2 612 <1> %if %0 >= 3 612 000004D6 8B0D[AC050000] <1> mov ecx, %3 612 <1> %if %0 = 4 612 <1> mov edx, %4 612 <1> %endif 612 <1> %endif 612 <1> %endif 612 000004DC B81F000000 <1> mov eax, %1 612 <1> 612 000004E1 CD40 <1> int 40h 613 000004E3 45 inc ebp 614 000004E4 6683C624 add si, 36 ; next char pos 615 000004E8 EBE0 jmp short p_d_x_n 616 p_d_x_ok: 617 000004EA C3 retn 618 619 program_msg: 620 000004EB 5452444F5320333836- db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Block Operations" 620 000004F4 2076322E302E33202D- 620 000004FD 202827737973766964- 620 00000506 656F27292054657374- 620 0000050F 2050726F6772616D20- 620 00000518 2D20426C6F636B204F- 620 00000521 7065726174696F6E73 621 0000052A 0D0A db 0Dh, 0Ah 622 0000052C 6279204572646F6761- db "by Erdogan Tan - 02/03/2021" 622 00000535 6E2054616E202D2030- 622 0000053E 322F30332F32303231 623 ;db 0Dh, 0Ah, 0 624 00000547 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 625 0000054B 507265737320616E79- db "Press any key to continue .." 625 00000554 206B657920746F2063- 625 0000055D 6F6E74696E7565202E- 625 00000566 2E 626 00000567 0D0A db 0Dh, 0Ah 627 00000569 285072657373204553- db "(Press ESC to exit) .." 627 00000572 4320746F2065786974- 627 0000057B 29202E2E 628 0000057F 0D0A db 0Dh, 0Ah 629 00000581 0D0A db 0Dh, 0Ah 630 631 nextline: 632 00000583 0D0A00 db 0Dh, 0Ah, 0 633 634 txt_blue: 635 00000586 424C554500 db "BLUE", 0 636 txt_red: 637 0000058B 52454400 db "RED", 0 638 txt_green: 639 0000058F 475245454E00 db "GREEN", 0 640 txt_yellow: 641 00000595 59454C4C4F5700 db "YELLOW", 0 642 txt_white: 643 0000059C 574849544500 db "WHITE", 0 644 txt_black: 645 000005A2 424C41434B00 db "BLACK", 0 646 647 bss: 648 649 ABSOLUTE bss 650 651 alignb 4 652 653 counter: 654 000005A8 resd 1 655 656 bss_start: 657 000005AC tcolor: resd 1 658 659 fullscreen_buffer: 660 000005B0 resb 307200*4 661 bss_end: