Start of boot video mode support. Not finished.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26749 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
e1ebbfbbd8
commit
e07a1266f0
@ -16,6 +16,7 @@
|
|||||||
#include <boot/kernel_args.h>
|
#include <boot/kernel_args.h>
|
||||||
#include <util/list.h>
|
#include <util/list.h>
|
||||||
#include <drivers/driver_settings.h>
|
#include <drivers/driver_settings.h>
|
||||||
|
#include <GraphicsDefs.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -32,6 +33,103 @@
|
|||||||
|
|
||||||
// XXX: use falcon video monitor detection and build possible mode list there...
|
// XXX: use falcon video monitor detection and build possible mode list there...
|
||||||
|
|
||||||
|
// which API to use to handle this mode
|
||||||
|
// cf. http://toshyp.atari.org/004.htm
|
||||||
|
enum {
|
||||||
|
MODETYPE_XBIOS_ST,
|
||||||
|
MODETYPE_XBIOS_TT,
|
||||||
|
MODETYPE_XBIOS_FALCON,
|
||||||
|
MODETYPE_CENTSCREEN,
|
||||||
|
MODETYPE_CRAZYDOTS,
|
||||||
|
MODETYPE_CT60,
|
||||||
|
MODETYPE_NATFEAT
|
||||||
|
};
|
||||||
|
|
||||||
|
class ModeAPI {
|
||||||
|
public:
|
||||||
|
ModeAPI(const char *name) { fName = name; };
|
||||||
|
~ModeAPI() {};
|
||||||
|
const char *Name() const { return fName; };
|
||||||
|
virtual status_t Enumerate() = 0;
|
||||||
|
virtual status_t Get(struct video_mode *mode) = 0;
|
||||||
|
virtual status_t Set(const struct video_mode *mode) = 0;
|
||||||
|
private:
|
||||||
|
const char *fName;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct video_mode {
|
||||||
|
list_link link;
|
||||||
|
ModeAPI *ops;
|
||||||
|
color_space space;
|
||||||
|
uint16 mode;
|
||||||
|
uint16 width, height, bits_per_pixel;
|
||||||
|
uint32 bytes_per_row;
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct list sModeList;
|
||||||
|
static video_mode *sMode, *sDefaultMode;
|
||||||
|
|
||||||
|
|
||||||
|
// #pragma mark - Falcon XBIOS API
|
||||||
|
|
||||||
|
class FalconModeAPI : public ModeAPI {
|
||||||
|
public:
|
||||||
|
FalconModeAPI() : ModeAPI("Falcon XBIOS") {};
|
||||||
|
~FalconModeAPI() {};
|
||||||
|
virtual status_t Enumerate();
|
||||||
|
virtual status_t Get(struct video_mode *mode);
|
||||||
|
virtual status_t Set(const struct video_mode *mode);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
FalconModeAPI::Enumerate()
|
||||||
|
{
|
||||||
|
int16 monitor;
|
||||||
|
monitor = VgetMonitor();
|
||||||
|
switch (monitor) {
|
||||||
|
case 0:
|
||||||
|
panic("Monochrome ??");
|
||||||
|
break;
|
||||||
|
//case 4 & 5: check for CT60
|
||||||
|
case 1:
|
||||||
|
default:
|
||||||
|
dprintf("monitor type %d\n", monitor);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
FalconModeAPI::Get(struct video_mode *mode)
|
||||||
|
{
|
||||||
|
int16 m = VsetMode(VM_INQUIRE);
|
||||||
|
int bpp;
|
||||||
|
int width = 320;
|
||||||
|
if (m < 0)
|
||||||
|
return B_ERROR;
|
||||||
|
bpp = 1 << (m & 0x0007);
|
||||||
|
if (m & 0x0008)
|
||||||
|
width *= 2;
|
||||||
|
bool vga = (m & 0x0010) != 0;
|
||||||
|
bool pal = (m & 0x0020) != 0;
|
||||||
|
bool overscan = (m & 0x0040) != 0;
|
||||||
|
bool st = (m & 0x0080) != 0;
|
||||||
|
bool interlace = (m & 0x0100) != 0;
|
||||||
|
return ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
FalconModeAPI::Set(const struct video_mode *mode)
|
||||||
|
{
|
||||||
|
return ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static FalconModeAPI sFalconModeAPI;
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark -
|
// #pragma mark -
|
||||||
|
|
||||||
@ -133,6 +231,7 @@ platform_init_video(void)
|
|||||||
// ToDo: implement me
|
// ToDo: implement me
|
||||||
dprintf("current video mode: \n");
|
dprintf("current video mode: \n");
|
||||||
dprintf("Vsetmode(-1): 0x%08x\n", VsetMode(VM_INQUIRE));
|
dprintf("Vsetmode(-1): 0x%08x\n", VsetMode(VM_INQUIRE));
|
||||||
|
sFalconModeAPI.Enumerate();
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,13 @@
|
|||||||
|
|
||||||
#include <SupportDefs.h>
|
#include <SupportDefs.h>
|
||||||
|
|
||||||
|
/* 4CCs for custom colorspaces */
|
||||||
|
// XXX: move to kernel/app_server header ?
|
||||||
|
#define ATARI_IBP1 'IBP1'
|
||||||
|
#define ATARI_IBP2 'IBP2'
|
||||||
|
#define ATARI_IBP4 'IBP4'
|
||||||
|
#define ATARI_IBP8 'IBP8'
|
||||||
|
|
||||||
|
|
||||||
class Menu;
|
class Menu;
|
||||||
class MenuItem;
|
class MenuItem;
|
||||||
|
Loading…
Reference in New Issue
Block a user