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

Полигон-2

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

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

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

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

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

<<Назад  Вперед>> Страницы: 1 2 3 4
Печать
 
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.
Сергей С
Member


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


Ссылка


Дата регистрации на форуме:
5 янв. 2017
[q]
А как только второго? От текущей координаты же нужно считать. // да, конечно, требуется только одно действие и проверка остатка
[/q]
По прежнему 2 действия, причём первое осталось тем же, тоесть в корне не поменялось. Речь о возможности не использовать операцию деления, пояснения ниже, и был комментарий Const14 о "достаточно только проверки на граничные условия"
[q]
как организовать задержку по таймеру, который IRQ 0 System Timer?
[/q]
перехват этого прерывания, если не через разные стандартные функции(ah=25/35, int 21h) то "вручную" грубо подставив свой обработчик.
[q]
Через циклы как-то не очень хорошо выглядит...
[/q]
конкретней что выглядит не очень хорошо, теряюсь в множестве возникающих догадок.
[q]
что дается пространство в 64000 точек. // отсылаются новые координаты // Вывод спрайта c заданного адреса // накрутка адреса, просчет границы
[/q]
Вами отсылается одна "координата", и дальше развивать данную программу для поддержки других графических видеорежимов с другой шириной, высотой будет сложнее из таких представлений. Можно остановиться на варианте с игрой "змейка" или другие планы. Границы теже ... самые. Эти выражения говорят о вашем текущем представлении о должной работе программы, стараемся думать без сбивающих с толку аллегорий и упрощений, зачем считаете границу(делить, остаток) и лишь потом необходимое сравнение со значением фиксированной границы.
[q]
Грубо говоря, спрайту задается произвольный адрес из адреса рабочего поля
[/q]
На поле(сетке) 2 координаты, а на линии(цепочке) адресе она одна. Как изменится(будет выглядеть) программа если она для управления будет оперировать не одной координатой, а двумя, а для отображения в видеопамяти переходить на одну?
Planet001
Member


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


Ссылка


Дата регистрации на форуме:
5 дек. 2015
то есть переписать так, чтоб в подпрограмму спрайта 2 координаты шли? соот, из сетки 320х200... но, если я правильно понял, умножение все равно будет. как раз и будет умножение входных координат. результат - одно число или адрес.
ps пытаюсь сделать) пока что-то не очень выходит). Например, 200х200 = 40000, 201x200=40200. Скачет через 200.
Видно, не получается допереть..Ну ладно, еще поковыряю.

Каюсь, была полная ересь. Теперь алгоритм выглядит вот так:
mov ax, y1
mov bx, 320
mul bx
add ax,x1
mov di,ax

управляется строго через inc и dec с проверками:
right:
push ax
push bx
push dx
inc x1
cmp x1,309
ja c1
pop ax
pop bx
pop dx
jmp main_loop

c1:
dec x1
pop ax
pop bx
pop dx
jmp main_loop
Сергей С
Member


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


Ссылка


Дата регистрации на форуме:
5 янв. 2017
Снова лишние действия, подобно сместились в сторону(inc x1), поняли что прошли сквозь стену(cmp x1,) и вернулись назад(dec x1), если прошли - преграды не было? А в стек что ложете/достаёте, тоже самое?
С алгоритмом в виде блок схемы, условия по и ветвления - интересное слово, знакомы ?
Открыл учебник "Основы информатики и вычислительной техники", алгоритмический язык, вот задачка оттуда:
Петя составил алгоритм, а Коля стёр в нём одну команду:
алг прогулка
дано | стен на поле нет
надо | Робот погулял и вернулся в исходное положение
нач
| вверх
| вправо
| ???
| вниз
| влево
| влево
кон
Planet001
Member


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


Ссылка


Дата регистрации на форуме:
5 дек. 2015
прошу прощения, куски про стек это от других манипуляций...
не подумал и оставил. конечно, без push pop.
до стен еще далеко. тут бы сам принцип понять.
а формула эта каноническая. и видел я ее не раз. позиция=x+(y*320)... но совершенно она из головы вылетела.
<<Назад  Вперед>> Страницы: 1 2 3 4
Печать
Полигон-2 »   Технический флейм »   Пишет ли кто-то новый софт под XT? Демки, игры?
RSS

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

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

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