s54820
https://habrahabr.ru/post/338264/
Скорее, так: https://board.flatassembler.net/topic.php?t=19540
Aiwan \ (•◡•) / _bot
судя по ссылке выше у чело проблема с уефи
­
С ОС. Точнее, UEFI не может смапить устройства.
­
Скорее, так: https://board.flatassembler.net/topic.php?t=19540
Вначале всё-таки на ссях попробовать надо.
Aiwan \ (•◡•) / _bot
в топку ЯВУ. )))
Aiwan \ (•◡•) / _bot
онли хардкор
­
в топку ЯВУ. )))
Угу, тоже не люблю эту жабу.
Aiwan \ (•◡•) / _bot
в топку ЯВУ. )))
яз.выс.ур.
Anonymous
осталось со счетом поработать
mov ax, 0 mov ss, ax mov sp, 7C00h mov ax, 0B800h mov es, ax заменить на push 0 pop ss push 0b800h pop es
Aiwan \ (•◡•) / _bot
а также наверное везде исправить mov на push pop?
s54820
mov ax, 0 mov ss, ax mov sp, 7C00h mov ax, 0B800h mov es, ax заменить на push 0 pop ss push 0b800h pop es
В какой сегмент push затолкнет 0, если это бутсектор, и спецификация относительно валидности стека никаких гарантий не даёт?
Aiwan \ (•◡•) / _bot
sp можно любой задать в разумных и правильных пределах. 0-7с00 память не используется, разве что для стека, но его можно и уменьшить
Anonymous
В какой сегмент push затолкнет 0, если это бутсектор, и спецификация относительно валидности стека никаких гарантий не даёт?
будем считать, что мы прошли процедуру инициализации регистров процессора после reset (мне сейчас откровенно лень лезть в талмуд по iApx32 архитектуре), поэтому код push 0/pop ss не вызовет exceptions
s54820
sp можно любой задать в разумных и правильных пределах. 0-7с00 память не используется, разве что для стека, но его можно и уменьшить
Не с нуля. Первый килобайт с копейками зарезервирован BIOS, поэтому безопасные адреса начинаются с 505h вроде.
s54820
будем считать, что мы прошли процедуру инициализации регистров процессора после reset (мне сейчас откровенно лень лезть в талмуд по iApx32 архитектуре), поэтому код push 0/pop ss не вызовет exceptions
Код не вызовет исключений, но мы можем что-нибудь системное попортить при SS=0. Это маловероятно, но и ради экономии байта закладываться на то, что разработчики всех биосов адекватные, тоже не очень хорошо. Лучше заменить mov ax,0 на xor ax,ax, а байт сэкономить, например, на mov ax,1 -> mov al,1 ниже.
Anonymous
Экономия копеечная, но работать будет всегда
Anonymous
Хотя, иногда одного байта может и не хватить, тогда приходится делать допущения подобного рода (push 0/pop ss)
Aiwan \ (•◡•) / _bot
Хотя, иногда одного байта может и не хватить, тогда приходится делать допущения подобного рода (push 0/pop ss)
пушить пока еще рано, размер ещ не достиг того предела - когда не помещается
s54820
Хотя, иногда одного байта может и не хватить, тогда приходится делать допущения подобного рода (push 0/pop ss)
Тогда нужно бить по голове того, кто выбрал железку. И думать, как жить дальше, потому что там, где не хватило одного байта, завтра не хватит трёх.
Aiwan \ (•◡•) / _bot
113-119 байт еще свободно
s54820
113-119 байт еще свободно
Так чего ты мучаешься тогда? Добей сначала красивостями, чтобы не влезало, а потом оптимизируй уже. А то потом захочешь ещё что-то дописать, и придётся опять всё править. Кстати, можно от cmp для [tick] избавиться, если декрементировать, а не инкрементировать и сравнивать, причем декрементировать сразу память, а не грузить сначала в cx.
Aiwan \ (•◡•) / _bot
ищу инфу по выводу символов по маске. таблицу использую родную из биос
s54820
В смысле, ты хочешь знакогенератор грузить?
Aiwan \ (•◡•) / _bot
использовать готовую таблицу exit: mov ax,1130h mov bh,3 ;bh=3 - 0-127 ASCII int 10h ; 4 - 128-255 ASCII mov ax,bp mov dx,es ;dx:ax адресс таблицы ASCII BIOS jmp $
s54820
А зачем тебе читать шрифт? Ты ведь хочешь змейку из кастомных символов?
Aiwan \ (•◡•) / _bot
хотя....
Aiwan \ (•◡•) / _bot
GAME OVER
s54820
Всё равно не понял. Крупными буквами рисовать, составляя куски букв из символов? Или что?
Aiwan \ (•◡•) / _bot
но только чтоб каждый пиксель из таблицы выводлися 1 символом на экране
Aiwan \ (•◡•) / _bot
да, крупными
s54820
А. Ну так сдвигай и рисуй, в чём проблема? Символ из байтиков, биты в байтике — точки в строке символьной матрицы.
Aiwan \ (•◡•) / _bot
bt [dx:ax],cx в чем ошибк записи??
Aiwan \ (•◡•) / _bot
в сх счетчик от 0 до 7
s54820
Сегментные регистры потому и называются сегментными, что только ими можно указать сегмент.
Aiwan \ (•◡•) / _bot
ss или es использовать?
s54820
Положи в fs/gs, если тебе пофиг на очень старые компы.
Aiwan \ (•◡•) / _bot
s54820
Ну если ты прерывания запретишь с момента геймовера, и не будешь BIOS дергать, то да. Но лучше не стоит.
Aiwan \ (•◡•) / _bot
я имею ввиду с самого начала ss присвоить 0F000h вместо 0h
Aiwan \ (•◡•) / _bot
я ж ss нигде в проге не использую, или его использует сам биос в моих прерываниях?
Aiwan \ (•◡•) / _bot
Там ромбиос.
да, а по смещению FA6E таблица символов
Aiwan \ (•◡•) / _bot
хотя....
s54820
я ж ss нигде в проге не использую, или его использует сам биос в моих прерываниях?
int сохраняет адрес возврата в стеке. У тебя процедуры есть, им тоже стек нужен. Да и сам ты со стеком активно работаешь. Стек адресуется по SS:SP, а не просто по SP.
Aiwan \ (•◡•) / _bot
Положи в fs/gs, если тебе пофиг на очень старые компы.
а начиная ч каких процов эти регистры появились?
s54820
386
Aiwan \ (•◡•) / _bot
тогда норм.
Anonymous
386
Int 10h с функцией загрузки шрифтов - это EGA/VGA как минимум, а следовательно 286+
Anonymous
Если по дефолту принимать что у нас VGA, то вгу на 286 было не водрузить. А следовательно если есть VGA, то есть 386
Aiwan \ (•◡•) / _bot
я все тестирую в вртуалбоксе и досбоксе. какие там процессоры???, если можно так правильно задать вопрос
Aiwan \ (•◡•) / _bot
блин
Aiwan \ (•◡•) / _bot
проверяю в виртуал боксе - крошится
Aiwan \ (•◡•) / _bot
где то напортачил, в досбоксе работает
s54820
В винде работает? Отладил бы отдельно сначала.
Aiwan \ (•◡•) / _bot
краш на первом инте, где устанавливается видеорежим
s54820
Покажи, как стек инициализируешь.
Aiwan \ (•◡•) / _bot
cli ;запрещаем прерывания для смены адресов в сегментных регистрах xor ax, 0 mov ss, ax mov sp, 7C00h mov ax, 0B800h mov es, ax sti
Aiwan \ (•◡•) / _bot
я исходник кидал
s54820
А. Я просто думал, ты там попатчил что-нибудь с тех пор.
Aiwan \ (•◡•) / _bot
да особо нет.
Aiwan \ (•◡•) / _bot
нашел ошибку
Anonymous
Xor ax,0
s54820
Чегооо? Покажи, что получилось?
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
s54820
Ну ты там где-то выше ah портишь, наверное.
Aiwan \ (•◡•) / _bot
Xor ax,0
вот ошибка
Anonymous
Надо 33 c0
Anonymous
То есть xor ax,ax
Anonymous
А cli/sti - удалить
Aiwan \ (•◡•) / _bot
я когда mov ax,0 изменял, исправил только mov на xor
s54820
А cli/sti - удалить
А если прерывание между установкой сегмента и SP возникнет?
Anonymous
А если прерывание между установкой сегмента и SP возникнет?
Не возникнет. После обработки прерывания регистры останутся неизменными. Пользуем int 10h, значит, все проинициализировано, bios работает и что было в момент прерывания, то и останется. В 99,9999% всех случаев