Цитата Сообщение от SfS Посмотреть сообщение
Загружается шелл через раз. Иногда почемуто пишет "login incorrect".
Кажется я нашёл, почему. В библиотеке crt.s весьма странно запускает процедуру main. Нафига подменять адрес возврата, да ещё выше аргументов - непонятно. Я сделал стандартно:
Код:
		pop hl			; environ
		ld (_environ), hl
		call _main
		jp _exit
Тут кстати видно, что из стека достаётся адрес переменных среды, однако в syscall_exec.c для нового процесса в стек кладётся только argc,argv. Я добавил ещё и их:
Код:
	// Shove argc and the address of argv just below envp
	uputw((uint16_t) nargv, nenvp - 1);
	uputw((uint16_t) argc, nenvp - 2);
	uputw((uint16_t) nenvp, nenvp - 3);

	// Set stack pointer for the program
	udata.u_isp = nenvp - 3;
После этих изменений логин у меня работает как и задумывалось.

---------- Post added at 20:41 ---------- Previous post was at 20:38 ----------

Вот только рожица всё ещё появляется А если не появляется - всё опять рушится...

---------- Post added at 21:13 ---------- Previous post was at 20:41 ----------

Можно и не менять syscall_exec.c, только адрес переменных вот так считать:
Код:
		ld hl, #4		; environ
		add hl,sp
		ld (_environ), hl
		call _main
		jp _exit