Der start für ein cartridge modul sieht etwa so aus:
cart_beg:
dc.l 0xabcdef42
dc.l 0 | next program header (0 = no other program)
dc.l init+0x08000000 | cartridge init (24 bit, upper byte = type)
dc.l start | program to execute
dc.w 0 | time (unused)
dc.w 0 | date (unused)
dc.l cart_end-init | calculated program length
.ascii "UNIXDISK.ROM"
dc.w 0
init:
hier gehts los
Der init: code wird beim booten ausgeführt. Das oberste byte gibt dabei an, wann genau (in diesem Fall bit 3 gesetzt, dh. nach GEMDOS Initialisierung). Der code der bei start: steht wird vom Desktop als normales Programm gestartet, und darf auch einfach rts sein.
In Hatari testen kannst du es, indem du das fertige image dort als ROM-Cartridge anmeldest. Da die GEMDOS-Emulation aber auch als Cartridge ausgelegt ist, darf die in diesem Fall nicht aktiv sein.
Im übrigen musst du natürlich generell schauen was das Programm macht. Wenn es bss benötigt, musst du es irgendwie so linken, daß das bss-segment im normalen RAM liegt. Wenn das Data-segment geändert wird, gilt dafür das gleiche, zusätzlich musst du es irgendwie vom ROM ins RAM kopieren. Ansonsten hängt einiges davon ab welchen Linker du benutzt, Pure-C zb. erzeugt immer einen Programm-Header, den du dann wieder entfernen musst.