Add instructions to compile C programs.

This commit is contained in:
giomba 2023-10-08 20:50:13 +02:00
parent d00b379598
commit 1d057626e4
2 changed files with 62 additions and 1 deletions

View File

@ -17,4 +17,22 @@ Here you can find some utilities to jump start your computer from scratch!
:warning: Mess with electronics only if you know what you are doing. Beware: you may harm your computer, or even yourself! Everything you do is at your own risk.
## How to
- to be written
Just some random notes.
Compile a C program:
```sh
zcc +z80 -create-app --no-crt -pragma-define:REGISTER_SP=0xC000 -m -o build/main main.c
```
Important: this is a linker-less and C-runtime-less compilation, so be very very careful what you do.
Example minimal starter:
```c
int entrypoint(void) {
__asm
ld sp,0xc000
__endasm;
main();
for (;;)
;
}
```

43
main.c Normal file
View File

@ -0,0 +1,43 @@
#include <stdint.h>
char* const VIDEO_MEMORY = (char* const)0xd000;
static void vprint(int row, int column, const char* str);
static void out(uint8_t ioaddr, uint8_t value);
int entrypoint() {
__asm
ld sp,0xc000
__endasm;
vprint(20,10,"hello world");
out(0x81, 0x80);
vprint(20,15,"aaaaa");
for (;;)
;
}
static void out(uint8_t ioaddr, uint8_t value) {
__asm
ld ix,$0000
add ix,sp
ld b,(ix + 5)
ld c,(ix + 4)
out (c),b
__endasm;
}
static void cls(void) {
for (int i = 0; i < 2000; ++i) {
VIDEO_MEMORY[i] = 0x20;
}
}
static void vprint(int row, int column, const char* str) {
char* p = VIDEO_MEMORY + row * 80 + column;
while (*str != '\0') {
*p++ = *str++;
}
}