Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » Технический флейм » Пишет ли кто-то новый софт под XT? Демки, игры? |
<<Назад Вперед>> | Страницы: 1 2 3 4 | Печать |
Planet001 |
Может не нашел, но просто интересно. Ведь тема Z80 развивается и сейчас. Музыка, демки. Возможно, и игры. Хоть и время этих машин остановилось, в какой-то степени это даже хорошо. Можно создавать софт, не думая о том, что через год все купят 286. Как мне кажется, в свое время пользовательская тема XT не была полностью раскрыта. Чего не скажешь о Commodore, ATARI, ZX. Кроме диггера, попкорна и тетриса играть, по сути не во что. Порт "монтезумы" вызывает печаль. При этом, характеристики XT превышают тот же ZX и им подобным. |
Rio444
Гость
Откуда: Ростов-на-Дону Всего сообщений: 8632 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 14 сен. 2014 |
У тех же Спектрумов одна стандартная конфигурация (или две, если считать 128К). Программы можно "вылизать" и везде они будут идти одинаково. У XT мало того, что множество вариантов, так они менее распространены и подороже. В общем XT родоначальник всего пути "IBM PC совместимых": делаем программу так, чтобы это хоть как-то работало на максимальном числе конфигураций. Если не хватает ресурсов, апгрейдим. |
Tronix
Advanced Member
Откуда: Москва Всего сообщений: 1749 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 15 янв. 2008 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 24 марта 2017 20:24 Сообщение отредактировано: 24 марта 2017 20:39
Да пробовал пяток лет назад: cga dots Но Все-таки CGA режим не очень, либо из меня хреновый кодер -) Лет в 16 я думал что знаю все о асеме и всей апаратуре. Лет в 24 пришло осознание что я не знаю ничего. А сейчас в 34+ я склоняюсь к полному отсутствию знаний об x86. А отцы нормально сделали: https://www.youtube.com/watch?...NRO7lno_DM Ну и конечно corruption, кодек видосики смотреть. |
Tronix
Advanced Member
Откуда: Москва Всего сообщений: 1749 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 15 янв. 2008 |
Ваще, демосцена пишет. И на oldcomputers чувак игруху какую-то писал, и демок для CGA иXT есть. И видео на них крутят со звуком. Все есть. |
Planet001 |
да, посмотрел. игру поищу. а на чем оптимально писать под 8088? неужели только полностью ассемблер? |
alecv
Advanced Member
Откуда: Санкт-Петербург Всего сообщений: 5545 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 5 окт. 2004 |
Planet001 Borland Turbo C 2.01 , вдобавок это совершенно легально т.к. Borland (нынче Embarcadero) отдала его в бесплатное использование. https://edn.embarcadero.com/article/20841 |
Planet001 |
alecv написал: а поддержка по форумам приличная, в том числе и русскоязычных? что-то с ходу не много нашлось. Planet001 Borland Turbo C 2.01 , вдобавок это совершенно легально т.к. Borland (нынче Embarcadero) отдала его в бесплатное использование. |
alecv
Advanced Member
Откуда: Санкт-Петербург Всего сообщений: 5545 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 5 окт. 2004 |
Planet001 написал: Компилятору почти 30 лет уже, вы про что ? Много ли по русскоязычным форумам поддержки XT ? а поддержка по форумам приличная, в том числе и русскоязычных? что-то с ходу не много нашлось. Спрашивайте конкретные вопросы. |
Planet001 |
alecv написал: турбо асму тоже прилично, но инфы много. Компилятору почти 30 лет |
i8088
Advanced Member
Откуда: г. Баку, Азербайджан Всего сообщений: 2132 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 30 янв. 2015 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 3 апреля 2017 19:01 Сообщение отредактировано: 3 апреля 2017 19:02
Planet001 написал: Инфориацию можете искать по C части DOS компиляторов от Borland C++ а поддержка по форумам приличная, в том числе и русскоязычных? что-то с ходу не много нашлось. для DOS. Почти все "Borland-зависимые" функции у них одинаковые. TC2.01 приятен тем, что еще не имеет поддержки C++. Я правда последнее время предпочитаю компилятор MSC 5-6 версии, он поновее TC 2.01, и еще не испорчен C++. |
alecv
Advanced Member
Откуда: Санкт-Петербург Всего сообщений: 5545 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 5 окт. 2004 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 4 апреля 2017 9:00 Сообщение отредактировано: 16 апреля 2017 23:35
Planet001 OK. Попробую донести мысль еще раз. В начале 90-х интернеты были не очень развиты, особенно русскоязычные. Весь набор "сакральных знаний" по программированию графики на С остался в книжках тех лет. Например: Герберт Шилдт "С" для профессиональных программистов. М., 1989 Л. Аммерал. Принципы программирования в машинной графике. М.: "Сол Систем", 1992 первое что попалось, вообще их много P.S. Натолкнулся на неприятную багу? фичу? Borland TC 2.0: в описании структуры одно из полей - union, объединяющий вложенную структуру и ее байтовое представление (нужно для полей заголовка ISO 9660). Дает syntax error, gcc компилит нормально. Так что он все-таки старенький и современные диалекты C не понимает. |
Planet001 |
все же интересен TASM на данный момент. но , блин, как же неудобно редактировать текст в DOS BOX окне DN EDIT. нет ли каких-то адаптированных форков DOS-BOX, заточенных под ASM? ну, например, слева окно доса, справа нормальный текстовый редактор... вроде как под Z80 есть похожее... чтоб сразу писать и применять. просто я не могу сразу генерить нужный код, чтоб потом по 100 раз не править. ну и , конечно, убивает отсутствие нужных функций типа случайных чисел. есть какие-то готовые простыни с кодом готовые в инете, но если их не понимать, то и смысла как-то нет. |
alecv
Advanced Member
Откуда: Санкт-Петербург Всего сообщений: 5545 Рейтинг пользователя: 0 Ссылка Дата регистрации на форуме: 5 окт. 2004 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 16 апреля 2017 23:38 Сообщение отредактировано: 17 апреля 2017 0:11
Planet001 Насколько помню, из Borland Turbo Debugger + TASM + BRIEF можно как раз сделать что тебе нужно. А функции как раз в C есть, компилятор С можно рассматривать как мега-мега ассемблер. Куча всяких исходников есть в SIMTEL DOS коллекции. Там же есть всякие библиотеки, типа FREELIB. Еще полезно почитать старые Dr.Dobbs. Хороший был журнал. RIP. |
Planet001 |
Профиль | Сообщить модератору
NEW! Сообщение отправлено: 3 мая 2017 21:54 Сообщение отредактировано: 3 мая 2017 22:03 .model tiny .data VIDEOMODE dw 0 cnt1 dw 0 cnt2 dw 0 cnt3 dw 0 cnt4 dw 0 aa3 db "BYE!!!!$" h1 db 0,0,0,0,0,0,0,0,0,0 db 0,14,9,9,9,9,9,9,14,0 db 0,9,9,0,0,0,0,9,9,0 db 0,9,0,9,0,0,9,0,9,0 db 0,9,0,0,9,9,0,0,9,0 db 0,9,0,0,9,9,0,0,9,0 db 0,9,0,9,0,0,9,0,9,0 db 0,9,9,0,0,0,0,9,9,0 db 0,14,9,9,9,9,9,9,14,0 \tdb 0,0,0,0,0,0,0,0,0,0 .code org 100h start: MOV AH,0Fh ;save video mode INT 10h MOV byte ptr VIDEOMODE,AL; mov ax,013H ; screen mode int 10h push 0A000h ; video segment pop es mov cnt2,400 spr_lp: mov di,cnt2 call sprite call delay1 mov AH, 06h ;функция dos mov DL, 0FFh ;ввод символа из буфера клавиатуры int 21h cmp al,27 je exit_dos cmp al,75 je left cmp al,77 je right cmp al,80 je down cmp al,72 je up loop spr_lp exit_dos: mov ah,09h lea dx, aa3 int 21h MOV AX,VIDEOMODE ; restore videomode INT 10h INT 20h; exit to DOS left: push ax push bx push dx dec cnt2 mov ax,cnt2 mov dx,0 mov bx,320 div bx mov ax,320 mul dx cmp ah,1 jb c2 pop ax pop bx pop dx jmp spr_lp c2: inc cnt2 pop ax pop bx pop dx jmp spr_lp right: push ax push bx push dx inc cnt2 mov ax,cnt2 mov dx,0 mov bx,320 div bx mov ax,320 mul dx cmp ah,254 (!!!!!!!!!!!!!!!) ja c1 pop ax pop bx pop dx jmp spr_lp c1: dec cnt2 pop ax pop bx pop dx jmp spr_lp down: add cnt2,320 cmp cnt2,60800 ja a1 jmp spr_lp a1: sub cnt2,320 jmp spr_lp up: sub cnt2,320 cmp cnt2,320 jb b1 jmp spr_lp b1: add cnt2,320 jmp spr_lp sprite: mov cx,1 lp001: push cx mov cx,10 lp002: push cx mov cx,10 lp0: mov al,[h1[bx]] stosb inc bx loop lp0 add di,310 pop cx loop lp002 pop cx ;call delay1 xor bx,bx loop lp001 ret delay1: push ax push dx push cx mov cx,10000 dly: nop nop loop dly pop ax pop dx pop cx ret end start alecv Это программа, которая двигает по экрану фигурку. Но вот то место, которое помечено, победить мне не удалось. Проверка должна быть по числу 310 или 320. Это правая граница поля. Но регистр поддерживает только 255 (FF) Не могли бы вы подсказать, как это исправить? Прошу прощения, но может быть неверно выбрал тему. |
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 все эти действия с таймером и портами будут работать правильно. И ещё, не пойму, зачем нужно применять деление, если движение спрайта происходит всякий раз всего на один пиксел? На первый взгляд достаточно только проверки на граничные условия. Возможно, я не достаточно хорошо вник в суть программы. |
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? Демки, игры? |
0 посетителей просмотрели эту тему за последние 15 минут |
В том числе: 0 гостей, 0 скрытых пользователей |
Последние | |
[Москва] LIQUID-Акция. Сливаются разъемы CF МС7004 и 7004А на AT и XT Пайка термотрубок Проммать s478 PEAK 715VL2-HT ( Full-Size SBC) Подскажите по 386 материке по джамперам. |
Самые активные 5 тем | |