ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/video.cpp
(Generate patch)

Comparing BasiliskII/src/video.cpp (file contents):
Revision 1.1 by cebix, 1999-10-03T14:16:25Z vs.
Revision 1.8 by cebix, 2001-05-31T15:36:33Z

# Line 1 | Line 1
1   /*
2   *  video.cpp - Video/graphics emulation
3   *
4 < *  Basilisk II (C) 1997-1999 Christian Bauer
4 > *  Basilisk II (C) 1997-2001 Christian Bauer
5   *  Portions (C) 1997-1999 Marc Hellwig
6   *
7   *  This program is free software; you can redistribute it and/or modify
# Line 54 | Line 54 | struct {
54   *  Driver Open() routine
55   */
56  
57 < int16 VideoOpen(uint32 pb, uint32 dce)
57 > int16 VideoDriverOpen(uint32 pb, uint32 dce)
58   {
59 <        D(bug("VideoOpen\n"));
59 >        D(bug("VideoDriverOpen\n"));
60  
61          // Init local variables
62          VidLocal.desc = &VideoMonitor;
# Line 80 | Line 80 | int16 VideoOpen(uint32 pb, uint32 dce)
80   *  Driver Control() routine
81   */
82  
83 < int16 VideoControl(uint32 pb, uint32 dce)
83 > int16 VideoDriverControl(uint32 pb, uint32 dce)
84   {
85          uint16 code = ReadMacInt16(pb + csCode);
86          uint32 param = ReadMacInt32(pb + csParam);
87 <        D(bug("VideoControl %d\n", code));
87 >        D(bug("VideoDriverControl %d\n", code));
88          switch (code) {
89  
90                  case cscSetMode:                // Set color depth
# Line 154 | Line 154 | int16 VideoControl(uint32 pb, uint32 dce
154                          uint32 p = VidLocal.desc->mac_frame_base;
155                          uint32 pat = pattern[VidLocal.desc->mode];
156                          for (uint32 y=0; y<VidLocal.desc->y; y++) {
157 <                                uint32 p2 = p;
158 <                                for (uint32 x=0; x<VidLocal.desc->bytes_per_row / 4; x++) {
159 <                                        WriteMacInt32(p2, pat);
160 <                                        p2 += 4;
157 >                                for (uint32 x=0; x<VidLocal.desc->bytes_per_row; x+=4) {
158 >                                        WriteMacInt32(p + x, pat);
159                                          if (VidLocal.desc->mode == VMODE_32BIT)
160                                                  pat = ~pat;
161                                  }
# Line 183 | Line 181 | int16 VideoControl(uint32 pb, uint32 dce
181                          return noErr;
182  
183                  default:
184 <                        printf("WARNING: Unknown VideoControl(%d)\n", code);
184 >                        printf("WARNING: Unknown VideoDriverControl(%d)\n", code);
185                          return controlErr;
186          }
187   }
# Line 193 | Line 191 | int16 VideoControl(uint32 pb, uint32 dce
191   *  Driver Status() routine
192   */
193  
194 < int16 VideoStatus(uint32 pb, uint32 dce)
194 > int16 VideoDriverStatus(uint32 pb, uint32 dce)
195   {
196          uint16 code = ReadMacInt16(pb + csCode);
197          uint32 param = ReadMacInt32(pb + csParam);
198 <        D(bug("VideoStatus %d\n", code));
198 >        D(bug("VideoDriverStatus %d\n", code));
199          switch (code) {
200  
201                  case cscGetPageCnt:                     // Get number of pages
# Line 244 | Line 242 | int16 VideoStatus(uint32 pb, uint32 dce)
242  
243                  case cscGetModeTiming:          // Get video timing for mode
244                          D(bug(" GetModeTiming mode %08lx\n", ReadMacInt32(param + csTimingMode)));
245 <                        WriteMacInt32(param + csTimingFormat, 'decl');
245 >                        WriteMacInt32(param + csTimingFormat, FOURCC('d', 'e', 'c', 'l'));
246                          WriteMacInt32(param + csTimingData, 220);               // 21" Multiscan
247                          WriteMacInt32(param + csTimingFlags, 0x0f);             // Mode valid, safe, default and shown in Monitors panel
248                          return noErr;
249  
250                  case cscGetModeBaseAddress:     // Get frame buffer base address
251                          D(bug(" GetModeBaseAddress\n"));
252 <                        WriteMacInt32(param + csBaseAddr, VidLocal.desc->mac_frame_base);
252 >                        WriteMacInt32(param + csBaseAddr, VidLocal.desc->mac_frame_base);       // Base address of video RAM for the current DisplayModeID and relative bit depth
253 >                        return noErr;
254 >
255 >                case cscGetMode:                // REQUIRED for MacsBug
256 >                        D(bug(" GetMode\n"));
257 >                        WriteMacInt16(param + csPageMode, 0x80);
258 >                        WriteMacInt32(param + csPageData, 0x80);        // Unused
259 >                        WriteMacInt16(param + csPagePage, 0);   // Current display page
260 >                        WriteMacInt32(param + csPageBaseAddr, VidLocal.desc->mac_frame_base);
261                          return noErr;
262  
263                  default:
264 <                        printf("WARNING: Unknown VideoStatus(%d)\n", code);
264 >                        printf("WARNING: Unknown VideoDriverStatus(%d)\n", code);
265                          return statusErr;
266          }
267   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines