Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Kukushkha
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 30
Завершенные тесты: 2
1

Вывод текста без WinAPI

24.12.2017, 13:20. Просмотров 871. Ответов 23
Метки нет (Все метки)

Здравствуйте!

Пишу OS на C++. Как мне создать функцию printf() без использования айостримов и т.д.?
Как создать функции ввода?

И все чтобы работало на чистом железе.

Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2017, 13:20
Ответы с готовыми решениями:

Создание окна без WinAPI
Хотелось узнать, как создавать окна без использования WinAPI.

Вывод текста не экран с помощью DrawText (DirectX)
Здравствуйте, проблема такая: пытаюсь вывести текст на экран, если я пишу вот...

Перетаскивание окна за любую его точку без WinApi
Дело в том, что в апи я 0 даже как вставить туда пару строк я не знаю могу...

Отключить форму без смены цвета текста
На экране есть форма (Memo). Можно ли сделать так, чтобы при отключении цвет...

Вывод текста
Мне нужно выводить текст (служебная информация) Ест критерии: 1) скорость...

23
TRam_
зомбяк
714 / 670 / 212
Регистрация: 14.05.2017
Сообщений: 2,312
24.12.2017, 13:26 2
Если на чистом железе (т.е. без операционной системы) - смотри документацию к микроконтролеру, к которому пишешь, какие там регистры отвечают за передачу на дисплей и т.п.
0
Kukushkha
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 30
Завершенные тесты: 2
24.12.2017, 17:38  [ТС] 3
Цитата Сообщение от TRam_ Посмотреть сообщение
к микроконтролеру, к которому пишешь

Вы предлагаете написать по отдельности для каждой мамки?! Я вас правильно понял?
0
TRam_
зомбяк
714 / 670 / 212
Регистрация: 14.05.2017
Сообщений: 2,312
24.12.2017, 17:44 4
У каждой материнки есть как минимум биос, т.е. тоже изначально заложенная программа, к которой можно было бы как-то сделать вывод. Но в в вашем вопросе было "сделать всё с нуля", значит и сделано будет даже не для отдельной материнской платы, а для отдельной конфигурации оборудования. Если конечно за эту бессмысленную затею таки возьмётесь. Но предлагаю для начала потренироваться "на кошках", т.е. на оценочных платах каких-нибудь микроконтроллеров.
0
likehood
965 / 814 / 390
Регистрация: 25.12.2016
Сообщений: 2,691
Завершенные тесты: 3
26.12.2017, 09:28 5
Kukushkha, можете ещё здесь спросить: http://www.cyberforum.ru/low-level/
0
Kukushkha
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 30
Завершенные тесты: 2
26.12.2017, 11:12  [ТС] 6
Цитата Сообщение от TRam_ Посмотреть сообщение
Но в в вашем вопросе было "сделать всё с нуля"
Дело в том, что в вопросе такого не было.

Цитата Сообщение от TRam_ Посмотреть сообщение
а для отдельной конфигурации оборудования
Вы намекаете на то, что на ASM это будет написать проще?

Ладно! Допустим, я посмотрел документацию к
Цитата Сообщение от TRam_ Посмотреть сообщение
микроконтролеру, к которому пишешь
.
И узнал что за это отвечают регистры AX и AH(Например). Тогда каким кодом мне произвести запись буквы Е в AX и буквы Б AH?
0
TRam_
зомбяк
714 / 670 / 212
Регистрация: 14.05.2017
Сообщений: 2,312
26.12.2017, 12:31 7
Цитата Сообщение от Kukushkha Посмотреть сообщение
каким кодом мне произвести запись буквы
В зависимости от кодировки. Например ANSII - совместимых кодировках латинская A записывается в виде числа 0x41

Добавлено через 1 минуту
Цитата Сообщение от Kukushkha Посмотреть сообщение
узнал что за это отвечают регистры AX и AH(Например)
Для отображения нужно разобраться с интерфейсом дисплея. Зная AX и AH сможешь только вычисления проводить, но не вывод на экран.
0
Kukushkha
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 30
Завершенные тесты: 2
26.12.2017, 16:46  [ТС] 8
Цитата Сообщение от TRam_ Посмотреть сообщение
Зная AX и AH сможешь только вычисления проводить
Я разве не написал: (Например)?

Цитата Сообщение от TRam_ Посмотреть сообщение
A записывается в виде числа 0x41
Я имею в виду код C++. Какой функцией.
0
DobroAlex
Модератор
389 / 333 / 163
Регистрация: 30.04.2016
Сообщений: 1,716
Завершенные тесты: 3
26.12.2017, 23:36 9
Kukushkha, а у вас есть компилятор С++ под вашу ОС?
1
Kukushkha
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 30
Завершенные тесты: 2
27.12.2017, 12:57  [ТС] 10
Цитата Сообщение от DobroAlex Посмотреть сообщение
а у вас есть компилятор С++ под вашу ОС?
Что за вопрос?!

Вы имеете ввиду OS которую пишу Я или ту, которая у меня сейчас на компе?
0
DobroAlex
Модератор
389 / 333 / 163
Регистрация: 30.04.2016
Сообщений: 1,716
Завершенные тесты: 3
27.12.2017, 13:16 11
Kukushkha, для той, на которую пишите. Это называется "Целевая платформа"
0
Kukushkha
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 30
Завершенные тесты: 2
27.12.2017, 14:27  [ТС] 12
Цитата Сообщение от DobroAlex Посмотреть сообщение
на которую пишите
Я пишу не приложение. А OS, которая работает БЕЗ всяких там, целевых платформ.... Опирается только на аппаратуру.

Вы хотите чтобы я искал компилятор C++ для BIOS?
0
DobroAlex
Модератор
389 / 333 / 163
Регистрация: 30.04.2016
Сообщений: 1,716
Завершенные тесты: 3
27.12.2017, 14:42 13
Kukushkha, а как вы будете запускать ваш С++ код или готовый исполнимый файл?

Добавлено через 2 минуты
Могу ещё предложить int 09h из старых добрых времён
0
Kastaneda
Jesus loves me
Эксперт С++
4940 / 3016 / 346
Регистрация: 12.12.2009
Сообщений: 7,612
Записей в блоге: 2
Завершенные тесты: 1
28.12.2017, 07:26 14
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Цитата Сообщение от DobroAlex Посмотреть сообщение
Могу ещё предложить int 09h из старых добрых времён
Это прерывание DOS'а, ТС же свою ОС пишет, у него нету int XX

На х86 архитектуре видепамять мапится на определенный адрес (на память не скажу, нужно гуглить), соответственно что бы напечатать текст на экран нужно скопировать твой текст в эту память. Можно задавать смещение на экране. Например base_address + 80 выведет тебе текст на второй строчке.
Конечно речь о real mode, если у тебя например protected или любой другой, то фукнция печати должна переводить процессор в real, копировать строку в видеопамять и возвращаться в исходный режим.
0
Kukushkha
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 30
Завершенные тесты: 2
28.12.2017, 11:17  [ТС] 15
Цитата Сообщение от Kastaneda Посмотреть сообщение
На х86 архитектуре видепамять мапится на определенный адрес (на память не скажу, нужно гуглить), соответственно что бы напечатать текст на экран нужно скопировать твой текст в эту память. Можно задавать смещение на экране. Например base_address + 80 выведет тебе текст на второй строчке.
Конечно речь о real mode, если у тебя например protected или любой другой, то фукнция печати должна переводить процессор в real, копировать строку в видеопамять и возвращаться в исходный режим.
Спасибо! Но я так и не понял какую
C++
1
write("AX", 0x41)
надо прописать чтобы произвести запись в регистр.

Или вы предлагаете написать это на ASM, а потом запускать функции на C++? Если да, то как?

Цитата Сообщение от DobroAlex Посмотреть сообщение
а как вы будете запускать ваш С++ код или готовый исполнимый файл?
А вот этого я не знаю... Может можно как с ассемблером, скомпайлить в bin, а потом через UltraISO образ смонтировать?
0
Kastaneda
Jesus loves me
Эксперт С++
4940 / 3016 / 346
Регистрация: 12.12.2009
Сообщений: 7,612
Записей в блоге: 2
Завершенные тесты: 1
28.12.2017, 14:24 16
Цитата Сообщение от Kukushkha Посмотреть сообщение
надо прописать чтобы произвести запись в регистр.
Тебе не надо в регистр писать, писать надо в память. В каком режиме процессора работаешь?
0
DobroAlex
Модератор
389 / 333 / 163
Регистрация: 30.04.2016
Сообщений: 1,716
Завершенные тесты: 3
28.12.2017, 15:56 17
Kastaneda, прямое отображение в память, сейчас вообще можно так? (Я работал с асмом только в ДОС и не силён в его современных возможностях)
0
Kastaneda
Jesus loves me
Эксперт С++
4940 / 3016 / 346
Регистрация: 12.12.2009
Сообщений: 7,612
Записей в блоге: 2
Завершенные тесты: 1
28.12.2017, 16:22 18
Цитата Сообщение от DobroAlex Посмотреть сообщение
Kastaneda, прямое отображение в память, сейчас вообще можно так?
Под DOS'ом можно конечно, там же real mode и (естественно) ring 0.
0
Kukushkha
0 / 0 / 0
Регистрация: 16.05.2017
Сообщений: 30
Завершенные тесты: 2
02.01.2018, 15:41  [ТС] 19
Цитата Сообщение от Kastaneda Посмотреть сообщение
Тебе не надо в регистр писать, писать надо в память.
Ок. Но все же напишите, как это сделать.

Цитата Сообщение от Kastaneda Посмотреть сообщение
В каком режиме процессора работаешь?
В protected. Если записывать в память, надо сначала переходить в real, писать и обратно?

Не по теме:

Кстати, с новым годом!



Добавлено через 18 часов 21 минуту
Я тут хабр почитал... Узнал про архитектуру и формат ядра.
С архитектурой разобрался, но еще не решил: "экзо" или "гибридное" ядро. А формат, без понятия. Что такое "elf", "a.out", "coff"?
0
Kastaneda
Jesus loves me
Эксперт С++
4940 / 3016 / 346
Регистрация: 12.12.2009
Сообщений: 7,612
Записей в блоге: 2
Завершенные тесты: 1
04.01.2018, 20:17 20
Лучший ответ Сообщение было отмечено DrOffset как решение

Решение

Цитата Сообщение от Kukushkha Посмотреть сообщение
Что такое "elf", "a.out", "coff"?
Ты где-то далеко от своей ОС Хотя если ты пишешь и постигаешь все с нуля то норм, узнаешь об этом когда дойдешь до исполнения программ.

Цитата Сообщение от Kukushkha Посмотреть сообщение
В protected. Если записывать в память, надо сначала переходить в real, писать и обратно?
Да, либо держать где-то адрес замапленой страницы (если работаешь в protected с включенной страничной адресацией). Короче твоя задача записать текст в определенный физический адрес памяти.

Добавлено через 5 минут
Советую http://wiki.osdev.org/Main_Page тонна полезного материла на эту тему. Скопипастил оттуда много кода в свой древний рабочий проект)
0
04.01.2018, 20:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2018, 20:17

Вывод текста с изображениями
Всем привет! Пишу программу тест, в котором имеется раздел "теория", в котором...

Вывод текста на форму
Здравствуйте! Для вывода текста использую компоненту Edit. Текст появляется...

Вывод текста в файл
Вот этот код ofstream fout (SaveDialog1->FileName.c_str());...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru