From 636e5787dec7bbdbcbb0c776e8d5fb7fcb06a7c3 Mon Sep 17 00:00:00 2001 From: giomba Date: Fri, 13 Oct 2023 21:39:40 +0200 Subject: [PATCH] Add documentation about C/ASM calling conventions. --- README.md | 41 +++++++++++++++++++++++++++++++++++++++++ src/main.c | 16 ++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/README.md b/README.md index bad3e2e..554e8bf 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,44 @@ Demo for the Sanco 800x. The purpose of this demo is mainly to thinker with the hardware of the mentioned computer, since we are reverse-engineering it, and even writing an emulator. This repository is part of the [CEDA project](https://github.com/GLGPrograms/ceda-home) by [Retrofficina GLG Programs](https://retrofficina.glgprograms.it/). + +## C/ASM calling conventions +Because the folks at z88dk were not able to put this plain and simple table +in their messy documentation :smile: + +### Prologue +``` + push ix + ld ix,$0000 + add ix,sp +``` + +### Parameters stack +``` + uint8_t + ix+$04 + + uint8_t, uint8_t + ix+$04, ix+$05 +``` + +### Access call parameters +``` + ld a,(ix+$04) + ld a,(ix+$05) +``` + +### Return value +``` + uint32_t de (msb), hl (lsb) + uint16_t hl + uint8_t l + void* hl +``` + +### Epilogue +``` + pop ix + ret +``` + diff --git a/src/main.c b/src/main.c index 699bde2..db728f9 100644 --- a/src/main.c +++ b/src/main.c @@ -12,3 +12,19 @@ int main(void) { return 0; } + +uint8_t ret_u8(void) { + return 0x01; +} + +uint16_t ret_u16(void) { + return 0x0123; +} + +uint32_t ret_u32(void) { + return 0x01234567; +} + +void *ret_ptr(void) { + return (void *)0x1234; +}