1 ; **************************************************************************** 2 ; blocks17.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 02/03/2021 6 ; 7 ; **************************************************************************** 8 ; nasm blocks17.s -l blocks17.txt -o BLOCKS17.PRG -Z error.txt 9 ; (modified from 'blocks16.s', 02/03/2021 & 'blocks14.s', 01/03/2021) 10 11 ; 'sysvideo' bh = 2, block copy and modification test (VESA VBE mode 111h) 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[98050000] mov edi, bss_start 93 00000005 B901580200 mov ecx, (bss_end - bss_start)/4 94 ;xor eax, eax 95 0000000A F3AB rep stosd 96 97 ; program message 98 0000000C BE[D7040000] mov esi, program_msg 99 00000011 E88D040000 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 111h ; 640x480, 16 bit high colors 107 ; ; (RGB: 5:6:5) 108 sys _video, 08FFh, 111h 108 <1> 108 <1> 108 <1> 108 <1> 108 <1> %if %0 >= 2 108 0000001A BBFF080000 <1> mov ebx, %2 108 <1> %if %0 >= 3 108 0000001F B911010000 <1> mov ecx, %3 108 <1> %if %0 = 4 108 <1> mov edx, %4 108 <1> %endif 108 <1> %endif 108 <1> %endif 108 00000024 B81F000000 <1> mov eax, %1 108 <1> 108 00000029 CD40 <1> int 40h 109 0000002B 09C0 or eax, eax 110 ;jz short terminate 111 ;mov [LFB_ADDR], edx ; pointer to LFB info table/structure 112 0000002D 7505 jnz short set_vesa_mode_111h_ok 113 0000002F E937040000 jmp terminate 114 115 set_vesa_mode_111h_ok: 116 00000034 B9FFFF0000 mov ecx, 0FFFFh ; WHITE 117 00000039 BB01020000 mov ebx, 0201h ; Full screen, new color 118 sys _video 118 <1> 118 <1> 118 <1> 118 <1> 118 <1> %if %0 >= 2 118 <1> mov ebx, %2 118 <1> %if %0 >= 3 118 <1> mov ecx, %3 118 <1> %if %0 = 4 118 <1> mov edx, %4 118 <1> %endif 118 <1> %endif 118 <1> %endif 118 0000003E B81F000000 <1> mov eax, %1 118 <1> 118 00000043 CD40 <1> int 40h 119 120 ;mov dword [tcolor], 0 121 00000045 BEF000D000 mov esi, 208*65536+240 122 0000004A BD[88050000] mov ebp, txt_white 123 0000004F E860040000 call print_text 124 125 00000054 E820040000 call waitforkey 126 127 ; full screen replace color (replace black colors) 128 00000059 29C9 sub ecx, ecx ; 0 ; BLACK 129 0000005B BAE0FB0000 mov edx, 1111101111100000b ; ORANGE 130 00000060 B30C mov bl, 0Ch 131 sys _video 131 <1> 131 <1> 131 <1> 131 <1> 131 <1> %if %0 >= 2 131 <1> mov ebx, %2 131 <1> %if %0 >= 3 131 <1> mov ecx, %3 131 <1> %if %0 = 4 131 <1> mov edx, %4 131 <1> %endif 131 <1> %endif 131 <1> %endif 131 00000062 B81F000000 <1> mov eax, %1 131 <1> 131 00000067 CD40 <1> int 40h 132 133 00000069 E80B040000 call waitforkey 134 135 ; Mask color = black 136 ; full screen NOT (except mask color) 137 0000006E BFE0FB0000 mov edi, 1111101111100000b ; ORANGE 138 00000073 BB27020000 mov ebx, 0227h ; masked 'NOT', full screen 139 sys _video 139 <1> 139 <1> 139 <1> 139 <1> 139 <1> %if %0 >= 2 139 <1> mov ebx, %2 139 <1> %if %0 >= 3 139 <1> mov ecx, %3 139 <1> %if %0 = 4 139 <1> mov edx, %4 139 <1> %endif 139 <1> %endif 139 <1> %endif 139 00000078 B81F000000 <1> mov eax, %1 139 <1> 139 0000007D CD40 <1> int 40h 140 141 0000007F E8F5030000 call waitforkey 142 143 ; full screen replace color (replace black colors) 144 00000084 B9E0FB0000 mov ecx, 1111101111100000b ; ORANGE 145 00000089 BAFFFF0000 mov edx, 0FFFFh ; WHITE 146 0000008E B30C mov bl, 0Ch 147 sys _video 147 <1> 147 <1> 147 <1> 147 <1> 147 <1> %if %0 >= 2 147 <1> mov ebx, %2 147 <1> %if %0 >= 3 147 <1> mov ecx, %3 147 <1> %if %0 = 4 147 <1> mov edx, %4 147 <1> %endif 147 <1> %endif 147 <1> %endif 147 00000090 B81F000000 <1> mov eax, %1 147 <1> 147 00000095 CD40 <1> int 40h 148 149 00000097 E8DD030000 call waitforkey 150 151 ; full screen - blue color 152 153 0000009C B91F000000 mov ecx, 11111b ; BLUE 154 000000A1 B301 mov bl, 01h ; Full screen, new color 155 sys _video 155 <1> 155 <1> 155 <1> 155 <1> 155 <1> %if %0 >= 2 155 <1> mov ebx, %2 155 <1> %if %0 >= 3 155 <1> mov ecx, %3 155 <1> %if %0 = 4 155 <1> mov edx, %4 155 <1> %endif 155 <1> %endif 155 <1> %endif 155 000000A3 B81F000000 <1> mov eax, %1 155 <1> 155 000000A8 CD40 <1> int 40h 156 157 000000AA C705[98050000]FFFF- mov dword [tcolor], 0FFFFh 157 000000B2 0000 158 000000B4 BE0201D000 mov esi, 208*65536+258 159 000000B9 BD[72050000] mov ebp, txt_blue 160 000000BE E8F1030000 call print_text 161 162 000000C3 E8B1030000 call waitforkey 163 164 ; Mask color = white 165 ; full screen NOT (except mask color) 166 000000C8 BFFFFF0000 mov edi, 0FFFFh 167 000000CD B327 mov bl, 27h ; masked 'NOT', full screen 168 sys _video 168 <1> 168 <1> 168 <1> 168 <1> 168 <1> %if %0 >= 2 168 <1> mov ebx, %2 168 <1> %if %0 >= 3 168 <1> mov ecx, %3 168 <1> %if %0 = 4 168 <1> mov edx, %4 168 <1> %endif 168 <1> %endif 168 <1> %endif 168 000000CF B81F000000 <1> mov eax, %1 168 <1> 168 000000D4 CD40 <1> int 40h 169 170 000000D6 E89E030000 call waitforkey 171 172 000000DB B900F80000 mov ecx, 1111100000000000b ; RED 173 000000E0 B301 mov bl, 01h ; Full screen, new color 174 sys _video 174 <1> 174 <1> 174 <1> 174 <1> 174 <1> %if %0 >= 2 174 <1> mov ebx, %2 174 <1> %if %0 >= 3 174 <1> mov ecx, %3 174 <1> %if %0 = 4 174 <1> mov edx, %4 174 <1> %endif 174 <1> %endif 174 <1> %endif 174 000000E2 B81F000000 <1> mov eax, %1 174 <1> 174 000000E7 CD40 <1> int 40h 175 176 ;mov word [tcolor], 0FFFFh 177 000000E9 BE1401D000 mov esi, 208*65536+276 178 000000EE BD[77050000] mov ebp, txt_red 179 000000F3 E8BC030000 call print_text 180 181 000000F8 E87C030000 call waitforkey 182 183 ; Mask color = red 184 ; full screen NEW COLOR (except mask color) 185 000000FD BF00F80000 mov edi, 1111100000000000b ; mask color, RED 186 00000102 B9E0FF0000 mov ecx, 1111111111100000b ; YELLOW 187 00000107 B321 mov bl, 21h ; masked new color, full screen 188 sys _video 188 <1> 188 <1> 188 <1> 188 <1> 188 <1> %if %0 >= 2 188 <1> mov ebx, %2 188 <1> %if %0 >= 3 188 <1> mov ecx, %3 188 <1> %if %0 = 4 188 <1> mov edx, %4 188 <1> %endif 188 <1> %endif 188 <1> %endif 188 00000109 B81F000000 <1> mov eax, %1 188 <1> 188 0000010E CD40 <1> int 40h 189 190 00000110 E864030000 call waitforkey 191 192 ; full screen replace color (replace yellow colors) 193 00000115 B9E0FF0000 mov ecx, 1111111111100000b ; YELLOW 194 0000011A BAE0FB0000 mov edx, 1111101111100000b ; new color, ORANGE 195 0000011F B30C mov bl, 0Ch 196 sys _video 196 <1> 196 <1> 196 <1> 196 <1> 196 <1> %if %0 >= 2 196 <1> mov ebx, %2 196 <1> %if %0 >= 3 196 <1> mov ecx, %3 196 <1> %if %0 = 4 196 <1> mov edx, %4 196 <1> %endif 196 <1> %endif 196 <1> %endif 196 00000121 B81F000000 <1> mov eax, %1 196 <1> 196 00000126 CD40 <1> int 40h 197 198 00000128 E84C030000 call waitforkey 199 200 ; full screen - green color 201 202 0000012D B9E0070000 mov ecx, 11111100000b ; GREEN 203 00000132 BB01020000 mov ebx, 0201h ; Full screen, new color 204 sys _video 204 <1> 204 <1> 204 <1> 204 <1> 204 <1> %if %0 >= 2 204 <1> mov ebx, %2 204 <1> %if %0 >= 3 204 <1> mov ecx, %3 204 <1> %if %0 = 4 204 <1> mov edx, %4 204 <1> %endif 204 <1> %endif 204 <1> %endif 204 00000137 B81F000000 <1> mov eax, %1 204 <1> 204 0000013C CD40 <1> int 40h 205 206 0000013E C705[98050000]0000- mov dword [tcolor], 0 206 00000146 0000 207 00000148 BEF000D000 mov esi, 208*65536+240 208 0000014D BD[7B050000] mov ebp, txt_green 209 00000152 E85D030000 call print_text 210 211 00000157 E81D030000 call waitforkey 212 213 ; Masked new color 214 0000015C BFE0070000 mov edi, 11111100000b ; mask color, GREEN 215 00000161 B9FFFF0000 mov ecx, 0FFFFh ; WHITE 216 00000166 B321 mov bl, 21h ; masked new color, full screen 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 00000168 B81F000000 <1> mov eax, %1 217 <1> 217 0000016D CD40 <1> int 40h 218 219 0000016F E805030000 call waitforkey 220 221 ; Masked mix colors 222 00000174 BFFFFF0000 mov edi, 0FFFFh ; WHITE 223 00000179 B9FF000000 mov ecx, 0FFh 224 0000017E B32B mov bl, 2Bh ; masked MIX colors, full screen 225 sys _video 225 <1> 225 <1> 225 <1> 225 <1> 225 <1> %if %0 >= 2 225 <1> mov ebx, %2 225 <1> %if %0 >= 3 225 <1> mov ecx, %3 225 <1> %if %0 = 4 225 <1> mov edx, %4 225 <1> %endif 225 <1> %endif 225 <1> %endif 225 00000180 B81F000000 <1> mov eax, %1 225 <1> 225 00000185 CD40 <1> int 40h 226 227 00000187 E8ED020000 call waitforkey 228 229 ; full screen - yellow color 230 231 0000018C B9E0FF0000 mov ecx, 1111111111100000b ; YELLOW 232 00000191 BB01020000 mov ebx, 0201h ; Full screen, new color 233 sys _video 233 <1> 233 <1> 233 <1> 233 <1> 233 <1> %if %0 >= 2 233 <1> mov ebx, %2 233 <1> %if %0 >= 3 233 <1> mov ecx, %3 233 <1> %if %0 = 4 233 <1> mov edx, %4 233 <1> %endif 233 <1> %endif 233 <1> %endif 233 00000196 B81F000000 <1> mov eax, %1 233 <1> 233 0000019B CD40 <1> int 40h 234 235 ;mov dword [tcolor], 0 236 0000019D BEDE00D000 mov esi, 208*65536+222 237 000001A2 BD[81050000] mov ebp, txt_yellow 238 000001A7 E808030000 call print_text 239 240 000001AC E8C8020000 call waitforkey 241 242 ; masked add color 243 000001B1 31FF xor edi, edi ; mask color is BLACK 244 000001B3 B980000000 mov ecx, 80h ; add 80h to current color 245 000001B8 B322 mov bl, 22h 246 sys _video 246 <1> 246 <1> 246 <1> 246 <1> 246 <1> %if %0 >= 2 246 <1> mov ebx, %2 246 <1> %if %0 >= 3 246 <1> mov ecx, %3 246 <1> %if %0 = 4 246 <1> mov edx, %4 246 <1> %endif 246 <1> %endif 246 <1> %endif 246 000001BA B81F000000 <1> mov eax, %1 246 <1> 246 000001BF CD40 <1> int 40h 247 248 000001C1 E8B3020000 call waitforkey 249 250 ; masked sub color 251 ;xor edi, edi ; mask color is BLACK 252 ;mov ecx, 80h ; sub 80h from current color 253 000001C6 B323 mov bl, 23h 254 sys _video 254 <1> 254 <1> 254 <1> 254 <1> 254 <1> %if %0 >= 2 254 <1> mov ebx, %2 254 <1> %if %0 >= 3 254 <1> mov ecx, %3 254 <1> %if %0 = 4 254 <1> mov edx, %4 254 <1> %endif 254 <1> %endif 254 <1> %endif 254 000001C8 B81F000000 <1> mov eax, %1 254 <1> 254 000001CD CD40 <1> int 40h 255 256 000001CF E8A5020000 call waitforkey 257 258 ; masked AND colors 259 ;xor edi, edi ; mask color is BLACK 260 000001D4 B93F300000 mov ecx, 303Fh ; and 30h with current color 261 000001D9 B325 mov bl, 25h 262 sys _video 262 <1> 262 <1> 262 <1> 262 <1> 262 <1> %if %0 >= 2 262 <1> mov ebx, %2 262 <1> %if %0 >= 3 262 <1> mov ecx, %3 262 <1> %if %0 = 4 262 <1> mov edx, %4 262 <1> %endif 262 <1> %endif 262 <1> %endif 262 000001DB B81F000000 <1> mov eax, %1 262 <1> 262 000001E0 CD40 <1> int 40h 263 264 000001E2 E892020000 call waitforkey 265 266 ; masked OR colors 267 000001E7 BFE0FF0000 mov edi, 1111111111100000b ; mask color is Yellow 268 000001EC B947200000 mov ecx, 2047h ; or 40h with current color 269 000001F1 B324 mov bl, 24h 270 sys _video 270 <1> 270 <1> 270 <1> 270 <1> 270 <1> %if %0 >= 2 270 <1> mov ebx, %2 270 <1> %if %0 >= 3 270 <1> mov ecx, %3 270 <1> %if %0 = 4 270 <1> mov edx, %4 270 <1> %endif 270 <1> %endif 270 <1> %endif 270 000001F3 B81F000000 <1> mov eax, %1 270 <1> 270 000001F8 CD40 <1> int 40h 271 272 000001FA E87A020000 call waitforkey 273 274 ; masked XOR colors 275 ;mov edi, 1111111111100000b ; mask color is Yellow 276 000001FF B92F2F0000 mov ecx, 2F2Fh ; xor 2Fh with current color 277 00000204 B326 mov bl, 26h 278 sys _video 278 <1> 278 <1> 278 <1> 278 <1> 278 <1> %if %0 >= 2 278 <1> mov ebx, %2 278 <1> %if %0 >= 3 278 <1> mov ecx, %3 278 <1> %if %0 = 4 278 <1> mov edx, %4 278 <1> %endif 278 <1> %endif 278 <1> %endif 278 00000206 B81F000000 <1> mov eax, %1 278 <1> 278 0000020B CD40 <1> int 40h 279 280 0000020D E867020000 call waitforkey 281 282 ; Full screen copy 283 00000212 BE[9C050000] mov esi, fullscreen_buffer 284 00000217 89F7 mov edi, esi 285 286 ; Black 287 00000219 B900190000 mov ecx, 640*10 288 0000021E 31C0 xor eax, eax ; black 289 00000220 F366AB rep stosw 290 291 ; White 292 00000223 B9800C0000 mov ecx, 640*5 293 00000228 66B8FFFF mov ax, 0FFFFh ; white 294 0000022C F366AB rep stosw 295 296 ; Black 297 0000022F B9800C0000 mov ecx, 640*5 298 00000234 31C0 xor eax, eax ; black 299 00000236 F366AB rep stosw 300 301 ; Blue 302 00000239 B900130100 mov ecx, 640*110 303 0000023E B01F mov al, 11111b 304 00000240 F366AB rep stosw 305 306 ; Red 307 00000243 B900130100 mov ecx, 640*110 308 00000248 B800F80000 mov eax, 1111100000000000b 309 0000024D F366AB rep stosw 310 311 ; Green 312 00000250 B900130100 mov ecx, 640*110 313 00000255 B8E0070000 mov eax, 11111100000b 314 0000025A F366AB rep stosw 315 316 ; Yellow 317 0000025D B900130100 mov ecx, 640*110 318 00000262 B8E0FF0000 mov eax, 1111111111100000b 319 00000267 F366AB rep stosw 320 321 ; Black 322 0000026A B9800C0000 mov ecx, 640*5 323 0000026F 31C0 xor eax, eax ; black 324 00000271 F366AB rep stosw 325 326 ; White 327 00000274 B9800C0000 mov ecx, 640*5 328 00000279 66B8FFFF mov ax, 0FFFFh ; white 329 0000027D F366AB rep stosw 330 331 ; Black 332 00000280 B900190000 mov ecx, 640*10 333 00000285 31C0 xor eax, eax ; black 334 00000287 F366AB rep stosw 335 336 0000028A BB00020000 mov ebx, 0200h ; Full screen copy 337 sys _video 337 <1> 337 <1> 337 <1> 337 <1> 337 <1> %if %0 >= 2 337 <1> mov ebx, %2 337 <1> %if %0 >= 3 337 <1> mov ecx, %3 337 <1> %if %0 = 4 337 <1> mov edx, %4 337 <1> %endif 337 <1> %endif 337 <1> %endif 337 0000028F B81F000000 <1> mov eax, %1 337 <1> 337 00000294 CD40 <1> int 40h 338 339 00000296 E8DE010000 call waitforkey 340 341 0000029B 66C705[98050000]FF- mov word [tcolor], 0FFFFh 341 000002A3 FF 342 343 000002A4 BE2B002B00 mov esi, 43*65536+43 344 000002A9 BD[72050000] mov ebp, txt_blue 345 000002AE E801020000 call print_text 346 347 000002B3 E8C1010000 call waitforkey 348 349 000002B8 BE2B009900 mov esi, 153*65536+43 350 000002BD BD[77050000] mov ebp, txt_red 351 000002C2 E8ED010000 call print_text 352 353 000002C7 E8AD010000 call waitforkey 354 355 000002CC BE2B000701 mov esi, 263*65536+43 356 000002D1 BD[7B050000] mov ebp, txt_green 357 000002D6 E8D9010000 call print_text 358 359 000002DB E899010000 call waitforkey 360 361 000002E0 BE2B007501 mov esi, 373*65536+43 362 000002E5 BD[81050000] mov ebp, txt_yellow 363 000002EA E8C5010000 call print_text 364 365 000002EF E885010000 call waitforkey 366 367 000002F4 C705[98050000]0000- mov dword [tcolor], 0 367 000002FC 0000 368 369 000002FE BE2B000701 mov esi, 263*65536+43 370 00000303 BD[7B050000] mov ebp, txt_green 371 00000308 E8A7010000 call print_text 372 373 0000030D E867010000 call waitforkey 374 375 00000312 BE2B007501 mov esi, 373*65536+43 376 00000317 BD[81050000] mov ebp, txt_yellow 377 0000031C E893010000 call print_text 378 379 00000321 E853010000 call waitforkey 380 381 ; Masked new color, window 382 ; (blue block starts at row 20) 383 ; ((white text color will be changed to black)) 384 00000326 BF1F000000 mov edi, 11111b ; mask color, BLUE 385 0000032B 31C9 xor ecx, ecx ; 0 ; BLACK (new color) 386 0000032D BA28001400 mov edx, 20*65536+40 ; column 40, row 20 387 00000332 BEA0006E00 mov esi, 110*65536+160 ; size: 110*160 388 00000337 BB31020000 mov ebx, 0231h ; Masked new color in window 389 sys _video 389 <1> 389 <1> 389 <1> 389 <1> 389 <1> %if %0 >= 2 389 <1> mov ebx, %2 389 <1> %if %0 >= 3 389 <1> mov ecx, %3 389 <1> %if %0 = 4 389 <1> mov edx, %4 389 <1> %endif 389 <1> %endif 389 <1> %endif 389 0000033C B81F000000 <1> mov eax, %1 389 <1> 389 00000341 CD40 <1> int 40h 390 391 00000343 E831010000 call waitforkey 392 393 ; Masked AND colors, window 394 ; (red block starts at row 130) 395 ; ((white text color will be changed to black)) 396 00000348 BF00F80000 mov edi, 1111100000000000b ; mask color, RED 397 ;xor ecx, ecx ; BLACK (and color) 398 0000034D BA28008200 mov edx, 130*65536+40 ; column 40, row 130 399 00000352 BEA0006E00 mov esi, 110*65536+160 ; size: 110*160 400 ;mov ebx, 0235h ; Masked AND colors in window 401 00000357 B335 mov bl, 35h 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 00000359 B81F000000 <1> mov eax, %1 402 <1> 402 0000035E CD40 <1> int 40h 403 404 00000360 E814010000 call waitforkey 405 406 ; Masked ADD to yellow block position 407 00000365 29FF sub edi, edi ; mask color, BLACK 408 00000367 B188 mov cl, 88h ; add 88h to current color 409 00000369 BA00005E01 mov edx, 350*65536 ; column 0, row 350 410 0000036E BE80026E00 mov esi, 110*65536+640 ; size: 110*640 411 ;mov ebx, 0232h ; add color, window, masked 412 00000373 B332 mov bl, 32h 413 sys _video 413 <1> 413 <1> 413 <1> 413 <1> 413 <1> %if %0 >= 2 413 <1> mov ebx, %2 413 <1> %if %0 >= 3 413 <1> mov ecx, %3 413 <1> %if %0 = 4 413 <1> mov edx, %4 413 <1> %endif 413 <1> %endif 413 <1> %endif 413 00000375 B81F000000 <1> mov eax, %1 413 <1> 413 0000037A CD40 <1> int 40h 414 415 0000037C E8F8000000 call waitforkey 416 417 ; Masked SUB from green block position 418 ;sub edi, edi ; mask color, BLACK 419 ;mov ecx, 88h ; sub 88h from current color 420 00000381 BA0000F000 mov edx, 240*65536 ; column 0, row 240 421 ;mov esi, 110*65536+640 ; size: 110*640 422 ;mov ebx, 0233h ; sub color, window, masked 423 00000386 B333 mov bl, 33h 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 00000388 B81F000000 <1> mov eax, %1 424 <1> 424 0000038D CD40 <1> int 40h 425 426 0000038F E8E5000000 call waitforkey 427 428 ; Masked SUB from yellow block position 429 ;sub edi, edi ; mask color, BLACK 430 ;mov cl, 88h ; add 88h to current color 431 00000394 BA00005E01 mov edx, 350*65536 ; column 0, row 350 432 ;mov esi, 110*65536+640 ; size: 110*640 433 ;mov ebx, 0233h ; sub color, window, masked 434 sys _video 434 <1> 434 <1> 434 <1> 434 <1> 434 <1> %if %0 >= 2 434 <1> mov ebx, %2 434 <1> %if %0 >= 3 434 <1> mov ecx, %3 434 <1> %if %0 = 4 434 <1> mov edx, %4 434 <1> %endif 434 <1> %endif 434 <1> %endif 434 00000399 B81F000000 <1> mov eax, %1 434 <1> 434 0000039E CD40 <1> int 40h 435 436 000003A0 E8D4000000 call waitforkey 437 438 ; Masked ADD to green block position 439 ;sub edi, edi ; mask color, BLACK 440 ;mov cl, 88h ; sub 88h from current color 441 000003A5 BA0000F000 mov edx, 240*65536 ; column 0, row 240 442 ;mov esi, 110*65536+640 ; size: 110*640 443 ;mov ebx, 0232h ; add color, window, masked 444 000003AA B332 mov bl, 32h 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 000003AC B81F000000 <1> mov eax, %1 445 <1> 445 000003B1 CD40 <1> int 40h 446 447 000003B3 E8C1000000 call waitforkey 448 449 ; Masked OR colors, window 450 ; (white block starts at row 10) 451 000003B8 66BF1F00 mov di, 11111b ; mask color, BLUE 452 000003BC B980800000 mov ecx, 8080h ; OR value (with current color) 453 000003C1 BA00000A00 mov edx, 10*65536+0 ; column 0, row 10 454 000003C6 BE80027800 mov esi, 120*65536+640 ; size: 120*640 455 000003CB BB34020000 mov ebx, 0234h ; Masked OR colors in window 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 000003D0 B81F000000 <1> mov eax, %1 456 <1> 456 000003D5 CD40 <1> int 40h 457 458 000003D7 E89D000000 call waitforkey 459 460 ; Masked XOR colors, window 461 ; (white block starts at row 465) 462 000003DC 66BFE0FF mov di, 1111111111100000b ; mask color, YELLOW 463 000003E0 66B94F4F mov cx, 4F4Fh ; XOR value (with current color) 464 000003E4 BA00005E01 mov edx, 350*65536+0 ; column 0, row 465 465 000003E9 BE80027800 mov esi, 120*65536+640 ; size: 120*640 466 ;mov ebx, 0236h ; Masked XOR colors in window 467 000003EE B334 mov bl, 34h 468 sys _video 468 <1> 468 <1> 468 <1> 468 <1> 468 <1> %if %0 >= 2 468 <1> mov ebx, %2 468 <1> %if %0 >= 3 468 <1> mov ecx, %3 468 <1> %if %0 = 4 468 <1> mov edx, %4 468 <1> %endif 468 <1> %endif 468 <1> %endif 468 000003F0 B81F000000 <1> mov eax, %1 468 <1> 468 000003F5 CD40 <1> int 40h 469 470 000003F7 E87D000000 call waitforkey 471 472 ; Masked mix color, window 473 ; (blue block starts at row 20) 474 000003FC 66BF1F00 mov di, 11111b ; mask color, BLUE 475 00000400 66B93030 mov cx, 3030h 476 00000404 BA28001400 mov edx, 20*65536+40 ; column 40, row 20 477 00000409 BEA0006E00 mov esi, 110*65536+160 ; size: 110*160 478 ;mov ebx, 023Bh ; Masked mix colors in window 479 0000040E B33B mov bl, 3Bh 480 sys _video 480 <1> 480 <1> 480 <1> 480 <1> 480 <1> %if %0 >= 2 480 <1> mov ebx, %2 480 <1> %if %0 >= 3 480 <1> mov ecx, %3 480 <1> %if %0 = 4 480 <1> mov edx, %4 480 <1> %endif 480 <1> %endif 480 <1> %endif 480 00000410 B81F000000 <1> mov eax, %1 480 <1> 480 00000415 CD40 <1> int 40h 481 482 00000417 E85D000000 call waitforkey 483 484 ; Masked mix color, window 485 ; (red block starts at row 130) 486 0000041C 66BF00F8 mov di, 1111100000000000b ; mask color, RED 487 00000420 66B98E8E mov cx, 8E8Eh 488 00000424 BA28008200 mov edx, 130*65536+40 ; column 40, row 130 489 00000429 BEA0006E00 mov esi, 110*65536+160 ; size: 110*160 490 ;mov ebx, 023Bh ; Masked mix colors in window 491 sys _video 491 <1> 491 <1> 491 <1> 491 <1> 491 <1> %if %0 >= 2 491 <1> mov ebx, %2 491 <1> %if %0 >= 3 491 <1> mov ecx, %3 491 <1> %if %0 = 4 491 <1> mov edx, %4 491 <1> %endif 491 <1> %endif 491 <1> %endif 491 0000042E B81F000000 <1> mov eax, %1 491 <1> 491 00000433 CD40 <1> int 40h 492 493 00000435 E83F000000 call waitforkey 494 495 ; Masked mix color, window 496 ; (green block starts at row 240) 497 0000043A 66BFE007 mov di, 11111100000b ; mask color, GREEN 498 0000043E 66B97770 mov cx, 7077h 499 00000442 BA2800F000 mov edx, 240*65536+40 ; column 40, row 240 500 00000447 BEB4006E00 mov esi, 110*65536+180 ; size: 110*180 501 ;mov ebx, 023Bh ; Masked mix colors in window 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 0000044C B81F000000 <1> mov eax, %1 502 <1> 502 00000451 CD40 <1> int 40h 503 504 00000453 E821000000 call waitforkey 505 506 ; copy full screen buffer to screen 507 00000458 BE[9C050000] mov esi, fullscreen_buffer 508 ;mov ebx, 0200h 509 0000045D 30DB xor bl, bl ; mov bl, 0 510 sys _video 510 <1> 510 <1> 510 <1> 510 <1> 510 <1> %if %0 >= 2 510 <1> mov ebx, %2 510 <1> %if %0 >= 3 510 <1> mov ecx, %3 510 <1> %if %0 = 4 510 <1> mov edx, %4 510 <1> %endif 510 <1> %endif 510 <1> %endif 510 0000045F B81F000000 <1> mov eax, %1 510 <1> 510 00000464 CD40 <1> int 40h 511 512 00000466 E80E000000 call waitforkey 513 ; wait for key stroke before exit 514 terminate: 515 0000046B E82C000000 call set_text_mode 516 sys _exit 516 <1> 516 <1> 516 <1> 516 <1> 516 <1> %if %0 >= 2 516 <1> mov ebx, %2 516 <1> %if %0 >= 3 516 <1> mov ecx, %3 516 <1> %if %0 = 4 516 <1> mov edx, %4 516 <1> %endif 516 <1> %endif 516 <1> %endif 516 00000470 B801000000 <1> mov eax, %1 516 <1> 516 00000475 CD40 <1> int 40h 517 halt: 518 00000477 EBFE jmp short halt 519 520 waitforkey: 521 00000479 B401 mov ah, 1 522 0000047B CD32 int 32h 523 0000047D 740B jz short getkey 524 0000047F FF05[94050000] inc dword [counter] 525 00000485 90 nop 526 00000486 90 nop 527 00000487 90 nop 528 00000488 EBEF jmp short waitforkey 529 getkey: 530 0000048A 30E4 xor ah, ah 531 0000048C CD32 int 32h 532 533 0000048E 663D032E cmp ax, 2E03h 534 00000492 7405 je short _terminate 535 00000494 3C1B cmp al, 1Bh ; ESC key 536 00000496 7401 je short _terminate 537 00000498 C3 retn 538 _terminate: 539 00000499 58 pop eax ; return address 540 0000049A EBCF jmp short terminate 541 542 set_text_mode: 543 0000049C 30E4 xor ah, ah 544 0000049E B003 mov al, 3 545 ;int 10h ; al = 03h text mode, int 10 video 546 000004A0 CD31 int 31h ; TRDOS 386 - Video interrupt 547 000004A2 C3 retn 548 549 print_msg: 550 000004A3 B40E mov ah, 0Eh 551 000004A5 BB07000000 mov ebx, 7 552 ;mov bl, 7 ; char attribute & color 553 p_next_chr: 554 000004AA AC lodsb 555 000004AB 08C0 or al, al 556 000004AD 7404 jz short p_retn ; retn 557 000004AF CD31 int 31h 558 000004B1 EBF7 jmp short p_next_chr 559 p_retn: 560 000004B3 C3 retn 561 562 print_text: 563 ; ebp = text address 564 ; esi = row/column position (si = column) 565 p_d_x: 566 ;mov dh, 0 ; 8x16 system font 567 000004B4 B606 mov dh, 6 ; 32*64 scaled font (base: 8*16 system font) 568 p_d_x_n: 569 000004B6 8A5500 mov dl, [ebp] 570 000004B9 20D2 and dl, dl 571 000004BB 7419 jz short p_d_x_ok 572 sys _video, 020Fh, [tcolor] 572 <1> 572 <1> 572 <1> 572 <1> 572 <1> %if %0 >= 2 572 000004BD BB0F020000 <1> mov ebx, %2 572 <1> %if %0 >= 3 572 000004C2 8B0D[98050000] <1> mov ecx, %3 572 <1> %if %0 = 4 572 <1> mov edx, %4 572 <1> %endif 572 <1> %endif 572 <1> %endif 572 000004C8 B81F000000 <1> mov eax, %1 572 <1> 572 000004CD CD40 <1> int 40h 573 000004CF 45 inc ebp 574 000004D0 6683C624 add si, 36 ; next char pos 575 000004D4 EBE0 jmp short p_d_x_n 576 p_d_x_ok: 577 000004D6 C3 retn 578 579 program_msg: 580 000004D7 5452444F5320333836- db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Block Operations" 580 000004E0 2076322E302E33202D- 580 000004E9 202827737973766964- 580 000004F2 656F27292054657374- 580 000004FB 2050726F6772616D20- 580 00000504 2D20426C6F636B204F- 580 0000050D 7065726174696F6E73 581 00000516 0D0A db 0Dh, 0Ah 582 00000518 6279204572646F6761- db "by Erdogan Tan - 02/03/2021" 582 00000521 6E2054616E202D2030- 582 0000052A 322F30332F32303231 583 ;db 0Dh, 0Ah, 0 584 00000533 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 585 00000537 507265737320616E79- db "Press any key to continue .." 585 00000540 206B657920746F2063- 585 00000549 6F6E74696E7565202E- 585 00000552 2E 586 00000553 0D0A db 0Dh, 0Ah 587 00000555 285072657373204553- db "(Press ESC to exit) .." 587 0000055E 4320746F2065786974- 587 00000567 29202E2E 588 0000056B 0D0A db 0Dh, 0Ah 589 0000056D 0D0A db 0Dh, 0Ah 590 591 nextline: 592 0000056F 0D0A00 db 0Dh, 0Ah, 0 593 594 txt_blue: 595 00000572 424C554500 db "BLUE", 0 596 txt_red: 597 00000577 52454400 db "RED", 0 598 txt_green: 599 0000057B 475245454E00 db "GREEN", 0 600 txt_yellow: 601 00000581 59454C4C4F5700 db "YELLOW", 0 602 txt_white: 603 00000588 574849544500 db "WHITE", 0 604 txt_black: 605 0000058E 424C41434B00 db "BLACK", 0 606 607 bss: 608 609 ABSOLUTE bss 610 611 alignb 4 612 613 counter: 614 00000594 resd 1 615 616 bss_start: 617 00000598 tcolor: resd 1 618 619 fullscreen_buffer: 620 0000059C resb 307200*2 621 bss_end: