Объявление форума |
Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС. |
Полигон-2 » Технический флейм » Пишет ли кто-то новый софт под XT? Демки, игры? |
<<Назад Вперед>> | Страницы: 1 2 3 4 | Печать |
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? |
<<Назад Вперед>> | Страницы: 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 тем | |