Aiwan \ (•◡•) / _bot
судя по ссылке выше у чело проблема с уефи
С ОС. Точнее, UEFI не может смапить устройства.
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?
Aiwan \ (•◡•) / _bot
sp можно любой задать в разумных и правильных пределах. 0-7с00 память не используется, разве что для стека, но его можно и уменьшить
Aiwan \ (•◡•) / _bot
s54820
s54820
будем считать, что мы прошли процедуру инициализации регистров процессора после reset (мне сейчас откровенно лень лезть в талмуд по iApx32 архитектуре), поэтому код push 0/pop ss не вызовет exceptions
Код не вызовет исключений, но мы можем что-нибудь системное попортить при SS=0. Это маловероятно, но и ради экономии байта закладываться на то, что разработчики всех биосов адекватные, тоже не очень хорошо. Лучше заменить mov ax,0 на xor ax,ax, а байт сэкономить, например, на mov ax,1 -> mov al,1 ниже.
Anonymous
Код не вызовет исключений, но мы можем что-нибудь системное попортить при SS=0. Это маловероятно, но и ради экономии байта закладываться на то, что разработчики всех биосов адекватные, тоже не очень хорошо. Лучше заменить mov ax,0 на xor ax,ax, а байт сэкономить, например, на mov ax,1 -> mov al,1 ниже.
Соглашусь. 33 C0 8e d0 вместо 6a 00 17
Anonymous
Экономия копеечная, но работать будет всегда
Anonymous
Хотя, иногда одного байта может и не хватить, тогда приходится делать допущения подобного рода (push 0/pop ss)
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
113-119 байт еще свободно
Anonymous
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 нигде в проге не использую, или его использует сам биос в моих прерываниях?
s54820
Aiwan \ (•◡•) / _bot
Там ромбиос.
да, а по смещению FA6E таблица символов
Aiwan \ (•◡•) / _bot
Anonymous
Aiwan \ (•◡•) / _bot
s54820
386
Aiwan \ (•◡•) / _bot
тогда норм.
Anonymous
386
Int 10h с функцией загрузки шрифтов - это EGA/VGA как минимум, а следовательно 286+
Anonymous
Если по дефолту принимать что у нас VGA, то вгу на 286 было не водрузить. А следовательно если есть VGA, то есть 386
Aiwan \ (•◡•) / _bot
я все тестирую в вртуалбоксе и досбоксе. какие там процессоры???, если можно так правильно задать вопрос
s54820
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
нашел ошибку
Aiwan \ (•◡•) / _bot
Код не вызовет исключений, но мы можем что-нибудь системное попортить при SS=0. Это маловероятно, но и ради экономии байта закладываться на то, что разработчики всех биосов адекватные, тоже не очень хорошо. Лучше заменить mov ax,0 на xor ax,ax, а байт сэкономить, например, на mov ax,1 -> mov al,1 ниже.
вот так делать низя: xor ax,ax вместо mov
Anonymous
Xor ax,0
s54820
Чегооо? Покажи, что получилось?
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
s54820
Ну ты там где-то выше ah портишь, наверное.
Aiwan \ (•◡•) / _bot
Anonymous
Надо 33 c0
Anonymous
То есть xor ax,ax
Anonymous
А cli/sti - удалить
Aiwan \ (•◡•) / _bot
я когда
mov ax,0
изменял, исправил только mov на xor