|
|
| (не показано 5 промежуточных версии 3 участников) |
| Строка 1: |
Строка 1: |
| − | Процедура разработана Busy, встречается в построениях окружности и линии. Для построения точек необходимо подготовить вспомогательную таблицу, которая занимает 4*256=1024 байта:
| + | Господа, я не порчу, я делаю последнее китайское предупреждение. |
| − | 0-255 байт: старшие значащие байты адреса экрана(координата Y)
| + | |
| − | 256-511 байт: младшие значащие байты адреса экрана(координата Y)
| + | |
| − | 512-767 байт: смещение по экрану(координата X)
| + | |
| − | 768-1023 байт: битовые значения(координата X)
| + | |
| − | | + | |
| − | <code><pre>
| + | |
| − | PIX_TAB EQU #7C00
| + | |
| − | PIX_TAB_HI EQU PIX_TAB/256;#7C
| + | |
| − | | + | |
| − | ORG #6000
| + | |
| − | ;формирование адресов
| + | |
| − | INIT LD DE,#4000;адрес экранной области
| + | |
| − | LD L,E
| + | |
| − | LD BC,#8000
| + | |
| − | ILP1 LD H,PIX_TAB_HI;high - аналог [ в Storm.
| + | |
| − | LD(HL),D;старший байт
| + | |
| − | INC H
| + | |
| − | LD (HL),E;младший байт
| + | |
| − | INC H
| + | |
| − | LD (HL),C;смещение X
| + | |
| − | INC H
| + | |
| − | LD (HL),B;битовое значение
| + | |
| − | CALL DOWN_DE;следующая линия экрана
| + | |
| − | RRC B;циклический сдвиг битового значения - #80->#40->...->#4->#2->#1
| + | |
| − | LD A,C; после того, когда в регистре B хранилось значение 1, сдвиг RRC установил флаг переноса C=1
| + | |
| − | ADC A,0; поэтому вместо проверки выполняем сложение регистра C с учетом, получается C=C+1
| + | |
| − | LD C,A
| + | |
| − | INC L; переходим к следующей таблице
| + | |
| − | JR NZ,ILP1;завершение цикла, 0-255
| + | |
| − | ; при первоначальном выполнении в таблицу заносятся значения от #4000 до #5800
| + | |
| − | ; поэтому процедура построения при значении Y>191 внесет изменения в атрибуты
| + | |
| − | ; чтобы не выполнять проверку, заполним часть таблицы нулями
| + | |
| − | LD HL,PIX_TAB+96
| + | |
| − | ILP2 LD (HL),0
| + | |
| − | INC L
| + | |
| − | JR NZ,ILP2
| + | |
| − | RET
| + | |
| − | ;-------------------------------
| + | |
| − | DOWN_DE INC D
| + | |
| − | LD A,D
| + | |
| − | AND 7
| + | |
| − | RET NZ
| + | |
| − | LD A,E
| + | |
| − | ADD A,32
| + | |
| − | LD E,A
| + | |
| − | RET C
| + | |
| − | LD A,D
| + | |
| − | SUB 8
| + | |
| − | LD D,A
| + | |
| − | RET
| + | |
| − | | + | |
| − | </pre></code>
| + | |
| − | ставим точку, входные данные DE=YX координаты
| + | |
| − | <code><pre>
| + | |
| − | PLOT PUSH HL
| + | |
| − | PUSH BC;сохранить на стеке используемые регистры
| + | |
| − | LD H,PIX_TAB_HI
| + | |
| − | LD L,D
| + | |
| − | LD B,(HL)
| + | |
| − | INC H
| + | |
| − | LD A,(HL)
| + | |
| − | LD L,E
| + | |
| − | INC H
| + | |
| − | OR (HL)
| + | |
| − | INC H
| + | |
| − | LD C,A;BC=адрес экрана
| + | |
| − | LD A,(BC); чтобы поставить точку нужно получить значение из экрана
| + | |
| − | OR (HL); проводим операцию OR
| + | |
| − | LD (BC),A; занести значение по адресу
| + | |
| − | POP BC;восстановить сохраненные регистры
| + | |
| − | POP HL
| + | |
| − | RET
| + | |
| − | </pre></code>
| + | |
| − | | + | |
| − | [[Категория:Программирование графики]]
| + | |
Господа, я не порчу, я делаю последнее китайское предупреждение.