
Сообщение от
metamorpho
Вот вывод графики через стек пробовал - в целом работет но есть артефакты на экране
Скрытый текст
; универсальный вывод трети спрайта для затирания пустого места
SpriteC8zerowww:
PUSH H
PUSH D
PUSH B
PUSH PSW
MOV A,H ; сохраняем начало столбик X плоскость (1) куда выводим графику
STA pozic_xP1
ADI 20H ; вычисляем следующую плоскость (2) начальный столбец
STA pozic_xP2 ; сохраняем
ADI 20H ; вычисляем следующую плоскость (3) начальный столбец
STA pozic_xP3 ; сохраняем
MOV D,L
;=======================
LXI H,0 ; ВЫВОД "ПУСТОГО" СПРАЙТА. (СДЕЛАН ОТДЕЛЬНО ПО
DAD SP ; БЫСТРОМУ АЛГОРИТМУ ДЛЯ ПОВЫШЕНИЯ БЫСТРОДЕЙСТВИЯ).
SHLD BUFSP
DI
LXI B,00h
LDA pozic_xP1
MOV H,A ; установка первого столбца X плоскость (1) куда выводим графику
MOV L,D
SPHL
PUSH B
PUSH B
PUSH B
PUSH B
INR H
SPHL
PUSH B
PUSH B
PUSH B
PUSH B
INR H
SPHL
PUSH B
PUSH B
PUSH B
PUSH B
LDA pozic_xP2
MOV H,A ; установка первого столбца X плоскость (1) куда выводим графику
MOV L,D
SPHL
PUSH B
PUSH B
PUSH B
PUSH B
INR H
SPHL
PUSH B
PUSH B
PUSH B
PUSH B
INR H
SPHL
PUSH B
PUSH B
PUSH B
PUSH B
LDA pozic_xP3
MOV H,A ; установка первого столбца X плоскость (1) куда выводим графику
MOV L,D
SPHL
PUSH B
PUSH B
PUSH B
PUSH B
INR H
SPHL
PUSH B
PUSH B
PUSH B
PUSH B
INR H
SPHL
PUSH B
PUSH B
PUSH B
PUSH B
LHLD BUFSP
SPHL
EI
POP PSW
POP B
POP D
POP H
RET
[свернуть]
А что это за метод Медногова ?
это у тебя не вывод спрайта, это у тебя стирание спрайта.
метод Медноногова состоит в том чтобы контролировать регистровую пару содержащую данные и контролировать стек на прерываниях.
прерывание выглядит так
надеюсь ты умеешь код Z80
Код:
ISR
di
ex (sp),hl ;забираем в hl адрес возврата
ld (isr_jmp),hl ;сохраняем его для выхода
pop hl ;восстанавливаем hl
;здесь надо сохранить стек
ld (isr_stek),sp ;это для Z80 у тебя будет чуть по другому
;--------------------------
push bc ;ВСЕГДА используем BC для рисования спрайтов и прочих элементов
;восстанавливаем данные на стеке
;скорее всего рисовать через стек на экране не будет очень хорошей идеей.
ld sp,isr_own_stek
push hl,de,bc,af
;дальше прерываем
pop af,bc,de,hl
ld sp,$
isr_stek equ $-2
ei
jp $
isr_jmp equ $-2
при рисовании спрайта всегда использовать BC
например
Код:
;hl адрес спрайта
;de адрес на экране
;первую пару забираем вот такой комбинацией
ld c,(hl)
inc hl
ld b,(hl)
inc hl
ld sp,hl
ex de,hl
ld (hl),c
inc l
ld (hl),b
inc l
pop bc
etc