Попытался еще пособирать GCC под тагеты pdp11-elf и pdp11-dec, последний вроде генерирует объектники в формате DEC-а, и возможно .SAV. Но не получается под MinGW это сделать, все какие-то проблемы лезут.
А под aout вроде нормально все компилируется, переписал красиво memset/memcpy/инициализацию, будет время - запущу сишный тест на ремуляторе+живая БК-0010.
Пример простой (я позже на асме переписал, и лругой алгоритм) реализации memcpy():
Код:
void*
hal_memcpy(
void* d,
const void* s,
unsigned int n)
{
if (n)
{
unsigned char* src;
unsigned char* dst;
src = (unsigned char*) s;
dst = (unsigned char*) d;
do
{
*dst++ = *src++;
}
while(--n);
}
return d;
}
Превратилось:
Код:
1 .text
2
3 .even
4 .globl _hal_memcpy
5 _hal_memcpy:
6
7 ; /* function prologue hal_memcpy*/
8 0000 A610 mov r2, -(sp)
9 0002 E610 mov r3, -(sp)
10 ;/* end of prologue */
11
12 0004 801D0600 mov 06(sp), r0
13 0008 811D0A00 mov 012(sp), r1
14 000c 0603 beq L_2
15 000e 831D0800 mov 010(sp), r3
16 0012 0210 mov r0, r2
17 L_3:
18 0014 D294 movb (r3)+, (r2)+
19 0016 C10A dec r1
20 0018 FD02 bne L_3
21 L_2:
22
23 ; /*function epilogue */
24 001a 8315 mov (sp)+, r3
25 001c 8215 mov (sp)+, r2
26 001e 8700 rts pc
27 ;/* end of epilogue*/
Функция простая, проигрывает по размеру ручной ассемблерной реализации (по тому же алгоритму) одно слово из 16, то есть всего на 1/16 длинее.
Update: поддержка pdp-11 в GCC прекращена с версии 4.3.x, все что старше - собирается на свой страх и риск.
Интересно будет взглянуть на C компилятор под RT-11, вероятно это страх и ужас в стиле K&R, язык то с тех пор развился, меня и значительно более молодой GCC 3.х не всегда устраивает.