MCPcopy Create free account
hub / github.com/NetHack/NetHack / vesa_WritePixel32

Function vesa_WritePixel32

sys/msdos/vidvesa.c:386–450  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

384}
385
386static void
387vesa_WritePixel32(unsigned x, unsigned y, unsigned long color)
388{
389 unsigned long offset = y * vesa_scan_line + x * vesa_pixel_bytes;
390 unsigned long addr;
391 unsigned i;
392
393 if (vesa_segment != 0) {
394 /* Linear frame buffer in use */
395 switch (vesa_pixel_size) {
396 case 8:
397 _farpokeb(vesa_segment, offset, color);
398 break;
399
400 case 15:
401 case 16:
402 _farpokew(vesa_segment, offset, color);
403 break;
404
405 case 24:
406 if (offset & 1) {
407 _farpokeb(vesa_segment, offset + 0, color & 0xFF);
408 _farpokew(vesa_segment, offset + 1, color >> 8);
409 } else {
410 _farpokew(vesa_segment, offset + 0, color & 0xFFFF);
411 _farpokeb(vesa_segment, offset + 2, color >> 16);
412 }
413 break;
414
415 case 32:
416 _farpokel(vesa_segment, offset, color);
417 break;
418
419 default: /* Shouldn't happen */
420 color = 0;
421 break;
422 }
423 } else {
424 switch (vesa_pixel_size) {
425 case 8:
426 addr = vesa_SetWindow(vesa_write_win, offset);
427 _farpokeb(_dos_ds, addr, color);
428 break;
429
430 case 15:
431 case 16:
432 addr = vesa_SetWindow(vesa_write_win, offset);
433 _farpokew(_dos_ds, addr, color);
434 break;
435
436 case 24:
437 /* Pixel may cross a window boundary */
438 for (i = 0; i < 3; ++i) {
439 addr = vesa_SetWindow(vesa_write_win, offset + i);
440 _farpokeb(_dos_ds, addr, (unsigned char) (color >> (i * 8)));
441 }
442 break;
443

Callers 2

vesa_WritePixelFunction · 0.85
vesa_HideCursorFunction · 0.85

Calls 1

vesa_SetWindowFunction · 0.85

Tested by

no test coverage detected