Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » Технический флейм » Пишет ли кто-то новый софт под XT? Демки, игры? |
<<Назад Вперед>> | Страницы: 1 2 3 * 4 | Печать |
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 все эти действия с таймером и портами будут работать правильно. И ещё, не пойму, зачем нужно применять деление, если движение спрайта происходит всякий раз всего на один пиксел? На первый взгляд достаточно только проверки на граничные условия. Возможно, я не достаточно хорошо вник в суть программы. |
Planet001 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 4 мая 2017 22:53 Сообщение отредактировано: 4 мая 2017 23:02
Я отталкивался от того, что дается пространство в 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. |
Сергей С |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 5 мая 2017 10:44 Сообщение отредактировано: 5 мая 2017 11:01 По прежнему 2 действия, причём первое осталось тем же, тоесть в корне не поменялось. Речь о возможности не использовать операцию деления, пояснения ниже, и был комментарий Const14 о "достаточно только проверки на граничные условия" А как только второго? От текущей координаты же нужно считать. // да, конечно, требуется только одно действие и проверка остатка перехват этого прерывания, если не через разные стандартные функции(ah=25/35, int 21h) то "вручную" грубо подставив свой обработчик. как организовать задержку по таймеру, который IRQ 0 System Timer? конкретней что выглядит не очень хорошо, теряюсь в множестве возникающих догадок. Через циклы как-то не очень хорошо выглядит... Вами отсылается одна "координата", и дальше развивать данную программу для поддержки других графических видеорежимов с другой шириной, высотой будет сложнее из таких представлений. Можно остановиться на варианте с игрой "змейка" или другие планы. Границы теже ... самые. Эти выражения говорят о вашем текущем представлении о должной работе программы, стараемся думать без сбивающих с толку аллегорий и упрощений, зачем считаете границу(делить, остаток) и лишь потом необходимое сравнение со значением фиксированной границы. что дается пространство в 64000 точек. // отсылаются новые координаты // Вывод спрайта c заданного адреса // накрутка адреса, просчет границы На поле(сетке) 2 координаты, а на линии(цепочке) адресе она одна. Как изменится(будет выглядеть) программа если она для управления будет оперировать не одной координатой, а двумя, а для отображения в видеопамяти переходить на одну? Грубо говоря, спрайту задается произвольный адрес из адреса рабочего поля |
Planet001 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 5 мая 2017 15:54 Сообщение отредактировано: 5 мая 2017 20:16
то есть переписать так, чтоб в подпрограмму спрайта 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 |
Сергей С |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 5 мая 2017 21:08 Сообщение отредактировано: 5 мая 2017 21:22
Снова лишние действия, подобно сместились в сторону(inc x1), поняли что прошли сквозь стену(cmp x1,) и вернулись назад(dec x1), если прошли - преграды не было? А в стек что ложете/достаёте, тоже самое? С алгоритмом в виде блок схемы, условия по и ветвления - интересное слово, знакомы ? Открыл учебник "Основы информатики и вычислительной техники", алгоритмический язык, вот задачка оттуда: Петя составил алгоритм, а Коля стёр в нём одну команду: алг прогулка дано | стен на поле нет надо | Робот погулял и вернулся в исходное положение нач | вверх | вправо | ??? | вниз | влево | влево кон |
Planet001 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 5 мая 2017 22:28 Сообщение отредактировано: 5 мая 2017 22:30
прошу прощения, куски про стек это от других манипуляций... не подумал и оставил. конечно, без push pop. до стен еще далеко. тут бы сам принцип понять. а формула эта каноническая. и видел я ее не раз. позиция=x+(y*320)... но совершенно она из головы вылетела. |
Сергей С |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 6 мая 2017 16:22 Сообщение отредактировано: 6 мая 2017 16:32
Принцип простой - не врать, иначе дальше опять ложь для поддержания рабочести предыдущей, а составить математическую модель того, что происходит как вы видите. Оффтопик: Оффтопик: Пройдя стену, мы окажемся на её другой стороне ? Поэтапно Алгоритм - Блок схема - язык Высокого уровня - ассемблер - Двоичный код. А как сейчас выглядит код? Нравится, оптимизировать или и так хватает быстродействия, как оценивать? Есть вопрос о необходимости переходить на специализированные форумы. |
<<Назад Вперед>> | Страницы: 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 тем | |