Бывает, если случайно записываемый символ попадёт в процедуру разбора строки из passwd. Запусти заново, иногда этот символ попадает в некритичную область, тогда выглядит так, как будто всё работает.
Бывает, если случайно записываемый символ попадёт в процедуру разбора строки из passwd. Запусти заново, иногда этот символ попадает в некритичную область, тогда выглядит так, как будто всё работает.
мда. глюков там ещё мульён. у меня тоже иногда не пускает..
а ещё - не всегда читает корректно с флешки.
писать пока толком не пишет никак
А у меня вылазит хрень в аттрибутах, если во время скролла активно жать клаву. Пытаюсь побороть.
отсюда - https://plus.google.com/+AlanCoxLinux/posts/MtXvM1WUDPEЦитата:
Сообщение от Alan Cox
Планы жесть, конечно :)
Ребята извращаются)
48к со свапом... ААААААААААААААААААААААААА ААААААААААААААААА!!!!!
Муторное это дело: либы пилить. Муторно потом и тестить, а надо.
Потому предлагаю пересобирать FUSIX по мере поступления переписанных функций - так можно оперативней выявлять ошибки (а они будут).
Eltaron, SfS, не поленитесь, парни!
Вот fputc, уменьшил на 114 байт (195 против 309).
Код:/* z80 rewriting by Amixgris/RT 19-11-2014, Russia */
#include "stdio-l.h"
int fputc(int ch, FILE * fp) __naked
{ ch, fp;
__asm
pop af
pop de ; ch
pop bc ; fp
push bc
push de
push af
ld (2$),de ; save ch
ld hl,#0x000c ; fp->mode
call 3$
ld (1$),hl
and a,#0x40 ; & __MODE_READING ???
jr z,00102$
push bc
push bc
call _fflush
pop af
pop bc
ld a,h
or a,l
jr z,00102$
;fputc.c:10: return EOF;
00152$:
ld hl,#0xFFFF
ret
00102$:
ld a,h
and a,#0x03
jr NZ,00152$ ; lower byte <> 0
ld a,l
and a,#0x020
jr NZ,00152$
00105$:
ex de,hl
ld hl,#0x0008 ; deflate = bufend
call 3$
ex de,hl
ld h,b ; deflate = bufpos
ld l,c
call 3$
or a,a
sbc hl,de
jr c,00107$
push bc
push bc
call _fflush
pop af
pop bc
ld a,h
or a,l
jr NZ,00152$
00107$:
;fputc.c:18: *(fp->bufpos++) = ch;
ld h,b ; deflate = bufpos
ld l,c
call 3$
ld a,(2$)
ld (hl),a ; write out ch
inc hl
ld d,b
ld e,c
ex de,hl
ld (hl),e
inc hl
ld (hl),d
;fputc.c:19: fp->mode |= __MODE_WRITING;
ld hl,#1$
set 7,(hl)
;fputc.c:22: if (((ch == '\n' && (v & _IOLBF)) || (v & _IONBF)) && fflush(fp))
inc hl
inc hl
ld a,#0x0a
cp (hl)
jr NZ,00112$
inc hl
xor a,a
cp (hl)
jr NZ,00112$
dec hl
dec hl
bit 0,(hl)
jr NZ,00113$
00112$:
bit 1,(hl)
jr Z,00110$
00113$:
push bc
push bc
call _fflush
pop af
pop bc
ld a,h
or a,l
jr NZ,00152$ ; exit eof
00110$:
;fputc.c:26: fp->bufwrite = fp->bufstart; /* Nope */
ld hl,#0x0004
add hl,bc
ex de,hl
;fputc.c:25: if (v & (__MODE_IOTRAN | _IOLBF | _IONBF))
ld a,(1$)
and a, #0x03
jr Z,00115$
ld hl,#0x0006
jr 00116$
00115$:
;fputc.c:28: fp->bufwrite = fp->bufend; /* Yup */
ld hl,#0x0008
00116$:
;fputc.c:30: return (unsigned char) ch;
add hl, bc
ldi
ldi
ld hl,(2$)
ld h,#0x00
ret
1$: .dw 0
2$: .dw 0
; in: hl = struct member deflate
; de = struct base
; out: hl = member content
3$: add hl,bc
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
ret
__endasm;
}
Можешь зайти сюда.
https://github.com/salextpuru/FUZIX
Склонировать всё. И сам добавить что надо. Пропатчены либы для того чтобы с long-long работать и SDCC-3.4.0
Чё печалиться, когда можно просто самому попробовать? :)
---------- Post added at 21:23 ---------- Previous post was at 19:44 ----------
Eltaron, а утебя чтение-запись с диска не глючат? Не знаю - то ли драйвер кривоват то ли что.
Загружается шелл через раз. Иногда почемуто пишет "login incorrect".
или это может драйвер tty?
Кажется я нашёл, почему. В библиотеке crt.s весьма странно запускает процедуру main. Нафига подменять адрес возврата, да ещё выше аргументов - непонятно. Я сделал стандартно:
Тут кстати видно, что из стека достаётся адрес переменных среды, однако в syscall_exec.c для нового процесса в стек кладётся только argc,argv. Я добавил ещё и их:Код:pop hl ; environ
ld (_environ), hl
call _main
jp _exit
После этих изменений логин у меня работает как и задумывалось.Код:// 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