Цитата Сообщение от Reobne Посмотреть сообщение
moronizzz,
2) По хитрому не знаю. Нужно по честному: знать какой у тебя сейчас цвет бордюра, и при записи в порт FE этот цвет подтверждать в младших трёх битах.
Вот посмотри на код из статьи, строка 30. Программист знал, что цвет белый и только белый. И он смело пишет константу 7.
Тут "подтверждение" работает только один раз, потому что если в цикле заново указывать цвет, то будет сбрасываться и четвёртый бит, у меня сейчас примерно так всё это выглядит:

Скрытый текст


DI ; ban interrupt

LD A, %00000100 ; A = Border color

main_loop:
LD A, D ; A recovery
LD BC, 2000 ; BC = length
BEGIN:
;XOR %00010000 ; inverting bits D4

; чтобы сохранить цвет бордюра
BIT 4, A
LD A, %00000100

JP NZ, skip_set
SET 4, A
skip_set
JP Z, skip_res
RES 4, A
skip_res

OUT (254), A ; output to port A 254
LD E, A
LD A, (delay)
LD D, A ; D = delay (frequency)
LD A, E

PAUSE:
DEC D ; D = D-1
JR NZ, PAUSE ; if D <> 0 then loop

DEC BC ; BC = BC-1
LD D, A ; preservation A

LD A, B ; BC = 0?
OR C ;

JR NZ, BEGIN ; if BC <> 0 then loop

LD A, (delay)
SUB 5
CP 0
JP Z, finish
LD (delay), A
JR main_loop
RET
finish:
nop

EI ; permission to interrupt
RET ; return to BASIC

delay: DEFB 255
[свернуть]