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

Полигон-2

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

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

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

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

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

<<Назад  Вперед>> Страницы: 1 2 * 3 4
Печать
 
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
Не люблю давать советы, особенно если о них не просят, но хочу Вам порекомендовать всегда выполнять пошаговую отладку ассемблерных программ в Турбо Дебаггере.
<<Назад  Вперед>> Страницы: 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