Le problème
Si on ne change pas la séquence de démarrage, le gcc réclame la version 37 du dos avec le message laconique "Need version 37 of dos.library".
Se limiter à la version 37 est un non sens, le 1.2 (version 33) était livré avec le A500 et A2000, le 1.3 (version 34) était livré avec le A2000B.

Un petit fichier assembleur start.s
Ce n'est pas de l'assembleur 68000, mais de l'assembleur compris par gcc.
Le main référencé est préfixé par deux traits bas __.

  .text
  .even
  .globl  start

start:
  jmp __main

Le code source hello.c
Le main en C a trois traits bas ___.
On démarre sans startup C, pas question de récupérer la ligne de commande et encore moins les arguments.

#include <exec/execbase.h>
#include <dos/dos.h>

#include <proto/exec.h>
#include <proto/dos.h>

int ___main(void)
{
  struct ExecBase *SysBase = (*((struct ExecBase **) 4)) ;
  struct Library *DOSBase = NULL ;
  struct WBStartup *wbMsg = NULL ;
  struct Process *process ;
  long failureCode = 0 ;

  process = (struct Process *) SysBase->ThisTask ;
  if (!(process->pr_CLI))
  {
    WaitPort (&process->pr_MsgPort) ;
    wbMsg = (struct WBStartup *) GetMsg (&process->pr_MsgPort) ;
  }

  DOSBase = (struct Library *)OpenLibrary ("dos.library", 0) ;
  if (DOSBase != NULL)
  {
    Write(Output(), "Hello World\n", 12) ;

    CloseLibrary ((struct Library *)DOSBase);
  }
  
  if (wbMsg)
  {
    Forbid () ;
    ReplyMsg ((struct Message *) wbMsg) ;
  }

  process->pr_Result2 = failureCode ;
  return failureCode ;
}

Le makefile

SRC=..
BIN=bin

target: $(BIN)/hello13

$(BIN)/hello13: $(SRC)/start.s $(SRC)/hello.c
	gcc -s -O2 -nostdlib -noixemul -fomit-frame-pointer -o $(BIN)/hello13 $(SRC)/start.s $(SRC)/hello.c

clean:
	delete $(BIN)/hello13
make
construira hello13

make clean
détruira le fichier hello13