1 ; **************************************************************************** 2 ; blocks15.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 02/03/2021 (01/03/2021) 6 ; 7 ; **************************************************************************** 8 ; nasm blocks15.s -l blocks15.txt -o BLOCKS15.PRG -Z error.txt 9 ; (modified from 'blocks5.s', 26/02/2021) 10 11 ; 'sysvideo' bh = 2, block copy and modification test (VESA VBE mode 101h) 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[BC050000] mov edi, bss_start 93 00000005 B901840300 mov ecx, (bss_end - bss_start)/4 94 ;xor eax, eax 95 0000000A F3AB rep stosd 96 97 ; program message 98 0000000C BE[F8040000] mov esi, program_msg 99 00000011 E8AE040000 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 ; Set Video Mode to 112h ; 640x480, 24 bit true colors 107 sys _video, 08FFh, 112h 107 <1> 107 <1> 107 <1> 107 <1> 107 <1> %if %0 >= 2 107 0000001A BBFF080000 <1> mov ebx, %2 107 <1> %if %0 >= 3 107 0000001F B912010000 <1> mov ecx, %3 107 <1> %if %0 = 4 107 <1> mov edx, %4 107 <1> %endif 107 <1> %endif 107 <1> %endif 107 00000024 B81F000000 <1> mov eax, %1 107 <1> 107 00000029 CD40 <1> int 40h 108 0000002B 09C0 or eax, eax 109 ;jz short terminate 110 ;mov [LFB_ADDR], edx ; pointer to LFB info table/structure 111 0000002D 7505 jnz short set_vesa_mode_112h_ok 112 0000002F E958040000 jmp terminate 113 114 set_vesa_mode_112h_ok: 115 00000034 B9FFFFFF00 mov ecx, 0FFFFFFh ; WHITE 116 00000039 BB01020000 mov ebx, 0201h ; Full screen, new color 117 sys _video 117 <1> 117 <1> 117 <1> 117 <1> 117 <1> %if %0 >= 2 117 <1> mov ebx, %2 117 <1> %if %0 >= 3 117 <1> mov ecx, %3 117 <1> %if %0 = 4 117 <1> mov edx, %4 117 <1> %endif 117 <1> %endif 117 <1> %endif 117 0000003E B81F000000 <1> mov eax, %1 117 <1> 117 00000043 CD40 <1> int 40h 118 119 ;mov dword [tcolor], 0 120 00000045 BEF000D000 mov esi, 208*65536+240 121 0000004A BD[A9050000] mov ebp, txt_white 122 0000004F E881040000 call print_text 123 124 00000054 E841040000 call waitforkey 125 126 ; full screen replace color (replace black colors) 127 00000059 29C9 sub ecx, ecx ; 0 ; BLACK 128 0000005B BA0080FF00 mov edx, 0FF8000h ; ORANGE 129 00000060 B30C mov bl, 0Ch 130 sys _video 130 <1> 130 <1> 130 <1> 130 <1> 130 <1> %if %0 >= 2 130 <1> mov ebx, %2 130 <1> %if %0 >= 3 130 <1> mov ecx, %3 130 <1> %if %0 = 4 130 <1> mov edx, %4 130 <1> %endif 130 <1> %endif 130 <1> %endif 130 00000062 B81F000000 <1> mov eax, %1 130 <1> 130 00000067 CD40 <1> int 40h 131 132 00000069 E82C040000 call waitforkey 133 134 ; Mask color = black 135 ; full screen NOT (except mask color) 136 0000006E BF0080FF00 mov edi, 0FF8000h ; ORANGE 137 00000073 BB27020000 mov ebx, 0227h ; masked 'NOT', full screen 138 sys _video 138 <1> 138 <1> 138 <1> 138 <1> 138 <1> %if %0 >= 2 138 <1> mov ebx, %2 138 <1> %if %0 >= 3 138 <1> mov ecx, %3 138 <1> %if %0 = 4 138 <1> mov edx, %4 138 <1> %endif 138 <1> %endif 138 <1> %endif 138 00000078 B81F000000 <1> mov eax, %1 138 <1> 138 0000007D CD40 <1> int 40h 139 140 0000007F E816040000 call waitforkey 141 142 ; full screen replace color (replace black colors) 143 00000084 B90080FF00 mov ecx, 0FF8000h ; ORANGE 144 00000089 BAFFFFFF00 mov edx, 0FFFFFFh ; WHITE 145 0000008E B30C mov bl, 0Ch 146 sys _video 146 <1> 146 <1> 146 <1> 146 <1> 146 <1> %if %0 >= 2 146 <1> mov ebx, %2 146 <1> %if %0 >= 3 146 <1> mov ecx, %3 146 <1> %if %0 = 4 146 <1> mov edx, %4 146 <1> %endif 146 <1> %endif 146 <1> %endif 146 00000090 B81F000000 <1> mov eax, %1 146 <1> 146 00000095 CD40 <1> int 40h 147 148 00000097 E8FE030000 call waitforkey 149 150 ; full screen - blue color 151 152 0000009C B9FF000000 mov ecx, 0FFh ; BLUE 153 000000A1 B301 mov bl, 01h ; Full screen, new color 154 sys _video 154 <1> 154 <1> 154 <1> 154 <1> 154 <1> %if %0 >= 2 154 <1> mov ebx, %2 154 <1> %if %0 >= 3 154 <1> mov ecx, %3 154 <1> %if %0 = 4 154 <1> mov edx, %4 154 <1> %endif 154 <1> %endif 154 <1> %endif 154 000000A3 B81F000000 <1> mov eax, %1 154 <1> 154 000000A8 CD40 <1> int 40h 155 156 000000AA C705[BC050000]FFFF- mov dword [tcolor], 0FFFFFFh 156 000000B2 FF00 157 000000B4 BE0201D000 mov esi, 208*65536+258 158 000000B9 BD[93050000] mov ebp, txt_blue 159 000000BE E812040000 call print_text 160 161 000000C3 E8D2030000 call waitforkey 162 163 ; Mask color = white 164 ; full screen NOT (except mask color) 165 000000C8 BFFFFFFF00 mov edi, 0FFFFFFh 166 000000CD B327 mov bl, 27h ; masked 'NOT', full screen 167 sys _video 167 <1> 167 <1> 167 <1> 167 <1> 167 <1> %if %0 >= 2 167 <1> mov ebx, %2 167 <1> %if %0 >= 3 167 <1> mov ecx, %3 167 <1> %if %0 = 4 167 <1> mov edx, %4 167 <1> %endif 167 <1> %endif 167 <1> %endif 167 000000CF B81F000000 <1> mov eax, %1 167 <1> 167 000000D4 CD40 <1> int 40h 168 169 000000D6 E8BF030000 call waitforkey 170 171 000000DB B90000FF00 mov ecx, 0FF0000h ; RED 172 000000E0 B301 mov bl, 01h ; Full screen, new color 173 sys _video 173 <1> 173 <1> 173 <1> 173 <1> 173 <1> %if %0 >= 2 173 <1> mov ebx, %2 173 <1> %if %0 >= 3 173 <1> mov ecx, %3 173 <1> %if %0 = 4 173 <1> mov edx, %4 173 <1> %endif 173 <1> %endif 173 <1> %endif 173 000000E2 B81F000000 <1> mov eax, %1 173 <1> 173 000000E7 CD40 <1> int 40h 174 175 ;mov dword [tcolor], 0FFFFFFh 176 000000E9 BE1401D000 mov esi, 208*65536+276 177 000000EE BD[98050000] mov ebp, txt_red 178 000000F3 E8DD030000 call print_text 179 180 000000F8 E89D030000 call waitforkey 181 182 ; Mask color = red 183 ; full screen NEW COLOR (except mask color) 184 000000FD BF0000FF00 mov edi, 0FF0000h ; mask color, RED 185 00000102 B900FFFF00 mov ecx, 0FFFF00h ; YELLOW 186 00000107 B321 mov bl, 21h ; masked new color, full screen 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 00000109 B81F000000 <1> mov eax, %1 187 <1> 187 0000010E CD40 <1> int 40h 188 189 00000110 E885030000 call waitforkey 190 191 ; full screen replace color (replace yellow colors) 192 00000115 B900FFFF00 mov ecx, 0FFFF00h ; YELLOW 193 0000011A BA0080FF00 mov edx, 0FF8000h ; new color, ORANGE 194 0000011F B30C mov bl, 0Ch 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 00000121 B81F000000 <1> mov eax, %1 195 <1> 195 00000126 CD40 <1> int 40h 196 197 00000128 E86D030000 call waitforkey 198 199 ; full screen - green color 200 201 0000012D B900FF0000 mov ecx, 0FF00h ; GREEN 202 00000132 BB01020000 mov ebx, 0201h ; Full screen, new color 203 sys _video 203 <1> 203 <1> 203 <1> 203 <1> 203 <1> %if %0 >= 2 203 <1> mov ebx, %2 203 <1> %if %0 >= 3 203 <1> mov ecx, %3 203 <1> %if %0 = 4 203 <1> mov edx, %4 203 <1> %endif 203 <1> %endif 203 <1> %endif 203 00000137 B81F000000 <1> mov eax, %1 203 <1> 203 0000013C CD40 <1> int 40h 204 205 0000013E C705[BC050000]0000- mov dword [tcolor], 0 205 00000146 0000 206 00000148 BEF000D000 mov esi, 208*65536+240 207 0000014D BD[9C050000] mov ebp, txt_green 208 00000152 E87E030000 call print_text 209 210 00000157 E83E030000 call waitforkey 211 212 ; Masked new color 213 0000015C BF00FF0000 mov edi, 0FF00h ; mask color, GREEN 214 00000161 B9FFFFFF00 mov ecx, 0FFFFFFh ; WHITE 215 00000166 B321 mov bl, 21h ; masked new color, full screen 216 sys _video 216 <1> 216 <1> 216 <1> 216 <1> 216 <1> %if %0 >= 2 216 <1> mov ebx, %2 216 <1> %if %0 >= 3 216 <1> mov ecx, %3 216 <1> %if %0 = 4 216 <1> mov edx, %4 216 <1> %endif 216 <1> %endif 216 <1> %endif 216 00000168 B81F000000 <1> mov eax, %1 216 <1> 216 0000016D CD40 <1> int 40h 217 218 0000016F E826030000 call waitforkey 219 220 ; Masked mix colors 221 00000174 BFFFFFFF00 mov edi, 0FFFFFFh ; WHITE 222 00000179 B9FF000000 mov ecx, 0FFh 223 0000017E B32B mov bl, 2Bh ; masked MIX colors, full screen 224 sys _video 224 <1> 224 <1> 224 <1> 224 <1> 224 <1> %if %0 >= 2 224 <1> mov ebx, %2 224 <1> %if %0 >= 3 224 <1> mov ecx, %3 224 <1> %if %0 = 4 224 <1> mov edx, %4 224 <1> %endif 224 <1> %endif 224 <1> %endif 224 00000180 B81F000000 <1> mov eax, %1 224 <1> 224 00000185 CD40 <1> int 40h 225 226 00000187 E80E030000 call waitforkey 227 228 ; full screen - yellow color 229 230 0000018C B900FFFF00 mov ecx, 0FFFF00h ; YELLOW 231 00000191 BB01020000 mov ebx, 0201h ; Full screen, new color 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 00000196 B81F000000 <1> mov eax, %1 232 <1> 232 0000019B CD40 <1> int 40h 233 234 ;mov dword [tcolor], 0 235 0000019D BEDE00D000 mov esi, 208*65536+222 236 000001A2 BD[A2050000] mov ebp, txt_yellow 237 000001A7 E829030000 call print_text 238 239 000001AC E8E9020000 call waitforkey 240 241 ; masked add color 242 000001B1 31FF xor edi, edi ; mask color is BLACK 243 000001B3 B980000000 mov ecx, 80h ; add 80h to current color 244 000001B8 B322 mov bl, 22h 245 sys _video 245 <1> 245 <1> 245 <1> 245 <1> 245 <1> %if %0 >= 2 245 <1> mov ebx, %2 245 <1> %if %0 >= 3 245 <1> mov ecx, %3 245 <1> %if %0 = 4 245 <1> mov edx, %4 245 <1> %endif 245 <1> %endif 245 <1> %endif 245 000001BA B81F000000 <1> mov eax, %1 245 <1> 245 000001BF CD40 <1> int 40h 246 247 000001C1 E8D4020000 call waitforkey 248 249 ; masked sub color 250 ;xor edi, edi ; mask color is BLACK 251 ;mov ecx, 80h ; sub 80h from current color 252 000001C6 B323 mov bl, 23h 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 000001C8 B81F000000 <1> mov eax, %1 253 <1> 253 000001CD CD40 <1> int 40h 254 255 000001CF E8C6020000 call waitforkey 256 257 ; masked AND colors 258 ;xor edi, edi ; mask color is BLACK 259 000001D4 B900303000 mov ecx, 303000h ; and 30h with current color 260 000001D9 B325 mov bl, 25h 261 sys _video 261 <1> 261 <1> 261 <1> 261 <1> 261 <1> %if %0 >= 2 261 <1> mov ebx, %2 261 <1> %if %0 >= 3 261 <1> mov ecx, %3 261 <1> %if %0 = 4 261 <1> mov edx, %4 261 <1> %endif 261 <1> %endif 261 <1> %endif 261 000001DB B81F000000 <1> mov eax, %1 261 <1> 261 000001E0 CD40 <1> int 40h 262 263 000001E2 E8B3020000 call waitforkey 264 265 ; masked OR colors 266 000001E7 BF00FFFF00 mov edi, 0FFFF00h ; mask color is Yellow 267 000001EC B940200000 mov ecx, 002040h ; or 40h with current color 268 000001F1 B324 mov bl, 24h 269 sys _video 269 <1> 269 <1> 269 <1> 269 <1> 269 <1> %if %0 >= 2 269 <1> mov ebx, %2 269 <1> %if %0 >= 3 269 <1> mov ecx, %3 269 <1> %if %0 = 4 269 <1> mov edx, %4 269 <1> %endif 269 <1> %endif 269 <1> %endif 269 000001F3 B81F000000 <1> mov eax, %1 269 <1> 269 000001F8 CD40 <1> int 40h 270 271 000001FA E89B020000 call waitforkey 272 273 ; masked XOR colors 274 ;mov edi, 0FFFF00h ; mask color is Yellow 275 000001FF B92F2F2F00 mov ecx, 2F2F2Fh ; xor 2Fh with current color 276 00000204 B326 mov bl, 26h 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 00000206 B81F000000 <1> mov eax, %1 277 <1> 277 0000020B CD40 <1> int 40h 278 279 0000020D E888020000 call waitforkey 280 281 ; Full screen copy 282 00000212 BE[C0050000] mov esi, fullscreen_buffer 283 00000217 89F7 mov edi, esi 284 285 ; Black 286 00000219 B900190000 mov ecx, 640*10 287 0000021E 31C0 xor eax, eax ; black 288 _l2s1: 289 00000220 66AB stosw 290 00000222 AA stosb 291 00000223 E2FB loop _l2s1 292 293 ; White 294 00000225 B9800C0000 mov ecx, 640*5 295 0000022A B8FFFFFF00 mov eax, 0FFFFFFh 296 _l2w1: 297 0000022F 66AB stosw 298 00000231 AA stosb 299 00000232 E2FB loop _l2w1 300 301 ; Black 302 00000234 B9800C0000 mov ecx, 640*5 303 00000239 31C0 xor eax, eax ; black 304 _l2s2: 305 0000023B 66AB stosw 306 0000023D AA stosb 307 0000023E E2FB loop _l2s2 308 309 ; Blue 310 00000240 B900130100 mov ecx, 640*110 311 ;xor eax, eax 312 _l2b: 313 00000245 B0FF mov al, 0FFh 314 00000247 AA stosb 315 00000248 30C0 xor al, al 316 0000024A 66AB stosw 317 0000024C E2F7 loop _l2b 318 319 ; Red 320 0000024E B900130100 mov ecx, 640*110 321 ;xor eax, eax 322 _l2r: 323 00000253 66AB stosw 324 00000255 B0FF mov al, 0FFh 325 00000257 AA stosb 326 00000258 30C0 xor al, al 327 0000025A E2F7 loop _l2r 328 329 ; Green 330 0000025C B900130100 mov ecx, 640*110 331 ;xor eax, eax 332 _l2g: 333 00000261 AA stosb 334 00000262 B0FF mov al, 0FFh 335 00000264 66AB stosw 336 00000266 30C0 xor al, al 337 00000268 E2F7 loop _l2g 338 339 ; Yellow 340 0000026A B900130100 mov ecx, 640*110 341 0000026F B4FF mov ah, 0FFh 342 _l2y: 343 00000271 30C0 xor al, al 344 00000273 AA stosb 345 00000274 B0FF mov al, 0FFh 346 00000276 66AB stosw 347 00000278 E2F7 loop _l2y 348 349 ; Black 350 0000027A B9800C0000 mov ecx, 640*5 351 0000027F 31C0 xor eax, eax ; black 352 _l2s3: 353 00000281 66AB stosw 354 00000283 AA stosb 355 00000284 E2FB loop _l2s3 356 357 ; White 358 00000286 B9800C0000 mov ecx, 640*5 359 0000028B B8FFFFFF00 mov eax, 0FFFFFFh 360 _l2w2: 361 00000290 66AB stosw 362 00000292 AA stosb 363 00000293 E2FB loop _l2w2 364 365 ; Black 366 00000295 B900190000 mov ecx, 640*10 367 0000029A 31C0 xor eax, eax ; black 368 _l2s4: 369 0000029C 66AB stosw 370 0000029E AA stosb 371 0000029F E2FB loop _l2s4 372 373 000002A1 BB00020000 mov ebx, 0200h ; Full screen copy 374 sys _video 374 <1> 374 <1> 374 <1> 374 <1> 374 <1> %if %0 >= 2 374 <1> mov ebx, %2 374 <1> %if %0 >= 3 374 <1> mov ecx, %3 374 <1> %if %0 = 4 374 <1> mov edx, %4 374 <1> %endif 374 <1> %endif 374 <1> %endif 374 000002A6 B81F000000 <1> mov eax, %1 374 <1> 374 000002AB CD40 <1> int 40h 375 376 000002AD E8E8010000 call waitforkey 377 378 000002B2 C705[BC050000]FFFF- mov dword [tcolor], 0FFFFFFh 378 000002BA FF00 379 380 000002BC BE2B002B00 mov esi, 43*65536+43 381 000002C1 BD[93050000] mov ebp, txt_blue 382 000002C6 E80A020000 call print_text 383 384 000002CB E8CA010000 call waitforkey 385 386 000002D0 BE2B009900 mov esi, 153*65536+43 387 000002D5 BD[98050000] mov ebp, txt_red 388 000002DA E8F6010000 call print_text 389 390 000002DF E8B6010000 call waitforkey 391 392 000002E4 BE2B000701 mov esi, 263*65536+43 393 000002E9 BD[9C050000] mov ebp, txt_green 394 000002EE E8E2010000 call print_text 395 396 000002F3 E8A2010000 call waitforkey 397 398 000002F8 BE2B007501 mov esi, 373*65536+43 399 000002FD BD[A2050000] mov ebp, txt_yellow 400 00000302 E8CE010000 call print_text 401 402 00000307 E88E010000 call waitforkey 403 404 0000030C C705[BC050000]0000- mov dword [tcolor], 0 404 00000314 0000 405 406 00000316 BE2B000701 mov esi, 263*65536+43 407 0000031B BD[9C050000] mov ebp, txt_green 408 00000320 E8B0010000 call print_text 409 410 00000325 E870010000 call waitforkey 411 412 0000032A BE2B007501 mov esi, 373*65536+43 413 0000032F BD[A2050000] mov ebp, txt_yellow 414 00000334 E89C010000 call print_text 415 416 00000339 E85C010000 call waitforkey 417 418 ; Masked new color, window 419 ; (blue block starts at row 20) 420 ; ((white text color will be changed to black)) 421 0000033E BFFF000000 mov edi, 0FFh ; mask color, BLUE 422 00000343 31C9 xor ecx, ecx ; 0 ; BLACK (new color) 423 00000345 BA28001400 mov edx, 20*65536+40 ; column 40, row 20 424 0000034A BEA0006E00 mov esi, 110*65536+160 ; size: 110*160 425 0000034F BB31020000 mov ebx, 0231h ; Masked new color in window 426 sys _video 426 <1> 426 <1> 426 <1> 426 <1> 426 <1> %if %0 >= 2 426 <1> mov ebx, %2 426 <1> %if %0 >= 3 426 <1> mov ecx, %3 426 <1> %if %0 = 4 426 <1> mov edx, %4 426 <1> %endif 426 <1> %endif 426 <1> %endif 426 00000354 B81F000000 <1> mov eax, %1 426 <1> 426 00000359 CD40 <1> int 40h 427 428 0000035B E83A010000 call waitforkey 429 430 ; Masked AND colors, window 431 ; (red block starts at row 130) 432 ; ((white text color will be changed to black)) 433 00000360 BF0000FF00 mov edi, 0FF0000h ; mask color, RED 434 ;xor ecx, ecx ; BLACK (and color) 435 00000365 BA28008200 mov edx, 130*65536+40 ; column 40, row 130 436 0000036A BEA0006E00 mov esi, 110*65536+160 ; size: 110*160 437 ;mov ebx, 0235h ; Masked AND colors in window 438 0000036F B335 mov bl, 35h 439 sys _video 439 <1> 439 <1> 439 <1> 439 <1> 439 <1> %if %0 >= 2 439 <1> mov ebx, %2 439 <1> %if %0 >= 3 439 <1> mov ecx, %3 439 <1> %if %0 = 4 439 <1> mov edx, %4 439 <1> %endif 439 <1> %endif 439 <1> %endif 439 00000371 B81F000000 <1> mov eax, %1 439 <1> 439 00000376 CD40 <1> int 40h 440 441 00000378 E81D010000 call waitforkey 442 443 ; Masked ADD to yellow block position 444 0000037D 29FF sub edi, edi ; mask color, BLACK 445 0000037F B188 mov cl, 88h ; add 88h to current color 446 00000381 BA00005E01 mov edx, 350*65536 ; column 0, row 350 447 00000386 BE80026E00 mov esi, 110*65536+640 ; size: 110*640 448 ;mov ebx, 0232h ; add color, window, masked 449 0000038B B332 mov bl, 32h 450 sys _video 450 <1> 450 <1> 450 <1> 450 <1> 450 <1> %if %0 >= 2 450 <1> mov ebx, %2 450 <1> %if %0 >= 3 450 <1> mov ecx, %3 450 <1> %if %0 = 4 450 <1> mov edx, %4 450 <1> %endif 450 <1> %endif 450 <1> %endif 450 0000038D B81F000000 <1> mov eax, %1 450 <1> 450 00000392 CD40 <1> int 40h 451 452 00000394 E801010000 call waitforkey 453 454 ; Masked SUB from green block position 455 ;sub edi, edi ; mask color, BLACK 456 ;mov ecx, 88h ; sub 88h from current color 457 00000399 BA0000F000 mov edx, 240*65536 ; column 0, row 240 458 ;mov esi, 110*65536+640 ; size: 110*640 459 ;mov ebx, 0233h ; sub color, window, masked 460 0000039E B333 mov bl, 33h 461 sys _video 461 <1> 461 <1> 461 <1> 461 <1> 461 <1> %if %0 >= 2 461 <1> mov ebx, %2 461 <1> %if %0 >= 3 461 <1> mov ecx, %3 461 <1> %if %0 = 4 461 <1> mov edx, %4 461 <1> %endif 461 <1> %endif 461 <1> %endif 461 000003A0 B81F000000 <1> mov eax, %1 461 <1> 461 000003A5 CD40 <1> int 40h 462 463 000003A7 E8EE000000 call waitforkey 464 465 ; Masked SUB from yellow block position 466 ;sub edi, edi ; mask color, BLACK 467 ;mov cl, 88h ; add 88h to current color 468 000003AC BA00005E01 mov edx, 350*65536 ; column 0, row 350 469 ;mov esi, 110*65536+640 ; size: 110*640 470 ;mov ebx, 0233h ; sub color, window, masked 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 000003B1 B81F000000 <1> mov eax, %1 471 <1> 471 000003B6 CD40 <1> int 40h 472 473 000003B8 E8DD000000 call waitforkey 474 475 ; Masked ADD to green block position 476 ;sub edi, edi ; mask color, BLACK 477 ;mov cl, 88h ; sub 88h from current color 478 000003BD BA0000F000 mov edx, 240*65536 ; column 0, row 240 479 ;mov esi, 110*65536+640 ; size: 110*640 480 ;mov ebx, 0232h ; add color, window, masked 481 000003C2 B332 mov bl, 32h 482 sys _video 482 <1> 482 <1> 482 <1> 482 <1> 482 <1> %if %0 >= 2 482 <1> mov ebx, %2 482 <1> %if %0 >= 3 482 <1> mov ecx, %3 482 <1> %if %0 = 4 482 <1> mov edx, %4 482 <1> %endif 482 <1> %endif 482 <1> %endif 482 000003C4 B81F000000 <1> mov eax, %1 482 <1> 482 000003C9 CD40 <1> int 40h 483 484 000003CB E8CA000000 call waitforkey 485 486 ; Masked OR colors, window 487 ; (white block starts at row 10) 488 000003D0 BFFF000000 mov edi, 0FFh ; mask color, BLUE 489 000003D5 B900808000 mov ecx, 808000h ; OR value (with current color) 490 000003DA BA00000A00 mov edx, 10*65536+0 ; column 0, row 10 491 000003DF BE80027800 mov esi, 120*65536+640 ; size: 120*640 492 000003E4 BB34020000 mov ebx, 0234h ; Masked OR colors in window 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 000003E9 B81F000000 <1> mov eax, %1 493 <1> 493 000003EE CD40 <1> int 40h 494 495 000003F0 E8A5000000 call waitforkey 496 497 ; Masked XOR colors, window 498 ; (white block starts at row 465) 499 000003F5 BF00FFFF00 mov edi, 0FFFF00h ; mask color, YELLOW 500 000003FA B94F4F4F00 mov ecx, 4F4F4Fh ; XOR value (with current color) 501 000003FF BA00005E01 mov edx, 350*65536+0 ; column 0, row 465 502 00000404 BE80027800 mov esi, 120*65536+640 ; size: 120*640 503 ;mov ebx, 0236h ; Masked XOR colors in window 504 00000409 B334 mov bl, 34h 505 sys _video 505 <1> 505 <1> 505 <1> 505 <1> 505 <1> %if %0 >= 2 505 <1> mov ebx, %2 505 <1> %if %0 >= 3 505 <1> mov ecx, %3 505 <1> %if %0 = 4 505 <1> mov edx, %4 505 <1> %endif 505 <1> %endif 505 <1> %endif 505 0000040B B81F000000 <1> mov eax, %1 505 <1> 505 00000410 CD40 <1> int 40h 506 507 00000412 E883000000 call waitforkey 508 509 ; Masked mix color, window 510 ; (blue block starts at row 20) 511 00000417 BFFF000000 mov edi, 0FFh ; mask color, BLUE 512 0000041C B930303000 mov ecx, 303030h 513 00000421 BA28001400 mov edx, 20*65536+40 ; column 40, row 20 514 00000426 BEA0006E00 mov esi, 110*65536+160 ; size: 110*160 515 ;mov ebx, 023Bh ; Masked mix colors in window 516 0000042B B33B mov bl, 3Bh 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 0000042D B81F000000 <1> mov eax, %1 517 <1> 517 00000432 CD40 <1> int 40h 518 519 00000434 E861000000 call waitforkey 520 521 ; Masked mix color, window 522 ; (red block starts at row 130) 523 00000439 BF0000FF00 mov edi, 0FF0000h ; mask color, RED 524 0000043E B98E8E8E00 mov ecx, 8E8E8Eh 525 00000443 BA28008200 mov edx, 130*65536+40 ; column 40, row 130 526 00000448 BEA0006E00 mov esi, 110*65536+160 ; size: 110*160 527 ;mov ebx, 023Bh ; Masked mix colors in window 528 sys _video 528 <1> 528 <1> 528 <1> 528 <1> 528 <1> %if %0 >= 2 528 <1> mov ebx, %2 528 <1> %if %0 >= 3 528 <1> mov ecx, %3 528 <1> %if %0 = 4 528 <1> mov edx, %4 528 <1> %endif 528 <1> %endif 528 <1> %endif 528 0000044D B81F000000 <1> mov eax, %1 528 <1> 528 00000452 CD40 <1> int 40h 529 530 00000454 E841000000 call waitforkey 531 532 ; Masked mix color, window 533 ; (red block starts at row 130) 534 00000459 BF00FF0000 mov edi, 0FF00h ; mask color, GREEN 535 0000045E B980808000 mov ecx, 808080h 536 00000463 BA2800F000 mov edx, 240*65536+40 ; column 240, row 130 537 00000468 BEB4006E00 mov esi, 110*65536+180 ; size: 110*180 538 ;mov ebx, 023Bh ; Masked mix colors in window 539 sys _video 539 <1> 539 <1> 539 <1> 539 <1> 539 <1> %if %0 >= 2 539 <1> mov ebx, %2 539 <1> %if %0 >= 3 539 <1> mov ecx, %3 539 <1> %if %0 = 4 539 <1> mov edx, %4 539 <1> %endif 539 <1> %endif 539 <1> %endif 539 0000046D B81F000000 <1> mov eax, %1 539 <1> 539 00000472 CD40 <1> int 40h 540 541 00000474 E821000000 call waitforkey 542 543 ; copy full screen buffer to screen 544 00000479 BE[C0050000] mov esi, fullscreen_buffer 545 ;mov ebx, 0200h 546 0000047E 30DB xor bl, bl ; mov bl, 0 547 sys _video 547 <1> 547 <1> 547 <1> 547 <1> 547 <1> %if %0 >= 2 547 <1> mov ebx, %2 547 <1> %if %0 >= 3 547 <1> mov ecx, %3 547 <1> %if %0 = 4 547 <1> mov edx, %4 547 <1> %endif 547 <1> %endif 547 <1> %endif 547 00000480 B81F000000 <1> mov eax, %1 547 <1> 547 00000485 CD40 <1> int 40h 548 549 00000487 E80E000000 call waitforkey 550 ; wait for key stroke before exit 551 terminate: 552 0000048C E82C000000 call set_text_mode 553 sys _exit 553 <1> 553 <1> 553 <1> 553 <1> 553 <1> %if %0 >= 2 553 <1> mov ebx, %2 553 <1> %if %0 >= 3 553 <1> mov ecx, %3 553 <1> %if %0 = 4 553 <1> mov edx, %4 553 <1> %endif 553 <1> %endif 553 <1> %endif 553 00000491 B801000000 <1> mov eax, %1 553 <1> 553 00000496 CD40 <1> int 40h 554 halt: 555 00000498 EBFE jmp short halt 556 557 waitforkey: 558 0000049A B401 mov ah, 1 559 0000049C CD32 int 32h 560 0000049E 740B jz short getkey 561 000004A0 FF05[B8050000] inc dword [counter] 562 000004A6 90 nop 563 000004A7 90 nop 564 000004A8 90 nop 565 000004A9 EBEF jmp short waitforkey 566 getkey: 567 000004AB 30E4 xor ah, ah 568 000004AD CD32 int 32h 569 570 000004AF 663D032E cmp ax, 2E03h 571 000004B3 7405 je short _terminate 572 000004B5 3C1B cmp al, 1Bh ; ESC key 573 000004B7 7401 je short _terminate 574 000004B9 C3 retn 575 _terminate: 576 000004BA 58 pop eax ; return address 577 000004BB EBCF jmp short terminate 578 579 set_text_mode: 580 000004BD 30E4 xor ah, ah 581 000004BF B003 mov al, 3 582 ;int 10h ; al = 03h text mode, int 10 video 583 000004C1 CD31 int 31h ; TRDOS 386 - Video interrupt 584 000004C3 C3 retn 585 586 print_msg: 587 000004C4 B40E mov ah, 0Eh 588 000004C6 BB07000000 mov ebx, 7 589 ;mov bl, 7 ; char attribute & color 590 p_next_chr: 591 000004CB AC lodsb 592 000004CC 08C0 or al, al 593 000004CE 7404 jz short p_retn ; retn 594 000004D0 CD31 int 31h 595 000004D2 EBF7 jmp short p_next_chr 596 p_retn: 597 000004D4 C3 retn 598 599 print_text: 600 ; ebp = text address 601 ; esi = row/column position (si = column) 602 p_d_x: 603 ;mov dh, 0 ; 8x16 system font 604 000004D5 B606 mov dh, 6 ; 32*64 scaled font (base: 8*16 system font) 605 p_d_x_n: 606 000004D7 8A5500 mov dl, [ebp] 607 000004DA 20D2 and dl, dl 608 000004DC 7419 jz short p_d_x_ok 609 sys _video, 020Fh, [tcolor] 609 <1> 609 <1> 609 <1> 609 <1> 609 <1> %if %0 >= 2 609 000004DE BB0F020000 <1> mov ebx, %2 609 <1> %if %0 >= 3 609 000004E3 8B0D[BC050000] <1> mov ecx, %3 609 <1> %if %0 = 4 609 <1> mov edx, %4 609 <1> %endif 609 <1> %endif 609 <1> %endif 609 000004E9 B81F000000 <1> mov eax, %1 609 <1> 609 000004EE CD40 <1> int 40h 610 000004F0 45 inc ebp 611 000004F1 6683C624 add si, 36 ; next char pos 612 000004F5 EBE0 jmp short p_d_x_n 613 p_d_x_ok: 614 000004F7 C3 retn 615 616 program_msg: 617 000004F8 5452444F5320333836- db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Block Operations" 617 00000501 2076322E302E33202D- 617 0000050A 202827737973766964- 617 00000513 656F27292054657374- 617 0000051C 2050726F6772616D20- 617 00000525 2D20426C6F636B204F- 617 0000052E 7065726174696F6E73 618 00000537 0D0A db 0Dh, 0Ah 619 00000539 6279204572646F6761- db "by Erdogan Tan - 02/03/2021" 619 00000542 6E2054616E202D2030- 619 0000054B 322F30332F32303231 620 ;db 0Dh, 0Ah, 0 621 00000554 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 622 00000558 507265737320616E79- db "Press any key to continue .." 622 00000561 206B657920746F2063- 622 0000056A 6F6E74696E7565202E- 622 00000573 2E 623 00000574 0D0A db 0Dh, 0Ah 624 00000576 285072657373204553- db "(Press ESC to exit) .." 624 0000057F 4320746F2065786974- 624 00000588 29202E2E 625 0000058C 0D0A db 0Dh, 0Ah 626 0000058E 0D0A db 0Dh, 0Ah 627 628 nextline: 629 00000590 0D0A00 db 0Dh, 0Ah, 0 630 631 txt_blue: 632 00000593 424C554500 db "BLUE", 0 633 txt_red: 634 00000598 52454400 db "RED", 0 635 txt_green: 636 0000059C 475245454E00 db "GREEN", 0 637 txt_yellow: 638 000005A2 59454C4C4F5700 db "YELLOW", 0 639 txt_white: 640 000005A9 574849544500 db "WHITE", 0 641 txt_black: 642 000005AF 424C41434B00 db "BLACK", 0 643 644 bss: 645 646 ABSOLUTE bss 647 648 000005B5 alignb 4 649 650 counter: 651 000005B8 resd 1 652 653 bss_start: 654 000005BC tcolor: resd 1 655 656 fullscreen_buffer: 657 000005C0 resb 307200*3 658 bss_end: