From: Gwenole B. <gb...@di...> - 2002-03-18 18:49:57
|
On Sun, 17 Mar 2002, Christian Bauer wrote: > > 1) VidLocal.dm_present=0 so I run the code though I am using MacOS 8.0+ > > This seems suspicious. Under MacOS 8.0 I have dm_present=1 and also valid > handles in MainDevice and CrsrDevice. I have "valid" handles at the crash time. But they were handles pointing to the old screen buffer. When the XPRAM file is empty, a cscSetMode command is issued even prior to having the HappyFace. At this time, the MainDevice and CrsrDevice handles are nil. This is checked by entering cxmon at the end of video.cpp/switch_mode(). I came up with two "traces" to which handle is containing the old screen buffer address. One under Linux/pcc and the other under Linux/x86. Both used the same ROM (LC/Quadra 630) and system (MacOS 8.0fr). ### Linux/ppc VideoDriverControl(pb=0x100fb06, dce=<value lost>): SetMode 0080 uint32 gdev = ReadMacInt32(0x100faea || 0x100fb4e); gdev = ReadMacInt32(0x2120 || 0x100f930 || 0x100f944 || 0x100fada || 0x100faee || 0x100fb28) uint32 pmap = ReadMacInt32((0x9460 || 0x100fb26) + 0x16); pmap = ReadMacInt32(0x2110 || 0x0100fab6); WriteMacInt32(0x94b0, frame_base); This reads as follows: 0x2120 is some *Device handle that will lead to a baseAddr containing the old screen buffer base. i.e. **((**<SomeDevice=0x2120>).gdPMap).baseAddr = <old_frame_base> ### Linux/x86 VideoDriverControl(pb=0x100fb06, dce=0x9240): SetMode 0080 uint32 gdev = ReadMacInt32(0x100faea || 0x100fb4e); gdev = ReadMacInt32(0x2120 || 0x100f930 || 0x100f944 || 0x100fada || 0x100faee || 0x100fb28) uint32 pmap = ReadMacInt32((0x9490 || 0x100fb26) + 0x16); pmap = ReadMacInt32(0x2110 || 0x0100fb3c); WriteMacInt32(0x94e0, frame_base); Note that in both runs, 0x2120 is a recurrent valid handle to some Device leading to the old frame_base. Does anyone know what sort of table is at 0x2120? BTW, I also looked up the UTableBase and only found at the 48th entry the handle 0x2124. I am a little confused by now. Bye, Gwenole. |