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

Полигон-2

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

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

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

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

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

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


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


Ссылка


Дата регистрации на форуме:
5 дек. 2015
Может не нашел, но просто интересно. Ведь тема 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
Да пробовал пяток лет назад: 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
Member


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


Ссылка


Дата регистрации на форуме:
5 дек. 2015
да, посмотрел. игру поищу. а на чем оптимально писать под 8088? неужели только полностью ассемблер?
alecv
Advanced Member


Откуда: Санкт-Петербург
Всего сообщений: 5545
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 окт. 2004
Planet001 Borland Turbo C 2.01 , вдобавок это совершенно легально т.к. Borland (нынче Embarcadero) отдала его в бесплатное использование.

https://edn.embarcadero.com/article/20841
Planet001
Member


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


Ссылка


Дата регистрации на форуме:
5 дек. 2015
alecv написал:
[q]
Planet001 Borland Turbo C 2.01 , вдобавок это совершенно легально т.к. Borland (нынче Embarcadero) отдала его в бесплатное использование.

https://edn.embarcadero.com/article/20841
[/q]
а поддержка по форумам приличная, в том числе и русскоязычных? что-то с ходу не много нашлось.
alecv
Advanced Member


Откуда: Санкт-Петербург
Всего сообщений: 5545
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 окт. 2004
Planet001 написал:
[q]
а поддержка по форумам приличная, в том числе и русскоязычных? что-то с ходу не много нашлось.
[/q]
Компилятору почти 30 лет уже, вы про что ? Много ли по русскоязычным форумам поддержки XT ?

Спрашивайте конкретные вопросы.
Planet001
Member


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


Ссылка


Дата регистрации на форуме:
5 дек. 2015
alecv написал:
[q]
Компилятору почти 30 лет
[/q]
турбо асму тоже прилично, но инфы много.
i8088
Advanced Member


Откуда: г. Баку, Азербайджан
Всего сообщений: 2132
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 янв. 2015
Planet001 написал:
[q]
а поддержка по форумам приличная, в том числе и русскоязычных? что-то с ходу не много нашлось.
[/q]
Инфориацию можете искать по C части DOS компиляторов от Borland C++
для DOS. Почти все "Borland-зависимые" функции у них одинаковые.

TC2.01 приятен тем, что еще не имеет поддержки C++.
Я правда последнее время предпочитаю компилятор MSC 5-6 версии, он
поновее TC 2.01, и еще не испорчен C++.
alecv
Advanced Member


Откуда: Санкт-Петербург
Всего сообщений: 5545
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 окт. 2004
Planet001 OK. Попробую донести мысль еще раз. В начале 90-х интернеты были не очень развиты, особенно русскоязычные. Весь набор "сакральных знаний" по программированию графики на С остался в книжках тех лет.
Например:
Герберт Шилдт "С" для профессиональных программистов. М., 1989
Л. Аммерал. Принципы программирования в машинной графике. М.: "Сол Систем", 1992
первое что попалось, вообще их много

P.S. Натолкнулся на неприятную багу? фичу? Borland TC 2.0: в описании структуры одно из полей - union, объединяющий вложенную структуру и ее байтовое представление (нужно для полей заголовка ISO 9660). Дает syntax error, gcc компилит нормально. Так что он все-таки старенький и современные диалекты C не понимает.
Planet001
Member


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


Ссылка


Дата регистрации на форуме:
5 дек. 2015
все же интересен TASM на данный момент. но , блин, как же неудобно редактировать текст в DOS BOX окне DN EDIT.
нет ли каких-то адаптированных форков DOS-BOX, заточенных под ASM? ну, например, слева окно доса, справа нормальный текстовый редактор... вроде как под Z80 есть похожее...
чтоб сразу писать и применять. просто я не могу сразу генерить нужный код, чтоб потом по 100 раз не править.
ну и , конечно, убивает отсутствие нужных функций типа случайных чисел. есть какие-то готовые простыни с кодом готовые в инете, но если их не понимать, то и смысла как-то нет.
alecv
Advanced Member


Откуда: Санкт-Петербург
Всего сообщений: 5545
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 окт. 2004
Planet001 Насколько помню, из Borland Turbo Debugger + TASM + BRIEF можно как раз сделать что тебе нужно.

А функции как раз в C есть, компилятор С можно рассматривать как мега-мега ассемблер.

Куча всяких исходников есть в SIMTEL DOS коллекции. Там же есть всякие библиотеки, типа FREELIB.

Еще полезно почитать старые Dr.Dobbs. Хороший был журнал. RIP.
Planet001
Member


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


Ссылка


Дата регистрации на форуме:
5 дек. 2015

.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
Member


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


Ссылка


Дата регистрации на форуме:
5 дек. 2015
я ставил AX. Сразу туфта. Движения вправо нет.

Принцип таков: текущая координата\320. Выходит, например 1,43.
Берется остаток - 0,43 (в DX) и множится на 320. Получается координата в горизонтальной строке (линии) в 320 пикселей. Потом проверка, чтобы за 320 не вылезало. Но по факту доступно только 255.
Сергей С
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.
Сергей С
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)... но совершенно она из головы вылетела.
Сергей С
Member


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


Ссылка


Дата регистрации на форуме:
5 янв. 2017
Принцип простой - не врать, иначе дальше опять ложь для поддержания рабочести предыдущей, а составить математическую модель того, что происходит как вы видите.
Оффтопик: Оффтопик: Пройдя стену, мы окажемся на её другой стороне ?

Поэтапно Алгоритм - Блок схема - язык Высокого уровня - ассемблер - Двоичный код.
А как сейчас выглядит код? Нравится, оптимизировать или и так хватает быстродействия, как оценивать?
Есть вопрос о необходимости переходить на специализированные форумы.
<<Назад  Вперед>> Страницы: 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