Ивановский doom в dss
Moderator: Shaos
-
- Maniac
- Posts: 223
- Joined: 05 Oct 2009 19:44
- Location: 212.164.105.5
Re: Ивановский doom в dss
А ты в ahdl силён?
-
- Maniac
- Posts: 261
- Joined: 22 Jun 2005 04:35
- Location: МО Россия
Re: Ивановский doom в dss
не verilog тока, и то в режиме чтения и мелких патчей
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Ивановский doom в dss
А можно разжевать для тупых API масштабирования через прошивку? Оно вроде нигде не задокументировано было...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Maniac
- Posts: 223
- Joined: 05 Oct 2009 19:44
- Location: 212.164.105.5
Re: Ивановский doom в dss
Точно. Единственный пример это исходники дума. судя по этим исходникам и некоторым отдельным выражениям в те времена от Ивана я понял так, что прошивка добавляет аппаратное масштабирование. Более конкретно:А можно разжевать для тупых API масштабирования через прошивку? Оно вроде нигде не задокументировано было...
устанавливаем масштаб 1:1. читаем в аксель линию спрайта/текстуры (например, если текстура 64на64, тогда читаем 64 байта в аксель). Далее указываем через порт масштаб с которым будем выводить. Через регистр b задаём старшую часть коэффициента масштабирования, c=0 (всегда, как я понял), данные в сам порт = младшая часть коэффициента. Насколько в плюс и минус можно масштабировать, я пока не знаю, т.к. пока не могу применить эту прошивку.
После того как указали масштаб, говорим акселю, что нужно выкинуть данные из него. Аксель выбросит линию согласно масштаба. Единственное, не уверен, требуется ли по новой задавать размер транзакции или не требуется. Вот запущу прошивку, тогда и понятно будет...
Таким образом прошивка добавляет акселератору дополнительный параметр транзакции (дополнительное управление акселем). на входе чтение как 1к1, но на выходе получаем размер транзакции*hi.low_коэффициент_масштаба. Таким образом линия будет или меньше оригинала или больше.
Если применить эту прошивку, например, к моему ротозумеру, тогда при том же размере (видимом) можно получить больше фпс, т.к. выгрeбaть из текстуры я буду 104 байта, а выкидывать 208. Единственное, дублить строки придётся один фиг.
з.ы. Shaos, форум некоторые слова, почему-то, заменяет на символ $. баг какой-то...
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Ивановский doom в dss
Это автоцензор 
А коэффициент не целый ведь? В каком месте там точка?

А коэффициент не целый ведь? В каком месте там точка?
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Maniac
- Posts: 223
- Joined: 05 Oct 2009 19:44
- Location: 212.164.105.5
Re: Ивановский doom в dss
я могу привести пример кода из исходника дума.А коэффициент не целый ведь? В каком месте там точка?
Code: Select all
; ld c,0
ld b,1
out (c),c ; масштаб 1:1,
exx
set 4,l ;
ld a,(hl) ; номер линии
exx
ld h,a
; ld l,0
ld l,c
set 6,h
res 7,h
ex af,af'
out (cpu_w1),a ; стенка стенка раскидана на 16 килобайт
ld d,d
ld a,40h ; взять 64 байта
ld l,l
ld a,(hl) ; взять немасштабированно!
ld b,b ; стенка в озу акселератора!
ld a,5
place_l2 equ $-1
out (cpu_w1),a ; следующее положение
exx
res 4,l ;
ld a,(hl) ; a - высота
; ld a,80h
exx
ld h,table_x/256
ld l,a ; высота table_x - таблица высот
ld b,(hl) ; старшая часть коэфициента
; ld b,0
inc h
ld l,(hl) ; младшая часть коэфициента/смещение в стенке
; ld c,0
out (c),l ; масштабирование
; outi ; b уменьшается сначала!
bit 7,a
jr z,high_1 ; 64 точки, не на весь экран
; <64 точки, на весь экран
xor a
out (port_y),a ; с самого начала
ld d,d
ld (de),a ; 256 байт и line-z-bufer!!!!
ld b,b
ld a,58h
out (cpu_w3),a ;
ld a,a
ld (de),a ; фигакс всю линию!!!
ld b,b
xor a
ld (de),a ; line-z-bufer!!!!
exx
jr next_angle
Code: Select all
FOR j=0 TO 120
LET a=64/(256-j*2)
POKE 40960+256+j,INT (a)
POKE 40960+j,INT (256*(a-INT (a)))
POKE 40960+512+j,-j*2
NEXT j
RETURN
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Ивановский doom в dss
Глядя на бейсик программу можно предположить:
Масштаб это 64/(256-j*2) т.е. от 64/256=1/4 до 64/16=4
#A000...#A0FF - пишется дробная часть масштаба умноженная на 256
#A100...#A1FF - пишется целая часть масштаба от 0 до 4
#A200...#A2FF - пишется число от 0 до -240 что в положительном виде означает число от 256 до 16 (т.е. новый размер отрезка)
Масштаб это 64/(256-j*2) т.е. от 64/256=1/4 до 64/16=4
#A000...#A0FF - пишется дробная часть масштаба умноженная на 256
#A100...#A1FF - пишется целая часть масштаба от 0 до 4
#A200...#A2FF - пишется число от 0 до -240 что в положительном виде означает число от 256 до 16 (т.е. новый размер отрезка)
Я тут за главного - если что шлите мыло на me собака shaos точка net