diff --git a/src/hardware/vga_draw.cpp b/src/hardware/vga_draw.cpp index c8f859f9..bc86be2e 100644 --- a/src/hardware/vga_draw.cpp +++ b/src/hardware/vga_draw.cpp @@ -23,6 +23,11 @@ /* This Should draw a complete 16 colour screen */ +void VGA_Render_GFX_2(Bit8u * * data) { + *data=vga.buffer; + VGA_DrawGFX2_Full(vga.buffer,vga.draw.width); + vga.config.retrace=true; +} void VGA_Render_GFX_4(Bit8u * * data) { *data=vga.buffer; @@ -51,11 +56,38 @@ void VGA_Render_TEXT_16(Bit8u * * data) { vga.config.retrace=true; } +void VGA_DrawGFX2_Full(Bit8u * bitdata,Bitu pitch) { + Bit8u * reader=real_host(0xB800,0); + Bit8u * draw; + for (Bitu y=0;y>3;x++) { + Bit8u val=*(tempread++); + *(draw+0)=(val>>7)&1; + *(draw+1)=(val>>6)&1; + *(draw+2)=(val>>5)&1; + *(draw+3)=(val>>4)&1; + *(draw+4)=(val>>3)&1; + *(draw+5)=(val>>2)&1; + *(draw+6)=(val>>1)&1; + *(draw+7)=(val>>0)&1; + draw+=8; + } + bitdata+=pitch; + }; + vga.config.retrace=true; +} -void VGA_DrawGFX4_Full(Bit8u * bitdata,Bitu next_line) { - //TODO use vga memory handler +void VGA_DrawGFX4_Full(Bit8u * bitdata,Bitu pitch) { Bit8u * reader=real_host(0xB800,0); Bit8u * draw; for (Bitu y=0;y>2;x++) { Bit8u val=*(tempread++); -/* - *(draw+0)=(val>>6)&3; - *(draw+1)=(val>>4)&3; - *(draw+2)=(val>>2)&3; - *(draw+3)=(val)&3; - draw+=4; -*/ *(Bit32u *)draw=CGAWriteTable[val]; draw+=4; } - //TODO use scanline length and dword mode crap - bitdata+=next_line; + bitdata+=pitch; }; vga.config.retrace=true; } -void VGA_DrawGFX16_Full(Bit8u * bitdata,Bitu next_line) { +/* Draw the screen using the lookup buffer */ +//TODO include split screen or something +void VGA_DrawGFX16_Fast(Bit8u * bitdata,Bitu next_line) { Bit8u * reader=&vga.buffer[vga.config.display_start*8+vga.config.pel_panning]; for (Bitu y=0;y>2;x++) { @@ -108,27 +133,25 @@ void VGA_DrawGFX256_Full(Bit8u * bitdata,Bitu next_line) { } xreader++; } - //TODO use scanline length and dword mode crap yreader+=vga.config.scan_len*2; bitdata+=next_line; }; vga.config.retrace=true; }; -void VGA_DrawGFX256_Fast(Bit8u * bitdata,Bitu next_line) { +void VGA_DrawGFX256_Fast(Bit8u * bitdata,Bitu pitch) { /* For now just copy 64 kb of memory with pitch support */ Bit8u * reader=memory+0xa0000; for (Bitu y=0;y=vga.draw.width) return; if ((vga.draw.cursor_row*16)>=vga.draw.height) return; - Bit8u * cursor_draw=bitdata+(vga.draw.cursor_row*16+15)*vga.draw.width+vga.draw.cursor_col*8; + Bit8u * cursor_draw=bitdata+(vga.draw.cursor_row*16+15)*pitch+vga.draw.cursor_col*8; if (vga.draw.cursor_count>8) { for (Bit8u loop=0;loop<8;loop++) *cursor_draw++=15; }