Ивановский doom в dss

Компьютер "Спринтер" http://sprinter.nedopc.org

Moderator: Shaos

Sayman
Maniac
Posts: 223
Joined: 05 Oct 2009 19:44
Location: 212.164.105.5

Re: Ивановский doom в dss

Post by Sayman »

А ты в ahdl силён?
DimkaM
Maniac
Posts: 261
Joined: 22 Jun 2005 04:35
Location: МО Россия

Re: Ивановский doom в dss

Post by DimkaM »

не verilog тока, и то в режиме чтения и мелких патчей
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ивановский doom в dss

Post by Shaos »

А можно разжевать для тупых API масштабирования через прошивку? Оно вроде нигде не задокументировано было...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Sayman
Maniac
Posts: 223
Joined: 05 Oct 2009 19:44
Location: 212.164.105.5

Re: Ивановский doom в dss

Post by Sayman »

А можно разжевать для тупых API масштабирования через прошивку? Оно вроде нигде не задокументировано было...
Точно. Единственный пример это исходники дума. судя по этим исходникам и некоторым отдельным выражениям в те времена от Ивана я понял так, что прошивка добавляет аппаратное масштабирование. Более конкретно:
устанавливаем масштаб 1:1. читаем в аксель линию спрайта/текстуры (например, если текстура 64на64, тогда читаем 64 байта в аксель). Далее указываем через порт масштаб с которым будем выводить. Через регистр b задаём старшую часть коэффициента масштабирования, c=0 (всегда, как я понял), данные в сам порт = младшая часть коэффициента. Насколько в плюс и минус можно масштабировать, я пока не знаю, т.к. пока не могу применить эту прошивку.
После того как указали масштаб, говорим акселю, что нужно выкинуть данные из него. Аксель выбросит линию согласно масштаба. Единственное, не уверен, требуется ли по новой задавать размер транзакции или не требуется. Вот запущу прошивку, тогда и понятно будет...
Таким образом прошивка добавляет акселератору дополнительный параметр транзакции (дополнительное управление акселем). на входе чтение как 1к1, но на выходе получаем размер транзакции*hi.low_коэффициент_масштаба. Таким образом линия будет или меньше оригинала или больше.
Если применить эту прошивку, например, к моему ротозумеру, тогда при том же размере (видимом) можно получить больше фпс, т.к. выгрeбaть из текстуры я буду 104 байта, а выкидывать 208. Единственное, дублить строки придётся один фиг.

з.ы. Shaos, форум некоторые слова, почему-то, заменяет на символ $. баг какой-то...
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ивановский doom в dss

Post by Shaos »

Это автоцензор :)

А коэффициент не целый ведь? В каком месте там точка?
Я тут за главного - если что шлите мыло на me собака shaos точка net
Sayman
Maniac
Posts: 223
Joined: 05 Oct 2009 19:44
Location: 212.164.105.5

Re: Ивановский doom в dss

Post by Sayman »

А коэффициент не целый ведь? В каком месте там точка?
я могу привести пример кода из исходника дума.

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
насколько сильно там масштабирование с точкой сказать пока не могу. нужно запустить прошивку для начала.
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Ивановский doom в dss

Post by Shaos »

Глядя на бейсик программу можно предположить:
Масштаб это 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