Echo #05
31 августа 1998

Программирование - Драйвер памяти.

<b>Программирование</b> - Драйвер памяти.
┌────────────────────────────────────────┐
│░░░░░░░░░░░ Программирование ░░░░░░░░░░░│
└────────────────────────────────────────┘

              Драйвер памяти

(C) Pawel/RS

   Этот  драйвер  является   переработкой,
опубликованного в ZX-FORMAT'е 5.Теперь на-
личие 128-й памяти определяется не по ПЗУ,
в  процессе теста не портятся байты в бан-
ках, таблица  используемых банков формиру-
ется  специальной подпрограммкой, что зна-
чительно  сокращает  и объем ассемблерного
текста и объектного кода. Кроме этого дра-
йвер  реорганизован с целью выделить блоки
ненужные  после  проведения  теста памяти.
После  теста  количество  доступных банков
хранится  в переменной PAGE, а тип компью-
тера в TYPE, для расшифровки ее комбинации
битов, вам  придется  почитать  ZX-FORMAT.
Переключение логических банков осуществля-
ется  подпрограммой ONPAGE. Данный драйвер
успешно был использован в REAL COMMANDERе,
а также в более древней программке, потре-
ковом копировщике REALCOPY. Его надежность
проверена  многолетней  эксплуатацией этих
программ.

;Memory driver
;(C) Pawel/RS
;(C) Creator
;Перед  работой с драйвером вызовите подп-
;рограмму START, для инициализации и опре-
;деления свободной памяти.

;Подключение логического банка, номер в A,
;нумерация начинается с нуля.
ONPAGE  PUSH    BC
        PUSH    HL
        LD      C,A
        LD      B,0
        LD      HL,TABL_PG
        ADD     HL,BC
        LD      A,(HL)
        POP     HL
        POP     BC
EX_RAM  DI
        PUSH    HL
        PUSH    AF
        PUSH    BC
        LD      HL,TYPE
        BIT     1,(HL)
        JR      NZ,ZS256
        BIT     2,(HL)
        JR      NZ,PROFI
        BIT     3,(HL)
        JR      NZ,TURBO_2
        BIT     4,(HL)
        JR      NZ,ATM1
        BIT     0,(HL)
        JR      NZ,SPECCY
        BIT     7,(HL)
        JR      NZ,SPECCY
        JR      TDK

TURBO_2 PUSH    AF
        PUSH    IX
        AND     24
        CPL
        LD      BC,#FFF7
        CALL    OUTC_A
        POP     IX
        POP     AF
        JP      SPECCY

ATM1    LD      BC,#FDFD
        PUSH    AF
        RRCA
        RRCA
        RRCA
        AND     3
        JR      HOME

PROFI   LD      BC,#DFFD
        PUSH    AF
        RRCA
        RRCA
        RRCA
        AND     7
        JR      HOME

ZS256   PUSH    AF
        LD      B,A
        AND     %00001000
        RLCA
        LD      C,A
        LD      A,B
        AND     %00110000
        RLCA
        RLCA
        ADD     A,C
        LD      BC,#1FFD
HOME    OUT     (C),A
        NOP
        POP     AF

SPECCY  LD      B,A
        AND     24
        RLCA
        RLCA
        RLCA
        LD      C,A
        LD      A,B
        AND     7
        ADD     A,C
        OR      16
        LD      BC,#7FFD
        OUT     (C),A
        NOP
TDK     POP     BC
        POP     AF
        POP     HL
        RET

OUTC_A  LD      IX,10835
        PUSH    IX
        JP      15663


;Инициализация  и тест памяти, вызывается
;в начале работы, после чего память зани-
;маемую программой ниже, можно использо-
;вать по своему усмотрению.

START   CALL    TEST
        LD      A,(8)
        CP      #2A   ;если SCORPION, то
        RET     Z     ;удалить из списка
        LD      C,8   ;8-й банк, исполь-
        JP      DEBUG ;зующийся монитором.

TEST    CALL    TABINIT
        XOR     A
        LD      (TYPE),A
        INC     A
        LD      (PAGE),A
        DI
        LD      A,(#08)
        CP      #C3
        JR      NZ,ITURBO
        LD      HL,TYPE
        SET     7,(HL)
ITURBO  LD      HL,(1111)
        LD      BC,#FFF7
        LD      A,%00011111
        CALL    OUTC_A
        LD      DE,(#C000+1111)
        AND     A
        SBC     HL,DE
        LD      BC,#FFF7
        LD      A,255
        CALL    OUTC_A
        JR      NZ,IDFFD
        LD      HL,TYPE
        SET     3,(HL)
        JR      I7FFD
MM_ATM  DB      #DB,#1F,#C9
IDFFD   LD      HL,#80
        LD      DE,#1000
        LD      BC,#DFFD
        OUT     (C),D
        NOP
        LD      A,(HL)
        INC     (HL)
        CP      (HL)
        LD      (HL),A
        OUT     (C),E
        NOP
        JR      Z,I1FFD
        LD      HL,TYPE
        SET     2,(HL)
        OUT     (C),D
        NOP
        LD      B,#7F
        OUT     (C),D
        NOP
        LD      B,#DF
        OUT     (C),E
        NOP
        JR      I7FFD
I1FFD   LD      DE,#1110
        LD      B,#1F
        OUT     (C),D
        NOP
        LD      A,(HL)
        INC     (HL)
        CP      (HL)
        LD      (HL),A
        OUT     (C),E
        NOP
        JR      Z,IFDFD
        XOR     A
        OUT     (C),A
        LD      HL,TYPE
        SET     1,(HL)
        JP      I7FFD
IFDFD   LD      B,C
        LD      HL,#FFFF
        OUT     (C),D
        NOP
        LD      B,#7F
        OUT     (C),D
        NOP
        LD      A,(HL)
        LD      (RBT2+1),A
        LD      (HL),D
        LD      B,C
        OUT     (C),E
        NOP
        LD      B,#7F
        OUT     (C),D
        NOP
        LD      A,(HL)
        LD      (RBT+1),A
        LD      (HL),E
        LD      B,C
        OUT     (C),D
        NOP
        LD      B,#7F
        OUT     (C),D
        NOP
        LD      A,(HL)
        CP      D
        JR      NZ,I7FFD
        LD      HL,TYPE
        SET     4,(HL)
I7FFD   LD      HL,#FFFF
        LD      B,#7F
        OUT     (C),E
        NOP
        LD      A,(HL)
        LD      (RBT0+1),A
        LD      (HL),E
        OUT     (C),D
        NOP
        LD      (HL),D
        OUT     (C),E
        NOP
        LD      A,D
        CP      (HL)
        JR      Z,SIZED
        LD      HL,TYPE
        SET     0,(HL)
SIZED   LD      HL,#FFFF
RBT0    LD      (HL),0
        LD      B,C
        OUT     (C),E
        NOP
        LD      B,#7F
        OUT     (C),D
        NOP
RBT     LD      (HL),0
        LD      B,C
        OUT     (C),D
        NOP
        LD      B,#7F
        OUT     (C),D
        NOP
RBT2    LD      (HL),0
        CALL    VIRT
        LD      A,(PAGE)
        CP      8
        JR      C,ENDING
        LD      A,(TYPE)
        CP      1
        JR      NZ,ENDING
        LD      HL,TYPE
        SET     5,(HL)
ENDING  XOR     A
        CALL    EX_RAM
        EI
        RET

VIRT    LD      IX,#C000
        LD      HL,VTABL+63
        LD      B,64
V_R11   LD      A,B
        DEC     A
        CALL    EX_RAM
        LD      C,(IX+0)
        LD      (HL),C
        LD      (IX+0),A
        DEC     HL
        DJNZ    V_R11
        PUSH    AF
        LD      A,LENTABL-1
        LD      (PAGE),A
        POP     AF
        LD      DE,TABL_PG
V_R20   LD      A,(DE)
        CP      #FF
        JR      Z,V_R30
        CALL    EX_RAM
        CP      (IX+0)
        JR      Z,V_R22
        PUSH    DE
        LD      HL,TABL_PG+LENTABL
        AND     A
        SBC     HL,DE
        PUSH    HL
        POP     BC
        PUSH    DE
        POP     HL
        INC     HL
        LDIR
        PUSH    HL
        LD      HL,PAGE
        DEC     (HL)
        POP     HL
        POP     DE
        DEC     DE
V_R22   INC     DE
        JR      V_R20
V_R30   LD      B,64
        LD      HL,VTABL
V_R31   LD      A,64
        SUB     B
        CALL    EX_RAM
        LD      A,(HL)
        LD      (IX+0),A
        INC     HL
        DJNZ    V_R31
        RET

;удаление из таблицы банка с номером в
;регистре C, вызывать сразу после теста.

DEBUG   PUSH    DE
        POP     HL
NO_PG1  DEC     DE
        LD      A,(DE)
        CP      #FF
        JR      Z,NO_PG2
        CP      C
        JR      NZ,NO_PG1
        SBC     HL,DE
        PUSH    HL
        POP     BC
        PUSH    DE
        POP     HL
        INC     HL
        LDIR
        PUSH    HL
        LD      HL,PAGE
        DEC     (HL)
        POP     HL
        DEC     HL
        DEC     HL
NO_PG2  EX      DE,HL
        RET

;Создание таблицы банков, с исключением
;не использующихся, в данном варианте
;удаляются 2-й и 5-й банки.

TABINIT LD      HL,TABL_PG-1
        LD      (HL),255
        INC     HL
        XOR     A
TABI1   LD      (HL),A
        INC     A
        CP      2
        JR      Z,TABI1A
        CP      5
        JR      Z,TABI1A
        JR      TABI2
TABI1A  INC     A
TABI2   INC     HL
        CP      LENTABL+1
        JR      NZ,TABI1
        LD      (HL),255
        LD      HL,VTABL
        PUSH    HL
        POP     DE
        INC     DE
        LD      BC,63
        LD      (HL),0
        LDIR
        RET

LENTABL EQU     62 ;максимальное количес-
                   ;тво использующихся
                   ;банков.

        DB      0  ;код начала таблицы
TABL_PG DS      LENTABL+1

TYPE    DB      0  ;тип компьютера

PAGE    DB      0  ;общее число доступных
                   ;банков

VTABL   EQU     23296 ;таблица банков, ис-
                      ;пользуется только
                      ;при тесте, 64 байта
                               -----------
                                  16.09.98

''''''''''''''''''''''''''''''''''''''''''




Другие статьи номера:

Вступление - Беларусские новости из мира Спектрума.

Обзор warez'а - Обзор новинок ПО: Зеркало, Nenther Earth+, The Mission, Fisherman, Puzzle, The Last Courier, Операция Р.Р., Волшебник Страны ОЗ, Sexmine Sniper, Fox Hunter, Lady in Love, Aany Tank, CLV-Copier v1.0, STS v6.2 , Digital Studio Record, ZASM v3.10, Sample Studio.

Обзор warez'а - Обзор ПО выпущенного в Бресте в 96-97г: Compress Copy, New Copy, Real Copy, Echo 1-3, Tehcnodrom, Sprites Generator, Text Print, Text Format, Impulse 1, Code Disassembler, Cyber Dream, Password Protect Files, Installator Stealth Boot, Real Commander, Heavy on the Magic.

Разборочка - Описание игры ОПЕРАЦИЯ Р.Р.

Разборочка - Формат отгрузки в игре Bard'S Tale.

Разборочка - Несколько советов по прохождению игры Зеркало (MIRROR).

Интервью - Интервью с автором серии демок "Monsters" - Inkognito Soft.

Game Project - War in Space - новая стратегическая игра.

Программирование - Драйвер памяти.

Программирование - Двойное разрешение на ZX-Spectrum.

Советы хаккеру - Методика адаптирования авторских программ под систему TR-DOS (Методика взлома ZX-Format 8, Mortal Kombat).

Текстовые редакторы - Проблемы текстового ПО на Speccy.

Железо - 122 цвета на спектруме: FLASH генератор цветов для ПК "Байт".

Железо - Программируемый параллельный интерфейс КР580ВВ55А.

Technodrom-2 - История создания игры Technodrom'а.

Сетевая игра - Пошаговая Сетевая игра со спектрумовскими персонажами.

Письма - Спектрумисты на Могилевщине вымерли как мамонты.

Реклама - Реклама и объявления ...


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Стих - Стихотворение "Мечта".
Charts - current rules (fall edition 1999).
Программистам - Индикатор работы диска.
История - Пьянка с участием всех беларусских групп: ICE/PHD
Разное - глюкотня!

В этот день...   21 ноября