1 ; **************************************************************************** 2 ; blocks11.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 28/02/2021 6 ; 7 ; **************************************************************************** 8 ; nasm blocks11.s -l blocks11.txt -o BLOCKS11.PRG -Z error.txt 9 ; (modified from 'blocks10.s', 28/02/2021) 10 11 ; 'sysvideo' bh = 2, block copy and modification test (VESA VBE mode 112h) 12 ; (640*480, 16 bit high colors version) 13 14 15 ; 14/07/2020 16 ; 31/12/2017 17 ; TRDOS 386 (v2.0) system calls 18 _ver equ 0 19 _exit equ 1 20 _fork equ 2 21 _read equ 3 22 _write equ 4 23 _open equ 5 24 _close equ 6 25 _wait equ 7 26 _create equ 8 27 _rename equ 9 28 _delete equ 10 29 _exec equ 11 30 _chdir equ 12 31 _time equ 13 32 _mkdir equ 14 33 _chmod equ 15 34 _rmdir equ 16 35 _break equ 17 36 _drive equ 18 37 _seek equ 19 38 _tell equ 20 39 _memory equ 21 40 _prompt equ 22 41 _path equ 23 42 _env equ 24 43 _stime equ 25 44 _quit equ 26 45 _intr equ 27 46 _dir equ 28 47 _emt equ 29 48 _ldrvt equ 30 49 _video equ 31 50 _audio equ 32 51 _timer equ 33 52 _sleep equ 34 53 _msg equ 35 54 _geterr equ 36 55 _fpstat equ 37 56 _pri equ 38 57 _rele equ 39 58 _fff equ 40 59 _fnf equ 41 60 _alloc equ 42 61 _dalloc equ 43 62 _calbac equ 44 63 _dma equ 45 64 65 %macro sys 1-4 66 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 67 ; 03/09/2015 68 ; 13/04/2015 69 ; Retro UNIX 386 v1 system call. 70 %if %0 >= 2 71 mov ebx, %2 72 %if %0 >= 3 73 mov ecx, %3 74 %if %0 = 4 75 mov edx, %4 76 %endif 77 %endif 78 %endif 79 mov eax, %1 80 ;int 30h 81 int 40h ; TRDOS 386 (TRDOS v2.0) 82 %endmacro 83 84 ; Retro UNIX 386 v1 system call format: 85 ; sys systemcall (eax) , , 86 87 [BITS 32] ; We need 32-bit intructions for protected mode 88 89 [ORG 0] 90 91 START_CODE: 92 ; clear bss 93 00000000 BF[44060000] mov edi, bss_start 94 00000005 B901580200 mov ecx, (bss_end - bss_start)/4 95 ;xor eax, eax 96 0000000A F3AB rep stosd 97 98 ; program message 99 0000000C BE[81050000] mov esi, program_msg 100 00000011 E837050000 call print_msg 101 102 00000016 30E4 xor ah, ah 103 ;int 16h ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY 104 ; Return: AH = scan code, AL = character 105 00000018 CD32 int 32h ; TRDOS 386 Keyboard interrupt 106 107 ; Set Video Mode to 111h ; 640x480, 16 bit high colors 108 ; ; (RGB: 5:6:5) 109 sys _video, 08FFh, 111h 109 <1> 109 <1> 109 <1> 109 <1> 109 <1> %if %0 >= 2 109 0000001A BBFF080000 <1> mov ebx, %2 109 <1> %if %0 >= 3 109 0000001F B911010000 <1> mov ecx, %3 109 <1> %if %0 = 4 109 <1> mov edx, %4 109 <1> %endif 109 <1> %endif 109 <1> %endif 109 00000024 B81F000000 <1> mov eax, %1 109 <1> 109 00000029 CD40 <1> int 40h 110 0000002B 09C0 or eax, eax 111 ;jz short terminate 112 ;mov [LFB_ADDR], edx ; pointer to LFB info table/structure 113 0000002D 7505 jnz short set_vesa_mode_112h_ok 114 0000002F E9E1040000 jmp terminate 115 116 set_vesa_mode_112h_ok: 117 ; Set initial block colors 118 00000034 B9004B0000 mov ecx, 120*160 119 00000039 B8FFFF0000 mov eax, 0FFFFh ; white 120 0000003E BF[48060000] mov edi, whiteblock 121 00000043 F366AB rep stosw 122 123 00000046 66B9004B mov cx, 120*160 124 0000004A 66B81F00 mov ax, 001Fh ; blue ; 00000000 00011111b 125 0000004E BF[489C0000] mov edi, blueblock 126 00000053 F366AB rep stosw 127 128 00000056 66B9004B mov cx, 120*160 129 0000005A 66B800F8 mov ax, 0F800h ; red ; 11111000 00000000b 130 0000005E BF[48320100] mov edi, redblock 131 00000063 F366AB rep stosw 132 133 00000066 66B9004B mov cx, 120*160 134 0000006A 66B8E007 mov ax, 07E0h ; green ; 00000111 11100000b 135 0000006E BF[48C80100] mov edi, greenblock 136 00000073 F366AB rep stosw 137 138 00000076 66B9004B mov cx, 120*160 139 0000007A 66B8E0FF mov ax, 0FFE0h ; yellow ; 11111111 11100000b 140 0000007E BF[485E0200] mov edi, yellowblock 141 00000083 F366AB rep stosw 142 143 ; copy white block to screen 144 ; at row 70, column 120 145 ; (block size: 120(w)*160(h) 146 147 00000086 B978004600 mov ecx, (70*65536)+120 148 0000008B BA7800A000 mov edx, (160*65536)+120 149 00000090 BE[48060000] mov esi, whiteblock 150 00000095 BB10020000 mov ebx, 0210h ; non masked window copy 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 0000009A B81F000000 <1> mov eax, %1 151 <1> 151 0000009F CD40 <1> int 40h 152 153 ; copy blue block to screen 154 ; at row 160, column 260 155 ; (block size: 120(w)*160(h) 156 157 000000A1 B90401A000 mov ecx, (160*65536)+260 158 000000A6 BA7800A000 mov edx, (160*65536)+120 159 000000AB BE[489C0000] mov esi, blueblock 160 000000B0 BB10020000 mov ebx, 0210h ; non masked window copy 161 sys _video 161 <1> 161 <1> 161 <1> 161 <1> 161 <1> %if %0 >= 2 161 <1> mov ebx, %2 161 <1> %if %0 >= 3 161 <1> mov ecx, %3 161 <1> %if %0 = 4 161 <1> mov edx, %4 161 <1> %endif 161 <1> %endif 161 <1> %endif 161 000000B5 B81F000000 <1> mov eax, %1 161 <1> 161 000000BA CD40 <1> int 40h 162 163 ; copy red block to screen 164 ; at row 250, column 120 165 ; (block size: 120(w)*160(h) 166 167 000000BC B97800FA00 mov ecx, (250*65536)+120 168 000000C1 BA7800A000 mov edx, (160*65536)+120 169 000000C6 BE[48320100] mov esi, redblock 170 000000CB BB10020000 mov ebx, 0210h ; non masked window copy 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 000000D0 B81F000000 <1> mov eax, %1 171 <1> 171 000000D5 CD40 <1> int 40h 172 173 ; copy green block to screen 174 ; at row 70, column 400 175 ; (block size: 120(w)*160(h) 176 177 000000D7 B990014600 mov ecx, (70*65536)+400 178 000000DC BA7800A000 mov edx, (160*65536)+120 179 000000E1 BE[48C80100] mov esi, greenblock 180 000000E6 BB10020000 mov ebx, 0210h ; non masked window copy 181 sys _video 181 <1> 181 <1> 181 <1> 181 <1> 181 <1> %if %0 >= 2 181 <1> mov ebx, %2 181 <1> %if %0 >= 3 181 <1> mov ecx, %3 181 <1> %if %0 = 4 181 <1> mov edx, %4 181 <1> %endif 181 <1> %endif 181 <1> %endif 181 000000EB B81F000000 <1> mov eax, %1 181 <1> 181 000000F0 CD40 <1> int 40h 182 183 ; copy yellow block to screen 184 ; at row 250, column 400 185 ; (block size: 120(w)*160(h) 186 187 000000F2 B99001FA00 mov ecx, (250*65536)+400 188 000000F7 BA7800A000 mov edx, (160*65536)+120 189 000000FC BE[485E0200] mov esi, yellowblock 190 00000101 BB10020000 mov ebx, 0210h ; non masked window copy 191 sys _video 191 <1> 191 <1> 191 <1> 191 <1> 191 <1> %if %0 >= 2 191 <1> mov ebx, %2 191 <1> %if %0 >= 3 191 <1> mov ecx, %3 191 <1> %if %0 = 4 191 <1> mov edx, %4 191 <1> %endif 191 <1> %endif 191 <1> %endif 191 00000106 B81F000000 <1> mov eax, %1 191 <1> 191 0000010B CD40 <1> int 40h 192 193 0000010D E811040000 call waitforkey 194 195 ; continue by using 196 ; window color modification sub functions 197 198 ; apply SUB to window's pixel colors 199 00000112 B960804000 mov ecx, 408060h 200 00000117 BA78004600 mov edx, (70*65536)+120 201 0000011C BE7800A000 mov esi, (160*65536)+120 202 00000121 BB13020000 mov ebx, 0213h ; non masked window SUB op 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 00000126 B81F000000 <1> mov eax, %1 203 <1> 203 0000012B CD40 <1> int 40h 204 205 0000012D E8F1030000 call waitforkey 206 207 ; apply ADD to pixel colors of 208 ; the window/block on row 70, column 120 with 209 ; block size 120(w)*160(h). 210 ;mov ecx, 408060h 211 ;mov edx, (70*65536)+120 212 ;mov esi, (160*65536)+120 213 ;mov ebx, 0212h ; non masked window ADD op 214 00000132 B312 mov bl, 12h 215 sys _video 215 <1> 215 <1> 215 <1> 215 <1> 215 <1> %if %0 >= 2 215 <1> mov ebx, %2 215 <1> %if %0 >= 3 215 <1> mov ecx, %3 215 <1> %if %0 = 4 215 <1> mov edx, %4 215 <1> %endif 215 <1> %endif 215 <1> %endif 215 00000134 B81F000000 <1> mov eax, %1 215 <1> 215 00000139 CD40 <1> int 40h 216 217 0000013B E8E3030000 call waitforkey 218 219 ; apply ADD to pixel colors of 220 ; the window/block on row 250, column 120 with 221 ; block size 120(w)*160(h). 222 00000140 B940000000 mov ecx, 40h 223 00000145 BA7800FA00 mov edx, (250*65536)+120 224 ;mov esi, (160*65536)+120 225 ;mov ebx, 0212h ; non masked window ADD op 226 0000014A B312 mov bl, 12h 227 sys _video 227 <1> 227 <1> 227 <1> 227 <1> 227 <1> %if %0 >= 2 227 <1> mov ebx, %2 227 <1> %if %0 >= 3 227 <1> mov ecx, %3 227 <1> %if %0 = 4 227 <1> mov edx, %4 227 <1> %endif 227 <1> %endif 227 <1> %endif 227 0000014C B81F000000 <1> mov eax, %1 227 <1> 227 00000151 CD40 <1> int 40h 228 229 00000153 E8CB030000 call waitforkey 230 231 ; apply SUB to window's pixel colors 232 ;mov ecx, 40h 233 ;mov edx, (250*65536)+120 234 ;mov esi, (160*65536)+120 235 ;mov ebx, 0213h ; non masked window SUB op 236 00000158 B313 mov bl, 13h 237 sys _video 237 <1> 237 <1> 237 <1> 237 <1> 237 <1> %if %0 >= 2 237 <1> mov ebx, %2 237 <1> %if %0 >= 3 237 <1> mov ecx, %3 237 <1> %if %0 = 4 237 <1> mov edx, %4 237 <1> %endif 237 <1> %endif 237 <1> %endif 237 0000015A B81F000000 <1> mov eax, %1 237 <1> 237 0000015F CD40 <1> int 40h 238 239 00000161 E8BD030000 call waitforkey 240 241 ; or, and, xor 242 243 ; apply AND to window's pixel colors 244 00000166 B97F7F0700 mov ecx, 077F7Fh 245 0000016B BA78004600 mov edx, (70*65536)+120 246 ;mov esi, (160*65536)+120 247 ;mov ebx, 0215h ; non masked window AND op 248 00000170 B315 mov bl, 15h 249 sys _video 249 <1> 249 <1> 249 <1> 249 <1> 249 <1> %if %0 >= 2 249 <1> mov ebx, %2 249 <1> %if %0 >= 3 249 <1> mov ecx, %3 249 <1> %if %0 = 4 249 <1> mov edx, %4 249 <1> %endif 249 <1> %endif 249 <1> %endif 249 00000172 B81F000000 <1> mov eax, %1 249 <1> 249 00000177 CD40 <1> int 40h 250 251 00000179 E8A5030000 call waitforkey 252 253 ; apply AND to pixel colors of 254 ; the window/block on row 160, column 260 with 255 ; block size 120(w)*160(h). 256 ;mov ecx, 077F7Fh 257 0000017E BA0401A000 mov edx, (160*65536)+260 258 ;mov esi, (160*65536)+120 259 ;mov ebx, 0215h ; non masked window AND op 260 sys _video 260 <1> 260 <1> 260 <1> 260 <1> 260 <1> %if %0 >= 2 260 <1> mov ebx, %2 260 <1> %if %0 >= 3 260 <1> mov ecx, %3 260 <1> %if %0 = 4 260 <1> mov edx, %4 260 <1> %endif 260 <1> %endif 260 <1> %endif 260 00000183 B81F000000 <1> mov eax, %1 260 <1> 260 00000188 CD40 <1> int 40h 261 262 0000018A E894030000 call waitforkey 263 264 ; apply OR to pixel colors of 265 ; the window/block on row 70, column 400 with 266 ; block size 120(w)*160(h). 267 0000018F B950301000 mov ecx, 103050h 268 00000194 BA90014600 mov edx, (70*65536)+400 269 ;mov esi, (160*65536)+120 270 ;mov ebx, 0214h ; non masked window OR op 271 00000199 B314 mov bl, 14h 272 sys _video 272 <1> 272 <1> 272 <1> 272 <1> 272 <1> %if %0 >= 2 272 <1> mov ebx, %2 272 <1> %if %0 >= 3 272 <1> mov ecx, %3 272 <1> %if %0 = 4 272 <1> mov edx, %4 272 <1> %endif 272 <1> %endif 272 <1> %endif 272 0000019B B81F000000 <1> mov eax, %1 272 <1> 272 000001A0 CD40 <1> int 40h 273 274 000001A2 E87C030000 call waitforkey 275 276 ; apply OR to pixel colors of 277 ; the window/block on row 250, column 400 with 278 ; block size 120(w)*160(h). 279 ;mov ecx, 103050h 280 000001A7 BA9001FA00 mov edx, (250*65536)+400 281 ;mov esi, (160*65536)+120 282 ;mov ebx, 0214h ; non masked window OR op 283 sys _video 283 <1> 283 <1> 283 <1> 283 <1> 283 <1> %if %0 >= 2 283 <1> mov ebx, %2 283 <1> %if %0 >= 3 283 <1> mov ecx, %3 283 <1> %if %0 = 4 283 <1> mov edx, %4 283 <1> %endif 283 <1> %endif 283 <1> %endif 283 000001AC B81F000000 <1> mov eax, %1 283 <1> 283 000001B1 CD40 <1> int 40h 284 285 000001B3 E86B030000 call waitforkey 286 287 ; apply XOR to pixel colors of 288 ; the window/block on row 250, column 120 with 289 ; block size 120(w)*160(h). 290 000001B8 B94F7F3F00 mov ecx, 3F7F4Fh 291 000001BD BA7800FA00 mov edx, (250*65536)+120 292 ;mov esi, (160*65536)+120 293 ;mov ebx, 0216h ; non masked window XOR op 294 000001C2 B316 mov bl, 16h 295 sys _video 295 <1> 295 <1> 295 <1> 295 <1> 295 <1> %if %0 >= 2 295 <1> mov ebx, %2 295 <1> %if %0 >= 3 295 <1> mov ecx, %3 295 <1> %if %0 = 4 295 <1> mov edx, %4 295 <1> %endif 295 <1> %endif 295 <1> %endif 295 000001C4 B81F000000 <1> mov eax, %1 295 <1> 295 000001C9 CD40 <1> int 40h 296 297 000001CB E853030000 call waitforkey 298 299 ; apply XOR to pixel colors of 300 ; the window/block on row 70, column 400 with 301 ; block size 120(w)*160(h). 302 ;mov ecx, 3F7F4Fh 303 000001D0 BA90014600 mov edx, (70*65536)+400 304 ;mov esi, (160*65536)+120 305 ;mov ebx, 0216h ; non masked window XOR op 306 sys _video 306 <1> 306 <1> 306 <1> 306 <1> 306 <1> %if %0 >= 2 306 <1> mov ebx, %2 306 <1> %if %0 >= 3 306 <1> mov ecx, %3 306 <1> %if %0 = 4 306 <1> mov edx, %4 306 <1> %endif 306 <1> %endif 306 <1> %endif 306 000001D5 B81F000000 <1> mov eax, %1 306 <1> 306 000001DA CD40 <1> int 40h 307 308 000001DC E842030000 call waitforkey 309 310 ; Mix colors 311 312 ; MIX pixel colors of 313 ; the window/block on row 70, column 120 with 314 ; block size 120(w)*160(h). 315 000001E1 B940201000 mov ecx, 102040h 316 000001E6 BA78004600 mov edx, (70*65536)+120 317 ;mov esi, (160*65536)+120 318 ;mov ebx, 021Bh ; non masked window MIX op 319 000001EB B31B mov bl, 1Bh 320 sys _video 320 <1> 320 <1> 320 <1> 320 <1> 320 <1> %if %0 >= 2 320 <1> mov ebx, %2 320 <1> %if %0 >= 3 320 <1> mov ecx, %3 320 <1> %if %0 = 4 320 <1> mov edx, %4 320 <1> %endif 320 <1> %endif 320 <1> %endif 320 000001ED B81F000000 <1> mov eax, %1 320 <1> 320 000001F2 CD40 <1> int 40h 321 322 000001F4 E82A030000 call waitforkey 323 324 ; MIX pixel colors of 325 ; the window/block on row 160, column 260 with 326 ; block size 120(w)*160(h). 327 ;mov ecx, 102040h 328 000001F9 BA0401A000 mov edx, (160*65536)+260 329 ;mov esi, (160*65536)+120 330 ;mov ebx, 021Bh ; non masked window MIX op 331 sys _video 331 <1> 331 <1> 331 <1> 331 <1> 331 <1> %if %0 >= 2 331 <1> mov ebx, %2 331 <1> %if %0 >= 3 331 <1> mov ecx, %3 331 <1> %if %0 = 4 331 <1> mov edx, %4 331 <1> %endif 331 <1> %endif 331 <1> %endif 331 000001FE B81F000000 <1> mov eax, %1 331 <1> 331 00000203 CD40 <1> int 40h 332 333 00000205 E819030000 call waitforkey 334 335 ; MIX pixel colors of 336 ; the window/block on row 250, column 400 with 337 ; block size 120(w)*160(h). 338 ;mov ecx, 102040h 339 0000020A BA9001FA00 mov edx, (250*65536)+400 340 ;mov esi, (160*65536)+120 341 ;mov ebx, 021Bh ; non masked window MIX op 342 sys _video 342 <1> 342 <1> 342 <1> 342 <1> 342 <1> %if %0 >= 2 342 <1> mov ebx, %2 342 <1> %if %0 >= 3 342 <1> mov ecx, %3 342 <1> %if %0 = 4 342 <1> mov edx, %4 342 <1> %endif 342 <1> %endif 342 <1> %endif 342 0000020F B81F000000 <1> mov eax, %1 342 <1> 342 00000214 CD40 <1> int 40h 343 344 00000216 E808030000 call waitforkey 345 346 ; CHANGE color (full screen) 347 0000021B 31C9 xor ecx, ecx ; 0 ; black 348 0000021D BB01020000 mov ebx, 0201h ; Full screen, new color 349 sys _video 349 <1> 349 <1> 349 <1> 349 <1> 349 <1> %if %0 >= 2 349 <1> mov ebx, %2 349 <1> %if %0 >= 3 349 <1> mov ecx, %3 349 <1> %if %0 = 4 349 <1> mov edx, %4 349 <1> %endif 349 <1> %endif 349 <1> %endif 349 00000222 B81F000000 <1> mov eax, %1 349 <1> 349 00000227 CD40 <1> int 40h 350 351 00000229 B900000100 mov ecx, 65536 352 blackloop: 353 0000022E 09C9 or ecx, ecx 354 00000230 90 nop 355 00000231 90 nop 356 00000232 90 nop 357 00000233 E2F9 loop blackloop 358 359 00000235 B9FFFF0000 mov ecx, 0FFFFh ; white 360 0000023A BB01020000 mov ebx, 0201h ; Full screen, new color 361 sys _video 361 <1> 361 <1> 361 <1> 361 <1> 361 <1> %if %0 >= 2 361 <1> mov ebx, %2 361 <1> %if %0 >= 3 361 <1> mov ecx, %3 361 <1> %if %0 = 4 361 <1> mov edx, %4 361 <1> %endif 361 <1> %endif 361 <1> %endif 361 0000023F B81F000000 <1> mov eax, %1 361 <1> 361 00000244 CD40 <1> int 40h 362 363 ;mov dword [tcolor], 0 364 00000246 BEF000D000 mov esi, 208*65536+240 365 0000024B BD[32060000] mov ebp, txt_white 366 00000250 E809030000 call print_text 367 368 00000255 E8C9020000 call waitforkey 369 370 ; full screen sub 371 0000025A 66B900F8 mov cx, 0F800h 372 0000025E B303 mov bl, 03h 373 sys _video 373 <1> 373 <1> 373 <1> 373 <1> 373 <1> %if %0 >= 2 373 <1> mov ebx, %2 373 <1> %if %0 >= 3 373 <1> mov ecx, %3 373 <1> %if %0 = 4 373 <1> mov edx, %4 373 <1> %endif 373 <1> %endif 373 <1> %endif 373 00000260 B81F000000 <1> mov eax, %1 373 <1> 373 00000265 CD40 <1> int 40h 374 375 00000267 E8B7020000 call waitforkey 376 377 ; full screen add 378 ;mov cx, 0F800h 379 0000026C B302 mov bl, 02h 380 sys _video 380 <1> 380 <1> 380 <1> 380 <1> 380 <1> %if %0 >= 2 380 <1> mov ebx, %2 380 <1> %if %0 >= 3 380 <1> mov ecx, %3 380 <1> %if %0 = 4 380 <1> mov edx, %4 380 <1> %endif 380 <1> %endif 380 <1> %endif 380 0000026E B81F000000 <1> mov eax, %1 380 <1> 380 00000273 CD40 <1> int 40h 381 382 00000275 E8A9020000 call waitforkey 383 384 0000027A 66B91F00 mov cx, 001Fh ; blue 385 0000027E BB01020000 mov ebx, 0201h ; Full screen, new color 386 sys _video 386 <1> 386 <1> 386 <1> 386 <1> 386 <1> %if %0 >= 2 386 <1> mov ebx, %2 386 <1> %if %0 >= 3 386 <1> mov ecx, %3 386 <1> %if %0 = 4 386 <1> mov edx, %4 386 <1> %endif 386 <1> %endif 386 <1> %endif 386 00000283 B81F000000 <1> mov eax, %1 386 <1> 386 00000288 CD40 <1> int 40h 387 388 0000028A C705[44060000]FFFF- mov dword [tcolor], 0FFFFFFh 388 00000292 FF00 389 00000294 BE0201D000 mov esi, 208*65536+258 390 00000299 BD[1C060000] mov ebp, txt_blue 391 0000029E E8BB020000 call print_text 392 393 000002A3 E87B020000 call waitforkey 394 395 ; full screen add 396 000002A8 66B900F8 mov cx, 0F800h 397 000002AC B302 mov bl, 02h 398 sys _video 398 <1> 398 <1> 398 <1> 398 <1> 398 <1> %if %0 >= 2 398 <1> mov ebx, %2 398 <1> %if %0 >= 3 398 <1> mov ecx, %3 398 <1> %if %0 = 4 398 <1> mov edx, %4 398 <1> %endif 398 <1> %endif 398 <1> %endif 398 000002AE B81F000000 <1> mov eax, %1 398 <1> 398 000002B3 CD40 <1> int 40h 399 400 000002B5 E869020000 call waitforkey 401 402 ; full screen sub 403 ;mov cx, 0F800h 404 000002BA B303 mov bl, 03h 405 sys _video 405 <1> 405 <1> 405 <1> 405 <1> 405 <1> %if %0 >= 2 405 <1> mov ebx, %2 405 <1> %if %0 >= 3 405 <1> mov ecx, %3 405 <1> %if %0 = 4 405 <1> mov edx, %4 405 <1> %endif 405 <1> %endif 405 <1> %endif 405 000002BC B81F000000 <1> mov eax, %1 405 <1> 405 000002C1 CD40 <1> int 40h 406 407 000002C3 E85B020000 call waitforkey 408 409 ;mov cx, 0F800h ; red 410 000002C8 BB01020000 mov ebx, 0201h ; Full screen, new color 411 sys _video 411 <1> 411 <1> 411 <1> 411 <1> 411 <1> %if %0 >= 2 411 <1> mov ebx, %2 411 <1> %if %0 >= 3 411 <1> mov ecx, %3 411 <1> %if %0 = 4 411 <1> mov edx, %4 411 <1> %endif 411 <1> %endif 411 <1> %endif 411 000002CD B81F000000 <1> mov eax, %1 411 <1> 411 000002D2 CD40 <1> int 40h 412 413 ;mov dword [tcolor], 0FFFFFFh 414 000002D4 BE1401D000 mov esi, 208*65536+276 415 000002D9 BD[21060000] mov ebp, txt_red 416 000002DE E87B020000 call print_text 417 418 000002E3 E83B020000 call waitforkey 419 420 ; full screen add 421 000002E8 66B9FF00 mov cx, 00FFh 422 000002EC B302 mov bl, 02h 423 sys _video 423 <1> 423 <1> 423 <1> 423 <1> 423 <1> %if %0 >= 2 423 <1> mov ebx, %2 423 <1> %if %0 >= 3 423 <1> mov ecx, %3 423 <1> %if %0 = 4 423 <1> mov edx, %4 423 <1> %endif 423 <1> %endif 423 <1> %endif 423 000002EE B81F000000 <1> mov eax, %1 423 <1> 423 000002F3 CD40 <1> int 40h 424 425 000002F5 E829020000 call waitforkey 426 427 ; full screen sub 428 ;mov cx, 00FFh 429 000002FA B303 mov bl, 03h 430 sys _video 430 <1> 430 <1> 430 <1> 430 <1> 430 <1> %if %0 >= 2 430 <1> mov ebx, %2 430 <1> %if %0 >= 3 430 <1> mov ecx, %3 430 <1> %if %0 = 4 430 <1> mov edx, %4 430 <1> %endif 430 <1> %endif 430 <1> %endif 430 000002FC B81F000000 <1> mov eax, %1 430 <1> 430 00000301 CD40 <1> int 40h 431 432 00000303 E81B020000 call waitforkey 433 434 ; full screen OR 435 00000308 66B9E007 mov cx, 07E0h 436 0000030C B304 mov bl, 04h 437 sys _video 437 <1> 437 <1> 437 <1> 437 <1> 437 <1> %if %0 >= 2 437 <1> mov ebx, %2 437 <1> %if %0 >= 3 437 <1> mov ecx, %3 437 <1> %if %0 = 4 437 <1> mov edx, %4 437 <1> %endif 437 <1> %endif 437 <1> %endif 437 0000030E B81F000000 <1> mov eax, %1 437 <1> 437 00000313 CD40 <1> int 40h 438 439 00000315 E809020000 call waitforkey 440 441 ; full screen AND 442 0000031A 66B9E017 mov cx, 17E0h 443 0000031E B51F mov ch, 1Fh 444 00000320 B305 mov bl, 05h 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 00000322 B81F000000 <1> mov eax, %1 445 <1> 445 00000327 CD40 <1> int 40h 446 447 00000329 E8F5010000 call waitforkey 448 449 ; full screen XOR 450 0000032E 66B97F3F mov cx, 3F7Fh 451 00000332 B306 mov bl, 06h 452 sys _video 452 <1> 452 <1> 452 <1> 452 <1> 452 <1> %if %0 >= 2 452 <1> mov ebx, %2 452 <1> %if %0 >= 3 452 <1> mov ecx, %3 452 <1> %if %0 = 4 452 <1> mov edx, %4 452 <1> %endif 452 <1> %endif 452 <1> %endif 452 00000334 B81F000000 <1> mov eax, %1 452 <1> 452 00000339 CD40 <1> int 40h 453 454 0000033B E8E3010000 call waitforkey 455 456 00000340 66B9E007 mov cx, 07E0h ; green 457 00000344 BB01020000 mov ebx, 0201h ; Full screen, new color 458 sys _video 458 <1> 458 <1> 458 <1> 458 <1> 458 <1> %if %0 >= 2 458 <1> mov ebx, %2 458 <1> %if %0 >= 3 458 <1> mov ecx, %3 458 <1> %if %0 = 4 458 <1> mov edx, %4 458 <1> %endif 458 <1> %endif 458 <1> %endif 458 00000349 B81F000000 <1> mov eax, %1 458 <1> 458 0000034E CD40 <1> int 40h 459 460 00000350 C705[44060000]0000- mov dword [tcolor], 0 460 00000358 0000 461 0000035A BEF000D000 mov esi, 208*65536+240 462 0000035F BD[25060000] mov ebp, txt_green 463 00000364 E8F5010000 call print_text 464 465 00000369 E8B5010000 call waitforkey 466 467 ; full screen MIX 468 0000036E 66B90BE1 mov cx, 0E10Bh 469 00000372 B30B mov bl, 0Bh 470 sys _video 470 <1> 470 <1> 470 <1> 470 <1> 470 <1> %if %0 >= 2 470 <1> mov ebx, %2 470 <1> %if %0 >= 3 470 <1> mov ecx, %3 470 <1> %if %0 = 4 470 <1> mov edx, %4 470 <1> %endif 470 <1> %endif 470 <1> %endif 470 00000374 B81F000000 <1> mov eax, %1 470 <1> 470 00000379 CD40 <1> int 40h 471 472 0000037B E8A3010000 call waitforkey 473 474 00000380 66B9E0FF mov cx, 0FFE0h ; yellow 475 00000384 BB01020000 mov ebx, 0201h ; Full screen, new color 476 sys _video 476 <1> 476 <1> 476 <1> 476 <1> 476 <1> %if %0 >= 2 476 <1> mov ebx, %2 476 <1> %if %0 >= 3 476 <1> mov ecx, %3 476 <1> %if %0 = 4 476 <1> mov edx, %4 476 <1> %endif 476 <1> %endif 476 <1> %endif 476 00000389 B81F000000 <1> mov eax, %1 476 <1> 476 0000038E CD40 <1> int 40h 477 478 00000390 C705[44060000]FFFF- mov dword [tcolor], 0FFFFFFh 478 00000398 FF00 479 0000039A BEDE00D000 mov esi, 208*65536+222 480 0000039F BD[2B060000] mov ebp, txt_yellow 481 000003A4 E8B5010000 call print_text 482 483 000003A9 E875010000 call waitforkey 484 485 ; full screen NOT 486 000003AE B307 mov bl, 07h 487 sys _video 487 <1> 487 <1> 487 <1> 487 <1> 487 <1> %if %0 >= 2 487 <1> mov ebx, %2 487 <1> %if %0 >= 3 487 <1> mov ecx, %3 487 <1> %if %0 = 4 487 <1> mov edx, %4 487 <1> %endif 487 <1> %endif 487 <1> %endif 487 000003B0 B81F000000 <1> mov eax, %1 487 <1> 487 000003B5 CD40 <1> int 40h 488 489 000003B7 E867010000 call waitforkey 490 491 ; full screen NOT 492 ;mov bl, 07h 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 000003BC B81F000000 <1> mov eax, %1 493 <1> 493 000003C1 CD40 <1> int 40h 494 495 000003C3 E85B010000 call waitforkey 496 497 ; full screen MIX 498 000003C8 66B91F70 mov cx, 701Fh 499 000003CC B30B mov bl, 0Bh 500 sys _video 500 <1> 500 <1> 500 <1> 500 <1> 500 <1> %if %0 >= 2 500 <1> mov ebx, %2 500 <1> %if %0 >= 3 500 <1> mov ecx, %3 500 <1> %if %0 = 4 500 <1> mov edx, %4 500 <1> %endif 500 <1> %endif 500 <1> %endif 500 000003CE B81F000000 <1> mov eax, %1 500 <1> 500 000003D3 CD40 <1> int 40h 501 502 000003D5 E849010000 call waitforkey 503 504 ; Full screen copy 505 000003DA BE[48060000] mov esi, fullscreen_buffer 506 000003DF 89F7 mov edi, esi 507 508 ; Black 509 000003E1 B900190000 mov ecx, 640*10 510 000003E6 31C0 xor eax, eax ; black 511 000003E8 F366AB rep stosw 512 513 ; White 514 000003EB B9800C0000 mov ecx, 640*5 515 000003F0 48 dec eax ; white 516 000003F1 F366AB rep stosw 517 518 ; Black 519 000003F4 B9800C0000 mov ecx, 640*5 520 000003F9 40 inc eax ; black 521 000003FA F366AB rep stosw 522 523 ; Blue 524 000003FD B900130100 mov ecx, 640*110 525 00000402 B81F000000 mov eax, 11111b ; blue 526 00000407 F366AB rep stosw 527 528 ; Red 529 0000040A B900130100 mov ecx, 640*110 530 0000040F 66B800F8 mov ax, 1111100000000000b ; Red 531 00000413 F366AB rep stosw 532 533 ; Green 534 00000416 B900130100 mov ecx, 640*110 535 0000041B 66B8E007 mov ax, 11111100000b ; Green 536 0000041F F366AB rep stosw 537 538 ; Yellow 539 00000422 B900130100 mov ecx, 640*110 540 00000427 66B8E0FF mov ax, 1111111111100000b ; Yellow 541 0000042B F366AB rep stosw 542 543 ; Black 544 0000042E B9800C0000 mov ecx, 640*5 545 00000433 31C0 xor eax, eax ; black 546 00000435 F366AB rep stosw 547 548 ; White 549 00000438 B9800C0000 mov ecx, 640*5 550 ;mov eax, 0FFFFFFh 551 0000043D 48 dec eax 552 0000043E F366AB rep stosw 553 554 ; Black 555 00000441 B900190000 mov ecx, 640*10 556 ;xor eax, eax ; black 557 00000446 40 inc eax 558 00000447 F366AB rep stosw 559 560 0000044A BB00020000 mov ebx, 0200h ; Full screen copy 561 sys _video 561 <1> 561 <1> 561 <1> 561 <1> 561 <1> %if %0 >= 2 561 <1> mov ebx, %2 561 <1> %if %0 >= 3 561 <1> mov ecx, %3 561 <1> %if %0 = 4 561 <1> mov edx, %4 561 <1> %endif 561 <1> %endif 561 <1> %endif 561 0000044F B81F000000 <1> mov eax, %1 561 <1> 561 00000454 CD40 <1> int 40h 562 563 00000456 E8C8000000 call waitforkey 564 565 ;mov byte [tcolor], 0FFFFFFh 566 567 0000045B BE2B002B00 mov esi, 43*65536+43 568 00000460 BD[1C060000] mov ebp, txt_blue 569 00000465 E8F4000000 call print_text 570 571 0000046A E8B4000000 call waitforkey 572 573 0000046F BE2B009900 mov esi, 153*65536+43 574 00000474 BD[21060000] mov ebp, txt_red 575 00000479 E8E0000000 call print_text 576 577 0000047E E8A0000000 call waitforkey 578 579 00000483 BE2B000701 mov esi, 263*65536+43 580 00000488 BD[25060000] mov ebp, txt_green 581 0000048D E8CC000000 call print_text 582 583 00000492 E88C000000 call waitforkey 584 585 00000497 BE2B007501 mov esi, 373*65536+43 586 0000049C BD[2B060000] mov ebp, txt_yellow 587 000004A1 E8B8000000 call print_text 588 589 000004A6 E878000000 call waitforkey 590 591 000004AB C705[44060000]0000- mov dword [tcolor], 0 591 000004B3 0000 592 593 000004B5 BE2B000701 mov esi, 263*65536+43 594 000004BA BD[25060000] mov ebp, txt_green 595 000004BF E89A000000 call print_text 596 597 000004C4 E85A000000 call waitforkey 598 599 000004C9 BE2B007501 mov esi, 373*65536+43 600 000004CE BD[2B060000] mov ebp, txt_yellow 601 000004D3 E886000000 call print_text 602 603 000004D8 E846000000 call waitforkey 604 605 ; Replace white color (text) only in blue block 606 ; (blue block starts at row 20) 607 608 000004DD B9FFFF0000 mov ecx, 0FFFFh ; WHITE (current color) 609 000004E2 29D2 sub edx, edx ; 0 ; BLACK (new color) 610 000004E4 BE28001400 mov esi, 20*65536+40 ; column 40, row 20 611 000004E9 BFA0006E00 mov edi, 110*65536+160 ; size: 110*160 612 000004EE BB1C020000 mov ebx, 021Ch ; Replace color in window 613 sys _video 613 <1> 613 <1> 613 <1> 613 <1> 613 <1> %if %0 >= 2 613 <1> mov ebx, %2 613 <1> %if %0 >= 3 613 <1> mov ecx, %3 613 <1> %if %0 = 4 613 <1> mov edx, %4 613 <1> %endif 613 <1> %endif 613 <1> %endif 613 000004F3 B81F000000 <1> mov eax, %1 613 <1> 613 000004F8 CD40 <1> int 40h 614 615 000004FA E824000000 call waitforkey 616 617 ; Replace white color (text) only in red block 618 ; (red block starts at row 130) 619 620 ;mov ecx, 0FFFFh ; WHITE (current color) 621 ;sub edx, edx ; 0 ; BLACK (new color) 622 000004FF BE28008200 mov esi, 130*65536+40 ; column 40, row 130 623 00000504 BF78006E00 mov edi, 110*65536+120 ; size: 110*120 624 ;mov ebx, 021Ch ; Replace color in window 625 sys _video 625 <1> 625 <1> 625 <1> 625 <1> 625 <1> %if %0 >= 2 625 <1> mov ebx, %2 625 <1> %if %0 >= 3 625 <1> mov ecx, %3 625 <1> %if %0 = 4 625 <1> mov edx, %4 625 <1> %endif 625 <1> %endif 625 <1> %endif 625 00000509 B81F000000 <1> mov eax, %1 625 <1> 625 0000050E CD40 <1> int 40h 626 627 00000510 E80E000000 call waitforkey 628 629 terminate: 630 00000515 E82C000000 call set_text_mode 631 sys _exit 631 <1> 631 <1> 631 <1> 631 <1> 631 <1> %if %0 >= 2 631 <1> mov ebx, %2 631 <1> %if %0 >= 3 631 <1> mov ecx, %3 631 <1> %if %0 = 4 631 <1> mov edx, %4 631 <1> %endif 631 <1> %endif 631 <1> %endif 631 0000051A B801000000 <1> mov eax, %1 631 <1> 631 0000051F CD40 <1> int 40h 632 halt: 633 00000521 EBFE jmp short halt 634 635 waitforkey: 636 00000523 B401 mov ah, 1 637 00000525 CD32 int 32h 638 00000527 740B jz short getkey 639 00000529 FF05[40060000] inc dword [counter] 640 0000052F 90 nop 641 00000530 90 nop 642 00000531 90 nop 643 00000532 EBEF jmp short waitforkey 644 getkey: 645 00000534 30E4 xor ah, ah 646 00000536 CD32 int 32h 647 648 00000538 663D032E cmp ax, 2E03h 649 0000053C 7405 je short _terminate 650 0000053E 3C1B cmp al, 1Bh ; ESC key 651 00000540 7401 je short _terminate 652 00000542 C3 retn 653 _terminate: 654 00000543 58 pop eax ; return address 655 00000544 EBCF jmp short terminate 656 657 set_text_mode: 658 00000546 30E4 xor ah, ah 659 00000548 B003 mov al, 3 660 ;int 10h ; al = 03h text mode, int 10 video 661 0000054A CD31 int 31h ; TRDOS 386 - Video interrupt 662 0000054C C3 retn 663 664 print_msg: 665 0000054D B40E mov ah, 0Eh 666 0000054F BB07000000 mov ebx, 7 667 ;mov bl, 7 ; char attribute & color 668 p_next_chr: 669 00000554 AC lodsb 670 00000555 08C0 or al, al 671 00000557 7404 jz short p_retn ; retn 672 00000559 CD31 int 31h 673 0000055B EBF7 jmp short p_next_chr 674 p_retn: 675 0000055D C3 retn 676 677 print_text: 678 ; ebp = text address 679 ; esi = row/column position (si = column) 680 p_d_x: 681 ;mov dh, 0 ; 8x16 system font 682 0000055E B606 mov dh, 6 ; 32*64 scaled font (base: 8*16 system font) 683 p_d_x_n: 684 00000560 8A5500 mov dl, [ebp] 685 00000563 20D2 and dl, dl 686 00000565 7419 jz short p_d_x_ok 687 sys _video, 020Fh, [tcolor] 687 <1> 687 <1> 687 <1> 687 <1> 687 <1> %if %0 >= 2 687 00000567 BB0F020000 <1> mov ebx, %2 687 <1> %if %0 >= 3 687 0000056C 8B0D[44060000] <1> mov ecx, %3 687 <1> %if %0 = 4 687 <1> mov edx, %4 687 <1> %endif 687 <1> %endif 687 <1> %endif 687 00000572 B81F000000 <1> mov eax, %1 687 <1> 687 00000577 CD40 <1> int 40h 688 00000579 45 inc ebp 689 0000057A 6683C624 add si, 36 ; next char pos 690 0000057E EBE0 jmp short p_d_x_n 691 p_d_x_ok: 692 00000580 C3 retn 693 694 program_msg: 695 00000581 5452444F5320333836- db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Block Operations" 695 0000058A 2076322E302E33202D- 695 00000593 202827737973766964- 695 0000059C 656F27292054657374- 695 000005A5 2050726F6772616D20- 695 000005AE 2D20426C6F636B204F- 695 000005B7 7065726174696F6E73 696 000005C0 0D0A db 0Dh, 0Ah 697 000005C2 6279204572646F6761- db "by Erdogan Tan - 28/02/2021" 697 000005CB 6E2054616E202D2032- 697 000005D4 382F30322F32303231 698 ;db 0Dh, 0Ah, 0 699 000005DD 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 700 000005E1 507265737320616E79- db "Press any key to continue .." 700 000005EA 206B657920746F2063- 700 000005F3 6F6E74696E7565202E- 700 000005FC 2E 701 000005FD 0D0A db 0Dh, 0Ah 702 000005FF 285072657373204553- db "(Press ESC to exit) .." 702 00000608 4320746F2065786974- 702 00000611 29202E2E 703 00000615 0D0A db 0Dh, 0Ah 704 00000617 0D0A db 0Dh, 0Ah 705 706 nextline: 707 00000619 0D0A00 db 0Dh, 0Ah, 0 708 709 txt_blue: 710 0000061C 424C554500 db "BLUE", 0 711 txt_red: 712 00000621 52454400 db "RED", 0 713 txt_green: 714 00000625 475245454E00 db "GREEN", 0 715 txt_yellow: 716 0000062B 59454C4C4F5700 db "YELLOW", 0 717 txt_white: 718 00000632 574849544500 db "WHITE", 0 719 txt_black: 720 00000638 424C41434B00 db "BLACK", 0 721 722 bss: 723 724 ABSOLUTE bss 725 726 0000063E alignb 4 727 728 counter: 729 00000640 resd 1 730 731 bss_start: 732 00000644 tcolor: resd 1 733 734 fullscreen_buffer: 735 whiteblock: 736 00000648 resb 120*160*2 737 blueblock: 738 00009C48 resb 120*160*2 739 redblock: 740 00013248 resb 120*160*2 741 greenblock: 742 0001C848 resb 120*160*2 743 yellowblock: 744 00025E48 resb 120*160*2 745 746 0002F448 resb (307200*2)-(96000*2) 747 bss_end: