hollyhock
Loading...
Searching...
No Matches
calc.h
1#pragma once
2
3#ifdef __cplusplus
4extern "C" {
5#else
6#define constexpr
7#endif
8
9#include <stdint.h>
10
11//Graphics stuff
12
13static uint16_t * const vram = (uint16_t *)0x8c000000; //address of the vram
14static const constexpr unsigned int width = 320; //width of the screen
15static const constexpr unsigned int height = 528; //height of the screen
16
17void line(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2, uint16_t color);
18void vline(unsigned int x, unsigned int y1, unsigned int y2, uint16_t color);
19void triangle(unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2, uint16_t colorFill, uint16_t colorLine);
20void fillScreen(uint16_t color);
21
22static inline __attribute__((pure)) uint16_t constexpr color(uint8_t R, uint8_t G, uint8_t B) {
23 return (((R<<8) & 0xF800) |
24 ((G<<3) & 0x07E0) |
25 ((B>>3) & 0x001A));
26}
27
28static inline void setPixel(unsigned int x, unsigned int y, uint32_t color) {
29 if(x < width && y < height)
30 vram[width*y + x] = color;
31}
32
33//Stuff for Initialisation and stuff
34
35void calcInit(void);
36void calcExit(void);
37
38//Stuff for the keyboard
39
40#ifndef __clang__
41__attribute__((access(write_only, 1), access(write_only, 2)))
42#endif
43void getKey(uint32_t *key1, uint32_t *key2);
44
45enum Keys1 {
46 KEY_SHIFT = (int)0x80000000,
47 KEY_CLEAR = 0x00020000, //The Power key
48 KEY_BACKSPACE = 0x00000080,
49 KEY_LEFT = 0x00004000,
50 KEY_RIGHT = 0x00008000,
51 KEY_Z = 0x00002000,
52 KEY_POWER = 0x00000040, //The exponent key
53 KEY_DIVIDE = 0x40000000,
54 KEY_MULTIPLY = 0x20000000,
55 KEY_SUBTRACT = 0x10000000,
56 KEY_ADD = 0x08000000,
57 KEY_EXE = 0x04000000,
58 KEY_EXP = 0x00000004,
59 KEY_3 = 0x00000008,
60 KEY_6 = 0x00000010,
61 KEY_9 = 0x00000020,
62};
63
64enum Keys2 {
65 KEY_KEYBOARD = (int)0x80000000,
66 KEY_UP = 0x00800000,
67 KEY_DOWN = 0x00400000,
68 KEY_EQUALS = 0x00000080,
69 KEY_X = 0x00000040,
70 KEY_Y = 0x40000000,
71 KEY_LEFT_BRACKET = 0x00000020,
72 KEY_RIGHT_BRACKET = 0x00000010,
73 KEY_COMMA = 0x00000008,
74 KEY_NEGATIVE = 0x00000004,
75 KEY_0 = 0x04000000,
76 KEY_DOT = 0x00040000,
77 KEY_1 = 0x08000000,
78 KEY_2 = 0x00080000,
79 KEY_4 = 0x10000000,
80 KEY_5 = 0x00100000,
81 KEY_7 = 0x20000000,
82 KEY_8 = 0x00200000,
83};
84
85#ifdef __cplusplus
86}
87
88static inline
89#ifndef __clang__
90__attribute__((access(write_only, 1), access(write_only, 2)))
91#endif
92void getKey(Keys1 *key1, Keys2 *key2) {
93 uint32_t k1, k2;
94 getKey(&k1, &k2);
95 *key1 = static_cast<Keys1>(k1);
96 *key2 = static_cast<Keys2>(k2);
97}
98
99static inline __attribute__((pure)) bool constexpr testKey(uint32_t key1, uint32_t, Keys1 key) {
100 return key1 & key;
101}
102
103static inline __attribute__((pure)) bool constexpr testKey(uint32_t, uint32_t key2, Keys2 key) {
104 return key2 & key;
105}
106#else
107#undef constexpr
108#endif