Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » Технический флейм » Пишет ли кто-то новый софт под XT? Демки, игры? |
<<Назад Вперед>> | Страницы: 1 2 * 3 4 | Печать |
alecv
Advanced Member
Откуда: Санкт-Петербург Всего сообщений: 5545 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 5 окт. 2004 |
Ээээ. На первый взгляд непонятно, почему сравнение идет с 8-битной половинкой AH а не с регистром AX. Подробно честно не смотрел. |
Planet001 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 3 мая 2017 23:36 Сообщение отредактировано: 3 мая 2017 23:43
я ставил AX. Сразу туфта. Движения вправо нет. Принцип таков: текущая координата\320. Выходит, например 1,43. Берется остаток - 0,43 (в DX) и множится на 320. Получается координата в горизонтальной строке (линии) в 320 пикселей. Потом проверка, чтобы за 320 не вылезало. Но по факту доступно только 255. |
Сергей С |
Достаточно ли будет наличие только второго действия? Принцип таков: текущая координата\320. ... Потом проверка, чтобы за 320 не вылезало. |
Const14
Junior Member
Откуда: Москва Всего сообщений: 87 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 3 янв. 2010 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 4 мая 2017 14:05 Сообщение отредактировано: 4 мая 2017 14:06
Planet001 написал: Не понял я чего-то про 1,43 и 0,43. Допустим текущая координата 325, то есть до деления DX=0 AX=325. Выполняем деление на 320. Получаем DX=5 AX=1. Или пусть текущая координата 319, то есть DX=0 AX=319. Делим на 320 и получаем DX=319 AX=0. Разве не так? Принцип таков: текущая координата\320. Выходит, например 1,43.Берется остаток - 0,43 (в DX) и множится на 320. |
Planet001 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 4 мая 2017 15:10 Сообщение отредактировано: 4 мая 2017 15:21
Сергей С А как только второго? От текущей координаты же нужно считать. Const14 Нет. в DX пишется остаток. Это была инфа из какого-то справочника. 325\320 = 1,015. В DX пишется 0,015. Затем 320 * DX это 4,8 . Нам нужно только 4. Итого: 325 это 4 позиция в строке в сетке 320х200. Может есть и другие варианты подсчета. Но я другого не смог придумать. Вот выдержка из справочника: "Если аргументом является регистр из 2 байт(напримерdiv bx), то процессор поделит число, старшие биты которого хранит регистр dx, а младшие ax на значение, хранящееся в регистре bx. Результат от деления запишется в регистр ax, а остаток запишется в регистр dx. (dx,ax)/bx = ax, dx" Но что-то все равно не так в итоге... до 320 проверку осуществить не удается, значит что-то теряется. |
Const14
Junior Member
Откуда: Москва Всего сообщений: 87 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 3 янв. 2010 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 4 мая 2017 15:27 Сообщение отредактировано: 4 мая 2017 15:34
Planet001 написал: Во-первых, процессор имеет дело с целочисленной арифметикой, а во-вторых, ОСТАТОК от целочисленного деления, и ДРОБНАЯ часть действительного числа - это разные вещи. Похоже, Вы их путаете. Целочисленное деление 325 на 320 даёт 1 и в остатке 5!!! Нет. в DX пишется остаток. Это была инфа из какого-то справочника. P.S. Как Вы себе представляете число 0.015 в регистре DX? |
Planet001 |
Ну, вообще-то да. Непонятно. Но граница 1(левая)-254(правая) работают. Надо тогда через остаток сделать. Попробую. Да, верно. ерунда какая-то, конечно. Там же целые числа везде... |
Const14
Junior Member
Откуда: Москва Всего сообщений: 87 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 3 янв. 2010 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 4 мая 2017 16:11 Сообщение отредактировано: 4 мая 2017 16:14
Не люблю давать советы, особенно если о них не просят, но хочу Вам порекомендовать всегда выполнять пошаговую отладку ассемблерных программ в Турбо Дебаггере. |
Planet001 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 4 мая 2017 16:24 Сообщение отредактировано: 4 мая 2017 16:36
right: push ax push bx push dx inc cnt2 mov ax,cnt2 mov dx,0 mov bx,320 div bx cmp dx,310 (!!!!!!!!!!!!!!!!!!!) ja c1 pop ax pop bx pop dx jmp spr_lp c1: dec cnt2 pop ax pop bx pop dx jmp spr_lp спасибо всем! да, конечно, требуется только одно действие и проверка остатка. Есть еще один вопрос: как организовать задержку по таймеру, который IRQ 0 System Timer? Через int 15h на XT что-то не пашет... mov ah,86h mov cx,000Fh mov dx,4240h int 15h Через циклы как-то не очень хорошо выглядит... |
Const14
Junior Member
Откуда: Москва Всего сообщений: 87 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 3 янв. 2010 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 4 мая 2017 22:14 Сообщение отредактировано: 4 мая 2017 22:15
Так, как Вы написали - это для AT и PS. Опять же мнение основанное на собственных пристрастиях. Я раньше часто изучал исходники библиотечных функций BC3.1 в дирректории CRTL\CLIB. Они снабжены достаточным количеством комментариев. Как организовать задержку в нужное количество миллисекунд, можно посмотреть в исходнике функции delay (файл delay.cas) Кстати, не уверен, что в DOSBOX'e все эти действия с таймером и портами будут работать правильно. И ещё, не пойму, зачем нужно применять деление, если движение спрайта происходит всякий раз всего на один пиксел? На первый взгляд достаточно только проверки на граничные условия. Возможно, я не достаточно хорошо вник в суть программы. |
<<Назад Вперед>> | Страницы: 1 2 * 3 4 | Печать |
Полигон-2 » Технический флейм » Пишет ли кто-то новый софт под XT? Демки, игры? |
1 посетитель просмотрел эту тему за последние 15 минут |
В том числе: 1 гость, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |