Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Boot программка, что-то в ней не так... 
:(
    Опции темы
Coder
Дата 6.11.2005, 06:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: нет
Всего: 11



написал такой нехитрый код, компильнул в fasm и закинул на дискету rawwriter`ом:
Код

  boot_program equ 07c00h ;position for boot code

  jmp start_boot

  msg db 'Boot master',0
  x db ?
  y db ?

 start_boot:
  xor ax,ax ; ax=0
  mov ss,ax ; ss=0
  mov sp,boot_program ; sp=0x7C00
  push ss ;
  pop ds  ; ds=0

  ; вывод на экран сообщение msg
  mov si,msg+boot_program
loop_loading:
  lodsb
  or al,al
  jz move_cursor
  mov ah,0eh
  mov bx,07h
  int 010h
  jmp loop_loading

  ; перемещаем курсор по экрану
 move_cursor:
  ; читаем данные о текущем положени курсора
  mov ah, 3
  mov bh, 0
  int 10h
  mov [x], dl ; запоминаем положение
  mov [y], dh

 wait_cursor:
  ; читаем символы введенные с клавы
  mov ah, 0
  int 16h
  ; обрабатываем
  cmp al, 0
  jnz wait_cursor
  cmp ah, 72 ;up
  jz press_up
  cmp ah, 80 ;down
  jz press_down
  cmp ah, 75 ;left
  jz press_left
  cmp ah, 77 ;right
  jz press_right
  jmp wait_cursor ; если нажаты не стрелки

 press_up:
  ; задаем новую позицию курсора
  cmp [y], 0    ; чтобы за экран не выскакивал
  jz wait_cursor
  mov ah, 2
  mov bh, 0
  mov dh, [y]
  dec dh ; уменьшаем координату на 1
  int 10h
  jmp move_cursor
 press_down:
  cmp [y], 24     ; чтобы за экран не выскакивал
  jz wait_cursor
   ; задаем новую позицию курсора
  mov ah, 2
  mov bh, 0
  mov dh, [y]
  inc dh ; уыеличиваем координату на 1
  int 10h
  jmp move_cursor
 press_left:
  cmp [x], 0    ; чтобы за экран не выскакивал
  jz wait_cursor
   ; задаем новую позицию курсора
  mov ah, 2
  mov bh, 0
  mov dl, [x]
  dec dl ; уменьшаем координату на 1
  int 10h
  jmp move_cursor
 press_right:
  cmp [x], 79; чтобы за экран не выскакивал
  jz wait_cursor
   ; задаем новую позицию курсора
  mov ah, 2
  mov bh, 0
  mov dl, [x]
  inc dl ; увеличиваем координату на 1
  int 10h
  jmp move_cursor

  dw 55h,0AAh ; boot signature


суть кода в том, что при загрузке с дискеты можно курсором на клавиатуре перещать курсор по экрану. вопрос в том, что где-то здесь есть ошибка - работает этот код "через раз". почему, может кто увидел?

Это сообщение отредактировал(а) Coder - 6.11.2005, 06:06
PM MAIL   Вверх
Kergan
Дата 6.11.2005, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.8.2005

Репутация: нет
Всего: 5



Тестировал на своей машине, все идет стабильно.
Не знаю, может ли это повлиять, но сигнатура бут-сектора вроде должна находться в конце сектора, 510-м и 511-м байтом (или убери ее вообще, нормальный БИОС и так загрузит)...
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :(
PM MAIL ICQ   Вверх
Coder
Дата 7.11.2005, 04:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: нет
Всего: 11



Странно, может потому что я использую VMWare - виртуальную машину...
PM MAIL   Вверх
Akina
Дата 7.11.2005, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Цитата(Coder @ 6.11.2005, 07:03)
где-то здесь есть ошибка - работает этот код "через раз".

Уточни - первое сообщение всегда, а движение курсора - через раз, или и первое сообщение - через раз, или бывает любой из 3 вариантов?

Цитата(Kergan @ 6.11.2005, 12:06)
убери ее вообще, нормальный БИОС и так загрузит

Как раз нормальный БИОС этого обязан НЕ делать - отсутствие сигнатуры означает что данные в секторе невалидны (мусор).

Цитата(Coder @ 7.11.2005, 05:12)
может потому что я использую VMWare

вряд ли.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Coder
Дата 9.11.2005, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: нет
Всего: 11



Akina, первое сообщение всегда появляется, а вот поведение курсора я понять не могу.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0531 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.