Blame

ebe99f Bob Green 2026-03-19 08:31:29
1
# Machine Library
2
3
I've created a library targeting the hardware specific aspects of programming the Sbc-3. I believe that it should work with the other boards from [Mega Micros](https://mega-micros.co.uk/index.htm), but since I don't have access to anything but the Sbc-3, can't confirm that.
4
dca070 Bob Green 2026-05-21 09:36:22
5
::: info
b51540 Bob Green 2026-05-21 09:35:14
6
Note. if compiling for the 68000, you'll need to change the target cpu in `src/stdenv.mk` and `src/lib/Makefile` by changing the **CPU** macro.
dca070 Bob Green 2026-05-21 09:36:22
7
:::
ebe99f Bob Green 2026-03-19 08:31:29
8
To use the library, just include the following in your C sourcecode:
9
```c
10
#include <machine.h>
11
```
2a20d4 Bob Green 2026-03-21 15:03:23
12
13
## Serial I/O
b26e81 Bob Green 2026-03-21 15:10:58
14
```C
15
int _char_available(void);
16
char _getchar(void);
17
void _putchar(char c);
18
```
9601f3 Bob Green 2026-05-27 09:23:37
19
::: info
20
Note. The xr68681 is clocked at 7.3728MHz, meaning you'll get double the baud rate listed in the data sheet as the datasheet assumes ha;f that rate. It will also affect the internal counter when it's clocked by the external clock.
21
:::
22
b26e81 Bob Green 2026-03-21 15:10:58
23
2a20d4 Bob Green 2026-03-21 15:03:23
24
## LED Control
25
There's a block of 10 leds (LD7 on the SBC3-b3), and six of them can be used for anything you like. Led1 is furthest from the cpu:
d90362 Bob Green 2026-03-21 15:03:37
26
2a20d4 Bob Green 2026-03-21 15:03:23
27
| LED # | Used for |
28
|:------|:---------|
29
| 1 | Indicates that the board is being powered via an external 5v supply. |
30
| 2 | Indicated that the board is being powered via the ATX power connector. |
31
| 3 | Connected to the ~RTS pin on the duart channel B. |
32
| 4 | Connected to the ~RTS pin on the duart channel A. |
33
| 5 | Available to user. |
34
| 6 | Available to user. |
35
| 7 | Available to user. |
36
| 8 | Available to user. |
37
| 9 | Available to user. |
38
| 10 | Available to user. |
91e139 Bob Green 2026-03-21 15:06:40
39
40
Two functions are provided, one to turn on a led, and another to turn it off.
41
42
```C
43
void set_led(int lednum);
44
void clear_led(int lednum);
45
```
46
Where `lednum` is an integer in the range of 5 through to 10, as per the table above. Any other value will be silently ignored.
0c5486 Bob Green 2026-03-24 15:10:57
47
b69dc8 Bob Green 2026-03-24 15:11:57
48
## PI/T
49
50
```C
51
void _pit_reset(void);
52
unsigned int _pit_get_counter(void);
53
unsigned int _pit_set_counter(unsigned int);
3f2fd6 Bob Green 2026-05-27 08:42:03
54
void pit_set_a(uint8_t val);
55
void pit_set_bits_a(uint8_t bits);
56
void pit_clear_bits_a(uint8_t bits);
57
void pit_set_b(uint8_t val);
58
void pit_set_bits_b(uint8_t bits);
59
void pit_clear_bits_b(uint8_t bits);
b69dc8 Bob Green 2026-03-24 15:11:57
60
```
61
898676 Bob Green 2026-05-27 09:23:06
62
::: info
63
Note. The PI/T is clocked at 10.0MHz
64
:::
0c5486 Bob Green 2026-03-24 15:10:57
65
## Compact Flash
66
67
```C
68
void _cf_wait_busy(void);
69
void _cf_wait_data(void);
70
void cf_init(void);
910d81 Bob Green 2026-05-21 09:58:31
71
int cf_identify(uint8_t drive_num, cf_info_t *info);
0c5486 Bob Green 2026-03-24 15:10:57
72
int cf_read(uint8_t drive_num, uint32_t sector, uint8_t *buffer);
73
```
d83b67 Bob Green 2026-03-24 15:21:18
74
75
## Vectors and Interrupts
76
77
```C
9463ec Bob Green 2026-03-24 15:22:39
78
unsigned int *_get_vectors_base(void);
fc90ec Bob Green 2026-03-29 13:27:43
79
unsigned int get_isr_handler(int vector_number);
80
unsigned int set_isr_handler(int vector_number, void isr(void));
d83b67 Bob Green 2026-03-24 15:21:18
81
```
910d81 Bob Green 2026-05-21 09:58:31
82
1e0c28 Bob Green 2026-05-21 09:47:07
83
`_get_vectors_base()` return the contents of the `ivr` register on the 68030 or 0 on the 68000.
41d04d Bob Green 2026-05-21 09:47:20
84
1e0c28 Bob Green 2026-05-21 09:47:07
85
`get_isr_handler` returns the address of the handler currently configured to handle the exception specified by `vector_number`.
41d04d Bob Green 2026-05-21 09:47:20
86
f80b2d Bob Green 2026-05-21 09:49:31
87
`set_isr_handler()` sets a handler for the exception specified by `vector_number`. It returns the address of the handler that it replaced, or `0xffffffff` if the `vector_number` is out of range.
633040 Bob Green 2026-03-24 15:33:07
88
f01b84 Bob Green 2026-03-24 15:41:57
89
## `$I^2c$` Bus
633040 Bob Green 2026-03-24 15:33:07
90
91
```C
92
```
398ef5 Bob Green 2026-05-21 09:41:14
93
94
## Safe Memory Access
95
96
```C
97
int peek(uint8_t *addr);
98
int poke(uint8_t *addr, uint8_t val);
99
```
100
`peek()` attempts to read a byte from memory, returning the value read, or -1 if the read failed due to a Bus Error. Similarly, `poke()` attempts to write a byte to memory, returning -1 on a Bus Error.