Annotation of truecrypt/boot/windows/bootdebug.cpp, revision 1.1

1.1     ! root        1: /*
        !             2:  Copyright (c) 2008 TrueCrypt Foundation. All rights reserved.
        !             3: 
        !             4:  Governed by the TrueCrypt License 2.4 the full text of which is contained
        !             5:  in the file License.txt included in TrueCrypt binary and source code
        !             6:  distribution packages.
        !             7: */
        !             8: 
        !             9: #include "Platform.h"
        !            10: #include "Bios.h"
        !            11: #include "BootConsoleIo.h"
        !            12: #include "BootDiskIo.h"
        !            13: #include "BootDebug.h"
        !            14: 
        !            15: 
        !            16: void InitDebugPort ()
        !            17: {
        !            18:        __asm
        !            19:        {
        !            20:                mov dx, TC_DEBUG_PORT
        !            21:                mov ah, 1
        !            22:                int 0x17
        !            23:                mov dx, TC_DEBUG_PORT
        !            24:                mov ah, 0xe2
        !            25:                int 0x17
        !            26:        }
        !            27: }
        !            28: 
        !            29: 
        !            30: void WriteDebugPort (byte dataByte)
        !            31: {
        !            32:        __asm
        !            33:        {
        !            34:                mov al, dataByte
        !            35:                mov dx, TC_DEBUG_PORT
        !            36:                mov ah, 0
        !            37:                int 0x17
        !            38:        }
        !            39: }
        !            40: 
        !            41: 
        !            42: extern "C" void PrintDebug (uint32 debugVal)
        !            43: {
        !            44:        Print (debugVal);
        !            45:        PrintEndl();
        !            46: }
        !            47: 
        !            48: 
        !            49: void PrintAddress (void *addr)
        !            50: {
        !            51:        uint16 segment = uint16 (uint32 (addr) >> 16);
        !            52:        uint16 offset = uint16 (addr);
        !            53: 
        !            54:        PrintHex (segment);
        !            55:        PrintChar (':');
        !            56:        PrintHex (offset);
        !            57:        Print (" (");
        !            58:        PrintHex (GetLinearAddress (segment, offset));
        !            59:        Print (")");
        !            60: }
        !            61: 
        !            62: 
        !            63: void PrintVal (const char *message, const uint32 value, bool newLine, bool hex)
        !            64: {
        !            65:        Print (message);
        !            66:        Print (": ");
        !            67:        
        !            68:        if (hex)
        !            69:                PrintHex (value);
        !            70:        else
        !            71:                Print (value);
        !            72:        
        !            73:        if (newLine)
        !            74:                PrintEndl();
        !            75: }
        !            76: 
        !            77: 
        !            78: void PrintVal (const char *message, const uint64 &value, bool newLine, bool hex)
        !            79: {
        !            80:        Print (message);
        !            81:        Print (": ");
        !            82:        PrintHex (value);
        !            83:        if (newLine)
        !            84:                PrintEndl();
        !            85: }
        !            86: 
        !            87: 
        !            88: void PrintHexDump (byte *mem, size_t size, uint16 *memSegment)
        !            89: {
        !            90:        const size_t width = 16;
        !            91:        for (size_t pos = 0; pos < size; )
        !            92:        {
        !            93:                for (int pass = 1; pass <= 2; ++pass)
        !            94:                {
        !            95:                        size_t i;
        !            96:                        for (i = 0; i < width && pos < size; ++i)
        !            97:                        {
        !            98:                                byte dataByte;
        !            99:                                if (memSegment)
        !           100:                                {
        !           101:                                        __asm
        !           102:                                        {
        !           103:                                                push es
        !           104:                                                mov si, ss:memSegment
        !           105:                                                mov es, ss:[si]
        !           106:                                                mov si, ss:mem
        !           107:                                                add si, pos
        !           108:                                                mov al, es:[si]
        !           109:                                                mov dataByte, al
        !           110:                                                pop es
        !           111:                                        }
        !           112:                                        pos++;
        !           113:                                }
        !           114:                                else
        !           115:                                        dataByte = mem[pos++];
        !           116: 
        !           117:                                if (pass == 1)
        !           118:                                {
        !           119:                                        PrintHex (dataByte);
        !           120:                                        PrintChar (' ');
        !           121:                                }
        !           122:                                else
        !           123:                                        PrintChar (IsPrintable (dataByte) ? dataByte : '.');
        !           124:                        }
        !           125: 
        !           126:                        if (pass == 1)
        !           127:                        {
        !           128:                                pos -= i;
        !           129:                                PrintChar (' ');
        !           130:                        }
        !           131:                }
        !           132: 
        !           133:                PrintEndl ();
        !           134:        }
        !           135: }
        !           136: 
        !           137: 
        !           138: void PrintHexDump (uint16 memSegment, uint16 memOffset, size_t size)
        !           139: {
        !           140:        PrintHexDump ((byte *) memOffset, size, &memSegment);
        !           141: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.