1 ; **************************************************************************** 2 ; blocks8.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 27/02/2021 6 ; 7 ; **************************************************************************** 8 ; nasm blocks5.s -l blocks5.txt -o BLOCKS5.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[A4040000] mov edi, bss_start 93 00000005 B9813E0000 mov ecx, (bss_end - bss_start)/4 94 ;xor eax, eax 95 0000000A F3AB rep stosd 96 97 ; program message 98 0000000C BE[E0030000] mov esi, program_msg 99 00000011 E896030000 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 13h 107 ;sys _video, 0813h 108 ;cmp eax, 14h 109 ;je short mode_13h_set_ok 110 ;jmp terminate 111 112 ; set VGA mode by using int 31h 113 0000001A 66B81300 mov ax, 13h ; mode 13h ; 114 0000001E CD31 int 31h ; real mode: int 10h 115 ;jmp short mode_13h_set_ok 116 117 mode_13h_set_ok: 118 ; full screen - white color 119 00000020 B90F0F0F0F mov ecx, 0F0F0F0Fh ; white 120 00000025 BB01010000 mov ebx, 0101h ; Full screen, new color 121 sys _video 121 <1> 121 <1> 121 <1> 121 <1> 121 <1> %if %0 >= 2 121 <1> mov ebx, %2 121 <1> %if %0 >= 3 121 <1> mov ecx, %3 121 <1> %if %0 = 4 121 <1> mov edx, %4 121 <1> %endif 121 <1> %endif 121 <1> %endif 121 0000002A B81F000000 <1> mov eax, %1 121 <1> 121 0000002F CD40 <1> int 40h 122 123 ;mov byte [tcolor], 0 124 00000031 BE48004400 mov esi, 68*65536+72 125 00000036 BD[91040000] mov ebp, txt_white 126 0000003B E87D030000 call print_text 127 128 00000040 E83D030000 call waitforkey 129 130 ; Mask color = black 131 ; full screen NOT (except mask color) 132 ;mov edi, 0 ; Black 133 00000045 29FF sub edi, edi 134 00000047 BB27010000 mov ebx, 0127h ; masked 'NOT', full screen 135 sys _video 135 <1> 135 <1> 135 <1> 135 <1> 135 <1> %if %0 >= 2 135 <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 0000004C B81F000000 <1> mov eax, %1 135 <1> 135 00000051 CD40 <1> int 40h 136 137 00000053 E82A030000 call waitforkey 138 139 ; full screen replace color (replace black colors) 140 00000058 B100 mov cl, 0 ; BLACK 141 0000005A B20F mov dl, 0Fh ; WHITE 142 0000005C B30C mov bl, 0Ch 143 sys _video 143 <1> 143 <1> 143 <1> 143 <1> 143 <1> %if %0 >= 2 143 <1> mov ebx, %2 143 <1> %if %0 >= 3 143 <1> mov ecx, %3 143 <1> %if %0 = 4 143 <1> mov edx, %4 143 <1> %endif 143 <1> %endif 143 <1> %endif 143 0000005E B81F000000 <1> mov eax, %1 143 <1> 143 00000063 CD40 <1> int 40h 144 145 00000065 E818030000 call waitforkey 146 147 ; full screen - blue color 148 149 0000006A B920202020 mov ecx, 20202020h ; blue 150 0000006F B301 mov bl, 01h ; Full screen, new color 151 sys _video 151 <1> 151 <1> 151 <1> 151 <1> 151 <1> %if %0 >= 2 151 <1> mov ebx, %2 151 <1> %if %0 >= 3 151 <1> mov ecx, %3 151 <1> %if %0 = 4 151 <1> mov edx, %4 151 <1> %endif 151 <1> %endif 151 <1> %endif 151 00000071 B81F000000 <1> mov eax, %1 151 <1> 151 00000076 CD40 <1> int 40h 152 153 00000078 C605[A4040000]0F mov byte [tcolor], 0Fh 154 0000007F BE5A004400 mov esi, 68*65536+90 155 00000084 BD[7B040000] mov ebp, txt_blue 156 00000089 E82F030000 call print_text 157 158 0000008E E8EF020000 call waitforkey 159 160 ; Mask color = white 161 ; full screen NOT (except mask color) 162 00000093 BF0F000000 mov edi, 0Fh 163 00000098 B327 mov bl, 27h ; masked 'NOT', full screen 164 sys _video 164 <1> 164 <1> 164 <1> 164 <1> 164 <1> %if %0 >= 2 164 <1> mov ebx, %2 164 <1> %if %0 >= 3 164 <1> mov ecx, %3 164 <1> %if %0 = 4 164 <1> mov edx, %4 164 <1> %endif 164 <1> %endif 164 <1> %endif 164 0000009A B81F000000 <1> mov eax, %1 164 <1> 164 0000009F CD40 <1> int 40h 165 166 000000A1 E8DC020000 call waitforkey 167 168 000000A6 B928282828 mov ecx, 28282828h ; RED 169 000000AB B301 mov bl, 01h ; Full screen, new color 170 sys _video 170 <1> 170 <1> 170 <1> 170 <1> 170 <1> %if %0 >= 2 170 <1> mov ebx, %2 170 <1> %if %0 >= 3 170 <1> mov ecx, %3 170 <1> %if %0 = 4 170 <1> mov edx, %4 170 <1> %endif 170 <1> %endif 170 <1> %endif 170 000000AD B81F000000 <1> mov eax, %1 170 <1> 170 000000B2 CD40 <1> int 40h 171 172 ;mov byte [tcolor], 0Fh 173 000000B4 BE6C004400 mov esi, 68*65536+108 174 000000B9 BD[80040000] mov ebp, txt_red 175 000000BE E8FA020000 call print_text 176 177 000000C3 E8BA020000 call waitforkey 178 179 ; Mask color = red 180 ; full screen NEW COLOR (except mask color) 181 000000C8 BF28000000 mov edi, 28h ; mask color, RED 182 000000CD B12C mov cl, 2Ch ; YELLOW 183 000000CF B321 mov bl, 21h ; masked new color, full screen 184 sys _video 184 <1> 184 <1> 184 <1> 184 <1> 184 <1> %if %0 >= 2 184 <1> mov ebx, %2 184 <1> %if %0 >= 3 184 <1> mov ecx, %3 184 <1> %if %0 = 4 184 <1> mov edx, %4 184 <1> %endif 184 <1> %endif 184 <1> %endif 184 000000D1 B81F000000 <1> mov eax, %1 184 <1> 184 000000D6 CD40 <1> int 40h 185 186 000000D8 E8A5020000 call waitforkey 187 188 ; full screen replace color (replace yellow colors) 189 000000DD B12C mov cl, 2Ch ; YELLOW 190 000000DF B228 mov dl, 28h ; RED 191 000000E1 B30C mov bl, 0Ch 192 sys _video 192 <1> 192 <1> 192 <1> 192 <1> 192 <1> %if %0 >= 2 192 <1> mov ebx, %2 192 <1> %if %0 >= 3 192 <1> mov ecx, %3 192 <1> %if %0 = 4 192 <1> mov edx, %4 192 <1> %endif 192 <1> %endif 192 <1> %endif 192 000000E3 B81F000000 <1> mov eax, %1 192 <1> 192 000000E8 CD40 <1> int 40h 193 194 000000EA E893020000 call waitforkey 195 196 ; full screen - green color 197 198 000000EF B930303030 mov ecx, 30303030h ; green 199 000000F4 BB01010000 mov ebx, 0101h ; Full screen, new color 200 sys _video 200 <1> 200 <1> 200 <1> 200 <1> 200 <1> %if %0 >= 2 200 <1> mov ebx, %2 200 <1> %if %0 >= 3 200 <1> mov ecx, %3 200 <1> %if %0 = 4 200 <1> mov edx, %4 200 <1> %endif 200 <1> %endif 200 <1> %endif 200 000000F9 B81F000000 <1> mov eax, %1 200 <1> 200 000000FE CD40 <1> int 40h 201 202 00000100 C605[A4040000]00 mov byte [tcolor], 0 203 00000107 BE48004400 mov esi, 68*65536+72 204 0000010C BD[84040000] mov ebp, txt_green 205 00000111 E8A7020000 call print_text 206 207 00000116 E867020000 call waitforkey 208 209 ; Masked new color 210 0000011B BF30000000 mov edi, 30h ; mask color, GREEN 211 00000120 B10F mov cl, 0Fh ; WHITE 212 00000122 B321 mov bl, 21h ; masked new color, full screen 213 sys _video 213 <1> 213 <1> 213 <1> 213 <1> 213 <1> %if %0 >= 2 213 <1> mov ebx, %2 213 <1> %if %0 >= 3 213 <1> mov ecx, %3 213 <1> %if %0 = 4 213 <1> mov edx, %4 213 <1> %endif 213 <1> %endif 213 <1> %endif 213 00000124 B81F000000 <1> mov eax, %1 213 <1> 213 00000129 CD40 <1> int 40h 214 215 0000012B E852020000 call waitforkey 216 217 ; Masked mix colors 218 00000130 BF0F000000 mov edi, 0Fh ; mask color, WHITE 219 00000135 B110 mov cl, 10h ; (result must be blue from green) 220 00000137 B32B mov bl, 2Bh ; masked MIX colors, full screen 221 sys _video 221 <1> 221 <1> 221 <1> 221 <1> 221 <1> %if %0 >= 2 221 <1> mov ebx, %2 221 <1> %if %0 >= 3 221 <1> mov ecx, %3 221 <1> %if %0 = 4 221 <1> mov edx, %4 221 <1> %endif 221 <1> %endif 221 <1> %endif 221 00000139 B81F000000 <1> mov eax, %1 221 <1> 221 0000013E CD40 <1> int 40h 222 223 00000140 E83D020000 call waitforkey 224 225 ; full screen - yellow color 226 227 00000145 B92C2C2C2C mov ecx, 2C2C2C2Ch ; yellow 228 ;mov ebx, 0101h ; Full screen, new color 229 0000014A B301 mov bl, 01h 230 sys _video 230 <1> 230 <1> 230 <1> 230 <1> 230 <1> %if %0 >= 2 230 <1> mov ebx, %2 230 <1> %if %0 >= 3 230 <1> mov ecx, %3 230 <1> %if %0 = 4 230 <1> mov edx, %4 230 <1> %endif 230 <1> %endif 230 <1> %endif 230 0000014C B81F000000 <1> mov eax, %1 230 <1> 230 00000151 CD40 <1> int 40h 231 232 ;mov byte [tcolor], 0 233 00000153 BE36004400 mov esi, 68*65536+54 234 00000158 BD[8A040000] mov ebp, txt_yellow 235 0000015D E85B020000 call print_text 236 237 00000162 E81B020000 call waitforkey 238 239 ; masked add color 240 00000167 31FF xor edi, edi ; mask color is BLACK 241 00000169 B110 mov cl, 10h ; add 10h to current color 242 0000016B B322 mov bl, 22h 243 sys _video 243 <1> 243 <1> 243 <1> 243 <1> 243 <1> %if %0 >= 2 243 <1> mov ebx, %2 243 <1> %if %0 >= 3 243 <1> mov ecx, %3 243 <1> %if %0 = 4 243 <1> mov edx, %4 243 <1> %endif 243 <1> %endif 243 <1> %endif 243 0000016D B81F000000 <1> mov eax, %1 243 <1> 243 00000172 CD40 <1> int 40h 244 245 00000174 E809020000 call waitforkey 246 247 ; masked sub color 248 ;xor edi, edi ; mask color is BLACK 249 00000179 B110 mov cl, 10h ; sub 10h from current color 250 0000017B B323 mov bl, 23h 251 sys _video 251 <1> 251 <1> 251 <1> 251 <1> 251 <1> %if %0 >= 2 251 <1> mov ebx, %2 251 <1> %if %0 >= 3 251 <1> mov ecx, %3 251 <1> %if %0 = 4 251 <1> mov edx, %4 251 <1> %endif 251 <1> %endif 251 <1> %endif 251 0000017D B81F000000 <1> mov eax, %1 251 <1> 251 00000182 CD40 <1> int 40h 252 253 00000184 E8F9010000 call waitforkey 254 255 ; masked AND colors 256 ;mov edi, 2Ch ; mask color is Yellow 257 00000189 B117 mov cl, 17h ; and 17h with current color 258 0000018B B325 mov bl, 25h 259 sys _video 259 <1> 259 <1> 259 <1> 259 <1> 259 <1> %if %0 >= 2 259 <1> mov ebx, %2 259 <1> %if %0 >= 3 259 <1> mov ecx, %3 259 <1> %if %0 = 4 259 <1> mov edx, %4 259 <1> %endif 259 <1> %endif 259 <1> %endif 259 0000018D B81F000000 <1> mov eax, %1 259 <1> 259 00000192 CD40 <1> int 40h 260 261 00000194 E8E9010000 call waitforkey 262 263 ; masked OR colors 264 00000199 BF2C000000 mov edi, 2Ch ; mask color is Yellow 265 0000019E B120 mov cl, 20h ; or 20h with current color 266 000001A0 B324 mov bl, 24h 267 sys _video 267 <1> 267 <1> 267 <1> 267 <1> 267 <1> %if %0 >= 2 267 <1> mov ebx, %2 267 <1> %if %0 >= 3 267 <1> mov ecx, %3 267 <1> %if %0 = 4 267 <1> mov edx, %4 267 <1> %endif 267 <1> %endif 267 <1> %endif 267 000001A2 B81F000000 <1> mov eax, %1 267 <1> 267 000001A7 CD40 <1> int 40h 268 269 000001A9 E8D4010000 call waitforkey 270 271 ; masked XOR colors 272 ;mov edi, 2Ch ; mask color is Yellow 273 000001AE B120 mov cl, 20h ; xor 20h with current color 274 000001B0 B326 mov bl, 26h 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 000001B2 B81F000000 <1> mov eax, %1 275 <1> 275 000001B7 CD40 <1> int 40h 276 277 000001B9 E8C4010000 call waitforkey 278 279 ; Full screen copy 280 000001BE BE[A8040000] mov esi, fullscreen_buffer 281 000001C3 89F7 mov edi, esi 282 000001C5 31C0 xor eax, eax ; black 283 000001C7 B990010000 mov ecx, (320*5)/4 284 000001CC F3AB rep stosd 285 000001CE B80F0F0F0F mov eax, 0F0F0F0Fh ; white 286 000001D3 B9A0000000 mov ecx, (320*2)/4 287 000001D8 F3AB rep stosd 288 000001DA 31C0 xor eax, eax ; black 289 000001DC B9F0000000 mov ecx, (320*3)/4 290 000001E1 F3AB rep stosd 291 000001E3 B820202020 mov eax, 20202020h ; blue 292 000001E8 B9201C0000 mov ecx, (320*90)/4 293 000001ED F3AB rep stosd 294 000001EF B828282828 mov eax, 28282828h ; red 295 000001F4 B9201C0000 mov ecx, (320*90)/4 296 000001F9 F3AB rep stosd 297 000001FB 31C0 xor eax, eax ; black 298 000001FD B9F0000000 mov ecx, (320*3)/4 299 00000202 F3AB rep stosd 300 00000204 B80F0F0F0F mov eax, 0F0F0F0Fh ; white 301 00000209 B9A0000000 mov ecx, (320*2)/4 302 0000020E F3AB rep stosd 303 00000210 31C0 xor eax, eax ; black 304 00000212 B990010000 mov ecx, (320*5)/4 305 00000217 F3AB rep stosd 306 307 00000219 BB00010000 mov ebx, 0100h ; Full screen copy 308 sys _video 308 <1> 308 <1> 308 <1> 308 <1> 308 <1> %if %0 >= 2 308 <1> mov ebx, %2 308 <1> %if %0 >= 3 308 <1> mov ecx, %3 308 <1> %if %0 = 4 308 <1> mov edx, %4 308 <1> %endif 308 <1> %endif 308 <1> %endif 308 0000021E B81F000000 <1> mov eax, %1 308 <1> 308 00000223 CD40 <1> int 40h 309 310 00000225 E858010000 call waitforkey 311 312 0000022A C605[A4040000]0F mov byte [tcolor], 0Fh 313 314 00000231 BE2B001700 mov esi, 23*65536+43 315 00000236 BD[7B040000] mov ebp, txt_blue 316 0000023B E87D010000 call print_text 317 318 00000240 E83D010000 call waitforkey 319 320 00000245 BE2B007100 mov esi, 113*65536+43 321 0000024A BD[80040000] mov ebp, txt_red 322 0000024F E869010000 call print_text 323 324 00000254 E829010000 call waitforkey 325 326 ; Masked new color, window 327 ; (blue block starts at row 10) 328 ; ((white text color will be changed to black)) 329 00000259 BF20000000 mov edi, 20h ; mask color, BLUE 330 0000025E B100 mov cl, 0 ; BLACK (new color) 331 00000260 BA28000A00 mov edx, 10*65536+40 ; column 40, row 10 332 00000265 BEA0005A00 mov esi, 90*65536+160 ; size: 90*160 333 0000026A BB31010000 mov ebx, 0131h ; Masked new color in window 334 sys _video 334 <1> 334 <1> 334 <1> 334 <1> 334 <1> %if %0 >= 2 334 <1> mov ebx, %2 334 <1> %if %0 >= 3 334 <1> mov ecx, %3 334 <1> %if %0 = 4 334 <1> mov edx, %4 334 <1> %endif 334 <1> %endif 334 <1> %endif 334 0000026F B81F000000 <1> mov eax, %1 334 <1> 334 00000274 CD40 <1> int 40h 335 336 00000276 E807010000 call waitforkey 337 338 ; Masked AND colors, window 339 ; (red block starts at row 100) 340 ; ((white text color will be changed to black)) 341 0000027B BF28000000 mov edi, 28h ; mask color, RED 342 ;mov cl, 0 ; BLACK (and color) 343 00000280 BA28006400 mov edx, 100*65536+40 ; column 40, row 100 344 00000285 BEA0005A00 mov esi, 90*65536+160 ; size: 90*160 345 0000028A BB35010000 mov ebx, 0135h ; Masked AND colors in window 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 0000028F B81F000000 <1> mov eax, %1 346 <1> 346 00000294 CD40 <1> int 40h 347 348 00000296 E8E7000000 call waitforkey 349 350 ; Masked ADD to red block position 351 0000029B 29FF sub edi, edi ; mask color, BLACK 352 0000029D B108 mov cl, 8 ; add 8 to current color 353 0000029F BA00006400 mov edx, 100*65536 ; column 0, row 100 354 000002A4 BE40015A00 mov esi, 90*65536+320 ; size: 90*320 355 ;mov ebx, 0132h ; add color, window, masked 356 000002A9 B332 mov bl, 32h 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 000002AB B81F000000 <1> mov eax, %1 357 <1> 357 000002B0 CD40 <1> int 40h 358 359 000002B2 E8CB000000 call waitforkey 360 361 ; Masked SUB from blue block position 362 ;sub edi, edi ; mask color, BLACK 363 ;mov cl, 8 ; sub 8 from current color 364 000002B7 BA00000A00 mov edx, 10*65536 ; column 0, row 10 365 ;mov esi, 90*65536+320 ; size: 90*320 366 ;mov ebx, 0133h ; sub color, window, masked 367 000002BC B333 mov bl, 33h 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 000002BE B81F000000 <1> mov eax, %1 368 <1> 368 000002C3 CD40 <1> int 40h 369 370 000002C5 E8B8000000 call waitforkey 371 372 ; Masked SUB from red block position 373 ;sub edi, edi ; mask color, BLACK 374 ;mov cl, 8 ; sub 8 from current color 375 000002CA BA00006400 mov edx, 100*65536 ; column 0, row 100 376 ;mov esi, 90*65536+320 ; size: 90*320 377 ;;mov ebx, 0133h ; sub color, window, masked 378 ;mov bl, 33h 379 sys _video 379 <1> 379 <1> 379 <1> 379 <1> 379 <1> %if %0 >= 2 379 <1> mov ebx, %2 379 <1> %if %0 >= 3 379 <1> mov ecx, %3 379 <1> %if %0 = 4 379 <1> mov edx, %4 379 <1> %endif 379 <1> %endif 379 <1> %endif 379 000002CF B81F000000 <1> mov eax, %1 379 <1> 379 000002D4 CD40 <1> int 40h 380 381 000002D6 E8A7000000 call waitforkey 382 383 ; Masked ADD to blue block position 384 ;sub edi, edi ; mask color, BLACK 385 ;mov cl, 8 ; add 8 from current color 386 000002DB BA00000A00 mov edx, 10*65536 ; column 0, row 10 387 ;mov esi, 90*65536+320 ; size: 90*320 388 ;mov ebx, 0132h ; add color, window, masked 389 000002E0 B332 mov bl, 32h 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 000002E2 B81F000000 <1> mov eax, %1 390 <1> 390 000002E7 CD40 <1> int 40h 391 392 000002E9 E894000000 call waitforkey 393 394 ; Masked OR colors, window 395 ; (white block starts at row 5) 396 000002EE BF20000000 mov edi, 20h ; mask color, BLUE 397 000002F3 B128 mov cl, 28h ; OR value (with current color) 398 000002F5 BA00000500 mov edx, 5*65536+0 ; column 0, row 5 399 000002FA BE40016400 mov esi, 100*65536+320 ; size: 100*320 400 ;mov ebx, 0134h ; Masked OR colors in window 401 000002FF B334 mov bl, 34h 402 sys _video 402 <1> 402 <1> 402 <1> 402 <1> 402 <1> %if %0 >= 2 402 <1> mov ebx, %2 402 <1> %if %0 >= 3 402 <1> mov ecx, %3 402 <1> %if %0 = 4 402 <1> mov edx, %4 402 <1> %endif 402 <1> %endif 402 <1> %endif 402 00000301 B81F000000 <1> mov eax, %1 402 <1> 402 00000306 CD40 <1> int 40h 403 404 00000308 E875000000 call waitforkey 405 406 ; Masked XOR colors, window 407 ; (white block starts at row 100) 408 0000030D BF28000000 mov edi, 28h ; mask color, RED 409 00000312 B12C mov cl, 2Ch ; XOR value (with current color) 410 00000314 BA00006400 mov edx, 100*65536+0 ; column 0, row 100 411 ;mov esi, 100*65536+320 ; size: 100*320 412 ;mov ebx, 0236h ; Masked XOR colors in window 413 00000319 B336 mov bl, 36h 414 sys _video 414 <1> 414 <1> 414 <1> 414 <1> 414 <1> %if %0 >= 2 414 <1> mov ebx, %2 414 <1> %if %0 >= 3 414 <1> mov ecx, %3 414 <1> %if %0 = 4 414 <1> mov edx, %4 414 <1> %endif 414 <1> %endif 414 <1> %endif 414 0000031B B81F000000 <1> mov eax, %1 414 <1> 414 00000320 CD40 <1> int 40h 415 416 00000322 E85B000000 call waitforkey 417 418 ; Masked mix color, window 419 ; (blue block starts at row 10) 420 00000327 BF20000000 mov edi, 20h ; mask color, BLUE 421 0000032C B130 mov cl, 30h ; average color will be 2Ch 422 0000032E BA28000A00 mov edx, 10*65536+40 ; column 40, row 10 423 00000333 BEA0005A00 mov esi, 90*65536+160 ; size: 90*160 424 ;mov ebx, 013Bh ; Masked mix colors in window 425 00000338 B33B mov bl, 3Bh 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 0000033A B81F000000 <1> mov eax, %1 426 <1> 426 0000033F CD40 <1> int 40h 427 428 00000341 E83C000000 call waitforkey 429 430 ; Masked mix color, window 431 ; (red block starts at row 100) 432 00000346 BF28000000 mov edi, 28h ; mask color, RED 433 0000034B B11E mov cl, 1Eh ; average color will be 0Fh 434 0000034D BA28006400 mov edx, 100*65536+40 ; column 40, row 100 435 ;mov esi, 90*65536+160 ; size: 90*160 436 ;;mov ebx, 013Bh ; Masked mix colors in window 437 ;mov bl, 3Bh 438 sys _video 438 <1> 438 <1> 438 <1> 438 <1> 438 <1> %if %0 >= 2 438 <1> mov ebx, %2 438 <1> %if %0 >= 3 438 <1> mov ecx, %3 438 <1> %if %0 = 4 438 <1> mov edx, %4 438 <1> %endif 438 <1> %endif 438 <1> %endif 438 00000352 B81F000000 <1> mov eax, %1 438 <1> 438 00000357 CD40 <1> int 40h 439 440 00000359 E824000000 call waitforkey 441 442 ; copy full screen buffer to screen 443 0000035E BE[A8040000] mov esi, fullscreen_buffer 444 00000363 BB00010000 mov ebx, 0100h 445 sys _video 445 <1> 445 <1> 445 <1> 445 <1> 445 <1> %if %0 >= 2 445 <1> mov ebx, %2 445 <1> %if %0 >= 3 445 <1> mov ecx, %3 445 <1> %if %0 = 4 445 <1> mov edx, %4 445 <1> %endif 445 <1> %endif 445 <1> %endif 445 00000368 B81F000000 <1> mov eax, %1 445 <1> 445 0000036D CD40 <1> int 40h 446 447 0000036F E80E000000 call waitforkey 448 ; wait for key stroke before exit 449 terminate: 450 00000374 E82C000000 call set_text_mode 451 sys _exit 451 <1> 451 <1> 451 <1> 451 <1> 451 <1> %if %0 >= 2 451 <1> mov ebx, %2 451 <1> %if %0 >= 3 451 <1> mov ecx, %3 451 <1> %if %0 = 4 451 <1> mov edx, %4 451 <1> %endif 451 <1> %endif 451 <1> %endif 451 00000379 B801000000 <1> mov eax, %1 451 <1> 451 0000037E CD40 <1> int 40h 452 halt: 453 00000380 EBFE jmp short halt 454 455 waitforkey: 456 00000382 B401 mov ah, 1 457 00000384 CD32 int 32h 458 00000386 740B jz short getkey 459 00000388 FF05[A0040000] inc dword [counter] 460 0000038E 90 nop 461 0000038F 90 nop 462 00000390 90 nop 463 00000391 EBEF jmp short waitforkey 464 getkey: 465 00000393 30E4 xor ah, ah 466 00000395 CD32 int 32h 467 468 00000397 663D032E cmp ax, 2E03h 469 0000039B 7405 je short _terminate 470 0000039D 3C1B cmp al, 1Bh ; ESC key 471 0000039F 7401 je short _terminate 472 000003A1 C3 retn 473 _terminate: 474 000003A2 58 pop eax ; return address 475 000003A3 EBCF jmp short terminate 476 477 set_text_mode: 478 000003A5 30E4 xor ah, ah 479 000003A7 B003 mov al, 3 480 ;int 10h ; al = 03h text mode, int 10 video 481 000003A9 CD31 int 31h ; TRDOS 386 - Video interrupt 482 000003AB C3 retn 483 484 print_msg: 485 000003AC B40E mov ah, 0Eh 486 000003AE BB07000000 mov ebx, 7 487 ;mov bl, 7 ; char attribute & color 488 p_next_chr: 489 000003B3 AC lodsb 490 000003B4 08C0 or al, al 491 000003B6 7404 jz short p_retn ; retn 492 000003B8 CD31 int 31h 493 000003BA EBF7 jmp short p_next_chr 494 p_retn: 495 000003BC C3 retn 496 497 print_text: 498 ; ebp = text address 499 ; esi = row/column position (si = column) 500 p_d_x: 501 ;mov dh, 0 ; 8x16 system font 502 000003BD B606 mov dh, 6 ; 32*64 scaled font (base: 8*16 system font) 503 p_d_x_n: 504 000003BF 8A5500 mov dl, [ebp] 505 000003C2 20D2 and dl, dl 506 000003C4 7419 jz short p_d_x_ok 507 sys _video, 010Fh, [tcolor] 507 <1> 507 <1> 507 <1> 507 <1> 507 <1> %if %0 >= 2 507 000003C6 BB0F010000 <1> mov ebx, %2 507 <1> %if %0 >= 3 507 000003CB 8B0D[A4040000] <1> mov ecx, %3 507 <1> %if %0 = 4 507 <1> mov edx, %4 507 <1> %endif 507 <1> %endif 507 <1> %endif 507 000003D1 B81F000000 <1> mov eax, %1 507 <1> 507 000003D6 CD40 <1> int 40h 508 000003D8 45 inc ebp 509 000003D9 6683C624 add si, 36 ; next char pos 510 000003DD EBE0 jmp short p_d_x_n 511 p_d_x_ok: 512 000003DF C3 retn 513 514 program_msg: 515 000003E0 5452444F5320333836- db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Block Operations" 515 000003E9 2076322E302E33202D- 515 000003F2 202827737973766964- 515 000003FB 656F27292054657374- 515 00000404 2050726F6772616D20- 515 0000040D 2D20426C6F636B204F- 515 00000416 7065726174696F6E73 516 0000041F 0D0A db 0Dh, 0Ah 517 00000421 6279204572646F6761- db "by Erdogan Tan - 27/02/2021" 517 0000042A 6E2054616E202D2032- 517 00000433 372F30322F32303231 518 ;db 0Dh, 0Ah, 0 519 0000043C 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 520 00000440 507265737320616E79- db "Press any key to continue .." 520 00000449 206B657920746F2063- 520 00000452 6F6E74696E7565202E- 520 0000045B 2E 521 0000045C 0D0A db 0Dh, 0Ah 522 0000045E 285072657373204553- db "(Press ESC to exit) .." 522 00000467 4320746F2065786974- 522 00000470 29202E2E 523 00000474 0D0A db 0Dh, 0Ah 524 00000476 0D0A db 0Dh, 0Ah 525 526 nextline: 527 00000478 0D0A00 db 0Dh, 0Ah, 0 528 529 txt_blue: 530 0000047B 424C554500 db "BLUE", 0 531 txt_red: 532 00000480 52454400 db "RED", 0 533 txt_green: 534 00000484 475245454E00 db "GREEN", 0 535 txt_yellow: 536 0000048A 59454C4C4F5700 db "YELLOW", 0 537 txt_white: 538 00000491 574849544500 db "WHITE", 0 539 txt_black: 540 00000497 424C41434B00 db "BLACK", 0 541 542 bss: 543 544 ABSOLUTE bss 545 546 0000049D alignb 4 547 548 counter: 549 000004A0 resd 1 550 551 bss_start: 552 000004A4 tcolor: resd 1 553 554 fullscreen_buffer: 555 000004A8 resb 64000 556 bss_end: