- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
static int parse_num(const char *s, size_t *out) {
if (s == NULL || *s == '\0')
return -1;
char *end = 0;
errno = 0;
uint64_t num = strtoull(s, &end, 0);
if (errno != 0)
return -1;
if (*end != '\0')
return -1;
if (num > SIZE_MAX)
return -1;
*out = (size_t)num;
return 0;
}
bormand 24.09.2020 00:48 # +1
Кто там хотел посоставлять 64 битный код из ascii символов?
DypHuu_niBEHb 24.09.2020 01:19 # +1
А нету констант чтоли?
> fprintf(stderr, "RAX=%016llx RBX=%016llx RCX=%016llx RDX=%016llx\n", regs.rax, regs.rbx, regs.rcx, regs.rdx);
fprintf(stderr, "RSI=%016llx RDI=%016llx RSP=%016llx RBP=%016llx\n", regs.rsi, regs.rdi, regs.rsp, regs.rbp);
fprintf(stderr, "R8 =%016llx R9 =%016llx R10=%016llx R11=%016llx\n", regs.r8, regs.r9, regs.r10, regs.r11);
fprintf(stderr, "R12=%016llx R13=%016llx R14=%016llx R15=%016llx\n", regs.r12, regs.r13, regs.r14, regs.r15);
блядь, ну и регистров там у вас
именно по этому я за real mode
bormand 24.09.2020 01:26 # 0
Дык очевидно же: 0x0B код, 0х03 данные.
Это ещё не все регистры кста. Там же ещё от сопроцессора и SSE'шные. Я на них тупо забил.
З.Ы. Завтра добавлю генерецию пейджтейбла, а то руками указывать как-то некрасиво.
DypHuu_niBEHb 24.09.2020 03:10 # 0
Что вообще самое сложное в написании самой простой ос? шедулер? драйверы для всякого современного говна типа pci-e и usb 3?
bormand 24.09.2020 13:58 # 0
bormand 24.09.2020 21:08 # 0
guest8 24.09.2020 21:19 # −999
bormand 24.09.2020 21:28 # 0
А у интела походу реально подгорело после фейла итантума аля IA-64 и взлёта амд64.
Настолько подгорело, что IA-32e там везде упоминается просто как костыль, прикрученный сбоку, а не как часть архитектуры. Во всех главах рассказывается сначала про 32 бита, а потом "ну а если IA-32e - то ещё вот это".
amd'шная дока в этом плане на порядок приятнее читается.
MAPTbIwKA 24.09.2020 21:38 # 0
А вот от AMD и правда погорело, потому что софт стал называть режим AMD64, и до сих пор иногда называет. Как Интел мог такое вынести?
А еще AMD первые допёрли унсети драм контроллер в die.
А книжки и мануалы небось раньше писались, потом их просто апгрейтнули, не?
bormand 24.09.2020 21:45 # 0
А на практике народ в 2020 году юзает всякую 16-битную опердень.
MAPTbIwKA 24.09.2020 21:47 # 0
прикладушечку на няшной, написанную и проверенную под 32, пересобрать под другую арху и 64? Это же наверное нужно быть очень аккуратным парнем, не?
А если с астмавставками?
Вообще странная политика. Интел всякий там 16ти битный режим тянет же ровно потому, что не весь софт можно перекомпилировать
bormand 24.09.2020 21:48 # 0
Дык никто не заставляет юзать 64-битные типы. Сделай в конпеляторе режим, в котором все размеры как в оригинале. И никто не заметит подвоха.
Ну асмовставки - да. И проебанные исходники.
MAPTbIwKA 24.09.2020 21:50 # 0
32 же работает в 64, и ничего.
Ну ладно, а что делать с асмом-то? И со всякими тонкими оптимизациями?
А всякий ядреный софт? драва? Там же небось другой лейаут памяти, i/o нету, еще чонить
bormand 24.09.2020 21:51 # 0
А надо? Оно ж раньше как-то работало, памяти хватало.
> оптимизациями
Ну если новый проц мощнее - тупо забить. Не хуже чем раньше - и ладно. Для переезда сойдёт.
guest8 24.09.2020 21:54 # −999
bormand 24.09.2020 22:02 # 0
guest8 24.09.2020 22:09 # −999
bormand 24.09.2020 22:10 # 0
guest8 24.09.2020 22:13 # −999
bormand 24.09.2020 22:15 # 0
guest8 24.09.2020 22:18 # −999
bormand 24.09.2020 22:01 # 0
А вот это вроде одна из причин, по которой в десктопную винду PAE не завезли. Все понахардкодили себе 32-битных адресов.
> i/o нету
Ты давно видел железку с i/o? Ну кроме легаси хуйни, которая не может на него забить и просто бахнуть MMIO регион.
guest8 24.09.2020 22:07 # −999
Fike 24.09.2020 22:05 # 0
Konardinho 24.09.2020 22:10 # 0
Fike 24.09.2020 22:13 # 0
guest8 24.09.2020 22:11 # −999
bormand 24.09.2020 22:12 # 0
Вот уж реально плевок в вечность. Одни долбоёбы поюзали недокументированнную фичу. Другие долбоебы ее узаконили, привернув костыль через клавиатурный порт. А теперь все страдают и эмулируют это говнище.
guest8 24.09.2020 22:15 # −999
bormand 24.09.2020 22:20 # 0
guest8 24.09.2020 22:21 # −999
Fike 24.09.2020 22:12 # 0
bormand 24.09.2020 22:16 # 0
Fike 24.09.2020 22:21 # 0
bormand 24.09.2020 22:22 # 0
Fike 24.09.2020 23:37 # 0
DypHuu_niBEHb 25.09.2020 00:39 # 0
уменьшать размер регистра сегмента и его двигать потом?
Fike 25.09.2020 09:41 # 0
bormand 25.09.2020 10:19 # +2
К примеру, чтобы работать с 40кб массивом который начинается на 0х8000 тебе постоянно придется дрочить сегментные регистры.
Нахлёстом сегментов они эту проблему и пытались решить: ты ставишь ds на начало массива и течёшь.
Fike 25.09.2020 10:39 # 0
guest8 25.09.2020 12:51 # −999
Konardinho 25.09.2020 15:02 # 0
Myxa 25.09.2020 12:25 # 0
bormand 25.09.2020 03:05 # 0
guest8 25.09.2020 03:39 # −999
bormand 25.09.2020 04:08 # 0
Без дескрипторных табличек так не выйдет. Будет что-то одно из джвух.
guest8 24.09.2020 22:23 # −999
Konardinho 24.09.2020 21:52 # 0
Konardinho 24.09.2020 21:55 # 0
3.14159265 24.09.2020 22:17 # 0
bormand 24.09.2020 22:17 # 0
3.14159265 24.09.2020 22:19 # 0
Полная говнина.
Сайт-эффектная питушатня errno, код разврата, ещё и кокозатель.
bormand 24.09.2020 22:20 # 0
> кокозатель
Ну за это спасибо, кстати. Хоть допарсить можно или проверить что до конца разобрал. В atoi было хуже.
3.14159265 24.09.2020 22:42 # 0
Так atoX это же по сути просто «удобные» обёртки над strtoX, без указателя и прибитой десятичкой.
Если бы туда завезли гарантированный errno, были бы нормальные функции.
bormand 24.09.2020 22:43 # 0
3.14159265 24.09.2020 22:47 # 0
Edit: а длинные питухи действительно потом появились:
Konardinho 24.09.2020 22:50 # 0
bormand 24.09.2020 22:57 # 0
Какая ошибка уровня E_NOTICE )))
Для строк функция скорее всего вернет 0, хотя это зависит от первого символа в строке.
guest8 24.09.2020 23:01 # −999
guest8 24.09.2020 23:04 # −999
bormand 24.09.2020 23:05 # 0
guest8 24.09.2020 23:13 # −999
guest8 24.09.2020 23:12 # −999
guest8 24.09.2020 23:22 # −999
guest8 24.09.2020 23:24 # −999
bormand 24.09.2020 22:26 # 0
3.14159265 24.09.2020 22:31 # 0
Ахаха
bormand 24.09.2020 22:33 # +1
Тот самый момент, когда распарсить аргумент сложнее, чем поднять виртуальную машину, которой он понадобился.
bormand 26.09.2020 00:16 # +1
На входе const char*, на выходе просто char*.
3.14159265 26.09.2020 00:21 # +1
С-с-с-ука.
Зачем? Зачем?
bormand 26.09.2020 00:22 # 0
3.14159265 26.09.2020 00:25 # 0
bormand 26.09.2020 00:27 # 0
Поэтому на выходе конста в стандартной либе нет.
guest8 26.09.2020 00:29 # −999
3.14159265 26.09.2020 00:30 # 0
guest8 24.09.2020 22:21 # −999