Бывает, если случайно записываемый символ попадёт в процедуру разбора строки из 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; }
Последний раз редактировалось Sergey; 29.11.2014 в 10:35.
С уважением,
Gris / Red Triangle.
_____________________________________
ZX-EVO/TS-Labs config/NGS/HDD/SD-card
Amiga A1200/Blizzard 1230@50/32/60GB
Amiga A1200/Apollo 1260@66/32/60GB
UnAmiga (C5) AGA GM7123 VideoDAC
Можешь зайти сюда.
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
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)