Changeset 2049 for Whitix/trunk/user/xynth/src/server/video/bochs/server.c
- Timestamp:
- 05/17/09 10:39:07 (3 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
Whitix/trunk/user/xynth/src/server/video/bochs/server.c
r1668 r2049 13 13 #define VBE_DISPI_DATA 0x01CF 14 14 15 #define VBE_DISPI_ID4 0xB0C4 16 17 #define VBE_DISPI_ID 0x0 15 18 #define VBE_DISPI_XRES 0x1 16 19 #define VBE_DISPI_YRES 0x2 … … 24 27 #define outw(port,data) asm volatile("outw %%ax,%%dx"::"d"(port),"a"(data)) 25 28 29 static unsigned short inw(unsigned short port) 30 { 31 unsigned short retVal; 32 asm volatile("inw %%dx,%%ax" : "=a"(retVal) : "d"(port)); 33 return retVal; 34 } 35 26 36 extern int noGraphics; 27 37 28 void VbeWrite(unsigned short index, unsigned short value) 38 static unsigned short VbeRead(unsigned short index) 39 { 40 outw(VBE_DISPI_INDEX, index); 41 42 return inw(VBE_DISPI_DATA); 43 } 44 45 static void VbeWrite(unsigned short index, unsigned short value) 29 46 { 30 47 outw(VBE_DISPI_INDEX, index); … … 32 49 } 33 50 34 voidVbeSetMode(unsigned short width, unsigned short height, unsigned short bits)51 static int VbeSetMode(unsigned short width, unsigned short height, unsigned short bits) 35 52 { 36 53 VbeWrite(VBE_DISPI_ENABLE, VBE_DISPI_DISABLED); … … 39 56 VbeWrite(VBE_DISPI_BPP, bits); 40 57 VbeWrite(VBE_DISPI_ENABLE, VBE_DISPI_ENABLED | VBE_DISPI_LFB_ENABLED); 58 59 return 0; 41 60 } 42 61 43 int s_video_bochs_server_init (s_server_ conf_t *cfg)62 int s_video_bochs_server_init (s_server_t* server) 44 63 { 45 SysIoAccess(1); 64 if (VbeSetMode(BOCHS_WIDTH, BOCHS_HEIGHT, BOCHS_BPP)) 65 return -1; 66 67 server->window->surface->width=BOCHS_WIDTH; 46 68 47 if (!noGraphics)48 VbeSetMode(BOCHS_WIDTH, BOCHS_HEIGHT, BOCHS_BPP);49 50 server->window->surface->width=BOCHS_WIDTH;51 69 server->window->surface->height=BOCHS_HEIGHT; 52 70 server->window->surface->bytesperpixel=BOCHS_BPP/8; … … 60 78 server->window->surface->redlength = 8; 61 79 62 int memFd =SysOpen("/System/Devices/Special/Memory", _SYS_FILE_READ | _SYS_FILE_WRITE, 0);80 int memFd = SysOpen("/System/Devices/Special/Memory", _SYS_FILE_READ | _SYS_FILE_WRITE, 0); 63 81 64 82 server->window->surface->linear_mem_size=server->window->surface->width*server->window->surface->height*server->window->surface->bytesperpixel; … … 80 98 } 81 99 82 s_video_driver_t s_video_bochs = { 100 int BochsProbe(s_server_t* server) 101 { 102 if (VbeRead(VBE_DISPI_ID) != VBE_DISPI_ID4) 103 return 0; 104 105 return 1; 106 } 107 108 s_video_driver_t videoDriver = { 83 109 "bochs", 84 110 "/System/Devices/Special/Memory", 85 111 s_video_bochs_server_init, 86 112 s_video_bochs_server_uninit, 113 BochsProbe, 87 114 };
