понедельник, 10 марта 2008 г.

Microsoft Singularity source

Роюсь в исходниках Singularity. Microsoft Research, определенно, жжот:

В Microsoft.Singularity.Crypto.PublicKey.Random:

 public Random() : this(250787849) {

            // John DeTreville's Social Security Number

        }



Кусок драйвера S3 Trio на Sing#, Microsoft.Singularity.Drivers.S3Trio64.S3Device:

public void set_1024x60Hz_16bpp()

        {

            CrtAddrPort.Write16(0x0034);  // S3R4 - Backwards Compatibility 3

 

            IndxOut(CrtAddrPort, new byte[] {

                0x4b,0xff,0x00,0x8c,0x08,0x8a,0x25,0xf5,

                0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,

                0x02,0x0f,0xff,0x00,0x60,0xff,0x21,0xeb,

                0xff } );

 

            CrtAddrPort.Write8(0x51);  // overflow bits for CR13

            byte bt=CrtDataPort.Read8();//setting 4th bit , resetting 5,6 & 7 th bit

            bt &= 0x0f;                    // bit 5,4 = 01

            bt |= 0x10;

            CrtDataPort.Write8(bt);

 

            CrtAddrPort.Write16(0x355d);

            CrtAddrPort.Write16(0x005e);

            CrtAddrPort.Write16(0x1050);  // 16 bit pixel length

            CrtAddrPort.Write16(0x5067);  // mode 10: 16 bit color, 1 VCLK/pixel

            CrtAddrPort.Write16(0x026d);  // recover pixel on right hand edge in 16 bpp mode

        }

 

        // Wait for the vertical blanking interval on the chip.

        public void Wait_VSync()

        {

            byte bt;

 

            // It's possible that this routine will get called

            // when the 911 is in a zombie state, meaning there is no

            // vertical sync being generated.  This is why we have some long

            // time out loops here.

 

            // First wait for getting into vertical blanking.

 

            for (int i = 0; i < 0x100000; i++) {

                if ((SysCtrlPort.Read8() & 0x08)!=0) {

                    break;

                }

            }

 

            //

            // We are either in a vertical blanking interval or we have timed out.

            // Wait for the Vertical display interval.

            // This is done to make sure we exit this routine at the beginning

            // of a vertical blanking interval, and not in the middle or near

            // the end of one.

            //

            for (int i = 0; i < 0x100000; i++) {

                if ((SysCtrlPort.Read8() & 0x08)==0) {

                    break;

                }

            }

 

            //

            // Now wait to get into the vertical blank interval again.

            //

            for (int i = 0; i < 0x100000; i++) {

                if ((SysCtrlPort.Read8() & 0x08)!=0) {

                    break;

                }

            }

        }



Смотря на такой код, понимаешь, что Макконнелл называет внутренней сложностью проблемы, почти не устранимой изменением инструмента: писать бухгалтерию на C все ещё спокойнее, чем драйвера на .Net :)

Комментариев нет: