diff options
-rw-r--r-- | src/savage_driver.c | 26 | ||||
-rw-r--r-- | src/savage_driver.h | 9 | ||||
-rw-r--r-- | src/savage_vbe.c | 12 | ||||
-rw-r--r-- | src/savage_vbe.h | 1 |
4 files changed, 34 insertions, 14 deletions
diff --git a/src/savage_driver.c b/src/savage_driver.c index 4c8386d..658c925 100644 --- a/src/savage_driver.c +++ b/src/savage_driver.c @@ -269,7 +269,7 @@ typedef enum { ,OPTION_SHADOW_STATUS ,OPTION_CRT_ONLY ,OPTION_TV_ON - ,OPTION_TV_PAL + ,OPTION_TVSTD ,OPTION_FORCE_INIT ,OPTION_OVERLAY ,OPTION_T_KEY @@ -302,7 +302,7 @@ static const OptionInfoRec SavageOptions[] = { OPTION_SHADOW_STATUS, "ShadowStatus", OPTV_BOOLEAN, {0}, FALSE }, { OPTION_CRT_ONLY, "CrtOnly", OPTV_BOOLEAN, {0}, FALSE }, { OPTION_TV_ON, "TvOn", OPTV_BOOLEAN, {0}, FALSE }, - { OPTION_TV_PAL, "PAL", OPTV_BOOLEAN, {0}, FALSE }, + { OPTION_TVSTD, "TVStandard", OPTV_STRING, {0}, FALSE }, { OPTION_FORCE_INIT,"ForceInit", OPTV_BOOLEAN, {0}, FALSE }, { OPTION_OVERLAY, "Overlay", OPTV_ANYSTR, {0}, FALSE }, { OPTION_T_KEY, "TransparencyKey", OPTV_ANYSTR, {0}, FALSE }, @@ -1374,20 +1374,26 @@ static Bool SavagePreInit(ScrnInfoPtr pScrn, int flags) xf86DrvMsg( pScrn->scrnIndex, X_CONFIG, "Option: CrtOnly enabled\n" ); - if( xf86GetOptValBool( psav->Options, OPTION_TV_ON, &psav->TvOn)) { - psav->PAL = FALSE; - SavageGetTvMaxSize(psav); + psav->tvStd = TV_STD_UNDEFINED; + if ((s = xf86GetOptValString(psav->Options, OPTION_TVSTD))) { + if (!strcasecmp("pal", s)) + psav->tvStd = TV_STD_PAL; + else if (!strcasecmp("ntsc", s)) + psav->tvStd = TV_STD_NTSC; + else if (!strcasecmp("ntsc-j", s) || (!strcasecmp("ntscj", s))) + psav->tvStd = TV_STD_NTSC_J; + else { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Invalid TV Standard: %s\n", s); + } } - if( xf86GetOptValBool( psav->Options, OPTION_TV_PAL, &psav->PAL)) { + if( xf86GetOptValBool( psav->Options, OPTION_TV_ON, &psav->TvOn)) { SavageGetTvMaxSize(psav); - psav->TvOn = TRUE; } if( psav->TvOn ) xf86DrvMsg( pScrn->scrnIndex, X_CONFIG, - "TV enabled in %s format\n", - psav->PAL ? "PAL" : "NTSC" ); + "TV enabled\n"); psav->ForceInit = 0; if( xf86GetOptValBool( psav->Options, OPTION_FORCE_INIT, &psav->ForceInit)) @@ -4608,7 +4614,7 @@ SavageDDC1(ScrnInfoPtr pScrn) static void SavageGetTvMaxSize(SavagePtr psav) { - if( psav->PAL ) { + if( psav->tvStd == TV_STD_PAL) { psav->TVSizeX = 800; psav->TVSizeY = 600; } diff --git a/src/savage_driver.h b/src/savage_driver.h index d5b1a46..c5d755f 100644 --- a/src/savage_driver.h +++ b/src/savage_driver.h @@ -170,6 +170,13 @@ typedef struct } SavageEntRec, *SavageEntPtr; +typedef enum { + TV_STD_UNDEFINED, + TV_STD_PAL, + TV_STD_NTSC, + TV_STD_NTSC_J +} SavageTVStdType; + #define VGAIN8(addr) MMIO_IN8(psav->MapBase+0x8000, addr) #define VGAIN16(addr) MMIO_IN16(psav->MapBase+0x8000, addr) #define VGAIN(addr) MMIO_IN32(psav->MapBase+0x8000, addr) @@ -367,7 +374,7 @@ typedef struct _Savage { Bool ForceShadowStatus; /* true if explicitly set in conf */ Bool CrtOnly; Bool TvOn; - Bool PAL; + SavageTVStdType tvStd; Bool ForceInit; int iDevInfo; int iDevInfoPrim; diff --git a/src/savage_vbe.c b/src/savage_vbe.c index 06796b4..81ea289 100644 --- a/src/savage_vbe.c +++ b/src/savage_vbe.c @@ -154,12 +154,18 @@ SavageSetVESAMode( SavagePtr psav, int n, int Refresh ) xf86ExecX86int10( psav->pVbe->pInt10 ); - /* Set TV type if TV is on. */ - if( psav->TvOn ) { + /* Set TV type if TV is on and user configured the type */ + if( psav->TvOn && psav->tvStd != TV_STD_UNDEFINED ) { + int tv_format = BIOS_TV_PAL; + + if (psav->tvStd == TV_STD_NTSC) + tv_format = BIOS_TV_NTSC; + else if (psav->tvStd == TV_STD_NTSC_J) + tv_format = BIOS_TV_NTSC_J; SavageClearVM86Regs( psav->pVbe->pInt10 ); psav->pVbe->pInt10->ax = 0x4f14; /* S3 extensions */ psav->pVbe->pInt10->bx = 0x0007; /* TV extensions */ - psav->pVbe->pInt10->cx = psav->PAL ? 0x08 : 0x04; + psav->pVbe->pInt10->cx = tv_format; psav->pVbe->pInt10->dx = 0x0c; xf86ExecX86int10( psav->pVbe->pInt10 ); } diff --git a/src/savage_vbe.h b/src/savage_vbe.h index 45d4a51..f8b882d 100644 --- a/src/savage_vbe.h +++ b/src/savage_vbe.h @@ -61,6 +61,7 @@ This software has NO WARRANTY. Use it at your own risk. #define BIOS_CRT1_ONLY 0x01 #define BIOS_LCD_ONLY 0x02 +#define BIOS_TV_NTSC_J 0x00 #define BIOS_TV_NTSC 0x04 #define BIOS_TV_PAL 0x08 #define BIOS_TV_ONLY 0x0c |