Логотип.
 Разделы сайта Cтатьи.
Сайт в разработке!

Статистика сайта.

Посещений за день: 208
Посещений за месяц: 2337
Посещений за год: 19555


Баннеры.

DMconnect
Maksy's PWS


Статистика в картинках.

likes counter


  • Главная.
  • Новости.
  • Программы.
  • Файлы.
  • Контакты.
  • Чат "Пиво".
  • Статьи.
  • Ссылки.
  • Гостевая.
  • Перехват Reset-a на 128 КБ машинах.

     Многие, поиграв в игру "Double Xinox" и нажав в ней на Reset, пришли в полное недоумение, увидев надпись, подтверждающую ваше решение сбросить программу, причём не на Scorpion'е, а на обыкновенном 128-м!

     К моему глубокому удивлению, среди этих многих оказались некоторые программисты и хакеры... Секрет этого "глюка" настолько прост, что мне просто неудобно говорить о нём, но всё-таки я это сделаю.

     Как известно, в 128К компьютере имеются две области памяти, отведённые под экран: стандартная - с адреса _#4000_ в основном поле памяти, и дополнительная - с адреса _#C000_ в банке RAM7. Выбирать нужный экран надо через порт _#7FFD_, сбрасывая или устанавливая третий бит. Если бит установить, то будет отображаться второй экран (RAM7), если его сбросить, то стандартный (RAM5).

     Теперь о Reset'е. При приходе сигнала reset аппаратно устанавливается стандартный экран, который очищается программой инициализации, расположенной в свою очередь с адреса _#0000_ в ПЗУ в момент отжатия кнопки "RESET".

     Таким образом, если использовать в программе только дополнительный экран, а в основной поместить какое угодно сообщение, то при Reset'е оно появится! В DOUBLE XINOX'е, например, сообщение находится в области атрибутов в целях экономии памяти.

                    ORG 30000
            START   DI
                    LD A,23
                    CALL MEMORY
                    LD HL,49152
                    CALL CLS
                    LD HL,16384
                    CALL CLS
                    LD A,23+8
                    CALL MEMORY
                    LD HL,TEXT
                    LD DE,22528+256
                    LD BC,32*7
                    LDIR
            LOOP    JR LOOP
            MEMORY  LD BC,32765
                    OUT (C),A
                    RET
            CLS     LD E,L
                    LD D,H
                    INC E
                    LD BC,6911
                    LD (HL),L
                    LDIR
                    RET
    
                    ;12345678901234567890123456789012
            TEXT DM "                                "
                 DM " @@@@@  @@@@@  @@@@ @@@@@ @@@@@ "
                 DM " @   @  @     @     @       @   "
                 DM " @@@@@  @@@@@  @@@  @@@@@   @   "
                 DM " @  @   @         @ @       @   "
                 DM " @   @  @@@@@ @@@@  @@@@@   @   "
                 DM "                                "
    

    >>

    BitByByte, 2000г. (2025).