MS-DOS 메모리 배치 문서의 검증 코드다. if __name__ == "__main__": 아래가 자체 테스트다.

# 49.MS-DOS 메모리 배치 문서의 주소 계산 확인. 실행: python3 49_msdos-memory-map_verify.py
# 실제 DOS 메모리를 읽지 않는다. 문서 메모리 맵의 경계 주소로 크기만 계산한다.

def linear(seg, off):
    """실주소 모드: 세그먼트 × 16 + 오프셋 (20비트)."""
    return ((seg << 4) + off) & 0xFFFFF


K = 1024

if __name__ == "__main__":
    # 1MB = 2^20바이트 = 00000h ~ FFFFFh
    assert 2 ** 20 == 0x100000 and 0xFFFFF + 1 == 1024 * K
    # 메모리 맵의 경계: 00000, 00400, A0000, B8000, C0000, F0000, FFFFF
    assert 0x00400 == 1024 == 256 * 4          # 인터럽트 벡터 표: 칸 256개 × 4바이트
    assert 0xA0000 == 640 * K                  # 640K RAM
    assert 0xC0000 - 0xA0000 == 128 * K        # VRAM 전체
    assert 0xB8000 - 0xA0000 == 96 * K         # Video Graphics
    assert 0xC0000 - 0xB8000 == 32 * K         # Video Text & Graphics
    assert 0xF0000 - 0xC0000 == 192 * K        # Reserved
    assert 0x100000 - 0xF0000 == 64 * K        # ROM BIOS
    assert 640 + 128 + 192 + 64 == 1024
    # 08F1:0100 -> 09010h
    assert linear(0x08F1, 0x0100) == 0x09010
    # BIOS 데이터 영역: 세그먼트 0040h = 선형 00400h
    assert linear(0x0040, 0x0000) == 0x00400
    assert linear(0x0040, 0x0017) == 0x00417   # 키보드 상태 플래그
    # 글자 화면 메모리 B8000h는 B800:0000
    assert linear(0xB800, 0x0000) == 0xB8000
    # ROM BIOS F000:0000 ~ F000:FFFF
    assert linear(0xF000, 0x0000) == 0xF0000 and linear(0xF000, 0xFFFF) == 0xFFFFF
    # 한 세그먼트는 64KB
    assert 0xFFFF + 1 == 64 * K
    # 카드 C2: 0040:001E -> 0041Eh, B800:00A0 -> B80A0h
    assert linear(0x0040, 0x001E) == 0x0041E
    assert linear(0xB800, 0x00A0) == 0xB80A0
    print("ALL CHECKS PASSED")