Если на бордере не видно мерцания, говорящее о времени отрисовки, то надо включить в эмуляторе полный бордер, полоска довольно таки узкая.
Вид для печати
Если на бордере не видно мерцания, говорящее о времени отрисовки, то надо включить в эмуляторе полный бордер, полоска довольно таки узкая.
Что и.т.д? Ноль или всё таки 4? :)
Для такого простого эффекта не нужно строить таблицу, а если и строить, то медленный код вполне подойдёт, так как таблица строится один раз. Надо стремиться сделать короткий код, а не быстрый.
Зачем ты тут написал после тройки ноль, и что твой код медленный? :)
Убрал построение таблицы.
Чуток оптимизнул.
Можно ещё в разы ускорить, если не проверять все 32х24 атрибута на каждом кадре, а указателем шагать по диагоналям, по сторонам ромба. На и так за кадр успевает, а короче получится врятли.
Код:ORG 6000H
ENTRYPOINT $
LD HL,4000H
LD DE,4001H
LD BC,1AFFH
LD (HL),FFH
LDIR
EI
LD A,29
LD (KADR),A
MAINLOOP
LD A,0
OUT (FE),A
HALT
LD A,1
OUT (FE),A
LD A,2
KADR EQU $-1
DEC A
LD IX,5800H
LD HL,SATTR
LD DE,#180C
LOOP1
LD B,#10
LOOP2
DEC A
JR NZ,SKIP1
LD C,(HL)
LD (IX+0),C
SKIP1
INC IX
INC HL
DJNZ LOOP2
LD B,#10
LOOP3
INC A
JR NZ,SKIP2
LD C,(HL)
LD (IX+0),C
SKIP2
INC IX
INC HL
DJNZ LOOP3
DEC E
DEC A
BIT 7,E
JR Z,$+4
INC A
INC A
DEC D
JR NZ,LOOP1
LD HL,KADR
DEC (HL)
JR NZ,MAINLOOP
JR $
SATTR
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 00H, 2DH, 2DH, 2DH, 00H, 2DH, 2DH
DEFB 2DH, 00H, 00H, 00H, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 2DH
DEFB 2DH, 00H, 2DH, 00H, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 00H, 2DH, 00H, 00H, 00H, 2DH, 00H, 2DH
DEFB 2DH, 00H, 00H, 00H, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 2DH
DEFB 2DH, 00H, 00H, 00H, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 00H, 00H, 2DH, 2DH, 2DH, 00H, 00H, 2DH
DEFB 00H, 00H, 00H, 00H, 00H, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 2DH
DEFB 2DH, 00H, 00H, 00H, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 00H, 2DH, 00H, 2DH, 2DH, 2DH
DEFB 2DH, 00H, 2DH, 00H, 2DH, 2DH, 2DH, 2DH
DEFB 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH, 2DH
DEFB 12H, 12H, 12H, 12H, 12H, 12H, 12H, 12H
DEFB 12H, 12H, 12H, 12H, 12H, 12H, 12H, 12H
DEFB 12H, 12H, 12H, 12H, 12H, 12H, 12H, 12H
DEFB 12H, 12H, 12H, 12H, 12H, 12H, 12H, 12H
все же я табличку построил, 45 байт
Код:device zxspectrum128
ORG #6000
begin
; jr $
; inc d;$14
; dec d;$15
; ld hl,#4000,de,#4001,bc,6143,(hl),#AA:ldir
ld hl,#5800
ld d,$1B
call draw
ld d,$11
ld a,$14,(opcode1),a
call draw
jr $
draw:
ld c,12
sp0:
ld e,d
ld b,16
sp1: ld (hl),e
dec e
inc hl
djnz sp1
ld b,16
sp2:
ld (hl),e
inc e,hl
djnz sp2
opcode1: dec d
dec c
jr nz,sp0
ret
end
display /d,end-begin
savesna "spir.sna",begin
возвращаясь к вычислению числа pi=3.141
хоть и считается число, но выходит медленно
Накалякал процедуру опроса всех 40 клавиш Спектрума. В результате выдает коды нажатых одной или двух одновременно клавиш.
Почему-то никогда не встречал такой процедуры у других. Везде только опрос конкретных нескольких клавиш.
А мне сейчас нужен генератор случайных чисел в диапазоне от 0 до Х. Число Х задается в начале процедуры, может быть любым в диапазоне 1..65535. Ни у кого не завалялась? :)Код:; чтение до двух одновременно нажатых клавиш
; вход: нет
; выход: (code_key_1),(code_key_2) = коды нажатых клавиш (если не нажата, то 0)
readkey ld de,0
ld (code_key_1),de
ld bc,32766
call readkey_10
ld bc,49150
call readkey_10
ld bc,57342
call readkey_10
ld bc,61438
call readkey_10
ld bc,63486
call readkey_10
ld bc,64510
call readkey_10
ld bc,65022
call readkey_10
ld bc,65278
call readkey_10
ret
readkey_10 in a,(c)
rrca
call nc,readkey_20
inc e
rrca
call nc,readkey_20
inc e
rrca
call nc,readkey_20
inc e
rrca
call nc,readkey_20
inc e
rrca
call nc,readkey_20
inc e
ret
readkey_20 push af
ld bc,code_key_1
ld a,(bc)
and a
jp z,readkey_21
inc bc
readkey_21 ld hl,table_code_key
add hl,de
ld a,(hl)
ld (bc),a
pop af
ret
code_key_1 defb 0 ; код нажатой клавиши 1
code_key_2 defb 0 ; код нажатой клавиши 2
table_code_key defb 32,16,77,78,66 ; таблица кодов нажатых клавиш для полурядов
defb 13,76,75,74,72
defb 80,79,73,85,89
defb 48,57,56,55,54
defb 49,50,51,52,53
defb 81,87,69,82,84
defb 65,83,68,70,71
defb 17,90,88,67,86