Акселератор

Компьютер "Спринтер" http://sprinter.nedopc.org

Moderator: Shaos

Hard
Novelist
Posts: 35
Joined: 10 Feb 2011 07:04
Location: 92.112.8.125

Post by Hard »

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 
Только я пока не встретил ни одной программы, которые бы этим пользовались...
Для игр незаменимая вещь, как раз думаю об этой фиче, т.к. планирую сделать игрушку кроссплатформенную (Spec, Evo и Sprinter)
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Hard wrote:
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 
Только я пока не встретил ни одной программы, которые бы этим пользовались...
Для игр незаменимая вещь, как раз думаю об этой фиче, т.к. планирую сделать игрушку кроссплатформенную (Spec, Evo и Sprinter)
Как начнёшь делать - кидай сюда демки - я их в своём эмлуяторе постараюсь поддержать :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Акселератор

Post by Shaos »

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.
Предлагаю в будущем заюзать LD H,H как задание старшего байта размера блока, причём вызов LD D,D будет задавать младший байт, сбрасывая старший байт в 0 (хотя если устанавливается 0, то как и раньше размер будет браться как 256, т.е. старший байт становится равным единице автоматически). Таким образом можно будет снять ограничение на копирование блоков больше 256 байт...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Акселератор

Post by Shaos »

Shaos wrote:Предлагаю в будущем заюзать LD H,H как задание старшего байта размера блока, причём вызов LD D,D будет задавать младший байт, сбрасывая старший байт в 0 (хотя если устанавливается 0, то как и раньше размер будет браться как 256, т.е. старший байт становится равным единице автоматически). Таким образом можно будет снять ограничение на копирование блоков больше 256 байт...
Либо LD H,H будет задавать младший байт (как и LD D,D), но старший байт при этом будет всегда устанавливаться в 1 автоматом (т.е. максимум в 512 байт можно будет размер копирования установить - это если сделать LD H,H и задать ноль - только в этом случае старший байт станет 2)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Акселератор

Post by Shaos »

По последним сводкам LD H,H таки задействована - она удваивает пикселы:

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 %
и читает она напрямую с HDD:

Code: Select all

        CASE ACC_DIR6 IS
                WHEN 0 => MDOY[7..0] = DI[];
                WHEN 1 => MDOY[7..0] = HDDR[];
        END CASE;
и судя по исходнику VPLAY3.ASZ оно используется вот так:

Code: Select all

        LD H,H
        REPT 16
        INI
        INC HL
        INC B
        ENDM
        LD B,B
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Акселератор

Post by Shaos »

Shaos wrote:
Shaos wrote:Предлагаю в будущем заюзать LD H,H как задание старшего байта размера блока, причём вызов LD D,D будет задавать младший байт, сбрасывая старший байт в 0 (хотя если устанавливается 0, то как и раньше размер будет браться как 256, т.е. старший байт становится равным единице автоматически). Таким образом можно будет снять ограничение на копирование блоков больше 256 байт...
Либо LD H,H будет задавать младший байт (как и LD D,D), но старший байт при этом будет всегда устанавливаться в 1 автоматом (т.е. максимум в 512 байт можно будет размер копирования установить - это если сделать LD H,H и задать ноль - только в этом случае старший байт станет 2)
Ещё мысль - LD H,H и дальнейшая команда LD A,n могут устанавливать внутренний набор битиков задающих расширенные режимы работы акселератора (по умолчанию все нули):
бит 0 и 1 - старшие 2 бита длины буфера акселя (вплоть до 1023)
бит 7 - включает режим декремента адреса источника (предложено сегодня пользователем Smalovsky на соседнем форуме):
https://zx-pk.ru/threads/33324-moi-eksperimenty.html?p=1118859&viewfull=1#post1118859
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Акселератор

Post by Shaos »

Сайман тут разбирает spectrum.exe и ему удалось подсмотреть способ как программно можно отключить акселератор :o

Code: Select all

; Disable accelerator
        ld      bc,#204E
        xor    a ; the same as a=0
        out     (c),a
Я проверил - работает :)

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