Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.84/56: Рейтинг темы: голосов - 56, средняя оценка - 4.84
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3

16-bit Real Mode в 2020

30.07.2018, 16:00. Показов 13025. Ответов 51

Студворк — интернет-сервис помощи студентам
Весь 16-битный код в реальном режиме, разработка которого в ближайшее время имеет практический смысл, сосредоточен где-то здесь:
https://github.com/tianocore/e... /Vtf0/Ia16
Если вы разрабатываете firmware для компьютеров с архитектурой x86-64, задача, которую решает код - привести оборудование в рабочее состояние, т.е. в случае процессора - как можно раньше распрощаться с реальным режимом и перевести процессор в штатный Long mode или, как вариант для небольших систем, в защищённый 32-битный режим.

Всё остальное - разновидности музейно-педагогического программирования. В чистом виде залежи музейно-педагогического программирования можно изучать в другом разделе форума: https://www.cyberforum.ru/turbo-pascal/
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.07.2018, 16:00
Ответы с готовыми решениями:

Сколько ядер работает у процессора в Real Mode?
Написал сюда. Ибо в "Процессорах" совсем другое нынче обсуждают. Загружаем с флешки на современный бытовой компьютер с многоядерным...

Ошибка: Нельзя преобразовать тип function x real real к real
Здравствуйте, не могу понять как исправить ошибку (строка 32) var a,b,e,h,xi,fi,ln1,ln2:real; s:longint; n,i:integer; ...

Нельзя преобразовать тип function(x: real): real к real
Ничего не понимаю, почему нельзя? Помогите пожалуйста найти ошибку в коде. uses CRT; type function1=function(x: real): real; ...

51
28 / 20 / 0
Регистрация: 30.06.2020
Сообщений: 40
29.09.2020, 00:20
Студворк — интернет-сервис помощи студентам
Да... Переводить только FS и GS наверное более надёжно и универсально работает. Но это может работать и с остальными регистрами, вопросы только у всех, всегда, и если получилось у тебя то будет ли работать у меня. Суть то в том что смена режима на реальный не меняет бит гранулярности G и лимит, а в реальном режиме меняется только базовый адрес. В итоге должны получить сегменты с максимальным размером 4 гигабайта в реальном режиме и избавляемся от ненужного геморроя. И в то же время нормально работают функции DOS, BIOS и обработка аппаратных прерываний в реальном режиме.

Добавлено через 3 минуты
Цитата Сообщение от politoto Посмотреть сообщение
А в нём нет V86 и, тем более, Unreal.
А разве 32-х разрядное приложение не может внутри себя реализовать переход в 16-битный режим? Вроде VirtualBox что-то подобное проделывает?

Добавлено через 35 минут
Ну выпилят постепенно... Сначала остатки V86 потом и Защищённый 32-х Битный Режим. Странно выпиливание V86 действительно грустно. Всё же он был прост надёжен полезен и работоспособен и программирование для 16-bit Real Mode дожило до 2020-го в плане серьёзной работы... А вот Protected Mode лично мне не будет жалко...
Посмотрим что будет дальше...
1
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
29.09.2020, 05:08  [ТС]
Цитата Сообщение от ManFromPast Посмотреть сообщение
А разве 32-х разрядное приложение не может внутри себя реализовать переход в 16-битный режим?
Под Hyper-V в Windows можно запустить целую виртуальную машину а на ней Legacy OS в реальном, защищенном или нереальном режиме.
В других x86_64 ОС тоже, конечно, можно сделать что-то подобное.
https://2013.asiabsdcon.org/pa... -paper.pdf
А V86 реализована как отдельная аппаратная Task. Полноценной поддержки которых нет в Long mode AMD64. Без помощи супервизовра защищённого режима прикладная программа сама создать v86 task не сможет.
Обычные процессы в современных 32-разрядных ОС работают без создания и переключения Task на каждый процесс.
0
28 / 20 / 0
Регистрация: 30.06.2020
Сообщений: 40
30.09.2020, 23:42
И в итоге из под 64 битной Long Mode ОС запускается 32-битный процесс из под которого запускается 16-битный код старого доброго... Но каждое обращение последнего к портам через команды IN, OUT или вызов различных функций через прерывания командой INT обрабатывается как исключение 32-м процессом. Но остальные команды выполняются процессором. Поэтому под тем-же VirtualBox программки нацеленные на сложные вычисления с минимальным интерфейсом летают быстро в соответствии с современными тактовыми частотами. Но всё равно пользуются наследием MS-DOS для x86 как и других платформ прошлого на чистых эмуляторах. Скорость выполнения тут уже не так критична, хватает и памяти и мощности процессора... Зато создателю, создателям эмулятора проще сделать среду полностью эмулирующую работу родного для программного обеспечения оборудования.

Добавлено через 3 минуты
На чистых эмуляторах тоже можно "работать" в нереальном режиме...
1
28 / 20 / 0
Регистрация: 30.06.2020
Сообщений: 40
29.11.2020, 22:57
А что ждёт Real Mode в 2021-м году?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
15.08.2021, 08:57  [ТС]
Цитата Сообщение от Constantin Cat Посмотреть сообщение
RM будет всегда, пока CPU не научат запускаться сразу в PM.
В прошлом тысячелетии intel уже выпускала для спецприменений процессор, похожий на SX,
но без реального режима, без V86 и без страничного преобразования адресов.

http://bitsavers.org/component... ec1990.PDF
http://bitsavers.org/component... l_1988.pdf

И написала пример кода инициализации FLAT, предусматривающий, что
некоторые процессоры могут стартовать сразу в 32-разрядном PM:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
EXTRN c startup:near ; this is the label jmped to after init
pe flag equ 1
data selc equ 20h ; assume code is GDT[3], data GDT[4]
INIT CODE SEGMENT ER PUBLIC USE32 ; Segment base at 0ffffff80h
PUBLIC GDT DESC
gdt desc dq ?
PUBLIC START
start:
cld ; clear direction flag
smsw bx ; check for processor (80376) at reset
test bl,1 ; use SMSW rather than MOV for speed
jnz pestart
realstart: ; is an 80386 and in real mode
;;;db 66h ; force the next operand into 32-bit mode.
;;;mov eax,offset gdt desc ; move address of the GDT descriptor into eax
;;;xor ebx,ebx ; clear ebx
;;;mov bh,ah ; load 8 bits of address into bh
;;;move bl,al ; load 8 bits of address into bl
;;;db 67h
;;;db 66h ; use the 32-bit form of LGDT to load
;;;lgdt cs:[ebx] ; the 32-bits of address into the GDTR
;;;smsw ax ; go into protected mode (set PE bit)
;;;or al,pe flag
;;;lmsw ax
;;;jmp next ; flush prefetch queue
pestart:
mov ebx,offset gdt desc
xor eax,eax
mov ax,bx ; lower portion of address only
lgdt cs:[eax]
xor ebx,ebx ; initialize data selectors
mov b1,data selc ; GDT[3]
mov ds,bx
mov ss,bx
mov es,bx
mov fs,bx
mov gs,bx
jmp pejump
next:
;;;xor ebx,ebx ; initialize data selectors
;;;mov b1,data selc ; GDT[3]
;;;mov ds,bx
;;;mov ss,bx
;;;mov es,bx
;;;mov fs,bx
;;;mov gs,bx
;;;db 66h ; for the 80386, need to make a 32-bit jump
pejump:
jmp far ptr c startup ; but the 80376 is already 32-bit.
org 70h ; only if segment base is at 0ffffff80h
jmp short start
INIT CODE ENDS
END
Раскладка таблиц для интеловского компоновщика:
Кликните здесь для просмотра всего текста

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
FLAT; -- build program id
SEGMENT
    *segments (dpl40), -- Give all user segments a DPL of 0.
    phantom code (dpl40), -- These two segments are created by
    phantom data (dpl40), -- the builder when the FLAT control is used.
    init code (base40ffffff80h); -- Put startup code at the reset vector area.
GATE
    g13 (entry413, dpl40, trap), -- trap gate disables interrupts
    i32 (entry432, dpl40, interrupt), -- interrupt gates doesn’t
TABLE
    -- create GDT
    GDT (LOCATION 4 GDT DESC, -- In a buffer starting at GDT DESC,
                -- BLD386 places the GDT base and
                -- GDT limit values. Buffer must be
                -- 6 bytes long. The base and limit
                -- values are places in this buffer
                -- as two bytes of limit plus
                -- four bytes of base in the format
                -- required for use by the LGDT
                -- instruction.
    ENTRY 4 (3: phantom code ,  -- Explicitly place segment
        4: phantom data ,       -- entries into the GDT.
        5:code32,
        6:data,
        7:init code)
);
TASK
MAIN TASK
(
    DPL 4 0, -- Task privilege level is 0.
    DATA 4 DATA,    -- Points to a segment that
            -- indicates initial DS value.
    CODE 4 main, -- Entry point is main, which
            -- must be a public id.
    STACKS 4 (DATA), -- Segment id points to stack
            -- segment. Sets the initial SS:ESP.
    NO INTENABLED, -- Disable interrupts.
    PRESENT -- Present bit in TSS set to 1.
);
MEMORY
    (RANGE 4 (EPROM 4 ROM(0ffff8000h..0ffffffffh),
    DRAM 4 RAM(0..0ffffh)),
    ALLOCATE 4 (EPROM 4 (MAIN TASK)));
END

Flag Word (EFLAGS) uuuu0002H
3. The Code Segment Register (CS) will have its Base Address set to 0FFFF0000H and
Limit set to 0FFFFH.
4. The Data and Extra Segment Registers (DS and ES) will have their Base Address set
to 000000000H and Limit set to 0FFFFH.
3
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6215 / 2449 / 403
Регистрация: 29.07.2014
Сообщений: 3,181
Записей в блоге: 4
22.08.2021, 22:22
Цитата Сообщение от politoto Посмотреть сообщение
И написала пример кода инициализации FLAT, предусматривающий, что
некоторые процессоры могут стартовать сразу в 32-разрядном PM:
если проц стартует в РМ его не нужно переводить в защищённый режим.
Вы девушка? Если да, то у меня к вам много вопросов.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
23.08.2021, 11:37  [ТС]
Нужно, как минимум, задать в GDT границы сегментов и поместить селекторы этих сегментов в сег.регистры.
Границы после сброса не подходят для FLAT.
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6215 / 2449 / 403
Регистрация: 29.07.2014
Сообщений: 3,181
Записей в блоге: 4
26.08.2021, 13:50
Цитата Сообщение от politoto Посмотреть сообщение
Границы после сброса не подходят для FLAT.
а как он тогда стартует? В чём смысл защищённого?

Добавлено через 6 минут
я в курсе, что такое селектор
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
26.08.2021, 15:44  [ТС]
В сегментных регистрах то же, что и у обычного 386 с реальным режимом. Сегмент кода настроен на последние 64К адресного пространства, через остальные сегментные регистры можно обращаться к первым 64К.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
22.05.2023, 12:41  [ТС]
x86, не совместимая с 8086.
Заодно и 32-разрядные супервизоры отменили. Windows 98 не пойдёт.
Но любимые 32-разрядные программы пользователя по-прежнему можно будет выполнять в 64-разрядных системах.

https://habr.com/ru/news/736568/

Миниатюры
16-bit Real Mode в 2020  
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6816 / 2055 / 239
Регистрация: 14.12.2014
Сообщений: 4,319
Записей в блоге: 12
22.05.2023, 13:50
politoto, ага, тоже видел в "Свиттере": https://twitter.com/lemire/sta... 6358133760
Прикреплю спецификацию для интересующихся
Вложения
Тип файла: pdf x86s-EAS-v1-4-17-23-1.pdf (1.30 Мб, 9 просмотров)
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
22.05.2023, 14:13  [ТС]
Цитата Сообщение от Jin X Посмотреть сообщение
Прикреплю спецификацию для интересующихся
Спасибо!
У меня всё никак не получалось скачать интеловский PDF.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.05.2023, 14:13

Нельзя преобразовать тип function(x real) real к real
program Simpson; var x,a,b,h,s:real; n:integer; function Y(t:real):real; begin Y:=(exp(x*ln(exp)))/(x+5); end;

Операция '*' не применима к типам real и function(x: real): real
function Arccos1(x: integer): real; begin arccos1 := sqr(Arccos(x)) + arccos(x-(1/2)); end; function arccos2(x:integer):...

Нельзя преобразовать тип function(x: real): real к real
Здравствуйте! Не могу написать формулу. Ошибка:Нельзя преобразовать тип function(x: real): real к real program zadacha; var...

Нельзя преобразовать тип function(x: real): real к real
var g,s,s1,s2,fi,h:real; label k; begin write('Vvedite visotu'); readln(h);k: write('Vvedite gradusi'); readln(s); ...

Given real numbers a, b, c. Find if a quadratic inequality ах2 + bx + с = 0 has real roots. If it does, output them
ВОТ задача помогите решить Given real numbers a, b, c, where a is not 0. Find if a quadratic inequality ах2 + bx + с = 0 has real...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
52
Ответ Создать тему
Новые блоги и статьи
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru