summaryrefslogtreecommitdiff
path: root/ROMs/lib.c
blob: cd666b9a8b6759a28a103ee47c2065f3eb38eb0c (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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#define SK_MAX 256
#define SK_NL 13
#define SK_BS 8
#define SK_SHIFT 160
#define SK_A 65
#define SK_B 66
#define SK_C 67
#define SK_D 68
#define SK_E 69

#define MS_LEFT 1
#define MS_RIGHT 2
#define MS_MIDDLE 4

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define SCREEN_MAX 128 * 64

#define true 1
#define false 0

#define COLOR_BLACK 8
#define COLOR_RED 1
#define COLOR_GREEN 2
#define COLOR_BLUE 3
#define COLOR_TRANSPARENT 0

int setPixel(int x, int y, int c)
{
    char* screenStart = 0x402F;
    int i = (y * SCREEN_WIDTH) + x;
    screenStart[i] = c;
}

int setPixel(int i, int c)
{
    char* screenStart = 0x402F;
    screenStart[i] = c;
}

int clear(int c)
{
    char* screenStart = 0x402F;
    for (int i = 0; i < SCREEN_MAX; i++)
    {
        screenStart[i] = c;
    }
}

int getKeyState(int scanCode)
{
    char* hid = 0x6033;
    int index = scanCode / 8;
    int bit   = scanCode % 8;

    int val = hid[index - 1];
    return (val & (1 << bit)) != 0;
}

int getPressedKey()
{
    for (int sk = 0; sk < SK_MAX; sk++)
    {
        if (getKeyState(sk) && sk != SK_SHIFT)
            return sk;
    }
    return 0;
}

int readKey()
{
    while (true)
    {
        int sk = getPressedKey();
        if (sk != 0)
            return sk;
    }
}

int getMouseIndex()
{
    return *(0x602F);
}

int getMouseState()
{
    return *(0x602F + 2);
}