Мне нужно писать комментарий про то, что будет с моим решением, если есть один (или два) свободных регистра?! :)))))))))))))))))))))
Вид для печати
А то ещё можно сделать такой инкремент одной командой ld l,(hl) :)
А у меня счётчик в L, а не в аккумуляторе :)
А у меня совсем нет счетчика, во дела))
раньше не сталкивался, но пригодилась и такая процедура:
расчет адреса экрана по координатам знакомест
оттудаКод:; Get screen address
; D = Y character position
; E = X character position
; Returns address in DE
;
Get_Char_Address: LD A,D
AND %00000111
RRA
RRA
RRA
RRA
OR E
LD E,A
LD A,D
AND %00011000
OR %01000000
LD D,A
RET ; Returns screen address in DE
Помогите с оптимизацией построения вертикальной линии. То, что я надумал не устраивает по скорости
Дело в том, что на входе желательно только иметь адрес и кол-во точек, и до начала построения основного экрана строится линия примерно из 350 точек, хочется выйти на 700 :)
Код:/// вход hl,adr, b - длина, а - сколько попадает на первое знакоместо (128-1 точка, 64-2точки ... 1-8точек)
line ld hl,16384 ;начало линии
ld b,85
ld a,1
///
sc0 set 2,(hl) ;рисуем в одном знакоместе
inc h ;
rlca ;
jr c,sc1 ;
djnz sc0 ;
ret
sc1 ex af,af ;переходим на знакоместо ниже
ld a,l
add a,32
ld l,a
jr c,sc3
ld a,h
sub 8
ld h,a
sc3 ex af,af
djnz sc0
ret