Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС.

Полигон-2 »   Технический флейм »   Пишет ли кто-то новый софт под XT? Демки, игры?
RSS

Пишет ли кто-то новый софт под XT? Демки, игры?

<<Назад  Вперед>> Страницы: 1 2 * 3 4
Печать
 
Сергей С
Member


Всего сообщений: 151
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 янв. 2017
[q]
Принцип таков: текущая координата\320. ... Потом проверка, чтобы за 320 не вылезало.
[/q]
Достаточно ли будет наличие только второго действия?
Const14
Junior Member


Откуда: Москва
Всего сообщений: 87
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
3 янв. 2010
Planet001 написал:
[q]
Принцип таков: текущая координата\320. Выходит, например 1,43.Берется остаток - 0,43 (в DX) и множится на 320.
[/q]
Не понял я чего-то про 1,43 и 0,43. Допустим текущая координата 325, то есть до деления DX=0 AX=325. Выполняем деление на 320. Получаем DX=5 AX=1. Или пусть текущая координата 319, то есть DX=0 AX=319. Делим на 320 и получаем DX=319 AX=0. Разве не так?
Planet001
Member


Всего сообщений: 191
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 дек. 2015
Сергей С
А как только второго? От текущей координаты же нужно считать.
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
Planet001 написал:
[q]
Нет. в DX пишется остаток. Это была инфа из какого-то справочника.
[/q]
Во-первых, процессор имеет дело с целочисленной арифметикой, а во-вторых, ОСТАТОК от целочисленного деления, и ДРОБНАЯ часть действительного числа - это разные вещи. Похоже, Вы их путаете. Целочисленное деление 325 на 320 даёт 1 и в остатке 5!!!

P.S. Как Вы себе представляете число 0.015 в регистре DX?
Planet001
Member


Всего сообщений: 191
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 дек. 2015
Ну, вообще-то да. Непонятно. Но граница 1(левая)-254(правая) работают.
Надо тогда через остаток сделать. Попробую. Да, верно. ерунда какая-то, конечно. Там же целые числа везде...
Const14
Junior Member


Откуда: Москва
Всего сообщений: 87
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
3 янв. 2010
Не люблю давать советы, особенно если о них не просят, но хочу Вам порекомендовать всегда выполнять пошаговую отладку ассемблерных программ в Турбо Дебаггере.
Planet001
Member


Всего сообщений: 191
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 дек. 2015
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
Так, как Вы написали - это для AT и PS.

Опять же мнение основанное на собственных пристрастиях. Я раньше часто изучал исходники библиотечных функций BC3.1 в дирректории CRTL\CLIB. Они снабжены достаточным количеством комментариев. Как организовать задержку в нужное количество миллисекунд, можно посмотреть в исходнике функции delay (файл delay.cas) Кстати, не уверен, что в DOSBOX'e все эти действия с таймером и портами будут работать правильно.

И ещё, не пойму, зачем нужно применять деление, если движение спрайта происходит всякий раз всего на один пиксел? На первый взгляд достаточно только проверки на граничные условия. Возможно, я не достаточно хорошо вник в суть программы.
Planet001
Member


Всего сообщений: 191
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 дек. 2015
Я отталкивался от того, что дается пространство в 64000 точек. Если вывести спрайт сразу, например с 5000-ной точки, то как бы нужно сразу сообщить ему границы. То есть, ему можно задать почти любую стартовую точку в рабочем поле и далее управлять им и при этом все установленные границы отрабатывают верно. Как-то так. Есть подпрограмма рисования спрайта с входным параметром (адрес в рабочем поле - DI). В нее постоянно отсылаются новые координаты при нажатии соот кнопок.
То есть нажал "вправо" и пошло - 5001,5002. Это DI+1 в реальности.Или cnt2+1. Если не просчитать границу, то спрайт вылезет уже слева с новой строчки... Грубо говоря, спрайту задается произвольный адрес из адреса рабочего поля и он уже должен знать все границы.
Вывод спрайта c заданного адреса, задержка,опрос клавиатуры крутится в основном Loop.
По условным переходам - накрутка адреса, просчет границы.
Приведенный алгоритм - единственное, что пришло в голову.
По поводу задержек да, DOS-DOX ругается на int 15h в консоли, но выполняет. Но, как я понимаю, это для машин 286+.
На 8088 есть только некий системный таймер. Причем его юзает какой-то русификатор, судя по показаниям checkit.
Вероятно, к нему можно как-то подцепиться.
Но, приходится костылить с циклами, так как я просто не понимаю, как это сделать.

вот сам исполняемый COM уже с исправлениями
Const14
Junior Member


Откуда: Москва
Всего сообщений: 87
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
3 янв. 2010
Теперь понятно.
Что касается задержки, повторюсь. Функция delay из библиотеки BC3.1 реализована довольно просто и основана на циклическом считывании содержимого регистра таймера и проверки его на достижение заданного расчётного значения.
И ещё, тоже повторюсь, лучше всего такие эксперименты с железом проводить из-под реальной DOS.
<<Назад  Вперед>> Страницы: 1 2 * 3 4
Печать
Полигон-2 »   Технический флейм »   Пишет ли кто-то новый софт под XT? Демки, игры?
RSS

0 посетителей просмотрели эту тему за последние 15 минут
В том числе: 0 гостей, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS