Так что
__main:
врядли соответствует
main()
Вероятнее всего это какая-то промежуточная точка входа, на которую передаётмся управление из startup, а уже она вызывает _main
Это надо уже библиотеку смотреть, может кристалло-зависимое что-то.
А может по умолчанию что-то в духе
__main: ; сюда jump из startup
call _main ; именно call, чтобы что по exit(),
; что по return из main попасть сюда
jump __main
_exit:
; поправить стек
jump __main
помещение чего не в стартап, а в библиотеку даёт возможность легко перекрыть это в приложении.