Почему когда я опрашиваю клавиши после установки цвета бордюра и вертикального скролинга кодом ниже, цвет бордюра не устанавливается корректно?
Код:
LXI H,palette_sprites+15 ; ЗАПИСЬ ПАЛИТРЫ.
LXI D,$100F
INIT1: MOV A,E
OUT 02
MOV A,M
OUT $0c
OUT $0c
OUT $0c
OUT $0c
OUT $0c
DCX H
OUT $0c
DCR E
OUT $0c
DCR D
OUT $0c
JNZ INIT1
NWRPAL:
MVI A,$88
OUT 00
mvi a, 1 ; УСТАНОВКА ЦВЕТА БОРДЮРА.
ANI $0F
OUT 02
mvi a, 255 ; УСТАНОВКА ВЕРТИКАЛЬНОГО ПОЛОЖЕНИЯ ЭКРАНА.
OUT 03
MVI A,$8A ; ПРОВЕРКА НАЖАТИЯ НА ЛЮБУЮ КЛАВИШУ
OUT 00 ; МАТРИЦЫ КЛАВИАТУРЫ 8*8 (КРОМЕ УС,СС,РУС/ЛАТ).
XRA A
OUT 03
IN 2
STA anyKeyPressed
MVI A,$FE ; ПРОВЕРКА НАЖАТИЯ НА КЛАВИШИ ИГРОВОГО РЯДА.
OUT 03
IN 02
STA keyCode
но когда я опращиваю клавиши до бордюра и скроллинга, то все равботает как нужно?
Код:
LXI H,palette_sprites+15 ; ЗАПИСЬ ПАЛИТРЫ.
LXI D,$100F
INIT1: MOV A,E
OUT 02
MOV A,M
OUT $0c
OUT $0c
OUT $0c
OUT $0c
OUT $0c
DCX H
OUT $0c
DCR E
OUT $0c
DCR D
OUT $0c
JNZ INIT1
NWRPAL:
MVI A,$8A ; ПРОВЕРКА НАЖАТИЯ НА ЛЮБУЮ КЛАВИШУ
OUT 00 ; МАТРИЦЫ КЛАВИАТУРЫ 8*8 (КРОМЕ УС,СС,РУС/ЛАТ).
XRA A
OUT 03
IN 2
STA anyKeyPressed
MVI A,$FE ; ПРОВЕРКА НАЖАТИЯ НА КЛАВИШИ ИГРОВОГО РЯДА.
OUT 03
IN 02
STA keyCode
MVI A,$88
OUT 00
mvi a, 1 ; УСТАНОВКА ЦВЕТА БОРДЮРА.
ANI $0F
OUT 02
mvi a, 255 ; УСТАНОВКА ВЕРТИКАЛЬНОГО ПОЛОЖЕНИЯ ЭКРАНА.
OUT 03
проверял в Emu80 и VV
- - - Добавлено - - -
Вот тестовая программа для Pretty Asm
Код:
.project helv06c.rom
.tape v06c-rom
.org $100
StartInit:
DI
; dismount a quasi-disk
XRA A
out $10
; set entry points of a restart, and an interruption
MVI A, 0C3h
STA 0
STA 38h
LXI H, StartInit
SHLD 1
LXI H, Interruption1
SHLD 38h + 1
; stack init
LXI SP, 8000h
EI
HLT
; clear the screen
CALL CLEAR
Start: JMP Start
CLEAR: DI
PUSH H ; СОХРАНИТЬ ИСПОЛЬЗУЕМЫЕ РЕГИСТРЫ.
PUSH B
PUSH D
PUSH PSW
LXI H,0000H ; ПОДГОТОВИТЬ HL ДЛЯ ВЗЯТИЯ ЗНАЧЕНИЯ SP.
DAD SP ; ВЗЯТЬ ЗНАЧЕНИЕ SP ПУТЕМ СЛОЖЕНИЯ С HL.
LXI SP,0000H ; НАЧАТЬ СТИРАНИЕ С АДРЕСА 0FFFFH.
LXI D,0000H ; В DE - ЗНАЧЕНИЕ, КОТОРЫМ БУДЕТ СТЕРТ ЭКРАН.
LXI B,0800H ; В BC - СЧЕТЧИК.
CLEAR1: PUSH D ; НАЧАТЬ СТИРАТЬ ЭКРАН ПУТЕМ "ОПУСКАНИЯ" СТЕКА.
PUSH D ; ВЫПОЛНИТЬ 8 ОПЕРАЦИЙ "В ЛОБ" ДЛЯ СКОРОСТИ.
PUSH D
PUSH D
PUSH D
PUSH D
PUSH D
PUSH D
DCX B ; УМЕНЬШИТЬ СЧЕТЧИК И
MOV A,B ; ПРОВЕРИТЬ ЕГО.
ORA C ; КОНЕЦ СЧЕТА?
JNZ CLEAR1 ; ЕСЛИ НЕТ - ПРОДОЛЖАТЬ СТИРАНИЕ.
SPHL ; ВЕРНУТЬ ПРЕЖНЕЕ ЗНАЧЕНИЕ SP И
POP PSW ; ВСЕХ РЕГИСТРОВ.
POP D
POP B
POP H
EI
RET
anyKeyPressed: .db 0
keyCode: .db 0
palette_sprites:
.DB 01001010b, 00000001b, 01011100b, 00011010b,
.DB 11100100b, 11111101b, 01110111b, 01011111b,
.DB 01000010b, 01001011b, 01001100b, 11111111b,
.DB 11111111b, 11101011b, 00001010b, 01011011b,
;----------------------------------------------------------------
; Common interruption sub
Interruption1:
PUSH PSW
PUSH B
PUSH D
PUSH H
; common interruption logic
LXI H,palette_sprites+15 ; ЗАПИСЬ ПАЛИТРЫ.
LXI D,$100F
INIT1: MOV A,E
OUT 02
MOV A,M
OUT $0c
OUT $0c
OUT $0c
OUT $0c
OUT $0c
DCX H
OUT $0c
DCR E
OUT $0c
DCR D
OUT $0c
JNZ INIT1
MVI A,$88
OUT 00
mvi a, 1 ; УСТАНОВКА ЦВЕТА БОРДЮРА.
ANI $0F
OUT 02
mvi a, 255 ; УСТАНОВКА ВЕРТИКАЛЬНОГО ПОЛОЖЕНИЯ ЭКРАНА.
OUT 03
MVI A,$8A ; ПРОВЕРКА НАЖАТИЯ НА ЛЮБУЮ КЛАВИШУ
OUT 00 ; МАТРИЦЫ КЛАВИАТУРЫ 8*8 (КРОМЕ УС,СС,РУС/ЛАТ).
XRA A
OUT 03
IN 2
STA anyKeyPressed
MVI A,$FE ; ПРОВЕРКА НАЖАТИЯ НА КЛАВИШИ ИГРОВОГО РЯДА.
OUT 03
IN 02
STA keyCode
; end common interruption logic
POP H
POP D
POP B
POP PSW
EI
RET
end