--- xmil/vram/makescrn.c 2004/08/07 10:53:01 1.2 +++ xmil/vram/makescrn.c 2004/08/10 10:41:53 1.6 @@ -12,28 +12,11 @@ MAKESCRN makescrn; BYTE scrnallflash; - BYTE blinktest = 0; - -extern BYTE dispmode; - static BYTE lastdisp = 0; - BYTE dispflg; - BYTE *dispp = &GRP_RAM[GRAM_BANK0]; - BYTE *dispp2 = &GRP_RAM[GRAM_BANK1]; static BYTE blinktime = 1; - DWORD drawtime = 0; -void init_draw(void) { - - makesub_initialize(); - reflesh_palette(); - lastdisp = 0; - dispflg = UPDATE_TRAM | UPDATE_VRAM0; - dispp = &GRP_RAM[GRAM_BANK0]; -} - static void fillupdatetmp(void) { UINT32 *p; @@ -63,7 +46,7 @@ static void flashupdatetmp(void) { y = crtc.s.TXT_YL; do { for (x=0; x> 8)) & 0x1f) { @@ -223,7 +206,7 @@ static BRESULT updateblink(void) { else { blinktime = 30 - 1; pos = makescrn.vramtop; - blinktest ^= 0x10; + makescrn.blinktest ^= 0x10; update = 0; r = makescrn.vramsize; while(r) { @@ -245,9 +228,26 @@ static BRESULT updateblink(void) { } -// --------------------------------------------------------------------------- +// ---- + +static void changemodes(void) { + + lastdisp = crtc.e.dispmode; + if (!(lastdisp & SCRN_BANK1)) { + makescrn.disp1 = GRP_RAM + GRAM_BANK0; + makescrn.disp2 = GRP_RAM + GRAM_BANK1; + makescrn.dispflag = UPDATE_TRAM | UPDATE_VRAM0; + } + else { + makescrn.disp1 = GRP_RAM + GRAM_BANK1; + makescrn.disp2 = GRP_RAM + GRAM_BANK0; + makescrn.dispflag = UPDATE_TRAM | UPDATE_VRAM1; + } + scrnallflash = 1; + makescrn.palandply = 1; +} -static void x1vram_adjust(void) { +static void changecrtc(void) { REG8 widthmode; UINT fontcy; @@ -259,7 +259,7 @@ static void x1vram_adjust(void) { makescrn.vramtop = LOW11(crtc.s.TXT_TOP); if (crtc.s.TXT_XL <= 40) { - if (dispmode & SCRN_DRAW4096) { + if (lastdisp & SCRN_DRAW4096) { widthmode = SCRNWIDTHMODE_4096; } else { @@ -307,6 +307,7 @@ static void x1vram_adjust(void) { if (surfcy > crtc.s.TXT_YL) { surfcy = crtc.s.TXT_YL; } + surfcy = max(1, surfcy); makescrn.surfcy = surfcy; makescrn.surfstep = (SURFACE_WIDTH * charcy * 2) - (makescrn.surfcx * 8); makescrn.vramsize = min(0x800, surfcy * crtc.s.TXT_XL); @@ -341,25 +342,13 @@ void scrnupdate(void) { corestat.drawframe = 0; ddrawflash = FALSE; - if (lastdisp != dispmode) { - lastdisp = dispmode; - scrnallflash = 1; - makescrn.palandply = 1; - if (!(dispmode & SCRN_BANK1)) { - dispp = GRP_RAM + GRAM_BANK0; - dispp2 = GRP_RAM + GRAM_BANK1; - dispflg = UPDATE_TRAM | UPDATE_VRAM0; - } - else { - dispp = GRP_RAM + GRAM_BANK1; - dispp2 = GRP_RAM + GRAM_BANK0; - dispflg = UPDATE_TRAM | UPDATE_VRAM1; - } + if (lastdisp != crtc.e.dispmode) { + changemodes(); } if (scrnallflash) { scrnallflash = 0; fillupdatetmp(); - x1vram_adjust(); + changecrtc(); makescrn.scrnflash = 1; } if (makescrn.remakeattr) { @@ -368,7 +357,7 @@ void scrnupdate(void) { } if (makescrn.palandply) { makescrn.palandply = 0; - palettes(); + pal_update(); ddrawflash = 1; } if (makescrn.existblink) { @@ -439,3 +428,16 @@ void scrnupdate(void) { } } + +void makescrn_initialize(void) { + + makesub_initialize(); +} + +void makescrn_reset(void) { + + fillupdatetmp(); + changemodes(); + changecrtc(); +} +