Tutorial:plasma — различия между версиями

Материал из SpeccyWiki
Перейти к: навигация, поиск
(Новая страница: «эффект "Plasma" состоит в выборе цвета для каждой позиции с координатами(X,Y) как функции f(x,y) ...»)
 
(Содержимое страницы заменено на «Статья удаленна из-за самоуправства рязанского пидора Димачки Быстров…»)
Строка 1: Строка 1:
эффект "Plasma" состоит в выборе цвета для каждой позиции с координатами(X,Y) как функции f(x,y)
+
Статья удаленна из-за самоуправства рязанского пидора Димачки Быстрова.Сдохни с туберкулеза гнида
наиболее популярен f(x,y)=sin(a)+sin(b),где a,b - значение углов.
+
Для понимания наберите программу на Basic:
+
<code><pre>
+
  1 LET attrsc=22528
+
  10 FOR x=0 TO 23
+
  20 FOR y=0 TO 31
+
  21 POKE attrsc,INT (56*(SIN (x*2*PI/180)+SIN (y*PI/180)))
+
  22 LET attrsc=attrsc+1
+
  30 NEXT y
+
  40 NEXT x
+
</pre></code>
+
 
+
выполнение кода происходит очень долго, поэтому нужно воспользоваться хранением предварительно вычисленных значений синуса,
+
которые подготавливаются так:
+
<code><pre>
+
10 for i=0 to 255
+
20 poke 32768+i,INT(16*SIN(i*PI/180))
+
30 next i
+
</pre></code>
+
 
+
Дальнейшая процедура состоит в выборе необходимых параметров. Будьте креативны.
+
<code><pre>
+
        ORG #61a8
+
 
+
SINE equ #8000;текущая позиция таблицы значений синуса размером 256 байт
+
 
+
  LD HL,sintab; скопируем готовые данные в память
+
  LD DE,SINE
+
  LD BC,#100
+
  LDIR
+
;----------заполним экран шахматным узором
+
  LD HL, #4000
+
  LD A,#AA
+
  LD B,#18
+
M0 LD (HL),A
+
  INC L
+
  JR NZ,M0
+
  CPL
+
  INC H
+
  DJNZ M0
+
 
+
LOOP EI
+
    HALT
+
    DI
+
    CALL PLASM;вызов процедуры
+
 
+
    LD A,127; опрос нажатия клавиши "Пробел"
+
    IN A,(#FE)
+
    RRA
+
    JR C,LOOP
+
    EI
+
    RET
+
;------------------------------------
+
PLASM
+
pva2 LD BC,0;первоначальные значения, которые будут использоваться как SIN
+
LD H, SINE/256;high SINE;HL будет использоваться для доступа к таблице, например, если L=1, то (HL)=SIN(1)
+
LD IX,#5800; регистр для записи значений в область атрибутов
+
pva1 LD DE,0;еще два значения, которые тоже будут использоваться как SIN
+
plp1
+
LD L,E
+
LD A,(HL);(HL)=SIN(E),регистр E в данном случае 0
+
ADD A,A
+
LD L,D;(HL)=SIN(D)
+
ADD A,(HL);A=2*SIN(E)+SIN(D)
+
;RRA
+
LD L,B
+
ADD A,(HL);(HL)=SIN(B),A=2*SIN(E)+SIN(D)+SIN(B)
+
LD L,C;;(HL)=SIN(C)
+
ADD A,(HL);;(HL)=SIN(B),A=2*SIN(E)+SIN(D)+SIN(B)+SIN(C)
+
RRA/делим A на 2
+
AND 7; отрезаем лишнее значение,чтобы в область атрибутов записывались только INK значения
+
LD(IX),A; заносим после вычислений цвет
+
INC IX;и переходим к следующему атрибуту на экране
+
INC D;D=D+1
+
INC E;E=E+3;значения сделаны произвольно
+
INC E
+
INC E
+
LD A,IXL;тест - достигнута ли строка атрибутов
+
AND #1F
+
JR NZ, plp1
+
INC B; аналогично, изменяем значения
+
INC B
+
INC C
+
INC C
+
INC C
+
INC C
+
LD A,IXH; проверка, завершена ли область памяти, где хранятся атрибуты
+
CP #5B
+
JR NZ, pva1
+
  LD HL,(pva1+1);теперь надо изменить начальные значения
+
  INC H;например pva1 LD DE,0
+
  INC L; изменится на LD DE,#0101
+
  ld(pva1+1),HL
+
  LD HL,(pva2+1);еще одна комбинация со значением BC
+
  INC H
+
  INC L
+
  ld(pva2+1),HL
+
  RET;завершение выполнения
+
sintab;зарнее вычисленная таблица синусов
+
db 00h
+
db 00h,00h,00h,01h,01h,01h,01h,02h,02h,02h,02h,03h,03h,03h,03h,04h,04h,04h,04h,05h,05h,05h,05h,06h,06h,06h,06h,07h,07h,07h,07h,07h
+
db 08h,08h,08h,08h,09h,09h,09h,09h,09h,0Ah,0Ah,0Ah,0Ah,0Ah,0Ah,0Bh,0Bh,0Bh,0Bh,0Bh,0Bh,0Ch,0Ch,0Ch,0Ch,0Ch,0Ch,0Ch,0Dh,0Dh,0Dh,0Dh
+
db 0Dh,0Dh,0Dh,0Dh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh
+
db 0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Eh,0Dh,0Dh,0Dh,0Dh,0Dh,0Dh,0Dh,0Dh,0Ch,0Ch,0Ch,0Ch,0Ch,0Ch,0Ch,0Bh,0Bh
+
db 0Bh,0Bh,0Bh,0Bh,0Ah,0Ah,0Ah,0Ah,0Ah,0Ah,09h,09h,09h,09h,09h,08h,08h,08h,08h,07h,07h,07h,07h,07h,06h,06h,06h,06h,05h,05h,05h,05h
+
db 04h,04h,04h,04h,03h,03h,03h,03h,02h,02h,02h,02h,01h,01h,01h,01h,00h,00h,00h,00h,00h,00h,00h,0FFh,0FFh,0FFh,0FFh,0FEh,0FEh,0FEh,0FEh,0FDh
+
db 0FDh,0FDh,0FDh,0FCh,0FCh,0FCh,0FCh,0FBh,0FBh,0FBh,0FBh,0FAh,0FAh,0FAh,0FAh,0F9h,0F9h,0F9h,0F9h,0F9h,0F8h,0F8h,0F8h,0F8h,0F7h,0F7h,0F7h,0F7h,0F7h,0F6h,0F6h,0F6h
+
db 0F6h,0F6h,0F6h,0F5h,0F5h,0F5h,0F5h,0F5h,0F5h,0F4h,0F4h,0F4h,0F4h,0F4h,0F4h,0F4h,0F3h,0F3h,0F3h,0F3h,0F3h,0F3h,0F3h,0F3h,0F2h,0F2h,0F2h,0F2h,0F2h,0F2h,0F2h,0F2h
+
</pre></code>
+
 
+
Продолжение следует...
+
[[Категория:Программирование графики]]
+

Версия 14:47, 1 сентября 2015

Статья удаленна из-за самоуправства рязанского пидора Димачки Быстрова.Сдохни с туберкулеза гнида