Что-то вышло замудрено.

сборка:
Код:
set PATH=d:\!!____________prj\SDCC\bin\;%PATH%
sdcc -mz80 --no-std-crt0 --code-loc 0x8000 --data-loc 0 pi.c

hexameter pi.ihx
pause
в итоге получаю

Код:
?ASlink-Warning-Undefined Global '_putchar' referenced by module 'vprintf'
Как подпихнуть crt0.s ? и как его нужно изменить для печати? сов7 туплю.

- - - Добавлено - - -

ага, на сайте CPC было решение:

putchar_zx.s
Код:
;; FILE: putchar.s
;; Modified to suit execution on the Amstrad CPC
;; by H. Hansen 2003
;; Original lines has been marked out!

  .area _CODE
_putchar::       
_putchar_rr_s:: 
          ld      hl,#2
          add     hl,sp
        
          ld      a,(hl)
          rst 16 ; call    0xBB5A
          ret
           
_putchar_rr_dbs::

          ld      a,e
          rst 16 ; call    0xBB5A
          ret
причем ассемблер так прост, что давится на rst 10h

сборка:
Код:
set PATH=d:\!!____________prj\SDCC\bin\;%PATH%

sdasz80 -o putchar_zx.s

sdcc -mz80 --code-loc 0xA000 --data-loc 0 --no-std-crt0 putchar_zx.rel pi.c

hexameter pi.ihx
pause
Тащемта, новые способы создания носителей не интересны, наверное можно взять appmake.exe из z88 или собрать scl/trd на ужясме.

Вот только непонятна инициализация печати:

Код:
	ld a,2
	call $1601
которую приходится впихивать в загрузчик.

Дальше смешнее. Вот исходник(pi.c):
Код:
#include <stdio.h>

int main()
{
    int r[2800 + 1];
    int i, k;
    int b, d;
    int c;

	c=0;
    for (i = 0; i < 2800; i++) {
        r[i] = 2000;
    }

    for (k = 2800; k > 0; k -= 14) {
        d = 0;

        i = k;
        for (;;) {
            d += r[i] * 10000;
            b = 2 * i - 1;

            r[i] = d % b;
            d /= b;
            i--;
            if (i == 0) break;
            d *= i;
        }
        printf("%.4d", c + d / 10000);
        c = d % 10000;
    }

    return 0;
}
Всё компилится, но при запуске печатается сплошное непотребство. На cp/m HiTech-C программа работает, если поменять типы данных с int на long.
Меняю так же, получаю фигувам.


В чем причина неясно - то ли сам накосячил, то ли в другом?