Для игр незаменимая вещь, как раз думаю об этой фиче, т.к. планирую сделать игрушку кроссплатформенную (Spec, Evo и Sprinter)Shaos wrote:А вот чего я точно упустил, так это возможность с помощью номера страницы управлять режимами копирования (сквозное и/или с прозрачностью):Только я пока не встретил ни одной программы, которые бы этим пользовались...Code: Select all
LD A,50h ; Use 50h for normal mode ; 54h for "no copy in main shadow RAM" mode ; 58h for "FF is transparent" mode ; 5Ch for "no copy in main shadow RAM" and ; "FF is transparent" mode OUT (PAGE3),A
Акселератор
Moderator: Shaos
-
- Novelist
- Posts: 35
- Joined: 10 Feb 2011 07:04
- Location: 92.112.8.125
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Как начнёшь делать - кидай сюда демки - я их в своём эмлуяторе постараюсь поддержатьHard wrote:Для игр незаменимая вещь, как раз думаю об этой фиче, т.к. планирую сделать игрушку кроссплатформенную (Spec, Evo и Sprinter)Shaos wrote:А вот чего я точно упустил, так это возможность с помощью номера страницы управлять режимами копирования (сквозное и/или с прозрачностью):Только я пока не встретил ни одной программы, которые бы этим пользовались...Code: Select all
LD A,50h ; Use 50h for normal mode ; 54h for "no copy in main shadow RAM" mode ; 58h for "FF is transparent" mode ; 5Ch for "no copy in main shadow RAM" and ; "FF is transparent" mode OUT (PAGE3),A

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Акселератор
Предлагаю в будущем заюзать LD H,H как задание старшего байта размера блока, причём вызов LD D,D будет задавать младший байт, сбрасывая старший байт в 0 (хотя если устанавливается 0, то как и раньше размер будет браться как 256, т.е. старший байт становится равным единице автоматически). Таким образом можно будет снять ограничение на копирование блоков больше 256 байт...LD B, B - Switch the Accelerator off.
LD D, D - Switch the Accelerator in the mode of load a byte of block size.
Next command is "LD A, dat" where "dat" is a new block size.
LD C, C - Switch the Accelerator to filling by one byte mode for horizontal line.
Next command "LD (HL), A" will fill all bytes by value of A.
LD E, E - Switch the Accelerator to filling by one byte mode for vertical line.
LD H, H - Reserved.
LD L, L - Switch the Accelerator to copying a data block mode for horizontal line of the screen.
Next command "LD A, (HL)" will fill the Accelerator memory by value of (HL).
And the command "LD (DE), A" will copy the data from the Accelerator memory to RAM or to VideoRAM.
LD A, A - Switch the Accelerator to copying a data block mode for vertical line of the screen.
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Акселератор
Либо LD H,H будет задавать младший байт (как и LD D,D), но старший байт при этом будет всегда устанавливаться в 1 автоматом (т.е. максимум в 512 байт можно будет размер копирования установить - это если сделать LD H,H и задать ноль - только в этом случае старший байт станет 2)Shaos wrote:Предлагаю в будущем заюзать LD H,H как задание старшего байта размера блока, причём вызов LD D,D будет задавать младший байт, сбрасывая старший байт в 0 (хотя если устанавливается 0, то как и раньше размер будет браться как 256, т.е. старший байт становится равным единице автоматически). Таким образом можно будет снять ограничение на копирование блоков больше 256 байт...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Акселератор
По последним сводкам LD H,H таки задействована - она удваивает пикселы:
и читает она напрямую с HDD:
и судя по исходнику VPLAY3.ASZ оно используется вот так:
Code: Select all
ACCELER.TDF: WHEN 0 => ACC_DIR[] = B"00000000"; % LD B,B %
ACCELER.TDF: WHEN 1 => ACC_DIR[] = B"00100101"; % LD C,C % % fill by constant %
ACCELER.TDF: WHEN 2 => ACC_DIR[] = B"00001001"; % LD D,D % % load count accelerator %
ACCELER.TDF: WHEN 3 => ACC_DIR[] = B"00010101"; % LD E,E % % fill by constant VERTICAL %
ACCELER.TDF: WHEN 4 => ACC_DIR[] = B"01000001"; % LD H,H % % duble byte fn %
ACCELER.TDF: WHEN 5 => ACC_DIR[] = B"00100111"; % LD L,L % % copy line %
ACCELER.TDF: WHEN 7 => ACC_DIR[] = B"00010111"; % LD A,A % % copy line VERTICAL %
Code: Select all
CASE ACC_DIR6 IS
WHEN 0 => MDOY[7..0] = DI[];
WHEN 1 => MDOY[7..0] = HDDR[];
END CASE;
Code: Select all
LD H,H
REPT 16
INI
INC HL
INC B
ENDM
LD B,B
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Акселератор
Ещё мысль - LD H,H и дальнейшая команда LD A,n могут устанавливать внутренний набор битиков задающих расширенные режимы работы акселератора (по умолчанию все нули):Shaos wrote:Либо LD H,H будет задавать младший байт (как и LD D,D), но старший байт при этом будет всегда устанавливаться в 1 автоматом (т.е. максимум в 512 байт можно будет размер копирования установить - это если сделать LD H,H и задать ноль - только в этом случае старший байт станет 2)Shaos wrote:Предлагаю в будущем заюзать LD H,H как задание старшего байта размера блока, причём вызов LD D,D будет задавать младший байт, сбрасывая старший байт в 0 (хотя если устанавливается 0, то как и раньше размер будет браться как 256, т.е. старший байт становится равным единице автоматически). Таким образом можно будет снять ограничение на копирование блоков больше 256 байт...
бит 0 и 1 - старшие 2 бита длины буфера акселя (вплоть до 1023)
бит 7 - включает режим декремента адреса источника (предложено сегодня пользователем Smalovsky на соседнем форуме):
https://zx-pk.ru/threads/33324-moi-eksperimenty.html?p=1118859&viewfull=1#post1118859
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Акселератор
Сайман тут разбирает spectrum.exe и ему удалось подсмотреть способ как программно можно отключить акселератор
Я проверил - работает 
Чтобы включить его обратно надо в этот порт записать 1

Code: Select all
; Disable accelerator
ld bc,#204E
xor a ; the same as a=0
out (c),a

Чтобы включить его обратно надо в этот порт записать 1
Я тут за главного - если что шлите мыло на me собака shaos точка net