|
|
| Строка 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>
| + | |
| − | | + | |
| − | Продолжение следует...
| + | |
| − | [[Категория:Программирование графики]]
| + | |
Статья удаленна из-за самоуправства рязанского пидора Димачки Быстрова.Сдохни с туберкулеза гнида