Всем привет!
Вопрос тем знатокам, кто пользуется SDCC.
Пишу программу helloworld для CP/M, использую опцию --no-std-crt0 и модуль crt0 от MSXDOS (на самом деле это не принципиально, так, для привязки)
Вопрос: Что должно быть в кодовом блоке соответствующем секции GSINIT и кто заполняет эту секцию?
В собранном коде я получаю такое:
Код:
код модуля crt0
.....
0100 call gsinit
0103 some_code
.....
.area _CODE
.....
код модуля helloworld
.....
.area _DATA
.....
gsinit: .area _GSINIT
XXX0 rst38
XXX1 rst38
XXX2 rst38
XXX3 rst38
XXX4 rst38
XXX5 ret
hex2bin v1.0.1, Copyright (C) 1999 Jacques Pelletier
Lowest address = 0x00000100
Highest address = 0x000011EE
0 1 2 3 4 5 6 7 8 9 A B C D E
00000100: CD E9 11
...
000011E0: 56 07 DD F9 DD E1 C9 00 00 FF FF FF FF FF C9
Соответственно, при выполнения вместо инициализации структур, должной происходить в секции, получаем call в область из пяти байтов 0FFh, рестарт на адрес 38h и зависон, т.к. в CP/M по этому адресу лежит мусор.
Что я делаю не так?
Какие-то опции не указал? Как я компилирую - см. во вложении.