1 ; **************************************************************************** 2 ; blocks4.s - TRDOS 386 (TRDOS v2.0.3) Test Program - 'sysvideo' pixel tests 3 ; ---------------------------------------------------------------------------- 4 ; 5 ; 26/02/2021 (23/02/2021) 6 ; 7 ; **************************************************************************** 8 ; nasm blocks5.s -l blocks5.txt -o BLOCKS5.PRG -Z error.txt 9 ; (modified from 'blocks4.s', 22/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[50050000] mov edi, bss_start 93 00000005 B9012C0100 mov ecx, (bss_end - bss_start)/4 94 ;xor eax, eax 95 0000000A F3AB rep stosd 96 97 ; program message 98 0000000C BE[8C040000] mov esi, program_msg 99 00000011 E842040000 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 101h ; 640x480, 256 colors 107 sys _video, 08FFh, 101h 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 B901010000 <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_101h_ok 112 0000002F E9EC030000 jmp terminate 113 114 set_vesa_mode_101h_ok: 115 ; full screen - white color 116 00000034 B90F0F0F0F mov ecx, 0F0F0F0Fh ; 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 ; Black "white" text 121 ;mov byte [tcolor], 0 122 00000045 BEF000D000 mov esi, 208*65536+240 123 0000004A BD[3D050000] mov ebp, txt_white 124 0000004F E815040000 call print_text 125 126 00000054 E8D5030000 call waitforkey 127 128 ; Mask color = black 129 ; full screen NOT (except mask color) 130 ;mov edi, 0 ; Black 131 00000059 29FF sub edi, edi 132 0000005B BB27020000 mov ebx, 0227h ; masked 'NOT', full screen 133 sys _video 133 <1> 133 <1> 133 <1> 133 <1> 133 <1> %if %0 >= 2 133 <1> mov ebx, %2 133 <1> %if %0 >= 3 133 <1> mov ecx, %3 133 <1> %if %0 = 4 133 <1> mov edx, %4 133 <1> %endif 133 <1> %endif 133 <1> %endif 133 00000060 B81F000000 <1> mov eax, %1 133 <1> 133 00000065 CD40 <1> int 40h 134 135 00000067 E8C2030000 call waitforkey 136 137 ; full screen replace color (replace black colors) 138 0000006C B100 mov cl, 0 ; BLACK 139 0000006E B20F mov dl, 0Fh ; WHITE 140 00000070 B30C mov bl, 0Ch 141 sys _video 141 <1> 141 <1> 141 <1> 141 <1> 141 <1> %if %0 >= 2 141 <1> mov ebx, %2 141 <1> %if %0 >= 3 141 <1> mov ecx, %3 141 <1> %if %0 = 4 141 <1> mov edx, %4 141 <1> %endif 141 <1> %endif 141 <1> %endif 141 00000072 B81F000000 <1> mov eax, %1 141 <1> 141 00000077 CD40 <1> int 40h 142 143 00000079 E8B0030000 call waitforkey 144 145 ; full screen - blue color 146 147 0000007E B920202020 mov ecx, 20202020h ; blue 148 00000083 B301 mov bl, 01h ; Full screen, new color 149 sys _video 149 <1> 149 <1> 149 <1> 149 <1> 149 <1> %if %0 >= 2 149 <1> mov ebx, %2 149 <1> %if %0 >= 3 149 <1> mov ecx, %3 149 <1> %if %0 = 4 149 <1> mov edx, %4 149 <1> %endif 149 <1> %endif 149 <1> %endif 149 00000085 B81F000000 <1> mov eax, %1 149 <1> 149 0000008A CD40 <1> int 40h 150 151 0000008C C605[50050000]0F mov byte [tcolor], 0Fh 152 00000093 BE0201D000 mov esi, 208*65536+258 153 00000098 BD[27050000] mov ebp, txt_blue 154 0000009D E8C7030000 call print_text 155 156 000000A2 E887030000 call waitforkey 157 158 ; Mask color = white 159 ; full screen NOT (except mask color) 160 000000A7 BF0F000000 mov edi, 0Fh 161 000000AC B327 mov bl, 27h ; masked 'NOT', full screen 162 sys _video 162 <1> 162 <1> 162 <1> 162 <1> 162 <1> %if %0 >= 2 162 <1> mov ebx, %2 162 <1> %if %0 >= 3 162 <1> mov ecx, %3 162 <1> %if %0 = 4 162 <1> mov edx, %4 162 <1> %endif 162 <1> %endif 162 <1> %endif 162 000000AE B81F000000 <1> mov eax, %1 162 <1> 162 000000B3 CD40 <1> int 40h 163 164 000000B5 E874030000 call waitforkey 165 166 000000BA B928282828 mov ecx, 28282828h ; RED 167 000000BF B301 mov bl, 01h ; Full screen, new color 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 000000C1 B81F000000 <1> mov eax, %1 168 <1> 168 000000C6 CD40 <1> int 40h 169 170 ;mov byte [tcolor], 0Fh 171 000000C8 BE1401D000 mov esi, 208*65536+276 172 000000CD BD[2C050000] mov ebp, txt_red 173 000000D2 E892030000 call print_text 174 175 000000D7 E852030000 call waitforkey 176 177 ; Mask color = red 178 ; full screen NEW COLOR (except mask color) 179 000000DC BF28000000 mov edi, 28h ; mask color, RED 180 000000E1 B12C mov cl, 2Ch ; YELLOW 181 000000E3 B321 mov bl, 21h ; masked new color, full screen 182 sys _video 182 <1> 182 <1> 182 <1> 182 <1> 182 <1> %if %0 >= 2 182 <1> mov ebx, %2 182 <1> %if %0 >= 3 182 <1> mov ecx, %3 182 <1> %if %0 = 4 182 <1> mov edx, %4 182 <1> %endif 182 <1> %endif 182 <1> %endif 182 000000E5 B81F000000 <1> mov eax, %1 182 <1> 182 000000EA CD40 <1> int 40h 183 184 000000EC E83D030000 call waitforkey 185 186 ; full screen replace color (replace yellow colors) 187 000000F1 B12C mov cl, 2Ch ; YELLOW 188 000000F3 B228 mov dl, 28h ; RED 189 000000F5 B30C mov bl, 0Ch 190 sys _video 190 <1> 190 <1> 190 <1> 190 <1> 190 <1> %if %0 >= 2 190 <1> mov ebx, %2 190 <1> %if %0 >= 3 190 <1> mov ecx, %3 190 <1> %if %0 = 4 190 <1> mov edx, %4 190 <1> %endif 190 <1> %endif 190 <1> %endif 190 000000F7 B81F000000 <1> mov eax, %1 190 <1> 190 000000FC CD40 <1> int 40h 191 192 000000FE E82B030000 call waitforkey 193 194 ; full screen - green color 195 196 00000103 B930303030 mov ecx, 30303030h ; green 197 00000108 BB01020000 mov ebx, 0201h ; Full screen, new color 198 sys _video 198 <1> 198 <1> 198 <1> 198 <1> 198 <1> %if %0 >= 2 198 <1> mov ebx, %2 198 <1> %if %0 >= 3 198 <1> mov ecx, %3 198 <1> %if %0 = 4 198 <1> mov edx, %4 198 <1> %endif 198 <1> %endif 198 <1> %endif 198 0000010D B81F000000 <1> mov eax, %1 198 <1> 198 00000112 CD40 <1> int 40h 199 200 00000114 C605[50050000]00 mov byte [tcolor], 0 201 0000011B BEF000D000 mov esi, 208*65536+240 202 00000120 BD[30050000] mov ebp, txt_green 203 00000125 E83F030000 call print_text 204 205 0000012A E8FF020000 call waitforkey 206 207 ; Masked new color 208 0000012F BF30000000 mov edi, 30h ; mask color, GREEN 209 00000134 B10F mov cl, 0Fh ; WHITE 210 00000136 B321 mov bl, 21h ; masked new color, full screen 211 sys _video 211 <1> 211 <1> 211 <1> 211 <1> 211 <1> %if %0 >= 2 211 <1> mov ebx, %2 211 <1> %if %0 >= 3 211 <1> mov ecx, %3 211 <1> %if %0 = 4 211 <1> mov edx, %4 211 <1> %endif 211 <1> %endif 211 <1> %endif 211 00000138 B81F000000 <1> mov eax, %1 211 <1> 211 0000013D CD40 <1> int 40h 212 213 0000013F E8EA020000 call waitforkey 214 215 ; Masked mix colors 216 00000144 BF0F000000 mov edi, 0Fh ; mask color, WHITE 217 00000149 B110 mov cl, 10h ; (result must be blue from green) 218 0000014B B32B mov bl, 2Bh ; masked MIX colors, full screen 219 sys _video 219 <1> 219 <1> 219 <1> 219 <1> 219 <1> %if %0 >= 2 219 <1> mov ebx, %2 219 <1> %if %0 >= 3 219 <1> mov ecx, %3 219 <1> %if %0 = 4 219 <1> mov edx, %4 219 <1> %endif 219 <1> %endif 219 <1> %endif 219 0000014D B81F000000 <1> mov eax, %1 219 <1> 219 00000152 CD40 <1> int 40h 220 221 00000154 E8D5020000 call waitforkey 222 223 ; full screen - yellow color 224 225 00000159 B92C2C2C2C mov ecx, 2C2C2C2Ch ; yellow 226 0000015E BB01020000 mov ebx, 0201h ; Full screen, new color 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 00000163 B81F000000 <1> mov eax, %1 227 <1> 227 00000168 CD40 <1> int 40h 228 229 ;mov byte [tcolor], 0 230 0000016A BEDE00D000 mov esi, 208*65536+222 231 0000016F BD[36050000] mov ebp, txt_yellow 232 00000174 E8F0020000 call print_text 233 234 00000179 E8B0020000 call waitforkey 235 236 ; masked add color 237 0000017E 31FF xor edi, edi ; mask color is BLACK 238 00000180 B110 mov cl, 10h ; add 10h to current color 239 00000182 B322 mov bl, 22h 240 sys _video 240 <1> 240 <1> 240 <1> 240 <1> 240 <1> %if %0 >= 2 240 <1> mov ebx, %2 240 <1> %if %0 >= 3 240 <1> mov ecx, %3 240 <1> %if %0 = 4 240 <1> mov edx, %4 240 <1> %endif 240 <1> %endif 240 <1> %endif 240 00000184 B81F000000 <1> mov eax, %1 240 <1> 240 00000189 CD40 <1> int 40h 241 242 0000018B E89E020000 call waitforkey 243 244 ; masked sub color 245 ;xor edi, edi ; mask color is BLACK 246 00000190 B110 mov cl, 10h ; sub 10h from current color 247 00000192 B323 mov bl, 23h 248 sys _video 248 <1> 248 <1> 248 <1> 248 <1> 248 <1> %if %0 >= 2 248 <1> mov ebx, %2 248 <1> %if %0 >= 3 248 <1> mov ecx, %3 248 <1> %if %0 = 4 248 <1> mov edx, %4 248 <1> %endif 248 <1> %endif 248 <1> %endif 248 00000194 B81F000000 <1> mov eax, %1 248 <1> 248 00000199 CD40 <1> int 40h 249 250 0000019B E88E020000 call waitforkey 251 252 ; masked AND colors 253 ;mov edi, 2Ch ; mask color is Yellow 254 000001A0 B117 mov cl, 17h ; and 17h with current color 255 000001A2 B325 mov bl, 25h 256 sys _video 256 <1> 256 <1> 256 <1> 256 <1> 256 <1> %if %0 >= 2 256 <1> mov ebx, %2 256 <1> %if %0 >= 3 256 <1> mov ecx, %3 256 <1> %if %0 = 4 256 <1> mov edx, %4 256 <1> %endif 256 <1> %endif 256 <1> %endif 256 000001A4 B81F000000 <1> mov eax, %1 256 <1> 256 000001A9 CD40 <1> int 40h 257 258 000001AB E87E020000 call waitforkey 259 260 ; masked OR colors 261 000001B0 BF2C000000 mov edi, 2Ch ; mask color is Yellow 262 000001B5 B120 mov cl, 20h ; or 20h with current color 263 000001B7 B324 mov bl, 24h 264 sys _video 264 <1> 264 <1> 264 <1> 264 <1> 264 <1> %if %0 >= 2 264 <1> mov ebx, %2 264 <1> %if %0 >= 3 264 <1> mov ecx, %3 264 <1> %if %0 = 4 264 <1> mov edx, %4 264 <1> %endif 264 <1> %endif 264 <1> %endif 264 000001B9 B81F000000 <1> mov eax, %1 264 <1> 264 000001BE CD40 <1> int 40h 265 266 000001C0 E869020000 call waitforkey 267 268 ; masked XOR colors 269 ;mov edi, 2Ch ; mask color is Yellow 270 000001C5 B120 mov cl, 20h ; xor 20h with current color 271 000001C7 B326 mov bl, 26h 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 000001C9 B81F000000 <1> mov eax, %1 272 <1> 272 000001CE CD40 <1> int 40h 273 274 000001D0 E859020000 call waitforkey 275 276 ; Full screen copy 277 000001D5 BE[54050000] mov esi, fullscreen_buffer 278 000001DA 89F7 mov edi, esi 279 000001DC 31C0 xor eax, eax ; black 280 000001DE B940060000 mov ecx, (640*10)/4 281 000001E3 F3AB rep stosd 282 000001E5 B80F0F0F0F mov eax, 0F0F0F0Fh ; white 283 000001EA B920030000 mov ecx, (640*5)/4 284 000001EF F3AB rep stosd 285 000001F1 31C0 xor eax, eax ; black 286 000001F3 B920030000 mov ecx, (640*5)/4 287 000001F8 F3AB rep stosd 288 000001FA B820202020 mov eax, 20202020h ; blue 289 000001FF B9C0440000 mov ecx, (640*110)/4 290 00000204 F3AB rep stosd 291 00000206 B828282828 mov eax, 28282828h ; red 292 0000020B B9C0440000 mov ecx, (640*110)/4 293 00000210 F3AB rep stosd 294 00000212 B830303030 mov eax, 30303030h ; green 295 00000217 B9C0440000 mov ecx, (640*110)/4 296 0000021C F3AB rep stosd 297 0000021E B82C2C2C2C mov eax, 2C2C2C2Ch ; yellow 298 00000223 B9C0440000 mov ecx, (640*110)/4 299 00000228 F3AB rep stosd 300 0000022A 31C0 xor eax, eax ; black 301 0000022C B920030000 mov ecx, (640*5)/4 302 00000231 F3AB rep stosd 303 00000233 B80F0F0F0F mov eax, 0F0F0F0Fh ; white 304 00000238 B920030000 mov ecx, (640*5)/4 305 0000023D F3AB rep stosd 306 0000023F 31C0 xor eax, eax ; black 307 00000241 B940060000 mov ecx, (640*10)/4 308 00000246 F3AB rep stosd 309 310 00000248 BB00020000 mov ebx, 0200h ; Full screen copy 311 sys _video 311 <1> 311 <1> 311 <1> 311 <1> 311 <1> %if %0 >= 2 311 <1> mov ebx, %2 311 <1> %if %0 >= 3 311 <1> mov ecx, %3 311 <1> %if %0 = 4 311 <1> mov edx, %4 311 <1> %endif 311 <1> %endif 311 <1> %endif 311 0000024D B81F000000 <1> mov eax, %1 311 <1> 311 00000252 CD40 <1> int 40h 312 313 00000254 E8D5010000 call waitforkey 314 315 00000259 C605[50050000]0F mov byte [tcolor], 0Fh 316 317 00000260 BE2B002B00 mov esi, 43*65536+43 318 00000265 BD[27050000] mov ebp, txt_blue 319 0000026A E8FA010000 call print_text 320 321 0000026F E8BA010000 call waitforkey 322 323 00000274 BE2B009900 mov esi, 153*65536+43 324 00000279 BD[2C050000] mov ebp, txt_red 325 0000027E E8E6010000 call print_text 326 327 00000283 E8A6010000 call waitforkey 328 329 00000288 BE2B000701 mov esi, 263*65536+43 330 0000028D BD[30050000] mov ebp, txt_green 331 00000292 E8D2010000 call print_text 332 333 00000297 E892010000 call waitforkey 334 335 0000029C BE2B007501 mov esi, 373*65536+43 336 000002A1 BD[36050000] mov ebp, txt_yellow 337 000002A6 E8BE010000 call print_text 338 339 000002AB E87E010000 call waitforkey 340 341 000002B0 C605[50050000]00 mov byte [tcolor], 0 342 343 000002B7 BE2B000701 mov esi, 263*65536+43 344 000002BC BD[30050000] mov ebp, txt_green 345 000002C1 E8A3010000 call print_text 346 347 000002C6 E863010000 call waitforkey 348 349 000002CB BE2B007501 mov esi, 373*65536+43 350 000002D0 BD[36050000] mov ebp, txt_yellow 351 000002D5 E88F010000 call print_text 352 353 000002DA E84F010000 call waitforkey 354 355 ; Masked new color, window 356 ; (blue block starts at row 20) 357 ; ((white text color will be changed to black)) 358 000002DF BF20000000 mov edi, 20h ; mask color, BLUE 359 000002E4 B100 mov cl, 0 ; BLACK (new color) 360 000002E6 BA28001400 mov edx, 20*65536+40 ; column 40, row 20 361 000002EB BEA0006E00 mov esi, 110*65536+160 ; size: 110*160 362 000002F0 BB31020000 mov ebx, 0231h ; Masked new color in window 363 sys _video 363 <1> 363 <1> 363 <1> 363 <1> 363 <1> %if %0 >= 2 363 <1> mov ebx, %2 363 <1> %if %0 >= 3 363 <1> mov ecx, %3 363 <1> %if %0 = 4 363 <1> mov edx, %4 363 <1> %endif 363 <1> %endif 363 <1> %endif 363 000002F5 B81F000000 <1> mov eax, %1 363 <1> 363 000002FA CD40 <1> int 40h 364 365 000002FC E82D010000 call waitforkey 366 367 ; Masked AND colors, window 368 ; (red block starts at row 130) 369 ; ((white text color will be changed to black)) 370 00000301 BF28000000 mov edi, 28h ; mask color, RED 371 ;mov cl, 0 ; BLACK (and color) 372 00000306 BA28008200 mov edx, 130*65536+40 ; column 40, row 130 373 0000030B BEA0006E00 mov esi, 110*65536+160 ; size: 110*160 374 00000310 BB35020000 mov ebx, 0235h ; Masked AND colors in window 375 sys _video 375 <1> 375 <1> 375 <1> 375 <1> 375 <1> %if %0 >= 2 375 <1> mov ebx, %2 375 <1> %if %0 >= 3 375 <1> mov ecx, %3 375 <1> %if %0 = 4 375 <1> mov edx, %4 375 <1> %endif 375 <1> %endif 375 <1> %endif 375 00000315 B81F000000 <1> mov eax, %1 375 <1> 375 0000031A CD40 <1> int 40h 376 377 0000031C E80D010000 call waitforkey 378 379 ; Masked ADD to yellow block position 380 00000321 29FF sub edi, edi ; mask color, BLACK 381 00000323 B108 mov cl, 8 ; add 8 to current color 382 00000325 BA00005E01 mov edx, 350*65536 ; column 0, row 350 383 0000032A BE80026E00 mov esi, 110*65536+640 ; size: 110*640 384 0000032F BB32020000 mov ebx, 0232h ; add color, window, masked 385 sys _video 385 <1> 385 <1> 385 <1> 385 <1> 385 <1> %if %0 >= 2 385 <1> mov ebx, %2 385 <1> %if %0 >= 3 385 <1> mov ecx, %3 385 <1> %if %0 = 4 385 <1> mov edx, %4 385 <1> %endif 385 <1> %endif 385 <1> %endif 385 00000334 B81F000000 <1> mov eax, %1 385 <1> 385 00000339 CD40 <1> int 40h 386 387 0000033B E8EE000000 call waitforkey 388 389 ; Masked SUB from green block position 390 ;sub edi, edi ; mask color, BLACK 391 ;mov cl, 8 ; sub 8 from current color 392 00000340 BA0000F000 mov edx, 240*65536 ; column 0, row 240 393 ;mov esi, 110*65536+640 ; size: 110*640 394 00000345 BB33020000 mov ebx, 0233h ; sub color, window, masked 395 sys _video 395 <1> 395 <1> 395 <1> 395 <1> 395 <1> %if %0 >= 2 395 <1> mov ebx, %2 395 <1> %if %0 >= 3 395 <1> mov ecx, %3 395 <1> %if %0 = 4 395 <1> mov edx, %4 395 <1> %endif 395 <1> %endif 395 <1> %endif 395 0000034A B81F000000 <1> mov eax, %1 395 <1> 395 0000034F CD40 <1> int 40h 396 397 00000351 E8D8000000 call waitforkey 398 399 ; Masked SUB from yellow block position 400 ;sub edi, edi ; mask color, BLACK 401 ;mov cl, 8 ; add 8 to current color 402 00000356 BA00005E01 mov edx, 350*65536 ; column 0, row 350 403 ;mov esi, 110*65536+640 ; size: 110*640 404 0000035B BB33020000 mov ebx, 0233h ; sub color, window, masked 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 00000360 B81F000000 <1> mov eax, %1 405 <1> 405 00000365 CD40 <1> int 40h 406 407 00000367 E8C2000000 call waitforkey 408 409 ; Masked ADD to green block position 410 ;sub edi, edi ; mask color, BLACK 411 ;mov cl, 8 ; sub 8 from current color 412 0000036C BA0000F000 mov edx, 240*65536 ; column 0, row 240 413 ;mov esi, 110*65536+640 ; size: 110*640 414 00000371 BB32020000 mov ebx, 0232h ; add color, window, masked 415 sys _video 415 <1> 415 <1> 415 <1> 415 <1> 415 <1> %if %0 >= 2 415 <1> mov ebx, %2 415 <1> %if %0 >= 3 415 <1> mov ecx, %3 415 <1> %if %0 = 4 415 <1> mov edx, %4 415 <1> %endif 415 <1> %endif 415 <1> %endif 415 00000376 B81F000000 <1> mov eax, %1 415 <1> 415 0000037B CD40 <1> int 40h 416 417 0000037D E8AC000000 call waitforkey 418 419 ; Masked OR colors, window 420 ; (white block starts at row 10) 421 00000382 BF20000000 mov edi, 20h ; mask color, BLUE 422 00000387 B128 mov cl, 28h ; OR value (with current color) 423 00000389 BA00000A00 mov edx, 10*65536+0 ; column 0, row 10 424 0000038E BE80027800 mov esi, 120*65536+640 ; size: 120*640 425 00000393 BB34020000 mov ebx, 0234h ; Masked OR colors 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 00000398 B81F000000 <1> mov eax, %1 426 <1> 426 0000039D CD40 <1> int 40h 427 428 0000039F E88A000000 call waitforkey 429 430 ; Masked XOR colors, window 431 ; (white block starts at row 465) 432 000003A4 BF2C000000 mov edi, 2Ch ; mask color, YELLOW 433 000003A9 B128 mov cl, 28h ; XOR value (with current color) 434 000003AB BA00005E01 mov edx, 350*65536+0 ; column 0, row 465 435 000003B0 BE80027800 mov esi, 120*65536+640 ; size: 120*640 436 000003B5 BB36020000 mov ebx, 0236h ; Masked XOR colors in window 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 000003BA B81F000000 <1> mov eax, %1 437 <1> 437 000003BF CD40 <1> int 40h 438 439 000003C1 E868000000 call waitforkey 440 441 ; Masked mix color, window 442 ; (blue block starts at row 20) 443 000003C6 BF20000000 mov edi, 20h ; mask color, BLUE 444 000003CB B130 mov cl, 30h ; average color will be 2Ch 445 000003CD BA28001400 mov edx, 20*65536+40 ; column 40, row 20 446 000003D2 BEA0006E00 mov esi, 110*65536+160 ; size: 110*160 447 000003D7 BB3B020000 mov ebx, 023Bh ; Masked mix colors in window 448 sys _video 448 <1> 448 <1> 448 <1> 448 <1> 448 <1> %if %0 >= 2 448 <1> mov ebx, %2 448 <1> %if %0 >= 3 448 <1> mov ecx, %3 448 <1> %if %0 = 4 448 <1> mov edx, %4 448 <1> %endif 448 <1> %endif 448 <1> %endif 448 000003DC B81F000000 <1> mov eax, %1 448 <1> 448 000003E1 CD40 <1> int 40h 449 450 000003E3 E846000000 call waitforkey 451 452 ; Masked mix color, window 453 ; (red block starts at row 130) 454 000003E8 BF28000000 mov edi, 28h ; mask color, RED 455 000003ED B11E mov cl, 1Eh ; average color will be 0Fh 456 000003EF BA28008200 mov edx, 130*65536+40 ; column 40, row 130 457 000003F4 BEA0006E00 mov esi, 110*65536+160 ; size: 110*160 458 000003F9 BB3B020000 mov ebx, 023Bh ; Masked mix colors in window 459 sys _video 459 <1> 459 <1> 459 <1> 459 <1> 459 <1> %if %0 >= 2 459 <1> mov ebx, %2 459 <1> %if %0 >= 3 459 <1> mov ecx, %3 459 <1> %if %0 = 4 459 <1> mov edx, %4 459 <1> %endif 459 <1> %endif 459 <1> %endif 459 000003FE B81F000000 <1> mov eax, %1 459 <1> 459 00000403 CD40 <1> int 40h 460 461 00000405 E824000000 call waitforkey 462 463 ; copy full screen buffer to screen 464 0000040A BE[54050000] mov esi, fullscreen_buffer 465 0000040F BB00020000 mov ebx, 0200h 466 sys _video 466 <1> 466 <1> 466 <1> 466 <1> 466 <1> %if %0 >= 2 466 <1> mov ebx, %2 466 <1> %if %0 >= 3 466 <1> mov ecx, %3 466 <1> %if %0 = 4 466 <1> mov edx, %4 466 <1> %endif 466 <1> %endif 466 <1> %endif 466 00000414 B81F000000 <1> mov eax, %1 466 <1> 466 00000419 CD40 <1> int 40h 467 468 0000041B E80E000000 call waitforkey 469 ; wait for key stroke before exit 470 terminate: 471 00000420 E82C000000 call set_text_mode 472 sys _exit 472 <1> 472 <1> 472 <1> 472 <1> 472 <1> %if %0 >= 2 472 <1> mov ebx, %2 472 <1> %if %0 >= 3 472 <1> mov ecx, %3 472 <1> %if %0 = 4 472 <1> mov edx, %4 472 <1> %endif 472 <1> %endif 472 <1> %endif 472 00000425 B801000000 <1> mov eax, %1 472 <1> 472 0000042A CD40 <1> int 40h 473 halt: 474 0000042C EBFE jmp short halt 475 476 waitforkey: 477 0000042E B401 mov ah, 1 478 00000430 CD32 int 32h 479 00000432 740B jz short getkey 480 00000434 FF05[4C050000] inc dword [counter] 481 0000043A 90 nop 482 0000043B 90 nop 483 0000043C 90 nop 484 0000043D EBEF jmp short waitforkey 485 getkey: 486 0000043F 30E4 xor ah, ah 487 00000441 CD32 int 32h 488 489 00000443 663D032E cmp ax, 2E03h 490 00000447 7405 je short _terminate 491 00000449 3C1B cmp al, 1Bh ; ESC key 492 0000044B 7401 je short _terminate 493 0000044D C3 retn 494 _terminate: 495 0000044E 58 pop eax ; return address 496 0000044F EBCF jmp short terminate 497 498 set_text_mode: 499 00000451 30E4 xor ah, ah 500 00000453 B003 mov al, 3 501 ;int 10h ; al = 03h text mode, int 10 video 502 00000455 CD31 int 31h ; TRDOS 386 - Video interrupt 503 00000457 C3 retn 504 505 print_msg: 506 00000458 B40E mov ah, 0Eh 507 0000045A BB07000000 mov ebx, 7 508 ;mov bl, 7 ; char attribute & color 509 p_next_chr: 510 0000045F AC lodsb 511 00000460 08C0 or al, al 512 00000462 7404 jz short p_retn ; retn 513 00000464 CD31 int 31h 514 00000466 EBF7 jmp short p_next_chr 515 p_retn: 516 00000468 C3 retn 517 518 print_text: 519 ; ebp = text address 520 ; esi = row/column position (si = column) 521 p_d_x: 522 ;mov dh, 0 ; 8x16 system font 523 00000469 B606 mov dh, 6 ; 32*64 scaled font (base: 8*16 system font) 524 p_d_x_n: 525 0000046B 8A5500 mov dl, [ebp] 526 0000046E 20D2 and dl, dl 527 00000470 7419 jz short p_d_x_ok 528 sys _video, 020Fh, [tcolor] 528 <1> 528 <1> 528 <1> 528 <1> 528 <1> %if %0 >= 2 528 00000472 BB0F020000 <1> mov ebx, %2 528 <1> %if %0 >= 3 528 00000477 8B0D[50050000] <1> mov ecx, %3 528 <1> %if %0 = 4 528 <1> mov edx, %4 528 <1> %endif 528 <1> %endif 528 <1> %endif 528 0000047D B81F000000 <1> mov eax, %1 528 <1> 528 00000482 CD40 <1> int 40h 529 00000484 45 inc ebp 530 00000485 6683C624 add si, 36 ; next char pos 531 00000489 EBE0 jmp short p_d_x_n 532 p_d_x_ok: 533 0000048B C3 retn 534 535 program_msg: 536 0000048C 5452444F5320333836- db "TRDOS 386 v2.0.3 - ('sysvideo') Test Program - Block Operations" 536 00000495 2076322E302E33202D- 536 0000049E 202827737973766964- 536 000004A7 656F27292054657374- 536 000004B0 2050726F6772616D20- 536 000004B9 2D20426C6F636B204F- 536 000004C2 7065726174696F6E73 537 000004CB 0D0A db 0Dh, 0Ah 538 000004CD 6279204572646F6761- db "by Erdogan Tan - 26/02/2021" 538 000004D6 6E2054616E202D2032- 538 000004DF 362F30322F32303231 539 ;db 0Dh, 0Ah, 0 540 000004E8 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 541 000004EC 507265737320616E79- db "Press any key to continue .." 541 000004F5 206B657920746F2063- 541 000004FE 6F6E74696E7565202E- 541 00000507 2E 542 00000508 0D0A db 0Dh, 0Ah 543 0000050A 285072657373204553- db "(Press ESC to exit) .." 543 00000513 4320746F2065786974- 543 0000051C 29202E2E 544 00000520 0D0A db 0Dh, 0Ah 545 00000522 0D0A db 0Dh, 0Ah 546 547 nextline: 548 00000524 0D0A00 db 0Dh, 0Ah, 0 549 550 txt_blue: 551 00000527 424C554500 db "BLUE", 0 552 txt_red: 553 0000052C 52454400 db "RED", 0 554 txt_green: 555 00000530 475245454E00 db "GREEN", 0 556 txt_yellow: 557 00000536 59454C4C4F5700 db "YELLOW", 0 558 txt_white: 559 0000053D 574849544500 db "WHITE", 0 560 txt_black: 561 00000543 424C41434B00 db "BLACK", 0 562 563 bss: 564 565 ABSOLUTE bss 566 567 00000549 alignb 4 568 569 counter: 570 0000054C resd 1 571 572 bss_start: 573 00000550 tcolor: resd 1 574 575 fullscreen_buffer: 576 00000554 resb 307200 577 bss_end: