DonNews #07
23 апреля 1999

Кодинг - Определение номера страницы верхней памяти.

<b>Кодинг</b> - Определение номера страницы верхней памяти.
──────────────────────────────────────────
Snake\OHG

                 Кодинг.

   Кодинг,это конечно,громко сказано.Здесь
будет  просто  одна  небольшая  програмка,
которая,   думаю,    кому-нибудь     может
пригодиться.
   Когда я писал одну небольшую прогу  под
кэш, с  помощью  которой  при  нажатии  на
Magic можно было запустить boot, или войти
в STS  (сначала  я  хотел  в  этот  раздел
поместить её, но потом передумал, но  если
кто-нибудь захочет, то в  следующий  номер
можно поместить и  её). При  входе  в  STS
сохранялись все регистры, адрес прерванной
программы, адрес стека, но номер  страницы
верхней  памяти   взять   было   неоткуда.
Поэтому пришлось определять её програмно.

   Вот и листинг этой программы:

FPG     LD      DE,(#C000)
        LD      BC,#7FFD
        LD      #C000,BC
        LD      A,#D7
FPG1    INC     A
        BIT     3,A
        JR      Z,FPG2
        ADD     A,#38
FPG2    OUT     A
        LD      HL,(#C000)
        AND     A
        SBC     HL,BC
        JR      NZ,FPG1
        LD      #C000,DE
        ...

   Немного   пояснений:  в   регистре   DE
запоминается 2  байта  с  адреса  #C000, в
регистре  A  номер  страницы   с   которой
начинается поиск, #D7 - чтобы  при  первом
сложении  получить  #10   (так   программа
занимает на  2  байта  меньше). По  адресу
#C000  заносятся  два  байта  #FD, #7F, по
которым  будем  искать  нужную   страницу.
Затем  начинаем  по  порядку   переключать
страницы и сравнивать два байта по  адресу
#C000 с содержимым регистра BC, как только
всё  совпало, то   страница   найдена.  На
выходе в регистре A будет находиться номер
страницы при  которой  была  запущена  эта
программа.
   Программа занимает  всего  34  байта  и
расчитана на 512кб с расширением  по  двум
старшим битам порта #7FFD.Строка ADD A,#38
предназначена для того, чтобы обнулить  3й
бит и увеличить  на  1  два  старших  бита
регистра  A, которые   будут   переключать
дополнительную память.
   Естественно, на 128й  машине  программа
будет так-же работать нормально.
   Недостатки: всётаки   может   получится
так,что байты #FD, #7F, по которым ведётся
поиск, могут быть  и  в  другой  странице.
Тогда, если её  номер  меньше, определение
происходит  неправильно,  и   в   странице
которую  надо  было  найти  испортится   2
байта.
   Ну и конечно, никак не определишь какой
был включен экран.

   P.S: OUT A = OUT (C),A
        LD #C000,BC = LD (#C000),BC
        XAS = RULEZ.



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

Предисловие - Новая оболочка у газеты.

Мнение - NEOS - как он есть.

Описание - Как пройти игру Last Hero.

Кодинг - Определение номера страницы верхней памяти.

Защита ВГ93 - Продлим жизнь ВГ'шкам.

Новье - О новинках: Demo or Die #1, Best View v2.7, Hrust v1.2/v2.1, Real Commander v1.7, Японский кроссворд.

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


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

Похожие статьи:
Ассемблер - Совместное использование ZX ASM 3.0 и STS 5.1.
Разное - Самая большая рыба, пойманая когда-либо удочкой...
заключение - авторы и т.д.
От авторов - Редакция.
Вступление - мы решили разместить юмористический рассказ.

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