summaryrefslogtreecommitdiff
path: root/RegionVisualiser/Program.cs
blob: 029f3243e13ae447e4c389bfa059b56f4446eb6a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
namespace RegionVisualiser;

using Q1.Emulator;

class Program
{
    static void Main(string[] args)
    {
        Region[] regions =
        [
            new Region
            {
                Name = "ROM",
                Info = $"ProgramStart: 0x{Q1Layout.ProgramStart:X4}",
                Start = Q1Layout.Rom.start,
                Size = Q1Layout.Rom.size
            },
            new Region
            {
                Name = "Memory",
                Info =
                    $"Stack: 0x{Q1Layout.StackStart:X4}-0x{Q1Layout.StackStart + Q1Layout.StackLength:X4}"
                    + $" ({Q1Layout.StackLength}b)\n"
                    + $"Free : 0x{Q1Layout.FreeMemoryStart:X4}",
                Start = Q1Layout.Memory.start,
                Size = Q1Layout.Memory.size
            },
            new Region
            {
                Name = "Display",
                Info = $"Palette   : {Q1Layout.DisplayPaletteSize} colors\n"
                       + $"Offset    : 0x{Q1Layout.Display.start + Q1Layout.DisplayPaletteSize * 3:X4}\n"
                       + $"Dimensions: {Q1Layout.DisplayWidth}x{Q1Layout.DisplayHeight}",
                Start = Q1Layout.Display.start,
                Size = Q1Layout.Display.size
            },
            new Region
            {
                Name = "HID Module",
                Info = $"Mouse IDX  : 0x{Q1Layout.Hid.start:X4}\n"
                       + $"Mouse state: 0x{Q1Layout.Hid.start + 2:X4}\n"
                       + $"Keyboard SK: 0x{Q1Layout.Hid.start + 4:X4}",
                Start = Q1Layout.Hid.start,
                Size = Q1Layout.Hid.size
            },
        ];

        regions = regions.OrderBy(x => x.Start).ToArray();

        int lastRegionEnd = -1;
        for (int i = 0; i < regions.Length; i++)
        {
            Region r = regions[i];
            if (r.Start != lastRegionEnd + 1)
            {
                Console.WriteLine($" 0x{lastRegionEnd + 1:X4} ────" + new string('─', 50));
                Console.WriteLine($"           [ Unmapped / Reserved ({SizeFormatter.HumanReadable(r.Start - lastRegionEnd)}) ]");
            }
            BoxDrawer.DrawBox(
                $"{r.Name} ({SizeFormatter.HumanReadable(r.Size)})",
                r.Info,
                width: 50,
                head: $" 0x{r.Start:X4} ── ");

            lastRegionEnd = r.End;
        }
        
        if (lastRegionEnd + 1 != UInt16.MaxValue)
        {
            Console.WriteLine($" 0x{lastRegionEnd + 1:X4} ────" + new string('─', 50));
            Console.WriteLine($"           [ Unmapped / Reserved ({SizeFormatter.HumanReadable(UInt16.MaxValue - lastRegionEnd)}) ]");
        }
    }
}