Mam taki problem - chcę stworzyć program, który jest binarką relokowalną pod SDX i korzysta ze wszystkich jego możliwości i dobrodziejstw. Jednak żeby użytkownikom nieposiadającym tego systemu nie robić kłopotu, że niby uszkodzony plik czy coś, chcę wyświetlić informację o tym, że nie mają oni włączonego DOSu, lub aktualnie używany (MyDOS, DOS-XL, itd.) nie jest obsługiwany.
Poradzono mi, bym na początku kodu założył blok nierelokowalny ($FFFF) który sprawdza czy SDX jest załadowany, a potem bloki relokowalne i dalej resztę programu. Relokator powinien przejść po "RTS" z bloku nierelokowalnego do ładowania reszty bloków. Niestety - tak sie nie dzieje, w przypadku wykrycia SDX program się zakańcza i wrzuca nas z powrotem do promptu.
Pytanie brzmi - co jest nie tak? Ewentualnie, czy istnieje inne rozwiązanie kwestii detekcji SDX?
Poniżej fragment kodu o którym mowa:
opt h+ l+ m+ r+ s+
printf smb 'PRINTF'
u_getkey smb 'U_GETKEY'
org $2000 /* że niby tak kulturalnie niezależnie od MEMLO */
lda $0700 /* word $0700 == "SD"
cmp #$53
bne no_sdx
rts
no_sdx /* (... procedura wyświetlająca komunikat graficzny ...) */
?loop jmp loop
blk reloc main
mwa strp.hello txt.ptr
/* (...tutaj będzie procedura usuwająca wczaeśniejszy blok z pamięci...) */
jsr i_printf
jsr u_getkey
rts
i_printf jsr printf
.byte '%p\n',0
.word txt.ptr
rts
strp.hello .word str.hello
str.hello .word '\a\fPozdrawiam wszystkich czytajacych ten kod!',$9b
txt.ptr .word $0000